const JSON_HEADERS={'content-type':'application/json; charset=utf-8','cache-control':'no-store, max-age=0'};
const json=(value,status=200,extra={})=>new Response(JSON.stringify(value),{status,headers:{...JSON_HEADERS,...extra}});
const normalizeTarget=value=>{const code=String(value||'en').toLowerCase().replace('_','-').split('-')[0];return new Set(['id','en','ms','de','vi','zh','ja']).has(code)?code:'en'};
async function fetchWithTimeout(url,options={},timeout=16000){const controller=new AbortController();const timer=setTimeout(()=>controller.abort(),timeout);try{return await fetch(url,{...options,signal:controller.signal})}finally{clearTimeout(timer)}}
async function google(text,target){const params=new URLSearchParams({client:'gtx',sl:'auto',tl:target,dt:'t',q:text});const response=await fetchWithTimeout(`https://translate.googleapis.com/translate_a/single?${params}`,{headers:{accept:'application/json'}},16000);if(!response.ok)throw new Error(`google_${response.status}`);const data=await response.json();const value=Array.isArray(data?.[0])?data[0].map(row=>row?.[0]||'').join('').trim():'';if(!value)throw new Error('google_empty');return value}
async function myMemory(text,target){const source=/\b(?:yang|dan|untuk|dengan|dari|ke|pada|semua|pilih|buka|hapus|buat|tautan|kategori|status|laporan|proyek|riset|dokumen|kebijakan|persyaratan)\b/i.test(text)?'id':'en';const params=new URLSearchParams({q:text,langpair:`${source}|${target}`,mt:'1'});const response=await fetchWithTimeout(`https://api.mymemory.translated.net/get?${params}`,{headers:{accept:'application/json'}},16000);if(!response.ok)throw new Error(`mymemory_${response.status}`);const data=await response.json();const value=String(data?.responseData?.translatedText||'').trim();if(!value)throw new Error('mymemory_empty');return value}
async function translateRequest(request){const body=await request.json().catch(()=>({}));const text=String(body.text||'').trim().slice(0,2000),target=normalizeTarget(body.target);if(!text)return json({translatedText:'',target,provider:'none'});const errors=[];for(const [name,provider] of [['google',google],['mymemory',myMemory]]){try{return json({translatedText:await provider(text,target),target,provider:name})}catch(error){errors.push(String(error?.message||error))}}return json({error:'translation_unavailable',details:errors},502)}
async function assetResponse(request,env){let response=await env.ASSETS.fetch(request);if(response.status===404&&(request.headers.get('accept')||'').includes('text/html')){const url=new URL(request.url);url.pathname='/index.html';response=await env.ASSETS.fetch(new Request(url,request))}return response}
const __APU_V647_ORIGINAL_WORKER ={async fetch(request,env){const url=new URL(request.url);if(request.method==='OPTIONS'&&url.pathname.startsWith('/api/'))return new Response(null,{status:204,headers:{'access-control-allow-origin':'*','access-control-allow-methods':'GET,POST,PATCH,PUT,DELETE,OPTIONS','access-control-allow-headers':'content-type','access-control-max-age':'86400'}});if(url.pathname==='/api/apu-translate'&&request.method==='POST')return translateRequest(request);if(url.pathname==='/api/visit')return json({configured:false,total:null,counted:false});return assetResponse(request,env)}};

/* V6.47_ALL_PROJECTS_LEGAL_DIRECT_ROUTE
 * Privacy and Terms are returned directly by the Worker before ASSETS routing.
 * This avoids /privacy <-> /privacy.html and /terms <-> /terms.html canonical loops.
 */
