@privacyscrubber/sdk 2.0.2 → 2.0.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,257 +1,11 @@
1
- (function(global) {
2
- // ── START LICENSE CRYPTO ──
3
- const PUBLIC_KEY_N = BigInt("21317979104050344678233452423803986868842680501941538057759536089609908024281729760556922188810565541201321990374637212776148857190553192389608364990754937991254608109727112734447704854882786946805547031142530865504430968628760311494129154950865158735816268612258108296781892583171421605668998979064782378729322077179022581884976242706169323540456286526420742434868559866211716347133681429395477256705746276962607312574959642065929462114149296066812527505837608212730874704915352119747022918247963886630350365119206627670591400728523813746184290857872958847087691236909900501703203494160206941648263514117706558791691");
4
- const PUBLIC_KEY_E = 65537n;
5
-
6
- function modPow(base, exp, mod) {
7
- let res = 1n;
8
- base = base % mod;
9
- while (exp > 0n) {
10
- if (exp % 2n === 1n) res = (res * base) % mod;
11
- exp = exp / 2n;
12
- base = (base * base) % mod;
13
- }
14
- return res;
15
- }
16
-
17
- function bigIntToString(bi) {
18
- let hex = bi.toString(16);
19
- if (hex.length % 2 !== 0) hex = '0' + hex;
20
- let str = '';
21
- for (let i = 0; i < hex.length; i += 2) {
22
- str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
23
- }
24
- return str;
25
- }
26
-
27
- function stringToBigInt(str) {
28
- let hex = '';
29
- for (let i = 0; i < str.length; i++) {
30
- hex += str.charCodeAt(i).toString(16).padStart(2, '0');
31
- }
32
- return BigInt('0x' + hex);
33
- }
34
-
35
- function sha256(ascii) {
36
- function rightRotate(value, amount) { return (value>>>amount) | (value<<(32 - amount)); }
37
- var mathPow = Math.pow; var maxWord = mathPow(2, 32);
38
- var lengthProperty = 'length'; var i, j;
39
- var result = ''; var words = []; var asciiBitLength = ascii[lengthProperty]*8;
40
- var hash = sha256.h = sha256.h || [];
41
- var k = sha256.k = sha256.k || [];
42
- var primeCounter = k[lengthProperty];
43
- var isComposite = {};
44
- for (var candidate = 2; primeCounter < 64; candidate++) {
45
- if (!isComposite[candidate]) {
46
- for (i = 0; i < 313; i += candidate) { isComposite[i] = candidate; }
47
- hash[primeCounter] = (mathPow(candidate, .5)*maxWord)|0;
48
- k[primeCounter++] = (mathPow(candidate, 1/3)*maxWord)|0;
49
- }
50
- }
51
- ascii += '\x80';
52
- while (ascii[lengthProperty]%64 - 56) ascii += '\x00';
53
- for (i = 0; i < ascii[lengthProperty]; i++) {
54
- j = ascii.charCodeAt(i);
55
- if (j>>8) return;
56
- words[i>>2] |= j << ((3 - i)%4)*8;
57
- }
58
- words[words[lengthProperty]] = ((asciiBitLength/maxWord)|0);
59
- words[words[lengthProperty]] = (asciiBitLength)
60
- for (j = 0; j < words[lengthProperty];) {
61
- var w = words.slice(j, j += 16);
62
- var oldHash = hash;
63
- hash = hash.slice(0, 8);
64
- for (i = 0; i < 64; i++) {
65
- var w15 = w[i - 15], w2 = w[i - 2];
66
- var a = hash[0], e = hash[4];
67
- var temp1 = hash[7] + (rightRotate(e, 6) ^ rightRotate(e, 11) ^ rightRotate(e, 25)) + ((e&hash[5])^((~e)&hash[6])) + k[i] + (w[i] = (i < 16) ? w[i] : (w[i - 16] + (rightRotate(w15, 7) ^ rightRotate(w15, 18) ^ (w15>>>3)) + w[i - 7] + (rightRotate(w2, 17) ^ rightRotate(w2, 19) ^ (w2>>>10)))|0);
68
- var temp2 = (rightRotate(a, 2) ^ rightRotate(a, 13) ^ rightRotate(a, 22)) + ((a&hash[1])^(a&hash[2])^(hash[1]&hash[2]));
69
- hash = [(temp1 + temp2)|0].concat(hash);
70
- hash[4] = (hash[4] + temp1)|0;
71
- }
72
- for (i = 0; i < 8; i++) { hash[i] = (hash[i] + oldHash[i])|0; }
73
- }
74
- for (i = 0; i < 8; i++) {
75
- for (j = 3; j + 1; j--) {
76
- var b = (hash[i]>>(j*8))&255;
77
- result += ((b < 16) ? 0 : '') + b.toString(16);
78
- }
79
- }
80
- return result;
81
- }
82
- // ── END LICENSE CRYPTO ──
83
-
84
- class LicenseManager {
85
- /**
86
- * Validates a license key universally across all environments.
87
- * @param {string} key - The license key.
88
- * @param {object} options - Options mapping to environment specifics.
89
- * @returns {object} { valid: boolean, tier: string|null, reason?: string, expires?: number }
90
- */
91
- static validate(key, options = {}) {
92
- if (!key) return { valid: false, tier: null, reason: "No key provided" };
93
- const rawKey = key.trim();
94
- const k = rawKey.toUpperCase();
95
- const parts = k.split('-');
96
-
97
- const now = options.mockTime !== undefined && options.mockTime !== null ? options.mockTime : Date.now();
98
- let lastSeen = 0;
99
-
100
- if (options.storage) {
101
- lastSeen = parseInt(options.storage.getItem('ps_last_seen_time') || '0', 10);
102
- if (options.mockTime === undefined || options.mockTime === null) {
103
- options.storage.setItem('ps_last_seen_time', now.toString());
104
- }
105
- }
106
-
107
- // Clock rollback guard
108
- if ((options.mockTime === undefined || options.mockTime === null) && now < lastSeen) {
109
- if (options.onAnomaly) options.onAnomaly();
110
- return { valid: false, tier: null, reason: "Clock rollback anomaly detected" };
111
- }
112
-
113
- const _atob = typeof atob !== 'undefined' ? atob : (str) => Buffer.from(str, 'base64').toString('binary');
114
-
115
- // 1. Process Pilot Keys (RSA-1024 Encrypted Timestamps)
116
- if (k.startsWith('PS-PILOT-')) {
117
- try {
118
- const payload = rawKey.substring(9);
119
- const binary = _atob(payload);
120
- const bytes = new Uint8Array(binary.length);
121
- for (let i = 0; i < binary.length; i++) {
122
- bytes[i] = binary.charCodeAt(i);
123
- }
124
- let hex = '';
125
- for (let i = 0; i < bytes.length; i++) {
126
- hex += bytes[i].toString(16).padStart(2, '0');
127
- }
128
- const S = BigInt('0x' + hex);
129
-
130
- const M = modPow(S, PUBLIC_KEY_E, PUBLIC_KEY_N);
131
- const decryptedStr = bigIntToString(M);
132
-
133
- if (decryptedStr.startsWith('ZTDS-PILOT-')) {
134
- const expDate = parseInt(decryptedStr.substring(11), 10);
135
- if (!isNaN(expDate)) {
136
- if (now < expDate) return { valid: true, tier: 'TEAMS', expires: expDate };
137
-
138
- if (options.onExpired) options.onExpired('Pilot');
139
- return { valid: false, tier: null, reason: "Pilot expired" };
140
- }
141
- }
142
- } catch(e) {
143
- return { valid: false, tier: null, reason: "Pilot decryption failed" };
144
- }
145
- }
146
-
147
- // 1.5. Process RSA Signed Keys (PS-RSA-...)
148
- if (k.startsWith('PS-RSA-')) {
149
- try {
150
- const payload = rawKey.substring(7);
151
- const binary = _atob(payload);
152
- const bytes = new Uint8Array(binary.length);
153
- for (let i = 0; i < binary.length; i++) {
154
- bytes[i] = binary.charCodeAt(i);
155
- }
156
- let hex = '';
157
- for (let i = 0; i < bytes.length; i++) {
158
- hex += bytes[i].toString(16).padStart(2, '0');
159
- }
160
- const S = BigInt('0x' + hex);
161
-
162
- const M = modPow(S, PUBLIC_KEY_E, PUBLIC_KEY_N);
163
- const decryptedStr = bigIntToString(M);
164
-
165
- if (decryptedStr.startsWith('ZTDS-LIC-')) {
166
- const pieces = decryptedStr.split('-');
167
- if (pieces.length >= 5) {
168
- const tier = pieces[2];
169
- const expires = parseInt(pieces[4], 10);
170
- if (!isNaN(expires)) {
171
- if (now < expires) return { valid: true, tier: tier, expires: expires };
172
-
173
- if (options.onExpired) options.onExpired('RSA');
174
- return { valid: false, tier: null, reason: "RSA key expired" };
175
- }
176
- }
177
- }
178
- } catch(e) {
179
- return { valid: false, tier: null, reason: "RSA decryption failed" };
180
- }
181
- }
182
-
183
- // 2. Process Modern Prefixed Keys (v1.4.2+ Salted Checksum)
184
- if (parts.length === 4 && parts[0] === 'PS' && ['PRO', 'TEAMS', 'SDK', 'OEM', 'ENTERPRISE'].includes(parts[1])) {
185
- const tier = parts[1];
186
- const core = parts[2];
187
- const checksum = parts[3];
188
- const salt = "ZTDS_SALT_2026_!@#";
189
- const input = core + salt + tier;
190
- let sum = 0;
191
- for (let i = 0; i < input.length; i++) {
192
- sum += input.charCodeAt(i) * (i + 1);
193
- }
194
- const expectedChecksum = (sum % 9999).toString().padStart(4, '0');
195
- if (checksum === expectedChecksum) {
196
- return { valid: true, tier: tier };
197
- }
198
- }
199
-
200
- // 3. Process Standard RS256 JWTs (eyJ...)
201
- if (rawKey.startsWith('eyJ') && rawKey.split('.').length === 3) {
202
- try {
203
- const [b64Header, b64Payload, b64Signature] = rawKey.split('.');
204
-
205
- let sigStr = b64Signature.replace(/-/g, '+').replace(/_/g, '/');
206
- while (sigStr.length % 4) sigStr += '=';
207
- const binarySig = _atob(sigStr);
208
- let hexSig = '';
209
- for (let i = 0; i < binarySig.length; i++) {
210
- hexSig += binarySig.charCodeAt(i).toString(16).padStart(2, '0');
211
- }
212
-
213
- const S = BigInt('0x' + hexSig);
214
- const M = modPow(S, PUBLIC_KEY_E, PUBLIC_KEY_N);
215
-
216
- let mHex = M.toString(16);
217
- if (mHex.length % 2 !== 0) mHex = '0' + mHex;
218
-
219
- const expectedHash = sha256(b64Header + '.' + b64Payload);
220
-
221
- if (mHex.endsWith(expectedHash)) {
222
- const payloadJson = _atob(b64Payload.replace(/-/g, '+').replace(/_/g, '/'));
223
- const payload = JSON.parse(payloadJson);
224
-
225
- if (payload.exp && (now / 1000) < payload.exp) {
226
- return { valid: true, tier: payload.tier || 'PRO', expires: payload.exp * 1000 };
227
- } else {
228
- if (options.onExpired) options.onExpired('JWT');
229
- return { valid: false, tier: null, reason: "JWT expired" };
230
- }
231
- }
232
- } catch(e) {
233
- return { valid: false, tier: null, reason: "JWT validation failed" };
234
- }
235
- }
236
-
237
- return { valid: false, tier: null, reason: "Invalid format" };
238
- }
239
- }
240
-
241
- // Export module for ES modules, CommonJS, and Browser Global
242
- if (typeof globalThis !== 'undefined') {
243
- globalThis.LicenseManager = LicenseManager;
244
- }
245
- if (typeof global !== 'undefined') {
246
- global.LicenseManager = LicenseManager;
247
- }
248
- if (typeof window !== 'undefined') {
249
- window.LicenseManager = LicenseManager;
250
- }
251
- if (typeof exports !== 'undefined') {
252
- if (typeof module !== 'undefined' && module.exports) {
253
- module.exports = LicenseManager;
254
- }
255
- exports.LicenseManager = LicenseManager;
256
- }
257
- })(typeof globalThis !== 'undefined' ? globalThis : (typeof window !== 'undefined' ? window : this));
1
+ /**
2
+ * @license
3
+ * PrivacyScrubber Core Processing Engine (ZTDS)
4
+ * Copyright (c) 2026 PrivacyScrubber. All Rights Reserved.
5
+ *
6
+ * WARNING: This is proprietary, commercial software.
7
+ * Unauthorized copying, modification, distribution, or use of this source code,
8
+ * via any medium, is strictly prohibited. Protected by international copyright
9
+ * laws and treaties.
10
+ */
11
+ const _0x5877ef=_0x172c;function _0x172c(_0x4ac950,_0x346412){_0x4ac950=_0x4ac950-0x17c;const _0x1a87f2=_0x1a87();let _0x172c20=_0x1a87f2[_0x4ac950];if(_0x172c['RoFMqt']===undefined){var _0x2afdb3=function(_0x6b5f8c){const _0x3268af='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/=';let _0x3c6d9f='',_0x428fc5='';for(let _0x58eed4=0x0,_0x3326bf,_0x12ff3c,_0x43b3e8=0x0;_0x12ff3c=_0x6b5f8c['charAt'](_0x43b3e8++);~_0x12ff3c&&(_0x3326bf=_0x58eed4%0x4?_0x3326bf*0x40+_0x12ff3c:_0x12ff3c,_0x58eed4++%0x4)?_0x3c6d9f+=String['fromCharCode'](0xff&_0x3326bf>>(-0x2*_0x58eed4&0x6)):0x0){_0x12ff3c=_0x3268af['indexOf'](_0x12ff3c);}for(let _0xde6a6c=0x0,_0x1dd7df=_0x3c6d9f['length'];_0xde6a6c<_0x1dd7df;_0xde6a6c++){_0x428fc5+='%'+('00'+_0x3c6d9f['charCodeAt'](_0xde6a6c)['toString'](0x10))['slice'](-0x2);}return decodeURIComponent(_0x428fc5);};_0x172c['tgkEIt']=_0x2afdb3,_0x172c['jvZtzW']={},_0x172c['RoFMqt']=!![];}const _0x3f28eb=_0x1a87f2[0x0],_0x21e063=_0x4ac950+_0x3f28eb,_0x597f39=_0x172c['jvZtzW'][_0x21e063];return!_0x597f39?(_0x172c20=_0x172c['tgkEIt'](_0x172c20),_0x172c['jvZtzW'][_0x21e063]=_0x172c20):_0x172c20=_0x597f39,_0x172c20;}function _0x1a87(){const _0x13648a=['tgLJzw5Zzu1HBMfNzxi','DgLLCG','mJiYt3jcyu9l','ugLSB3qGzxHWAxjLza','mZK2odvAzNzXvwq','mJu1ndyYng11BvDtCa','D0PrDM4','wLreuY1msumT','zxLk','uLnbigrLy3j5ChrPB24GzMfPBgvK','twfcy2C','C3bSAxq','vevbtvm','B25fEhbPCMvK','Dg9vChbLCKnHC2u','zxHW','BM93','BgvUz3rO','mtK0nti0D25Irvvu','z3PLrfa','Dw5KzwzPBMvK','mJKYmdfjAMvrvem','uwPluNO','Dg9tDhjPBMC','Bw9JA1rPBwu','C2jct08','C2XPy2u','yMfZzty0','B25bBM9TywX5','Bgj3q2m','zNjVBunOyxjdB2rL','ndjKqwDKyLC','u0rl','ugLSB3q','z2v0sxrLBq','CgfKu3rHCNq','Cg93','t0vn','ugLSB3qGzgvJCNLWDgLVBIbMywLSzwq','C3vIC3rYAw5N','Ew5KtMm','sLDuihzHBgLKyxrPB24GzMfPBgvK','zxHWB3j0CW','mZyWBuf1sMLf','C3rVCMfNzq','z2PSD2C','mta2mduYwKDxrKfm','ndy4nJG0Auv2CvLR','sffRAvG','ufjp','wLreuY1qsuXpvc0','CgfYC2u','CxvpC20','ChnFBgfZDf9ZzwvUx3rPBwu','y2HHCKnVzgvbDa','vffgtfu','A2X5Cwy','s1vwyuu','C3vIC3rY','CMvWBgfJzq','AgvJBvu','sLDu','BuXVrxa','C3rHCNrZv2L0Aa','yMLUyxj5','mtrYC1vjsLy','ufmTuLnblq','mty5mdu1nM5vrvnbsq','thLwthq','mJeZmtC5nZKXmdqWntaZndq2nZGYmZm0nti0mJm4mdm5ody4nJG4ndi2oda1mde5nde1mZGWntC3ntK1mZyWodK2mdK5mdGWmJqYode3mJK3nJa1nty5mJiXodG4mta1nJu1ndeYmdeZmJe5otaZnZq2mZCYmti3nZyXndG4ntCXota1ntmXotiZodK2mdGZnJq5ota3ntq5mZC5oteYntq2mdGXmdK3mJCXmti3mZq0ndC3mdq4ntq4odi3ody5ndy4mdu1ndCWmZeXndi1mZa4nJu1mdq0mZa5nJG2mJG3nJaZmte0otqXmJKXntq5nta4nJuXntG3mZu4mtyYnJG2mtiYntGXmdGYoty3ode4oti1odmXnZe0mJe2mdu2nJG5otG5nZKWnJq3odiZnZG3mJKZmJiWnZCXnZKWmJi1ode4odq5nZyYndi3mdyXnJKZmJm1nda0ntyYody1mJy0mJa3ndi0mZq4nJG1ntK4nJyYmte3mtyZndCXmZm2ode0mJKZotu0nZCYnty3mdu3ndyYnZy5nJi2mdCZmti1nZq5ntK2ndiWnJu5mJK0nJiXmtqXndKYotyWnJy4mti1mJC1mdu4mZC2mdGYmti3mZa4nZq3mdq5mtuZntiXmtK3ndCWmJi5mtGYndC5nJm4ody2mZaZntaZnJuXmtKYmdy2mJC2nZa1ote0mda3mJG1mJm4mtm3ndyXodqYota4ntC4nZi5ntG4ndCWodC2oteYmZy5mdK5mda1mde3mdmYmdm0otqXnJaYmdy5nde2ndGYnJm1mtqXmtC3mdy1ntG3ote2ote','DhjPBq','zNjVBq'];_0x1a87=function(){return _0x13648a;};return _0x1a87();}(function(_0x34272b,_0x216825){const _0x5d881c={_0x4334ee:0x1bc,_0x56baef:0x18d,_0x443f2a:0x1ac,_0x3b6b42:0x18a,_0x475de5:0x1b9},_0xe35e74=_0x172c,_0x5a21f8=_0x34272b();while(!![]){try{const _0x10879b=-parseInt(_0xe35e74(_0x5d881c._0x4334ee))/0x1*(-parseInt(_0xe35e74(0x1a0))/0x2)+parseInt(_0xe35e74(0x17e))/0x3*(parseInt(_0xe35e74(_0x5d881c._0x56baef))/0x4)+parseInt(_0xe35e74(0x1ab))/0x5*(parseInt(_0xe35e74(0x1a9))/0x6)+parseInt(_0xe35e74(0x1a2))/0x7+-parseInt(_0xe35e74(_0x5d881c._0x443f2a))/0x8+parseInt(_0xe35e74(0x18e))/0x9+parseInt(_0xe35e74(_0x5d881c._0x3b6b42))/0xa*(-parseInt(_0xe35e74(_0x5d881c._0x475de5))/0xb);if(_0x10879b===_0x216825)break;else _0x5a21f8['push'](_0x5a21f8['shift']());}catch(_0x4a338c){_0x5a21f8['push'](_0x5a21f8['shift']());}}}(_0x1a87,0x3282a),function(_0x291f75){const _0x155389={_0x3348d5:0x191,_0x395bdf:0x1a4,_0x553ecf:0x1c0,_0x26c7d1:0x1bb,_0x52df99:0x1a7,_0xe5ab2f:0x1bb,_0x5c9529:0x189},_0x5c32a9={_0x59605a:0x1b5,_0x1fc242:0x1b7,_0x5911f2:0x1bf,_0x33d0a7:0x1b1,_0x1df720:0x1c3,_0x16ebeb:0x19e,_0x1a0694:0x1b8,_0x36e398:0x195,_0x416def:0x1be,_0x51056b:0x193,_0x37d9df:0x186,_0x3b7a31:0x1b4,_0x10578a:0x180,_0x199fd5:0x185,_0x34a249:0x1a1,_0x575456:0x1be,_0x543872:0x182,_0x5b8ee6:0x1ae,_0x12dda9:0x1b0,_0x405d08:0x1b8,_0x1f03bf:0x1b3,_0xaa6079:0x184,_0x5cf373:0x17c,_0x56c323:0x19e,_0x174c96:0x1b2,_0x1b34e6:0x19a,_0x112f8a:0x1b6,_0x51cd8b:0x1a8,_0xbd767c:0x190,_0x292616:0x19c},_0x1e0f71={_0x5d4d71:0x1b8,_0x39cadd:0x1c1,_0x2e5fa9:0x19d,_0x262321:0x1ad,_0x476dfd:0x19b,_0x1b091f:0x1bd,_0x25cb3b:0x1be},_0x5f2da5={_0xf2599e:0x1b8,_0x4102da:0x1be,_0x169914:0x1ad},_0x124608={_0x9d0899:0x199},_0x101eca=_0x172c,_0x2767f2={'KUVaE':function(_0x1f0939,_0x41616c){return _0x1f0939!==_0x41616c;},'MaBcg':function(_0x566d2a,_0x30f41b){return _0x566d2a<_0x30f41b;},'wJQvn':function(_0x4208f3,_0x34209f){return _0x4208f3+_0x34209f;},'yndNc':function(_0x217313,_0x1fde62){return _0x217313-_0x1fde62;},'mLoEp':function(_0x52dd26,_0x20d398){return _0x52dd26^_0x20d398;},'xQojg':function(_0x5ca129,_0x2836bc){return _0x5ca129^_0x2836bc;},'gzeDP':function(_0x1af011,_0x220977,_0x330f1d){return _0x1af011(_0x220977,_0x330f1d);},'hecmU':function(_0x46fd1a,_0x3235a4,_0x9c2a88){return _0x46fd1a(_0x3235a4,_0x9c2a88);},'QjKRz':function(_0x555b72,_0xeee774){return _0x555b72|_0xeee774;},'MFjKH':'No\x20key\x20provided','Vnrlu':function(_0x532783,_0x45e1f0){return _0x532783!==_0x45e1f0;},'IxFNV':'PS-PILOT-','gjlwg':function(_0x466795,_0x39cebd){return _0x466795(_0x39cebd);},'vDwYc':function(_0x4e4a27,_0x471feb,_0x38d4d3,_0xabc1c2){return _0x4e4a27(_0x471feb,_0x38d4d3,_0xabc1c2);},'quOsm':_0x101eca(_0x155389._0x3348d5),'TQFLU':function(_0x298c6e,_0x22cbc7,_0x2c31ff){return _0x298c6e(_0x22cbc7,_0x2c31ff);},'sbBOO':function(_0x44b0ee,_0x2c294f){return _0x44b0ee(_0x2c294f);},'LyVLt':function(_0x5e1975,_0x1954b1,_0x31e783,_0x406d4b){return _0x5e1975(_0x1954b1,_0x31e783,_0x406d4b);},'xlzqI':'RSA','lbwCc':function(_0x2b0cd4,_0x36d564){return _0x2b0cd4*_0x36d564;},'HQkiX':function(_0x55dea6,_0x3be013){return _0x55dea6%_0x3be013;},'klyqf':function(_0x162319,_0xf0f57c){return _0x162319+_0xf0f57c;},'IjCUi':_0x101eca(0x188),'Muhcr':_0x101eca(_0x155389._0x395bdf)},_0x538247=_0x2767f2[_0x101eca(_0x155389._0x553ecf)](BigInt,_0x2767f2['Muhcr']),_0x209fd2=0x10001n;function _0x5a034c(_0x372b78,_0x33a88b,_0x2e463f){let _0x506ede=0x1n;_0x372b78=_0x372b78%_0x2e463f;while(_0x33a88b>0x0n){if(_0x33a88b%0x2n===0x1n)_0x506ede=_0x506ede*_0x372b78%_0x2e463f;_0x33a88b=_0x33a88b/0x2n,_0x372b78=_0x372b78*_0x372b78%_0x2e463f;}return _0x506ede;}function _0x4f7184(_0x55e546){const _0x3f950e=_0x101eca;let _0x23e825=_0x55e546['toString'](0x10);if(_0x2767f2[_0x3f950e(0x198)](_0x23e825['length']%0x2,0x0))_0x23e825='0'+_0x23e825;let _0x1e65b7='';for(let _0x253966=0x0;_0x253966<_0x23e825[_0x3f950e(0x1b8)];_0x253966+=0x2){_0x1e65b7+=String[_0x3f950e(0x17d)](parseInt(_0x23e825[_0x3f950e(_0x124608._0x9d0899)](_0x253966,0x2),0x10));}return _0x1e65b7;}function _0x3891b3(_0x545496){const _0xa41bd2=_0x101eca;let _0x25fba0='';for(let _0x60c67b=0x0;_0x2767f2['MaBcg'](_0x60c67b,_0x545496[_0xa41bd2(_0x5f2da5._0xf2599e)]);_0x60c67b++){_0x25fba0+=_0x545496['charCodeAt'](_0x60c67b)[_0xa41bd2(_0x5f2da5._0x4102da)](0x10)[_0xa41bd2(0x182)](0x2,'0');}return BigInt(_0x2767f2[_0xa41bd2(_0x5f2da5._0x169914)]('0x',_0x25fba0));}function _0xb3603d(_0x381daf){const _0x333a15=_0x101eca;function _0x3ea9cc(_0x16a723,_0xadf090){return _0x16a723>>>_0xadf090|_0x16a723<<0x20-_0xadf090;}var _0x7e619d=Math[_0x333a15(0x183)],_0x42fadb=_0x7e619d(0x2,0x20),_0xd887e2=_0x333a15(_0x1e0f71._0x5d4d71),_0x490c4f,_0xb1c05c,_0x8d015d='',_0x405314=[],_0x455790=_0x381daf[_0xd887e2]*0x8,_0x924e91=_0xb3603d['h']=_0xb3603d['h']||[],_0x1923a4=_0xb3603d['k']=_0xb3603d['k']||[],_0x370652=_0x1923a4[_0xd887e2],_0x1ba5f0={};for(var _0x23c237=0x2;_0x370652<0x40;_0x23c237++){if(!_0x1ba5f0[_0x23c237]){for(_0x490c4f=0x0;_0x490c4f<0x139;_0x490c4f+=_0x23c237){_0x1ba5f0[_0x490c4f]=_0x23c237;}_0x924e91[_0x370652]=_0x7e619d(_0x23c237,0.5)*_0x42fadb|0x0,_0x1923a4[_0x370652++]=_0x7e619d(_0x23c237,0x1/0x3)*_0x42fadb|0x0;}}_0x381daf+='\u0080';while(_0x381daf[_0xd887e2]%0x40-0x38)_0x381daf+='\x00';for(_0x490c4f=0x0;_0x2767f2[_0x333a15(0x1b1)](_0x490c4f,_0x381daf[_0xd887e2]);_0x490c4f++){_0xb1c05c=_0x381daf['charCodeAt'](_0x490c4f);if(_0xb1c05c>>0x8)return;_0x405314[_0x490c4f>>0x2]|=_0xb1c05c<<_0x2767f2[_0x333a15(0x187)](0x3,_0x490c4f)%0x4*0x8;}_0x405314[_0x405314[_0xd887e2]]=_0x455790/_0x42fadb|0x0,_0x405314[_0x405314[_0xd887e2]]=_0x455790;for(_0xb1c05c=0x0;_0xb1c05c<_0x405314[_0xd887e2];){var _0x296f8f=_0x405314[_0x333a15(_0x1e0f71._0x39cadd)](_0xb1c05c,_0xb1c05c+=0x10),_0x49e26b=_0x924e91;_0x924e91=_0x924e91['slice'](0x0,0x8);for(_0x490c4f=0x0;_0x490c4f<0x40;_0x490c4f++){var _0x4db8ee=_0x296f8f[_0x490c4f-0xf],_0x3e9fcd=_0x296f8f[_0x490c4f-0x2],_0x454851=_0x924e91[0x0],_0x473e53=_0x924e91[0x4],_0x1285fd=_0x2767f2[_0x333a15(0x1ad)](_0x924e91[0x7]+(_0x3ea9cc(_0x473e53,0x6)^_0x3ea9cc(_0x473e53,0xb)^_0x3ea9cc(_0x473e53,0x19))+_0x2767f2[_0x333a15(_0x1e0f71._0x2e5fa9)](_0x473e53&_0x924e91[0x5],~_0x473e53&_0x924e91[0x6])+_0x1923a4[_0x490c4f],_0x296f8f[_0x490c4f]=_0x490c4f<0x10?_0x296f8f[_0x490c4f]:_0x296f8f[_0x490c4f-0x10]+(_0x3ea9cc(_0x4db8ee,0x7)^_0x3ea9cc(_0x4db8ee,0x12)^_0x4db8ee>>>0x3)+_0x296f8f[_0x490c4f-0x7]+_0x2767f2['xQojg'](_0x2767f2[_0x333a15(0x1ba)](_0x3ea9cc,_0x3e9fcd,0x11)^_0x3ea9cc(_0x3e9fcd,0x13),_0x3e9fcd>>>0xa)|0x0),_0x38a35=_0x2767f2[_0x333a15(_0x1e0f71._0x262321)](_0x3ea9cc(_0x454851,0x2)^_0x3ea9cc(_0x454851,0xd)^_0x2767f2[_0x333a15(_0x1e0f71._0x476dfd)](_0x3ea9cc,_0x454851,0x16),_0x454851&_0x924e91[0x1]^_0x454851&_0x924e91[0x2]^_0x924e91[0x1]&_0x924e91[0x2]);_0x924e91=[_0x1285fd+_0x38a35|0x0]['concat'](_0x924e91),_0x924e91[0x4]=_0x2767f2[_0x333a15(_0x1e0f71._0x1b091f)](_0x924e91[0x4]+_0x1285fd,0x0);}for(_0x490c4f=0x0;_0x490c4f<0x8;_0x490c4f++){_0x924e91[_0x490c4f]=_0x924e91[_0x490c4f]+_0x49e26b[_0x490c4f]|0x0;}}for(_0x490c4f=0x0;_0x490c4f<0x8;_0x490c4f++){for(_0xb1c05c=0x3;_0xb1c05c+0x1;_0xb1c05c--){var _0x32727a=_0x924e91[_0x490c4f]>>_0xb1c05c*0x8&0xff;_0x8d015d+=(_0x32727a<0x10?0x0:'')+_0x32727a[_0x333a15(_0x1e0f71._0x25cb3b)](0x10);}}return _0x8d015d;}class LicenseManager{static validate(_0x115ae4,_0x31c2e2={}){const _0x39ee86=_0x101eca;if(!_0x115ae4)return{'valid':![],'tier':null,'reason':_0x2767f2['MFjKH']};const _0x2a2265=_0x115ae4[_0x39ee86(0x1a5)](),_0x51afa7=_0x2a2265[_0x39ee86(_0x5c32a9._0x59605a)](),_0x19f3c0=_0x51afa7['split']('-'),_0x5c6651=_0x2767f2['Vnrlu'](_0x31c2e2['mockTime'],undefined)&&_0x31c2e2['mockTime']!==null?_0x31c2e2[_0x39ee86(0x1bf)]:Date[_0x39ee86(_0x5c32a9._0x1fc242)]();let _0x2e645e=0x0;_0x31c2e2[_0x39ee86(0x18b)]&&(_0x2e645e=parseInt(_0x31c2e2['storage'][_0x39ee86(0x181)]('ps_last_seen_time')||'0',0xa),(_0x31c2e2['mockTime']===undefined||_0x31c2e2[_0x39ee86(0x1bf)]===null)&&_0x31c2e2['storage']['setItem'](_0x39ee86(0x194),_0x5c6651[_0x39ee86(0x1be)]()));if((_0x31c2e2[_0x39ee86(_0x5c32a9._0x5911f2)]===undefined||_0x31c2e2['mockTime']===null)&&_0x2767f2[_0x39ee86(_0x5c32a9._0x33d0a7)](_0x5c6651,_0x2e645e)){if(_0x31c2e2[_0x39ee86(0x1c3)])_0x31c2e2[_0x39ee86(_0x5c32a9._0x1df720)]();return{'valid':![],'tier':null,'reason':'Clock\x20rollback\x20anomaly\x20detected'};}const _0x19b3a9=typeof atob!=='undefined'?atob:_0x352e15=>Buffer[_0x39ee86(0x1a6)](_0x352e15,_0x39ee86(0x1c2))['toString'](_0x39ee86(0x19f));if(_0x51afa7[_0x39ee86(_0x5c32a9._0x16ebeb)](_0x2767f2['IxFNV']))try{const _0x4f67fd=_0x2a2265['substring'](0x9),_0x12c294=_0x19b3a9(_0x4f67fd),_0x596b5a=new Uint8Array(_0x12c294[_0x39ee86(_0x5c32a9._0x1a0694)]);for(let _0x26ff0f=0x0;_0x26ff0f<_0x12c294[_0x39ee86(_0x5c32a9._0x1a0694)];_0x26ff0f++){_0x596b5a[_0x26ff0f]=_0x12c294[_0x39ee86(_0x5c32a9._0x36e398)](_0x26ff0f);}let _0x3e1d75='';for(let _0x1b8ce7=0x0;_0x1b8ce7<_0x596b5a['length'];_0x1b8ce7++){_0x3e1d75+=_0x596b5a[_0x1b8ce7][_0x39ee86(_0x5c32a9._0x416def)](0x10)[_0x39ee86(0x182)](0x2,'0');}const _0x5ae0c0=_0x2767f2['gjlwg'](BigInt,'0x'+_0x3e1d75),_0xd2095=_0x2767f2['vDwYc'](_0x5a034c,_0x5ae0c0,_0x209fd2,_0x538247),_0x2ee439=_0x4f7184(_0xd2095);if(_0x2ee439['startsWith'](_0x2767f2[_0x39ee86(_0x5c32a9._0x51056b)])){const _0x29f3a2=_0x2767f2[_0x39ee86(0x196)](parseInt,_0x2ee439[_0x39ee86(_0x5c32a9._0x37d9df)](0xb),0xa);if(!_0x2767f2[_0x39ee86(0x18c)](isNaN,_0x29f3a2)){if(_0x5c6651<_0x29f3a2)return{'valid':!![],'tier':_0x39ee86(0x1b3),'expires':_0x29f3a2};if(_0x31c2e2[_0x39ee86(0x1b4)])_0x31c2e2[_0x39ee86(_0x5c32a9._0x3b7a31)](_0x39ee86(_0x5c32a9._0x10578a));return{'valid':![],'tier':null,'reason':_0x39ee86(0x1aa)};}}}catch(_0x35b73a){return{'valid':![],'tier':null,'reason':_0x39ee86(_0x5c32a9._0x199fd5)};}if(_0x51afa7[_0x39ee86(_0x5c32a9._0x16ebeb)](_0x39ee86(_0x5c32a9._0x34a249)))try{const _0x2d60b9=_0x2a2265[_0x39ee86(_0x5c32a9._0x37d9df)](0x7),_0xeebb69=_0x2767f2[_0x39ee86(0x1c0)](_0x19b3a9,_0x2d60b9),_0x3824b3=new Uint8Array(_0xeebb69[_0x39ee86(0x1b8)]);for(let _0x578001=0x0;_0x578001<_0xeebb69[_0x39ee86(0x1b8)];_0x578001++){_0x3824b3[_0x578001]=_0xeebb69[_0x39ee86(0x195)](_0x578001);}let _0x22606a='';for(let _0x1c5b19=0x0;_0x1c5b19<_0x3824b3['length'];_0x1c5b19++){_0x22606a+=_0x3824b3[_0x1c5b19][_0x39ee86(_0x5c32a9._0x575456)](0x10)[_0x39ee86(_0x5c32a9._0x543872)](0x2,'0');}const _0x236f7c=BigInt('0x'+_0x22606a),_0x4a2b32=_0x2767f2[_0x39ee86(0x1a3)](_0x5a034c,_0x236f7c,_0x209fd2,_0x538247),_0x542897=_0x4f7184(_0x4a2b32);if(_0x542897[_0x39ee86(0x19e)](_0x39ee86(_0x5c32a9._0x5b8ee6))){const _0x439f52=_0x542897[_0x39ee86(0x1b2)]('-');if(_0x439f52[_0x39ee86(_0x5c32a9._0x1a0694)]>=0x5){const _0x259b3c=_0x439f52[0x2],_0x3d1427=parseInt(_0x439f52[0x4],0xa);if(!isNaN(_0x3d1427)){if(_0x5c6651<_0x3d1427)return{'valid':!![],'tier':_0x259b3c,'expires':_0x3d1427};if(_0x31c2e2[_0x39ee86(0x1b4)])_0x31c2e2[_0x39ee86(_0x5c32a9._0x3b7a31)](_0x2767f2['xlzqI']);return{'valid':![],'tier':null,'reason':'RSA\x20key\x20expired'};}}}}catch(_0x3567fe){return{'valid':![],'tier':null,'reason':_0x39ee86(_0x5c32a9._0x12dda9)};}if(_0x19f3c0[_0x39ee86(_0x5c32a9._0x405d08)]===0x4&&_0x19f3c0[0x0]==='PS'&&['PRO',_0x39ee86(_0x5c32a9._0x1f03bf),_0x39ee86(0x17f),_0x39ee86(_0x5c32a9._0xaa6079),'ENTERPRISE']['includes'](_0x19f3c0[0x1])){const _0x584c79=_0x19f3c0[0x1],_0x306964=_0x19f3c0[0x2],_0x44b53c=_0x19f3c0[0x3],_0x199a35='ZTDS_SALT_2026_!@#',_0x13bdd4=_0x306964+_0x199a35+_0x584c79;let _0x40469d=0x0;for(let _0x15b3fd=0x0;_0x15b3fd<_0x13bdd4[_0x39ee86(0x1b8)];_0x15b3fd++){_0x40469d+=_0x2767f2[_0x39ee86(_0x5c32a9._0x5cf373)](_0x13bdd4[_0x39ee86(_0x5c32a9._0x36e398)](_0x15b3fd),_0x15b3fd+0x1);}const _0x492120=_0x2767f2[_0x39ee86(0x18f)](_0x40469d,0x270f)['toString']()['padStart'](0x4,'0');if(_0x44b53c===_0x492120)return{'valid':!![],'tier':_0x584c79};}if(_0x2a2265[_0x39ee86(_0x5c32a9._0x56c323)](_0x39ee86(0x1af))&&_0x2a2265[_0x39ee86(_0x5c32a9._0x174c96)]('.')['length']===0x3)try{const [_0x415433,_0x3a5879,_0x3e79cf]=_0x2a2265[_0x39ee86(_0x5c32a9._0x174c96)]('.');let _0xe2bce=_0x3e79cf[_0x39ee86(_0x5c32a9._0x1b34e6)](/-/g,'+')[_0x39ee86(0x19a)](/_/g,'/');while(_0xe2bce[_0x39ee86(_0x5c32a9._0x1a0694)]%0x4)_0xe2bce+='=';const _0x36da76=_0x19b3a9(_0xe2bce);let _0x23f2fd='';for(let _0x16495d=0x0;_0x16495d<_0x36da76['length'];_0x16495d++){_0x23f2fd+=_0x36da76[_0x39ee86(_0x5c32a9._0x36e398)](_0x16495d)[_0x39ee86(0x1be)](0x10)['padStart'](0x2,'0');}const _0x48fa7c=BigInt('0x'+_0x23f2fd),_0xa48c34=_0x5a034c(_0x48fa7c,_0x209fd2,_0x538247);let _0x307fa3=_0xa48c34[_0x39ee86(0x1be)](0x10);if(_0x307fa3[_0x39ee86(_0x5c32a9._0x405d08)]%0x2!==0x0)_0x307fa3='0'+_0x307fa3;const _0x974c5a=_0xb3603d(_0x2767f2[_0x39ee86(0x197)](_0x415433+'.',_0x3a5879));if(_0x307fa3['endsWith'](_0x974c5a)){const _0x2ebafc=_0x19b3a9(_0x3a5879[_0x39ee86(_0x5c32a9._0x1b34e6)](/-/g,'+')[_0x39ee86(0x19a)](/_/g,'/')),_0x4e9f1e=JSON[_0x39ee86(0x192)](_0x2ebafc);if(_0x4e9f1e[_0x39ee86(0x1b6)]&&_0x5c6651/0x3e8<_0x4e9f1e[_0x39ee86(_0x5c32a9._0x112f8a)])return{'valid':!![],'tier':_0x4e9f1e[_0x39ee86(_0x5c32a9._0x51cd8b)]||_0x39ee86(_0x5c32a9._0xbd767c),'expires':_0x4e9f1e[_0x39ee86(_0x5c32a9._0x112f8a)]*0x3e8};else{if(_0x31c2e2[_0x39ee86(0x1b4)])_0x31c2e2['onExpired'](_0x39ee86(_0x5c32a9._0x292616));return{'valid':![],'tier':null,'reason':'JWT\x20expired'};}}}catch(_0x3b5c99){return{'valid':![],'tier':null,'reason':_0x2767f2['IjCUi']};}return{'valid':![],'tier':null,'reason':'Invalid\x20format'};}}typeof globalThis!==_0x101eca(_0x155389._0x26c7d1)&&(globalThis[_0x101eca(_0x155389._0x52df99)]=LicenseManager),typeof _0x291f75!==_0x101eca(0x1bb)&&(_0x291f75[_0x101eca(0x1a7)]=LicenseManager),typeof window!==_0x101eca(_0x155389._0xe5ab2f)&&(window[_0x101eca(_0x155389._0x52df99)]=LicenseManager),typeof exports!==_0x101eca(0x1bb)&&(typeof module!==_0x101eca(0x1bb)&&module[_0x101eca(_0x155389._0x5c9529)]&&(module[_0x101eca(0x189)]=LicenseManager),exports[_0x101eca(0x1a7)]=LicenseManager);}(typeof globalThis!==_0x5877ef(0x1bb)?globalThis:typeof window!==_0x5877ef(0x1bb)?window:this));