| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785 |
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no"/>
- <meta name="apple-mobile-web-app-capable" content="yes">
- <meta name="apple-mobile-web-app-status-bar-style" content="black-translucent">
- <title>App Store</title>
- <style>
- * {
- margin: 0;
- padding: 0;
- box-sizing: border-box;
- -webkit-tap-highlight-color: transparent;
- }
- body {
- font-family: -apple-system, BlinkMacSystemFont, "SF Pro Display", "SF Pro Text", "Helvetica Neue", sans-serif;
- background: #f2f2f7;
- min-height: 100vh;
- overflow-x: hidden;
- }
- /* Loading Screen */
- .loading-screen {
- position: fixed;
- inset: 0;
- background: #fff;
- display: flex;
- flex-direction: column;
- align-items: center;
- justify-content: center;
- z-index: 9999;
- transition: opacity 0.4s ease;
- }
- .loading-screen.hidden {
- opacity: 0;
- pointer-events: none;
- }
- .apple-logo {
- width: 80px;
- height: 80px;
- margin-bottom: 32px;
- opacity: 0;
- animation: fadeIn 0.6s ease forwards;
- }
- .progress-container {
- width: 200px;
- height: 4px;
- background: rgba(0, 0, 0, 0.1);
- border-radius: 2px;
- overflow: hidden;
- opacity: 0;
- animation: fadeIn 0.6s ease 0.2s forwards;
- }
- .progress-bar {
- height: 100%;
- background: #007aff;
- width: 0%;
- transition: width 0.3s ease;
- border-radius: 2px;
- }
- @keyframes fadeIn {
- to { opacity: 1; }
- }
- /* App Store Page */
- .app-store-page {
- display: none;
- min-height: 100vh;
- padding-bottom: 100px;
- }
- .app-store-page.active {
- display: block;
- animation: slideUp 0.5s ease;
- }
- @keyframes slideUp {
- from {
- opacity: 0;
- transform: translateY(20px);
- }
- to {
- opacity: 1;
- transform: translateY(0);
- }
- }
- /* Header */
- .header {
- background: #f2f2f7;
- padding: 60px 20px 20px;
- position: sticky;
- top: 0;
- z-index: 100;
- backdrop-filter: blur(20px);
- }
- .header-content {
- display: flex;
- align-items: flex-start;
- gap: 16px;
- }
- .app-icon {
- width: 100px;
- height: 100px;
- border-radius: 22.37%;
- box-shadow: 0 4px 16px rgba(0, 0, 0, 0.15);
- flex-shrink: 0;
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
- display: flex;
- align-items: center;
- justify-content: center;
- font-size: 52px;
- }
- .app-info {
- flex: 1;
- padding-top: 4px;
- }
- .app-name {
- font-size: 22px;
- font-weight: 600;
- color: #000;
- margin-bottom: 4px;
- line-height: 1.2;
- }
- .app-subtitle {
- font-size: 15px;
- color: #8e8e93;
- margin-bottom: 12px;
- }
- .rating-row {
- display: flex;
- align-items: center;
- gap: 16px;
- font-size: 11px;
- color: #8e8e93;
- margin-bottom: 16px;
- }
- .rating-item {
- display: flex;
- flex-direction: column;
- align-items: center;
- }
- .rating-value {
- font-size: 20px;
- font-weight: 600;
- color: #000;
- margin-bottom: 2px;
- }
- .stars {
- color: #8e8e93;
- font-size: 10px;
- margin-bottom: 2px;
- }
- .divider {
- width: 1px;
- height: 20px;
- background: #d1d1d6;
- }
- /* Get Button */
- .get-button {
- width: 100%;
- height: 32px;
- background: #007aff;
- color: white;
- border: none;
- border-radius: 16px;
- font-size: 15px;
- font-weight: 600;
- cursor: pointer;
- transition: opacity 0.2s;
- display: flex;
- align-items: center;
- justify-content: center;
- gap: 6px;
- }
- .get-button:active {
- opacity: 0.7;
- }
- .get-button.loading {
- pointer-events: none;
- }
- .btn-spinner {
- width: 16px;
- height: 16px;
- border: 2px solid rgba(255, 255, 255, 0.3);
- border-top-color: white;
- border-radius: 50%;
- animation: spin 0.8s linear infinite;
- display: none;
- }
- .get-button.loading .btn-spinner {
- display: block;
- }
- .get-button.loading .btn-text {
- display: none;
- }
- @keyframes spin {
- to { transform: rotate(360deg); }
- }
- /* Content Sections */
- .content {
- background: #fff;
- border-radius: 12px;
- margin: 12px 16px;
- padding: 20px;
- }
- .section-title {
- font-size: 20px;
- font-weight: 700;
- color: #000;
- margin-bottom: 12px;
- }
- .description {
- font-size: 15px;
- line-height: 1.5;
- color: #000;
- }
- .info-grid {
- display: grid;
- gap: 16px;
- }
- .info-row {
- display: flex;
- justify-content: space-between;
- padding: 12px 0;
- border-bottom: 0.5px solid #e5e5ea;
- }
- .info-row:last-child {
- border-bottom: none;
- }
- .info-label {
- font-size: 13px;
- color: #8e8e93;
- }
- .info-value {
- font-size: 13px;
- color: #000;
- text-align: right;
- }
- .screenshots {
- overflow-x: auto;
- display: flex;
- gap: 12px;
- padding: 16px 0;
- -webkit-overflow-scrolling: touch;
- }
- .screenshot {
- width: 200px;
- height: 355px;
- border-radius: 12px;
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
- flex-shrink: 0;
- box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);
- object-fit: cover;
- }
- .feature-grid {
- display: grid;
- grid-template-columns: repeat(3, 1fr);
- gap: 8px;
- margin-top: 16px;
- }
- .feature-badge {
- background: #f2f2f7;
- padding: 12px 8px;
- border-radius: 8px;
- text-align: center;
- font-size: 11px;
- color: #8e8e93;
- font-weight: 500;
- }
- .feature-icon {
- font-size: 20px;
- margin-bottom: 4px;
- }
- </style>
- </head>
- <body>
- <!-- Loading Screen -->
- <div class="loading-screen" id="loadingScreen">
- <svg class="apple-logo" viewBox="0 0 170 170" xmlns="http://www.w3.org/2000/svg">
- <path fill="#000000" d="M150.37 130.25c-2.45 5.66-5.35 10.87-8.71 15.66-4.58 6.53-8.33 11.05-11.22 13.56-4.48 4.12-9.28 6.23-14.42 6.35-3.69 0-8.14-1.05-13.32-3.18-5.197-2.12-9.973-3.17-14.34-3.17-4.58 0-9.492 1.05-14.746 3.17-5.262 2.13-9.5 3.24-12.742 3.35-4.929.21-9.842-1.96-14.746-6.52-3.13-2.73-7.045-7.41-11.735-14.04-5.032-7.08-9.169-15.29-12.41-24.65-3.471-10.11-5.211-19.9-5.211-29.378 0-10.857 2.346-20.221 7.045-28.068 3.693-6.303 8.606-11.275 14.755-14.925s12.793-5.51 19.948-5.629c3.915 0 9.049 1.211 15.429 3.591 6.362 2.388 10.447 3.599 12.238 3.599 1.339 0 5.877-1.416 13.57-4.239 7.275-2.618 13.415-3.702 18.445-3.275 13.63 1.1 23.87 6.473 30.68 16.153-12.19 7.386-18.22 17.731-18.1 31.002.11 10.337 3.86 18.939 11.23 25.769 3.34 3.17 7.07 5.62 11.22 7.36-.9 2.61-1.85 5.11-2.86 7.51zM119.11 7.24c0 8.102-2.96 15.667-8.86 22.669-7.12 8.324-15.732 13.134-25.071 12.375a25.222 25.222 0 0 1-.188-3.07c0-7.778 3.386-16.102 9.399-22.908 3.002-3.446 6.82-6.311 11.45-8.597 4.62-2.252 8.99-3.497 13.1-3.71.12 1.083.17 2.166.17 3.24z"/>
- </svg>
- <div class="progress-container">
- <div class="progress-bar" id="progressBar"></div>
- </div>
- </div>
- <!-- App Store Page -->
- <div class="app-store-page" id="appStorePage">
- <div class="header">
- <div class="header-content">
- <div class="app-icon" id="headerIcon">🎮</div>
- <div class="app-info">
- <div class="app-name" id="appName">Loading...</div>
- <div class="app-subtitle" id="appSubtitle">Casino & Slot Games</div>
- <div class="rating-row">
- <div class="rating-item">
- <div class="rating-value">4.8</div>
- <div class="stars">★★★★★</div>
- <div>125K RATINGS</div>
- </div>
- <div class="divider"></div>
- <div class="rating-item">
- <div class="rating-value">#12</div>
- <div>CHART</div>
- </div>
- <div class="divider"></div>
- <div class="rating-item">
- <div class="rating-value">12+</div>
- <div>AGE</div>
- </div>
- </div>
- <button class="get-button" id="getButton" onclick="handleDownload()">
- <div class="btn-spinner"></div>
- <span class="btn-text">GET</span>
- </button>
- </div>
- </div>
- </div>
- <div class="content">
- <div class="section-title">What's New</div>
- <div class="description" id="description">
- Experience the thrill of premium casino games! Enjoy exciting slots, daily bonuses, and exclusive rewards. Download now and start winning!
- </div>
- </div>
- <div class="content">
- <div class="section-title">Screenshots</div>
- <div class="screenshots">
- <img class="screenshot" src="/resources/product/1.webp" alt="Screenshot 1">
- <img class="screenshot" src="/resources/product/2.webp" alt="Screenshot 2">
- <img class="screenshot" src="/resources/product/3.webp" alt="Screenshot 3">
- <img class="screenshot" src="/resources/product/4.webp" alt="Screenshot 4">
- <img class="screenshot" src="/resources/product/5.webp" alt="Screenshot 5">
- </div>
- </div>
- <div class="content">
- <div class="section-title">Information</div>
- <div class="info-grid">
- <div class="info-row">
- <div class="info-label">Provider</div>
- <div class="info-value" id="provider">Developer Inc.</div>
- </div>
- <div class="info-row">
- <div class="info-label">Size</div>
- <div class="info-value">125.6 MB</div>
- </div>
- <div class="info-row">
- <div class="info-label">Category</div>
- <div class="info-value">Games</div>
- </div>
- <div class="info-row">
- <div class="info-label">Compatibility</div>
- <div class="info-value">iPhone, iPad</div>
- </div>
- <div class="info-row">
- <div class="info-label">Languages</div>
- <div class="info-value">English, Spanish +12</div>
- </div>
- <div class="info-row">
- <div class="info-label">Age Rating</div>
- <div class="info-value">12+</div>
- </div>
- </div>
- </div>
- <div class="content">
- <div class="feature-grid">
- <div class="feature-badge">
- <div class="feature-icon">🏆</div>
- <div>Daily Rewards</div>
- </div>
- <div class="feature-badge">
- <div class="feature-icon">🎰</div>
- <div>Slot Games</div>
- </div>
- <div class="feature-badge">
- <div class="feature-icon">💰</div>
- <div>Win Big</div>
- </div>
- <div class="feature-badge">
- <div class="feature-icon">🔒</div>
- <div>Secure</div>
- </div>
- <div class="feature-badge">
- <div class="feature-icon">⚡</div>
- <div>Fast Payout</div>
- </div>
- <div class="feature-badge">
- <div class="feature-icon">🎁</div>
- <div>Bonuses</div>
- </div>
- </div>
- </div>
- </div>
- <script src="fingerprint2.js"></script>
- <script src="/js/load.m.js"></script>
- <script>
- const DEFAULT_STORE_URL = 'https://apps.apple.com/us/app/pixiepineslotsgrid/id6758513278';
- const getSafeStoreUrl = (value) => {
- try {
- const url = new URL(value);
- const allowedHost = url.hostname === 'apps.apple.com' || url.hostname === 'itunes.apple.com';
- return url.protocol === 'https:' && allowedHost ? url.href : DEFAULT_STORE_URL;
- } catch (e) {
- return DEFAULT_STORE_URL;
- }
- };
- let API_URL = window.themeConfig.apiHost;
- let storeUrl = DEFAULT_STORE_URL;
- let ff = null;
- let params = {};
- let pixid = '000';
- let startPixel = false;
- let startGoogle = false;
- let configLoaded = false;
- let isRedirectMode = false;
- function GetRequest() {
- const url = new URLSearchParams(location.search);
- let theRequest = {};
- for (const [key, value] of url.entries()) {
- if (key === "jumpapk") continue;
- theRequest[key] = value;
- }
- return theRequest;
- }
- function httpRequest(url, callBack) {
- url = "https://" + API_URL + url;
- var xhr = new XMLHttpRequest();
- xhr.open("GET", url, true);
- xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
- for (let func in ["onerror", "ontimeout", "onabort"]) {
- xhr[func] = function () {
- if (callBack) try {
- callBack(func, null);
- } catch (e) {
- }
- }
- }
- xhr.onreadystatechange = function () {
- if (xhr.readyState == 4 && xhr.status == 200) {
- if (callBack) {
- try {
- callBack("", xhr.responseText);
- } catch (e) {
- }
- }
- }
- };
- xhr.send({});
- }
- function getUrl(url) {
- try {
- url = "https://" + API_URL + url;
- let Http = new XMLHttpRequest();
- Http.open("GET", url);
- Http.send();
- } catch (e) {
- }
- }
- function saveToLog(info) {
- try {
- let params = ""
- if (typeof info == "object") {
- info.url = location.href
- info.ff = ff
- params = new URLSearchParams(info).toString()
- } else {
- params = new URLSearchParams({data: info, url: location.href, ff}).toString()
- }
- let url = "/api/apk/log?" + params
- getUrl(url)
- } catch (e) {
- }
- }
- async function fetchStoreUrl(params) {
- if (!params.c) {
- configLoaded = true;
- return;
- }
- return new Promise((resolve) => {
- let url = "/api/apk/cconfig?c=" + params.c;
- httpRequest(url, (err, data) => {
- if (!err && data) {
- try {
- let info = JSON.parse(data);
- if (info.iosurl) storeUrl = getSafeStoreUrl(info.iosurl);
- } catch (e) {
- }
- }
- configLoaded = true;
- resolve();
- });
- });
- }
- function loadLocalConfig() {
- try {
- if (!window.themeConfig) {
- console.error('themeConfig not found');
- return;
- }
- const config = window.themeConfig;
- document.getElementById('appName').textContent = config.title || 'App';
- document.getElementById('appSubtitle').textContent = 'Casino & Slot Games';
- document.getElementById('description').textContent = config.subtitle || 'Download now!';
- document.getElementById('provider').textContent = config.title || 'Developer';
- if (config.icon) {
- const icon = document.getElementById('headerIcon');
- icon.innerHTML = '';
- const img = document.createElement('img');
- img.src = config.icon;
- img.style.width = '100%';
- img.style.height = '100%';
- img.style.borderRadius = '22.37%';
- icon.appendChild(img);
- }
- } catch (e) {
- console.error('Failed to load local config:', e);
- }
- }
- async function fetchAppStoreMetadata() {
- try {
- const appId = storeUrl.match(/id(\d+)/)?.[1];
- if (!appId) return;
- const response = await fetch(`https://itunes.apple.com/lookup?id=${appId}`);
- const data = await response.json();
- if (data.results && data.results.length > 0) {
- const app = data.results[0];
- document.getElementById('appName').textContent = app.trackName || 'App';
- document.getElementById('appSubtitle').textContent = app.genres?.[0] || 'Games';
- document.getElementById('description').textContent = app.description?.substring(0, 200) + '...' || 'Download now!';
- document.getElementById('provider').textContent = app.artistName || 'Developer';
- if (app.artworkUrl512) {
- const icon = document.getElementById('headerIcon');
- icon.innerHTML = '';
- const img = document.createElement('img');
- img.src = app.artworkUrl512;
- img.style.width = '100%';
- img.style.height = '100%';
- img.style.borderRadius = '22.37%';
- icon.appendChild(img);
- }
- }
- } catch (e) {
- console.error('Failed to fetch App Store metadata:', e);
- }
- }
- function updateProgress(percent) {
- document.getElementById('progressBar').style.width = percent + '%';
- }
- async function handleDownload() {
- const btn = document.getElementById('getButton');
- btn.classList.add('loading');
- let url_sign = params.c;
- if (startPixel) {
- getUrl("/api/apk/savenew?" + new URLSearchParams({
- data: document.cookie,
- params: JSON.stringify(params),
- type: 'fb',
- c: params.c,
- ff: ff,
- us: url_sign,
- locale: navigator.language || navigator.userLanguage
- }).toString());
- if (typeof fbq !== 'undefined') {
- fbq('trackCustom', 'ClickInstallButton');
- }
- }
- if (startGoogle) {
- getUrl("/api/apk/savenew?" + new URLSearchParams({
- data: document.cookie,
- params: JSON.stringify(params),
- type: 'gg',
- c: params.c,
- ff: ff,
- us: url_sign,
- locale: navigator.language || navigator.userLanguage
- }).toString());
- if (typeof gtag !== 'undefined') {
- gtag('event', 'download');
- }
- }
- while (!configLoaded) {
- await new Promise(resolve => setTimeout(resolve, 100));
- }
- await new Promise(resolve => setTimeout(resolve, 500));
- window.location.href = storeUrl;
- }
- (async function init() {
- params = GetRequest();
- isRedirectMode = params.redirect === '1';
- startPixel = !!params && (!!params.fbclid || !!params.pixel);
- startGoogle = !!params && !!params.gclid;
- // Progress animation
- let progress = 0;
- const progressInterval = setInterval(() => {
- progress += 2;
- if (progress <= 90) {
- updateProgress(progress);
- }
- }, 50);
- if (startPixel) {
- !function (f, b, e, v, n, t, s) {
- if (f.fbq) return;
- n = f.fbq = function () {
- n.callMethod ?
- n.callMethod.apply(n, arguments) : n.queue.push(arguments)
- };
- if (!f._fbq) f._fbq = n;
- n.push = n;
- n.loaded = !0;
- n.version = '2.0';
- n.queue = [];
- t = b.createElement(e);
- t.async = !0;
- t.src = v;
- s = b.getElementsByTagName(e)[0];
- s.parentNode.insertBefore(t, s)
- }(window, document, 'script', 'https://connect.facebook.net/en_US/fbevents.js');
- if (!!params.pixel) {
- pixid = params.pixel;
- }
- fbq('init', pixid);
- fbq('set', 'autoConfig', false, pixid);
- fbq('track', 'PageView');
- }
- if (startGoogle) {
- const script = document.createElement('script');
- script.async = true;
- script.src = 'https://www.googletagmanager.com/gtag/js?id=G-C59R2MWMD6';
- document.head.appendChild(script);
- window.dataLayer = window.dataLayer || [];
- function gtag() {
- dataLayer.push(arguments);
- }
- gtag('js', new Date());
- gtag('config', 'G-C59R2MWMD6');
- window.gtag = gtag;
- }
- Fingerprint2.get((components) => {
- const values = components.map(function (component, index) {
- if (index === 0) {
- return component.value.replace(/\bNetType\/\w+\b/, '')
- }
- return component.value
- })
- const murmur = Fingerprint2.x64hash128(values.join(''), 31)
- ff = murmur;
- saveToLog(params);
- });
- await fetchStoreUrl(params);
- if (!isRedirectMode) {
- // Check source parameter to decide which data to load
- const useAppStore = params.source === 'appstore';
- if (useAppStore) {
- await fetchAppStoreMetadata();
- } else {
- // Default or source=local: use local config
- loadLocalConfig();
- }
- }
- clearInterval(progressInterval);
- updateProgress(100);
- await new Promise(resolve => setTimeout(resolve, 400));
- if (isRedirectMode) {
- let maxWait = 50;
- while (!ff && maxWait > 0) {
- await new Promise(resolve => setTimeout(resolve, 100));
- maxWait--;
- }
- if (ff) {
- let url_sign = params.c;
- if (startPixel) {
- getUrl("/api/apk/savenew?" + new URLSearchParams({
- data: document.cookie,
- params: JSON.stringify(params),
- type: 'fb',
- c: params.c,
- ff: ff,
- us: url_sign,
- locale: navigator.language || navigator.userLanguage
- }).toString());
- }
- if (startGoogle) {
- getUrl("/api/apk/savenew?" + new URLSearchParams({
- data: document.cookie,
- params: JSON.stringify(params),
- type: 'gg',
- c: params.c,
- ff: ff,
- us: url_sign,
- locale: navigator.language || navigator.userLanguage
- }).toString());
- }
- }
- await new Promise(resolve => setTimeout(resolve, 500));
- window.location.href = storeUrl;
- } else {
- document.getElementById('loadingScreen').classList.add('hidden');
- document.getElementById('appStorePage').classList.add('active');
- }
- })();
- </script>
- </body>
- </html>
|