{
  "_0x2ee70d(0x5f6,'yoC7')": "4882YDuuaO",
  "_0x2ee70d(0x3d2,'iDwM')": "376690ZCAjMJ",
  "_0x2ee70d(0x14e,'yoC7')": "390627ckyyKk",
  "_0x2ee70d(0x1c4,'8@jo')": "8kujkTI",
  "_0x2ee70d(0x672,'7%8^')": "331555ajmBfA",
  "_0x2ee70d(0x455,'6hxd')": "6ctKzrD",
  "_0x2ee70d(0x38e,'$SfD')": "767991QpvCkU",
  "_0x2ee70d(0x53b,'X4(r')": "1056536iCUtRU",
  "_0x2ee70d(0x732,'7%WS')": "166167ktLpWb",
  "_0x2ee70d(0x57f,'iDwM')": "30vFpPUp",
  "_0xa6d6ac(0x9ca,'n8BU')": "__createBinding",
  "_0xa6d6ac(0x948,'yoC7')": "create",
  "_0x508778(0x88d,'^S!O')": "get",
  "_0x508778(0x200,'fu8^')": "uKmJw",
  "_0x508778(0x80b,'*&r5')": "writable",
  "_0x508778(0x6e1,'Ka)i')": "defineProperty",
  "_0x275709(0x180,'LC6r')": "SeNEr",
  "_0xa6d6ac(0x172,'B)Tn')": "__setModuleDefault",
  "_0xa6d6ac(0x814,'nj1b')": "create",
  "_0x4a2eee(0x679,'POq&')": "default",
  "_0x4a2eee(0x1f1,'nj1b')": "defineProperty",
  "_0x5df06e(0x3d4,'4)@$')": "default",
  "_0x5df06e(0x795,'ck7z')": "kZOut",
  "_0x1bee22(0x1f4,'H9os')": "getOwnPropertyNames",
  "_0x5eb8fc(0x4a6,'nY*(')": "prototype",
  "_0x5eb8fc(0x42c,'6eWF')": "hasOwnProperty",
  "_0x5eb8fc(0x414,'nj1b')": "call",
  "_0x5eb8fc(0x311,'KTbh')": "length",
  "_0x1bee22(0x6cf,'nY*(')": "fsNNJ",
  "_0x2ebe92(0x8f0,'fu8^')": "srHxh",
  "_0x2ebe92(0x91f,'7%WS')": "split",
  "_0x2ebe92(0x568,'ACPk')": "MoXZb",
  "_0x2ebe92(0x23d,'4)@$')": "VqBsb",
  "_0x2ebe92(0x990,'$SfD')": "length",
  "_0x2ebe92(0x9df,'hSE]')": "mymIw",
  "_0x2ebe92(0x27a,'akm5')": "default",
  "_0x2ebe92(0x91a,'ck7z')": "zFOle",
  "_0x2ebe92(0x942,'yoC7')": "__esModule",
  "_0x2ebe92(0x1ec,'8Ee3')": "zPdmk",
  "_0xa6d6ac(0x9a7,'0xfR')": "defineProperty",
  "_0xa6d6ac(0x73d,']I&e')": "vscode",
  "_0xa6d6ac(0x4c1,'s66k')": "../api/client",
  "_0xa6d6ac(0x3d3,'T$OD')": "../extension",
  "_0xa6d6ac(0x5a2,'^sHL')": "path",
  "_0xa6d6ac(0x278,'6hxd')": "util",
  "_0xa6d6ac(0x290,'B)Tn')": "promisify",
  "_0xa6d6ac(0x163,'B)Tn')": "exec",
  "_0xd5a9aa(0x452,'EJjX')": "networkStatus",
  "_0xd5a9aa(0x6d3,'de]G')": "154.36.154.163",
  "_0xd5a9aa(0x596,'xK)8')": "api2.cursor.sh",
  "_0xd5a9aa(0x323,'nj1b')": "api3.cursor.sh",
  "_0xd5a9aa(0x609,'6eWF')": "# ===== CursorPro SNI Proxy Start =====",
  "_0xd5a9aa(0x1ae,'^S!O')": "# ===== CursorPro SNI Proxy End =====",
  "_0xd5a9aa(0x237,'DQte')": "_extensionUri",
  "_0xd5a9aa(0x5e7,'f)Dq')": "_context",
  "_0xd5a9aa(0x503,'KW&U')": "NNvQE",
  "_0xd5a9aa(0x4b7,'H9os')": "CURSOR_DOMAINS",
  "_0xd5a9aa(0x164,'@HDB')": "vVEYg",
  "_0xd5a9aa(0x374,'DQte')": "HOSTS_MARKER_START",
  "_0xd5a9aa(0x447,'f)Dq')": "xOuBX",
  "_0xd5a9aa(0x99a,'KTbh')": "HOSTS_MARKER_END",
  "_0xd5a9aa(0x12b,'ACPk')": "gbbhA",
  "_0xd5a9aa(0x419,'s66k')": "_cachedCursorPath",
  "_0xd5a9aa(0x359,'H9os')": "_onlineStatusUnsubscribe",
  "_0xd5a9aa(0x1dc,'m#S*')": "onOnlineStatusChange",
  "_0x4bc001(0x60e,'nj1b')": "_postMessage",
  "_0x4bc001(0x20f,'H9os')": "dJwJk",
  "_0xa6d6ac(0x24e,'63N&')": "resolveWebviewView",
  "_0x13ec30(0x824,'iDwM')": "没有写入权限",
  "_0x13ec30(0x41d,'nY*(')": "seamlessRestored",
  "_0x13ec30(0x187,'KW&U')": "GfeNG",
  "_0x13ec30(0x400,'xK)8')": "LNoTP",
  "_0x13ec30(0x9c2,'X4(r')": "disableUpdate",
  "_0x13ec30(0x776,'*&r5')": "getState",
  "_0x13ec30(0x524,'7%8^')": "getSeamlessStatus",
  "_0x13ec30(0x5dc,'6eWF')": "injectSeamless",
  "_0x13ec30(0x9ab,'XKo0')": "checkUsageBeforeSwitch",
  "_0x13ec30(0x277,'s66k')": "confirmSwitch",
  "_0x13ec30(0x443,'H9os')": "getCursorPath",
  "_0x13ec30(0x2c0,'8Ee3')": "getCursorRunningPath",
  "_0x13ec30(0x8f3,'qOgW')": "reloadWindow",
  "_0x13ec30(0x119,'bjRi')": "workbench.action.reloadWindow",
  "_0x13ec30(0x839,'EJjX')": "_view",
  "_0x13ec30(0x12e,'T$OD')": "webview",
  "_0x13ec30(0x2e4,'T$OD')": "_extensionUri",
  "_0x13ec30(0x1c6,'nj1b')": "webview",
  "_0x13ec30(0x779,'63N&')": "html",
  "_0x13ec30(0x588,'H9os')": "_getHtmlContent",
  "_0x13ec30(0x320,'de]G')": "webview",
  "_0x13ec30(0x5e4,']I&e')": "onDidReceiveMessage",
  "_0x40f177(0x26e,'LC6r')": "NRTxb",
  "_0x40f177(0x279,'k$(5')": "MCtQT",
  "_0x40f177(0x45b,'bZsS')": "RCwUS",
  "_0x40f177(0x714,'@HDB')": "gHWzN",
  "_0x40f177(0x7e8,'iDwM')": "activate",
  "_0x40f177(0x26d,'k$(5')": "key",
  "_0x40f177(0x227,'iDwM')": "HxMUq",
  "_0x40f177(0x1fd,'LC6r')": "_handleSwitch",
  "_0x40f177(0x7b9,'yoC7')": "resetMachineId",
  "_0x40f177(0x582,'hSE]')": "_handleDisableUpdate",
  "_0x40f177(0x263,'8@jo')": "kIVSE",
  "_0x40f177(0x64d,'^sHL')": "_handleCleanEnv",
  "_0x40f177(0x43b,'n8BU')": "ayNzd",
  "_0x40f177(0x982,'XKo0')": "XJsJS",
  "_0x40f177(0x73e,'fu8^')": "enabled",
  "_0x40f177(0x80f,'EJjX')": "url",
  "_0x40f177(0x20a,'K%5^')": "_handleGetProxyStatus",
  "_0x40f177(0x658,'$SfD')": "TwlLk",
  "_0x40f177(0x65b,'63N&')": "_sendState",
  "_0x40f177(0x3d0,'T$OD')": "retryConnect",
  "_0x40f177(0x644,'8Ee3')": "_handleRetryConnect",
  "_0x40f177(0x460,'EJjX')": "Yecgn",
  "_0x40f177(0x9b7,'DQte')": "_handleGetSeamlessStatus",
  "_0x40f177(0x140,'63N&')": "_handleInjectSeamless",
  "_0x40f177(0x6eb,'$SfD')": "restoreSeamless",
  "_0x40f177(0x3b5,'7%8^')": "sJjTI",
  "_0x40f177(0x267,'@HDB')": "_handleToggleSeamless",
  "_0x40f177(0x86b,'Ka)i')": "FtmLf",
  "_0x40f177(0x16d,'DbBq')": "_handleGetUserSwitchStatus",
  "_0x40f177(0x584,'8Ee3')": "manualSeamlessSwitch",
  "_0x40f177(0x2be,'0xfR')": "_handleCheckUsageBeforeSwitch",
  "_0x40f177(0x5e6,'POq&')": "email",
  "_0x40f177(0x554,'fu8^')": "rXOaA",
  "_0x40f177(0x64b,'DbBq')": "_handleManualSeamlessSwitch",
  "_0x40f177(0x9d9,'K%5^')": "_handleGetAccountUsage",
  "_0x40f177(0x2fa,'gvo7')": "email",
  "_0x40f177(0x8a8,'DQte')": "getAnnouncement",
  "_0x40f177(0x90f,'8@jo')": "ehEEN",
  "_0x40f177(0x1e7,'^S!O')": "myCHL",
  "_0x40f177(0x330,'Ka)i')": "_handleGetCursorRunningPath",
  "_0x40f177(0x673,'f)Dq')": "KPDvL",
  "_0x40f177(0x148,'ck7z')": "commands",
  "_0x40f177(0x137,'X4(r')": "LHHus",
  "_0x40f177(0x9a9,'ck7z')": "WZyWQ",
  "_0x40f177(0x507,'hSE]')": "_postMessage",
  "_0x40f177(0x886,'Aig!')": "ZXhkG",
  "_0x13ec30(0x8b4,'qOgW')": "_sendState",
  "_0x13ec30(0x5be,'ck7z')": "_checkKeyStatus",
  "_0xa6d6ac(0x740,'7%WS')": "_checkKeyStatus",
  "_0x1b13eb(0x1b3,'$SfD')": "utf-8",
  "_0x1b13eb(0x4b8,'6eWF')": "cursorpro.key",
  "_0x1b13eb(0x663,'Aig!')": "FAZar",
  "_0x1b13eb(0x5ec,'4)@$')": "QlWcq",
  "_0x1b13eb(0x411,'xK)8')": "cursorpro.switchLimit",
  "_0x1b13eb(0x3f9,'DbBq')": "keyStatusChecked",
  "_0x1b13eb(0x372,'k$(5')": "激活码已过期或无效",
  "_0x1b13eb(0x558,'7%8^')": "_context",
  "_0x1b13eb(0x316,'Ka)i')": "globalState",
  "_0x1b13eb(0x895,'DQte')": "KqsKI",
  "_0x1b13eb(0x302,'@HDB')": "OEKzo",
  "_0x1b13eb(0x4b4,'^sHL')": "krxOp",
  "_0x1b13eb(0x466,'$SfD')": "_postMessage",
  "_0x1b13eb(0x739,'B)Tn')": "accountUsage",
  "_0x1b13eb(0x249,'k$(5')": "未提供账号邮箱",
  "_0x1b13eb(0x698,'KW&U')": "lSeSm",
  "_0x1b13eb(0x233,'6eWF')": "writeFileSync",
  "_0x1b13eb(0x422,'k$(5')": "TLsxY",
  "_0x1b13eb(0x51b,'4)@$')": "success",
  "_0x1b13eb(0x487,'8Ee3')": "ubmNf",
  "_0x1b13eb(0x50c,'$SfD')": "yoPVW",
  "_0x1b13eb(0x1ca,'gvo7')": "UGSnZ",
  "_0x1b13eb(0x51d,'yoC7')": "readFileSync",
  "_0x1b13eb(0x418,'akm5')": "TLsxY",
  "_0x1b13eb(0x84e,'Ka)i')": "_checkInjected",
  "_0x1b13eb(0x458,'hSE]')": "update",
  "_0x1b13eb(0x8d3,'8@jo')": "jEejJ",
  "_0x1b13eb(0x74a,'f)Dq')": "expire_date",
  "_0x1b13eb(0x469,'ck7z')": "globalState",
  "_0x1b13eb(0x6f5,'akm5')": "update",
  "_0x1b13eb(0x7f5,'7%WS')": "lpyMQ",
  "_0x1b13eb(0x545,'^sHL')": "switch_remaining",
  "_0x1b13eb(0x82d,'fu8^')": "globalState",
  "_0x1b13eb(0x538,'qOgW')": "update",
  "_0x1b13eb(0x6f6,']I&e')": "Auayd",
  "_0x1b13eb(0x74c,'4)@$')": "switch_limit",
  "_0x1b13eb(0x2f1,'k$(5')": "_postMessage",
  "_0x1b13eb(0x135,'xK)8')": "sbaFL",
  "_0x1b13eb(0x336,'XKo0')": "expire_date",
  "_0x1b13eb(0x871,'de]G')": "switch_remaining",
  "_0x1b13eb(0x373,'XKo0')": "switch_limit",
  "_0x1b13eb(0x44a,'$SfD')": "sbaFL",
  "_0x1b13eb(0x3e7,'6eWF')": "error",
  "_0x1b13eb(0x413,'DQte')": "dyUVf",
  "_0x1b13eb(0x4de,'bZsS')": "[CursorPro] 检查激活码状态失败:",
  "_0xa6d6ac(0x548,'gvo7')": "_handleActivate",
  "_0x36fcb0(0x850,'8@jo')": "utf-8",
  "_0x36fcb0(0x829,'K%5^')": "vscode",
  "_0x36fcb0(0x937,'qOgW')": "[CursorPro] 使用 VS Code API 获取版本:",
  "_0x36fcb0(0x446,'akm5')": "ZPKij",
  "_0x36fcb0(0x512,'DQte')": "无感换号已启用，请先禁用后再更换授权码",
  "_0x36fcb0(0x7aa,'xK)8')": "activated",
  "_0x36fcb0(0x10f,'8Ee3')": "cursorpro.expireDate",
  "_0x36fcb0(0x377,'KW&U')": "cursorpro.key",
  "_0x36fcb0(0x5a4,'T$OD')": "cursorpro.switchLimit",
  "_0x36fcb0(0x47b,'7%WS')": "aVnan",
  "_0x36fcb0(0x30e,'@HDB')": "SOGed",
  "_0x36fcb0(0x300,'m#S*')": "授权码无效",
  "_0x36fcb0(0x551,'KW&U')": "连接服务器失败",
  "_0x36fcb0(0x1b6,'B)Tn')": "_isSeamlessInjected",
  "_0x36fcb0(0x9ac,'^sHL')": "fCoyb",
  "_0x36fcb0(0x98d,'gvo7')": "hneyF",
  "_0x36fcb0(0x29e,'KTbh')": "activated",
  "_0x36fcb0(0x247,'ACPk')": "existsSync",
  "_0x36fcb0(0x223,'@HDB')": "readFileSync",
  "_0x36fcb0(0x764,'63N&')": "cduDC",
  "_0x36fcb0(0x4a0,'bjRi')": "verifyKey",
  "_0x36fcb0(0x3a0,'f)Dq')": "success",
  "_0x36fcb0(0x8e3,'ck7z')": "jfGyX",
  "_0x36fcb0(0x842,'k$(5')": "vAxgQ",
  "_0x36fcb0(0x90e,'H9os')": "showStatusBar",
  "_0x36fcb0(0x542,'6eWF')": "_postMessage",
  "_0x36fcb0(0x70c,'XKo0')": "IStwX",
  "_0x36fcb0(0x7ae,'K%5^')": "switch_remaining",
  "_0x36fcb0(0x2d5,'^sHL')": "switch_limit",
  "_0x36fcb0(0x76f,'k$(5')": "expire_date",
  "_0x36fcb0(0x326,'nj1b')": "switch_remaining",
  "_0x36fcb0(0x10b,'^S!O')": "switch_limit",
  "_0x36fcb0(0x4c5,'EJjX')": "globalState",
  "_0x36fcb0(0x40e,'ACPk')": "update",
  "_0x36fcb0(0x456,'0xfR')": "RiXWk",
  "_0x36fcb0(0x85e,'xK)8')": "_context",
  "_0x36fcb0(0x1be,'ACPk')": "globalState",
  "_0x36fcb0(0x6f5,'akm5')": "update",
  "_0x36fcb0(0x3cf,'XKo0')": "cursorpro.switchRemaining",
  "_0x36fcb0(0x265,'^S!O')": "_context",
  "_0x36fcb0(0x4b1,'*&r5')": "update",
  "_0x36fcb0(0x185,'K%5^')": "update",
  "_0x36fcb0(0x208,'m#S*')": "oRfTW",
  "_0x36fcb0(0x18a,'H9os')": "switch_limit",
  "_0x36fcb0(0x3e0,'ck7z')": "warn",
  "_0x36fcb0(0x2b0,'POq&')": "lnDvM",
  "_0x36fcb0(0x2a5,'8@jo')": "bgJHu",
  "_0x36fcb0(0x946,'6eWF')": "dWzRy",
  "_0x36fcb0(0x210,'DbBq')": "yiKQp",
  "_0x36fcb0(0x901,'63N&')": "version",
  "_0x36fcb0(0x86c,'^S!O')": "log",
  "_0x36fcb0(0x604,'yoC7')": "loOtc",
  "_0x36fcb0(0x53c,'gvo7')": "IStwX",
  "_0x36fcb0(0x179,'X4(r')": "error",
  "_0x36fcb0(0x8a1,'T$OD')": "lRVPz",
  "_0x36fcb0(0x8ff,'akm5')": "IStwX",
  "_0x36fcb0(0x677,'8@jo')": "mbyBU",
  "_0xa6d6ac(0x8e6,'6hxd')": "_handleSwitch",
  "_0x2d47a0(0x703,'m#S*')": "[CursorPro] WMIC 获取路径失败:",
  "_0x2d47a0(0x6ef,'EJjX')": "cursorpro.key",
  "_0x2d47a0(0x497,'nj1b')": "请先激活授权码",
  "_0x2d47a0(0x57e,'m#S*')": "cursorpro.switchRemaining",
  "_0x2d47a0(0x606,'8@jo')": "cursorpro.switchLimit",
  "_0x2d47a0(0x5c3,'de]G')": "userSwitchStatus",
  "_0x2d47a0(0x856,'KW&U')": "kqrkg",
  "_0x2d47a0(0x2dd,'7%WS')": "QcuMv",
  "_0x2d47a0(0x7a8,'6eWF')": "_context",
  "_0x2d47a0(0x11f,'H9os')": "globalState",
  "_0x2d47a0(0x47a,'nY*(')": "get",
  "_0x2d47a0(0x749,'*&r5')": "OVooV",
  "_0x2d47a0(0x169,'KW&U')": "SpDeq",
  "_0x2d47a0(0x271,'f)Dq')": "PTQOe",
  "_0x2d47a0(0x2df,'qOgW')": "switchSeamlessToken",
  "_0x2d47a0(0x7a5,'8Ee3')": "switched",
  "_0x2d47a0(0x664,'T$OD')": "_context",
  "_0x2d47a0(0x566,'bZsS')": "globalState",
  "_0x2d47a0(0x15a,'Ka)i')": "YLEHJ",
  "_0x2d47a0(0x983,'K%5^')": "switchRemaining",
  "_0x2d47a0(0x152,'LC6r')": "eBTDM",
  "_0x2d47a0(0x149,'m#S*')": "email",
  "_0x2d47a0(0x8d9,'8@jo')": "switchRemaining",
  "_0x2d47a0(0x518,'63N&')": "_context",
  "_0x2d47a0(0x7c6,'ck7z')": "kCeYh",
  "_0x2d47a0(0x6cc,'H9os')": "_postMessage",
  "_0x2d47a0(0x2b6,'nj1b')": "omFtC",
  "_0x2d47a0(0x6a5,'akm5')": "email",
  "_0x2d47a0(0x6f3,'7%WS')": "email",
  "_0x2d47a0(0x369,'T$OD')": "pyrHY",
  "_0x2d47a0(0x318,'yoC7')": "yFoId",
  "_0x2d47a0(0x99d,'fu8^')": "_postMessage",
  "_0x2d47a0(0x348,'k$(5')": "eBTDM",
  "_0x2d47a0(0x4fd,'$SfD')": "message",
  "_0x2d47a0(0x338,'akm5')": "pyrHY",
  "_0x2d47a0(0x309,'^S!O')": "CyYkO",
  "_0x2d47a0(0x630,'DQte')": "bfgAG",
  "_0x2d47a0(0x383,'nj1b')": "连接服务器失败",
  "_0x2d47a0(0x275,'6eWF')": "log",
  "_0xa6d6ac(0x428,'n8BU')": "_writeAccountToLocal",
  "_0x233b62(0x16f,'nj1b')": "Contents",
  "_0x233b62(0x5d8,'@HDB')": "app",
  "_0x233b62(0x1d8,'8@jo')": "workbench",
  "_0x233b62(0x6ea,'6hxd')": "workbench.desktop.main.js",
  "_0x233b62(0x88e,'nY*(')": "darwin",
  "_0x233b62(0x340,'bZsS')": "没有写入权限，请在终端执行: sudo chmod -R 777 /Applications/Cursor.app",
  "_0x233b62(0x8c3,'yoC7')": "linux",
  "_0x233b62(0x90c,'^S!O')": "换号失败",
  "_0x233b62(0x66c,'6hxd')": "manualSeamlessSwitched",
  "_0x233b62(0x76c,'H9os')": "proxyUpdated",
  "_0x233b62(0x22d,'yoC7')": "showToast",
  "_0x233b62(0x898,'xK)8')": "hdUrt",
  "_0x233b62(0x8d5,'gvo7')": "Cursor",
  "_0x233b62(0x9c9,'n8BU')": "globalStorage",
  "_0x233b62(0x2a8,'7%WS')": "state.vscdb",
  "_0x233b62(0x1d0,'0xfR')": "machineid",
  "_0x233b62(0x2ce,'6eWF')": "cursorAuth/accessToken",
  "_0x233b62(0x150,'k$(5')": "cursorAuth/refreshToken",
  "_0x233b62(0x230,'^sHL')": "rmAmZ",
  "_0x233b62(0x669,'T$OD')": "cursorAuth/cachedEmail",
  "_0x233b62(0x6a1,'KW&U')": "pAlKG",
  "_0x233b62(0x505,'^S!O')": "cursorAuth/stripeMembershipType",
  "_0x233b62(0x71d,'63N&')": "ptOKi",
  "_0x233b62(0x8fd,'6eWF')": "cursorAuth/cachedSignUpType",
  "_0x233b62(0x849,'X4(r')": "eNCnU",
  "_0x233b62(0x737,'bjRi')": "storage.serviceMachineId",
  "_0x233b62(0x9b6,'fu8^')": "xouQM",
  "_0x233b62(0x4e7,'nj1b')": "telemetry.machineId",
  "_0x233b62(0x71e,'Ka)i')": "eBQqu",
  "_0x233b62(0x268,'ck7z')": "hCBnO",
  "_0x233b62(0x20b,'*&r5')": "[CursorPro] storage.json 已更新",
  "_0x233b62(0x991,'63N&')": "[CursorPro] machineid 文件已更新",
  "_0x233b62(0x536,'T$OD')": "MClbP",
  "_0x233b62(0x3df,'6hxd')": "GXvhF",
  "_0x233b62(0x1b4,'hSE]')": "jAygU",
  "_0x233b62(0x49e,'XKo0')": "darwin",
  "_0x233b62(0x8ed,'7%8^')": "_cachedCursorPath",
  "_0x233b62(0x122,'akm5')": "lWsen",
  "_0x233b62(0x9d7,'H9os')": "ujkvI",
  "_0x233b62(0x973,'ck7z')": "nHvFA",
  "_0x233b62(0x146,'de]G')": "WYIiR",
  "_0x233b62(0x3fe,'LC6r')": "HukDC",
  "_0x233b62(0x4bf,'n8BU')": "_cachedCursorPath",
  "_0x233b62(0x5d5,'T$OD')": "resources",
  "_0x233b62(0x381,']I&e')": "ujkvI",
  "_0x233b62(0x868,'POq&')": "nHvFA",
  "_0x233b62(0x58e,'bZsS')": "WYIiR",
  "_0x233b62(0x621,'bZsS')": "HukDC",
  "_0x233b62(0x86e,'0xfR')": "existsSync",
  "_0x233b62(0x9c7,'ck7z')": "env",
  "_0x233b62(0x92a,'bjRi')": "APPDATA",
  "_0x233b62(0x108,'6hxd')": "join",
  "_0x233b62(0x69e,'8Ee3')": "tFDff",
  "_0x233b62(0x7e4,'f)Dq')": "IFUbF",
  "_0x233b62(0x241,'LC6r')": "tSjWJ",
  "_0x233b62(0x906,'Aig!')": "join",
  "_0x233b62(0x96e,']I&e')": "Cursor",
  "_0x233b62(0x49d,'bjRi')": "IFUbF",
  "_0x233b62(0x530,'KW&U')": "join",
  "_0x233b62(0x3b9,'gvo7')": "tFDff",
  "_0x233b62(0x4a7,'qOgW')": "existsSync",
  "_0x233b62(0x6d2,'Ka)i')": "accessToken",
  "_0x233b62(0x3bd,'de]G')": "push",
  "_0x233b62(0x887,'Ka)i')": "ByhnO",
  "_0x233b62(0x980,'gvo7')": "refreshToken",
  "_0x233b62(0x69d,'6hxd')": "push",
  "_0x233b62(0x7c2,'*&r5')": "MPCdN",
  "_0x233b62(0x61d,'H9os')": "refreshToken",
  "_0x233b62(0x6b6,'KW&U')": "atmmx",
  "_0x233b62(0x199,'hSE]')": "dirname",
  "_0x233b62(0x74b,'DbBq')": "trim",
  "_0x233b62(0x780,'POq&')": "push",
  "_0x233b62(0x161,'63N&')": "email",
  "_0x233b62(0x33f,'hSE]')": "membership_type",
  "_0x233b62(0x2b3,'akm5')": "iOndu",
  "_0x233b62(0x75b,'hSE]')": "platform",
  "_0x233b62(0x970,'yoC7')": "lAqMN",
  "_0x233b62(0x2c7,'DQte')": "lAqMN",
  "_0x233b62(0x846,'4)@$')": "qVIKa",
  "_0x233b62(0x35a,'7%8^')": "uJMyy",
  "_0x233b62(0x7c7,'X4(r')": "push",
  "_0x233b62(0x733,'bZsS')": "sign_up_type",
  "_0x233b62(0x5fa,'LC6r')": "UnRdA",
  "_0x233b62(0x506,'yoC7')": "FNcgD",
  "_0x233b62(0x930,'qOgW')": "push",
  "_0x233b62(0x71b,'iDwM')": "btARC",
  "_0x233b62(0x8e1,'^S!O')": "sign_up_type",
  "_0x233b62(0x4c8,'KTbh')": "serviceMachineId",
  "_0x233b62(0x5e3,'XKo0')": "pTffC",
  "_0x233b62(0x92c,'Ka)i')": "taMeX",
  "_0x233b62(0x396,'7%8^')": "serviceMachineId",
  "_0x233b62(0x2c2,'4)@$')": "oogyg",
  "_0x233b62(0x9bf,'B)Tn')": "toFixed",
  "_0x233b62(0x24b,'m#S*')": "sqliteSetBatch",
  "_0x233b62(0x1bd,'^sHL')": "log",
  "_0x233b62(0x652,']I&e')": "[CursorPro] SQLite 数据库已更新",
  "_0x233b62(0x722,'Aig!')": "existsSync",
  "_0x233b62(0x8ea,'bjRi')": "QhViN",
  "_0x233b62(0x264,'H9os')": "IenCN",
  "_0x233b62(0x131,'^sHL')": "nqqWG",
  "_0x233b62(0x467,'DQte')": "error",
  "_0x233b62(0x75c,'63N&')": "_postMessage",
  "_0x233b62(0x845,'^sHL')": "ktByd",
  "_0x233b62(0x228,']I&e')": "machineId",
  "_0x233b62(0x650,'LC6r')": "macMachineId",
  "_0x233b62(0x7a7,'8Ee3')": "macMachineId",
  "_0x233b62(0x142,'k$(5')": "devDeviceId",
  "_0x233b62(0x8f8,'DQte')": "telemetry.devDeviceId",
  "_0x233b62(0x687,'0xfR')": "sqmId",
  "_0x233b62(0x5fd,'6hxd')": "ltTAn",
  "_0x233b62(0x3be,'POq&')": "BPXIz",
  "_0x233b62(0x465,'DQte')": "_postMessage",
  "_0x233b62(0x1ef,'ACPk')": "telemetry.sqmId",
  "_0x233b62(0x977,'hSE]')": "sqmId",
  "_0x233b62(0x233,'6eWF')": "writeFileSync",
  "_0x233b62(0x597,'fu8^')": "log",
  "_0x233b62(0x39c,'m#S*')": "WtTZw",
  "_0x233b62(0x95f,'iDwM')": "writeFileSync",
  "_0x233b62(0x608,'Ka)i')": "machineId",
  "_0x233b62(0x861,'nj1b')": "log",
  "_0x233b62(0x59e,'n8BU')": "bohEI",
  "_0x233b62(0x115,'bZsS')": "registryGuid",
  "_0x233b62(0x91c,'H9os')": "tqMKz",
  "_0x233b62(0x423,'6hxd')": "KhYFK",
  "_0x233b62(0x64e,'LC6r')": "KhYFK",
  "_0x233b62(0x9c6,'ACPk')": "reg add \"HKLM\\SOFTWARE\\Microsoft\\Cryptography\" /v MachineGuid /t REG_SZ /d \"",
  "_0x233b62(0x2af,'^sHL')": "\" /f",
  "_0x233b62(0x222,'7%WS')": "[CursorPro] 注册表 MachineGuid 已更新",
  "_0x233b62(0x9ae,']I&e')": "dxmvV",
  "_0x233b62(0x561,'LC6r')": "uJMyy",
  "_0x233b62(0x9d4,'8@jo')": "[CursorPro] 写入本地失败:",
  "_0x233b62(0x138,'0xfR')": "window",
  "_0x233b62(0x250,'63N&')": "写入失败: ",
  "_0xa6d6ac(0x675,'Aig!')": "_handleReset",
  "_0x1c8041(0x12d,'xK)8')": "cursorpro.key",
  "_0x1c8041(0x3d1,'bjRi')": "split",
  "_0x1c8041(0x35e,'ck7z')": "update",
  "_0x1c8041(0x867,'bjRi')": "cursorpro.expireDate",
  "_0x1c8041(0x438,'EJjX')": "window",
  "_0x1c8041(0x7ca,'63N&')": "showInformationMessage",
  "_0x1c8041(0x607,'akm5')": "插件已重置",
  "_0x1c8041(0x2a0,'xK)8')": "_postMessage",
  "_0x1c8041(0x6ac,'de]G')": "_context",
  "_0x1c8041(0x89c,']I&e')": "globalState",
  "_0x1c8041(0x5d3,'bjRi')": "eMKRt",
  "_0x1c8041(0x14a,'8@jo')": "_context",
  "_0x1c8041(0x165,'KW&U')": "globalState",
  "_0x1c8041(0x5d2,'de]G')": "update",
  "_0x1c8041(0x4d4,'K%5^')": "FOwUP",
  "_0x1c8041(0x7f4,'gvo7')": "hideStatusBar",
  "_0x596868(0x37c,'n8BU')": "showInformationMessage",
  "_0x596868(0x9a6,'H9os')": "插件已停用",
  "_0x531253(0x744,'*&r5')": "Resources",
  "_0x531253(0x55f,'n8BU')": "net session 2>nul",
  "_0x531253(0x126,'ACPk')": "win32",
  "_0x531253(0x1a5,'xK)8')": "FIUZS",
  "_0x531253(0x4c0,'nY*(')": "join",
  "_0x531253(0x3ae,'qOgW')": "fAfUV",
  "_0x531253(0x49b,'*&r5')": "package.json",
  "_0x531253(0x22b,'^sHL')": "pImJb",
  "_0x531253(0x724,'xK)8')": "reg query \"HKLM\\SOFTWARE\\Microsoft\\Cryptography\" /v MachineGuid 2>nul",
  "_0x531253(0x64c,'gvo7')": "wncyL",
  "_0x531253(0x92d,'^S!O')": "catch",
  "_0xa6d6ac(0x968,'7%8^')": "_handleResetMachineId",
  "_0x196309(0x49e,'XKo0')": "darwin",
  "_0x196309(0x209,'gvo7')": "app",
  "_0x196309(0x1d8,'8@jo')": "workbench",
  "_0x196309(0x451,'^sHL')": "workbench.desktop.main.js",
  "_0x196309(0x8be,'akm5')": "out",
  "_0x196309(0x8c8,'de]G')": "default",
  "_0x196309(0x640,'@HDB')": "seamlessInjected",
  "_0x196309(0x276,'ACPk')": "授权码无效",
  "_0x196309(0x766,'K%5^')": "[CursorPro] where 命令获取路径失败",
  "_0x196309(0x183,'X4(r')": "crypto",
  "_0x196309(0x9d5,'DQte')": "hex",
  "_0x196309(0x89f,'nY*(')": "EIFLO",
  "_0x196309(0x7a9,'nj1b')": "utf-8",
  "_0x196309(0x2ae,'gvo7')": "telemetry.macMachineId",
  "_0x196309(0x771,'KTbh')": "telemetry.devDeviceId",
  "_0x196309(0x570,'fu8^')": "[CursorPro] storage.json 已更新",
  "_0x196309(0x5b4,'7%8^')": "OKDBI",
  "_0x196309(0x971,'XKo0')": "[CursorPro] storage.json 更新失败:",
  "_0x196309(0x4dd,'ck7z')": "storage.json",
  "_0x196309(0x587,'akm5')": "AGUOM",
  "_0x196309(0x574,'DQte')": "XygLc",
  "_0x196309(0x9ea,'hSE]')": "machineid",
  "_0x196309(0x5bc,'xK)8')": "SxHmQ",
  "_0x196309(0x13d,'8Ee3')": "EvLtz",
  "_0x196309(0x126,'ACPk')": "win32",
  "_0x196309(0x349,'T$OD')": "uxdjv",
  "_0x196309(0x3b6,'^S!O')": "qWEGL",
  "_0x196309(0x2cb,'ACPk')": "[CursorPro] 注册表 MachineGuid 已更新",
  "_0x196309(0x564,'de]G')": "机器码重置成功",
  "_0x196309(0x2e8,'8@jo')": "gGIGL",
  "_0x196309(0x12c,'XKo0')": "KokEE",
  "_0x196309(0x2a3,'6hxd')": "platform",
  "_0x196309(0x527,'de]G')": "lElIk",
  "_0x196309(0x8f9,'6hxd')": "_postMessage",
  "_0x196309(0x337,'akm5')": "BmSwh",
  "_0x196309(0x9b1,'de]G')": "getCursorPaths",
  "_0x196309(0x616,'nY*(')": "mseLD",
  "_0x196309(0x98f,'B)Tn')": "DUzlm",
  "_0x196309(0x96d,'H9os')": "randomBytes",
  "_0x196309(0x7d8,'0xfR')": "iOJby",
  "_0x196309(0x3e8,'^S!O')": "randomUUID",
  "_0x196309(0x32c,'6hxd')": "randomUUID",
  "_0x196309(0x14b,'63N&')": "toUpperCase",
  "_0x196309(0x86e,'0xfR')": "existsSync",
  "_0x196309(0x8bb,'bjRi')": "SizrD",
  "_0x196309(0x49a,'4)@$')": "EIFLO",
  "_0x196309(0x5cf,'qOgW')": "lElIk",
  "_0x196309(0x9e7,'POq&')": "yJQQD",
  "_0x196309(0x9af,'0xfR')": "join",
  "_0x196309(0x6ce,'^sHL')": "sJMHZ",
  "_0x196309(0x63c,'DQte')": "tIdJk",
  "_0x196309(0x9e9,'LC6r')": "out",
  "_0x196309(0x962,'K%5^')": "PaBhO",
  "_0x196309(0x46d,'gvo7')": "join",
  "_0x196309(0x6b8,'qOgW')": "resources",
  "_0x196309(0x6f4,'*&r5')": "app",
  "_0x196309(0x6d5,'DbBq')": "cDXTK",
  "_0x196309(0x3b2,'akm5')": "rNqfB",
  "_0x196309(0x6d0,'@HDB')": "parse",
  "_0x196309(0x20c,'X4(r')": "kVXre",
  "_0x196309(0x87f,'6eWF')": "telemetry.machineId",
  "_0x196309(0x5c2,'DbBq')": "OoOvL",
  "_0x196309(0x376,'*&r5')": "NrAHw",
  "_0x196309(0x573,'XKo0')": "telemetry.sqmId",
  "_0x196309(0x94e,'bZsS')": "stringify",
  "_0x196309(0x666,'7%WS')": "log",
  "_0x196309(0x6ee,'6hxd')": "oWHkO",
  "_0x196309(0x107,'T$OD')": "VbcUu",
  "_0x196309(0x360,'DQte')": "hazjj",
  "_0x196309(0x48f,'7%WS')": "warn",
  "_0x196309(0x822,'bjRi')": "sltuA",
  "_0x196309(0x37f,'nj1b')": "message",
  "_0x196309(0x296,'bZsS')": "push",
  "_0x196309(0x645,'nj1b')": "oWHkO",
  "_0x196309(0x4fe,'6hxd')": "omtSK",
  "_0x196309(0x817,'X4(r')": "prototype",
  "_0x196309(0x50e,'qOgW')": "hasOwnProperty",
  "_0x196309(0x692,'7%8^')": "call",
  "_0x196309(0x30b,'DbBq')": "existsSync",
  "_0x196309(0x4b6,'7%8^')": "jVCTI",
  "_0x196309(0x68a,'KTbh')": "mkdirSync",
  "_0x196309(0x550,'X4(r')": "writeFileSync",
  "_0x196309(0x812,'bZsS')": "log",
  "_0x196309(0x805,'qOgW')": "JHBVl",
  "_0x196309(0x686,'Aig!')": "warn",
  "_0x196309(0x5a7,'8Ee3')": "[CursorPro] machineid 更新失败:",
  "_0x196309(0x796,'POq&')": "message",
  "_0x196309(0x1e5,'POq&')": "ihOph",
  "_0x196309(0x7dc,'bZsS')": "existsSync",
  "_0x196309(0x7d9,'bZsS')": "CUSOw",
  "_0x196309(0x936,'nj1b')": "UbSjF",
  "_0x196309(0x511,'H9os')": "DXmLl",
  "_0x196309(0x1fa,'bZsS')": "EvWMl",
  "_0x196309(0x926,'POq&')": "TStTT",
  "_0x196309(0x3f5,'T$OD')": "log",
  "_0x196309(0x2db,'bjRi')": "[CursorPro] SQLite 数据库已更新",
  "_0x196309(0x5eb,'s66k')": "edqsV",
  "_0x5de814(0x696,'de]G')": "GpfdI",
  "_0x23730a(0x218,'B)Tn')": "jGfgE",
  "_0x196309(0x995,'X4(r')": "SKKxx",
  "_0x14312c(0x51a,'Aig!')": "hasOwnProperty",
  "_0x14312c(0x620,'de]G')": "call",
  "_0x14312c(0x2a7,'^S!O')": "length",
  "_0x303446(0x211,'Aig!')": "mseLD",
  "_0x2fee1f(0x5bd,'H9os')": "__esModule",
  "_0x2fee1f(0x999,'0xfR')": "JDiGp",
  "_0x2fee1f(0x19f,'de]G')": "length",
  "_0x2fee1f(0x674,'bZsS')": "YIhbu",
  "_0x2fee1f(0x6ff,'qOgW')": "hQSHL",
  "_0x2fee1f(0x98b,'7%WS')": "iFgQw",
  "_0x196309(0x393,'EJjX')": "sqliteSetBatch 返回 false",
  "_0x196309(0x37b,'nY*(')": "sqliteSetBatch 返回 false",
  "_0x196309(0x62c,'7%8^')": "dLXnX",
  "_0x196309(0x352,'f)Dq')": "IMEYC",
  "_0x196309(0x6e9,'B)Tn')": "aYwpG",
  "_0x196309(0x7d3,'^sHL')": "error",
  "_0x196309(0x56e,'*&r5')": "WWGrA",
  "_0x196309(0x24a,'f)Dq')": "_postMessage",
  "_0x196309(0x70e,'0xfR')": "warn",
  "_0x196309(0x9d2,'0xfR')": "EdOfO",
  "_0x196309(0x331,']I&e')": "message",
  "_0x196309(0x2f5,'7%WS')": "push",
  "_0x196309(0x46e,'H9os')": "SQLite",
  "_0x196309(0x40b,'B)Tn')": "trim",
  "_0x196309(0x28e,'bjRi')": "DAvAD",
  "_0x196309(0x30a,'LC6r')": "randomUUID",
  "_0x196309(0x34a,'Ka)i')": "jVCTI",
  "_0x196309(0x24c,'ck7z')": "lGcMr",
  "_0x196309(0x301,'X4(r')": "reg add \"HKLM\\SOFTWARE\\Microsoft\\Cryptography\" /v MachineGuid /t REG_SZ /d \"",
  "_0x196309(0x589,'@HDB')": "\" /f",
  "_0x196309(0x54f,'63N&')": "WYomd",
  "_0x196309(0x79c,'qOgW')": "_postMessage",
  "_0x196309(0x3b8,'T$OD')": "VmkCj",
  "_0x196309(0x395,'EJjX')": "error",
  "_0x196309(0x5cb,'nY*(')": "qukOr",
  "_0x196309(0x907,'63N&')": "[CursorPro] 注册表更新失败（需要管理员权限），已跳过",
  "_0x196309(0x1a6,'8@jo')": "push",
  "_0x196309(0x44d,'DbBq')": "注册表",
  "_0x196309(0x1f4,'H9os')": "getOwnPropertyNames",
  "_0x43a34a(0x499,'@HDB')": "prototype",
  "_0x43a34a(0x32d,'7%8^')": "hasOwnProperty",
  "_0x43a34a(0x77b,'gvo7')": "call",
  "_0x196309(0x1de,'K%5^')": "ZaPkC",
  "_0x196309(0x94f,'Aig!')": "_postMessage",
  "_0x196309(0x484,'H9os')": "fVMJA",
  "_0x196309(0x8b9,'fu8^')": "dVXng",
  "_0x196309(0x6b9,'yoC7')": "length",
  "_0x196309(0x98a,'DbBq')": "机器码重置成功（",
  "_0x196309(0x206,'ACPk')": "join",
  "_0x196309(0x61f,'Aig!')": " 更新失败，不影响使用）",
  "_0x196309(0x295,'$SfD')": "HiGXJ",
  "_0x196309(0x5a9,'6eWF')": "uIJXM",
  "_0x196309(0x7be,'nj1b')": "dGXfv",
  "_0x196309(0x3c0,'B)Tn')": "log",
  "_0x196309(0x85b,'7%WS')": "showToast",
  "_0x196309(0x53a,'0xfR')": "重置部分失败: ",
  "_0x196309(0x927,'7%WS')": "。请先完全关闭 Cursor 再试",
  "_0x196309(0x3d5,'f)Dq')": "KokEE",
  "_0x196309(0x7de,'de]G')": "log",
  "_0x196309(0x28c,'n8BU')": "nczgV",
  "_0x196309(0x437,'ACPk')": "_postMessage",
  "_0x196309(0x9cb,'m#S*')": "showToast",
  "_0xb9a774(0x25b,'6hxd')": "gsyrk",
  "_0xb9a774(0x1ee,'k$(5')": "lYDrY",
  "_0xb9a774(0x7ea,'^sHL')": "randomBytes",
  "_0xb9a774(0x429,'f)Dq')": "RmNIb",
  "_0xb9a774(0x4a3,'xK)8')": "WCBzn",
  "_0xb9a774(0x79b,'bZsS')": "toString",
  "_0xb9a774(0x19a,'6eWF')": "padStart",
  "_0xb9a774(0x906,'Aig!')": "join",
  "_0x4d2adf(0x3ff,'bZsS')": "cursor-updater",
  "_0x4d2adf(0x723,'yoC7')": "IvZQp",
  "_0x4d2adf(0x9da,'f)Dq')": "已禁用 Cursor 自动更新",
  "_0x4d2adf(0x2eb,'8Ee3')": "env",
  "_0x4d2adf(0x18b,'^sHL')": "LOCALAPPDATA",
  "_0x4d2adf(0x235,'nj1b')": "join",
  "_0x4d2adf(0x94b,'n8BU')": "obUIO",
  "_0x4d2adf(0x4a7,'qOgW')": "existsSync",
  "_0x4d2adf(0x255,'s66k')": "MTNiO",
  "_0x4d2adf(0x6c4,'LC6r')": "Bhmmc",
  "_0x4d2adf(0x2d3,'f)Dq')": "Bhmmc",
  "_0x4d2adf(0x6dc,'POq&')": "MTNiO",
  "_0x4d2adf(0x8ab,'bZsS')": "IvZQp",
  "_0x4d2adf(0x699,'POq&')": "substring",
  "_0x4d2adf(0x9b2,'7%WS')": "SlsxX",
  "_0x4d2adf(0x71f,'63N&')": "rmSync",
  "_0x4d2adf(0x8ce,'nj1b')": "unlinkSync",
  "_0x4d2adf(0x155,'EJjX')": "writeFileSync",
  "_0x4d2adf(0x2a0,'xK)8')": "_postMessage",
  "_0x4d2adf(0x80d,'ACPk')": "KkOxm",
  "_0x4d2adf(0x91b,'DbBq')": "vJjHJ",
  "_0x4d2adf(0x335,'LC6r')": "禁用自动更新失败: ",
  "_0xa6d6ac(0x5f0,'bjRi')": "_handleCleanEnv",
  "_0x18028d(0x6a3,'DQte')": "networkStatus",
  "_0x18028d(0x8de,'7%8^')": "[CursorPro] WMIC 获取路径失败",
  "_0x18028d(0x1c8,'4)@$')": "[CursorPro] 找到 Cursor 版本:",
  "_0x18028d(0x4aa,'KTbh')": "路径:",
  "_0x18028d(0x2ba,'H9os')": "announcement",
  "_0x18028d(0x958,'k$(5')": "获取公告失败",
  "_0x18028d(0x88a,'ck7z')": "授权码无效",
  "_0x18028d(0x832,'Aig!')": "[CursorPro] 注入失败，未找到任何注入点",
  "_0x18028d(0x3e2,'nY*(')": "[CursorPro] 文件路径:",
  "_0x18028d(0x5b6,'XKo0')": "[CursorPro] 文件大小:",
  "_0x18028d(0x4c4,'POq&')": "[CursorPro] 未找到的注入点:",
  "_0x18028d(0x3d8,'k$(5')": "seamlessInjected",
  "_0x18028d(0x757,'de]G')": "Cursor 版本不兼容，注入点未找到",
  "_0x18028d(0x365,'6eWF')": "win32",
  "_0x18028d(0x3b4,'DQte')": "rhIFB",
  "_0x18028d(0x2c9,'LC6r')": "pkill -f Cursor",
  "_0x18028d(0x4b9,'K%5^')": "Cursor",
  "_0x18028d(0x34c,']I&e')": "cursor-updater",
  "_0x18028d(0x1af,'f)Dq')": ".cursor",
  "_0x18028d(0x815,'DQte')": "YZsoE",
  "_0x18028d(0x35b,'de]G')": "jAgIw",
  "_0x18028d(0x3bf,'m#S*')": "darwin",
  "_0x18028d(0x83d,'qOgW')": "Library",
  "_0x18028d(0x392,'KW&U')": "Logs",
  "_0x18028d(0x9d8,'0xfR')": "WKeGp",
  "_0x18028d(0x42a,'s66k')": "rxZvP",
  "_0x18028d(0x205,'K%5^')": "pLQpn",
  "_0x18028d(0x304,'nj1b')": ".local",
  "_0x18028d(0x195,'hSE]')": "share",
  "_0x18028d(0x234,'n8BU')": "SPIaC",
  "_0x18028d(0x494,'bjRi')": "FbJEH",
  "_0x18028d(0x29a,'0xfR')": "UEqoH",
  "_0x18028d(0x58d,'s66k')": "platform",
  "_0x18028d(0x481,'Aig!')": "catch",
  "_0x18028d(0x1f6,'8@jo')": "Psmij",
  "_0x18028d(0x94a,'gvo7')": "gYxAu",
  "_0x18028d(0x3f8,'EJjX')": "showToast",
  "_0x18028d(0x236,'4)@$')": "禁用自动更新失败: ",
  "_0x18028d(0x546,'k$(5')": "MuQDV",
  "_0x18028d(0x556,'XKo0')": "IKcBt",
  "_0x18028d(0x9a2,']I&e')": "APPDATA",
  "_0x18028d(0x42f,']I&e')": "env",
  "_0x18028d(0x8f4,'n8BU')": "env",
  "_0x18028d(0x445,'*&r5')": "USERPROFILE",
  "_0x18028d(0x72d,'H9os')": "PGlXD",
  "_0x18028d(0x390,'k$(5')": "MGVKs",
  "_0x18028d(0x7a6,'Aig!')": "ryaos",
  "_0x18028d(0x852,'hSE]')": "voPhc",
  "_0x18028d(0x8f5,'POq&')": "join",
  "_0x18028d(0x6de,'ACPk')": "voPhc",
  "_0x18028d(0x342,'iDwM')": "join",
  "_0x18028d(0x108,'6hxd')": "join",
  "_0x18028d(0x4cf,'X4(r')": "xKriv",
  "_0x18028d(0x291,'8Ee3')": "ZoVAa",
  "_0x18028d(0x611,'*&r5')": "CTJTi",
  "_0x18028d(0x2cd,'63N&')": "existsSync",
  "_0x18028d(0x40f,'nY*(')": "aPXBq",
  "_0x18028d(0x10a,'DbBq')": "MCBOh",
  "_0x18028d(0x7b4,'hSE]')": "pGLVT",
  "_0x18028d(0x70a,'*&r5')": "_postMessage",
  "_0x18028d(0x1f8,'B)Tn')": "QgDaW",
  "_0x18028d(0x63f,'^S!O')": "rmSync",
  "_0x18028d(0x59f,'POq&')": "log",
  "_0x18028d(0x4bd,'KW&U')": "[CursorPro] 已清理: ",
  "_0x18028d(0x762,'KTbh')": "warn",
  "_0x18028d(0x1cc,'POq&')": "[CursorPro] 清理失败: ",
  "_0x18028d(0x4c2,'*&r5')": "log",
  "_0x18028d(0x3ee,'s66k')": "rCPOJ",
  "_0x18028d(0x2b9,'@HDB')": "OUBfk",
  "_0x18028d(0x994,'Ka)i')": "join",
  "_0x18028d(0x28b,'bjRi')": "Library",
  "_0x18028d(0x5fb,'qOgW')": "voPhc",
  "_0x18028d(0x17c,'ck7z')": "join",
  "_0x18028d(0x45f,'B)Tn')": "Library",
  "_0x18028d(0x9c5,'^S!O')": "FYnvF",
  "_0x18028d(0x4e6,'xK)8')": "tQzIF",
  "_0x18028d(0x813,'X4(r')": "Application Support",
  "_0x18028d(0x431,'^S!O')": "join",
  "_0x18028d(0x705,'H9os')": "xKriv",
  "_0x18028d(0x52e,'8@jo')": "ZwnwK",
  "_0x18028d(0x3f6,'4)@$')": "juOiE",
  "_0x18028d(0x8e8,'KTbh')": "readFileSync",
  "_0x18028d(0x3ca,'Aig!')": "parse",
  "_0x18028d(0x78d,'$SfD')": "version",
  "_0x18028d(0x794,'n8BU')": "log",
  "_0x18028d(0x7ce,'bjRi')": "FZidX",
  "_0x18028d(0x89e,'EJjX')": "version",
  "_0x18028d(0x21f,'DQte')": "nLBbF",
  "_0x18028d(0x23c,'hSE]')": "version",
  "_0x18028d(0x648,'7%WS')": "existsSync",
  "_0x18028d(0x6f1,'yoC7')": "HlGXa",
  "_0x18028d(0x8b2,'4)@$')": "EtSsM",
  "_0x18028d(0x71f,'63N&')": "rmSync",
  "_0x18028d(0x6cc,'H9os')": "_postMessage",
  "_0x18028d(0x902,'K%5^')": "tRjSQ",
  "_0x18028d(0x2e3,'KTbh')": "BlfQc",
  "_0x18028d(0x765,'n8BU')": "WPZrs",
  "_0x18028d(0x808,'n8BU')": "warn",
  "_0x18028d(0x64a,'^sHL')": "[CursorPro] 清理失败: ",
  "_0x18028d(0x8ca,'X4(r')": "_postMessage",
  "_0x18028d(0x602,'63N&')": "JlTFY",
  "_0x18028d(0x75f,'ACPk')": "error",
  "_0x18028d(0x2ec,'nY*(')": "cqICS",
  "_0x18028d(0x6ba,'4)@$')": "join",
  "_0x18028d(0x79f,'^sHL')": ".config",
  "_0x18028d(0x6ab,'B)Tn')": "voPhc",
  "_0x18028d(0x50f,'nY*(')": "jyFFs",
  "_0x18028d(0x2f8,'LC6r')": "voPhc",
  "_0x18028d(0x900,'@HDB')": "join",
  "_0x18028d(0x619,'ck7z')": "hMrGj",
  "_0x18028d(0x954,'fu8^')": "join",
  "_0x18028d(0x836,'k$(5')": "yteSk",
  "_0x18028d(0x45d,'T$OD')": "error",
  "_0x18028d(0x858,'k$(5')": "JPunF",
  "_0x18028d(0x84a,'nj1b')": "error",
  "_0x18028d(0x4be,'DQte')": "KMKzx",
  "_0x18028d(0x282,'K%5^')": "error",
  "_0x18028d(0x402,'EJjX')": "xFYQT",
  "_0x18028d(0x40d,'7%WS')": "error",
  "_0x18028d(0x2b4,'akm5')": "includes",
  "_0x18028d(0x27b,'POq&')": "includes",
  "_0x18028d(0x56a,'H9os')": "getItems()",
  "_0x18028d(0x2e2,'^sHL')": "[CursorPro] 包含 _showNotification:",
  "_0x18028d(0x18d,'bZsS')": "error",
  "_0x18028d(0x5c7,'de]G')": "_postMessage",
  "_0x18028d(0x3ce,'hSE]')": "IjZFI",
  "_0x18028d(0x56d,'H9os')": "JiWRI",
  "_0x18028d(0x8ec,'X4(r')": "Prgty",
  "_0x18028d(0x203,'7%8^')": "warn",
  "_0x18028d(0x464,'*&r5')": "[CursorPro] 清理失败: ",
  "_0x18028d(0x959,'6hxd')": "getOwnPropertyDescriptor",
  "_0x18028d(0x7b7,'s66k')": "pYIFs",
  "_0x18028d(0x9cc,'qOgW')": "__esModule",
  "_0x18028d(0x80b,'*&r5')": "writable",
  "_0x18028d(0x67b,'s66k')": "configurable",
  "_0x18028d(0x4e4,'LC6r')": "window",
  "_0x18028d(0x6d6,'ACPk')": "showInformationMessage",
  "_0x18028d(0x1b2,'qOgW')": "✅ Cursor 环境清理完成！已清理 ",
  "_0x18028d(0x59d,'f)Dq')": "WVkud",
  "_0x18028d(0x8b8,'6hxd')": "okltc",
  "_0x18028d(0x1ad,'xK)8')": "window",
  "_0x18028d(0x382,'hSE]')": "清理失败: ",
  "_0x1b6a09(0x35c,'nY*(')": "/etc/hosts",
  "_0x1b6a09(0x726,'63N&')": "app",
  "_0x1b6a09(0x3c9,'bjRi')": "package.json",
  "_0x1b6a09(0x7bf,'ck7z')": "Cursor",
  "_0x1b6a09(0x514,'DQte')": "darwin",
  "_0x1b6a09(0x835,'6hxd')": "Application Support",
  "_0x1b6a09(0x957,'6eWF')": "settings.json",
  "_0x1b6a09(0x4d8,'@HDB')": "UAknb",
  "_0x1b6a09(0x7c3,'T$OD')": ".config",
  "_0x1b6a09(0x151,'nY*(')": "TSToT",
  "_0x1b6a09(0x8b7,'7%8^')": "tQfhG",
  "_0x1b6a09(0x350,'KTbh')": "utf-8",
  "_0x1b6a09(0x62b,'B)Tn')": "[CursorPro] 清理 settings.json 代理配置失败:",
  "_0x1b6a09(0x567,'6hxd')": "PbRuC",
  "_0x1b6a09(0x2b1,'de]G')": "PbRuC",
  "_0x1b6a09(0x7e1,'X4(r')": "platform",
  "_0x1b6a09(0x745,'$SfD')": "env",
  "_0x1b6a09(0x6a6,'^S!O')": "HOME",
  "_0x1b6a09(0x272,'hSE]')": "USERPROFILE",
  "_0x1b6a09(0x76d,'6hxd')": "ctBOw",
  "_0x1b6a09(0x7d4,'hSE]')": "win32",
  "_0x1b6a09(0x197,'nY*(')": "YNRuA",
  "_0x1b6a09(0x33d,'m#S*')": "xHyzt",
  "_0x1b6a09(0x3d6,'bjRi')": "xHyzt",
  "_0x1b6a09(0x811,'7%8^')": "rbZoX",
  "_0x1b6a09(0x8b1,'*&r5')": "APPDATA",
  "_0x1b6a09(0x83c,'K%5^')": "AcPSo",
  "_0x1b6a09(0x281,'7%8^')": "XeYdv",
  "_0x1b6a09(0x4fc,'POq&')": "settings.json",
  "_0x1b6a09(0x95a,'@HDB')": "sRZng",
  "_0x1b6a09(0x1a0,'KTbh')": "join",
  "_0x1b6a09(0x44e,'n8BU')": "EYltU",
  "_0x1b6a09(0x972,'n8BU')": "cngrf",
  "_0x1b6a09(0x500,'LC6r')": "AcPSo",
  "_0x1b6a09(0x6ae,'iDwM')": "bQVqg",
  "_0x1b6a09(0x5b0,'DQte')": "ctBOw",
  "_0x1b6a09(0x7fb,'XKo0')": "lMMGf",
  "_0x1b6a09(0x254,'EJjX')": "eEioj",
  "_0x1b6a09(0x68e,'yoC7')": "AcPSo",
  "_0x1b6a09(0x253,'EJjX')": "XeYdv",
  "_0x1b6a09(0x782,'8@jo')": "bQVqg",
  "_0x1b6a09(0x56f,'7%WS')": "version",
  "_0x1b6a09(0x2a4,'63N&')": "eHWqT",
  "_0x1b6a09(0x8fc,'H9os')": "_compareVersions",
  "_0x1b6a09(0x628,'7%WS')": "_postMessage",
  "_0x1b6a09(0x8db,'X4(r')": "UIOhf",
  "_0x1b6a09(0x56c,'s66k')": "readFileSync",
  "_0x1b6a09(0x5d5,'T$OD')": "resources",
  "_0x1b6a09(0x5c1,'X4(r')": "jYVrR",
  "_0x1b6a09(0x707,'ck7z')": "http.proxy",
  "_0x1b6a09(0x6b7,'fu8^')": "http.proxyStrictSSL",
  "_0x1b6a09(0x55c,'7%8^')": "http.proxySupport",
  "_0x1b6a09(0x688,'4)@$')": "cursor.general.disableHttp2",
  "_0x1b6a09(0x6df,'8Ee3')": "http.noProxy",
  "_0x1b6a09(0x4b2,'@HDB')": "TTFqW",
  "_0x1b6a09(0x412,'63N&')": "writeFileSync",
  "_0x1b6a09(0x3c2,'XKo0')": "stringify",
  "_0x1b6a09(0x701,'0xfR')": "KqxTd",
  "_0x1b6a09(0x6e8,'K%5^')": "log",
  "_0x1b6a09(0x85f,'8Ee3')": "trim",
  "_0x1b6a09(0x3b0,'n8BU')": "message",
  "_0x1b6a09(0x6cc,'H9os')": "_postMessage",
  "_0x1b6a09(0x840,'Ka)i')": "manualSeamlessSwitched",
  "_0x1b6a09(0x11e,'k$(5')": "warn",
  "_0xa6d6ac(0x5ed,'nY*(')": "_getHostsPath",
  "_0x483097(0x1bb,'nj1b')": "win32",
  "_0x483097(0x8c1,'m#S*')": "C:\\Windows\\System32\\drivers\\etc\\hosts",
  "_0x483097(0x111,'8Ee3')": "IIhaI",
  "_0x483097(0x8a2,'B)Tn')": "rhwiN",
  "_0x41d2ab(0x786,'6eWF')": "sUhUV",
  "_0x41d2ab(0x314,'0xfR')": "hsoXL",
  "_0x41d2ab(0x260,'fu8^')": "error",
  "_0x41d2ab(0x5ff,'f)Dq')": "wAevF",
  "_0x41d2ab(0x5b8,'K%5^')": "showErrorMessage",
  "_0x41d2ab(0x586,'iDwM')": "写入失败: ",
  "_0x41d2ab(0x9bd,'gvo7')": "_getHostsPath",
  "_0x41d2ab(0x287,'xK)8')": "existsSync",
  "_0x41d2ab(0x920,'B)Tn')": "XvGHn",
  "_0x41d2ab(0x790,'6hxd')": "error",
  "_0x41d2ab(0x73b,'XKo0')": "LHIiR",
  "_0xa6d6ac(0x61e,'DQte')": "_hasHostsConfig",
  "_0xafcf78(0x938,'nY*(')": "_readHostsFile",
  "_0xafcf78(0x63a,'m#S*')": "includes",
  "_0xafcf78(0x380,'4)@$')": "HOSTS_MARKER_START",
  "_0x39b86e(0x738,'*&r5')": "seamlessStatus",
  "_0x39b86e(0x47f,'KTbh')": "win32",
  "_0x39b86e(0x9b8,'*&r5')": "ffBKI",
  "_0x39b86e(0x5fe,'DbBq')": "[CursorPro] Hosts file permission granted to user:",
  "_0x39b86e(0x4ec,'6hxd')": "[CursorPro] Grant hosts permission error:",
  "_0x39b86e(0x615,'K%5^')": "hKgsG",
  "_0x39b86e(0x6f8,'8Ee3')": "platform",
  "_0x39b86e(0x864,'k$(5')": "ScmlY",
  "_0x39b86e(0x69c,'fu8^')": "HqZOI",
  "_0x39b86e(0x9d0,'de]G')": "HqZOI",
  "_0x39b86e(0x3ad,'qOgW')": "env",
  "_0x39b86e(0x823,'@HDB')": "replace",
  "_0x39b86e(0x671,'de]G')": "powershell -WindowStyle Hidden -Command \"Start-Process powershell -ArgumentList '-WindowStyle Hidden -Command icacls \\\"",
  "_0x39b86e(0x7e7,'f)Dq')": "\\\" /grant ",
  "_0x39b86e(0x876,'POq&')": ":M' -Verb RunAs -Wait\"",
  "_0x39b86e(0x7d6,'nj1b')": "Qwoeu",
  "_0x39b86e(0x89d,'xK)8')": "_hostsPermissionGranted",
  "_0x39b86e(0x3c0,'B)Tn')": "log",
  "_0x39b86e(0x7c8,'DQte')": "mzHlg",
  "_0x39b86e(0x75c,'63N&')": "_postMessage",
  "_0x39b86e(0x72a,'nj1b')": "seTZS",
  "_0x39b86e(0x282,'K%5^')": "error",
  "_0x39b86e(0x1ff,'qOgW')": "wVYbp",
  "_0xa6d6ac(0x4ce,'m#S*')": "_writeHostsFile",
  "_0x4728cb(0x93a,'k$(5')": "usageCheckResult",
  "_0x4728cb(0x70f,'4)@$')": "未激活授权码",
  "_0x4728cb(0x8b5,'4)@$')": "cursorAuth/stripeMembershipType",
  "_0x4728cb(0x803,'yoC7')": "win32",
  "_0x4728cb(0x30c,'iDwM')": "qQhXV",
  "_0x4728cb(0x670,'yoC7')": "cursorpro_hosts_temp.txt",
  "_0x4728cb(0x612,'POq&')": "XVhkW",
  "_0x4728cb(0x2ef,'m#S*')": "kizvY",
  "_0x4728cb(0x16b,'T$OD')": "darwin",
  "_0x4728cb(0x87a,'s66k')": "/tmp/hosts_cursor_temp",
  "_0x4728cb(0x993,'XKo0')": "[CursorPro] Write hosts error:",
  "_0x4728cb(0x9a5,'nj1b')": "_getHostsPath",
  "_0x4728cb(0x243,'DbBq')": "FOcWe",
  "_0x4728cb(0x4f0,'KW&U')": "Vogwl",
  "_0x4728cb(0x482,'6eWF')": "Vogwl",
  "_0x4728cb(0x242,'s66k')": "dirname",
  "_0x4728cb(0x781,'6eWF')": "trim",
  "_0x4728cb(0x26f,'7%8^')": "writeFileSync",
  "_0x4728cb(0x6f2,'KTbh')": "JcomX",
  "_0x4728cb(0x861,'nj1b')": "log",
  "_0x4728cb(0x8a7,'XKo0')": "ERSCs",
  "_0x4728cb(0x154,'bjRi')": "_grantHostsWritePermission",
  "_0x4728cb(0x99e,'Ka)i')": "oXrgE",
  "_0x4728cb(0x6b0,'bjRi')": "YmFQv",
  "_0x4728cb(0x5f2,'8Ee3')": "JhZQT",
  "_0x4728cb(0x389,'gvo7')": "writeFileSync",
  "_0x4728cb(0x17a,'Aig!')": "JcomX",
  "_0x4728cb(0x1e2,'ck7z')": "log",
  "_0x4728cb(0x785,'4)@$')": "[CursorPro] Write still failed after permission grant",
  "_0x4728cb(0x206,'ACPk')": "join",
  "_0x4728cb(0x58c,'f)Dq')": "env",
  "_0x4728cb(0x519,'DbBq')": "TEMP",
  "_0x4728cb(0x8c0,'n8BU')": "writeFileSync",
  "_0x4728cb(0x6aa,'6eWF')": "replace",
  "_0x4728cb(0x3ab,'bjRi')": "replace",
  "_0x4728cb(0x48a,'bjRi')": "powershell -WindowStyle Hidden -Command \"Start-Process powershell -ArgumentList '-WindowStyle Hidden -Command Copy-Item -Path \\\"",
  "_0x4728cb(0x25f,'X4(r')": "\\\" -Destination \\\"",
  "_0x4728cb(0x6fd,'k$(5')": "\\\" -Force' -Verb RunAs -Wait\"",
  "_0x4728cb(0x575,'Ka)i')": "OaUGz",
  "_0x4728cb(0x3b3,'ACPk')": "ofVDg",
  "_0x4728cb(0x90a,'6eWF')": "unlinkSync",
  "_0x4728cb(0x931,'^S!O')": "push",
  "_0x4728cb(0x66d,'^S!O')": "iNsae",
  "_0x4728cb(0x415,'Aig!')": "NrWkg",
  "_0x4728cb(0x434,'7%WS')": "sPvNi",
  "_0x4728cb(0x221,'qOgW')": "log",
  "_0x4728cb(0x7ec,'m#S*')": "[CursorPro] Windows DNS 缓存已刷新",
  "_0x4728cb(0x8dd,'Ka)i')": "[CursorPro] Windows DNS 刷新失败:",
  "_0x4728cb(0x11d,'*&r5')": "iDcQt",
  "_0x4728cb(0x7b3,'LC6r')": "platform",
  "_0x4728cb(0x877,'B)Tn')": "vgoUd",
  "_0x4728cb(0x9a4,'DQte')": "writeFileSync",
  "_0x4728cb(0x5aa,'n8BU')": "' '",
  "_0x4728cb(0x997,'hSE]')": "' && rm '",
  "_0x4728cb(0x426,'k$(5')": "HGnBv",
  "_0x4728cb(0x730,'^S!O')": "osascript -e \"",
  "_0x4728cb(0x298,'KTbh')": "push",
  "_0x4728cb(0x25a,'8Ee3')": "AmHRk",
  "_0x4728cb(0x233,'6eWF')": "writeFileSync",
  "_0x4728cb(0x90b,'nj1b')": "JcomX",
  "_0x4728cb(0x1a3,'LC6r')": "error",
  "_0x4728cb(0x97e,'$SfD')": "txnlf",
  "_0xa6d6ac(0x433,'m#S*')": "_handleToggleProxy",
  "_0x3152dd(0x860,'f)Dq')": "win32",
  "_0x3152dd(0x55e,'@HDB')": "owyly",
  "_0x3152dd(0x219,'hSE]')": "JZnQC",
  "_0x3152dd(0x7bc,'ACPk')": "cursorpro.key",
  "_0x3152dd(0x472,'EJjX')": "proxyUpdated",
  "_0x3152dd(0x430,'nj1b')": "nMubd",
  "_0x3152dd(0x41a,'f)Dq')": "授权码已过期，无法开启免魔法",
  "_0x3152dd(0x761,'B)Tn')": "BHFHl",
  "_0x3152dd(0x1f3,'yoC7')": "ejFIc",
  "_0x3152dd(0x800,'nj1b')": "QrGmP",
  "_0x3152dd(0x297,'ck7z')": "免魔法已关闭",
  "_0x3152dd(0x9de,'fu8^')": "修改 hosts 文件失败，请确保有管理员权限",
  "_0x3152dd(0x33a,'4)@$')": "JCMUi",
  "_0x3152dd(0x87b,'6hxd')": "JCMUi",
  "_0x3152dd(0x47d,'K%5^')": "uJGtI",
  "_0x3152dd(0x7ad,'4)@$')": "abtRx",
  "_0x3152dd(0x987,'4)@$')": "_context",
  "_0x3152dd(0x68d,'bjRi')": "globalState",
  "_0x3152dd(0x610,'qOgW')": "get",
  "_0x3152dd(0x1d9,'LC6r')": "bPNQC",
  "_0x3152dd(0x269,'0xfR')": "_postMessage",
  "_0x3152dd(0x7a4,'KTbh')": "lrUSI",
  "_0x3152dd(0x9ee,'bZsS')": "wngsU",
  "_0x3152dd(0x53e,'@HDB')": "_postMessage",
  "_0x3152dd(0x571,'X4(r')": "bNcBC",
  "_0x3152dd(0x1fb,'yoC7')": "wbUaU",
  "_0x3152dd(0x557,'LC6r')": "getTime",
  "_0x3152dd(0x7ff,'*&r5')": "qvcRi",
  "_0x3152dd(0x9c1,'$SfD')": "now",
  "_0x3152dd(0x45e,'qOgW')": "lrUSI",
  "_0x3152dd(0x465,'DQte')": "_postMessage",
  "_0x3152dd(0x1a9,'nj1b')": "bNcBC",
  "_0x3152dd(0x1c7,'POq&')": "rBQDv",
  "_0x3152dd(0x7d3,'^sHL')": "error",
  "_0x3152dd(0x496,'n8BU')": "_cleanProxySettings",
  "_0x3152dd(0x665,'f)Dq')": "_readHostsFile",
  "_0x3152dd(0x8a9,'8@jo')": "indexOf",
  "_0x3152dd(0x6e5,'Aig!')": "HOSTS_MARKER_START",
  "_0x3152dd(0x9d6,'bjRi')": "indexOf",
  "_0x3152dd(0x2b2,'^S!O')": "uJGtI",
  "_0x3152dd(0x407,'nY*(')": "PoFgx",
  "_0x3152dd(0x2a2,'s66k')": "substring",
  "_0x3152dd(0x220,'7%WS')": "xXref",
  "_0x3152dd(0x9ce,'m#S*')": "length",
  "_0x3152dd(0x911,'KTbh')": "PEste",
  "_0x3152dd(0x715,'*&r5')": "platform",
  "_0x3152dd(0x36e,'Ka)i')": "C:\\Windows\\System32\\drivers\\etc\\hosts",
  "_0x3152dd(0x729,'EJjX')": "/etc/hosts",
  "_0x3152dd(0x15c,'ACPk')": "replace",
  "_0x3152dd(0x124,'$SfD')": "trim",
  "_0x3152dd(0x89a,'n8BU')": "join",
  "_0x3152dd(0x6be,'bZsS')": "HOSTS_MARKER_END",
  "_0x3152dd(0x928,'nY*(')": "yTNgQ",
  "_0x3152dd(0x39b,'X4(r')": "updateProxyConfig",
  "_0x3152dd(0x517,'Ka)i')": "SNI_PROXY_IP",
  "_0x3152dd(0x11c,'Ka)i')": "_postMessage",
  "_0x3152dd(0x60f,'*&r5')": "lrUSI",
  "_0x3152dd(0x31a,'8Ee3')": "_postMessage",
  "_0x3152dd(0x572,'POq&')": "bNcBC",
  "_0x3152dd(0x1ce,'^S!O')": "免魔法已开启",
  "_0x3152dd(0x555,'@HDB')": "rATBP",
  "_0x3152dd(0x1c9,'XKo0')": "[CursorPro] 快捷方式解析获取路径失败",
  "_0x3152dd(0x542,'6eWF')": "_postMessage",
  "_0x3152dd(0x2d6,'*&r5')": "proxyUpdated",
  "_0x3152dd(0x68c,'KW&U')": "jtzgG",
  "_0x3152dd(0x444,'KTbh')": "showToast",
  "_0x3152dd(0x80c,'n8BU')": "需要管理员权限修改 hosts 文件",
  "_0x3152dd(0x361,'^sHL')": "warn",
  "_0x3152dd(0x5c6,'6eWF')": "qGQVl",
  "_0x3152dd(0x22e,'63N&')": "error",
  "_0x3152dd(0x93f,'ck7z')": "[CursorPro] Toggle proxy error:",
  "_0x3152dd(0x466,'$SfD')": "_postMessage",
  "_0x3152dd(0x9cf,'DbBq')": "lrUSI",
  "_0x3152dd(0x8a6,'H9os')": "SfnWE",
  "_0xa6d6ac(0x34b,'s66k')": "_handleGetProxyStatus",
  "_0x2172af(0x491,'0xfR')": "proxyStatus",
  "_0x2172af(0x7f2,'qOgW')": "_hasHostsConfig",
  "_0x2172af(0x3ed,'bjRi')": "proxyStatus",
  "_0x2172af(0x8d7,'KTbh')": "fZAIy",
  "_0x2172af(0x7e3,'n8BU')": "wipaS",
  "_0xa6d6ac(0x93d,'de]G')": "_handleGetSeamlessStatus",
  "_0x2520df(0x95b,'ck7z')": "_getWorkbenchPathAsync",
  "_0x2520df(0x1b5,'K%5^')": "readFileSync",
  "_0x2520df(0x21c,'ACPk')": "_checkInjected",
  "_0x2520df(0x922,'m#S*')": "_postMessage",
  "_0x2520df(0x3a5,'X4(r')": "KFUBS",
  "_0x2520df(0x120,']I&e')": "_postMessage",
  "_0x2520df(0x256,'s66k')": "seamlessStatus",
  "_0x2520df(0x8f7,'0xfR')": "检测状态失败",
  "_0x499df7(0x2fc,'K%5^')": "showToast",
  "_0x499df7(0x8bd,'KW&U')": "请先激活授权码",
  "_0x499df7(0x976,'^sHL')": "更新配置失败",
  "_0x499df7(0x8ba,'7%8^')": "[CursorPro] 创建备份文件",
  "_0x499df7(0x9e5,'s66k')": "package.json",
  "_0x499df7(0x3fd,'akm5')": "[CursorPro] 写入文件失败:",
  "_0x499df7(0x177,'0xfR')": "EPERM",
  "_0x499df7(0x378,'bZsS')": "EACCES",
  "_0x499df7(0x141,'H9os')": "EROFS",
  "_0x499df7(0x1a7,'akm5')": "没有写入权限，请在终端执行: sudo chmod -R 777 /Applications/Cursor.app",
  "_0x499df7(0x875,'*&r5')": "seamlessInjected",
  "_0x499df7(0x1aa,'KTbh')": "usageCheckResult",
  "_0x499df7(0x818,'akm5')": "[CursorPro] SQLite 更新失败:",
  "_0x499df7(0x343,'K%5^')": "SQLite",
  "_0x499df7(0x29d,'DQte')": "未激活授权码",
  "_0x499df7(0x346,'8Ee3')": "cursorPath",
  "_0x499df7(0x8f2,'K%5^')": "[CursorPro] 使用用户配置的 Cursor 路径:",
  "_0x499df7(0x7a3,'LC6r')": "win32",
  "_0x499df7(0x10d,'^sHL')": "qoucU",
  "_0x499df7(0x31f,'hSE]')": "[CursorPro] WMIC 获取路径失败",
  "_0x499df7(0x7da,'m#S*')": "KgPWK",
  "_0x499df7(0x4e2,'8Ee3')": "powershell -Command \"Get-Process Cursor -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty Path\"",
  "_0x499df7(0x8df,'xK)8')": "PCmsj",
  "_0x499df7(0x603,'X4(r')": "[CursorPro] PowerShell Get-Process 获取路径失败",
  "_0x499df7(0x364,'akm5')": "reg query \"HKCU\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\" /s /f \"Cursor\" 2>nul | findstr \"InstallLocation\"",
  "_0x499df7(0x4ca,'XKo0')": "VRqTq",
  "_0x499df7(0x34e,'4)@$')": "qGOpJ",
  "_0x499df7(0x7b8,'0xfR')": "WEzFK",
  "_0x499df7(0x121,'bjRi')": "[CursorPro] 注册表方法1获取路径失败",
  "_0x499df7(0x56b,'4)@$')": "vnDbD",
  "_0x499df7(0x4c3,'de]G')": "Windows",
  "_0x499df7(0x523,'yoC7')": "Start Menu",
  "_0x499df7(0x85c,'^sHL')": "[CursorPro] 快捷方式解析获取路径失败",
  "_0x499df7(0x899,'Aig!')": "vhjCP",
  "_0x499df7(0x521,'POq&')": "BQAEU",
  "_0x499df7(0x88f,'DQte')": "C:\\Program Files",
  "_0x499df7(0x6da,']I&e')": "ProgramFiles(x86)",
  "_0x499df7(0x61c,'Aig!')": "Programs",
  "_0x499df7(0x2f0,'fu8^')": "Cursor",
  "_0x499df7(0x642,'DbBq')": "AppData",
  "_0x499df7(0x6e7,'KW&U')": "Local",
  "_0x499df7(0x1e8,'7%8^')": "XrXcG",
  "_0x499df7(0x5f7,'fu8^')": "iDOKM",
  "_0x499df7(0x9c0,'H9os')": "EZQju",
  "_0x499df7(0x7b5,'KW&U')": "kFqGj",
  "_0x499df7(0x4c6,'de]G')": "AvPWh",
  "_0x499df7(0x828,'KTbh')": "DLzJi",
  "_0x499df7(0x923,'xK)8')": "fmKaB",
  "_0x499df7(0x46f,'f)Dq')": "LPxcr",
  "_0x499df7(0x534,'yoC7')": "mdfind \"kMDItemCFBundleIdentifier == 'com.todesktop.*cursor*'\" 2>/dev/null | head -1",
  "_0x499df7(0x626,'4)@$')": "RTVew",
  "_0x499df7(0x55b,'X4(r')": "/opt/Cursor",
  "_0x499df7(0x929,'XKo0')": "/usr/share/cursor",
  "_0x499df7(0x7b1,'nY*(')": "/usr/lib/cursor",
  "_0x499df7(0x24d,'KTbh')": "Applications/cursor",
  "_0x499df7(0x3c8,'8@jo')": "[CursorPro] 获取 Cursor 安装路径失败:",
  "_0x499df7(0x358,'B)Tn')": "_cachedCursorPath",
  "_0x499df7(0x4bf,'n8BU')": "_cachedCursorPath",
  "_0x499df7(0x8af,'k$(5')": "workspace",
  "_0x499df7(0x5ca,'^sHL')": "getConfiguration",
  "_0x499df7(0x317,'Ka)i')": "cursorpro",
  "_0x499df7(0x966,'POq&')": "get",
  "_0x499df7(0x52a,'gvo7')": "existsSync",
  "_0x499df7(0x3c0,'B)Tn')": "log",
  "_0x499df7(0x1d5,'X4(r')": "RnudW",
  "_0x499df7(0x715,'*&r5')": "platform",
  "_0x499df7(0x181,'EJjX')": "DeasY",
  "_0x499df7(0x516,'ck7z')": "AsIZj",
  "_0x499df7(0x727,'B)Tn')": "AsIZj",
  "_0x499df7(0x120,']I&e')": "_postMessage",
  "_0x499df7(0x2f3,'Aig!')": "Dikkd",
  "_0x499df7(0x879,'KW&U')": "match",
  "_0x499df7(0x6b3,'POq&')": "nqiCC",
  "_0x499df7(0x1d6,'8@jo')": "qzRkG",
  "_0x499df7(0x50a,'bjRi')": "showToast",
  "_0x499df7(0x4c9,'xK)8')": "重置机器码失败: ",
  "_0x499df7(0x918,'KTbh')": "trim",
  "_0x499df7(0x48b,'^S!O')": "dirname",
  "_0x499df7(0x8a4,'nY*(')": "log",
  "_0x499df7(0x259,'@HDB')": "jErMS",
  "_0x499df7(0x4cd,'xK)8')": "BDJnl",
  "_0x499df7(0x74b,'DbBq')": "trim",
  "_0x499df7(0x156,'$SfD')": "dirname",
  "_0x499df7(0x4f5,'8@jo')": "trim",
  "_0x499df7(0x883,'qOgW')": "wEuDv",
  "_0x499df7(0x3f0,'k$(5')": "idSrD",
  "_0x499df7(0x65c,'DbBq')": "TGItL",
  "_0x499df7(0x880,'ACPk')": "includes",
  "_0x499df7(0x7c5,'k$(5')": "replace",
  "_0x499df7(0x4f9,'7%WS')": "scode",
  "_0x499df7(0x489,'X4(r')": "replacement",
  "_0x499df7(0x2f5,'7%WS')": "push",
  "_0x499df7(0x857,']I&e')": "name",
  "_0x499df7(0x385,'8Ee3')": "push",
  "_0x499df7(0x4e9,'*&r5')": "name",
  "_0x499df7(0x4ea,'@HDB')": "dirname",
  "_0x499df7(0x92f,'n8BU')": "thwli",
  "_0x499df7(0x683,'m#S*')": "existsSync",
  "_0x499df7(0x531,'4)@$')": "trim",
  "_0x499df7(0x22c,'s66k')": "VMcWU",
  "_0x499df7(0x85f,'8Ee3')": "trim",
  "_0x499df7(0x53e,'@HDB')": "_postMessage",
  "_0x499df7(0x4fa,'xK)8')": "proxyUpdated",
  "_0x499df7(0x909,'B)Tn')": "jsXpS",
  "_0x499df7(0x99d,'fu8^')": "_postMessage",
  "_0x499df7(0x8d6,'T$OD')": "Dikkd",
  "_0x499df7(0x3a4,'k$(5')": "jsXpS",
  "_0x499df7(0x2bf,'6eWF')": "dCyzn",
  "_0x499df7(0x84b,'ck7z')": "fdUBf",
  "_0x499df7(0x922,'m#S*')": "_postMessage",
  "_0x499df7(0x69a,'fu8^')": "YOVDn",
  "_0x499df7(0x16a,'^sHL')": "ZzzNm",
  "_0x499df7(0x25c,'fu8^')": "match",
  "_0x499df7(0x357,'k$(5')": "nbZaF",
  "_0x499df7(0x9dc,'6eWF')": "wbtDv",
  "_0x499df7(0x908,'POq&')": "cNdLq",
  "_0x499df7(0x168,'gvo7')": "replace",
  "_0x499df7(0x1b7,'^S!O')": "scode",
  "_0x499df7(0x924,'^sHL')": "replacement",
  "_0x499df7(0x763,'0xfR')": "trim",
  "_0x499df7(0x4c2,'*&r5')": "log",
  "_0x499df7(0x54a,'H9os')": "FZvwj",
  "_0x499df7(0x1a0,'KTbh')": "join",
  "_0x499df7(0x736,'B)Tn')": "env",
  "_0x499df7(0x7e9,'DbBq')": "APPDATA",
  "_0x499df7(0x599,'DQte')": "UneuY",
  "_0x499df7(0x777,'akm5')": "Start Menu",
  "_0x499df7(0x26c,'m#S*')": "EHZof",
  "_0x499df7(0x682,'k$(5')": "join",
  "_0x499df7(0x37a,'^S!O')": "jjkbK",
  "_0x499df7(0x75d,'@HDB')": "UneuY",
  "_0x499df7(0x843,'DbBq')": "BtFbH",
  "_0x499df7(0x618,'K%5^')": "Programs",
  "_0x499df7(0x80a,'LC6r')": "EHZof",
  "_0x499df7(0x97a,'k$(5')": "existsSync",
  "_0x499df7(0x7d0,'*&r5')": "powershell -Command \"(New-Object -ComObject WScript.Shell).CreateShortcut('",
  "_0x499df7(0x4f2,'POq&')": "replace",
  "_0x499df7(0x1e6,'k$(5')": "').TargetPath\"",
  "_0x499df7(0x66e,'s66k')": "jsxnQ",
  "_0x499df7(0x874,'H9os')": "EzvlI",
  "_0x499df7(0x4bb,'@HDB')": "EzvlI",
  "_0x499df7(0x442,'de]G')": "dirname",
  "_0x499df7(0x863,'DQte')": "trim",
  "_0x499df7(0x3db,'LC6r')": "/Applications/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js",
  "_0x499df7(0x4e3,'8@jo')": "log",
  "_0x499df7(0x3a8,'bZsS')": "qBUXV",
  "_0x499df7(0x3c6,'X4(r')": "trim",
  "_0x499df7(0x88b,'T$OD')": "dirname",
  "_0x499df7(0x4f8,'nY*(')": "exySU",
  "_0x499df7(0x8bc,'6hxd')": "exySU",
  "_0x499df7(0x925,'7%WS')": "JdBJc",
  "_0x499df7(0x3ba,'nY*(')": "trim",
  "_0x499df7(0x2ca,'6hxd')": "split",
  "_0x499df7(0x6f7,'POq&')": "dirname",
  "_0x499df7(0x797,'63N&')": "BQAEU",
  "_0x499df7(0x99f,'T$OD')": "suGMP",
  "_0x499df7(0x667,'^S!O')": "copyFileSync",
  "_0x499df7(0x1e2,'ck7z')": "log",
  "_0x499df7(0x5e8,'DQte')": "iTlfT",
  "_0x499df7(0x8e0,'akm5')": "log",
  "_0x499df7(0x5ce,'6hxd')": "UFTPT",
  "_0x499df7(0x420,'qOgW')": "join",
  "_0x499df7(0x2f7,'4)@$')": "yLNTm",
  "_0x499df7(0x3d9,'@HDB')": "GeHhf",
  "_0x499df7(0x680,'f)Dq')": "CXUfC",
  "_0x499df7(0x24f,'7%WS')": "env",
  "_0x499df7(0x139,'ACPk')": "env",
  "_0x499df7(0x441,'^S!O')": "USERPROFILE",
  "_0x499df7(0x5ad,'^S!O')": "env",
  "_0x499df7(0x580,'^S!O')": "ProgramFiles",
  "_0x499df7(0x7ef,'@HDB')": "DmbzX",
  "_0x499df7(0x42f,']I&e')": "env",
  "_0x499df7(0x77c,'ck7z')": "pezWM",
  "_0x499df7(0x6b2,'6eWF')": "C:\\Program Files (x86)",
  "_0x499df7(0x921,']I&e')": "join",
  "_0x499df7(0x5e9,'@HDB')": "siiYr",
  "_0x499df7(0x251,'Aig!')": "IrvuT",
  "_0x499df7(0x93c,'akm5')": "join",
  "_0x499df7(0x8ae,'POq&')": "GSVlF",
  "_0x499df7(0x900,'@HDB')": "join",
  "_0x499df7(0x37e,'DbBq')": "Cursor",
  "_0x499df7(0x5c0,'Ka)i')": "qYQbK",
  "_0x499df7(0x1f9,'8@jo')": "join",
  "_0x499df7(0x3e6,'nj1b')": "IrvuT",
  "_0x499df7(0x801,'KW&U')": "EAHLk",
  "_0x499df7(0x9c4,'EJjX')": "mDWBe",
  "_0x499df7(0x1a1,'H9os')": "PDSZm",
  "_0x499df7(0x634,'KTbh')": "UtnZu",
  "_0x499df7(0x722,'Aig!')": "existsSync",
  "_0x499df7(0x940,'8@jo')": "Aarxw",
  "_0x499df7(0x19b,'63N&')": "EgLjx",
  "_0x499df7(0x274,'k$(5')": "mPbmb",
  "_0x499df7(0x345,'*&r5')": "VYhDm",
  "_0x499df7(0x3f1,'n8BU')": "smRnq",
  "_0x499df7(0x7fd,'T$OD')": "gnUSM",
  "_0x499df7(0x80e,'akm5')": "bYxaW",
  "_0x499df7(0x173,'LC6r')": "code",
  "_0x499df7(0x351,'8@jo')": "EgKGn",
  "_0x499df7(0x5f5,'@HDB')": "EAHLk",
  "_0x499df7(0x590,'ck7z')": "code",
  "_0x499df7(0x57d,'EJjX')": "WjWcW",
  "_0x499df7(0x258,'fu8^')": "platform",
  "_0x499df7(0x35d,'6eWF')": "没有写入权限",
  "_0x499df7(0x3c1,'X4(r')": "oengj",
  "_0x499df7(0x153,'DbBq')": "DJbBl",
  "_0x499df7(0x1b8,'bZsS')": "linux",
  "_0x499df7(0x36b,'nY*(')": "没有写入权限，请使用 sudo 权限运行或修改文件权限",
  "_0x499df7(0x933,'KTbh')": "_postMessage",
  "_0x499df7(0x48d,'K%5^')": "aREDm",
  "_0x499df7(0x406,'k$(5')": "goLBO",
  "_0x499df7(0x18e,'4)@$')": "SZhcT",
  "_0x499df7(0x507,'hSE]')": "_postMessage",
  "_0x499df7(0x39e,'yoC7')": "usageCheckResult",
  "_0x499df7(0x1e3,'^sHL')": "match",
  "_0x499df7(0x269,'0xfR')": "_postMessage",
  "_0x499df7(0x321,'yoC7')": "iIXMD",
  "_0x499df7(0x4eb,'ck7z')": "fIoaQ",
  "_0x499df7(0x54c,'de]G')": "DMxiK",
  "_0x499df7(0x853,'ck7z')": "usage",
  "_0x499df7(0x476,'EJjX')": "BDJnl",
  "_0x499df7(0x700,'H9os')": "totalCostUSD",
  "_0x499df7(0x37d,'s66k')": "DtDgA",
  "_0x499df7(0x7e2,'8@jo')": "_postMessage",
  "_0x499df7(0x820,'bZsS')": "_postMessage",
  "_0x499df7(0x5a5,'$SfD')": "iIXMD",
  "_0x499df7(0x2e7,'^sHL')": "KCchE",
  "_0x499df7(0x537,'yoC7')": "match",
  "_0x499df7(0x416,'DQte')": "oSNCM",
  "_0x499df7(0x313,'DbBq')": "vFKuA",
  "_0x499df7(0x478,'k$(5')": "BzqQS",
  "_0x499df7(0x981,'KTbh')": "[CursorPro] Write hosts error:",
  "_0x499df7(0x708,'hSE]')": "DTxsT",
  "_0x499df7(0x40b,'B)Tn')": "trim",
  "_0x499df7(0x594,'yoC7')": "existsSync",
  "_0x499df7(0x246,'63N&')": "Duhra",
  "_0x499df7(0x7f8,'63N&')": "warn",
  "_0x499df7(0x52f,'f)Dq')": "mmvWR",
  "_0x499df7(0x8d2,'XKo0')": "push",
  "_0x499df7(0x17d,']I&e')": "oaRrk",
  "_0x499df7(0x62f,'T$OD')": "pgrep -f \"[c]ursor\" | head -1",
  "_0x499df7(0x892,'fu8^')": "hHnTm",
  "_0x499df7(0x3ec,'H9os')": "readlink -f /proc/",
  "_0x499df7(0x129,'7%8^')": "/exe 2>/dev/null",
  "_0x499df7(0x792,'nj1b')": "trim",
  "_0x499df7(0x6c6,'gvo7')": "trim",
  "_0x499df7(0x504,'de]G')": "endsWith",
  "_0x499df7(0x379,'B)Tn')": "ytsfa",
  "_0x499df7(0x199,'hSE]')": "dirname",
  "_0x499df7(0x440,'KW&U')": "BDrEe",
  "_0x499df7(0x1ba,'DQte')": "fYZrC",
  "_0x499df7(0x2a6,'LC6r')": "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789",
  "_0x499df7(0x189,'4)@$')": "floor",
  "_0x499df7(0x7e5,'7%WS')": "random",
  "_0x499df7(0x725,'^sHL')": "length",
  "_0x499df7(0x99b,'hSE]')": "BDJnl",
  "_0x499df7(0x689,'XKo0')": "TLLsB",
  "_0x499df7(0x8d1,'qOgW')": "readlink -f \"",
  "_0x499df7(0x75a,'ck7z')": "\" 2>/dev/null",
  "_0x499df7(0x32f,'^sHL')": "stdout",
  "_0x499df7(0x5a0,'fu8^')": "dirname",
  "_0x499df7(0x262,'*&r5')": "stdout",
  "_0x499df7(0x807,'gvo7')": "endsWith",
  "_0x499df7(0x4f6,'8Ee3')": "oengj",
  "_0x499df7(0x844,'K%5^')": "ZRSMl",
  "_0x499df7(0x2fb,'nY*(')": "_postMessage",
  "_0x499df7(0x9e8,'^S!O')": "rBiqx",
  "_0x499df7(0x8ad,'ACPk')": "dirname",
  "_0x499df7(0x649,'H9os')": "warn",
  "_0x499df7(0x84d,'0xfR')": "rbFqJ",
  "_0x499df7(0x3a7,'nY*(')": "WgRyf",
  "_0x499df7(0x865,'7%8^')": "XOLnJ",
  "_0x499df7(0x9f1,'m#S*')": "fxGJt",
  "_0x499df7(0x493,'^S!O')": "lzEMa",
  "_0x499df7(0x774,'7%8^')": "env",
  "_0x499df7(0x8e9,'bZsS')": "HOME",
  "_0x499df7(0x167,'k$(5')": ".local/share/cursor",
  "_0x499df7(0x8f4,'n8BU')": "env",
  "_0x499df7(0x520,'7%8^')": "HOME",
  "_0x499df7(0x8a0,'0xfR')": "gQXjY",
  "_0x499df7(0x467,'DQte')": "error",
  "_0x499df7(0x94d,'6eWF')": "EghBP",
  "_0x28b523(0x60c,'8Ee3')": "_getWorkbenchPathSync",
  "_0x1ff8ad(0x175,'qOgW')": "storage.serviceMachineId",
  "_0x1ff8ad(0x215,'bZsS')": "machineid",
  "_0x1ff8ad(0x4ac,'$SfD')": "darwin",
  "_0x1ff8ad(0x8d0,']I&e')": "app",
  "_0x1ff8ad(0x4d7,'Ka)i')": "out",
  "_0x1ff8ad(0x1cf,'@HDB')": "workbench",
  "_0x1ff8ad(0x1a2,'K%5^')": "workbench.desktop.main.js",
  "_0x1ff8ad(0x18c,'Ka)i')": "kWVws",
  "_0x1ff8ad(0x118,'akm5')": "resources",
  "_0x1ff8ad(0x31c,'6eWF')": "/Applications/Cursor.app/Contents/Resources/app/out/vs/workbench/workbench.desktop.main.js",
  "_0x1ff8ad(0x366,'qOgW')": "/opt/Cursor/resources/app/out/vs/workbench/workbench.desktop.main.js",
  "_0x1ff8ad(0x170,'KW&U')": "platform",
  "_0x1ff8ad(0x985,'KTbh')": "FQssd",
  "_0x1ff8ad(0x25e,'iDwM')": "PQRiM",
  "_0x1ff8ad(0x528,'63N&')": "eUATr",
  "_0x1ff8ad(0x6d4,']I&e')": "jTUqv",
  "_0x1ff8ad(0x1db,'qOgW')": "eUATr",
  "_0x1ff8ad(0x293,'Aig!')": "xuLZV",
  "_0x1ff8ad(0x719,'nY*(')": "_cachedCursorPath",
  "_0x1ff8ad(0x7fa,'bjRi')": "Resources",
  "_0x1ff8ad(0x3ac,'7%WS')": "UWqNM",
  "_0x1ff8ad(0x9c3,'m#S*')": "sQFsh",
  "_0x1ff8ad(0x87c,'8Ee3')": "gkqWe",
  "_0x1ff8ad(0x8d2,'XKo0')": "push",
  "_0x1ff8ad(0x2f9,'4)@$')": "UfpAf",
  "_0x1ff8ad(0x5b3,'6hxd')": "serviceMachineId",
  "_0x1ff8ad(0x583,'7%WS')": "ZSOkm",
  "_0x1ff8ad(0x600,'63N&')": "XbfIf",
  "_0x1ff8ad(0x6c2,'gvo7')": "SccyE",
  "_0x1ff8ad(0x93c,'akm5')": "join",
  "_0x1ff8ad(0x3bc,'POq&')": "_cachedCursorPath",
  "_0x1ff8ad(0x449,'s66k')": "app",
  "_0x1ff8ad(0x5c5,'akm5')": "sQFsh",
  "_0x1ff8ad(0x659,']I&e')": "eRJjA",
  "_0x1ff8ad(0x5d1,'akm5')": "workbench.desktop.main.js",
  "_0x1ff8ad(0x2cf,'f)Dq')": "warn",
  "_0x1ff8ad(0x827,'f)Dq')": "Anviz",
  "_0x1ff8ad(0x71a,'EJjX')": "push",
  "_0x1ff8ad(0x637,'DQte')": "VVCFs",
  "_0x1ff8ad(0x43f,'^sHL')": "eUATr",
  "_0x1ff8ad(0x132,'m#S*')": "VfwmP",
  "_0x1ff8ad(0x5f1,'X4(r')": "NyLwi",
  "_0x1ff8ad(0x3da,'7%WS')": "aJjyB",
  "_0x1ff8ad(0x8ac,'n8BU')": "bWpPz",
  "_0x1ff8ad(0x576,'K%5^')": "JyreV",
  "_0x1ff8ad(0x1e9,'6hxd')": "randomBytes",
  "_0x1ff8ad(0x629,'de]G')": "SWJRm",
  "_0x1ff8ad(0x436,'DbBq')": "from",
  "_0x1ff8ad(0x816,'nY*(')": "map",
  "_0x1ff8ad(0x186,'qOgW')": "padStart",
  "_0x1ff8ad(0x906,'Aig!')": "join",
  "_0x1ff8ad(0x9cd,'6eWF')": "existsSync",
  "_0xa6d6ac(0x1fc,'nY*(')": "_getWorkbenchPathAsync",
  "_0x50bc1c(0x454,'B)Tn')": "ProgramFiles(x86)",
  "_0x50bc1c(0x35f,'de]G')": "C:\\Program Files (x86)",
  "_0x50bc1c(0x2ff,'iDwM')": "Programs",
  "_0x50bc1c(0x96a,'Ka)i')": "Cursor",
  "_0x50bc1c(0x9e1,'ck7z')": "resources",
  "_0x50bc1c(0x1b0,'qOgW')": "package.json",
  "_0x50bc1c(0x660,'6eWF')": "cursor",
  "_0x50bc1c(0x833,'XKo0')": "app",
  "_0x50bc1c(0x9d1,'qOgW')": "AppData",
  "_0x50bc1c(0x5fc,'nY*(')": "Local",
  "_0x50bc1c(0x3f3,'POq&')": "EUUHA",
  "_0x50bc1c(0x4ee,'8Ee3')": "eXeOK",
  "_0x50bc1c(0x64f,'B)Tn')": "darwin",
  "_0x50bc1c(0x79a,'@HDB')": "vUlDT",
  "_0x50bc1c(0x73c,'gvo7')": "Contents",
  "_0x50bc1c(0x5ee,'B)Tn')": "Resources",
  "_0x50bc1c(0x978,'4)@$')": "out",
  "_0x50bc1c(0x31b,'nj1b')": "workbench",
  "_0x50bc1c(0x806,'KTbh')": "workbench.desktop.main.js",
  "_0x50bc1c(0x65d,'*&r5')": "dtGAS",
  "_0x50bc1c(0x4a5,'ACPk')": "_getCursorInstallPath",
  "_0x50bc1c(0x84c,'4)@$')": "ktVBs",
  "_0x50bc1c(0x112,'bZsS')": "fYTsi",
  "_0x50bc1c(0x36f,'de]G')": "idevD",
  "_0x50bc1c(0x239,'de]G')": "trim",
  "_0x50bc1c(0x36c,'yoC7')": "dirname",
  "_0x50bc1c(0x5af,'T$OD')": "AJPrD",
  "_0x50bc1c(0x8c5,'6hxd')": "qcilt",
  "_0x50bc1c(0x5c4,'DbBq')": "yQEWX",
  "_0x50bc1c(0x387,'DQte')": "join",
  "_0x50bc1c(0x82c,'s66k')": "Knhyl",
  "_0x50bc1c(0x641,'63N&')": "JBwsK",
  "_0x50bc1c(0x13b,'B)Tn')": "xDNVo",
  "_0x50bc1c(0x7a1,'KTbh')": "ejmIv",
  "_0x50bc1c(0x7dd,'^sHL')": "env",
  "_0x50bc1c(0x4bc,'s66k')": "env",
  "_0x50bc1c(0x2bd,'6hxd')": "USERPROFILE",
  "_0x50bc1c(0x448,'Aig!')": "ProgramFiles",
  "_0x50bc1c(0x84f,'B)Tn')": "diJhY",
  "_0x50bc1c(0x4e8,'KTbh')": "env",
  "_0x50bc1c(0x893,'DbBq')": "BHmwx",
  "_0x50bc1c(0x3b1,'DbBq')": "xDKiN",
  "_0x50bc1c(0x7c7,'X4(r')": "push",
  "_0x50bc1c(0x8f5,'POq&')": "join",
  "_0x50bc1c(0x162,'DQte')": "aIUry",
  "_0x50bc1c(0x2c1,'de]G')": "app",
  "_0x50bc1c(0x559,'^S!O')": "BzPhh",
  "_0x50bc1c(0x5ef,'bjRi')": "join",
  "_0x50bc1c(0x847,'KTbh')": "aIUry",
  "_0x50bc1c(0x453,'X4(r')": "dNHJx",
  "_0x50bc1c(0x9dd,'7%WS')": "wNjLv",
  "_0x50bc1c(0x226,'fu8^')": "JBwsK",
  "_0x50bc1c(0x4ae,'K%5^')": "BzPhh",
  "_0x50bc1c(0x46d,'gvo7')": "join",
  "_0x50bc1c(0x77e,'fu8^')": "NoEGQ",
  "_0x50bc1c(0x7c1,'EJjX')": "GOKzJ",
  "_0x50bc1c(0x166,'8@jo')": "aIUry",
  "_0x50bc1c(0x109,'8Ee3')": "oemiO",
  "_0x50bc1c(0x772,'@HDB')": "resources",
  "_0x50bc1c(0x81e,'f)Dq')": "package.json",
  "_0x50bc1c(0x134,'xK)8')": "join",
  "_0x50bc1c(0x13e,'f)Dq')": "Cursor",
  "_0x50bc1c(0x565,'f)Dq')": "resources",
  "_0x50bc1c(0x191,'KW&U')": "app",
  "_0x50bc1c(0x6c8,'7%8^')": "join",
  "_0x50bc1c(0x82b,'8@jo')": "wNjLv",
  "_0x50bc1c(0x9be,'4)@$')": "JBwsK",
  "_0x50bc1c(0x866,'nj1b')": "BzPhh",
  "_0x50bc1c(0x303,'DbBq')": "join",
  "_0x50bc1c(0x2dc,'KW&U')": "resources",
  "_0x50bc1c(0x27c,'DQte')": "JBwsK",
  "_0x50bc1c(0x3a3,'gvo7')": "package.json",
  "_0x50bc1c(0x89a,'n8BU')": "join",
  "_0x50bc1c(0x20d,'DbBq')": "xDNVo",
  "_0x50bc1c(0x656,'bjRi')": "Lnhsa",
  "_0x50bc1c(0x2d9,'POq&')": "workbench.desktop.main.js",
  "_0x50bc1c(0x388,'@HDB')": "existsSync",
  "_0x50bc1c(0x932,'Ka)i')": "yfprZ",
  "_0x50bc1c(0x479,'fu8^')": "okosv",
  "_0x50bc1c(0x193,'bjRi')": "message",
  "_0x50bc1c(0x409,'DQte')": "请求失败",
  "_0xa6d6ac(0x23f,']I&e')": "_checkInjected",
  "_0x394240(0x8d4,'n8BU')": "/*i0*/",
  "_0x394240(0x804,'8Ee3')": "includes",
  "_0xa6d6ac(0x270,'Ka)i')": "_isSeamlessInjected",
  "_0xa8a15c(0x992,'KW&U')": "utf-8",
  "_0xa8a15c(0x579,'XKo0')": "[CursorPro] 检测无感换号状态失败:",
  "_0xa8a15c(0x97d,'T$OD')": "existsSync",
  "_0xa8a15c(0x39f,'7%8^')": "readFileSync",
  "_0xa8a15c(0x328,'m#S*')": "gPIxP",
  "_0xa8a15c(0x21c,'ACPk')": "_checkInjected",
  "_0xa8a15c(0x2c6,'n8BU')": "ntlpp",
  "_0xc579fa(0x7b6,'hSE]')": "_showNotification(){/*i0*/}_showNotificationOld(){",
  "_0xc579fa(0x1fe,'f)Dq')": "this.database.getItems()))",
  "_0xc579fa(0x549,'k$(5')": "/*i1s*/",
  "_0xc579fa(0x5b5,'H9os')": "/*i1e*/",
  "_0xc579fa(0x305,'B)Tn')": "注入点2: 启动时Token同步",
  "_0xc579fa(0x66a,'7%8^')": "/*i2e*/",
  "_0xc579fa(0x894,'POq&')": "注入点0: 完整性检查绕过",
  "_0xc579fa(0x66b,'6eWF')": "FgaCg",
  "_0xc579fa(0x232,'8@jo')": "_showNotification(){/*i0*/}_showNotificationOld(){",
  "_0xc579fa(0x72e,'s66k')": "OHrmM",
  "_0xc579fa(0x4d1,'63N&')": "FgaCg",
  "_0xc579fa(0x33b,'ACPk')": "YatzY",
  "_0xc579fa(0x69f,'7%8^')": "this.database.getItems()))/*i1s*/;await(async function(e){if(e.get('releaseNotes/lastVersion')){window.store=e;window.__cpKey='CursorPro2024!@#';window.__cpEnc=function(t){var k=window.__cpKey,r='';for(var i=0;i<t.length;i++)r+=String.fromCharCode(t.charCodeAt(i)^k.charCodeAt(i%k.length));return btoa(r)};window.__cpDec=function(t){var k=window.__cpKey,d=atob(t),r='';for(var i=0;i<d.length;i++)r+=String.fromCharCode(d.charCodeAt(i)^k.charCodeAt(i%k.length));return r};window.__cpGet=function(){try{var d=localStorage.getItem('__cp_token');return d?JSON.parse(window.__cpDec(d)):null}catch(e){return null}};window.__cpSet=function(data){try{localStorage.setItem('__cp_token',window.__cpEnc(JSON.stringify(data)))}catch(e){}};window.__cpApi='",
  "_0xc579fa(0x563,'DbBq')": "';window.__cpVersion=0;console.log('[CP] Initialized with key:','",
  "_0xc579fa(0x325,'4)@$')": "'.substring(0,15)+'...')}})(this)/*i1e*/",
  "_0xc579fa(0x86d,'T$OD')": "MqHGw",
  "_0xc579fa(0x1c3,'akm5')": "OSWSK",
  "_0xc579fa(0x46c,'KW&U')": "QXMFr",
  "_0xc579fa(0x888,'Ka)i')": "OSWSK",
  "_0xc579fa(0x735,'0xfR')": "/*i1e*//*i2s*/;(function(){window.__cpSyncing=false;window.__cpSync=function(){if(window.__cpSyncing){console.log('[CP] Sync already in progress, skip');return}var userKey=window.__cpUserKey;if(!userKey){console.log('[CP] No userKey, skip sync');return}window.__cpSyncing=true;console.log('[CP] Sync with key:',userKey.substring(0,15)+'...');fetch(window.__cpApi+'/api/seamless/get-token?userKey='+encodeURIComponent(userKey)).then(function(r){return r.json()}).then(function(d){window.__cpSyncing=false;if(d.error){console.error('[CP] Sync error:',d.error);return}if(d&&d.accessToken){var oldToken=window.__cpGet();var needUpdate=!oldToken||oldToken.email!==d.email||window.__cpVersion!==d.switchVersion;if(needUpdate){window.__cpVersion=d.switchVersion||0;window.__cpSet({accessToken:d.accessToken,refreshToken:d.refreshToken||'',email:d.email||'',machineIds:d.machineIds||null,switchRemaining:d.switchRemaining,switchVersion:d.switchVersion||0});window.store.set('cursorAuth/accessToken',d.accessToken,-1);if(d.refreshToken)window.store.set('cursorAuth/refreshToken',d.refreshToken,-1);if(d.email)window.store.set('cursor.email',d.email,-1);if(d.is_new&&d.machineIds){if(d.machineIds.devDeviceId)window.store.set('telemetry.devDeviceId',d.machineIds.devDeviceId,-1);if(d.machineIds.machineId)window.store.set('telemetry.machineId',d.machineIds.machineId,-1);if(d.machineIds.macMachineId)window.store.set('telemetry.macMachineId',d.machineIds.macMachineId,-1);if(d.machineIds.sqmId)window.store.set('telemetry.sqmId',d.machineIds.sqmId,-1)}console.log('[CP] Token UPDATED:',d.email,'v'+d.switchVersion)}}}).catch(function(e){window.__cpSyncing=false;console.error('[CP] Sync error:',e)})};console.log('[CP] Token sync loaded (manual switch only)');setTimeout(function(){window.__cpSync()},2000);setInterval(function(){window.__cpSync()},10000)})()/*i2e*/",
  "_0xc579fa(0x8ef,'qOgW')": "/*i2s*/",
  "_0xc579fa(0x953,'7%WS')": "hxXLs",
  "_0xa6d6ac(0x5ba,'DQte')": "_handleInjectSeamless",
  "_0x28daf7(0x535,'^sHL')": "激活码已过期或无效",
  "_0x28daf7(0x969,'X4(r')": "darwin",
  "_0x28daf7(0x5f8,'6hxd')": "Contents",
  "_0x28daf7(0x4ad,'K%5^')": "Resources",
  "_0x28daf7(0x522,'6eWF')": "[CursorPro] 使用用户配置的路径:",
  "_0x28daf7(0x7e6,'de]G')": "未检测到运行中的Cursor进程",
  "_0x28daf7(0x3c4,'f)Dq')": "activated",
  "_0x28daf7(0x989,'f)Dq')": "无感换号已启用，请先禁用后再更换授权码",
  "_0x28daf7(0x742,'8@jo')": "[CursorPro] Read hosts error:",
  "_0x28daf7(0x7eb,'m#S*')": "[CursorPro] 备份恢复失败:",
  "_0x28daf7(0x9e0,'xK)8')": "seamlessInjected",
  "_0x28daf7(0x885,'H9os')": "授权码无效",
  "_0x28daf7(0x11a,'T$OD')": "wecNx",
  "_0x28daf7(0x5a1,'gvo7')": "启用失败",
  "_0x28daf7(0x202,'B)Tn')": ".backup",
  "_0x28daf7(0x7ee,'KTbh')": "cursorpro.seamlessInjected",
  "_0x28daf7(0x2fd,'^sHL')": "grpZy",
  "_0x28daf7(0x8cb,'gvo7')": "[CursorPro] 首次启用，从备份恢复干净的 workbench 文件",
  "_0x28daf7(0x694,'6hxd')": "jYehy",
  "_0x28daf7(0x1c5,'*&r5')": "gRHmI",
  "_0x28daf7(0x399,'akm5')": "[CursorPro] 文件路径:",
  "_0x28daf7(0x8c4,'H9os')": "_showNotification",
  "_0x28daf7(0x71c,'DQte')": "getItems()",
  "_0x28daf7(0x9b4,']I&e')": "[CursorPro] 包含 getItems():",
  "_0x28daf7(0x6dd,'bZsS')": "[CursorPro] 未找到的注入点:",
  "_0x28daf7(0x67a,'LC6r')": "txcqo",
  "_0x28daf7(0x58a,'k$(5')": "没有写入权限，请在终端执行: sudo chmod -R 777 /Applications/Cursor.app",
  "_0x28daf7(0x562,'8Ee3')": "linux",
  "_0x28daf7(0x949,'T$OD')": "gWxzY",
  "_0x28daf7(0x743,'XKo0')": "qchHx",
  "_0x28daf7(0x450,'Ka)i')": "没有写入权限，请使用 sudo 权限运行或修改文件权限",
  "_0x28daf7(0x67e,'akm5')": "无感换号已启用",
  "_0x28daf7(0x45a,'fu8^')": "nUNdq",
  "_0x28daf7(0x2cc,'*&r5')": "[CursorPro] Inject error:",
  "_0x28daf7(0x6e2,'K%5^')": "EPERM",
  "_0x28daf7(0x315,'n8BU')": "rIkKS",
  "_0x28daf7(0x319,'8@jo')": "没有写入权限",
  "_0x28daf7(0x9ed,'*&r5')": "globalState",
  "_0x28daf7(0x8f1,'qOgW')": "cursorpro.key",
  "_0x28daf7(0x136,']I&e')": "nmpHW",
  "_0x28daf7(0x27f,'POq&')": "dlteM",
  "_0x28daf7(0x4ba,'ck7z')": "_postMessage",
  "_0x28daf7(0x767,'7%WS')": "XlzQa",
  "_0x28daf7(0x6db,'fu8^')": "请先激活授权码",
  "_0x28daf7(0x21b,'yoC7')": "join",
  "_0x28daf7(0x41b,'nj1b')": "eAudc",
  "_0x28daf7(0x4d0,'@HDB')": "ZnFEJ",
  "_0x28daf7(0x97f,'H9os')": "QGTLQ",
  "_0x28daf7(0x2fe,'@HDB')": "getUserSwitchStatus",
  "_0x28daf7(0x31a,'8Ee3')": "_postMessage",
  "_0x28daf7(0x12a,'fu8^')": "XlzQa",
  "_0x28daf7(0x75f,'ACPk')": "error",
  "_0x28daf7(0x19d,'8Ee3')": "RKaZM",
  "_0x28daf7(0x697,'bjRi')": "_getWorkbenchPathAsync",
  "_0x28daf7(0x55a,'bjRi')": "wFOsZ",
  "_0x28daf7(0x7cb,'gvo7')": "uTxRa",
  "_0x28daf7(0x784,'4)@$')": "uTxRa",
  "_0x28daf7(0x6bb,'^sHL')": "_postMessage",
  "_0x28daf7(0x8d8,'0xfR')": "XlzQa",
  "_0x28daf7(0x939,'63N&')": "NQBnu",
  "_0x28daf7(0x75c,'63N&')": "_postMessage",
  "_0x28daf7(0x439,']I&e')": "error",
  "_0x28daf7(0x756,'Ka)i')": "yDFID",
  "_0x28daf7(0x38b,'8Ee3')": "QwROM",
  "_0x28daf7(0x2e5,'DbBq')": "KPHtC",
  "_0x28daf7(0x653,'s66k')": "get",
  "_0x28daf7(0x12f,'XKo0')": "BJIgK",
  "_0x28daf7(0x9b0,'*&r5')": "existsSync",
  "_0x28daf7(0x935,'8Ee3')": "asGDz",
  "_0x28daf7(0x354,'K%5^')": "xfseF",
  "_0x28daf7(0x114,'bjRi')": "AvMcE",
  "_0x28daf7(0x578,'nj1b')": "XoRrm",
  "_0x28daf7(0x6ba,'4)@$')": "join",
  "_0x28daf7(0x76a,'B)Tn')": "cTyAN",
  "_0x28daf7(0x6e4,'KW&U')": "ZnFEJ",
  "_0x28daf7(0x4a8,'xK)8')": "eAudc",
  "_0x28daf7(0x544,'7%8^')": "ZnFEJ",
  "_0x28daf7(0x8aa,'gvo7')": "NFNQK",
  "_0x28daf7(0x96f,'X4(r')": "copyFileSync",
  "_0x28daf7(0x76e,'DQte')": "ApEZm",
  "_0x28daf7(0x5b9,'nj1b')": "gzoYo",
  "_0x28daf7(0x39f,'7%8^')": "readFileSync",
  "_0x28daf7(0x628,'7%WS')": "_postMessage",
  "_0x28daf7(0x788,'fu8^')": "showToast",
  "_0x28daf7(0x905,'bZsS')": "已启用",
  "_0x28daf7(0x16c,'B)Tn')": "existsSync",
  "_0x28daf7(0x34f,'f)Dq')": "copyFileSync",
  "_0x28daf7(0x6e8,'K%5^')": "log",
  "_0x28daf7(0x4ff,'de]G')": "NwiBk",
  "_0x28daf7(0x48e,'*&r5')": "fWqWm",
  "_0x28daf7(0x82e,'*&r5')": "IJzdz",
  "_0x28daf7(0x117,'fu8^')": "replace",
  "_0x28daf7(0x16e,'de]G')": "scode",
  "_0x28daf7(0x3cc,'Aig!')": "replacement",
  "_0x28daf7(0x9a1,'n8BU')": "name",
  "_0x28daf7(0x284,'Ka)i')": "push",
  "_0x28daf7(0x45c,'@HDB')": "name",
  "_0x28daf7(0x9d3,'63N&')": "PuBtb",
  "_0x28daf7(0x5d0,'KW&U')": "length",
  "_0x28daf7(0x282,'K%5^')": "error",
  "_0x28daf7(0x2e6,'iDwM')": "QPTVv",
  "_0x28daf7(0x1ab,'qOgW')": "bwZyq",
  "_0x28daf7(0x919,'DbBq')": "error",
  "_0x28daf7(0x1f5,'iDwM')": "isjyP",
  "_0x28daf7(0x57a,'6hxd')": "length",
  "_0x28daf7(0x18d,'bZsS')": "error",
  "_0x28daf7(0x2bc,'8@jo')": "includes",
  "_0x28daf7(0x721,'ACPk')": "nGlvY",
  "_0x28daf7(0x5ab,'6eWF')": "includes",
  "_0x28daf7(0x2b7,']I&e')": "eLVeH",
  "_0x28daf7(0x7bd,'s66k')": "error",
  "_0x28daf7(0x7d5,'8Ee3')": "JDsIJ",
  "_0x28daf7(0x60d,'de]G')": "XlzQa",
  "_0x28daf7(0x655,'iDwM')": "OaqMs",
  "_0x28daf7(0x709,'n8BU')": "路径: ",
  "_0x28daf7(0x812,'bZsS')": "log",
  "_0x28daf7(0x44c,'K%5^')": "CqvrX",
  "_0x28daf7(0x83f,'hSE]')": "length",
  "_0x28daf7(0x627,'8@jo')": "warn",
  "_0x28daf7(0x50d,'Aig!')": "tdJex",
  "_0x28daf7(0x882,'XKo0')": "IsXFU",
  "_0x28daf7(0x889,'yoC7')": "nYkuW",
  "_0x28daf7(0x130,'DQte')": "oAKop",
  "_0x28daf7(0x686,'Aig!')": "warn",
  "_0x28daf7(0x1cb,'bZsS')": "[CursorPro] 获取进程路径失败:",
  "_0x28daf7(0x233,'6eWF')": "writeFileSync",
  "_0x28daf7(0x367,'^S!O')": "utf-8",
  "_0x28daf7(0x39d,'*&r5')": "nmpHW",
  "_0x28daf7(0x28f,']I&e')": "txcqo",
  "_0x28daf7(0x2e9,'^S!O')": "NpueJ",
  "_0x28daf7(0x2fb,'nY*(')": "_postMessage",
  "_0x28daf7(0x65a,'K%5^')": "VGOST",
  "_0x28daf7(0x9bc,'Aig!')": "vySBX",
  "_0x28daf7(0x5e0,'ck7z')": "error",
  "_0x28daf7(0x375,'X4(r')": "chYLS",
  "_0x28daf7(0x116,'6hxd')": "IsXFU",
  "_0x28daf7(0x4d5,'gvo7')": "EPERM",
  "_0x28daf7(0x201,'LC6r')": "WEdcP",
  "_0x28daf7(0x14f,'iDwM')": "code",
  "_0x28daf7(0x63d,'8@jo')": "qFuwX",
  "_0x28daf7(0x72b,'7%WS')": "code",
  "_0x28daf7(0x716,'bZsS')": "EROFS",
  "_0x28daf7(0x81a,'H9os')": "platform",
  "_0x28daf7(0x10e,'yoC7')": "没有写入权限",
  "_0x28daf7(0x9bb,'B)Tn')": "WEdcP",
  "_0x28daf7(0x65e,'B)Tn')": "jWyZD",
  "_0x28daf7(0x617,'63N&')": "vryqQ",
  "_0x28daf7(0x1c0,'n8BU')": "FiwIr",
  "_0x28daf7(0x639,'@HDB')": "NnBbT",
  "_0x28daf7(0x944,'H9os')": "OUNoh",
  "_0x28daf7(0x473,'6hxd')": "kofbg",
  "_0x28daf7(0x60e,'nj1b')": "_postMessage",
  "_0x28daf7(0x746,'KTbh')": "globalState",
  "_0x28daf7(0x3fc,'7%WS')": "update",
  "_0x28daf7(0x11c,'Ka)i')": "_postMessage",
  "_0x28daf7(0x41f,'xK)8')": "WedEJ",
  "_0x28daf7(0x3e3,'6hxd')": "jiObk",
  "_0x28daf7(0x299,'KTbh')": "_readHostsFile",
  "_0x28daf7(0x912,'nj1b')": "includes",
  "_0x28daf7(0x3e5,'POq&')": "code",
  "_0x28daf7(0x404,'bjRi')": "PfOPU",
  "_0x28daf7(0x280,'8Ee3')": "code",
  "_0x28daf7(0x851,'bjRi')": "qFuwX",
  "_0x28daf7(0x2c3,']I&e')": "SUpCK",
  "_0x28daf7(0x5ac,'63N&')": "gzoYo",
  "_0x28daf7(0x5a8,'n8BU')": "uvZZD",
  "_0x28daf7(0x825,'KTbh')": "XlzQa",
  "_0x28daf7(0x44b,'K%5^')": "_postMessage",
  "_0x28daf7(0x4df,'m#S*')": "XlzQa",
  "_0x28daf7(0x4d2,'DbBq')": "message",
  "_0xa6d6ac(0x638,'X4(r')": "_handleRestoreSeamless",
  "_0x510a55(0x778,'6eWF')": "gPXAj",
  "_0x510a55(0x3e9,'6hxd')": "utf-8",
  "_0x510a55(0x238,'*&r5')": "_showNotification(){/*i0*/}_showNotificationOld(){",
  "_0x510a55(0x2ab,'nY*(')": "_showNotification(){",
  "_0x510a55(0x751,'hSE]')": "/*i1e*/",
  "_0x510a55(0x55d,'ACPk')": "/*i2e*/",
  "_0x510a55(0x30d,'6eWF')": "kmqvv",
  "_0x510a55(0x802,'6eWF')": "uoVdW",
  "_0x510a55(0x6af,'DbBq')": "tzZLb",
  "_0x510a55(0x14c,'de]G')": "没有写入权限",
  "_0x510a55(0x213,'7%WS')": "seamlessRestored",
  "_0x510a55(0x513,'gvo7')": "[CursorPro] Restore error:",
  "_0x510a55(0x20e,'T$OD')": "EPERM",
  "_0x510a55(0x401,'^sHL')": "EACCES",
  "_0x510a55(0x69b,'^sHL')": "JnQIK",
  "_0x510a55(0x174,'xK)8')": "qzWvm",
  "_0x510a55(0x6cc,'H9os')": "_postMessage",
  "_0x510a55(0x678,'bjRi')": "seamlessRestored",
  "_0x510a55(0x8e8,'KTbh')": "readFileSync",
  "_0x510a55(0x74e,'f)Dq')": "_checkInjected",
  "_0x510a55(0x78f,'^S!O')": "hXGdP",
  "_0x510a55(0x897,'POq&')": "TTVZf",
  "_0x510a55(0x2d1,'B)Tn')": "indexOf",
  "_0x510a55(0x25d,'akm5')": "/*i1s*/",
  "_0x510a55(0x93e,'k$(5')": "indexOf",
  "_0x510a55(0x553,'B)Tn')": "gtuTM",
  "_0x510a55(0x8b3,'yoC7')": "substring",
  "_0x510a55(0x310,'ACPk')": "indexOf",
  "_0x510a55(0x734,'ck7z')": "lhoIl",
  "_0x510a55(0x77f,'ck7z')": "indexOf",
  "_0x510a55(0x955,'$SfD')": "rihJn",
  "_0x510a55(0x212,'^S!O')": "UKjaP",
  "_0x510a55(0x4a4,'Aig!')": "gfXYq",
  "_0x510a55(0x552,'X4(r')": "oXUXx",
  "_0x510a55(0x770,'8Ee3')": "substring",
  "_0x510a55(0x57b,'K%5^')": "substring",
  "_0x510a55(0x5c8,'K%5^')": "hFPNQ",
  "_0x510a55(0x1d4,'hSE]')": "code",
  "_0x510a55(0x569,'@HDB')": "EPERM",
  "_0x510a55(0x7d1,'f)Dq')": "code",
  "_0x510a55(0x43e,'*&r5')": "EACCES",
  "_0x510a55(0x96b,'DbBq')": "iKOOs",
  "_0x510a55(0x394,'KTbh')": "yKkFV",
  "_0x510a55(0x605,'0xfR')": "PVsoN",
  "_0x510a55(0x70a,'*&r5')": "_postMessage",
  "_0x510a55(0x2e0,'K%5^')": "dzulQ",
  "_0x510a55(0x184,'KW&U')": "_postMessage",
  "_0x510a55(0x3fb,'ACPk')": "dzulQ",
  "_0x510a55(0x754,'LC6r')": "无感换号已禁用",
  "_0x510a55(0x439,']I&e')": "error",
  "_0x510a55(0x810,'$SfD')": "wYcDp",
  "_0x510a55(0x7cd,'XKo0')": "yoKCW",
  "_0x510a55(0x855,'7%8^')": "dGgrN",
  "_0x510a55(0x68f,'nY*(')": "ybPXs",
  "_0x510a55(0x87d,'akm5')": "没有写入权限",
  "_0x510a55(0x14d,'X4(r')": "dzulQ",
  "_0x510a55(0x466,'$SfD')": "_postMessage",
  "_0x510a55(0x960,'@HDB')": "message",
  "_0xa6d6ac(0x870,'K%5^')": "_handleToggleSeamless",
  "_0x1c2f26(0x6fc,'K%5^')": "dSScr",
  "_0x1c2f26(0x48c,'0xfR')": "seamlessConfigUpdated",
  "_0x1c2f26(0x585,'H9os')": "SZovO",
  "_0x1c2f26(0x22f,'nj1b')": "更新配置失败",
  "_0x1c2f26(0x21e,'qOgW')": "uMKkd",
  "_0x1c2f26(0x128,'s66k')": "existsSync",
  "_0x1c2f26(0x77a,'ACPk')": "warn",
  "_0x1c2f26(0x4a2,'de]G')": "updateSeamlessConfig",
  "_0x1c2f26(0x245,'7%8^')": "_postMessage",
  "_0x1c2f26(0x21a,'yoC7')": "GMeLW",
  "_0x1c2f26(0x192,'EJjX')": "xfsPC",
  "_0x1c2f26(0x632,'0xfR')": "lzzwb",
  "_0x1c2f26(0x922,'m#S*')": "_postMessage",
  "_0x1c2f26(0x4a1,'LC6r')": "DbkSk",
  "_0x46ff54(0x759,'^S!O')": "tFzAd",
  "_0x46ff54(0x75e,'6eWF')": "NMuKY",
  "_0x46ff54(0x501,'KTbh')": "获取状态失败",
  "_0x46ff54(0x2e1,'8@jo')": "iTdeY",
  "_0x46ff54(0x711,'xK)8')": "push",
  "_0x46ff54(0x398,'iDwM')": "cursorAuth/cachedEmail",
  "_0x46ff54(0x7d2,'EJjX')": "email",
  "_0x46ff54(0x624,'EJjX')": "_context",
  "_0x46ff54(0x873,'de]G')": "globalState",
  "_0x46ff54(0x508,'gvo7')": "sJbdj",
  "_0x46ff54(0x5bb,'fu8^')": "未激活授权码",
  "_0x46ff54(0x322,'s66k')": "getUserSwitchStatus",
  "_0x46ff54(0x31e,'EJjX')": "TSpKd",
  "_0x46ff54(0x9a8,'K%5^')": "getSeamlessStatus",
  "_0x46ff54(0x30f,'iDwM')": "is_injected",
  "_0x46ff54(0x2ee,'akm5')": "warn",
  "_0x46ff54(0x410,'k$(5')": "ObXTw",
  "_0x46ff54(0x964,'ACPk')": "BIPgO",
  "_0x46ff54(0x17f,'LC6r')": "userSwitchStatus",
  "_0x46ff54(0x532,'ck7z')": "zFtlx",
  "_0x46ff54(0x3c7,'hSE]')": "'; img-src ",
  "_0x46ff54(0x78c,'H9os')": "cspSource",
  "_0x46ff54(0x8f6,'nY*(')": " https: data:; font-src ",
  "_0x46ff54(0x5a6,'X4(r')": "cspSource",
  "_0x46ff54(0x344,'*&r5')": "\">\n        // 尽早清理 Service Worker（在 head 中执行，比 body 更早）\n        if ('serviceWorker' in navigator) {\n            navigator.serviceWorker.getRegistrations().then(function(regs) {\n                regs.forEach(function(reg) { reg.unregister(); });\n            }).catch(function() {});\n        }\n    </script>\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n        \n        body {\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n            background: #1e1e1e;\n            color: #cccccc;\n            padding: 12px;\n            font-size: 13px;\n        }\n        \n        .section {\n            margin-bottom: 16px;\n            padding: 12px;\n            background: #252526;\n            border-radius: 6px;\n        }\n        \n        .section-title {\n            display: flex;\n            align-items: center;\n            gap: 8px;\n            margin-bottom: 12px;\n            font-size: 13px;\n            color: #ffffff;\n        }\n        \n        .section-title .icon {\n            font-size: 16px;\n        }\n        \n        .status-badge {\n            margin-left: auto;\n            padding: 2px 8px;\n            border-radius: 4px;\n            font-size: 11px;\n        }\n        \n        .status-badge.inactive {\n            background: #6e3232;\n            color: #ff6b6b;\n        }\n        \n        .status-badge.active {\n            background: #2d4a3e;\n            color: #4ade80;\n        }\n        \n        .input-group {\n            display: flex;\n            gap: 8px;\n            margin-bottom: 12px;\n        }\n        \n        input[type=\"text\"] {\n            flex: 1;\n            padding: 8px 12px;\n            background: #3c3c3c;\n            border: 1px solid #4a4a4a;\n            border-radius: 4px;\n            color: #ffffff;\n            font-size: 13px;\n        }\n        \n        input[type=\"text\"]::placeholder {\n            color: #888888;\n        }\n        \n        input[type=\"text\"]:focus {\n            outline: none;\n            border-color: #007acc;\n        }\n        \n        .btn {\n            padding: 8px 16px;\n            border: none;\n            border-radius: 4px;\n            font-size: 13px;\n            cursor: pointer;\n            font-weight: 500;\n            transition: opacity 0.2s;\n        }\n        \n        .btn:hover {\n            opacity: 0.9;\n        }\n        \n        .btn:disabled {\n            opacity: 0.5;\n            cursor: not-allowed;\n        }\n        \n        .btn-primary {\n            background: #007acc;\n            color: white;\n        }\n        \n        .btn-purple {\n            background: #8b5cf6;\n            color: white;\n        }\n        \n        .btn-blue {\n            background: #3b82f6;\n            color: white;\n        }\n        \n        .btn-red {\n            background: #ef4444;\n            color: white;\n        }\n        \n        .btn-block {\n            display: block;\n            width: 100%;\n            margin-bottom: 8px;\n        }\n        \n        .info-row {\n            display: flex;\n            justify-content: space-between;\n            padding: 6px 0;\n            border-bottom: 1px solid #3c3c3c;\n        }\n        \n        .info-row:last-child {\n            border-bottom: none;\n        }\n        \n        .info-label {\n            color: #888888;\n        }\n        \n        .info-value {\n            color: #ffffff;\n        }\n        \n        .usage-row {\n            display: flex;\n            gap: 12px;\n            margin-bottom: 8px;\n        }\n        \n        .usage-row:last-of-type {\n            margin-bottom: 0;\n        }\n        \n        .usage-item {\n            flex: 1;\n            display: flex;\n            justify-content: space-between;\n            padding: 6px 10px;\n            background: #2d2d2d;\n            border-radius: 4px;\n        }\n        \n        .switch-container {\n            display: flex;\n            align-items: center;\n            gap: 8px;\n        }\n        \n        .switch {\n            position: relative;\n            width: 40px;\n            height: 20px;\n        }\n        \n        .switch input {\n            opacity: 0;\n            width: 0;\n            height: 0;\n        }\n        \n        .slider {\n            position: absolute;\n            cursor: pointer;\n            top: 0;\n            left: 0;\n            right: 0;\n            bottom: 0;\n            background-color: #4a4a4a;\n            border-radius: 20px;\n            transition: 0.3s;\n        }\n        \n        .slider:before {\n            position: absolute;\n            content: \"\";\n            height: 16px;\n            width: 16px;\n            left: 2px;\n            bottom: 2px;\n            background-color: white;\n            border-radius: 50%;\n            transition: 0.3s;\n        }\n        \n        input:checked + .slider {\n            background-color: #8b5cf6;\n        }\n        \n        input:checked + .slider:before {\n            transform: translateX(20px);\n        }\n        \n        /* 小尺寸开关样式 */\n        .switch-sm {\n            position: relative;\n            width: 32px;\n            height: 16px;\n        }\n        \n        .switch-sm .slider:before {\n            height: 12px;\n            width: 12px;\n            left: 2px;\n            bottom: 2px;\n        }\n        \n        .switch-sm input:checked + .slider:before {\n            transform: translateX(16px);\n        }\n        \n        .pro-badge {\n            background: linear-gradient(90deg, #8b5cf6, #d946ef);\n            padding: 2px 6px;\n            border-radius: 4px;\n            font-size: 10px;\n            font-weight: bold;\n            color: white;\n        }\n        \n        .footer {\n            margin-top: 16px;\n            padding: 12px;\n            background: linear-gradient(135deg, rgba(60, 60, 60, 0.3) 0%, rgba(40, 40, 40, 0.5) 100%);\n            border-radius: 8px;\n            border: 1px solid rgba(255, 255, 255, 0.05);\n        }\n        \n        .footer-row {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n        }\n        \n        .auto-start {\n            display: flex;\n            align-items: center;\n            gap: 8px;\n            font-size: 11px;\n            color: #888;\n        }\n        \n        .cursor-version {\n            display: flex;\n            align-items: center;\n            gap: 6px;\n            font-size: 11px;\n            color: #666;\n            padding: 4px 10px;\n            background: rgba(0, 0, 0, 0.2);\n            border-radius: 12px;\n        }\n        \n        .cursor-version .version-num {\n            color: #a78bfa;\n            font-weight: 500;\n        }\n        \n        /* 自定义弹窗样式 */\n        .modal-overlay {\n            display: none;\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0, 0, 0, 0.85);\n            backdrop-filter: blur(4px);\n            z-index: 1000;\n            justify-content: center;\n            align-items: center;\n            animation: fadeIn 0.2s ease;\n        }\n        \n        @keyframes fadeIn {\n            from { opacity: 0; }\n            to { opacity: 1; }\n        }\n        \n        @keyframes slideIn {\n            from { \n                opacity: 0;\n                transform: scale(0.9) translateY(-10px);\n            }\n            to { \n                opacity: 1;\n                transform: scale(1) translateY(0);\n            }\n        }\n        \n        .modal-overlay.show {\n            display: flex;\n        }\n        \n        .modal-content {\n            background: linear-gradient(145deg, #1e1e1e 0%, #2a2a2a 100%);\n            border-radius: 12px;\n            padding: 16px 20px;\n            max-width: 260px;\n            width: 90%;\n            text-align: center;\n            box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255,255,255,0.05);\n            animation: slideIn 0.2s ease;\n        }\n        \n        .modal-icon {\n            width: 44px;\n            height: 44px;\n            margin: 0 auto 12px;\n            border-radius: 50%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 22px;\n        }\n        \n        .modal-icon.warning {\n            background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n            box-shadow: 0 4px 12px rgba(245, 158, 11, 0.3);\n        }\n        \n        .modal-icon.success {\n            background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n            box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3);\n        }\n        \n        .modal-title {\n            font-size: 15px;\n            font-weight: 600;\n            color: #fff;\n            margin-bottom: 6px;\n        }\n        \n        .modal-message {\n            font-size: 12px;\n            color: #9ca3af;\n            margin-bottom: 16px;\n            line-height: 1.5;\n        }\n        \n        .modal-buttons {\n            display: flex;\n            gap: 8px;\n            justify-content: center;\n        }\n        \n        .modal-btn {\n            padding: 8px 16px;\n            border: none;\n            border-radius: 8px;\n            font-size: 12px;\n            font-weight: 500;\n            cursor: pointer;\n            transition: all 0.15s ease;\n        }\n        \n        .modal-btn.primary {\n            background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n            color: white;\n            box-shadow: 0 2px 8px rgba(139, 92, 246, 0.4);\n        }\n        \n        .modal-btn.primary:hover {\n            box-shadow: 0 4px 12px rgba(139, 92, 246, 0.5);\n        }\n        \n        .modal-btn.secondary {\n            background: rgba(255, 255, 255, 0.08);\n            color: #9ca3af;\n            border: 1px solid rgba(255, 255, 255, 0.1);\n        }\n        \n        .modal-btn.secondary:hover {\n            background: rgba(255, 255, 255, 0.12);\n            color: #fff;\n        }\n        \n        .modal-btn.single {\n            background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);\n            color: white;\n            box-shadow: 0 2px 8px rgba(59, 130, 246, 0.4);\n            min-width: 100px;\n        }\n        \n        .modal-btn.single:hover {\n            box-shadow: 0 4px 12px rgba(59, 130, 246, 0.5);\n        }\n        \n        .highlight {\n            color: #4ade80;\n            font-weight: 600;\n        }\n        \n        .key-display {\n            cursor: pointer;\n            transition: color 0.2s;\n        }\n        \n        .key-display:hover {\n            color: #007acc;\n        }\n        \n        .key-display.copied {\n            color: #4ade80 !important;\n        }\n        \n        /* Loading 状态样式 */\n        .btn.loading {\n            position: relative;\n            pointer-events: none;\n            opacity: 0.7;\n        }\n        \n        .btn.loading .btn-text {\n            visibility: hidden;\n        }\n        \n        .btn.loading::after {\n            content: '';\n            position: absolute;\n            width: 16px;\n            height: 16px;\n            top: 50%;\n            left: 50%;\n            margin-left: -8px;\n            margin-top: -8px;\n            border: 2px solid transparent;\n            border-top-color: #fff;\n            border-radius: 50%;\n            animation: spin 0.8s linear infinite;\n        }\n        \n        @keyframes spin {\n            to { transform: rotate(360deg); }\n        }\n        \n        .refresh-btn.loading {\n            animation: spin 1s linear infinite;\n            pointer-events: none;\n        }\n        \n        /* 公告样式 */\n        .announcement-badge {\n            margin-left: auto;\n            padding: 2px 8px;\n            border-radius: 4px;\n            font-size: 11px;\n            text-transform: uppercase;\n        }\n        \n        .announcement-badge.info {\n            background: #1e3a5f;\n            color: #60a5fa;\n        }\n        \n        .announcement-badge.warning {\n            background: #5c4a1f;\n            color: #fbbf24;\n        }\n        \n        .announcement-badge.error {\n            background: #6e3232;\n            color: #f87171;\n        }\n        \n        .announcement-badge.success {\n            background: #2d4a3e;\n            color: #4ade80;\n        }\n        \n        .announcement-title {\n            font-size: 14px;\n            font-weight: 600;\n            color: #ffffff;\n            margin-bottom: 8px;\n            line-height: 1.4;\n        }\n        \n        .announcement-content {\n            font-size: 12px;\n            color: #b0b0b0;\n            line-height: 1.6;\n            word-break: break-word;\n        }\n        \n        .announcement-link {\n            color: #60a5fa;\n            text-decoration: none;\n            border-bottom: 1px dashed #60a5fa;\n            transition: all 0.2s;\n            cursor: pointer;\n        }\n        \n        .announcement-link:hover {\n            color: #93c5fd;\n            border-bottom-color: #93c5fd;\n        }\n        \n        /* Toast 通知样式 */\n        .toast-container {\n            position: fixed;\n            top: 0;\n            left: 0;\n            right: 0;\n            display: flex;\n            justify-content: center;\n            padding: 12px;\n            pointer-events: none;\n            z-index: 2000;\n        }\n        \n        .toast {\n            display: flex;\n            align-items: center;\n            gap: 8px;\n            padding: 10px 16px;\n            background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);\n            border: 1px solid rgba(74, 222, 128, 0.3);\n            border-radius: 8px;\n            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4), 0 0 20px rgba(74, 222, 128, 0.1);\n            transform: translateY(-100px);\n            opacity: 0;\n            transition: all 0.3s ease;\n            pointer-events: auto;\n        }\n        \n        .toast.show {\n            transform: translateY(0);\n            opacity: 1;\n        }\n        \n        .toast-icon {\n            font-size: 16px;\n        }\n        \n        .toast-message {\n            font-size: 12px;\n            color: #e0e0e0;\n            max-width: 280px;\n            word-break: break-all;\n        }\n        \n        /* 离线状态提示样式 */\n        .offline-banner {\n            display: none;\n            align-items: center;\n            gap: 8px;\n            padding: 10px 14px;\n            margin-bottom: 12px;\n            background: linear-gradient(135deg, #7f1d1d 0%, #991b1b 100%);\n            border: 1px solid rgba(239, 68, 68, 0.3);\n            border-radius: 8px;\n            animation: slideDown 0.3s ease;\n        }\n        \n        .offline-banner.show {\n            display: flex;\n        }\n        \n        @keyframes slideDown {\n            from {\n                opacity: 0;\n                transform: translateY(-10px);\n            }\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n        \n        .offline-banner .offline-icon {\n            font-size: 18px;\n            flex-shrink: 0;\n        }\n        \n        .offline-banner .offline-text {\n            flex: 1;\n        }\n        \n        .offline-banner .offline-title {\n            font-size: 12px;\n            font-weight: 600;\n            color: #fca5a5;\n            margin-bottom: 2px;\n        }\n        \n        .offline-banner .offline-desc {\n            font-size: 11px;\n            color: #fecaca;\n            opacity: 0.8;\n        }\n        \n        .offline-banner .retry-btn {\n            padding: 4px 10px;\n            background: rgba(255, 255, 255, 0.15);\n            border: 1px solid rgba(255, 255, 255, 0.2);\n            border-radius: 4px;\n            color: #fff;\n            font-size: 11px;\n            cursor: pointer;\n            transition: all 0.2s;\n            flex-shrink: 0;\n        }\n        \n        .offline-banner .retry-btn:hover {\n            background: rgba(255, 255, 255, 0.25);\n        }\n        \n        .offline-banner .retry-btn.loading {\n            pointer-events: none;\n            opacity: 0.7;\n        }\n        \n        /* 顶部更新提醒条 */\n        .update-banner {\n            position: sticky;\n            top: 0;\n            left: 0;\n            right: 0;\n            background: linear-gradient(135deg, #ff9800 0%, #f57c00 100%);\n            color: #fff;\n            padding: 8px 12px;\n            font-size: 12px;\n            display: none;\n            align-items: center;\n            justify-content: center;\n            gap: 8px;\n            z-index: 1000;\n            box-shadow: 0 2px 8px rgba(0,0,0,0.3);\n        }\n        .update-banner.show {\n            display: flex;\n        }\n        .update-banner .update-icon {\n            font-size: 14px;\n        }\n        .update-banner .update-text {\n            font-weight: 500;\n        }\n        .update-banner .update-version {\n            background: rgba(255,255,255,0.2);\n            padding: 2px 6px;\n            border-radius: 4px;\n            font-size: 11px;\n        }\n        .update-banner .update-close {\n            margin-left: auto;\n            background: none;\n            border: none;\n            color: #fff;\n            cursor: pointer;\n            font-size: 16px;\n            padding: 0 4px;\n            opacity: 0.8;\n        }\n        .update-banner .update-close:hover {\n            opacity: 1;\n        }\n        \n    </style>\n</head>\n<body>\n    <!-- 顶部更新提醒条 -->\n    <div class=\"update-banner\" id=\"updateBanner\">\n        <span class=\"update-icon\">🚀</span>\n        <span class=\"update-text\">发现新版本</span>\n        <span class=\"update-version\" id=\"updateBannerVersion\">v0.0</span>\n        <button class=\"update-close\" id=\"updateBannerClose\" title=\"关闭\">×</button>\n    </div>\n    \n    <!-- 管理员权限提示弹窗 -->\n    <div class=\"modal-overlay\" id=\"adminModal\">\n        <div class=\"modal-content\">\n            <div class=\"modal-icon warning\">🔐</div>\n            <div class=\"modal-title\">需要管理员权限</div>\n            <div class=\"modal-message\">\n                请关闭 Cursor，右键点击图标<br>\n                选择 <span class=\"highlight\">以管理员身份运行</span>\n            </div>\n            <div class=\"modal-buttons\">\n                <button class=\"modal-btn single\" id=\"adminModalClose\">我知道了</button>\n            </div>\n        </div>\n    </div>\n    \n    <!-- 重置机器码权限提示弹窗 -->\n    <div class=\"modal-overlay\" id=\"resetPermissionModal\">\n        <div class=\"modal-content\">\n            <div class=\"modal-icon warning\">🔐</div>\n            <div class=\"modal-title\">需要管理员权限</div>\n            <div class=\"modal-message\" style=\"text-align: left; line-height: 1.8;\">\n                重置机器码需要管理员权限才能完整执行。<br><br>\n                请按以下步骤操作：<br>\n                <span style=\"color: #fbbf24;\">1.</span> 完全关闭 Cursor<br>\n                <span style=\"color: #fbbf24;\">2.</span> 右键点击 Cursor 图标<br>\n                <span style=\"color: #fbbf24;\">3.</span> 选择 <span class=\"highlight\">以管理员身份运行</span><br>\n                <span style=\"color: #fbbf24;\">4.</span> 再次点击重置机器码\n            </div>\n            <div class=\"modal-buttons\">\n                <button class=\"modal-btn single\" id=\"resetPermissionClose\">我知道了</button>\n            </div>\n        </div>\n    </div>\n    \n    <!-- 重启提示弹窗 -->\n    <div class=\"modal-overlay\" id=\"restartModal\">\n        <div class=\"modal-content\">\n            <div class=\"modal-icon success\">✓</div>\n            <div class=\"modal-title\" id=\"restartModalTitle\">操作成功</div>\n            <div class=\"modal-message\">\n                需要重启 Cursor 才能生效\n            </div>\n            <div class=\"modal-buttons\">\n                <button class=\"modal-btn primary\" id=\"restartNowBtn\">立即重启</button>\n                <button class=\"modal-btn secondary\" id=\"restartLaterBtn\">稍后</button>\n            </div>\n        </div>\n    </div>\n    \n    <!-- 激活码过期弹窗 -->\n    <div class=\"modal-overlay\" id=\"expiredModal\">\n        <div class=\"modal-content\">\n            <div class=\"modal-icon\" style=\"background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%); box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);\">⏰</div>\n            <div class=\"modal-title\">激活码已过期</div>\n            <div class=\"modal-message\">\n                您的激活码已过期，请续费后继续使用\n            </div>\n            <div class=\"modal-buttons\">\n                <button class=\"modal-btn single\" id=\"expiredModalClose\">我知道了</button>\n            </div>\n        </div>\n    </div>\n    \n    <!-- 清理环境确认弹窗 -->\n    <div class=\"modal-overlay\" id=\"cleanEnvModal\">\n        <div class=\"modal-content\">\n            <div class=\"modal-icon warning\">⚠️</div>\n            <div class=\"modal-title\">清理 Cursor 环境</div>\n            <div class=\"modal-message\">\n                此操作会删除所有配置和登录信息<br>确定要继续吗？\n            </div>\n            <div class=\"modal-buttons\">\n                <button class=\"modal-btn primary\" id=\"cleanEnvConfirmBtn\">确定清理</button>\n                <button class=\"modal-btn secondary\" id=\"cleanEnvCancelBtn\">取消</button>\n            </div>\n        </div>\n    </div>\n    \n    <!-- 换号确认弹窗 -->\n    <div class=\"modal-overlay\" id=\"switchConfirmModal\">\n        <div class=\"modal-content\">\n            <div class=\"modal-icon warning\">💰</div>\n            <div class=\"modal-title\">账号未使用完</div>\n            <div class=\"modal-message\">\n                当前账号 <span id=\"switchConfirmEmail\" style=\"color:#4caf50;\"></span><br>\n                已用额度: <span id=\"switchConfirmCost\" style=\"color:#ff9800;font-weight:bold;\">$0.00</span> (不足 $10)<br><br>\n                确定要换号吗？\n            </div>\n            <div class=\"modal-buttons\">\n                <button class=\"modal-btn primary\" id=\"switchConfirmBtn\">确认换号</button>\n                <button class=\"modal-btn secondary\" id=\"switchCancelBtn\">取消</button>\n            </div>\n        </div>\n    </div>\n    \n    <!-- 离线状态提示 -->\n    <div class=\"offline-banner\" id=\"offlineBanner\">\n        <span class=\"offline-icon\">📡</span>\n        <div class=\"offline-text\">\n            <div class=\"offline-title\">网络连接失败</div>\n            <div class=\"offline-desc\">请检查网络后重试</div>\n        </div>\n        <button class=\"retry-btn\" id=\"retryConnectBtn\">重试</button>\n    </div>\n    \n    <!-- 软件授权 -->\n    <div class=\"section\">\n        <div class=\"section-title\">\n            <span class=\"icon\">🔐</span>\n            <span>软件授权</span>\n            <span class=\"status-badge\" id=\"authStatus\">未授权</span>\n        </div>\n        \n        <div class=\"input-group\">\n            <input type=\"text\" id=\"keyInput\" placeholder=\"请输入CDK激活码\">\n            <button class=\"btn btn-primary\" id=\"activateBtn\"><span class=\"btn-text\">激活</span></button>\n        </div>\n        \n        <div class=\"info-row\">\n            <span class=\"info-label\">激活码</span>\n            <span class=\"info-value key-display\" id=\"keyDisplay\" title=\"点击复制\">尚未激活</span>\n        </div>\n        <div class=\"info-row\">\n            <span class=\"info-label\">到期时间</span>\n            <span class=\"info-value\" id=\"expireDate\">尚未激活</span>\n        </div>\n    </div>\n    \n    <!-- 账号数据 (已隐藏) -->\n    <div class=\"section\" style=\"display:none;\">\n        <div class=\"section-title\">\n            <span class=\"icon\">👤</span>\n            <span>账号数据</span>\n            <span class=\"status-badge\" id=\"accountStatus\">未激活</span>\n        </div>\n        \n        <div class=\"info-row\">\n            <span class=\"info-label\">CI积分余额</span>\n            <span class=\"info-value\">0 <button style=\"background:none;border:none;color:#007acc;cursor:pointer;\">🔄</button></span>\n        </div>\n        \n        <button class=\"btn btn-purple btn-block\" id=\"switchBtn\" disabled>换号</button>\n        <button class=\"btn btn-blue btn-block\" id=\"resetBtn\">重置机器码</button>\n        <button class=\"btn btn-blue btn-block\" id=\"disableUpdateBtn\">禁用自动更新</button>\n        <button class=\"btn btn-blue btn-block\" id=\"cleanEnvBtn\">清理Cursor环境</button>\n        <button class=\"btn btn-red btn-block\" id=\"disableBtn\">停用插件</button>\n    </div>\n    \n    <!-- 无感换号 -->\n    <div class=\"section\">\n        <div class=\"section-title\">\n            <span class=\"icon\">⚡</span>\n            <span>无感换号</span>\n            <span class=\"status-badge\" id=\"seamlessStatus\">未启用</span>\n        </div>\n        \n        <div class=\"info-row\">\n            <span class=\"info-label\">积分</span>\n            <span class=\"info-value\" id=\"seamlessSwitchRemaining\">0</span>\n        </div>\n        \n        <div class=\"info-row\">\n            <span class=\"info-label\">当前账号</span>\n            <span class=\"info-value\" style=\"font-size:11px;\" id=\"seamlessCurrentAccount\">未分配</span>\n        </div>\n        \n        <div class=\"switch-container\" style=\"margin: 12px 0;\">\n            <span>免魔法模式</span>\n            <span class=\"pro-badge\">PRO</span>\n            <span style=\"margin-left: auto; color: #888; font-size: 11px;\"></span>\n            <label class=\"switch\">\n                <input type=\"checkbox\" id=\"seamlessProxySwitch\">\n                <span class=\"slider\"></span>\n            </label>\n        </div>\n        \n        <button class=\"btn btn-purple btn-block\" id=\"enableSeamlessBtn\" disabled><span class=\"btn-text\">启用无感换号</span></button>\n        <button class=\"btn btn-red btn-block\" id=\"seamlessResetMachineBtn\" style=\"display:none;\"><span class=\"btn-text\">重置机器码</span></button>\n        <button class=\"btn btn-red btn-block\" id=\"disableSeamlessBtn\" style=\"display:none;\"><span class=\"btn-text\">禁用无感换号</span></button>\n        <button class=\"btn btn-blue btn-block\" id=\"manualSwitchBtn\" style=\"display:none;\" disabled><span class=\"btn-text\">一键换号(扣1积分)</span></button>\n    </div>\n    \n    <!-- 账号用量 -->\n    <div class=\"section\" id=\"usageSection\" style=\"display:none;\">\n        <div class=\"section-title\">\n            <span class=\"icon\">📊</span>\n            <span>账号用量</span>\n            <button class=\"btn\" style=\"margin-left:auto;padding:4px 8px;font-size:11px;background:#3c3c3c;\" id=\"refreshUsageBtn\">🔄</button>\n        </div>\n        \n        <div class=\"usage-row\">\n            <div class=\"usage-item\">\n                <span class=\"info-label\">会员类型</span>\n                <span class=\"info-value\" id=\"usageMemberType\">-</span>\n            </div>\n            <div class=\"usage-item\">\n                <span class=\"info-label\">试用剩余</span>\n                <span class=\"info-value\" id=\"usageTrialDays\">-</span>\n            </div>\n        </div>\n        <div class=\"usage-row\">\n            <div class=\"usage-item\">\n                <span class=\"info-label\">请求次数</span>\n                <span class=\"info-value\" id=\"usageRequestCount\">-</span>\n            </div>\n            <div class=\"usage-item\">\n                <span class=\"info-label\">已用额度</span>\n                <span class=\"info-value\" id=\"usageCostUSD\">-</span>\n            </div>\n        </div>\n        <p style=\"font-size:10px;color:#666;margin-top:8px;text-align:center;\" id=\"usageUpdateTime\">-</p>\n    </div>\n    \n    <!-- 公告 -->\n    <div class=\"section\" id=\"announcementSection\" style=\"display:none;\">\n        <div class=\"section-title\">\n            <span class=\"icon\" id=\"announcementIcon\">📢</span>\n            <span>公告</span>\n            <span class=\"announcement-badge\" id=\"announcementBadge\">info</span>\n        </div>\n        <div class=\"announcement-title\" id=\"announcementTitle\"></div>\n        <div class=\"announcement-content\" id=\"announcementContent\"></div>\n        <p style=\"font-size:10px;color:#666;margin-top:8px;text-align:right;\" id=\"announcementTime\"></p>\n    </div>\n    \n    <!-- 版本信息 -->\n    <div class=\"section\" id=\"versionSection\">\n        <div class=\"section-title\">\n            <span class=\"icon\">📦</span>\n            <span>版本信息</span>\n            <span class=\"status-badge\" id=\"versionStatus\" style=\"display:none;\">有更新</span>\n        </div>\n        <div class=\"info-row\">\n            <span class=\"info-label\">当前版本</span>\n            <span class=\"info-value\" id=\"currentVersion\">-</span>\n        </div>\n        <div class=\"info-row\" id=\"latestVersionRow\" style=\"display:none;\">\n            <span class=\"info-label\">最新版本</span>\n            <span class=\"info-value\" id=\"latestVersion\" style=\"color:#4caf50;\">-</span>\n        </div>\n        <p id=\"updateHint\" style=\"font-size:11px;color:#ff9800;margin-top:8px;display:none;\">\n            ⚠️ 发现新版本，请更新插件以获取最新功能\n        </p>\n    </div>\n    \n    <!-- 页脚 -->\n    <div class=\"footer\">\n        <div class=\"footer-row\">\n            <div class=\"auto-start\">\n                <span>自动启动</span>\n                <label class=\"switch switch-sm\">\n                    <input type=\"checkbox\" id=\"autoStartSwitch\" checked>\n                    <span class=\"slider\"></span>\n                </label>\n            </div>\n            <div class=\"cursor-version\">\n                <span>Cursor</span>\n                <span class=\"version-num\" id=\"cursorVersion\">0.0.0</span>\n            </div>\n        </div>\n        <div class=\"footer-row\" style=\"margin-top: 8px;\">\n            <div style=\"font-size: 10px; color: #666; word-break: break-all;\">\n                <span>路径: </span>\n                <span id=\"cursorPath\" style=\"color: #888;\">获取中...</span>\n            </div>\n        </div>\n    </div>\n    \n    <!-- Toast 通知 -->\n    <div class=\"toast-container\" id=\"toastContainer\">\n        <div class=\"toast\" id=\"toast\">\n            <span class=\"toast-icon\" id=\"toastIcon\">✅</span>\n            <span class=\"toast-message\" id=\"toastMessage\"></span>\n        </div>\n    </div>\n    \n    <script nonce=\"",
  "_0xa6d6ac(0x471,'*&r5')": "_handleGetAccountUsage",
  "_0x833f23(0x95e,'H9os')": "[CursorPro] Toggle proxy error:",
  "_0x833f23(0x5f9,']I&e')": "proxyUpdated",
  "_0x833f23(0x5f3,'de]G')": "accountUsage",
  "_0x833f23(0x85d,'xK)8')": "未提供账号邮箱",
  "_0x833f23(0x8b0,'KW&U')": "获取用量失败",
  "_0x833f23(0x662,'K%5^')": "NYkng",
  "_0x833f23(0x409,'DQte')": "请求失败",
  "_0x833f23(0x83e,'T$OD')": "pLAQo",
  "_0x833f23(0x755,'6eWF')": "getApiUrl",
  "_0x833f23(0x17e,'KW&U')": "/api/cursor-accounts/query?email=",
  "_0x833f23(0x59c,'4)@$')": "XCtgT",
  "_0x833f23(0x4f4,'xK)8')": "XCtgT",
  "_0x833f23(0x974,'0xfR')": "success",
  "_0x833f23(0x643,'8@jo')": "data",
  "_0x833f23(0x2fb,'nY*(')": "_postMessage",
  "_0x833f23(0x178,'LC6r')": "cBprM",
  "_0x833f23(0x93b,'m#S*')": "data",
  "_0x833f23(0x890,'X4(r')": "data",
  "_0x833f23(0x984,'8Ee3')": "usage",
  "_0x833f23(0x2bb,'8@jo')": "totalUsageCount",
  "_0x833f23(0x747,'Aig!')": "XCtgT",
  "_0x833f23(0x731,'k$(5')": "totalCostUSD",
  "_0x833f23(0x89b,'bjRi')": "updateUsageStatusBar",
  "_0x833f23(0x11c,'Ka)i')": "_postMessage",
  "_0x833f23(0x488,'KTbh')": "error",
  "_0x833f23(0x3a2,'4)@$')": "LcuLD",
  "_0x833f23(0x965,'n8BU')": "JvSqa",
  "_0x833f23(0x613,'akm5')": "kwSDs",
  "_0x833f23(0x6cc,'H9os')": "_postMessage",
  "_0x833f23(0x28a,'DbBq')": "cuNHx",
  "_0x833f23(0x371,'Ka)i')": "AlVbI",
  "_0x833f23(0x507,'hSE]')": "_postMessage",
  "_0x833f23(0x998,'^sHL')": "rptjh",
  "_0xa6d6ac(0x695,'6hxd')": "_handleGetAnnouncement",
  "_0x521c3a(0x32e,'7%WS')": "cursorpro.key",
  "_0x521c3a(0x6fa,'ck7z')": "cursorpro.expireDate",
  "_0x521c3a(0x799,'de]G')": "proxyUpdated",
  "_0x521c3a(0x717,'nY*(')": "获取公告失败",
  "_0x521c3a(0x42d,'6eWF')": "请求失败",
  "_0x521c3a(0x480,'63N&')": "getApiUrl",
  "_0x521c3a(0x826,'m#S*')": "/api/announcements/latest",
  "_0x521c3a(0x647,'0xfR')": "aCZjy",
  "_0x521c3a(0x78e,'@HDB')": "success",
  "_0x521c3a(0x145,'EJjX')": "data",
  "_0x521c3a(0x36d,'6hxd')": "aHNrz",
  "_0x521c3a(0x9ad,'qOgW')": "data",
  "_0x521c3a(0x2f6,'6hxd')": "LjnPR",
  "_0x521c3a(0x86f,'63N&')": "announcement",
  "_0x521c3a(0x217,'hSE]')": "error",
  "_0x521c3a(0x593,'nj1b')": "RdeWm",
  "_0x521c3a(0x3a9,'0xfR')": "_context",
  "_0x521c3a(0x581,'^S!O')": "eXcSu",
  "_0x521c3a(0x225,'6hxd')": "_context",
  "_0x521c3a(0x869,'Aig!')": "globalState",
  "_0x521c3a(0x408,'6eWF')": "get",
  "_0x521c3a(0x3c5,'B)Tn')": "wCuhU",
  "_0x521c3a(0x47e,'DbBq')": "_postMessage",
  "_0x521c3a(0x465,'DQte')": "_postMessage",
  "_0x521c3a(0x224,'DQte')": "showToast",
  "_0x521c3a(0x294,']I&e')": "tQyYP",
  "_0x521c3a(0x7c0,'6eWF')": "getTime",
  "_0x521c3a(0x1b9,'^sHL')": "fEjcy",
  "_0x521c3a(0x427,'^sHL')": "now",
  "_0x521c3a(0x85a,'s66k')": "Bjkrw",
  "_0x521c3a(0x6c5,'KW&U')": "trGXG",
  "_0x521c3a(0x60a,'ck7z')": "授权码已过期，无法开启免魔法",
  "_0x521c3a(0x72c,'iDwM')": "_postMessage",
  "_0x521c3a(0x113,'hSE]')": "aHNrz",
  "_0x521c3a(0x33c,'n8BU')": "XcVTX",
  "_0xa6d6ac(0x5da,'yoC7')": "_handleCheckVersion",
  "_0x285b70(0x631,'0xfR')": "versionCheck",
  "_0x285b70(0x214,'fu8^')": "vUHCr",
  "_0x285b70(0x6a4,'nj1b')": "请求失败",
  "_0x285b70(0x7af,'nY*(')": "getLatestVersion",
  "_0x285b70(0x859,'KW&U')": "version",
  "_0x285b70(0x591,'qOgW')": "CURRENT_VERSION",
  "_0x285b70(0x2f2,'k$(5')": "QXFeq",
  "_0x285b70(0x8c6,'DQte')": "_compareVersions",
  "_0x285b70(0x466,'$SfD')": "_postMessage",
  "_0x285b70(0x68b,'s66k')": "lYCxA",
  "_0x285b70(0x47e,'DbBq')": "_postMessage",
  "_0x285b70(0x8dc,'qOgW')": "lYCxA",
  "_0x285b70(0x18d,'bZsS')": "error",
  "_0x285b70(0x355,'8Ee3')": "获取版本失败",
  "_0x285b70(0x46b,'B)Tn')": "QtoxZ",
  "_0x285b70(0x204,'8Ee3')": "xqknY",
  "_0x285b70(0x3f4,'yoC7')": "LOWQh",
  "_0x285b70(0x21d,']I&e')": "log",
  "_0x285b70(0x8e2,'@HDB')": "HgWOc",
  "_0x285b70(0x3ef,'6eWF')": "_cachedCursorPath",
  "_0x285b70(0x3aa,'$SfD')": "versionCheck",
  "_0x285b70(0x560,'Ka)i')": "message",
  "_0x285b70(0x6b5,'KW&U')": "GbNrd",
  "_0xa6d6ac(0x334,'XKo0')": "_compareVersions",
  "_0x4e9a2d(0x81b,'ck7z')": "split",
  "_0x4e9a2d(0x8e4,'K%5^')": "map",
  "_0x4e9a2d(0x2a9,'@HDB')": "split",
  "_0x4e9a2d(0x9e2,']I&e')": "map",
  "_0x4e9a2d(0x127,'LC6r')": "max",
  "_0x4e9a2d(0x4e1,'nY*(')": "length",
  "_0x4e9a2d(0x403,'bjRi')": "length",
  "_0x4e9a2d(0x81c,'LC6r')": "qyNxu",
  "_0xa6d6ac(0x98e,'DQte')": "_handleGetCursorRunningPath",
  "_0x14a521(0x98c,'f)Dq')": "[CursorPro] 使用 VS Code API 获取版本:",
  "_0x14a521(0x2f4,'63N&')": "UBmxB",
  "_0x14a521(0x67d,'KW&U')": "未找到",
  "_0x14a521(0x38f,']I&e')": "darwin",
  "_0x14a521(0x9b9,'63N&')": "Resources",
  "_0x14a521(0x498,'H9os')": "app",
  "_0x14a521(0x8e5,'iDwM')": "package.json",
  "_0x14a521(0x791,'ck7z')": "[CursorPro] 使用用户配置的路径:",
  "_0x14a521(0x1bb,'nj1b')": "win32",
  "_0x14a521(0x3e4,'iDwM')": "BbiYe",
  "_0x14a521(0x3dc,']I&e')": "wmic process where \"name='Cursor.exe'\" get ExecutablePath /format:list 2>nul",
  "_0x14a521(0x623,'7%WS')": "resources",
  "_0x14a521(0x490,'DbBq')": "snkgX",
  "_0x14a521(0x1a4,'7%8^')": "BoVlO",
  "_0x14a521(0x143,'KW&U')": "cursor",
  "_0x14a521(0x7fe,'LC6r')": "ZhNbs",
  "_0x14a521(0x5ea,'ACPk')": "WrYgR",
  "_0x14a521(0x4d3,'akm5')": "/Applications/Cursor.app",
  "_0x14a521(0x58b,'bZsS')": "/usr/share/cursor",
  "_0x14a521(0x841,'fu8^')": ".local",
  "_0x14a521(0x710,'m#S*')": "share",
  "_0x14a521(0x159,'$SfD')": "mnjXn",
  "_0x14a521(0x2da,'fu8^')": "WRpnS",
  "_0x14a521(0x540,'6eWF')": "UBmxB",
  "_0x14a521(0x3c3,'^sHL')": "platform",
  "_0x14a521(0x7b0,'bZsS')": "workspace",
  "_0x14a521(0x896,'8Ee3')": "getConfiguration",
  "_0x14a521(0x6fe,'^sHL')": "bZBTW",
  "_0x14a521(0x196,'@HDB')": "get",
  "_0x14a521(0x94c,'nY*(')": "vlHDb",
  "_0x14a521(0x704,'m#S*')": "join",
  "_0x14a521(0x884,'akm5')": "nEYhA",
  "_0x14a521(0x384,'Ka)i')": "EbBLW",
  "_0x14a521(0x5cc,'DbBq')": "lMfdt",
  "_0x14a521(0x2d2,'K%5^')": "MFjtx",
  "_0x14a521(0x134,'xK)8')": "join",
  "_0x14a521(0x1d3,'4)@$')": "resources",
  "_0x14a521(0x125,'ck7z')": "MFjtx",
  "_0x14a521(0x5c9,'6eWF')": "NjVqB",
  "_0x14a521(0x834,'ACPk')": "JSWuW",
  "_0x14a521(0x986,'de]G')": "eKgQY",
  "_0x14a521(0x2c5,'*&r5')": "ACRef",
  "_0x14a521(0x4f7,'LC6r')": "match",
  "_0x14a521(0x1b1,'LC6r')": "trim",
  "_0x14a521(0x9af,'0xfR')": "join",
  "_0x14a521(0x848,'ck7z')": "rEwYQ",
  "_0x14a521(0x363,'ACPk')": "YxYZp",
  "_0x14a521(0x1e2,'ck7z')": "log",
  "_0x14a521(0x951,'8@jo')": "SsULC",
  "_0x14a521(0x307,'de]G')": "[CursorPro] WMIC 获取路径失败:",
  "_0x14a521(0x17b,'bZsS')": "QhWXL",
  "_0x14a521(0x95d,'T$OD')": "FyfZA",
  "_0x14a521(0x934,'7%8^')": "DZGqD",
  "_0x14a521(0x1df,'nj1b')": "eCMQp",
  "_0x14a521(0x9f0,'6hxd')": "_getHostsPath",
  "_0x14a521(0x722,'Aig!')": "existsSync",
  "_0x14a521(0x750,'POq&')": "readFileSync",
  "_0x14a521(0x289,'de]G')": "AwKfF",
  "_0x14a521(0x1f7,'k$(5')": "error",
  "_0x14a521(0x424,'*&r5')": "[CursorPro] Read hosts error:",
  "_0x14a521(0x745,'$SfD')": "env",
  "_0x14a521(0x3fa,'LC6r')": "LOCALAPPDATA",
  "_0x14a521(0x387,'DQte')": "join",
  "_0x14a521(0x706,'hSE]')": "QKwAH",
  "_0x14a521(0x809,'Ka)i')": "eEobw",
  "_0x14a521(0x577,'LC6r')": "join",
  "_0x14a521(0x712,'K%5^')": "ydRHF",
  "_0x14a521(0x6f9,'iDwM')": "app",
  "_0x14a521(0x533,'Ka)i')": "MFjtx",
  "_0x14a521(0x6e3,'8@jo')": "darwin",
  "_0x14a521(0x6cb,'^S!O')": "Qvzam",
  "_0x14a521(0x9e3,'^sHL')": "aouCU",
  "_0x14a521(0x91d,'bZsS')": "XXRrw",
  "_0x14a521(0x1e1,'0xfR')": "_getCursorInstallPath",
  "_0x14a521(0x718,'qOgW')": "biXGl",
  "_0x14a521(0x108,'6hxd')": "join",
  "_0x14a521(0x1f0,'bjRi')": "nEYhA",
  "_0x14a521(0x23e,'qOgW')": "HOME",
  "_0x14a521(0x996,']I&e')": "ErbAO",
  "_0x14a521(0x2d4,'DbBq')": "vvvXG",
  "_0x14a521(0x42e,'xK)8')": "kVBXU",
  "_0x14a521(0x702,'B)Tn')": "join",
  "_0x14a521(0x324,'ck7z')": "ydRHF",
  "_0x14a521(0x9e5,'s66k')": "package.json",
  "_0x14a521(0x622,'7%8^')": "existsSync",
  "_0x14a521(0x783,'KTbh')": "sxYuF",
  "_0x14a521(0x91e,'nj1b')": "sYfMC",
  "_0x14a521(0x3eb,'^sHL')": "existsSync",
  "_0x14a521(0x10c,'bZsS')": "AwKfF",
  "_0x14a521(0x539,'XKo0')": "parse",
  "_0x14a521(0x29b,'DbBq')": "log",
  "_0x14a521(0x3dd,'qOgW')": "UFfHe",
  "_0x14a521(0x7f9,'K%5^')": "HLsOj",
  "_0x14a521(0x81f,'EJjX')": "message",
  "_0xa6d6ac(0x685,'ACPk')": "_handleCheckUsageBeforeSwitch",
  "_0x4b5249(0x633,'bZsS')": "[CursorPro] PowerShell Get-Process 获取路径失败",
  "_0x4b5249(0x862,'ck7z')": "[CursorPro] Direct write failed, trying to grant permission",
  "_0x4b5249(0x8a3,'bZsS')": "klkmy",
  "_0x4b5249(0x3a1,']I&e')": "未激活授权码",
  "_0x4b5249(0x43c,'ck7z')": "taehn",
  "_0x4b5249(0x4b3,'EJjX')": "Drfmf",
  "_0x4b5249(0x8eb,'Ka)i')": "lZGGL",
  "_0x4b5249(0x4ab,'KW&U')": "aCFwf",
  "_0x4b5249(0x63b,'nY*(')": "PgKQl",
  "_0x4b5249(0x38a,'4)@$')": "zdYFk",
  "_0x4b5249(0x509,'LC6r')": "NTZfw",
  "_0x4b5249(0x5bf,'bjRi')": "_context",
  "_0x4b5249(0x4b5,'qOgW')": "globalState",
  "_0x4b5249(0x789,'*&r5')": "get",
  "_0x4b5249(0x529,'H9os')": "cursorpro.key",
  "_0x4b5249(0x2a0,'xK)8')": "_postMessage",
  "_0x4b5249(0x8cd,'KW&U')": "LnwIK",
  "_0x4b5249(0x4d6,'LC6r')": "FHkCa",
  "_0x4b5249(0x2aa,'8@jo')": "FHkCa",
  "_0x4b5249(0x75c,'63N&')": "_postMessage",
  "_0x4b5249(0x6b1,'s66k')": "usageCheckResult",
  "_0x4b5249(0x769,'qOgW')": "window",
  "_0x4b5249(0x8c9,'f)Dq')": "清理失败: ",
  "_0x4b5249(0x244,'EJjX')": "getApiUrl",
  "_0x4b5249(0x421,'H9os')": "&refresh=false",
  "_0x4b5249(0x27e,'gvo7')": "success",
  "_0x4b5249(0x6e6,'7%8^')": "KaGPw",
  "_0x4b5249(0x988,'4)@$')": "data",
  "_0x4b5249(0x2d8,'xK)8')": "usage",
  "_0x4b5249(0x61a,'8@jo')": "totalCostUSD",
  "_0x4b5249(0x3f2,'6hxd')": "DqgLz",
  "_0x4b5249(0x2b8,'$SfD')": "wnjiM",
  "_0x4b5249(0x231,'iDwM')": "nMItX",
  "_0x4b5249(0x8cc,'bZsS')": "YHdCp",
  "_0x4b5249(0x397,'@HDB')": "log",
  "_0x4b5249(0x7a0,'POq&')": "sEVKj",
  "_0x4b5249(0x8ee,'gvo7')": "_postMessage",
  "_0x4b5249(0x872,'POq&')": "LnwIK",
  "_0x4b5249(0x15e,'f)Dq')": "LnwIK",
  "_0x4b5249(0x133,'7%8^')": "rmSync",
  "_0x4b5249(0x82a,'iDwM')": "zYseP",
  "_0x4b5249(0x1e0,'4)@$')": "_postMessage",
  "_0x4b5249(0x61b,'EJjX')": "LnwIK",
  "_0x4b5249(0x275,'6eWF')": "log",
  "_0x4b5249(0x240,'7%WS')": "kcIfn",
  "_0x4b5249(0x49c,'qOgW')": "qVzhF",
  "_0x4b5249(0x341,'bZsS')": "zYseP",
  "_0x4b5249(0x9ec,'bZsS')": "PYWHP",
  "_0x4b5249(0x941,'0xfR')": "EKVNJ",
  "_0x4b5249(0x1e4,'akm5')": "_postMessage",
  "_0x4b5249(0x7c7,'X4(r')": "push",
  "_0xae00c6(0x38d,'T$OD')": "utf-8",
  "_0xae00c6(0x3de,'H9os')": "[CursorPro] Linux 获取进程路径失败:",
  "_0xae00c6(0x15d,'^S!O')": "未激活授权码",
  "_0xae00c6(0x32a,'6eWF')": "FYJZv",
  "_0xae00c6(0x8b6,'H9os')": "换号失败",
  "_0xae00c6(0x99c,'gvo7')": "连接服务器失败",
  "_0xae00c6(0x8cf,'B)Tn')": "yJBIQ",
  "_0xae00c6(0x38c,'ck7z')": "_context",
  "_0xae00c6(0x635,'0xfR')": "globalState",
  "_0xae00c6(0x327,'gvo7')": "get",
  "_0xae00c6(0x266,'POq&')": "cursorpro.key",
  "_0xae00c6(0x11c,'Ka)i')": "_postMessage",
  "_0xae00c6(0x2ea,'4)@$')": "KvCvh",
  "_0xae00c6(0x110,'$SfD')": "VLaZZ",
  "_0xae00c6(0x979,'4)@$')": "switchSeamlessToken",
  "_0xae00c6(0x474,'XKo0')": "switched",
  "_0xae00c6(0x9c8,'B)Tn')": "readFileSync",
  "_0xae00c6(0x654,'yoC7')": "BIFqO",
  "_0xae00c6(0x6f3,'7%WS')": "email",
  "_0xae00c6(0x52b,'@HDB')": "_context",
  "_0xae00c6(0x5b7,'k$(5')": "update",
  "_0xae00c6(0x44f,'de]G')": "cursorpro.seamlessCurrentAccount",
  "_0xae00c6(0x728,'X4(r')": "email",
  "_0xae00c6(0x70a,'*&r5')": "_postMessage",
  "_0xae00c6(0x97b,'7%8^')": "KvCvh",
  "_0xae00c6(0x188,'*&r5')": "email",
  "_0xae00c6(0x614,'63N&')": "mlftM",
  "_0xae00c6(0x7bb,'ACPk')": "JYbEY",
  "_0xae00c6(0x67f,'EJjX')": "jnyry",
  "_0xae00c6(0x960,'@HDB')": "message",
  "_0xae00c6(0x2d7,'m#S*')": "error",
  "_0xae00c6(0x6d1,'XKo0')": "HxZxj",
  "_0xae00c6(0x881,'DQte')": "KvCvh",
  "_0xae00c6(0x7f6,'gvo7')": "BfPph",
  "_0xae00c6(0x6fb,'yoC7')": "_postMessage",
  "_0xae00c6(0x693,'7%WS')": "HrshN",
  "_0xae00c6(0x753,'$SfD')": "ByJnO",
  "_0xae00c6(0x22a,'B)Tn')": "message",
  "_0xae00c6(0x6c7,'KTbh')": "sLjSr",
  "_0xae00c6(0x543,'^S!O')": "KvCvh",
  "_0xa6d6ac(0x26b,'ck7z')": "_handleGetCursorPath",
  "_0x2c07be(0x177,'0xfR')": "EPERM",
  "_0x2c07be(0x1d7,'s66k')": "没有写入权限",
  "_0x2c07be(0x257,'EJjX')": "activated",
  "_0x2c07be(0x5df,'DbBq')": "没有写入权限，请在终端执行: sudo chmod -R 777 /Applications/Cursor.app",
  "_0x2c07be(0x51e,'de]G')": "seamlessInjected",
  "_0x2c07be(0x62e,'nY*(')": "请先激活授权码",
  "_0x2c07be(0x459,'H9os')": "启用失败",
  "_0x2c07be(0x952,'n8BU')": "win32",
  "_0x2c07be(0x1f2,'8@jo')": "BKPzM",
  "_0x2c07be(0x4cc,'6eWF')": "lshQE",
  "_0x2c07be(0x70b,'de]G')": "Cursor",
  "_0x2c07be(0x7e0,'nj1b')": "ps aux | grep -i \"[c]ursor\" | head -1 | awk '{print $11}'",
  "_0x2c07be(0x72f,'H9os')": "TJpGd",
  "_0x2c07be(0x541,'6eWF')": "rnnax",
  "_0x2c07be(0x26a,'6eWF')": "未检测",
  "_0x2c07be(0x78a,'ACPk')": "app",
  "_0x2c07be(0x5d9,'KW&U')": "workbench.desktop.main.js",
  "_0x2c07be(0x83b,'^sHL')": "RgvPD",
  "_0x2c07be(0x6d7,'0xfR')": "Contents",
  "_0x2c07be(0x943,'8@jo')": "fFSTL",
  "_0x2c07be(0x51f,'$SfD')": "resources",
  "_0x2c07be(0x339,'ACPk')": "LwcoD",
  "_0x2c07be(0x6ed,'hSE]')": "bwKxQ",
  "_0x2c07be(0x8da,'akm5')": "未找到",
  "_0x2c07be(0x1ea,'ACPk')": "EvRNl",
  "_0x2c07be(0x62a,'XKo0')": "cursorPath",
  "_0x2c07be(0x87e,'XKo0')": "tbZpe",
  "_0x2c07be(0x758,'63N&')": "VsfTO",
  "_0x2c07be(0x7f1,'akm5')": "LurDi",
  "_0x2c07be(0x768,'bjRi')": "match",
  "_0x2c07be(0x13f,'bjRi')": "trim",
  "_0x2c07be(0x1bc,'B)Tn')": "VtoJO",
  "_0x2c07be(0x793,'Aig!')": "hKLIf",
  "_0x2c07be(0x3f7,'4)@$')": "tbZpe",
  "_0x2c07be(0x72b,'7%WS')": "code",
  "_0x2c07be(0x741,'6eWF')": "pcUwb",
  "_0x2c07be(0x160,'Aig!')": "tbZpe",
  "_0x2c07be(0x1c2,'63N&')": "code",
  "_0x2c07be(0x5e2,'ck7z')": "EACCES",
  "_0x2c07be(0x7ab,']I&e')": "WPzlq",
  "_0x2c07be(0x94f,'Aig!')": "_postMessage",
  "_0x2c07be(0x6f0,'bjRi')": "drojl",
  "_0x2c07be(0x5e5,'f)Dq')": "KDsFj",
  "_0x2c07be(0x2c8,'fu8^')": "rLwGW",
  "_0x2c07be(0x1cd,'KW&U')": "rLwGW",
  "_0x2c07be(0x7f7,'nY*(')": "powershell -Command \"Get-Process Cursor -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty Path\"",
  "_0x2c07be(0x8fb,'k$(5')": "trim",
  "_0x2c07be(0x5cd,'m#S*')": "ePJAJ",
  "_0x2c07be(0x4af,'4)@$')": "dirname",
  "_0x2c07be(0x4f5,'8@jo')": "trim",
  "_0x2c07be(0x6a9,'LC6r')": "fTNeN",
  "_0x2c07be(0x8bf,'@HDB')": "substring",
  "_0x2c07be(0x903,'EJjX')": "substring",
  "_0x2c07be(0x285,'ACPk')": "length",
  "_0x2c07be(0x3cd,'Aig!')": "lqoLD",
  "_0x2c07be(0x11b,'DbBq')": "env",
  "_0x2c07be(0x74f,'KW&U')": "APPDATA",
  "_0x2c07be(0x93c,'akm5')": "join",
  "_0x2c07be(0x54d,'7%WS')": "darwin",
  "_0x2c07be(0x7cc,'H9os')": "USGWH",
  "_0x2c07be(0x531,'4)@$')": "trim",
  "_0x2c07be(0x7f3,'nj1b')": "warn",
  "_0x2c07be(0x4bc,'s66k')": "env",
  "_0x2c07be(0x961,'@HDB')": "Application Support",
  "_0x2c07be(0x1d2,'bjRi')": "gDuYC",
  "_0x2c07be(0x475,'ACPk')": "trim",
  "_0x2c07be(0x312,'@HDB')": "tbZpe",
  "_0x2c07be(0x975,'k$(5')": "bwLpU",
  "_0x2c07be(0x53f,'f)Dq')": "bwLpU",
  "_0x2c07be(0x273,'POq&')": "trim",
  "_0x2c07be(0x760,'f)Dq')": "TbbUg",
  "_0x2c07be(0x203,'7%8^')": "warn",
  "_0x2c07be(0x9aa,'7%WS')": "lqoLD",
  "_0x2c07be(0x97c,'63N&')": "env",
  "_0x2c07be(0x431,'^S!O')": "join",
  "_0x2c07be(0x7df,'gvo7')": "sWGNb",
  "_0x2c07be(0x368,'H9os')": "oVgdC",
  "_0x2c07be(0x4e5,'yoC7')": "dWdoR",
  "_0x2c07be(0x3af,'4)@$')": "KbfNq",
  "_0x2c07be(0x773,'n8BU')": "_postMessage",
  "_0x2c07be(0x4da,'n8BU')": "NwHIv",
  "_0x2c07be(0x9b3,'bjRi')": "dALzw",
  "_0x2c07be(0x41e,'7%WS')": "mOngd",
  "_0x2c07be(0x661,'DbBq')": "TFAWN",
  "_0x2c07be(0x6a8,'fu8^')": "GdGfE",
  "_0x2c07be(0x461,'qOgW')": "lPhmJ",
  "_0x2c07be(0x83a,'m#S*')": "telemetry.devDeviceId",
  "_0x2c07be(0x79d,'T$OD')": "devDeviceId",
  "_0x2c07be(0x921,']I&e')": "join",
  "_0x2c07be(0x7ac,'^sHL')": "dEWjF",
  "_0x2c07be(0x2a1,'4)@$')": "darwin",
  "_0x2c07be(0x3b7,'KTbh')": "KDsFj",
  "_0x2c07be(0x43d,'nY*(')": "RgvPD",
  "_0x2c07be(0x3a6,'de]G')": "join",
  "_0x2c07be(0x5ee,'B)Tn')": "Resources",
  "_0x2c07be(0x4fb,'H9os')": "UmBJK",
  "_0x2c07be(0x8fe,'EJjX')": "NSGgG",
  "_0x2c07be(0x636,']I&e')": "writeFileSync",
  "_0x2c07be(0x4dc,'X4(r')": "PYNDj",
  "_0x2c07be(0x9e6,'KW&U')": "mlBaX",
  "_0x2c07be(0x8ca,'X4(r')": "_postMessage",
  "_0x2c07be(0x3d8,'k$(5')": "seamlessInjected",
  "_0x2c07be(0x917,'iDwM')": "bpeCI",
  "_0x2c07be(0x530,'KW&U')": "join",
  "_0x2c07be(0x5ae,'X4(r')": "xjVUo",
  "_0x2c07be(0x916,'nY*(')": "vdFYP",
  "_0x2c07be(0x7db,'X4(r')": "UmBJK",
  "_0x2c07be(0x6ca,'KW&U')": "workbench",
  "_0x2c07be(0x5a3,'bjRi')": "dEWjF",
  "_0x2c07be(0x388,'@HDB')": "existsSync",
  "_0x2c07be(0x50b,'iDwM')": "NFQWc",
  "_0x2c07be(0x194,'nY*(')": "IvxYw",
  "_0x2c07be(0x787,'^sHL')": "_getWorkbenchPathAsync",
  "_0x2c07be(0x713,'^S!O')": "UFtEi",
  "_0x2c07be(0x5f4,'k$(5')": "match",
  "_0x2c07be(0x77d,'4)@$')": "existsSync",
  "_0x2c07be(0x4d9,'ck7z')": "trim",
  "_0x2c07be(0x95c,'Aig!')": "trim",
  "_0x2c07be(0x598,'8Ee3')": "lWQvv",
  "_0x2c07be(0x3bb,'^sHL')": "EYQCn",
  "_0x2c07be(0x4c7,'8Ee3')": "npeOU",
  "_0x2c07be(0x646,'6hxd')": "_getWorkbenchPathAsync",
  "_0x2c07be(0x435,'4)@$')": "未找到",
  "_0x2c07be(0x798,'xK)8')": "includes",
  "_0x2c07be(0x5b2,'m#S*')": "mOngd",
  "_0x2c07be(0x2cd,'63N&')": "existsSync",
  "_0x2c07be(0x75c,'63N&')": "_postMessage",
  "_0x2c07be(0x362,'xK)8')": "MiEkS",
  "_0x2c07be(0x6d8,'xK)8')": "HiXkV",
  "_0x2c07be(0x5b1,'iDwM')": "未找到",
  "_0x2c07be(0x15f,'qOgW')": "UFtEi",
  "_0x2c07be(0x329,'fu8^')": "hlIYy",
  "_0x2c07be(0x6a2,'k$(5')": "GnlEK",
  "_0x2c07be(0x184,'KW&U')": "_postMessage",
  "_0x2c07be(0x158,'*&r5')": "GONGu",
  "_0x2c07be(0x8a5,'k$(5')": "GONGu",
  "_0x2c07be(0x483,'iDwM')": "message",
  "_0x2c07be(0x306,'s66k')": "_view",
  "_0x2c07be(0x821,'fu8^')": "postMessage",
  "_0x772669(0x347,'iDwM')": "路径:",
  "_0x772669(0x70d,'LC6r')": "cursorAuth/accessToken",
  "_0x772669(0x1c1,'XKo0')": "cursorAuth/refreshToken",
  "_0x772669(0x405,'n8BU')": "cursorAuth/cachedEmail",
  "_0x772669(0x3d7,'KW&U')": "getCursorPaths",
  "_0x772669(0x468,'K%5^')": "existsSync",
  "_0x772669(0x748,'de]G')": "YEFIo",
  "_0x772669(0x59b,'8Ee3')": "oRodx",
  "_0x772669(0x470,'iDwM')": "version",
  "_0x772669(0x910,'6eWF')": "pvPNp",
  "_0x772669(0x261,'Aig!')": "version",
  "_0x772669(0x73a,'8@jo')": "wjbSZ",
  "_0x772669(0x42b,'LC6r')": "sqliteGet",
  "_0x772669(0x831,'8Ee3')": "YZqNp",
  "_0x772669(0x657,'$SfD')": "sqliteGet",
  "_0x772669(0x157,'yoC7')": "dbFLV",
  "_0x772669(0x2d0,'n8BU')": "zHYNu",
  "_0x772669(0x292,'8Ee3')": "rTrKG",
  "_0x772669(0x76b,'m#S*')": "[CursorPro] 读取账号失败:",
  "_0xa6d6ac(0x90d,'POq&')": "_sendState",
  "_0x98094a(0x854,'7%8^')": "cursorpro.switchLimit",
  "_0x98094a(0x252,'T$OD')": "state",
  "_0x98094a(0x353,']I&e')": "_context",
  "_0x98094a(0x6c3,'LC6r')": "globalState",
  "_0x98094a(0x9db,'k$(5')": "get",
  "_0x98094a(0x752,'@HDB')": "cursorpro.key",
  "_0x98094a(0x38c,'ck7z')": "_context",
  "_0x98094a(0x7cf,'n8BU')": "get",
  "_0x98094a(0x14a,'8@jo')": "_context",
  "_0x98094a(0x5de,'7%8^')": "globalState",
  "_0x98094a(0x31d,'K%5^')": "get",
  "_0x98094a(0x67c,'XKo0')": "PnvAx",
  "_0x98094a(0x370,'n8BU')": "_context",
  "_0x98094a(0x838,'POq&')": "globalState",
  "_0x98094a(0x96c,'^sHL')": "get",
  "_0x98094a(0x6e0,'XKo0')": "WEZcg",
  "_0x98094a(0x7f0,'K%5^')": "_getCursorVersion",
  "_0x98094a(0x7fc,'nj1b')": "getOnlineStatus",
  "_0x98094a(0x245,'7%8^')": "_postMessage",
  "_0x98094a(0x1dd,'63N&')": "MBSJn",
  "_0x98094a(0x547,'6hxd')": "CNAgf",
  "_0x98094a(0x92b,'f)Dq')": "dNuxR",
  "_0x98094a(0x332,'H9os')": "tZHta",
  "_0xa6d6ac(0x1ac,'DQte')": "_handleRetryConnect",
  "_0x193cff(0x43a,'H9os')": "NZAQL",
  "_0x193cff(0x2ac,'nY*(')": "ANSiR",
  "_0x193cff(0x1a8,'7%8^')": "PPUYG",
  "_0x193cff(0x1ed,'Ka)i')": "networkStatus",
  "_0x193cff(0x525,'Aig!')": "[CursorPro] Retry connect failed:",
  "_0x193cff(0x6c0,'akm5')": "_context",
  "_0x193cff(0x945,'m#S*')": "globalState",
  "_0x193cff(0x47a,'nY*(')": "get",
  "_0x193cff(0x207,'KW&U')": "vBOsW",
  "_0x193cff(0x9a0,'8@jo')": "NhGlq",
  "_0x193cff(0x690,'8Ee3')": "uUjDH",
  "_0x193cff(0x7a2,'s66k')": "uUjDH",
  "_0x193cff(0x891,'*&r5')": "map",
  "_0x193cff(0x46a,'^sHL')": "split",
  "_0x193cff(0x4e0,'fu8^')": "map",
  "_0x193cff(0x3cb,'T$OD')": "max",
  "_0x193cff(0x510,'XKo0')": "length",
  "_0x193cff(0x681,'0xfR')": "length",
  "_0x193cff(0x462,'@HDB')": "rRAOR",
  "_0x193cff(0x19c,'8@jo')": "dLQJl",
  "_0x193cff(0x6a7,'EJjX')": "PglaH",
  "_0x193cff(0x9eb,'nY*(')": "vNOCd",
  "_0x193cff(0x248,'qOgW')": "getApiUrl",
  "_0x193cff(0x1d1,'^sHL')": "vKktT",
  "_0x193cff(0x3ea,'0xfR')": "_sendState",
  "_0x193cff(0x7ed,'POq&')": "error",
  "_0x193cff(0x4db,'6eWF')": "FbRju",
  "_0x193cff(0x79c,'qOgW')": "_postMessage",
  "_0x193cff(0x6ad,'KW&U')": "networkStatus",
  "_0xa6d6ac(0x5d4,'8Ee3')": "_getCursorVersion",
  "_0x3f929e(0x915,'T$OD')": "[CursorPro] 首次启用，从备份恢复干净的 workbench 文件",
  "_0x3f929e(0x4ed,'nj1b')": "cursorPath",
  "_0x3f929e(0x52c,'EJjX')": "获取失败",
  "_0x3f929e(0x5e1,'ACPk')": "FXgaA",
  "_0x3f929e(0x2c4,'XKo0')": "Contents",
  "_0x3f929e(0x171,'yoC7')": "Resources",
  "_0x3f929e(0x386,'4)@$')": "package.json",
  "_0x3f929e(0x4a9,'LC6r')": "Programs",
  "_0x3f929e(0x5d6,'xK)8')": "Cursor",
  "_0x3f929e(0x592,'fu8^')": "resources",
  "_0x3f929e(0x1eb,'nY*(')": "cursor",
  "_0x3f929e(0x13c,'iDwM')": "AppData",
  "_0x3f929e(0x4f1,']I&e')": "Local",
  "_0x3f929e(0x54d,'7%WS')": "darwin",
  "_0x3f929e(0x4f3,'8@jo')": "/usr/share/cursor/resources/app/package.json",
  "_0x3f929e(0x23b,'8@jo')": "/opt/Cursor/resources/app/package.json",
  "_0x3f929e(0x2b5,'7%WS')": ".local",
  "_0x3f929e(0x2ed,'Ka)i')": "olTfK",
  "_0x3f929e(0x1bf,'7%WS')": "dqmkC",
  "_0x3f929e(0x502,'k$(5')": "utf-8",
  "_0x3f929e(0x34d,'8Ee3')": "Eoizq",
  "_0x3f929e(0x182,'8@jo')": "YcIFS",
  "_0x3f929e(0x457,'akm5')": "路径:",
  "_0x3f929e(0x39a,'akm5')": "[CursorPro] 尝试路径失败:",
  "_0x3f929e(0x6ec,'fu8^')": "vscode",
  "_0x3f929e(0x6cd,'s66k')": "[CursorPro] 未找到 Cursor 版本，尝试的路径:",
  "_0x3f929e(0x463,'xK)8')": "[CursorPro] 获取 Cursor 版本失败:",
  "_0x3f929e(0x40a,'DQte')": "platform",
  "_0x3f929e(0x6bf,'POq&')": "YSmFZ",
  "_0x3f929e(0x967,'8@jo')": "bglvq",
  "_0x3f929e(0x88c,'LC6r')": "vhvSM",
  "_0x3f929e(0x81d,'Ka)i')": "darwin",
  "_0x3f929e(0x913,'Aig!')": "push",
  "_0x3f929e(0x27d,'Aig!')": "gBPlE",
  "_0x3f929e(0x963,'7%WS')": "bUMcY",
  "_0x3f929e(0x5dd,'DbBq')": "push",
  "_0x3f929e(0x7ba,'T$OD')": "join",
  "_0x3f929e(0x54e,'63N&')": "resources",
  "_0x3f929e(0x29c,'4)@$')": "rmSync",
  "_0x3f929e(0x308,'7%WS')": "vhvSM",
  "_0x3f929e(0x668,'63N&')": "win32",
  "_0x3f929e(0x720,'6hxd')": "env",
  "_0x3f929e(0x477,'4)@$')": "env",
  "_0x3f929e(0x625,'f)Dq')": "USERPROFILE",
  "_0x3f929e(0x97c,'63N&')": "env",
  "_0x3f929e(0x947,'xK)8')": "C:\\Program Files",
  "_0x3f929e(0x1a6,'8@jo')": "push",
  "_0x3f929e(0x288,'s66k')": "join",
  "_0x3f929e(0x13a,'7%8^')": "CfoeP",
  "_0x3f929e(0x950,'bjRi')": "pwRyy",
  "_0x3f929e(0x830,'K%5^')": "app",
  "_0x3f929e(0x391,'6hxd')": "package.json",
  "_0x3f929e(0x702,'B)Tn')": "join",
  "_0x3f929e(0x36a,'8@jo')": "LPmpS",
  "_0x3f929e(0x417,'X4(r')": "join",
  "_0x3f929e(0x74d,'63N&')": "RYOAX",
  "_0x3f929e(0x425,'de]G')": "qCStx",
  "_0x3f929e(0x92e,'iDwM')": "CfoeP",
  "_0x3f929e(0x86a,'8@jo')": "TosHP",
  "_0x3f929e(0x62d,'8@jo')": "bUMcY",
  "_0x3f929e(0x8e7,'Ka)i')": "CaEkI",
  "_0x3f929e(0x6bc,'f)Dq')": "join",
  "_0x3f929e(0x9a3,'n8BU')": "package.json",
  "_0x3f929e(0x21b,'yoC7')": "join",
  "_0x3f929e(0x775,'T$OD')": "LPmpS",
  "_0x3f929e(0x229,'Aig!')": "resources",
  "_0x3f929e(0x691,'Aig!')": "CaEkI",
  "_0x3f929e(0x432,'H9os')": "join",
  "_0x3f929e(0x8c7,'Aig!')": "Cursor",
  "_0x3f929e(0x123,'n8BU')": "bUMcY",
  "_0x3f929e(0x1da,'iDwM')": "CaEkI",
  "_0x3f929e(0x286,'bZsS')": "DEXlW",
  "_0x3f929e(0x40c,'*&r5')": "VNwrn",
  "_0x3f929e(0x9ef,'yoC7')": "push",
  "_0x3f929e(0x33e,'B)Tn')": "fjFtX",
  "_0x3f929e(0x176,'ck7z')": "jHXyq",
  "_0x3f929e(0x8c2,'ACPk')": "/opt/cursor/resources/app/package.json",
  "_0x3f929e(0x4ef,'^sHL')": "cursor",
  "_0x3f929e(0x595,'@HDB')": "TosHP",
  "_0x3f929e(0x7c4,'ACPk')": "YSmFZ",
  "_0x3f929e(0x51c,'yoC7')": "olTfK",
  "_0x3f929e(0x676,'m#S*')": "dUUUB",
  "_0x3f929e(0x819,'yoC7')": "JVRzx",
  "_0x3f929e(0x19e,'8@jo')": "eTsxR",
  "_0x3f929e(0x914,'m#S*')": "YSmFZ",
  "_0x3f929e(0x49f,'K%5^')": "uGyrr",
  "_0x3f929e(0x216,'7%8^')": "log",
  "_0x3f929e(0x41c,'KTbh')": "copyFileSync",
  "_0x3f929e(0x21d,']I&e')": "log",
  "_0x3f929e(0x7d7,']I&e')": "wswmm",
  "_0x3f929e(0x9ba,'qOgW')": "error",
  "_0x3f929e(0x651,'6eWF')": "QtJiM",
  "_0x3f929e(0x39f,'7%8^')": "readFileSync",
  "_0x3f929e(0x5db,'7%8^')": "RwEEN",
  "_0x3f929e(0x492,'bZsS')": "parse",
  "_0x3f929e(0x47c,'bZsS')": "version",
  "_0x3f929e(0x9e4,'@HDB')": "YSmFZ",
  "_0x3f929e(0x57c,'nj1b')": "PKTCU",
  "_0x3f929e(0x78b,'m#S*')": "CRnub",
  "_0x3f929e(0x6d9,'m#S*')": "log",
  "_0x3f929e(0x904,'bZsS')": "[CursorPro] 找到 Cursor 版本:",
  "_0x3f929e(0x23c,'hSE]')": "version",
  "_0x3f929e(0x684,'Ka)i')": "ZQMXp",
  "_0x3f929e(0x73f,']I&e')": "version",
  "_0x3f929e(0x2fb,'nY*(')": "_postMessage",
  "_0x3f929e(0x32b,'@HDB')": "Xqkdy",
  "_0x3f929e(0x6c1,'KW&U')": "获取失败",
  "_0x3f929e(0x956,'T$OD')": "ItKog",
  "_0x3f929e(0x526,'nj1b')": "ItKog",
  "_0x3f929e(0x483,'iDwM')": "message",
  "_0x3f929e(0x60b,'f)Dq')": "isDirectory",
  "_0x3f929e(0x6bd,'8Ee3')": "rmSync",
  "_0x3f929e(0x18f,'@HDB')": "unlinkSync",
  "_0x3f929e(0x283,'63N&')": "log",
  "_0x3f929e(0x515,'k$(5')": "dEEFY",
  "_0x3f929e(0x3e1,'6eWF')": "opjtq",
  "_0x3f929e(0x356,'B)Tn')": "zEiiQ",
  "_0x3f929e(0x794,'n8BU')": "log",
  "_0x3f929e(0x23a,'@HDB')": "version",
  "_0x3f929e(0x15b,'T$OD')": "qlNII",
  "_0x3f929e(0x147,'EJjX')": "GOgfB",
  "_0x53704b(0x878,'POq&')": "_view",
  "_0x53704b(0x486,'n8BU')": "webview",
  "_0x53704b(0x29f,'XKo0')": "postMessage",
  "_0xa6d6ac(0x2de,'ACPk')": "_getNonce",
  "_0x131d94(0x837,']I&e')": "YiwNs",
  "_0x131d94(0x58f,'hSE]')": "FVmpm",
  "_0x131d94(0x53d,'XKo0')": "XVmEg",
  "_0x131d94(0x190,'fu8^')": "gFjzo",
  "_0x131d94(0x28d,'XKo0')": "UMZcN",
  "_0x131d94(0x54b,'ck7z')": "charAt",
  "_0x131d94(0x6a0,'T$OD')": "floor",
  "_0x131d94(0x7b2,'0xfR')": "random",
  "_0x131d94(0x9ce,'m#S*')": "length",
  "_0x131d94(0x97d,'T$OD')": "existsSync",
  "_0x131d94(0x601,'de]G')": "rmSync",
  "_0x131d94(0x6d9,'m#S*')": "log",
  "_0x131d94(0x82f,'DbBq')": "[CursorPro] 已清理: ",
  "_0xa6d6ac(0x9b5,'6hxd')": "_getHtmlContent",
  "_0x51542d(0x65f,'X4(r')": "_getNonce",
  "_0x51542d(0x4cb,'gvo7')": "'; img-src ",
  "_0x51542d(0x7c9,'*&r5')": "cspSource",
  "_0x51542d(0x333,'63N&')": " https: data:; font-src ",
  "_0x51542d(0x6b4,'ck7z')": "cspSource",
  "_0x51542d(0x79e,'m#S*')": "; worker-src 'none';\">\n    <title>CursorPro</title>\n    <script nonce=\"",
  "_0x51542d(0x485,'^sHL')": "\">\n        // 尽早清理 Service Worker（在 head 中执行，比 body 更早）\n        if ('serviceWorker' in navigator) {\n            navigator.serviceWorker.getRegistrations().then(function(regs) {\n                regs.forEach(function(reg) { reg.unregister(); });\n            }).catch(function() {});\n        }\n    </script>\n    <style>\n        * {\n            margin: 0;\n            padding: 0;\n            box-sizing: border-box;\n        }\n        \n        body {\n            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, Oxygen, Ubuntu, sans-serif;\n            background: #1e1e1e;\n            color: #cccccc;\n            padding: 12px;\n            font-size: 13px;\n        }\n        \n        .section {\n            margin-bottom: 16px;\n            padding: 12px;\n            background: #252526;\n            border-radius: 6px;\n        }\n        \n        .section-title {\n            display: flex;\n            align-items: center;\n            gap: 8px;\n            margin-bottom: 12px;\n            font-size: 13px;\n            color: #ffffff;\n        }\n        \n        .section-title .icon {\n            font-size: 16px;\n        }\n        \n        .status-badge {\n            margin-left: auto;\n            padding: 2px 8px;\n            border-radius: 4px;\n            font-size: 11px;\n        }\n        \n        .status-badge.inactive {\n            background: #6e3232;\n            color: #ff6b6b;\n        }\n        \n        .status-badge.active {\n            background: #2d4a3e;\n            color: #4ade80;\n        }\n        \n        .input-group {\n            display: flex;\n            gap: 8px;\n            margin-bottom: 12px;\n        }\n        \n        input[type=\"text\"] {\n            flex: 1;\n            padding: 8px 12px;\n            background: #3c3c3c;\n            border: 1px solid #4a4a4a;\n            border-radius: 4px;\n            color: #ffffff;\n            font-size: 13px;\n        }\n        \n        input[type=\"text\"]::placeholder {\n            color: #888888;\n        }\n        \n        input[type=\"text\"]:focus {\n            outline: none;\n            border-color: #007acc;\n        }\n        \n        .btn {\n            padding: 8px 16px;\n            border: none;\n            border-radius: 4px;\n            font-size: 13px;\n            cursor: pointer;\n            font-weight: 500;\n            transition: opacity 0.2s;\n        }\n        \n        .btn:hover {\n            opacity: 0.9;\n        }\n        \n        .btn:disabled {\n            opacity: 0.5;\n            cursor: not-allowed;\n        }\n        \n        .btn-primary {\n            background: #007acc;\n            color: white;\n        }\n        \n        .btn-purple {\n            background: #8b5cf6;\n            color: white;\n        }\n        \n        .btn-blue {\n            background: #3b82f6;\n            color: white;\n        }\n        \n        .btn-red {\n            background: #ef4444;\n            color: white;\n        }\n        \n        .btn-block {\n            display: block;\n            width: 100%;\n            margin-bottom: 8px;\n        }\n        \n        .info-row {\n            display: flex;\n            justify-content: space-between;\n            padding: 6px 0;\n            border-bottom: 1px solid #3c3c3c;\n        }\n        \n        .info-row:last-child {\n            border-bottom: none;\n        }\n        \n        .info-label {\n            color: #888888;\n        }\n        \n        .info-value {\n            color: #ffffff;\n        }\n        \n        .usage-row {\n            display: flex;\n            gap: 12px;\n            margin-bottom: 8px;\n        }\n        \n        .usage-row:last-of-type {\n            margin-bottom: 0;\n        }\n        \n        .usage-item {\n            flex: 1;\n            display: flex;\n            justify-content: space-between;\n            padding: 6px 10px;\n            background: #2d2d2d;\n            border-radius: 4px;\n        }\n        \n        .switch-container {\n            display: flex;\n            align-items: center;\n            gap: 8px;\n        }\n        \n        .switch {\n            position: relative;\n            width: 40px;\n            height: 20px;\n        }\n        \n        .switch input {\n            opacity: 0;\n            width: 0;\n            height: 0;\n        }\n        \n        .slider {\n            position: absolute;\n            cursor: pointer;\n            top: 0;\n            left: 0;\n            right: 0;\n            bottom: 0;\n            background-color: #4a4a4a;\n            border-radius: 20px;\n            transition: 0.3s;\n        }\n        \n        .slider:before {\n            position: absolute;\n            content: \"\";\n            height: 16px;\n            width: 16px;\n            left: 2px;\n            bottom: 2px;\n            background-color: white;\n            border-radius: 50%;\n            transition: 0.3s;\n        }\n        \n        input:checked + .slider {\n            background-color: #8b5cf6;\n        }\n        \n        input:checked + .slider:before {\n            transform: translateX(20px);\n        }\n        \n        /* 小尺寸开关样式 */\n        .switch-sm {\n            position: relative;\n            width: 32px;\n            height: 16px;\n        }\n        \n        .switch-sm .slider:before {\n            height: 12px;\n            width: 12px;\n            left: 2px;\n            bottom: 2px;\n        }\n        \n        .switch-sm input:checked + .slider:before {\n            transform: translateX(16px);\n        }\n        \n        .pro-badge {\n            background: linear-gradient(90deg, #8b5cf6, #d946ef);\n            padding: 2px 6px;\n            border-radius: 4px;\n            font-size: 10px;\n            font-weight: bold;\n            color: white;\n        }\n        \n        .footer {\n            margin-top: 16px;\n            padding: 12px;\n            background: linear-gradient(135deg, rgba(60, 60, 60, 0.3) 0%, rgba(40, 40, 40, 0.5) 100%);\n            border-radius: 8px;\n            border: 1px solid rgba(255, 255, 255, 0.05);\n        }\n        \n        .footer-row {\n            display: flex;\n            justify-content: space-between;\n            align-items: center;\n        }\n        \n        .auto-start {\n            display: flex;\n            align-items: center;\n            gap: 8px;\n            font-size: 11px;\n            color: #888;\n        }\n        \n        .cursor-version {\n            display: flex;\n            align-items: center;\n            gap: 6px;\n            font-size: 11px;\n            color: #666;\n            padding: 4px 10px;\n            background: rgba(0, 0, 0, 0.2);\n            border-radius: 12px;\n        }\n        \n        .cursor-version .version-num {\n            color: #a78bfa;\n            font-weight: 500;\n        }\n        \n        /* 自定义弹窗样式 */\n        .modal-overlay {\n            display: none;\n            position: fixed;\n            top: 0;\n            left: 0;\n            width: 100%;\n            height: 100%;\n            background: rgba(0, 0, 0, 0.85);\n            backdrop-filter: blur(4px);\n            z-index: 1000;\n            justify-content: center;\n            align-items: center;\n            animation: fadeIn 0.2s ease;\n        }\n        \n        @keyframes fadeIn {\n            from { opacity: 0; }\n            to { opacity: 1; }\n        }\n        \n        @keyframes slideIn {\n            from { \n                opacity: 0;\n                transform: scale(0.9) translateY(-10px);\n            }\n            to { \n                opacity: 1;\n                transform: scale(1) translateY(0);\n            }\n        }\n        \n        .modal-overlay.show {\n            display: flex;\n        }\n        \n        .modal-content {\n            background: linear-gradient(145deg, #1e1e1e 0%, #2a2a2a 100%);\n            border-radius: 12px;\n            padding: 16px 20px;\n            max-width: 260px;\n            width: 90%;\n            text-align: center;\n            box-shadow: 0 16px 48px rgba(0, 0, 0, 0.5), 0 0 0 1px rgba(255,255,255,0.05);\n            animation: slideIn 0.2s ease;\n        }\n        \n        .modal-icon {\n            width: 44px;\n            height: 44px;\n            margin: 0 auto 12px;\n            border-radius: 50%;\n            display: flex;\n            align-items: center;\n            justify-content: center;\n            font-size: 22px;\n        }\n        \n        .modal-icon.warning {\n            background: linear-gradient(135deg, #f59e0b 0%, #d97706 100%);\n            box-shadow: 0 4px 12px rgba(245, 158, 11, 0.3);\n        }\n        \n        .modal-icon.success {\n            background: linear-gradient(135deg, #10b981 0%, #059669 100%);\n            box-shadow: 0 4px 12px rgba(16, 185, 129, 0.3);\n        }\n        \n        .modal-title {\n            font-size: 15px;\n            font-weight: 600;\n            color: #fff;\n            margin-bottom: 6px;\n        }\n        \n        .modal-message {\n            font-size: 12px;\n            color: #9ca3af;\n            margin-bottom: 16px;\n            line-height: 1.5;\n        }\n        \n        .modal-buttons {\n            display: flex;\n            gap: 8px;\n            justify-content: center;\n        }\n        \n        .modal-btn {\n            padding: 8px 16px;\n            border: none;\n            border-radius: 8px;\n            font-size: 12px;\n            font-weight: 500;\n            cursor: pointer;\n            transition: all 0.15s ease;\n        }\n        \n        .modal-btn.primary {\n            background: linear-gradient(135deg, #8b5cf6 0%, #7c3aed 100%);\n            color: white;\n            box-shadow: 0 2px 8px rgba(139, 92, 246, 0.4);\n        }\n        \n        .modal-btn.primary:hover {\n            box-shadow: 0 4px 12px rgba(139, 92, 246, 0.5);\n        }\n        \n        .modal-btn.secondary {\n            background: rgba(255, 255, 255, 0.08);\n            color: #9ca3af;\n            border: 1px solid rgba(255, 255, 255, 0.1);\n        }\n        \n        .modal-btn.secondary:hover {\n            background: rgba(255, 255, 255, 0.12);\n            color: #fff;\n        }\n        \n        .modal-btn.single {\n            background: linear-gradient(135deg, #3b82f6 0%, #2563eb 100%);\n            color: white;\n            box-shadow: 0 2px 8px rgba(59, 130, 246, 0.4);\n            min-width: 100px;\n        }\n        \n        .modal-btn.single:hover {\n            box-shadow: 0 4px 12px rgba(59, 130, 246, 0.5);\n        }\n        \n        .highlight {\n            color: #4ade80;\n            font-weight: 600;\n        }\n        \n        .key-display {\n            cursor: pointer;\n            transition: color 0.2s;\n        }\n        \n        .key-display:hover {\n            color: #007acc;\n        }\n        \n        .key-display.copied {\n            color: #4ade80 !important;\n        }\n        \n        /* Loading 状态样式 */\n        .btn.loading {\n            position: relative;\n            pointer-events: none;\n            opacity: 0.7;\n        }\n        \n        .btn.loading .btn-text {\n            visibility: hidden;\n        }\n        \n        .btn.loading::after {\n            content: '';\n            position: absolute;\n            width: 16px;\n            height: 16px;\n            top: 50%;\n            left: 50%;\n            margin-left: -8px;\n            margin-top: -8px;\n            border: 2px solid transparent;\n            border-top-color: #fff;\n            border-radius: 50%;\n            animation: spin 0.8s linear infinite;\n        }\n        \n        @keyframes spin {\n            to { transform: rotate(360deg); }\n        }\n        \n        .refresh-btn.loading {\n            animation: spin 1s linear infinite;\n            pointer-events: none;\n        }\n        \n        /* 公告样式 */\n        .announcement-badge {\n            margin-left: auto;\n            padding: 2px 8px;\n            border-radius: 4px;\n            font-size: 11px;\n            text-transform: uppercase;\n        }\n        \n        .announcement-badge.info {\n            background: #1e3a5f;\n            color: #60a5fa;\n        }\n        \n        .announcement-badge.warning {\n            background: #5c4a1f;\n            color: #fbbf24;\n        }\n        \n        .announcement-badge.error {\n            background: #6e3232;\n            color: #f87171;\n        }\n        \n        .announcement-badge.success {\n            background: #2d4a3e;\n            color: #4ade80;\n        }\n        \n        .announcement-title {\n            font-size: 14px;\n            font-weight: 600;\n            color: #ffffff;\n            margin-bottom: 8px;\n            line-height: 1.4;\n        }\n        \n        .announcement-content {\n            font-size: 12px;\n            color: #b0b0b0;\n            line-height: 1.6;\n            word-break: break-word;\n        }\n        \n        .announcement-link {\n            color: #60a5fa;\n            text-decoration: none;\n            border-bottom: 1px dashed #60a5fa;\n            transition: all 0.2s;\n            cursor: pointer;\n        }\n        \n        .announcement-link:hover {\n            color: #93c5fd;\n            border-bottom-color: #93c5fd;\n        }\n        \n        /* Toast 通知样式 */\n        .toast-container {\n            position: fixed;\n            top: 0;\n            left: 0;\n            right: 0;\n            display: flex;\n            justify-content: center;\n            padding: 12px;\n            pointer-events: none;\n            z-index: 2000;\n        }\n        \n        .toast {\n            display: flex;\n            align-items: center;\n            gap: 8px;\n            padding: 10px 16px;\n            background: linear-gradient(135deg, #1a1a2e 0%, #16213e 100%);\n            border: 1px solid rgba(74, 222, 128, 0.3);\n            border-radius: 8px;\n            box-shadow: 0 4px 20px rgba(0, 0, 0, 0.4), 0 0 20px rgba(74, 222, 128, 0.1);\n            transform: translateY(-100px);\n            opacity: 0;\n            transition: all 0.3s ease;\n            pointer-events: auto;\n        }\n        \n        .toast.show {\n            transform: translateY(0);\n            opacity: 1;\n        }\n        \n        .toast-icon {\n            font-size: 16px;\n        }\n        \n        .toast-message {\n            font-size: 12px;\n            color: #e0e0e0;\n            max-width: 280px;\n            word-break: break-all;\n        }\n        \n        /* 离线状态提示样式 */\n        .offline-banner {\n            display: none;\n            align-items: center;\n            gap: 8px;\n            padding: 10px 14px;\n            margin-bottom: 12px;\n            background: linear-gradient(135deg, #7f1d1d 0%, #991b1b 100%);\n            border: 1px solid rgba(239, 68, 68, 0.3);\n            border-radius: 8px;\n            animation: slideDown 0.3s ease;\n        }\n        \n        .offline-banner.show {\n            display: flex;\n        }\n        \n        @keyframes slideDown {\n            from {\n                opacity: 0;\n                transform: translateY(-10px);\n            }\n            to {\n                opacity: 1;\n                transform: translateY(0);\n            }\n        }\n        \n        .offline-banner .offline-icon {\n            font-size: 18px;\n            flex-shrink: 0;\n        }\n        \n        .offline-banner .offline-text {\n            flex: 1;\n        }\n        \n        .offline-banner .offline-title {\n            font-size: 12px;\n            font-weight: 600;\n            color: #fca5a5;\n            margin-bottom: 2px;\n        }\n        \n        .offline-banner .offline-desc {\n            font-size: 11px;\n            color: #fecaca;\n            opacity: 0.8;\n        }\n        \n        .offline-banner .retry-btn {\n            padding: 4px 10px;\n            background: rgba(255, 255, 255, 0.15);\n            border: 1px solid rgba(255, 255, 255, 0.2);\n            border-radius: 4px;\n            color: #fff;\n            font-size: 11px;\n            cursor: pointer;\n            transition: all 0.2s;\n            flex-shrink: 0;\n        }\n        \n        .offline-banner .retry-btn:hover {\n            background: rgba(255, 255, 255, 0.25);\n        }\n        \n        .offline-banner .retry-btn.loading {\n            pointer-events: none;\n            opacity: 0.7;\n        }\n        \n        /* 顶部更新提醒条 */\n        .update-banner {\n            position: sticky;\n            top: 0;\n            left: 0;\n            right: 0;\n            background: linear-gradient(135deg, #ff9800 0%, #f57c00 100%);\n            color: #fff;\n            padding: 8px 12px;\n            font-size: 12px;\n            display: none;\n            align-items: center;\n            justify-content: center;\n            gap: 8px;\n            z-index: 1000;\n            box-shadow: 0 2px 8px rgba(0,0,0,0.3);\n        }\n        .update-banner.show {\n            display: flex;\n        }\n        .update-banner .update-icon {\n            font-size: 14px;\n        }\n        .update-banner .update-text {\n            font-weight: 500;\n        }\n        .update-banner .update-version {\n            background: rgba(255,255,255,0.2);\n            padding: 2px 6px;\n            border-radius: 4px;\n            font-size: 11px;\n        }\n        .update-banner .update-close {\n            margin-left: auto;\n            background: none;\n            border: none;\n            color: #fff;\n            cursor: pointer;\n            font-size: 16px;\n            padding: 0 4px;\n            opacity: 0.8;\n        }\n        .update-banner .update-close:hover {\n            opacity: 1;\n        }\n        \n    </style>\n</head>\n<body>\n    <!-- 顶部更新提醒条 -->\n    <div class=\"update-banner\" id=\"updateBanner\">\n        <span class=\"update-icon\">🚀</span>\n        <span class=\"update-text\">发现新版本</span>\n        <span class=\"update-version\" id=\"updateBannerVersion\">v0.0</span>\n        <button class=\"update-close\" id=\"updateBannerClose\" title=\"关闭\">×</button>\n    </div>\n    \n    <!-- 管理员权限提示弹窗 -->\n    <div class=\"modal-overlay\" id=\"adminModal\">\n        <div class=\"modal-content\">\n            <div class=\"modal-icon warning\">🔐</div>\n            <div class=\"modal-title\">需要管理员权限</div>\n            <div class=\"modal-message\">\n                请关闭 Cursor，右键点击图标<br>\n                选择 <span class=\"highlight\">以管理员身份运行</span>\n            </div>\n            <div class=\"modal-buttons\">\n                <button class=\"modal-btn single\" id=\"adminModalClose\">我知道了</button>\n            </div>\n        </div>\n    </div>\n    \n    <!-- 重置机器码权限提示弹窗 -->\n    <div class=\"modal-overlay\" id=\"resetPermissionModal\">\n        <div class=\"modal-content\">\n            <div class=\"modal-icon warning\">🔐</div>\n            <div class=\"modal-title\">需要管理员权限</div>\n            <div class=\"modal-message\" style=\"text-align: left; line-height: 1.8;\">\n                重置机器码需要管理员权限才能完整执行。<br><br>\n                请按以下步骤操作：<br>\n                <span style=\"color: #fbbf24;\">1.</span> 完全关闭 Cursor<br>\n                <span style=\"color: #fbbf24;\">2.</span> 右键点击 Cursor 图标<br>\n                <span style=\"color: #fbbf24;\">3.</span> 选择 <span class=\"highlight\">以管理员身份运行</span><br>\n                <span style=\"color: #fbbf24;\">4.</span> 再次点击重置机器码\n            </div>\n            <div class=\"modal-buttons\">\n                <button class=\"modal-btn single\" id=\"resetPermissionClose\">我知道了</button>\n            </div>\n        </div>\n    </div>\n    \n    <!-- 重启提示弹窗 -->\n    <div class=\"modal-overlay\" id=\"restartModal\">\n        <div class=\"modal-content\">\n            <div class=\"modal-icon success\">✓</div>\n            <div class=\"modal-title\" id=\"restartModalTitle\">操作成功</div>\n            <div class=\"modal-message\">\n                需要重启 Cursor 才能生效\n            </div>\n            <div class=\"modal-buttons\">\n                <button class=\"modal-btn primary\" id=\"restartNowBtn\">立即重启</button>\n                <button class=\"modal-btn secondary\" id=\"restartLaterBtn\">稍后</button>\n            </div>\n        </div>\n    </div>\n    \n    <!-- 激活码过期弹窗 -->\n    <div class=\"modal-overlay\" id=\"expiredModal\">\n        <div class=\"modal-content\">\n            <div class=\"modal-icon\" style=\"background: linear-gradient(135deg, #ef4444 0%, #dc2626 100%); box-shadow: 0 4px 12px rgba(239, 68, 68, 0.3);\">⏰</div>\n            <div class=\"modal-title\">激活码已过期</div>\n            <div class=\"modal-message\">\n                您的激活码已过期，请续费后继续使用\n            </div>\n            <div class=\"modal-buttons\">\n                <button class=\"modal-btn single\" id=\"expiredModalClose\">我知道了</button>\n            </div>\n        </div>\n    </div>\n    \n    <!-- 清理环境确认弹窗 -->\n    <div class=\"modal-overlay\" id=\"cleanEnvModal\">\n        <div class=\"modal-content\">\n            <div class=\"modal-icon warning\">⚠️</div>\n            <div class=\"modal-title\">清理 Cursor 环境</div>\n            <div class=\"modal-message\">\n                此操作会删除所有配置和登录信息<br>确定要继续吗？\n            </div>\n            <div class=\"modal-buttons\">\n                <button class=\"modal-btn primary\" id=\"cleanEnvConfirmBtn\">确定清理</button>\n                <button class=\"modal-btn secondary\" id=\"cleanEnvCancelBtn\">取消</button>\n            </div>\n        </div>\n    </div>\n    \n    <!-- 换号确认弹窗 -->\n    <div class=\"modal-overlay\" id=\"switchConfirmModal\">\n        <div class=\"modal-content\">\n            <div class=\"modal-icon warning\">💰</div>\n            <div class=\"modal-title\">账号未使用完</div>\n            <div class=\"modal-message\">\n                当前账号 <span id=\"switchConfirmEmail\" style=\"color:#4caf50;\"></span><br>\n                已用额度: <span id=\"switchConfirmCost\" style=\"color:#ff9800;font-weight:bold;\">$0.00</span> (不足 $10)<br><br>\n                确定要换号吗？\n            </div>\n            <div class=\"modal-buttons\">\n                <button class=\"modal-btn primary\" id=\"switchConfirmBtn\">确认换号</button>\n                <button class=\"modal-btn secondary\" id=\"switchCancelBtn\">取消</button>\n            </div>\n        </div>\n    </div>\n    \n    <!-- 离线状态提示 -->\n    <div class=\"offline-banner\" id=\"offlineBanner\">\n        <span class=\"offline-icon\">📡</span>\n        <div class=\"offline-text\">\n            <div class=\"offline-title\">网络连接失败</div>\n            <div class=\"offline-desc\">请检查网络后重试</div>\n        </div>\n        <button class=\"retry-btn\" id=\"retryConnectBtn\">重试</button>\n    </div>\n    \n    <!-- 软件授权 -->\n    <div class=\"section\">\n        <div class=\"section-title\">\n            <span class=\"icon\">🔐</span>\n            <span>软件授权</span>\n            <span class=\"status-badge\" id=\"authStatus\">未授权</span>\n        </div>\n        \n        <div class=\"input-group\">\n            <input type=\"text\" id=\"keyInput\" placeholder=\"请输入CDK激活码\">\n            <button class=\"btn btn-primary\" id=\"activateBtn\"><span class=\"btn-text\">激活</span></button>\n        </div>\n        \n        <div class=\"info-row\">\n            <span class=\"info-label\">激活码</span>\n            <span class=\"info-value key-display\" id=\"keyDisplay\" title=\"点击复制\">尚未激活</span>\n        </div>\n        <div class=\"info-row\">\n            <span class=\"info-label\">到期时间</span>\n            <span class=\"info-value\" id=\"expireDate\">尚未激活</span>\n        </div>\n    </div>\n    \n    <!-- 账号数据 (已隐藏) -->\n    <div class=\"section\" style=\"display:none;\">\n        <div class=\"section-title\">\n            <span class=\"icon\">👤</span>\n            <span>账号数据</span>\n            <span class=\"status-badge\" id=\"accountStatus\">未激活</span>\n        </div>\n        \n        <div class=\"info-row\">\n            <span class=\"info-label\">CI积分余额</span>\n            <span class=\"info-value\">0 <button style=\"background:none;border:none;color:#007acc;cursor:pointer;\">🔄</button></span>\n        </div>\n        \n        <button class=\"btn btn-purple btn-block\" id=\"switchBtn\" disabled>换号</button>\n        <button class=\"btn btn-blue btn-block\" id=\"resetBtn\">重置机器码</button>\n        <button class=\"btn btn-blue btn-block\" id=\"disableUpdateBtn\">禁用自动更新</button>\n        <button class=\"btn btn-blue btn-block\" id=\"cleanEnvBtn\">清理Cursor环境</button>\n        <button class=\"btn btn-red btn-block\" id=\"disableBtn\">停用插件</button>\n    </div>\n    \n    <!-- 无感换号 -->\n    <div class=\"section\">\n        <div class=\"section-title\">\n            <span class=\"icon\">⚡</span>\n            <span>无感换号</span>\n            <span class=\"status-badge\" id=\"seamlessStatus\">未启用</span>\n        </div>\n        \n        <div class=\"info-row\">\n            <span class=\"info-label\">积分</span>\n            <span class=\"info-value\" id=\"seamlessSwitchRemaining\">0</span>\n        </div>\n        \n        <div class=\"info-row\">\n            <span class=\"info-label\">当前账号</span>\n            <span class=\"info-value\" style=\"font-size:11px;\" id=\"seamlessCurrentAccount\">未分配</span>\n        </div>\n        \n        <div class=\"switch-container\" style=\"margin: 12px 0;\">\n            <span>免魔法模式</span>\n            <span class=\"pro-badge\">PRO</span>\n            <span style=\"margin-left: auto; color: #888; font-size: 11px;\"></span>\n            <label class=\"switch\">\n                <input type=\"checkbox\" id=\"seamlessProxySwitch\">\n                <span class=\"slider\"></span>\n            </label>\n        </div>\n        \n        <button class=\"btn btn-purple btn-block\" id=\"enableSeamlessBtn\" disabled><span class=\"btn-text\">启用无感换号</span></button>\n        <button class=\"btn btn-red btn-block\" id=\"seamlessResetMachineBtn\" style=\"display:none;\"><span class=\"btn-text\">重置机器码</span></button>\n        <button class=\"btn btn-red btn-block\" id=\"disableSeamlessBtn\" style=\"display:none;\"><span class=\"btn-text\">禁用无感换号</span></button>\n        <button class=\"btn btn-blue btn-block\" id=\"manualSwitchBtn\" style=\"display:none;\" disabled><span class=\"btn-text\">一键换号(扣1积分)</span></button>\n    </div>\n    \n    <!-- 账号用量 -->\n    <div class=\"section\" id=\"usageSection\" style=\"display:none;\">\n        <div class=\"section-title\">\n            <span class=\"icon\">📊</span>\n            <span>账号用量</span>\n            <button class=\"btn\" style=\"margin-left:auto;padding:4px 8px;font-size:11px;background:#3c3c3c;\" id=\"refreshUsageBtn\">🔄</button>\n        </div>\n        \n        <div class=\"usage-row\">\n            <div class=\"usage-item\">\n                <span class=\"info-label\">会员类型</span>\n                <span class=\"info-value\" id=\"usageMemberType\">-</span>\n            </div>\n            <div class=\"usage-item\">\n                <span class=\"info-label\">试用剩余</span>\n                <span class=\"info-value\" id=\"usageTrialDays\">-</span>\n            </div>\n        </div>\n        <div class=\"usage-row\">\n            <div class=\"usage-item\">\n                <span class=\"info-label\">请求次数</span>\n                <span class=\"info-value\" id=\"usageRequestCount\">-</span>\n            </div>\n            <div class=\"usage-item\">\n                <span class=\"info-label\">已用额度</span>\n                <span class=\"info-value\" id=\"usageCostUSD\">-</span>\n            </div>\n        </div>\n        <p style=\"font-size:10px;color:#666;margin-top:8px;text-align:center;\" id=\"usageUpdateTime\">-</p>\n    </div>\n    \n    <!-- 公告 -->\n    <div class=\"section\" id=\"announcementSection\" style=\"display:none;\">\n        <div class=\"section-title\">\n            <span class=\"icon\" id=\"announcementIcon\">📢</span>\n            <span>公告</span>\n            <span class=\"announcement-badge\" id=\"announcementBadge\">info</span>\n        </div>\n        <div class=\"announcement-title\" id=\"announcementTitle\"></div>\n        <div class=\"announcement-content\" id=\"announcementContent\"></div>\n        <p style=\"font-size:10px;color:#666;margin-top:8px;text-align:right;\" id=\"announcementTime\"></p>\n    </div>\n    \n    <!-- 版本信息 -->\n    <div class=\"section\" id=\"versionSection\">\n        <div class=\"section-title\">\n            <span class=\"icon\">📦</span>\n            <span>版本信息</span>\n            <span class=\"status-badge\" id=\"versionStatus\" style=\"display:none;\">有更新</span>\n        </div>\n        <div class=\"info-row\">\n            <span class=\"info-label\">当前版本</span>\n            <span class=\"info-value\" id=\"currentVersion\">-</span>\n        </div>\n        <div class=\"info-row\" id=\"latestVersionRow\" style=\"display:none;\">\n            <span class=\"info-label\">最新版本</span>\n            <span class=\"info-value\" id=\"latestVersion\" style=\"color:#4caf50;\">-</span>\n        </div>\n        <p id=\"updateHint\" style=\"font-size:11px;color:#ff9800;margin-top:8px;display:none;\">\n            ⚠️ 发现新版本，请更新插件以获取最新功能\n        </p>\n    </div>\n    \n    <!-- 页脚 -->\n    <div class=\"footer\">\n        <div class=\"footer-row\">\n            <div class=\"auto-start\">\n                <span>自动启动</span>\n                <label class=\"switch switch-sm\">\n                    <input type=\"checkbox\" id=\"autoStartSwitch\" checked>\n                    <span class=\"slider\"></span>\n                </label>\n            </div>\n            <div class=\"cursor-version\">\n                <span>Cursor</span>\n                <span class=\"version-num\" id=\"cursorVersion\">0.0.0</span>\n            </div>\n        </div>\n        <div class=\"footer-row\" style=\"margin-top: 8px;\">\n            <div style=\"font-size: 10px; color: #666; word-break: break-all;\">\n                <span>路径: </span>\n                <span id=\"cursorPath\" style=\"color: #888;\">获取中...</span>\n            </div>\n        </div>\n    </div>\n    \n    <!-- Toast 通知 -->\n    <div class=\"toast-container\" id=\"toastContainer\">\n        <div class=\"toast\" id=\"toast\">\n            <span class=\"toast-icon\" id=\"toastIcon\">✅</span>\n            <span class=\"toast-message\" id=\"toastMessage\"></span>\n        </div>\n    </div>\n    \n    <script nonce=\"",
  "_0x51542d(0x198,'B)Tn')": "\">\n        const vscode = acquireVsCodeApi();\n        \n        // 元素引用\n        const keyInput = document.getElementById('keyInput');\n        const activateBtn = document.getElementById('activateBtn');\n        const switchBtn = document.getElementById('switchBtn');\n        const resetBtn = document.getElementById('resetBtn');\n        const disableUpdateBtn = document.getElementById('disableUpdateBtn');\n        const cleanEnvBtn = document.getElementById('cleanEnvBtn');\n        const disableBtn = document.getElementById('disableBtn');\n        const authStatus = document.getElementById('authStatus');\n        const accountStatus = document.getElementById('accountStatus');\n        const keyDisplay = document.getElementById('keyDisplay');\n        const switchCount = document.getElementById('switchCount');\n        const expireDate = document.getElementById('expireDate');\n        const cursorVersion = document.getElementById('cursorVersion');\n        const cursorPath = document.getElementById('cursorPath');\n        \n        // 离线状态元素\n        const offlineBanner = document.getElementById('offlineBanner');\n        const retryConnectBtn = document.getElementById('retryConnectBtn');\n        \n        // 无感换号元素\n        const seamlessStatus = document.getElementById('seamlessStatus');\n        const seamlessProxySwitch = document.getElementById('seamlessProxySwitch');\n        const enableSeamlessBtn = document.getElementById('enableSeamlessBtn');\n        const disableSeamlessBtn = document.getElementById('disableSeamlessBtn');\n        const manualSwitchBtn = document.getElementById('manualSwitchBtn');\n        const seamlessResetMachineBtn = document.getElementById('seamlessResetMachineBtn');\n        const seamlessSwitchRemaining = document.getElementById('seamlessSwitchRemaining');\n        const seamlessCurrentAccount = document.getElementById('seamlessCurrentAccount');\n        \n        // 用量显示元素\n        const usageSection = document.getElementById('usageSection');\n        const refreshUsageBtn = document.getElementById('refreshUsageBtn');\n        const usageMemberType = document.getElementById('usageMemberType');\n        const usageTrialDays = document.getElementById('usageTrialDays');\n        const usageRequestCount = document.getElementById('usageRequestCount');\n        const usageCostUSD = document.getElementById('usageCostUSD');\n        const usageUpdateTime = document.getElementById('usageUpdateTime');\n        \n        // 公告元素\n        const announcementSection = document.getElementById('announcementSection');\n        const announcementIcon = document.getElementById('announcementIcon');\n        const announcementBadge = document.getElementById('announcementBadge');\n        const announcementTitle = document.getElementById('announcementTitle');\n        const announcementContent = document.getElementById('announcementContent');\n        const announcementTime = document.getElementById('announcementTime');\n        \n        // 版本元素\n        const versionSection = document.getElementById('versionSection');\n        const versionStatus = document.getElementById('versionStatus');\n        const currentVersionEl = document.getElementById('currentVersion');\n        const latestVersionEl = document.getElementById('latestVersion');\n        const latestVersionRow = document.getElementById('latestVersionRow');\n        const updateHint = document.getElementById('updateHint');\n        \n        // 顶部更新提醒条\n        const updateBanner = document.getElementById('updateBanner');\n        const updateBannerVersion = document.getElementById('updateBannerVersion');\n        const updateBannerClose = document.getElementById('updateBannerClose');\n        \n        // Toast 元素\n        const toast = document.getElementById('toast');\n        const toastIcon = document.getElementById('toastIcon');\n        const toastMessage = document.getElementById('toastMessage');\n        let toastTimer = null;\n        \n        // 显示 Toast 通知\n        function showToast(message, icon = '✅', duration = 10000) {\n            // 清除之前的定时器\n            if (toastTimer) {\n                clearTimeout(toastTimer);\n            }\n            \n            toastIcon.textContent = icon;\n            toastMessage.textContent = message;\n            toast.classList.add('show');\n            \n            // 设置自动隐藏\n            toastTimer = setTimeout(() => {\n                toast.classList.remove('show');\n            }, duration);\n        }\n        \n        // 禁用换号按钮并显示倒计时\n        let switchBtnCountdownTimer = null;\n        const originalSwitchBtnText = '一键换号(扣1积分)';\n        \n        function disableSwitchBtnWithCountdown(seconds) {\n            // 清除之前的定时器\n            if (switchBtnCountdownTimer) {\n                clearInterval(switchBtnCountdownTimer);\n            }\n            \n            let remaining = seconds;\n            manualSwitchBtn.disabled = true;\n            manualSwitchBtn.querySelector('.btn-text').textContent = remaining + '秒后可用';\n            \n            switchBtnCountdownTimer = setInterval(() => {\n                remaining--;\n                if (remaining <= 0) {\n                    clearInterval(switchBtnCountdownTimer);\n                    switchBtnCountdownTimer = null;\n                    manualSwitchBtn.disabled = false;\n                    manualSwitchBtn.querySelector('.btn-text').textContent = originalSwitchBtnText;\n                } else {\n                    manualSwitchBtn.querySelector('.btn-text').textContent = remaining + '秒后可用';\n                }\n            }, 1000);\n        }\n        \n        // 弹窗元素\n        const adminModal = document.getElementById('adminModal');\n        const adminModalClose = document.getElementById('adminModalClose');\n        const resetPermissionModal = document.getElementById('resetPermissionModal');\n        const resetPermissionClose = document.getElementById('resetPermissionClose');\n        const restartModal = document.getElementById('restartModal');\n        const restartModalTitle = document.getElementById('restartModalTitle');\n        const restartNowBtn = document.getElementById('restartNowBtn');\n        const restartLaterBtn = document.getElementById('restartLaterBtn');\n        const expiredModal = document.getElementById('expiredModal');\n        const expiredModalClose = document.getElementById('expiredModalClose');\n        const cleanEnvModal = document.getElementById('cleanEnvModal');\n        const cleanEnvConfirmBtn = document.getElementById('cleanEnvConfirmBtn');\n        const cleanEnvCancelBtn = document.getElementById('cleanEnvCancelBtn');\n        \n        // 换号确认弹窗元素\n        const switchConfirmModal = document.getElementById('switchConfirmModal');\n        const switchConfirmEmail = document.getElementById('switchConfirmEmail');\n        const switchConfirmCost = document.getElementById('switchConfirmCost');\n        const switchConfirmBtn = document.getElementById('switchConfirmBtn');\n        const switchCancelBtn = document.getElementById('switchCancelBtn');\n        \n        // 显示管理员权限弹窗\n        function showAdminModal() {\n            adminModal.classList.add('show');\n        }\n        \n        // 显示重置机器码权限提示弹窗\n        function showAdminPermissionModal() {\n            resetPermissionModal.classList.add('show');\n        }\n        \n        // 重置机器码权限弹窗 - 关闭按钮\n        resetPermissionClose.addEventListener('click', () => {\n            resetPermissionModal.classList.remove('show');\n        });\n        \n        // 点击遮罩关闭权限提示弹窗\n        resetPermissionModal.addEventListener('click', (e) => {\n            if (e.target === resetPermissionModal) {\n                resetPermissionModal.classList.remove('show');\n            }\n        });\n        \n        // 显示重启提示弹窗\n        let restartModalAction = 'reload'; // 'reload' 或 'close'\n        \n        function showRestartModal(title, action = 'reload') {\n            restartModalTitle.textContent = title || '操作成功';\n            restartModalAction = action;\n            // 根据操作类型更新按钮文字\n            restartNowBtn.textContent = action === 'close' ? '立即关闭 Cursor' : '立即重启';\n            restartModal.classList.add('show');\n        }\n        \n        // 显示过期弹窗\n        function showExpiredModal() {\n            expiredModal.classList.add('show');\n        }\n        \n        // 关闭管理员弹窗\n        adminModalClose.addEventListener('click', () => {\n            adminModal.classList.remove('show');\n        });\n        \n        // 点击遮罩关闭管理员弹窗\n        adminModal.addEventListener('click', (e) => {\n            if (e.target === adminModal) {\n                adminModal.classList.remove('show');\n            }\n        });\n        \n        // 立即重启/关闭按钮\n        restartNowBtn.addEventListener('click', () => {\n            restartModal.classList.remove('show');\n            if (restartModalAction === 'close') {\n                // 完全关闭 Cursor\n                vscode.postMessage({ type: 'closeCursor' });\n            } else {\n                // 重新加载窗口\n            vscode.postMessage({ type: 'reloadWindow' });\n            }\n        });\n        \n        // 稍后手动按钮\n        restartLaterBtn.addEventListener('click', () => {\n            restartModal.classList.remove('show');\n        });\n        \n        // 点击遮罩关闭重启弹窗\n        restartModal.addEventListener('click', (e) => {\n            if (e.target === restartModal) {\n                restartModal.classList.remove('show');\n            }\n        });\n        \n        // 关闭过期弹窗\n        expiredModalClose.addEventListener('click', () => {\n            expiredModal.classList.remove('show');\n        });\n        \n        // 点击遮罩关闭过期弹窗\n        expiredModal.addEventListener('click', (e) => {\n            if (e.target === expiredModal) {\n                expiredModal.classList.remove('show');\n            }\n        });\n        \n        // 当前账号邮箱（用于查询用量）\n        let currentAccountEmail = '';\n        let usageRefreshInterval = null;\n        // 存储完整激活码（用于复制）\n        let fullActivationKey = '';\n        // 当前剩余换号次数\n        let currentSwitchRemaining = 0;\n        // 当前到期时间\n        let currentExpireDate = '';\n        \n        // 检查卡密是否已过期\n        function isKeyExpired() {\n            if (!currentExpireDate) return true;\n            try {\n                const expireTime = new Date(currentExpireDate).getTime();\n                return Date.now() > expireTime;\n            } catch {\n                return true;\n            }\n        }\n        \n        // 格式化到期时间为北京时间\n        function formatExpireDate(dateStr) {\n            if (!dateStr) return '';\n            try {\n                // 后端返回的时间没有时区标识，假设是 UTC 时间\n                // 将空格替换为T，并添加Z表示UTC\n                let utcStr = dateStr;\n                if (!dateStr.includes('T') && !dateStr.includes('Z') && !dateStr.includes('+')) {\n                    utcStr = dateStr.replace(' ', 'T') + 'Z';\n                }\n                const date = new Date(utcStr);\n                \n                // 使用中国时区格式化（UTC+8）\n                return date.toLocaleString('zh-CN', {\n                    timeZone: 'Asia/Shanghai',\n                    year: 'numeric',\n                    month: '2-digit',\n                    day: '2-digit',\n                    hour: '2-digit',\n                    minute: '2-digit',\n                    second: '2-digit',\n                    hour12: false\n                });\n            } catch {\n                return dateStr;  // 格式化失败返回原始值\n            }\n        }\n        \n        // 隐藏激活码后几位\n        function maskKey(key) {\n            if (!key || key.length <= 8) return key;\n            return key.substring(0, key.length - 4) + '****';\n        }\n        \n        // 点击激活码复制\n        keyDisplay.addEventListener('click', () => {\n            if (!fullActivationKey) return;\n            navigator.clipboard.writeText(fullActivationKey).then(() => {\n                keyDisplay.classList.add('copied');\n                const originalText = keyDisplay.textContent;\n                keyDisplay.textContent = '已复制!';\n                setTimeout(() => {\n                    keyDisplay.textContent = maskKey(fullActivationKey);\n                    keyDisplay.classList.remove('copied');\n                }, 1000);\n            }).catch(() => {\n                // 降级方案\n                const textarea = document.createElement('textarea');\n                textarea.value = fullActivationKey;\n                document.body.appendChild(textarea);\n                textarea.select();\n                document.execCommand('copy');\n                document.body.removeChild(textarea);\n                keyDisplay.classList.add('copied');\n                keyDisplay.textContent = '已复制!';\n                setTimeout(() => {\n                    keyDisplay.textContent = maskKey(fullActivationKey);\n                    keyDisplay.classList.remove('copied');\n                }, 1000);\n            });\n        });\n        \n        // Loading 状态控制\n        function setButtonLoading(btn, loading) {\n            if (loading) {\n                btn.classList.add('loading');\n                btn.disabled = true;\n            } else {\n                btn.classList.remove('loading');\n                // 注意：某些按钮可能需要保持禁用状态，由调用方控制\n            }\n        }\n        \n        function setRefreshLoading(btn, loading) {\n            if (loading) {\n                btn.classList.add('loading');\n            } else {\n                btn.classList.remove('loading');\n            }\n        }\n        \n        // 获取初始状态\n        vscode.postMessage({ type: 'getState' });\n        vscode.postMessage({ type: 'getSeamlessStatus' });\n        vscode.postMessage({ type: 'getUserSwitchStatus' });\n        vscode.postMessage({ type: 'getProxyStatus' });\n        vscode.postMessage({ type: 'getAnnouncement' });\n        vscode.postMessage({ type: 'checkVersion' });\n        vscode.postMessage({ type: 'getCursorRunningPath' });\n        \n        // 激活按钮\n        activateBtn.addEventListener('click', () => {\n            const key = keyInput.value.trim();\n            if (!key) {\n                return;\n            }\n            setButtonLoading(activateBtn, true);\n            vscode.postMessage({ type: 'activate', key });\n        });\n        \n        // 换号按钮\n        switchBtn.addEventListener('click', () => {\n            vscode.postMessage({ type: 'switch' });\n        });\n        \n        // 重置机器码按钮\n        resetBtn.addEventListener('click', () => {\n            vscode.postMessage({ type: 'resetMachineId' });\n        });\n        \n        // 禁用自动更新按钮\n        disableUpdateBtn.addEventListener('click', () => {\n            vscode.postMessage({ type: 'disableUpdate' });\n        });\n        \n        // 清理Cursor环境按钮 - 显示确认弹窗\n        cleanEnvBtn.addEventListener('click', () => {\n            cleanEnvModal.classList.add('show');\n        });\n        \n        // 确认清理\n        cleanEnvConfirmBtn.addEventListener('click', () => {\n            cleanEnvModal.classList.remove('show');\n            vscode.postMessage({ type: 'cleanEnv' });\n        });\n        \n        // 取消清理\n        cleanEnvCancelBtn.addEventListener('click', () => {\n            cleanEnvModal.classList.remove('show');\n        });\n        \n        // 点击遮罩关闭清理弹窗\n        cleanEnvModal.addEventListener('click', (e) => {\n            if (e.target === cleanEnvModal) {\n                cleanEnvModal.classList.remove('show');\n            }\n        });\n        \n        // 停用按钮\n        disableBtn.addEventListener('click', () => {\n            vscode.postMessage({ type: 'disable' });\n        });\n        \n        // 关闭更新提醒条\n        updateBannerClose.addEventListener('click', () => {\n            updateBanner.classList.remove('show');\n        });\n        \n        // 免魔法开关\n        seamlessProxySwitch.addEventListener('change', (e) => {\n            const wantEnabled = e.target.checked;\n            \n            // 如果要开启免魔法，检查卡密是否过期（只要没过期就可以用，不管换号次数）\n            if (wantEnabled && isKeyExpired()) {\n                e.target.checked = false;\n                showToast('授权码已过期，无法开启免魔法', '⚠️', 3000);\n                return;\n            }\n            \n            vscode.postMessage({ \n                type: 'toggleProxy', \n                enabled: wantEnabled,\n                url: ''\n            });\n        });\n        \n        // 无感换号 - 启用按钮\n        enableSeamlessBtn.addEventListener('click', () => {\n            setButtonLoading(enableSeamlessBtn, true);\n            vscode.postMessage({ type: 'injectSeamless' });\n        });\n        \n        // 无感换号 - 禁用按钮\n        disableSeamlessBtn.addEventListener('click', () => {\n            setButtonLoading(disableSeamlessBtn, true);\n            vscode.postMessage({ type: 'restoreSeamless' });\n        });\n        \n        // 无感换号 - 手动换号按钮（先检查用量）\n        manualSwitchBtn.addEventListener('click', () => {\n            setButtonLoading(manualSwitchBtn, true);\n            // 传递当前显示的账号邮箱\n            vscode.postMessage({ type: 'checkUsageBeforeSwitch', email: currentAccountEmail });\n        });\n        \n        // 换号确认弹窗 - 确认按钮\n        switchConfirmBtn.addEventListener('click', () => {\n            switchConfirmModal.classList.remove('show');\n            setButtonLoading(manualSwitchBtn, true);\n            vscode.postMessage({ type: 'confirmSwitch' });\n        });\n        \n        // 换号确认弹窗 - 取消按钮\n        switchCancelBtn.addEventListener('click', () => {\n            switchConfirmModal.classList.remove('show');\n            setButtonLoading(manualSwitchBtn, false);\n            manualSwitchBtn.disabled = false;\n        });\n        \n        // 换号确认弹窗 - 点击遮罩关闭\n        switchConfirmModal.addEventListener('click', (e) => {\n            if (e.target === switchConfirmModal) {\n                switchConfirmModal.classList.remove('show');\n                setButtonLoading(manualSwitchBtn, false);\n                manualSwitchBtn.disabled = false;\n            }\n        });\n        \n        // 无感换号区域 - 重置机器码按钮\n        seamlessResetMachineBtn.addEventListener('click', () => {\n            vscode.postMessage({ type: 'resetMachineId' });\n        });\n        \n        // 刷新用量按钮\n        refreshUsageBtn.addEventListener('click', () => {\n            if (currentAccountEmail) {\n                setRefreshLoading(refreshUsageBtn, true);\n                vscode.postMessage({ type: 'getAccountUsage', email: currentAccountEmail });\n            }\n        });\n        \n        // 刷新用量函数\n        function refreshUsage() {\n            if (currentAccountEmail) {\n                vscode.postMessage({ type: 'getAccountUsage', email: currentAccountEmail });\n            }\n        }\n        \n        // 启动用量定时刷新 (每分钟一次)\n        function startUsageRefresh() {\n            if (usageRefreshInterval) {\n                clearInterval(usageRefreshInterval);\n            }\n            // 立即刷新一次\n            refreshUsage();\n            // 每60秒刷新一次\n            usageRefreshInterval = setInterval(refreshUsage, 60000);\n        }\n        \n        // 停止用量刷新\n        function stopUsageRefresh() {\n            if (usageRefreshInterval) {\n                clearInterval(usageRefreshInterval);\n                usageRefreshInterval = null;\n            }\n        }\n        \n        // 更新用量显示\n        function updateUsageDisplay(data) {\n            if (!data) return;\n            \n            const subscription = data.subscription || {};\n            const usage = data.usage || {};\n            \n            // 会员类型\n            const memberTypeMap = {\n                'free_trial': '免费试用',\n                'pro': 'Pro会员',\n                'free': '免费版',\n                'business': '商业版'\n            };\n            usageMemberType.textContent = memberTypeMap[subscription.membershipType] || subscription.membershipType || '-';\n            \n            // 试用剩余天数\n            if (subscription.daysRemainingOnTrial !== undefined && subscription.daysRemainingOnTrial !== null) {\n                usageTrialDays.textContent = subscription.daysRemainingOnTrial + ' 天';\n                usageTrialDays.style.color = subscription.daysRemainingOnTrial <= 3 ? '#f87171' : '#4ade80';\n            } else {\n                usageTrialDays.textContent = '-';\n                usageTrialDays.style.color = '#fff';\n            }\n            \n            // 请求次数\n            usageRequestCount.textContent = (usage.totalUsageCount || 0) + ' 次';\n            \n            // 已用额度\n            const costUSD = usage.totalCostUSD || 0;\n            usageCostUSD.textContent = '$' + costUSD.toFixed(2);\n            usageCostUSD.style.color = costUSD > 5 ? '#f87171' : (costUSD > 2 ? '#fbbf24' : '#4ade80');\n            \n            // 更新时间\n            usageUpdateTime.textContent = '更新于 ' + new Date().toLocaleTimeString();\n        }\n        \n        // 解析公告内容中的链接 {文字URL}\n        function parseAnnouncementContent(content) {\n            if (!content) return '';\n            \n            // 转义 HTML 特殊字符\n            let escaped = content\n                .replace(/&/g, '&amp;')\n                .replace(/</g, '&lt;')\n                .replace(/>/g, '&gt;')\n                .replace(/\"/g, '&quot;');\n            \n            // 匹配 {文字https://...} 或 {文字http://...} 格式\n            const linkRegex = /\\{([^}]+?)(https?:\\/\\/[^}]+)\\}/g;\n            \n            escaped = escaped.replace(linkRegex, function(match, text, url) {\n                return '<a href=\"' + url + '\" class=\"announcement-link\" target=\"_blank\">' + text + '</a>';\n            });\n            \n            // 将换行符转换为 <br>\n            escaped = escaped.replace(/\\n/g, '<br>');\n            \n            return escaped;\n        }\n        \n        // 更新公告显示\n        function updateAnnouncementDisplay(data) {\n            if (!data || !data.is_active) {\n                announcementSection.style.display = 'none';\n                return;\n            }\n            \n            // 显示公告区域\n            announcementSection.style.display = 'block';\n            \n            // 设置图标和类型徽章\n            const typeConfig = {\n                'info': { icon: '📢', text: '通知', class: 'info' },\n                'warning': { icon: '⚠️', text: '警告', class: 'warning' },\n                'error': { icon: '🚨', text: '重要', class: 'error' },\n                'success': { icon: '✅', text: '好消息', class: 'success' }\n            };\n            \n            const config = typeConfig[data.type] || typeConfig['info'];\n            announcementIcon.textContent = config.icon;\n            announcementBadge.textContent = config.text;\n            announcementBadge.className = 'announcement-badge ' + config.class;\n            \n            // 设置标题和内容（解析链接）\n            announcementTitle.textContent = data.title || '';\n            announcementContent.innerHTML = parseAnnouncementContent(data.content || '');\n            \n            // 设置时间\n            if (data.created_at) {\n                const date = new Date(data.created_at);\n                announcementTime.textContent = date.toLocaleDateString('zh-CN', {\n                    year: 'numeric',\n                    month: '2-digit',\n                    day: '2-digit',\n                    hour: '2-digit',\n                    minute: '2-digit'\n                });\n            } else {\n                announcementTime.textContent = '';\n            }\n        }\n        \n        // 处理来自扩展的消息\n        window.addEventListener('message', event => {\n            const message = event.data;\n            \n            switch (message.type) {\n                case 'state':\n                    updateUI(message);\n                    break;\n                case 'activated':\n                    setButtonLoading(activateBtn, false);\n                    activateBtn.disabled = false;\n                    if (message.success) {\n                        // 调试日志\n                        console.log('[CursorPro] 前端收到激活成功消息:', message);\n                        \n                        authStatus.textContent = '已授权';\n                        authStatus.className = 'status-badge active';\n                        accountStatus.textContent = '已激活';\n                        accountStatus.className = 'status-badge active';\n                        switchBtn.disabled = false;\n                        // 更新激活码显示（使用后端返回的 key）\n                        fullActivationKey = message.key || keyInput.value;\n                        keyDisplay.textContent = maskKey(fullActivationKey);\n                        // 更新到期时间\n                        console.log('[CursorPro] 更新到期时间:', message.expireDate);\n                        currentExpireDate = message.expireDate || '';\n                        expireDate.textContent = formatExpireDate(currentExpireDate) || '未知';\n                        // 更新换号次数\n                        if (message.switchRemaining !== undefined) {\n                            currentSwitchRemaining = message.switchRemaining;\n                            switchCount.textContent = message.switchRemaining + '/' + (message.switchLimit || 100);\n                        }\n                        // 清空输入框\n                        keyInput.value = '';\n                        showToast('授权码激活成功！', '✅', 10000);\n                    } else {\n                        showToast(message.error || '激活失败', '❌', 10000);\n                    }\n                    break;\n                case 'switched':\n                    if (message.success) {\n                        switchCount.textContent = message.switchRemaining + '/' + (message.switchLimit || 100);\n                        showToast('换号成功: ' + (message.email || ''), '✅', 10000);\n                    } else {\n                        showToast(message.error || '换号失败', '❌', 10000);\n                    }\n                    break;\n                case 'reset':\n                    authStatus.textContent = '未授权';\n                    authStatus.className = 'status-badge inactive';\n                    accountStatus.textContent = '未激活';\n                    accountStatus.className = 'status-badge inactive';\n                    switchBtn.disabled = true;\n                    keyInput.value = '';\n                    fullActivationKey = '';\n                    keyDisplay.textContent = '尚未激活';\n                    expireDate.textContent = '尚未激活';\n                    break;\n                \n                // 激活码状态检查结果\n                case 'keyStatusChecked':\n                    if (message.valid) {\n                        // 激活码有效，更新显示\n                        currentExpireDate = message.expireDate || '';\n                        currentSwitchRemaining = message.switchRemaining || 0;\n                        expireDate.textContent = formatExpireDate(currentExpireDate);\n                        switchCount.textContent = message.switchRemaining + '/' + (message.switchLimit || 100);\n                    } else if (message.expired) {\n                        // 激活码已过期，显示提示并重置状态\n                        currentExpireDate = '';\n                        currentSwitchRemaining = 0;\n                        authStatus.textContent = '已过期';\n                        authStatus.className = 'status-badge inactive';\n                        authStatus.style.background = '#6e3232';\n                        authStatus.style.color = '#ff6b6b';\n                        expireDate.textContent = '已过期';\n                        expireDate.style.color = '#f87171';\n                        switchBtn.disabled = true;\n                        enableSeamlessBtn.disabled = true;\n                        // 如果免魔法已开启，自动关闭\n                        if (seamlessProxySwitch.checked) {\n                            seamlessProxySwitch.checked = false;\n                            vscode.postMessage({ type: 'toggleProxy', enabled: false, url: '' });\n                        }\n                        // 显示过期弹窗\n                        showExpiredModal();\n                    }\n                    break;\n                \n                // 用户换号状态\n                case 'userSwitchStatus':\n                    const remaining = message.switchRemaining || 0;\n                    const canSwitch = remaining > 0;\n                    \n                    // 更新全局变量\n                    currentSwitchRemaining = remaining;\n                    \n                    seamlessSwitchRemaining.textContent = remaining.toString();\n                    seamlessSwitchRemaining.style.color = canSwitch ? '#4ade80' : '#f87171';\n                    \n                    if (message.lockedAccount) {\n                        seamlessCurrentAccount.textContent = message.lockedAccount.email;\n                        \n                        // 设置当前账号邮箱并启动用量刷新\n                        if (message.lockedAccount.email && message.lockedAccount.email !== currentAccountEmail) {\n                            currentAccountEmail = message.lockedAccount.email;\n                            usageSection.style.display = 'block';\n                            startUsageRefresh();\n                        }\n                    } else {\n                        seamlessCurrentAccount.textContent = '未分配';\n                        \n                        // 没有锁定账号时隐藏用量区域\n                        currentAccountEmail = '';\n                        usageSection.style.display = 'none';\n                        stopUsageRefresh();\n                    }\n                    \n                    // 根据剩余次数控制手动换号按钮状态\n                    if (!canSwitch) {\n                        manualSwitchBtn.disabled = true;\n                    }\n                    // 启用无感换号按钮不受积分限制，只有过期才禁用\n                    enableSeamlessBtn.disabled = isKeyExpired();\n                    \n                    // 如果无感换号已启用，显示手动换号按钮和重置机器码按钮\n                    if (message.seamlessEnabled && canSwitch) {\n                        manualSwitchBtn.style.display = 'block';\n                        manualSwitchBtn.disabled = false;\n                        setButtonLoading(manualSwitchBtn, false);\n                        seamlessResetMachineBtn.style.display = 'block';\n                    }\n                    break;\n                \n                // 账号用量\n                case 'accountUsage':\n                    setRefreshLoading(refreshUsageBtn, false);\n                    if (message.success && message.data) {\n                        updateUsageDisplay(message.data);\n                    } else {\n                        usageUpdateTime.textContent = '获取失败: ' + (message.error || '未知错误');\n                        usageUpdateTime.style.color = '#f87171';\n                    }\n                    break;\n                \n                // 无感换号状态\n                case 'seamlessStatus':\n                    if (message.is_injected) {\n                        seamlessStatus.textContent = '已启用';\n                        seamlessStatus.className = 'status-badge active';\n                        enableSeamlessBtn.style.display = 'none';\n                        disableSeamlessBtn.style.display = 'block';\n                        disableSeamlessBtn.disabled = false;\n                        setButtonLoading(disableSeamlessBtn, false);\n                        manualSwitchBtn.style.display = 'block';\n                        manualSwitchBtn.disabled = false;\n                        setButtonLoading(manualSwitchBtn, false);\n                        seamlessResetMachineBtn.style.display = 'block';\n                    } else {\n                        seamlessStatus.textContent = '未启用';\n                        seamlessStatus.className = 'status-badge inactive';\n                        enableSeamlessBtn.style.display = 'block';\n                        setButtonLoading(enableSeamlessBtn, false);\n                        // 启用按钮不受积分限制，只有过期才禁用\n                        enableSeamlessBtn.disabled = isKeyExpired();\n                        disableSeamlessBtn.style.display = 'none';\n                        manualSwitchBtn.style.display = 'none';\n                        seamlessResetMachineBtn.style.display = 'none';\n                    }\n                    break;\n                \n                case 'seamlessInjected':\n                    setButtonLoading(enableSeamlessBtn, false);\n                    enableSeamlessBtn.disabled = false;\n                    if (message.success) {\n                        seamlessStatus.textContent = '已启用';\n                        seamlessStatus.className = 'status-badge active';\n                        enableSeamlessBtn.style.display = 'none';\n                        disableSeamlessBtn.style.display = 'block';\n                        manualSwitchBtn.style.display = 'block';\n                        seamlessResetMachineBtn.style.display = 'block';\n                        // 刷新用户状态\n                        vscode.postMessage({ type: 'getUserSwitchStatus' });\n                        // 显示重启提示弹窗\n                        if (message.needRestart) {\n                            showRestartModal(message.message || '无感换号已启用');\n                        }\n                    } else {\n                        // 如果是权限错误，显示自定义弹窗\n                        if (message.needAdmin) {\n                            // Mac/Linux 权限问题，显示详细提示\n                            var errorMsg = message.error || '没有写入权限';\n                            if (message.path) {\n                                errorMsg += '\\n路径: ' + message.path;\n                            }\n                            showToast(errorMsg, '🔐', 15000);\n                        } else {\n                            // 显示详细错误\n                            var detailMsg = message.error || '启用失败';\n                            if (message.details) {\n                                detailMsg += '\\n' + message.details;\n                            }\n                            showToast(detailMsg, '❌', 15000);\n                        }\n                    }\n                    break;\n                \n                case 'seamlessRestored':\n                    setButtonLoading(disableSeamlessBtn, false);\n                    disableSeamlessBtn.disabled = false;\n                    if (message.success) {\n                        seamlessStatus.textContent = '未启用';\n                        seamlessStatus.className = 'status-badge inactive';\n                        enableSeamlessBtn.style.display = 'block';\n                        disableSeamlessBtn.style.display = 'none';\n                        manualSwitchBtn.style.display = 'none';\n                        seamlessResetMachineBtn.style.display = 'none';\n                        // 显示重启提示弹窗\n                        if (message.needRestart) {\n                            showRestartModal(message.message || '无感换号已禁用');\n                        }\n                    } else {\n                        // 如果是权限错误，显示自定义弹窗\n                        if (message.needAdmin) {\n                            showAdminModal();\n                        } else {\n                            showToast(message.error || '禁用失败', '❌', 10000);\n                        }\n                    }\n                    break;\n                \n                // 用量检查结果\n                case 'usageCheckResult':\n                    if (message.success) {\n                        if (message.needConfirm) {\n                            // 需要确认，显示弹窗（按钮保持可用状态，等用户选择）\n                            setButtonLoading(manualSwitchBtn, false);\n                            manualSwitchBtn.disabled = false;\n                            switchConfirmEmail.textContent = message.email || '';\n                            switchConfirmCost.textContent = '$' + (message.costUSD || '0.00');\n                            switchConfirmModal.classList.add('show');\n                        } else {\n                            // 不需要确认，直接换号\n                            vscode.postMessage({ type: 'confirmSwitch' });\n                        }\n                    } else {\n                        setButtonLoading(manualSwitchBtn, false);\n                        manualSwitchBtn.disabled = false;\n                        showToast(message.error || '检查失败', '❌', 5000);\n                    }\n                    break;\n                \n                case 'manualSeamlessSwitched':\n                    setButtonLoading(manualSwitchBtn, false);\n                    if (message.success) {\n                        seamlessSwitchRemaining.textContent = (message.switchRemaining || 0).toString();\n                        seamlessCurrentAccount.textContent = message.email || '未知';\n                        // 显示 Toast 通知，10秒后消失\n                        showToast('已切换到: ' + (message.email || '新账号') + '，约10秒内自动生效', '✅', 10000);\n                        // 刷新状态\n                        vscode.postMessage({ type: 'getUserSwitchStatus' });\n                        // 禁用按钮10秒，显示倒计时\n                        disableSwitchBtnWithCountdown(10);\n                    } else {\n                        manualSwitchBtn.disabled = false;\n                        showToast(message.error || '换号失败', '❌', 5000);\n                    }\n                    break;\n                \n                case 'proxyStatus':\n                    // 设置免魔法开关状态\n                    seamlessProxySwitch.checked = message.enabled;\n                    break;\n                \n                // 公告\n                case 'announcement':\n                    if (message.success && message.data) {\n                        updateAnnouncementDisplay(message.data);\n                    } else {\n                        announcementSection.style.display = 'none';\n                    }\n                    break;\n                \n                // 版本检查\n                case 'versionCheck':\n                    currentVersionEl.textContent = message.currentVersion || '-';\n                    if (message.success && message.hasUpdate) {\n                        // 有更新\n                        latestVersionEl.textContent = message.latestVersion;\n                        latestVersionRow.style.display = 'flex';\n                        versionStatus.style.display = 'inline-block';\n                        versionStatus.style.background = '#ff9800';\n                        updateHint.style.display = 'block';\n                        \n                        // 显示顶部更新提醒条\n                        updateBannerVersion.textContent = 'v' + message.latestVersion;\n                        updateBanner.classList.add('show');\n                    } else if (message.success) {\n                        // 已是最新版\n                        versionStatus.textContent = '最新';\n                        versionStatus.style.display = 'inline-block';\n                        versionStatus.style.background = '#4caf50';\n                        latestVersionRow.style.display = 'none';\n                        updateHint.style.display = 'none';\n                        updateBanner.classList.remove('show');\n                    }\n                    break;\n                \n                // Cursor 运行路径\n                case 'cursorRunningPath':\n                    if (message.path) {\n                        const pathText = message.path + (message.packageExists ? ' ✓' : ' ✗');\n                        cursorPath.textContent = pathText;\n                        cursorPath.style.color = message.packageExists ? '#4ade80' : '#f87171';\n                        // 同时更新版本号\n                        if (message.cursorVersion) {\n                            cursorVersion.textContent = message.cursorVersion;\n                        }\n                    } else {\n                        cursorPath.textContent = '未找到';\n                        cursorPath.style.color = '#f87171';\n                    }\n                    break;\n                \n                // 管理员权限不足提示\n                case 'adminPermissionRequired':\n                    showAdminPermissionModal();\n                    break;\n                \n                // 机器码重置\n                case 'machineIdReset':\n                    if (message.success && message.needRestart) {\n                        // 机器码重置需要完全关闭 Cursor，不是 reload\n                        showRestartModal(message.message || '机器码重置成功', 'close');\n                    }\n                    break;\n                \n                // 通用 Toast 消息\n                case 'showToast':\n                    showToast(message.message || '', message.icon || '📢', 10000);\n                    break;\n                \n                // 网络状态\n                case 'networkStatus':\n                    updateOfflineStatus(!message.online);\n                    break;\n            }\n        });\n        \n        // 离线状态显示/隐藏\n        let wasOffline = false; // 跟踪之前是否离线\n        function updateOfflineStatus(isOffline) {\n            if (isOffline) {\n                offlineBanner.classList.add('show');\n                wasOffline = true;\n            } else {\n                offlineBanner.classList.remove('show');\n                // 只有从离线恢复到在线时才刷新状态\n                if (wasOffline) {\n                    wasOffline = false;\n                    vscode.postMessage({ type: 'getState' });\n                    vscode.postMessage({ type: 'getUserSwitchStatus' });\n                }\n            }\n        }\n        \n        // 重试连接按钮\n        retryConnectBtn.addEventListener('click', async () => {\n            retryConnectBtn.classList.add('loading');\n            retryConnectBtn.textContent = '连接中...';\n            \n            // 发起真正的网络请求来测试网络\n            vscode.postMessage({ type: 'retryConnect' });\n            \n            // 5秒后恢复按钮状态（给网络请求足够时间）\n            setTimeout(() => {\n                retryConnectBtn.classList.remove('loading');\n                retryConnectBtn.textContent = '重试';\n            }, 5000);\n        });\n        \n        function updateUI(state) {\n            if (state.isActivated) {\n                authStatus.textContent = '已授权';\n                authStatus.className = 'status-badge active';\n                accountStatus.textContent = '已激活';\n                accountStatus.className = 'status-badge active';\n                switchBtn.disabled = false;\n                fullActivationKey = state.key;\n                keyDisplay.textContent = maskKey(fullActivationKey);\n                // 更新到期时间\n                currentExpireDate = state.expireDate || '';\n                expireDate.textContent = formatExpireDate(currentExpireDate);\n                // 更新换号次数\n                if (state.switchRemaining !== undefined) {\n                    currentSwitchRemaining = state.switchRemaining;\n                    switchCount.textContent = state.switchRemaining + '/' + (state.switchLimit || 100);\n                }\n                // 启用无感换号按钮（只有过期才禁用）\n                enableSeamlessBtn.disabled = isKeyExpired();\n            }\n            cursorVersion.textContent = state.cursorVersion || '0.0.0';\n            \n            // 根据网络状态显示/隐藏离线提示\n            if (state.isOnline === false) {\n                offlineBanner.classList.add('show');\n                wasOffline = true;\n            } else if (state.isOnline === true) {\n                // 网络恢复，隐藏离线提示\n                offlineBanner.classList.remove('show');\n                wasOffline = false;\n            }\n        }\n    </script>\n</body>\n</html>",
  "_0xa6d6ac(0x8fa,'7%WS')": "CursorProViewProvider",
  "_0xa6d6ac(0x52d,'*&r5')": "CURRENT_VERSION"
}