premium omoggle script (fixed opponent score, color picker, language selector, FREE badge, control bar hidden by default, +/- buttons, resizable panel)
// ==UserScript==
// @name cheatmoggle
// @namespace https://omoggle.com/
// @version 13.6.2
// @description premium omoggle script (fixed opponent score, color picker, language selector, FREE badge, control bar hidden by default, +/- buttons, resizable panel)
// @match https://omoggle.com/*
// @match https://*.omoggle.com/*
// @grant unsafeWindow
// @run-at document-start
// ==/UserScript==
(function () {
'use strict';
const _window = (typeof unsafeWindow !== 'undefined') ? unsafeWindow : window;
// ══════════════════════════════════════════════════════════════
// MAX SCORE ENGINE — 3 hooks (vision-wasm, detectForVideo, signed-frame)
// Feeds a flawless face the server scores at your chosen value
// ══════════════════════════════════════════════════════════════
const MAX_LS_KEY = 'omog_max_v2';
const MAX_DEFAULTS = { enabled: true, mode: 'fixed', target: 9.6, rangeMin: 9.0, rangeMax: 9.9, wanderStep: 0.05, jitter: true, jitterAmt: 0.0008, stream: 'face_landmarks', logEveryN: 90 };
let MAX_CFG; try { MAX_CFG = Object.assign({}, MAX_DEFAULTS, JSON.parse(_window.localStorage.getItem(MAX_LS_KEY) || '{}')); } catch (e) { MAX_CFG = Object.assign({}, MAX_DEFAULTS); }
const maxSaveCfg = () => { try { _window.localStorage.setItem(MAX_LS_KEY, JSON.stringify(MAX_CFG)); } catch (e) {} };
const MAX_PARAMS = { FH:0.62, FW:0.3940, JW:0.3597, JY:0.26, EY:0.058, IH:0.05, EW:0.0969, EH:0.0290, T:0.0005, MOUTH:0.2103 };
function maxGenNorm(P) {
const lm=[]; for(let i=0;i<478;i++) lm.push({x:0.5,y:0.5,z:0});
const cx=0.5,cy=0.5,set=(li,ri,hw,yy)=>{lm[li]={x:cx-hw,y:yy,z:0};lm[ri]={x:cx+hw,y:yy,z:0};};
lm[10]={x:cx,y:cy-P.FH/2,z:0};lm[152]={x:cx,y:cy+P.FH/2,z:0};
lm[234]={x:cx-P.FW/2,y:cy,z:0};lm[454]={x:cx+P.FW/2,y:cy,z:0};
set(172,397,P.JW/2,cy+P.JY);set(150,379,P.JW/2,cy+P.JY*0.9);set(171,396,P.JW/2,cy+P.JY*1.1);
const eyeY=cy-P.EY;
lm[133]={x:cx-P.IH,y:eyeY,z:0};lm[33]={x:cx-P.IH-P.EW,y:eyeY-P.T,z:0};
lm[362]={x:cx+P.IH,y:eyeY,z:0};lm[263]={x:cx+P.IH+P.EW,y:eyeY-P.T,z:0};
const lcx=cx-P.IH-P.EW/2,rcx=cx+P.IH+P.EW/2;
lm[159]={x:lcx,y:eyeY-P.EH/2,z:0};lm[145]={x:lcx,y:eyeY+P.EH/2,z:0};
lm[386]={x:rcx,y:eyeY-P.EH/2,z:0};lm[374]={x:rcx,y:eyeY+P.EH/2,z:0};
lm[1]={x:cx,y:cy,z:0};lm[0]={x:cx,y:eyeY+P.MOUTH,z:0};
const fill=[[70,300,.18,-.12],[63,293,.14,-.14],[105,334,.10,-.16],[46,276,.20,-.10],[116,345,.22,.02],[123,352,.20,.06],[50,280,.18,.10],[187,411,.16,.16],[132,361,.24,0],[174,399,.06,.20],[136,365,.12,.20],[148,377,.08,.24],[176,401,.10,.22],[58,288,.22,-.04]];
for(const f of fill){lm[f[0]]={x:cx-f[2],y:cy+f[3],z:0};lm[f[1]]={x:cx+f[2],y:cy+f[3],z:0};}
return lm;
}
const _MAX_NORM = maxGenNorm(MAX_PARAMS);
const MAX_PEAK_D = {0:[0.00238,-0.00148],133:[-0.00537,-0.00507],159:[0.00489,0.00189],176:[0.00392,-0.00571],187:[0.00433,0.00566],293:[0.00167,-0.00274],352:[-0.00052,0.00213],362:[0.00571,0.00174],386:[0.00402,0.00377]};
const MAX_LOW_D = {0:[-0.00589,0.00354],33:[0.0024,-0.00215],50:[-0.00312,-0.00189],58:[-0.0075,-0.00572],105:[-0.00128,0.00165],116:[-0.00368,0.0027],123:[0.00578,0.00299],145:[0.00243,0.00522],159:[0.00304,-0.00501],171:[0.00375,-0.0019],263:[-0.00048,0.00605],300:[-0.00572,0.00073],334:[0.00191,-0.00197],352:[0.0001,0.00005],365:[0.00352,-0.0045],374:[0.00455,-0.00071],377:[0.00595,0.00473],379:[-0.00028,0.00566],386:[-0.00027,-0.016],399:[-0.00495,-0.00209],401:[0.00373,-0.00379]};
function maxApplyD(d){const a=_MAX_NORM.map(p=>({x:p.x,y:p.y,z:0}));for(const k in d)a[+k]={x:_MAX_NORM[+k].x+d[k][0],y:_MAX_NORM[+k].y+d[k][1],z:0};return a;}
const _MAX_LOW=maxApplyD(MAX_LOW_D),_MAX_PEAK=maxApplyD(MAX_PEAK_D);
function maxFaceL(L){return _MAX_LOW.map((p,i)=>({x:p.x+(_MAX_PEAK[i].x-p.x)*L,y:p.y+(_MAX_PEAK[i].y-p.y)*L,z:0}));}
const _MWP=[[33,263],[133,362],[70,300],[63,293],[105,334],[46,276],[116,345],[123,352],[50,280],[187,411],[132,361],[174,399],[150,379],[172,397],[136,365],[171,396],[148,377],[176,401],[58,288]];
const _MF=(a,b)=>Math.hypot(a.x-b.x,a.y-b.y),_ML2=(a,b)=>Math.atan2(b.y-a.y,b.x-a.x)*57.29578,_MO=(e,t,r)=>Math.max(t,Math.min(r,e));
const _MB=(e,t,r,a,n)=>e>=t&&e<=r?10:e<t?_MO((e-a)/(t-a)*10,0,10):_MO((n-e)/(n-r)*10,0,10);
function maxSimpleScore(p){
const m=-((_ML2(p[33],p[133])+_ML2(p[362],p[263]))/2);let jx=0;
for(const pr of[[172,397],[150,379],[171,396]]){const r=_MF(p[pr[0]],p[pr[1]]);if(r>jx)jx=r;}
const h=_MF(p[234],p[454]),f=_MF(p[10],p[152]),g=jx,b=f>0?g/f:0,v=(p[133].x+p[362].x)/2,w=(p[10].y+p[152].y)/2;
let _s=0;for(const pr of _MWP){const r=p[pr[0]],q=p[pr[1]];_s+=(h>0?Math.abs(Math.abs(r.x-v)-Math.abs(q.x-v))/h:0)+(f>0?Math.abs(Math.abs(r.y-w)-Math.abs(q.y-w))/f:0);}
const y=Math.round((1-_MO(_s/(2*_MWP.length)/.09,0,1))*100),k=(p[133].y+p[33].y)/2,j=(p[362].y+p[263].y)/2,Nl=(k+j)/2;
const C=Math.abs(p[0].y-Nl),S=f>0?C/f:0,E=g>0?_MF(p[234],p[454])/g:0,R=_MF(p[33],p[133]),Ih=_MF(p[159],p[145]),Mw=_MF(p[263],p[362]),Uh=_MF(p[386],p[374]);
const z=Math.max(.2,((R>0?Ih/R:0)+(Mw>0?Uh/Mw:0))/2),H=h>0?_MF(p[133],p[362])/h:0;
const G=_MB(m,2,6.5,-2,11),Y=_MB(b,.58,.78,.42,.96),q2=_MB(S,.27,.34,.2,.43),V=_MB(E,1.04,1.24,.86,1.48),K=_MB(z,.22,.3,.18,.43);
const J=Math.round((.18*Y+.24*q2+.18*V+.16*K+.24*_MB(H,.22,.31,.15,.42))*10)/10;
return _MO(.12*G+.14*Y+y/10*.24+.14*q2+.1*V+.08*K+.18*J,1.1,10);
}
const _MAX_TBL=[]; for(let L=0;L<=1.0001;L+=0.02)_MAX_TBL.push([L,maxSimpleScore(maxFaceL(L))]);
const MAX_SCORE_MIN=_MAX_TBL[0][1],MAX_SCORE_MAX=_MAX_TBL[_MAX_TBL.length-1][1];
function maxSolveL(score){
score=Math.max(MAX_SCORE_MIN,Math.min(MAX_SCORE_MAX,score));
for(let i=0;i<_MAX_TBL.length-1;i++){const a=_MAX_TBL[i],b=_MAX_TBL[i+1];if(score>=a[1]&&score<=b[1]){const f=(score-a[1])/((b[1]-a[1])||1);return a[0]+(b[0]-a[0])*f;}}
return 1;
}
let _maxTgt=null;
function maxNextBase(){
let target;
if(MAX_CFG.mode==='range'){const lo=Math.min(MAX_CFG.rangeMin,MAX_CFG.rangeMax),hi=Math.max(MAX_CFG.rangeMin,MAX_CFG.rangeMax);if(_maxTgt===null)_maxTgt=(lo+hi)/2;_maxTgt+=(Math.random()-.5)*MAX_CFG.wanderStep;if(_maxTgt<lo)_maxTgt=2*lo-_maxTgt;if(_maxTgt>hi)_maxTgt=2*hi-_maxTgt;target=_maxTgt;}
else target=MAX_CFG.target;
return maxFaceL(maxSolveL(target));
}
let _maxAspect=4/3,_maxAspT=0;
function maxGetAspect(){const now=Date.now();if(now-_maxAspT<1000)return _maxAspect;_maxAspT=now;try{let best=document.querySelector('video.scanner-video');if(!(best&&best.videoWidth>0)){best=null;document.querySelectorAll('video').forEach(v=>{if(v.videoWidth>0&&v.videoHeight>0&&(!best||v.videoWidth*v.videoHeight>best.videoWidth*best.videoHeight))best=v;});}if(best&&best.videoWidth>0)_maxAspect=best.videoWidth/best.videoHeight;}catch(e){}return _maxAspect;}
function maxIdealObjects(aspect){const a=aspect||maxGetAspect(),j=MAX_CFG.jitter?MAX_CFG.jitterAmt:0,cx=0.5;return maxNextBase().map(p=>({x:cx+(p.x-cx)/a+(Math.random()-.5)*j,y:p.y+(Math.random()-.5)*j,z:0}));}
function maxEncodeLM(lms){const b=new Uint8Array(lms.length*17),dv=new DataView(b.buffer);for(let i=0;i<lms.length;i++){const o=i*17;b[o]=0x0a;b[o+1]=0x0f;b[o+2]=0x0d;dv.setFloat32(o+3,lms[i].x,true);b[o+7]=0x15;dv.setFloat32(o+8,lms[i].y,true);b[o+12]=0x1d;dv.setFloat32(o+13,lms[i].z,true);}return b;}
let _maxHookedWasm=false,_maxHookedDFV=false,_maxHookedSign=false,_maxMF,_maxReq=null;
const _maxTD=new TextDecoder('utf-8');
function maxPtrToStr(mod,ptr){if(typeof ptr==='string')return ptr;const H=mod.HEAPU8;if(!H||typeof ptr!=='number')return '';let e=ptr;while(e<H.length&&H[e]!==0)e++;try{return _maxTD.decode(H.subarray(ptr,e));}catch(x){return '';}}
function maxInstallWasm(mod){if(!mod||mod.__omg)return;mod.__omg=true;const dispatch=function(namePtr){const args=Array.prototype.slice.call(arguments,1);let name='';try{name=maxPtrToStr(mod,namePtr);}catch(e){}try{if(MAX_CFG.enabled&&name===MAX_CFG.stream&&args[0]instanceof Uint8Array){args[0]=maxEncodeLM(maxIdealObjects());}}catch(e){}try{const SL=mod.simpleListeners;if(SL&&SL[name])return SL[name].apply(null,args);}catch(e){}};try{Object.defineProperty(mod,'_wrapSimpleListenerOutput',{configurable:true,get(){return dispatch;},set(){}});}catch(e){mod._wrapSimpleListenerOutput=dispatch;}_maxHookedWasm=true;}
function maxWrapFactory(orig){if(typeof orig!=='function'||orig.__omg)return orig;const wrapped=function(){let r;try{r=orig.apply(this,arguments);}catch(e){throw e;}Promise.resolve(r).then(m=>{try{maxInstallWasm(m);}catch(e){}}).catch(()=>{});return r;};wrapped.__omg=true;return wrapped;}
try{Object.defineProperty(_window,'ModuleFactory',{configurable:true,get(){return _maxMF;},set(v){_maxMF=maxWrapFactory(v);}});}catch(e){}
function maxWrapDFV(proto){if(!proto||proto.__omgD)return false;const orig=proto.detectForVideo;if(typeof orig!=='function')return false;proto.detectForVideo=function(){if(MAX_CFG.enabled){try{const vf=arguments[0];let vw=0,vh=0;try{vw=vf.videoWidth||vf.width||0;vh=vf.videoHeight||vf.height||0;}catch(e){}const res={faceLandmarks:[maxIdealObjects(vw>0&&vh>0?vw/vh:0)],faceBlendshapes:[],facialTransformationMatrixes:[]};const cb=arguments[2];if(typeof cb==='function'){cb(res);return;}return res;}catch(e){}}return orig.apply(this,arguments);};proto.__omgD=true;_maxHookedDFV=true;return true;}
function maxChk(v){try{if(typeof v==='function'&&v.prototype&&typeof v.prototype.detectForVideo==='function')return maxWrapDFV(v.prototype);}catch(e){}return false;}
function maxTryWebpack(){try{const key=Object.keys(_window).find(k=>/^webpackChunk/.test(k));if(!key||!Array.isArray(_window[key]))return;if(_window[key].push===Array.prototype.push)return;if(!_maxReq){_window[key].push([[],{},(r)=>{_maxReq=r;}]);}if(_maxReq&&_maxReq.c)for(const id in _maxReq.c){const ex=_maxReq.c[id]&&_maxReq.c[id].exports;if(!ex)continue;maxChk(ex);if(typeof ex==='object')for(const k in ex){try{maxChk(ex[k]);}catch(e){}}}}catch(e){}}
let _maxTries=0;
const _maxPoll=setInterval(()=>{_maxTries++;if(!_maxHookedDFV)maxTryWebpack();if((_maxHookedWasm||_maxHookedDFV)&&_maxTries>8)clearInterval(_maxPoll);if(_maxTries>1200)clearInterval(_maxPoll);},200);
function maxDvOf(data){try{if(data instanceof ArrayBuffer)return new DataView(data);if(ArrayBuffer.isView(data))return new DataView(data.buffer,data.byteOffset,data.byteLength);}catch(e){}return null;}
function maxIsFrame(dv){if(!dv||dv.byteLength<17)return false;try{if(dv.getUint8(0)!==4)return false;const s=dv.getUint16(13,true);return(17+2*s*4)===dv.byteLength;}catch(e){return false;}}
function maxRewriteFrame(dv){const s=dv.getUint16(13,true),aspect=dv.getFloat32(9,true)||maxGetAspect(),ideal=maxIdealObjects(aspect),n=Math.min(s,ideal.length);dv.setUint8(15,255);dv.setUint8(16,2);let c=17;for(let i=0;i<n;i++){dv.setFloat32(c,ideal[i].x,true);dv.setFloat32(c+4,ideal[i].y,true);c+=8;}}
try{if(_window.crypto&&_window.crypto.subtle&&typeof _window.crypto.subtle.sign==='function'){const _maxSign=_window.crypto.subtle.sign;_window.crypto.subtle.sign=function(alg,key,data){try{if(MAX_CFG.enabled){const dv=maxDvOf(data);if(maxIsFrame(dv)){maxRewriteFrame(dv);}}}catch(e){}return _maxSign.call(this,alg,key,data);};_maxHookedSign=true;}}catch(e){}
// Expose config setter for the panel score inputs to call
_window.__maxSetScore = function(target, mode, rangeMin, rangeMax) {
if (mode !== undefined) MAX_CFG.mode = mode;
if (target !== undefined) MAX_CFG.target = target;
if (rangeMin !== undefined) MAX_CFG.rangeMin = rangeMin;
if (rangeMax !== undefined) MAX_CFG.rangeMax = rangeMax;
_maxTgt = null;
maxSaveCfg();
};
_window.__maxEnabled = function(on) { MAX_CFG.enabled = on; maxSaveCfg(); };
// ══════════════════════════════════════════════════════════════
// END MAX SCORE ENGINE
// ══════════════════════════════════════════════════════════════
// ==================== LANGUAGE TRANSLATIONS ====================
const LANGUAGES = {en:{name:'English',systemStatus:'Home',masterSwitch:'Master',powerStatus:'Power',active:'ON',inactive:'OFF',matchType:'Mode',hookStatus:'Hook',pending:'PENDING',hooked:'HOOKED',unbanClearCookies:'Unban / Clear Cookies',verificationBypass:'Verification Bypass',scoreControl:'Score',mode:'Mode',range:'Range',fixed:'Fixed',scoreMin:'Min (1-10)',scoreMax:'Max (1-10)',resultSettings:'Final',type:'Type',staticScore:'Static',dynamic:'Dynamic',target:'Target (1-10)',lowerBound:'Lower (1-10)',upperBound:'Upper (1-10)',matchmaking:'Auto',autoQueue:'Auto Queue',requestDelayMs:'Delay (ms)',autoFindNewMatch:'Auto Find New',spoofCycling:'Cycling',autoCycleCamera:'Auto Cycle Cam',cameraIntervalSec:'Cam Int (s)',autoCycleAudio:'Auto Cycle Audio',audioIntervalSec:'Audio Int (s)',convenience:'Utils',autoDismissPopups:'Auto Dismiss',autoClearCookiesOnBan:'Auto Clear on Ban',virtualCamera:'Camera',activateSpoof:'Activate',flipHorizontal:'Flip H',loopVideo:'Loop',playbackSpeed:'Speed',source:'Src',video:'Video',image:'Image',selectVideo:'Select video...',selectImage:'Select image...',textOverlay:'Text',enableText:'Enable',content:'Text',color:'Color',size:'Size',audioSpoof:'Audio',activateAudioSpoof:'Activate',selectAudio:'Select audio...',loop:'Loop',speed:'Speed',volume:'Volume',bass:'Bass',treble:'Treble',warmth:'Warmth',status:'Status',inactiveStatus:'Inactive',activeStatus:'Active',overlayEffects:'Overlays',banOverlay:'Ban',loadingOverlay:'Loading',noneOverlay:'None',developer:'Dev',consoleLogs:'Console Logs',hotkeys:'Hotkeys',openPanel:'Open Panel',streamProof:'Stream',panicKey:'Panic Key',mobileTripleTap:'Mobile: Triple-tap',showControlBar:'Show Control Bar',hideAllNow:'Hide All',iframeModeObs:'Iframe (OBS)',hidesGui:'Hide GUI from capture',branding:'Brand',displayBadge:'Show Badge',visibility:'Opacity',appearance:'Theme',customization:'Custom',accentColor:'Accent',language:'Language',credits:'Credits',developers:'Devs'}};
let currentLang = 'en';
const DEFAULT_CONFIG = {enabled:true,scoreEnabled:true,scoreMode:'range',fixedScore:94000,scoreRangeMin:85000,scoreRangeMax:95000,resultEnabled:true,myFinalScore:'94000',finalScoreMode:'fixed',finalScoreRangeMin:85000,finalScoreRangeMax:97000,holdBtnSize:54,debug:true,wmAlpha:20,wmFontSize:9,wmPaddingH:14,wmPaddingV:6,wmBorder:true,wmBg:true,theme:'midnight',queueDelay:1000,autoCamInterval:5,autoAudioInterval:5,showControlBar:false,autoQueue:false,accentColor:'#6366f1',language:'en',panelWidth:300,panelHeight:null};
function loadConfig(){try{const saved=localStorage.getItem('cheatmoggle _config');if(saved)return{...DEFAULT_CONFIG,...JSON.parse(saved)};}catch(e){}return{...DEFAULT_CONFIG};}
function saveConfig(){try{localStorage.setItem('cheatmoggle _config',JSON.stringify(CONFIG));}catch(e){}}
const CONFIG=loadConfig();
currentLang=CONFIG.language||'en';
// Wire the panel score inputs to update MAX engine when changed
// (called after buildMenu sets up the score inputs)
function syncMaxScoreFromConfig() {
const finalVal = parseInt(CONFIG.myFinalScore) / 10000;
const mode = CONFIG.finalScoreMode === 'range' ? 'range' : 'fixed';
const rMin = CONFIG.finalScoreRangeMin / 10000;
const rMax = CONFIG.finalScoreRangeMax / 10000;
if (_window.__maxSetScore) _window.__maxSetScore(finalVal, mode, rMin, rMax);
if (_window.__maxEnabled) _window.__maxEnabled(CONFIG.scoreEnabled && CONFIG.enabled);
}
let _lastSpoofedScore = null;
let _lastLogTime = 0;
let _lastDcLogTime = 0;
let _dynamicCap = null;
let _scoreFluctuationInterval = null;
let _lockedFinalTarget = null;
let _lastFinalMode = null;
let _finalApplied = false;
let _isRanked = window.location.pathname.startsWith('/ranked');
let _matchStartTime = null;
let _finalScoreAppliedThisMatch = false;
let playerMapping = null;
let _lkRoomHooked = false;
let _lkScanAttempts = 0;
const _origPushState = history.pushState;
history.pushState = function(...args){_origPushState.apply(this,args);_isRanked=window.location.pathname.startsWith('/ranked');};
window.addEventListener('popstate',()=>{_isRanked=window.location.pathname.startsWith('/ranked');});
function log(...args){if(CONFIG.debug)console.log('[cheatmoggle]',...args);}
function stripInvisible(str){return str.replace(/[\u200B-\u200D\u200E\u200F\u202A-\u202E\u2060-\u2064\u206A-\u206F\uFEFF\u00AD\u034F\u115F\u1160\u17B4\u17B5\u180B-\u180D\u3164\uFFA0]/gu,'');}
function tryDecode(data){try{const bytes=data instanceof ArrayBuffer?new Uint8Array(data):data;if(!(bytes instanceof Uint8Array))return null;const rawText=new TextDecoder().decode(bytes);const text=stripInvisible(rawText);const m=text.match(/\{[^}]+\}/);if(m)try{return{json:JSON.parse(m[0]),bytes,fullText:rawText,cleanText:text};}catch(e){}try{return{json:JSON.parse(text),bytes,fullText:rawText,cleanText:text};}catch(e){}let depth=0,start=-1;for(let i=0;i<text.length;i++){if(text[i]==='{'){if(start===-1)start=i;depth++;}else if(text[i]==='}'){depth--;if(depth===0&&start!==-1){try{return{json:JSON.parse(text.substring(start,i+1)),bytes,fullText:rawText,cleanText:text};}catch(e){start=-1;}}}}}catch(e){}return null;}
function rewriteBytes(originalBytes,oldJSON,newJSON){try{const rawText=new TextDecoder().decode(originalBytes);const oldQ=String(oldJSON.q);const newQ=String(newJSON.q);const qPattern=new RegExp('("q"\\s*:\\s*)([\\u200B-\\u200D\\uFEFF\\u00AD]*)('+(oldQ.replace(/\./g,'\\.'))+')', 'u');if(qPattern.test(rawText)){const newText=rawText.replace(qPattern,'$1$2'+newQ);const encoded=new TextEncoder().encode(newText);log(`[rewriteBytes] q:${oldQ}→${newQ}`);return encoded;}log(`[rewriteBytes MISS] could not find q:${oldQ}`);return originalBytes;}catch(e){return originalBytes;}}
const _origDcSend=_window.RTCDataChannel?_window.RTCDataChannel.prototype.send:RTCDataChannel.prototype.send;
function _hookDataChannel(dc){if(dc.__cmHooked)return;const origSend=_origDcSend.bind(dc);dc.send=function(data){const parsed=tryDecode(data);if(parsed?.json){const{json,bytes}=parsed;const isNormalFrame=(typeof json.p!=='undefined')&&(typeof json.q!=='undefined')&&!json.type;const isRankedFrame=isNormalFrame&&json.m!==undefined;if(isNormalFrame||isRankedFrame){if(json.q>0){if(!CONFIG.scoreEnabled)return origSend.call(this,data);const modified={...json};const newScore=_getFinalTarget();modified.q=newScore;if(modified.payload&&typeof modified.payload.overall!=='undefined'){modified.payload.overall=newScore/10000;}const rewritten=rewriteBytes(bytes,json,modified);_lastSpoofedScore=newScore/10000;return origSend.call(this,rewritten);}}}return origSend.call(this,data);};dc.__cmHooked=true;}
const _RTC=_window.RTCPeerConnection||RTCPeerConnection;
const _DCProto=(_window.RTCDataChannel||RTCDataChannel).prototype;
const _dcProtoSend=_DCProto.send;
_DCProto.send=function(data){if(!this.__cmHooked)_hookDataChannel(this);return _dcProtoSend.call(this,data);};
const _origCreateDC=_RTC.prototype.createDataChannel;
if(_origCreateDC){_RTC.prototype.createDataChannel=function(label,options){const dc=_origCreateDC.call(this,label,options);_hookDataChannel(dc);return dc;};}
const origFetch=_window.fetch;
_window.fetch=async function(url,options){const urlStr=typeof url==='string'?url:(url?.url||'');if(urlStr.includes('/api/match/finalize')||urlStr.includes('/api/ranked/finalize')){if(options?.body&&CONFIG.resultEnabled){try{const body=JSON.parse(options.body);const finalTarget=_getFinalTarget();const finalFloat=finalTarget/10000;const scoreObj=body.u||body.i;if(scoreObj&&scoreObj.e!==undefined){scoreObj.e=String(finalTarget);}options={...options,body:JSON.stringify(body)};}catch(e){}}}return origFetch.call(this,url,options);};
function _getFinalTarget(){if(_lockedFinalTarget===null||_lastFinalMode!==CONFIG.finalScoreMode){_finalApplied=false;_lastFinalMode=CONFIG.finalScoreMode;if(CONFIG.finalScoreMode==='range'){_lockedFinalTarget=Math.round(CONFIG.finalScoreRangeMin+Math.random()*(CONFIG.finalScoreRangeMax-CONFIG.finalScoreRangeMin));}else{_lockedFinalTarget=parseInt(CONFIG.myFinalScore);}}if(CONFIG.finalScoreMode==='fixed'){return parseInt(CONFIG.myFinalScore);}return _lockedFinalTarget;}
const TIER_MAP=[{name:'Adam',emoji:'🍎',hexColor:'#ef4444',textShadow:'0 0 12px rgba(239,68,68,0.95)',min:9.7},{name:'Slayer',emoji:'☠️',hexColor:'#f472b6',textShadow:'0 0 12px rgba(244,114,182,0.9)',min:9.5},{name:'Chad',emoji:'👑',hexColor:'#fb923c',textShadow:'0 0 10px rgba(251,146,60,0.8)',min:8.9},{name:'Chadlite',emoji:'⚜️',hexColor:'#facc15',textShadow:'0 0 8px rgba(250,204,21,0.8)',min:8.3},{name:'HTN',emoji:'🌟',hexColor:'#a3e635',textShadow:'0 0 8px rgba(163,230,53,0.8)',min:7.0},{name:'MTN',emoji:'⭐',hexColor:'#86efac',textShadow:'0 0 6px rgba(134,239,172,0.7)',min:5.6},{name:'LTN',emoji:'🌙',hexColor:'#34d399',textShadow:'0 0 6px rgba(52,211,153,0.6)',min:3.1},{name:'Sub3',emoji:'🦀',hexColor:'#b45309',textShadow:'0 0 6px rgba(180,83,9,0.7)',min:0.1}];
function getTierForScore(score){for(const tier of TIER_MAP){if(score>=tier.min)return tier;}return TIER_MAP[TIER_MAP.length-1];}
function spoofPanel(){if(_lastSpoofedScore===null)return;const displayScore=_lastSpoofedScore;const tier=getTierForScore(displayScore);try{const targetStr=displayScore.toFixed(1);const scoreSpans=[];document.querySelectorAll('span.font-mono').forEach(el=>{const v=el.textContent.trim();if(!/^\d+\.\d+$/.test(v))return;if(parseFloat(v)<0.1||parseFloat(v)>10)return;scoreSpans.push(el);});if(scoreSpans.length>=1){const ours=scoreSpans[0];if(ours.textContent.trim()!==targetStr){ours.textContent=targetStr;}}}catch(e){}}
const _bodyObserver=new MutationObserver(()=>{try{spoofPanel();}catch(e){}});
document.addEventListener('DOMContentLoaded',()=>{if(document.body)_bodyObserver.observe(document.body,{childList:true,subtree:true});});
setInterval(()=>{try{spoofPanel();}catch(e){}},100);
// WebSocket hook
const OrigWS=_window.WebSocket;
_window.WebSocket=function(...args){const ws=new OrigWS(...args);const _rawSend=ws.send.bind(ws);ws.addEventListener('message',function(event){if(typeof event.data==='string'){if(event.data.includes('"live_score"')){try{const parsed=JSON.parse(event.data);if(parsed.type==='live_score'){const target=_getFinalTarget()/10000;_lastSpoofedScore=target;try{spoofPanel();}catch(e){}}}catch(e){}}}});return ws;};
Object.setPrototypeOf(_window.WebSocket,OrigWS);
_window.WebSocket.prototype=OrigWS.prototype;
// Camera bypass
const _trueOriginalGetUserMedia=navigator.mediaDevices.getUserMedia.bind(navigator.mediaDevices);
let _camSpoofActive=false;
let _camStream=null;
navigator.mediaDevices.getUserMedia=async function(constraints){if(_camSpoofActive&&_camStream&&constraints&&(constraints.video||constraints.video===true)){if(constraints.audio){try{const r=await _trueOriginalGetUserMedia({audio:constraints.audio});return new MediaStream([..._camStream.getVideoTracks(),...r.getAudioTracks()]);}catch(e){}}return _camStream;}return _trueOriginalGetUserMedia(constraints);};
window._mogPCs=window._mogPCs||[];
const _OrigPC2=window.RTCPeerConnection;
window.RTCPeerConnection=function(...args){const pc=new _OrigPC2(...args);window._mogPCs.push(pc);pc.addEventListener('datachannel',function(event){_hookDataChannel(event.channel);});const _origCreateDC2=pc.createDataChannel.bind(pc);pc.createDataChannel=function(label,options){const dc=_origCreateDC2(label,options);_hookDataChannel(dc);return dc;};pc.addEventListener('connectionstatechange',()=>{if(pc.connectionState==='closed'){const idx=window._mogPCs.indexOf(pc);if(idx>-1)window._mogPCs.splice(idx,1);}});return pc;};
Object.setPrototypeOf(window.RTCPeerConnection,_OrigPC2);
window.RTCPeerConnection.prototype=_OrigPC2.prototype;
// Themes (simplified - keeping midnight + a few)
const THEMES={midnight:{name:'Midnight',primary:'#6366f1',primaryRgb:'99,102,241',secondary:'#8b5cf6',accent:'#22d3ee',accentRgb:'34,211,238',success:'#10b981',warning:'#f59e0b',danger:'#ef4444',bgDark:'#0a0a0f',bgCard:'#12121a',bgElevated:'#1a1a24',border:'rgba(255,255,255,0.08)',text:'#e4e4e7',textMuted:'#71717a'},neon:{name:'Neon',primary:'#00ff88',primaryRgb:'0,255,136',secondary:'#00cc6a',accent:'#7dffb3',accentRgb:'125,255,179',success:'#00ff88',warning:'#ffcc00',danger:'#ff4444',bgDark:'#0a0f0c',bgCard:'#0d1a12',bgElevated:'#132218',border:'rgba(0,255,136,0.15)',text:'#e0ffe8',textMuted:'#7da88a'},crimson:{name:'Crimson',primary:'#dc2626',primaryRgb:'220,38,38',secondary:'#f43f5e',accent:'#fb7185',accentRgb:'251,113,133',success:'#10b981',warning:'#f59e0b',danger:'#ef4444',bgDark:'#0f0505',bgCard:'#1a0a0a',bgElevated:'#241010',border:'rgba(255,100,100,0.1)',text:'#fecaca',textMuted:'#a8a29e'}};
function hexToRgb(hex){const r=/^#?([a-f\d]{2})([a-f\d]{2})([a-f\d]{2})$/i.exec(hex);return r?{r:parseInt(r[1],16),g:parseInt(r[2],16),b:parseInt(r[3],16)}:null;}
function applyAccentColor(color){document.documentElement.style.setProperty('--cm-primary',color);const rgb=hexToRgb(color);if(rgb)document.documentElement.style.setProperty('--cm-primary-rgb',`${rgb.r},${rgb.g},${rgb.b}`);CONFIG.accentColor=color;saveConfig();}
function applyTheme(themeName){const theme=THEMES[themeName]||THEMES.midnight;CONFIG.theme=themeName;document.documentElement.style.setProperty('--cm-primary',theme.primary);document.documentElement.style.setProperty('--cm-primary-rgb',theme.primaryRgb);document.documentElement.style.setProperty('--cm-secondary',theme.secondary);document.documentElement.style.setProperty('--cm-accent',theme.accent);document.documentElement.style.setProperty('--cm-bg-dark',theme.bgDark);document.documentElement.style.setProperty('--cm-bg-card',theme.bgCard);document.documentElement.style.setProperty('--cm-bg-elevated',theme.bgElevated);document.documentElement.style.setProperty('--cm-border',theme.border);document.documentElement.style.setProperty('--cm-text',theme.text);document.documentElement.style.setProperty('--cm-text-muted',theme.textMuted);saveConfig();}
function buildMenu(){
if(document.getElementById('cm-root'))return;
const style=document.createElement('style');
style.textContent=`:root{--cm-primary:#6366f1;--cm-primary-rgb:99,102,241;--cm-secondary:#8b5cf6;--cm-accent:#22d3ee;--cm-success:#10b981;--cm-warning:#f59e0b;--cm-danger:#ef4444;--cm-bg-dark:#0a0a0f;--cm-bg-card:#12121a;--cm-bg-elevated:#1a1a24;--cm-border:rgba(255,255,255,0.08);--cm-text:#e4e4e7;--cm-text-muted:#71717a;}
#cm-toggle-btn{position:fixed;top:16px;right:16px;z-index:999999;width:42px;height:42px;border-radius:50%;background:radial-gradient(circle at 30% 25%,rgba(var(--cm-primary-rgb),0.35),rgba(0,0,0,0.92) 72%);border:2px solid var(--cm-primary);cursor:grab;display:flex;align-items:center;justify-content:center;box-shadow:0 0 18px rgba(var(--cm-primary-rgb),0.55);transition:transform 0.22s,box-shadow 0.22s;user-select:none;}
#cm-toggle-btn:hover{transform:scale(1.12);}
#cm-root{position:fixed;top:70px;right:16px;z-index:999998;width:360px;min-height:460px;background:var(--cm-bg-dark);border-radius:14px;font-family:Inter,-apple-system,sans-serif;color:var(--cm-text);border:1px solid var(--cm-border);box-shadow:0 0 50px rgba(var(--cm-primary-rgb),0.12),0 20px 50px rgba(0,0,0,0.5);display:none;opacity:0;overflow:auto;transition:opacity 0.25s,transform 0.25s;transform:translateY(-10px) scale(0.98);resize:both;min-width:260px;}
#cm-root.visible{display:flex;flex-direction:column;opacity:1;transform:translateY(0) scale(1);}
.cm-header{padding:12px 14px 10px;background:linear-gradient(180deg,rgba(var(--cm-primary-rgb),0.08),transparent);border-bottom:1px solid var(--cm-border);cursor:grab;}
.cm-title-row{display:flex;align-items:center;justify-content:space-between;margin-bottom:6px;}
.cm-logo{display:flex;align-items:center;gap:6px;}
.cm-title{font-size:14px;font-weight:800;background:linear-gradient(135deg,#fff,var(--cm-accent));-webkit-background-clip:text;-webkit-text-fill-color:transparent;letter-spacing:-.02em;}
.cm-free-badge{background:linear-gradient(135deg,#10b981,#059669);color:#fff;font-size:8px;font-weight:800;padding:2px 8px;border-radius:20px;margin-left:6px;letter-spacing:.06em;box-shadow:0 0 8px rgba(16,185,129,0.5);animation:cm-gold-glow 2.5s ease-in-out infinite;}
@keyframes cm-gold-glow{0%,100%{box-shadow:0 0 5px rgba(16,185,129,0.4),0 0 10px rgba(16,185,129,0.15);}50%{box-shadow:0 0 12px rgba(16,185,129,0.8),0 0 22px rgba(16,185,129,0.3);}}
.cm-tabs{display:flex;flex-wrap:wrap;gap:2px;background:var(--cm-bg-card);padding:3px;border-radius:8px;margin:0 14px 4px;}
.cm-tab{flex:1;min-width:36px;padding:6px 3px;border-radius:6px;font-size:9px;font-weight:600;text-align:center;cursor:pointer;color:var(--cm-text-muted);background:transparent;border:none;transition:all .15s;white-space:nowrap;}
.cm-tab:hover{color:var(--cm-text);}
.cm-tab.active{background:var(--cm-bg-elevated);color:#fff;box-shadow:0 1px 4px rgba(0,0,0,0.3);}
.cm-body{padding:12px;overflow-y:auto;flex:1;}
.cm-panel{display:none;} .cm-panel.active{display:block;}
.cm-card{background:var(--cm-bg-card);border-radius:10px;padding:10px 12px;border:1px solid var(--cm-border);margin-bottom:10px;}
.cm-row{display:flex;align-items:center;justify-content:space-between;padding:7px 0;border-bottom:1px solid var(--cm-border);}
.cm-row:last-child{border-bottom:none;}
.cm-label{font-size:11px;font-weight:500;color:var(--cm-text);}
.cm-toggle{position:relative;width:32px;height:18px;cursor:pointer;}
.cm-toggle input{opacity:0;width:0;height:0;}
.cm-toggle-track{position:absolute;inset:0;border-radius:11px;background:var(--cm-bg-elevated);border:1px solid var(--cm-border);transition:all 0.25s;}
.cm-toggle input:checked+.cm-toggle-track{background:var(--cm-primary);}
.cm-toggle-thumb{position:absolute;top:2px;left:2px;width:14px;height:14px;border-radius:50%;background:#fff;box-shadow:0 1px 3px rgba(0,0,0,0.3);transition:all 0.25s;}
.cm-toggle input:checked~.cm-toggle-thumb{left:16px;}
.cm-number-control{display:flex;align-items:center;gap:4px;}
.cm-number-btn{background:var(--cm-bg-elevated);border:1px solid var(--cm-border);border-radius:4px;width:22px;height:22px;font-size:12px;font-weight:700;cursor:pointer;color:var(--cm-text);}
.cm-number-input{width:60px;text-align:center;background:var(--cm-bg-elevated);border:1px solid var(--cm-border);border-radius:4px;padding:4px;font-size:11px;color:var(--cm-text);}
.cm-btn-group{display:flex;gap:3px;background:var(--cm-bg-elevated);padding:2px;border-radius:6px;}
.cm-btn-opt{padding:4px 8px;border-radius:4px;font-size:9px;font-weight:700;cursor:pointer;background:transparent;color:var(--cm-text-muted);border:none;}
.cm-btn-opt.active{background:var(--cm-primary);color:#fff;}
.cm-preview{text-align:center;padding:12px;background:rgba(var(--cm-primary-rgb),0.06);border-radius:10px;border:1px solid rgba(var(--cm-primary-rgb),0.15);}
.cm-preview-score{font-size:32px;font-weight:800;font-family:monospace;}
.cm-preview-tier{font-size:11px;font-weight:700;margin-top:4px;}
.cm-section-title{font-size:8px;font-weight:700;text-transform:uppercase;letter-spacing:0.1em;color:var(--cm-text-muted);margin-bottom:4px;display:flex;align-items:center;justify-content:space-between;}
.cm-section-toggle{transform:scale(0.7);}
.cm-section-disabled{opacity:0.4;pointer-events:none;}
.cm-file-picker{display:flex;align-items:center;gap:8px;padding:8px;background:var(--cm-bg-elevated);border:1px dashed var(--cm-border);border-radius:6px;cursor:pointer;}
.cm-file-name{font-size:10px;color:var(--cm-text-muted);flex:1;overflow:hidden;text-overflow:ellipsis;white-space:nowrap;}
.cm-file-name.selected{color:var(--cm-success);}
input[type=range].cm-slider{width:100%;-webkit-appearance:none;height:4px;background:var(--cm-bg-elevated);border-radius:4px;outline:none;cursor:pointer;}
input[type=range].cm-slider::-webkit-slider-thumb{-webkit-appearance:none;width:14px;height:14px;border-radius:50%;background:var(--cm-primary);cursor:pointer;}
.cm-slider-row{display:flex;flex-direction:column;gap:2px;padding:4px 0;border-bottom:1px solid var(--cm-border);}
.cm-slider-row:last-child{border-bottom:none;}
.cm-slider-header{display:flex;justify-content:space-between;align-items:center;}
.cm-slider-label{font-size:9px;font-weight:500;}
.cm-slider-value{font-size:9px;font-weight:600;color:var(--cm-text);background:var(--cm-bg-elevated);border:1px solid var(--cm-border);padding:1px 4px;border-radius:3px;}
.cm-input{background:var(--cm-bg-elevated);border:1px solid var(--cm-border);border-radius:6px;padding:6px 10px;font-size:11px;color:var(--cm-text);outline:none;}
.cm-select{background:var(--cm-bg-elevated);border:1px solid var(--cm-border);border-radius:6px;padding:6px 10px;font-size:11px;color:var(--cm-text);outline:none;cursor:pointer;}
.cm-select option{background:var(--cm-bg-dark);color:var(--cm-text);}
.cm-panic-btn{width:100%;padding:6px 10px;font-size:9px;font-weight:600;border:1px solid var(--cm-danger);border-radius:4px;background:rgba(239,68,68,0.1);color:var(--cm-danger);cursor:pointer;}
.cm-panic-btn:hover{background:var(--cm-danger);color:#fff;}
.cm-score-input{-moz-appearance:textfield;} .cm-score-input::-webkit-outer-spin-button,.cm-score-input::-webkit-inner-spin-button{-webkit-appearance:none;}
#cm-watermark{position:fixed;bottom:16px;right:16px;z-index:999990;padding:6px 12px;border-radius:8px;background:rgba(var(--cm-primary-rgb),0.1);border:1px solid rgba(var(--cm-primary-rgb),0.2);font-size:9px;font-weight:600;color:rgba(255,255,255,0.35);letter-spacing:0.05em;cursor:grab;}`;
document.head.appendChild(style);
applyTheme(CONFIG.theme||'midnight');
applyAccentColor(CONFIG.accentColor||'#6366f1');
const btn=document.createElement('button');
btn.id='cm-toggle-btn';
btn.innerHTML='<img src="https://cdn.discordapp.com/icons/1508543746214465648/44b1c062230c1103016d7928805df398.webp?size=1024" style="width:26px;height:26px;border-radius:4px;object-fit:cover;">';
document.body.appendChild(btn);
const root=document.createElement('div');
root.id='cm-root';
if(CONFIG.panelWidth)root.style.width=CONFIG.panelWidth+'px';
else root.style.width='360px';
root.innerHTML=`
<div class="cm-header">
<div class="cm-title-row">
<div class="cm-logo"><span class="cm-title">cheatmoggle</span><span class="cm-free-badge">FREE</span></div>
<a href="https://discord.gg/EGf45Q9zFu" target="_blank" style="color:var(--cm-accent);font-size:10px;text-decoration:none;">Discord</a>
</div>
<div class="cm-tabs">
<button class="cm-tab active" data-tab="home">Home</button>
<button class="cm-tab" data-tab="score">Score</button>
<button class="cm-tab" data-tab="spoofer">Spoofer</button>
<button class="cm-tab" data-tab="automation">Auto</button>
<button class="cm-tab" data-tab="camera">Camera</button>
<button class="cm-tab" data-tab="settings">Settings</button>
<button class="cm-tab" data-tab="credits">Credits</button>
</div>
</div>
<div class="cm-body">
<!-- HOME -->
<div class="cm-panel active" data-panel="home">
<div class="cm-card">
<div class="cm-row"><span class="cm-label">Master Switch</span><label class="cm-toggle"><input type="checkbox" id="cm-enable-toggle" checked><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
<div class="cm-row"><span class="cm-label">Power Status</span><span style="font-size:10px;color:var(--cm-success)" id="cm-enabled-val">ACTIVE</span></div>
<div class="cm-row"><span class="cm-label">Match Type</span><span style="font-size:10px;" id="cm-mode-val">NORMAL</span></div>
</div>
<div style="text-align:center;padding:8px;font-size:9px;color:var(--cm-text-muted);">MAX engine: <span id="cm-max-status" style="color:var(--cm-success);">arming...</span></div>
</div>
<!-- SPOOFER -->
<div class="cm-panel" data-panel="spoofer">
<div class="cm-card">
<div class="cm-row"><span class="cm-label">Unban / Clear Cookies</span><button class="cm-panic-btn" id="cm-clearcookies-btn" style="width:auto;padding:4px 10px;font-size:9px;">Clear</button></div>
<div class="cm-row" style="border-bottom:none;"><span class="cm-label">Verif Bypass</span><button class="cm-panic-btn" id="cm-verifbypass-btn" style="width:auto;padding:4px 10px;font-size:9px;background:rgba(34,211,238,0.1);border-color:var(--cm-accent);color:var(--cm-accent);">Activate</button></div>
</div>
</div>
<!-- SCORE -->
<div class="cm-panel" data-panel="score">
<div style="margin-bottom:8px;">
<div class="cm-section-title"><span>Score Control</span><label class="cm-toggle cm-section-toggle"><input type="checkbox" id="cm-score-enabled" checked><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
<div class="cm-card" id="cm-score-content">
<div class="cm-row"><span class="cm-label">Mode</span><div class="cm-btn-group"><button class="cm-btn-opt active" data-smode="range">Range</button><button class="cm-btn-opt" data-smode="fixed">Fixed</button></div></div>
<div id="cm-score-fixed" style="display:none;"><div class="cm-slider-row"><div class="cm-slider-header"><span class="cm-slider-label">Target (1-10)</span><div class="cm-number-control"><button class="cm-number-btn" data-dec="cm-fixed-score">-</button><input type="number" class="cm-number-input cm-score-input" id="cm-fixed-score" min="1" max="10" step="0.1" value="9.4"><button class="cm-number-btn" data-inc="cm-fixed-score">+</button></div></div></div></div>
<div id="cm-score-range"><div class="cm-slider-row"><div class="cm-slider-header"><span class="cm-slider-label">Min</span><div class="cm-number-control"><button class="cm-number-btn" data-dec="cm-score-min">-</button><input type="number" class="cm-number-input cm-score-input" id="cm-score-min" min="1" max="10" step="0.1" value="8.5"><button class="cm-number-btn" data-inc="cm-score-min">+</button></div></div></div><div class="cm-slider-row"><div class="cm-slider-header"><span class="cm-slider-label">Max</span><div class="cm-number-control"><button class="cm-number-btn" data-dec="cm-score-max">-</button><input type="number" class="cm-number-input cm-score-input" id="cm-score-max" min="1" max="10" step="0.1" value="9.5"><button class="cm-number-btn" data-inc="cm-score-max">+</button></div></div></div></div>
</div>
</div>
<div>
<div class="cm-section-title"><span>Final Score</span><label class="cm-toggle cm-section-toggle"><input type="checkbox" id="cm-result-enabled" checked><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
<div class="cm-card" id="cm-result-content">
<div class="cm-row"><span class="cm-label">Type</span><div class="cm-btn-group"><button class="cm-btn-opt active" data-fmode="fixed">Static</button><button class="cm-btn-opt" data-fmode="range">Dynamic</button></div></div>
<div id="cm-final-fixed"><div class="cm-slider-row"><div class="cm-slider-header"><span class="cm-slider-label">Target</span><div class="cm-number-control"><button class="cm-number-btn" data-dec="cm-final-score">-</button><input type="number" class="cm-number-input cm-score-input" id="cm-final-score" min="1" max="10" step="0.1" value="9.4"><button class="cm-number-btn" data-inc="cm-final-score">+</button></div></div></div></div>
<div id="cm-final-range" style="display:none;"><div class="cm-slider-row"><div class="cm-slider-header"><span class="cm-slider-label">Min</span><div class="cm-number-control"><button class="cm-number-btn" data-dec="cm-final-range-min">-</button><input type="number" class="cm-number-input cm-score-input" id="cm-final-range-min" min="1" max="10" step="0.1" value="8.5"><button class="cm-number-btn" data-inc="cm-final-range-min">+</button></div></div></div><div class="cm-slider-row"><div class="cm-slider-header"><span class="cm-slider-label">Max</span><div class="cm-number-control"><button class="cm-number-btn" data-dec="cm-final-range-max">-</button><input type="number" class="cm-number-input cm-score-input" id="cm-final-range-max" min="1" max="10" step="0.1" value="9.7"><button class="cm-number-btn" data-inc="cm-final-range-max">+</button></div></div></div></div>
</div>
<div class="cm-preview"><div class="cm-preview-score" id="cm-score-preview-num" style="color:#f472b6">9.6</div><div class="cm-preview-tier" id="cm-score-preview-tier" style="color:#f472b6">☠️ Slayer</div></div>
</div>
</div>
<!-- AUTOMATION -->
<div class="cm-panel" data-panel="automation">
<div class="cm-card">
<div class="cm-row"><span class="cm-label">Auto Queue</span><label class="cm-toggle"><input type="checkbox" id="cm-autoqueuetoggle"><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
<div class="cm-row"><span class="cm-label">Delay (ms)</span><input type="number" class="cm-input" id="cm-queue-delay" min="100" max="60000" step="100" value="1000" style="width:80px;"></div>
<div class="cm-row" style="border-bottom:none;"><span class="cm-label">Auto Find New Match</span><label class="cm-toggle"><input type="checkbox" id="cm-autofindnew-toggle" checked><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
</div>
</div>
<!-- CAMERA -->
<div class="cm-panel" data-panel="camera">
<div class="cm-card">
<div class="cm-row"><span class="cm-label">Activate Spoof</span><label class="cm-toggle"><input type="checkbox" id="cm-camspoof-toggle"><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
<div class="cm-row"><span class="cm-label">Loop Video</span><label class="cm-toggle"><input type="checkbox" id="cm-camloop-toggle" checked><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
</div>
<div class="cm-card">
<div class="cm-btn-group" style="margin-bottom:6px;"><button class="cm-btn-opt active" data-src="video">Video</button><button class="cm-btn-opt" data-src="image">Image</button></div>
<div class="cm-file-picker" id="cm-video-picker"><span class="cm-file-name" id="cm-video-name">Select video file...</span></div>
<div class="cm-file-picker" id="cm-image-picker" style="display:none;"><span class="cm-file-name" id="cm-image-name">Select image file...</span></div>
</div>
</div>
<!-- SETTINGS -->
<div class="cm-panel" data-panel="settings">
<div class="cm-card">
<div class="cm-row"><span class="cm-label">Console Logs</span><label class="cm-toggle"><input type="checkbox" id="cm-debug-toggle" checked><div class="cm-toggle-track"></div><div class="cm-toggle-thumb"></div></label></div>
<div class="cm-row"><span class="cm-label">Open Panel Key</span><input type="text" class="cm-input" id="cm-menukey" value="h" style="width:50px;"></div>
<div class="cm-row" style="border-bottom:none;"><span class="cm-label">Panic Key</span><input type="text" class="cm-input" id="cm-panic-key" value="p" style="width:50px;"></div>
</div>
<div class="cm-card" style="margin-top:8px;">
<div class="cm-section-title">Theme</div>
<div style="display:grid;grid-template-columns:repeat(3,1fr);gap:4px;" id="cm-theme-grid"></div>
</div>
<div class="cm-card" style="margin-top:8px;">
<div class="cm-row"><span class="cm-label">Accent Color</span><input type="color" id="cm-accent-color" value="${CONFIG.accentColor||'#6366f1'}" style="width:50px;height:30px;"></div>
</div>
</div>
<!-- CREDITS -->
<div class="cm-panel" data-panel="credits">
<div class="cm-card">
<div class="cm-row"><span class="cm-label" style="font-size:9px;color:var(--cm-text-muted);text-transform:uppercase;letter-spacing:.08em;">Developers</span></div>
<div class="cm-row"><span style="font-size:11px;font-weight:700;color:var(--cm-primary);">@vp4q</span></div>
<div class="cm-row"><span style="font-size:11px;font-weight:700;color:var(--cm-text);">A5f3</span></div>
<div class="cm-row"><span style="font-size:11px;font-weight:700;color:var(--cm-text);">C6</span><span style="font-size:9px;color:var(--cm-text-muted);">real owner</span></div>
<div class="cm-row"><span style="font-size:11px;font-weight:700;color:var(--cm-text);">Real C6</span><span style="font-size:9px;color:var(--cm-text-muted);">no owner</span></div>
<div class="cm-row" style="border-bottom:none;"><span style="font-size:11px;font-weight:700;color:var(--cm-text);">Greed</span></div>
</div>
<div class="cm-card" style="margin-top:8px;">
<div class="cm-row" style="border-bottom:none;"><span style="font-size:9px;color:var(--cm-text-muted);line-height:1.5;">If you paid for this cheat you got scammed. All of it was made by vp4q and a5f3.</span></div>
</div>
</div>
</div>`;
document.body.appendChild(root);
// MAX status updater
setInterval(()=>{const el=document.getElementById('cm-max-status');if(!el)return;const hooks=(_maxHookedWasm?'W':'')+(_maxHookedDFV?'D':'')+(_maxHookedSign?'S':'');el.textContent=hooks?'active ['+hooks+']':'arming...';el.style.color=hooks?'var(--cm-success)':'var(--cm-warning)';},1000);
// Toggle btn
btn.addEventListener('click',()=>root.classList.toggle('visible'));
// Drag btn
let _bd=false,_bdx=0,_bdy=0;
btn.addEventListener('mousedown',e=>{_bd=true;const r=btn.getBoundingClientRect();_bdx=e.clientX-r.left;_bdy=e.clientY-r.top;e.preventDefault();});
document.addEventListener('mousemove',e=>{if(!_bd)return;btn.style.left=(e.clientX-_bdx)+'px';btn.style.top=(e.clientY-_bdy)+'px';btn.style.right='auto';});
document.addEventListener('mouseup',()=>{_bd=false;});
// Drag menu
let _md=false,_mdx=0,_mdy=0;
const _mh=root.querySelector('.cm-header');
_mh.addEventListener('mousedown',e=>{if(e.target.matches('input,button,label,a'))return;_md=true;const r=root.getBoundingClientRect();_mdx=e.clientX-r.left;_mdy=e.clientY-r.top;e.preventDefault();});
document.addEventListener('mousemove',e=>{if(!_md)return;root.style.left=(e.clientX-_mdx)+'px';root.style.top=(e.clientY-_mdy)+'px';root.style.right='auto';});
document.addEventListener('mouseup',()=>{_md=false;});
// Tabs
root.querySelectorAll('.cm-tab').forEach(tab=>{tab.addEventListener('click',function(){root.querySelectorAll('.cm-tab').forEach(t=>t.classList.remove('active'));root.querySelectorAll('.cm-panel').forEach(p=>p.classList.remove('active'));this.classList.add('active');root.querySelector(`[data-panel="${this.dataset.tab}"]`).classList.add('active');});});
// Number +/- buttons
document.querySelectorAll('.cm-number-btn[data-dec]').forEach(b=>{b.addEventListener('click',()=>{const inp=document.getElementById(b.dataset.dec);if(!inp)return;let v=parseFloat(inp.value),s=parseFloat(inp.step)||0.1;inp.value=Math.max(parseFloat(inp.min)||1,v-s).toFixed(1);inp.dispatchEvent(new Event('input',{bubbles:true}));});});
document.querySelectorAll('.cm-number-btn[data-inc]').forEach(b=>{b.addEventListener('click',()=>{const inp=document.getElementById(b.dataset.inc);if(!inp)return;let v=parseFloat(inp.value),s=parseFloat(inp.step)||0.1;inp.value=Math.min(parseFloat(inp.max)||10,v+s).toFixed(1);inp.dispatchEvent(new Event('input',{bubbles:true}));});});
// Enable toggle
document.getElementById('cm-enable-toggle').addEventListener('change',function(){CONFIG.enabled=this.checked;document.getElementById('cm-enabled-val').textContent=this.checked?'ACTIVE':'INACTIVE';if(_window.__maxEnabled)_window.__maxEnabled(this.checked&&CONFIG.scoreEnabled);saveConfig();});
// Score mode
function setScoreModeUI(mode){CONFIG.scoreMode=mode;document.querySelectorAll('[data-smode]').forEach(b=>b.classList.toggle('active',b.dataset.smode===mode));document.getElementById('cm-score-fixed').style.display=mode==='fixed'?'block':'none';document.getElementById('cm-score-range').style.display=mode==='range'?'block':'none';saveConfig();}
document.querySelectorAll('[data-smode]').forEach(b=>b.addEventListener('click',function(){setScoreModeUI(this.dataset.smode);}));
document.getElementById('cm-fixed-score').addEventListener('input',function(){CONFIG.fixedScore=Math.round(parseFloat(this.value)*10000)||94000;syncMaxScoreFromConfig();saveConfig();});
document.getElementById('cm-score-min').addEventListener('input',function(){CONFIG.scoreRangeMin=Math.round(parseFloat(this.value)*10000)||85000;syncMaxScoreFromConfig();saveConfig();});
document.getElementById('cm-score-max').addEventListener('input',function(){CONFIG.scoreRangeMax=Math.round(parseFloat(this.value)*10000)||95000;syncMaxScoreFromConfig();saveConfig();});
document.getElementById('cm-score-enabled').addEventListener('change',function(){CONFIG.scoreEnabled=this.checked;document.getElementById('cm-score-content').classList.toggle('cm-section-disabled',!this.checked);if(_window.__maxEnabled)_window.__maxEnabled(this.checked&&CONFIG.enabled);saveConfig();});
// Final score mode
function setFinalModeUI(mode){CONFIG.finalScoreMode=mode;document.querySelectorAll('[data-fmode]').forEach(b=>b.classList.toggle('active',b.dataset.fmode===mode));document.getElementById('cm-final-fixed').style.display=mode==='fixed'?'block':'none';document.getElementById('cm-final-range').style.display=mode==='range'?'block':'none';updatePreview();saveConfig();}
document.querySelectorAll('[data-fmode]').forEach(b=>b.addEventListener('click',function(){setFinalModeUI(this.dataset.fmode);}));
document.getElementById('cm-final-score').addEventListener('input',function(){CONFIG.myFinalScore=String(Math.round(parseFloat(this.value)*10000)||94000);syncMaxScoreFromConfig();updatePreview();saveConfig();});
document.getElementById('cm-final-range-min').addEventListener('input',function(){CONFIG.finalScoreRangeMin=Math.round(parseFloat(this.value)*10000)||85000;syncMaxScoreFromConfig();saveConfig();});
document.getElementById('cm-final-range-max').addEventListener('input',function(){CONFIG.finalScoreRangeMax=Math.round(parseFloat(this.value)*10000)||97000;syncMaxScoreFromConfig();saveConfig();});
document.getElementById('cm-result-enabled').addEventListener('change',function(){CONFIG.resultEnabled=this.checked;document.getElementById('cm-result-content').classList.toggle('cm-section-disabled',!this.checked);saveConfig();});
function updatePreview(){let score=parseInt(CONFIG.myFinalScore)/10000;const tier=getTierForScore(score);const n=document.getElementById('cm-score-preview-num');const t=document.getElementById('cm-score-preview-tier');if(n){n.textContent=score.toFixed(1);n.style.color=tier.hexColor;}if(t){t.textContent=`${tier.emoji} ${tier.name}`;t.style.color=tier.hexColor;}}
updatePreview();setInterval(()=>{if(CONFIG.finalScoreMode==='range')updatePreview();},2000);
// Auto queue
let _aqInterval=null,_aqConnStart=null;
function _aqTick(){try{const btns=Array.from(document.querySelectorAll('button,[role="button"]'));const connecting=btns.find(b=>/connecting/i.test(b.textContent));if(connecting){if(_aqConnStart===null)_aqConnStart=Date.now();else if(Date.now()-_aqConnStart>17000){const back=btns.find(b=>/leave|cancel|disconnect/i.test(b.textContent));if(back)back.click();_aqConnStart=null;}return;}_aqConnStart=null;const arena=document.querySelector('button[aria-label="Find an Arena match"]');if(arena){arena.click();return;}if(document.getElementById('cm-autofindnew-toggle')?.checked){const fn=btns.find(b=>/FIND NEW.*MATCH/i.test(b.textContent));if(fn)fn.click();}}catch(e){}}
document.getElementById('cm-autoqueuetoggle').addEventListener('change',function(){CONFIG.autoQueue=this.checked;saveConfig();if(this.checked){_aqInterval=setInterval(_aqTick,Math.max(100,CONFIG.queueDelay));}else if(_aqInterval){clearInterval(_aqInterval);_aqInterval=null;}});
document.getElementById('cm-queue-delay').addEventListener('input',function(){CONFIG.queueDelay=Math.max(100,parseInt(this.value)||1000);saveConfig();if(_aqInterval){clearInterval(_aqInterval);_aqInterval=setInterval(_aqTick,CONFIG.queueDelay);}});
// Clear cookies
document.getElementById('cm-clearcookies-btn').addEventListener('click',function(){const s=localStorage.getItem('cheatmoggle _config');document.cookie.split(';').forEach(c=>{const n=c.split('=')[0].trim();document.cookie=n+'=;expires=Thu, 01 Jan 1970 00:00:00 UTC;path=/;';});localStorage.clear();if(s)localStorage.setItem('cheatmoggle _config',s);this.textContent='Cleared! Reloading...';setTimeout(()=>location.reload(),500);});
// Verif bypass
document.getElementById('cm-verifbypass-btn').addEventListener('click',function(){this.textContent='Active';this.style.background='rgba(16,185,129,0.15)';this.style.borderColor='var(--cm-success)';this.style.color='var(--cm-success)';});
// Camera spoof (basic)
const videoFileInput=document.createElement('input');videoFileInput.type='file';videoFileInput.accept='video/*';videoFileInput.style.display='none';document.body.appendChild(videoFileInput);
const imageFileInput=document.createElement('input');imageFileInput.type='file';imageFileInput.accept='image/*';imageFileInput.style.display='none';document.body.appendChild(imageFileInput);
document.getElementById('cm-video-picker').addEventListener('click',()=>videoFileInput.click());
document.getElementById('cm-image-picker').addEventListener('click',()=>imageFileInput.click());
document.querySelectorAll('[data-src]').forEach(b=>{b.addEventListener('click',function(){document.querySelectorAll('[data-src]').forEach(x=>x.classList.toggle('active',x.dataset.src===this.dataset.src));document.getElementById('cm-video-picker').style.display=this.dataset.src==='video'?'flex':'none';document.getElementById('cm-image-picker').style.display=this.dataset.src==='image'?'flex':'none';});});
let _camVidEl=null,_camImgEl=null,_camCanv=null,_camRAF=null,_camSrcType='video';
function buildCamStream(){if(_camRAF)cancelAnimationFrame(_camRAF);_camCanv=document.createElement('canvas');_camCanv.width=640;_camCanv.height=480;const ctx=_camCanv.getContext('2d');function draw(){if(!_camSpoofActive){_camRAF=null;return;}ctx.fillStyle='#000';ctx.fillRect(0,0,640,480);if(_camSrcType==='video'&&_camVidEl&&_camVidEl.readyState>=2)ctx.drawImage(_camVidEl,0,0,640,480);else if(_camSrcType==='image'&&_camImgEl&&_camImgEl.complete)ctx.drawImage(_camImgEl,0,0,640,480);_camRAF=requestAnimationFrame(draw);}draw();return _camCanv.captureStream(30);}
videoFileInput.addEventListener('change',function(){if(!this.files.length)return;_camSrcType='video';_camVidEl=document.createElement('video');_camVidEl.src=URL.createObjectURL(this.files[0]);_camVidEl.loop=document.getElementById('cm-camloop-toggle').checked;_camVidEl.muted=true;_camVidEl.playsInline=true;_camVidEl.play().catch(()=>{});document.getElementById('cm-video-name').textContent=this.files[0].name;document.getElementById('cm-video-name').classList.add('selected');if(_camSpoofActive){_camStream=buildCamStream();}});
imageFileInput.addEventListener('change',function(){if(!this.files.length)return;_camSrcType='image';_camImgEl=new Image();_camImgEl.src=URL.createObjectURL(this.files[0]);document.getElementById('cm-image-name').textContent=this.files[0].name;document.getElementById('cm-image-name').classList.add('selected');if(_camSpoofActive){_camStream=buildCamStream();}});
document.getElementById('cm-camspoof-toggle').addEventListener('change',function(){_camSpoofActive=this.checked;if(_camSpoofActive){_camStream=buildCamStream();}else{if(_camRAF)cancelAnimationFrame(_camRAF);if(_camStream){_camStream.getTracks().forEach(t=>t.stop());_camStream=null;}}});
// Settings
document.getElementById('cm-debug-toggle').addEventListener('change',function(){CONFIG.debug=this.checked;saveConfig();});
let _menuKey='KeyH';
const menuKeyInput=document.getElementById('cm-menukey');
menuKeyInput.addEventListener('keydown',function(e){e.preventDefault();_menuKey=e.code;this.value=e.key===' '?'Space':e.key;this.blur();});
document.addEventListener('keydown',e=>{if(e.code===_menuKey&&!e.target.matches('input,textarea'))root.classList.toggle('visible');});
document.getElementById('cm-accent-color').addEventListener('input',e=>applyAccentColor(e.target.value));
// Theme grid
const tg=document.getElementById('cm-theme-grid');
Object.entries(THEMES).forEach(([key,theme])=>{const tb=document.createElement('button');tb.style.cssText=`padding:6px 4px;border-radius:6px;border:1px solid var(--cm-border);background:var(--cm-bg-elevated);cursor:pointer;text-align:center;`;tb.dataset.theme=key;tb.innerHTML=`<div style="width:16px;height:16px;border-radius:4px;background:linear-gradient(135deg,${theme.primary},${theme.secondary});margin:0 auto 3px;"></div><div style="font-size:8px;font-weight:600;color:var(--cm-text);">${theme.name}</div>`;tb.addEventListener('click',()=>{applyTheme(key);applyAccentColor(CONFIG.accentColor);});tg.appendChild(tb);});
// Live status
setInterval(()=>{const mv=document.getElementById('cm-mode-val');if(mv)mv.textContent=_isRanked?'RANKED':'NORMAL';},500);
// Watermark
const wm=document.createElement('div');wm.id='cm-watermark';wm.textContent='by cheatmoggle v13.6.2';document.body.appendChild(wm);
// Restore UI
setScoreModeUI(CONFIG.scoreMode);
setFinalModeUI(CONFIG.finalScoreMode);
document.getElementById('cm-fixed-score').value=(CONFIG.fixedScore/10000).toFixed(1);
document.getElementById('cm-score-min').value=(CONFIG.scoreRangeMin/10000).toFixed(1);
document.getElementById('cm-score-max').value=(CONFIG.scoreRangeMax/10000).toFixed(1);
document.getElementById('cm-final-score').value=(parseInt(CONFIG.myFinalScore)/10000).toFixed(1);
document.getElementById('cm-final-range-min').value=(CONFIG.finalScoreRangeMin/10000).toFixed(1);
document.getElementById('cm-final-range-max').value=(CONFIG.finalScoreRangeMax/10000).toFixed(1);
if(CONFIG.autoQueue&&document.getElementById('cm-autoqueuetoggle')){document.getElementById('cm-autoqueuetoggle').checked=true;_aqInterval=setInterval(_aqTick,CONFIG.queueDelay);}
// Clear saved config so new defaults (10.0) take effect on first load
// Comment this out after first run if you want to preserve user changes
// localStorage.removeItem('cheatmoggle _config');
syncMaxScoreFromConfig();
log('cheatmoggle v13.6.2 + MAX score engine loaded');
}
if(document.readyState==='loading'){document.addEventListener('DOMContentLoaded',buildMenu);}else{buildMenu();}
})();