const __APU_V647_LEGAL_HTML = {"privacy":"<!DOCTYPE html>\n\n<html data-apu-standalone-project=\"computer-vision\" data-scroll-theme=\"legal\" lang=\"id\"><head>\n<link rel=\"stylesheet\" href=\"/assets/apu-dialog-v6-42.css?v=20260622.642\">\n<script defer src=\"/assets/apu-dialog-v6-42.js?v=20260622.642\"></script>\n<meta content=\"computer-vision\" name=\"apu-standalone-project\"/><script>window.__APU_STANDALONE__={\"slug\": \"computer-vision\", \"title\": \"Computer Vision Research Hub\", \"version\": \"6.34\"};</script><meta content=\"6.26-focus-two-cv-overview-pulled-down\" name=\"apu-package-version\"/><meta charset=\"utf-8\"/><meta content=\"width=device-width,initial-scale=1,viewport-fit=cover\" name=\"viewport\"/><title>Kebijakan Privasi | AI Project Universe</title>\n<meta name=\"theme-color\" content=\"#FFD94D\"/>\n<link rel=\"icon\" href=\"/favicon.ico?v=624\" sizes=\"any\"/>\n<link rel=\"icon\" href=\"/favicon.svg?v=624\" type=\"image/svg+xml\"/>\n<link rel=\"apple-touch-icon\" href=\"/icons/apple-touch-icon-180.png?v=624\"/>\n<link rel=\"manifest\" href=\"/site.webmanifest?v=624\"/>\n<script>window.__APU_V624_BASE__=\"/\";</script>\n<link href=\"/assets/v624-layout-favicon-fix.css\" rel=\"stylesheet\"/>\n<meta content=\"Kebijakan Privasi AI Project Universe mengenai cookie, penghitung pengunjung, analitik, dan permintaan akses arsip.\" name=\"description\"/><link href=\"/assets/legal.css\" rel=\"stylesheet\"/><link href=\"/assets/privacy-consent.css\" rel=\"stylesheet\"/> <link href=\"/assets/scroll-system.css\" rel=\"stylesheet\"/>\n<link href=\"/assets/v610-mobile-ui-final-fix.css\" rel=\"stylesheet\"><link href=\"/assets/v612-single-language-incident-clean.css\" rel=\"stylesheet\"><link href=\"/assets/v615-mobile-height-ai-drawer.css\" rel=\"stylesheet\"><link href=\"/assets/v619-dark-theme-readable.css\" rel=\"stylesheet\"><link href=\"/assets/v620-privacy-protected-black-text.css\" rel=\"stylesheet\"/></link></link></link></link><link href=\"/assets/v626-mobile-design-preserving-fix.css\" rel=\"stylesheet\"/><link href=\"/assets/v629-mobile-navigation-route-icon-fix.css\" rel=\"stylesheet\"/><link href=\"/assets/v630-mobile-menu-translation-dark-fix.css\" rel=\"stylesheet\"/><link href=\"/assets/v631-overview-visible-fix.css\" rel=\"stylesheet\"/><link href=\"/assets/v635-cv-overview-pulled-down.css\" rel=\"stylesheet\"/><link href=\"/assets/v626-project-footer.css\" rel=\"stylesheet\"/><link href=\"/assets/v636-two-project-footer.css\" rel=\"stylesheet\"/><link href=\"/assets/v633-translation-status-nonblocking.css\" rel=\"stylesheet\"/><link rel=\"stylesheet\" href=\"/assets/v634-standalone-core.css?v=20260621.634\"/><link rel=\"stylesheet\" href=\"/assets/v631-legal-language.css?v=20260621.631\"/></head>\n<body class=\"apu-legal\"><header class=\"apu-legal-header\"><a href=\"/\">✦ AI PROJECT UNIVERSE</a><nav><a href=\"/\">Website</a><a aria-current=\"page\" href=\"/privacy.html\">Privasi</a><a href=\"/terms.html\">Persyaratan</a></nav></header>\n<main class=\"apu-legal-main\"><section class=\"apu-legal-hero\"><span class=\"apu-legal-badge\">BERLAKU: 15 Juni 2026</span><h1>Kebijakan Privasi</h1><p>Kebijakan ini menjelaskan pilihan cookie, penghitung pengunjung, data teknis yang diproses saat website digunakan, dan cara meminta akses ke arsip proyek yang dilindungi.</p></section>\n<article class=\"apu-legal-article\">\n<div class=\"apu-legal-callout\"><strong>Pilihan tetap milik pengunjung.</strong> Website dapat dilihat dengan cookie esensial saja. Cookie analitik hanya dipakai setelah tombol “Allow cookies &amp; continue” dipilih.</div>\n<h2>1. Pengelola dan kontak</h2><p>Website AI Project Universe dikelola untuk menampilkan portofolio proyek. Pertanyaan privasi dan permintaan akses arsip dapat dikirim ke <a href=\"mailto:yirassssindaba@gmail.com\">yirassssindaba@gmail.com</a>.</p>\n<h2>2. Data yang dapat diproses</h2><ul><li><strong>Cookie persetujuan</strong> untuk menyimpan pilihan “analytics” atau “essential” hingga 180 hari.</li><li><strong>Cookie pengunjung acak</strong> setelah persetujuan analitik, untuk mencegah satu browser menambah penghitung publik berulang kali. Cookie ini tidak berisi nama, email, atau alamat IP dan berlaku hingga 365 hari.</li><li><strong>Jumlah agregat pengunjung</strong> yang disimpan di Cloudflare D1 jika pemilik telah mengaktifkan binding <code>VISITOR_DB</code>.</li><li><strong>Data permintaan standar</strong> yang dapat diproses oleh penyedia hosting dan keamanan Cloudflare untuk mengirimkan website, seperti informasi koneksi dan permintaan HTTP.</li><li><strong>Isi email</strong> yang Anda kirim secara sukarela ketika meminta kata sandi atau menghubungi pengelola.</li></ul>\n<h2>3. Tujuan penggunaan</h2><p>Data digunakan untuk menyimpan pilihan privasi, menampilkan jumlah pengunjung agregat, menjaga fungsi dan keamanan website, menanggapi permintaan akses, serta mengevaluasi performa halaman.</p>\n<h2>4. Cloudflare Web Analytics</h2><p>Pemilik dapat mengaktifkan Cloudflare Web Analytics melalui dashboard Pages. Fitur ini dipisahkan dari penghitung publik buatan website. Pengaktifan dan konfigurasi akhir berada di dashboard Cloudflare milik pemilik.</p>\n<h2>4A. Pemutar musik YouTube</h2><p>Fitur musik hanya memuat pemutar resmi YouTube setelah pengunjung menekan tombol musik atau membuka project viewer melalui interaksi pengguna. Pemutar menggunakan domain peningkatan privasi <code>youtube-nocookie.com</code>; YouTube tetap dapat memproses data teknis sesuai kebijakannya ketika pemutar dimuat atau digunakan. Pengunjung dapat menghentikan pemutar kapan saja.</p>\n<h2>5. Arsip ZIP dan kata sandi</h2><p>Arsip proyek menggunakan enkripsi AES-256 dengan kata sandi berbeda untuk setiap arsip. Kata sandi tidak disimpan di HTML, JavaScript, Worker, GitHub, atau paket deployment publik. Calon penerima harus menghubungi <a href=\"mailto:yirassssindaba@gmail.com\">yirassssindaba@gmail.com</a>, menyebut nama proyek dan tujuan penggunaan, lalu menunggu keputusan pemilik.</p>\n<h2>6. Penyimpanan dan penghapusan</h2><p>Cookie persetujuan berlaku paling lama 180 hari dan cookie identifikasi acak paling lama 365 hari, kecuali dihapus lebih dahulu melalui pengaturan browser. Data email dipertahankan selama diperlukan untuk menangani permintaan dan catatan akses. Permintaan penghapusan dapat dikirim melalui email kontak.</p>\n<h2>7. Berbagi data</h2><p>Data tidak dijual. Data teknis dapat diproses oleh Cloudflare sebagai penyedia hosting, keamanan, database, dan analitik sesuai konfigurasi yang digunakan pemilik.</p>\n<h2>8. Hak dan pilihan Anda</h2><p>Anda dapat memilih cookie esensial saja, membuka kembali pengaturan cookie, menghapus cookie melalui browser, atau menghubungi pemilik mengenai akses, koreksi, maupun penghapusan data yang Anda kirimkan melalui email.</p>\n<h2>9. Perubahan</h2><p>Kebijakan dapat diperbarui ketika fitur atau layanan berubah. Tanggal berlaku terbaru ditampilkan di bagian atas halaman.</p>\n<h2>10. Catatan implementasi</h2><p>Dokumen ini merupakan template operasional untuk proyek portofolio, bukan sertifikasi kepatuhan hukum. Pemilik sebaiknya meninjau aturan yang berlaku di wilayah operasi sebelum penggunaan produksi berskala besar.</p>\n</article></main><footer class=\"apu-legal-footer\"><p>AI Project Universe · Updated 15 Juni 2026</p><p class=\"apu-legal-links\"><a href=\"/privacy.html\">Kebijakan Privasi</a><a href=\"/terms.html\">Persyaratan Layanan</a><button class=\"apu-cookie-settings\" data-cookie-settings=\"\" type=\"button\">Pengaturan cookie</button><a href=\"mailto:yirassssindaba@gmail.com\">yirassssindaba@gmail.com</a></p></footer><script src=\"/assets/v621-static-direct-upload.js\"></script><script defer=\"\" src=\"/assets/privacy-consent.js\"></script> <script defer=\"\" src=\"/assets/scroll-system.js\"></script>\n<script defer=\"\" src=\"/assets/v610-mobile-ui-final-fix.js\"></script><script defer=\"\" src=\"/assets/v612-single-language-incident-clean.js\"></script><script defer=\"\" src=\"/assets/v615-mobile-height-ai-drawer.js\"></script><script defer=\"\" src=\"/assets/v619-dark-theme-readable.js\"></script><script defer=\"\" src=\"/assets/v618-dark-theme-contrast.js\"></script><script defer=\"\" src=\"/assets/v620-privacy-protected-black-text.js\"></script><script defer src=\"/assets/v624-layout-favicon-fix.js\"></script>\n<script defer src=\"/assets/v626-mobile-design-preserving-fix.js\"></script><script defer src=\"/assets/v629-mobile-navigation-route-icon-fix.js\"></script><script defer src=\"/assets/v630-mobile-menu-translation-dark-fix.js\"></script><script defer src=\"/assets/v631-overview-visible-fix.js\"></script><script defer src=\"/assets/v635-cv-overview-pulled-down.js\"></script><script id=\"apuProjectFooterConfig\" type=\"application/json\">{\"slug\": \"computer-vision\", \"code\": \"P—01\", \"line1\": \"COMPUTER VISION\", \"line2\": \"IMAGE CLASSIFICATION\", \"accent\": \"#FFD94D\"}</script><script defer src=\"/assets/v626-project-footer.js\"></script><script defer src=\"/assets/v636-two-project-footer.js\"></script><script defer src=\"/assets/v634-standalone-core.js?v=20260621.634\"></script><script defer src=\"/assets/v631-complete-project-translation.js?v=20260621.631\"></script><script defer src=\"/assets/v631-legal-language.js?v=20260621.631\"></script></body></html>","terms":"<!DOCTYPE html>\n\n<html data-apu-standalone-project=\"computer-vision\" data-scroll-theme=\"legal\" lang=\"id\"><head>\n<link rel=\"stylesheet\" href=\"/assets/apu-dialog-v6-42.css?v=20260622.642\">\n<script defer src=\"/assets/apu-dialog-v6-42.js?v=20260622.642\"></script>\n<meta content=\"computer-vision\" name=\"apu-standalone-project\"/><script>window.__APU_STANDALONE__={\"slug\": \"computer-vision\", \"title\": \"Computer Vision Research Hub\", \"version\": \"6.34\"};</script><meta content=\"6.26-focus-two-cv-overview-pulled-down\" name=\"apu-package-version\"/><meta charset=\"utf-8\"/><meta content=\"width=device-width,initial-scale=1,viewport-fit=cover\" name=\"viewport\"/><title>Persyaratan Layanan | AI Project Universe</title>\n<meta name=\"theme-color\" content=\"#FFD94D\"/>\n<link rel=\"icon\" href=\"/favicon.ico?v=624\" sizes=\"any\"/>\n<link rel=\"icon\" href=\"/favicon.svg?v=624\" type=\"image/svg+xml\"/>\n<link rel=\"apple-touch-icon\" href=\"/icons/apple-touch-icon-180.png?v=624\"/>\n<link rel=\"manifest\" href=\"/site.webmanifest?v=624\"/>\n<script>window.__APU_V624_BASE__=\"/\";</script>\n<link href=\"/assets/v624-layout-favicon-fix.css\" rel=\"stylesheet\"/>\n<meta content=\"Persyaratan Layanan AI Project Universe dan aturan akses arsip proyek terenkripsi.\" name=\"description\"/><link href=\"/assets/legal.css\" rel=\"stylesheet\"/><link href=\"/assets/privacy-consent.css\" rel=\"stylesheet\"/> <link href=\"/assets/scroll-system.css\" rel=\"stylesheet\"/>\n<link href=\"/assets/v610-mobile-ui-final-fix.css\" rel=\"stylesheet\"><link href=\"/assets/v612-single-language-incident-clean.css\" rel=\"stylesheet\"><link href=\"/assets/v615-mobile-height-ai-drawer.css\" rel=\"stylesheet\"><link href=\"/assets/v619-dark-theme-readable.css\" rel=\"stylesheet\"><link href=\"/assets/v620-privacy-protected-black-text.css\" rel=\"stylesheet\"/></link></link></link></link><link href=\"/assets/v626-mobile-design-preserving-fix.css\" rel=\"stylesheet\"/><link href=\"/assets/v629-mobile-navigation-route-icon-fix.css\" rel=\"stylesheet\"/><link href=\"/assets/v630-mobile-menu-translation-dark-fix.css\" rel=\"stylesheet\"/><link href=\"/assets/v631-overview-visible-fix.css\" rel=\"stylesheet\"/><link href=\"/assets/v635-cv-overview-pulled-down.css\" rel=\"stylesheet\"/><link href=\"/assets/v626-project-footer.css\" rel=\"stylesheet\"/><link href=\"/assets/v636-two-project-footer.css\" rel=\"stylesheet\"/><link href=\"/assets/v633-translation-status-nonblocking.css\" rel=\"stylesheet\"/><link rel=\"stylesheet\" href=\"/assets/v634-standalone-core.css?v=20260621.634\"/><link rel=\"stylesheet\" href=\"/assets/v631-legal-language.css?v=20260621.631\"/></head>\n<body class=\"apu-legal\"><header class=\"apu-legal-header\"><a href=\"/\">✦ AI PROJECT UNIVERSE</a><nav><a href=\"/\">Website</a><a href=\"/privacy.html\">Privasi</a><a aria-current=\"page\" href=\"/terms.html\">Persyaratan</a></nav></header>\n<main class=\"apu-legal-main\"><section class=\"apu-legal-hero\" style=\"background:#888888\"><span class=\"apu-legal-badge\">BERLAKU: 15 Juni 2026</span><h1>Persyaratan Layanan</h1><p>Ketentuan penggunaan website, demo portofolio, dan arsip ZIP proyek yang dilindungi kata sandi.</p></section>\n<article class=\"apu-legal-article\">\n<div class=\"apu-legal-callout\"><strong>Unduhan bukan persetujuan akses.</strong> File ZIP dapat diunduh, tetapi kata sandi hanya diberikan setelah permintaan melalui email ditinjau dan disetujui pemilik.</div>\n<h2>1. Penerimaan ketentuan</h2><p>Dengan menggunakan website atau mengunduh arsip, Anda menyetujui ketentuan ini dan <a href=\"/privacy.html\">Kebijakan Privasi</a>. Bila tidak setuju, jangan menggunakan fitur unduhan yang dilindungi.</p>\n<h2>2. Tujuan website</h2><p>Website merupakan portofolio dan demonstrasi teknis. Beberapa fungsi memakai data contoh, penyimpanan browser, atau simulasi. Konten tidak menjamin kesesuaian untuk keputusan medis, hukum, keuangan, keamanan, atau produksi.</p>\n<h2>3. Prosedur akses ZIP</h2><ol><li>Kirim email ke <a href=\"mailto:yirassssindaba@gmail.com\">yirassssindaba@gmail.com</a>.</li><li>Sebutkan nama proyek, identitas atau organisasi yang relevan, dan tujuan penggunaan.</li><li>Tunggu pemeriksaan dan persetujuan pemilik.</li><li>Jika disetujui, gunakan kata sandi hanya untuk arsip yang disebutkan dan jangan membagikannya.</li></ol>\n<h2>4. Kata sandi dan otorisasi</h2><p>Setiap arsip memiliki kata sandi AES-256 yang berbeda. Kata sandi bersifat rahasia, tidak dapat dialihkan, dapat dirotasi atau dicabut, dan tidak memberikan kepemilikan atas konten. Tidak ada jaminan keamanan yang mutlak; perlindungan bergantung pada enkripsi, kerahasiaan kata sandi, perangkat penerima, serta praktik penyimpanan yang benar.</p>\n<h2>5. Penggunaan yang dilarang</h2><ul><li>Membagikan, menjual, menerbitkan, atau menaruh kata sandi di layanan publik.</li><li>Mencoba melewati kontrol akses, mengeksploitasi website, atau mengotomatisasi percobaan kata sandi tanpa izin tertulis.</li><li>Mendistribusikan ulang arsip atau menghapus pemberitahuan kepemilikan tanpa izin.</li><li>Menggunakan materi untuk penipuan, pelanggaran privasi, malware, atau aktivitas yang melanggar hukum.</li></ul>\n<h2>6. Hak cipta dan lisensi</h2><p>Kecuali dinyatakan lain di dalam proyek tertentu, hak atas susunan portofolio, dokumentasi, dan karya proyek tetap berada pada pemilik atau pemberi lisensi masing-masing. Akses untuk meninjau tidak otomatis menjadi lisensi komersial atau izin redistribusi.</p>\n<h2>6A. Media pihak ketiga</h2><p>Musik “Despacito” tidak disalin atau disertakan sebagai file di paket website. Fitur musik menampilkan pemutar resmi YouTube dan tunduk pada ketersediaan, kontrol, kebijakan, wilayah, serta hak yang dikelola oleh YouTube dan pemegang hak terkait.</p>\n<h2>7. Ketersediaan</h2><p>Website, penghitung, tautan, atau arsip dapat berubah, dihentikan, diperbaiki, atau diganti tanpa pemberitahuan. Pemilik dapat menolak permintaan akses berdasarkan risiko, tujuan penggunaan, atau informasi yang tidak memadai.</p>\n<h2>8. Batasan tanggung jawab</h2><p>Website dan demo disediakan “sebagaimana adanya” untuk pembelajaran dan evaluasi portofolio. Sejauh diizinkan hukum, pemilik tidak bertanggung jawab atas kerugian yang timbul dari penggunaan yang tidak tepat, konfigurasi pihak ketiga, kehilangan kata sandi, atau perubahan layanan eksternal.</p>\n<h2>9. Pelaporan masalah</h2><p>Laporkan tautan rusak, dugaan kebocoran kata sandi, atau masalah keamanan secara bertanggung jawab melalui <a href=\"mailto:yirassssindaba@gmail.com\">yirassssindaba@gmail.com</a>. Jangan mempublikasikan rahasia atau detail eksploitasi sebelum pemilik mempunyai kesempatan menanganinya.</p>\n<h2>10. Perubahan ketentuan</h2><p>Ketentuan dapat diperbarui. Versi terbaru berlaku sejak tanggal yang ditampilkan di halaman ini.</p>\n</article></main><footer class=\"apu-legal-footer\"><p>AI Project Universe · Updated 15 Juni 2026</p><p class=\"apu-legal-links\"><a href=\"/privacy.html\">Kebijakan Privasi</a><a href=\"/terms.html\">Persyaratan Layanan</a><button class=\"apu-cookie-settings\" data-cookie-settings=\"\" type=\"button\">Pengaturan cookie</button><a href=\"mailto:yirassssindaba@gmail.com\">yirassssindaba@gmail.com</a></p></footer><script src=\"/assets/v621-static-direct-upload.js\"></script><script defer=\"\" src=\"/assets/privacy-consent.js\"></script> <script defer=\"\" src=\"/assets/scroll-system.js\"></script>\n<script defer=\"\" src=\"/assets/v610-mobile-ui-final-fix.js\"></script><script defer=\"\" src=\"/assets/v612-single-language-incident-clean.js\"></script><script defer=\"\" src=\"/assets/v615-mobile-height-ai-drawer.js\"></script><script defer=\"\" src=\"/assets/v619-dark-theme-readable.js\"></script><script defer=\"\" src=\"/assets/v618-dark-theme-contrast.js\"></script><script defer=\"\" src=\"/assets/v620-privacy-protected-black-text.js\"></script><script defer src=\"/assets/v624-layout-favicon-fix.js\"></script>\n<script defer src=\"/assets/v626-mobile-design-preserving-fix.js\"></script><script defer src=\"/assets/v629-mobile-navigation-route-icon-fix.js\"></script><script defer src=\"/assets/v630-mobile-menu-translation-dark-fix.js\"></script><script defer src=\"/assets/v631-overview-visible-fix.js\"></script><script defer src=\"/assets/v635-cv-overview-pulled-down.js\"></script><script id=\"apuProjectFooterConfig\" type=\"application/json\">{\"slug\": \"computer-vision\", \"code\": \"P—01\", \"line1\": \"COMPUTER VISION\", \"line2\": \"IMAGE CLASSIFICATION\", \"accent\": \"#FFD94D\"}</script><script defer src=\"/assets/v626-project-footer.js\"></script><script defer src=\"/assets/v636-two-project-footer.js\"></script><script defer src=\"/assets/v634-standalone-core.js?v=20260621.634\"></script><script defer src=\"/assets/v631-complete-project-translation.js?v=20260621.631\"></script><script defer src=\"/assets/v631-legal-language.js?v=20260621.631\"></script></body></html>"};
function __apuV647LegalName(pathname){
  const path=(String(pathname||'/').replace(/\/{2,}/g,'/').replace(/\/+$/,'')||'/').toLowerCase();
  if(path==='/privacy'||path==='/privacy.html'||path==='/privacy/index.html')return 'privacy';
  if(path==='/terms'||path==='/terms.html'||path==='/terms/index.html')return 'terms';
  return null;
}
function __apuV647LegalResponse(request,name){
  const html=__APU_V647_LEGAL_HTML[name];
  if(typeof html!=='string'||!html)return new Response('Legal page unavailable.',{status:500,headers:{'content-type':'text/plain; charset=utf-8','cache-control':'no-store'}});
  const headers=new Headers({
    'content-type':'text/html; charset=utf-8',
    'cache-control':'no-store, no-cache, must-revalidate, max-age=0',
    'pragma':'no-cache',
    'expires':'0',
    'x-content-type-options':'nosniff',
    'x-apu-legal-route':'direct-v6.47'
  });
  return new Response(request.method==='HEAD'?null:html,{status:200,headers});
}
export default {
  async fetch(request,env,ctx){
    const url=new URL(request.url);
    const legalName=__apuV647LegalName(url.pathname);
    if((request.method==='GET'||request.method==='HEAD')&&legalName)return __apuV647LegalResponse(request,legalName);
    if(__APU_V647_ORIGINAL_WORKER&&typeof __APU_V647_ORIGINAL_WORKER.fetch==='function')return __APU_V647_ORIGINAL_WORKER.fetch(request,env,ctx);
    return new Response('Worker handler unavailable.',{status:500,headers:{'content-type':'text/plain; charset=utf-8','cache-control':'no-store'}});
  }
};
