Advertisement
Guest User

Untitled

a guest
Jan 21st, 2019
71
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 65.63 KB | None | 0 0
  1. unsigned int __cdecl luaV_execute(int L, int nexeccalls)
  2. {
  3. _DWORD *v4; // edx
  4. __int64 v5; // xmm4_8
  5. __m128d v6; // xmm1
  6. int v7; // eax
  7. unsigned int *v8; // edi
  8. int v9; // eax
  9. _DWORD *v10; // eax
  10. _DWORD *v11; // eax
  11. int v12; // eax
  12. unsigned int v13; // edx
  13. unsigned int result; // eax
  14. char v15; // cl
  15. bool v16; // zf
  16. unsigned int v17; // ecx
  17. _DWORD *v18; // edx
  18. _DWORD *v19; // ecx
  19. int v20; // eax
  20. _DWORD *v21; // edx
  21. _DWORD *v22; // ecx
  22. unsigned int *v23; // ecx
  23. unsigned int v24; // eax
  24. unsigned int v25; // edx
  25. unsigned int v26; // eax
  26. int v27; // eax
  27. int v28; // ecx
  28. int v29; // eax
  29. _DWORD *v30; // edx
  30. _DWORD *v31; // ecx
  31. unsigned int v32; // eax
  32. int v33; // eax
  33. int v34; // eax
  34. int v35; // edx
  35. _DWORD *v36; // eax
  36. int v37; // ecx
  37. int v38; // ecx
  38. int v39; // eax
  39. int v40; // eax
  40. int v41; // ecx
  41. _DWORD *v42; // edx
  42. int v43; // eax
  43. int v44; // eax
  44. unsigned int v45; // ecx
  45. _DWORD *v46; // ecx
  46. unsigned int v47; // eax
  47. int v48; // eax
  48. int v49; // eax
  49. unsigned int v50; // edx
  50. int v51; // edx
  51. __int64 v52; // xmm3_8
  52. double v53; // xmm1_8
  53. double v54; // xmm0_8
  54. int v55; // eax
  55. __int64 v56; // xmm0_8
  56. __int64 *v57; // ST08_4
  57. int v58; // eax
  58. unsigned int v59; // edx
  59. int *v60; // edx
  60. __int64 v61; // xmm3_8
  61. double v62; // xmm2_8
  62. __int64 *v63; // eax
  63. double v64; // xmm2_8
  64. int *v65; // eax
  65. int v66; // ecx
  66. __int64 v67; // xmm3_8
  67. BOOL v68; // eax
  68. int v69; // eax
  69. __int64 *v70; // eax
  70. double v71; // xmm2_8
  71. int v72; // eax
  72. int v73; // eax
  73. unsigned int v74; // edx
  74. int v75; // edx
  75. __int64 *v76; // ST08_4
  76. int v77; // eax
  77. unsigned int v78; // edx
  78. int v79; // edx
  79. __int64 *v80; // ST08_4
  80. int v81; // eax
  81. unsigned int v82; // edx
  82. int v83; // edx
  83. __int64 v84; // xmm7_8
  84. double v85; // xmm6_8
  85. unsigned __int64 *v86; // eax
  86. double v87; // xmm5_8
  87. __m128d v88; // xmm3
  88. __m128d v89; // xmm0
  89. double v90; // xmm2_8
  90. __int64 *v91; // ST08_4
  91. int v92; // eax
  92. unsigned int v93; // edx
  93. int *v94; // edx
  94. __int128 v95; // xmm2
  95. __int64 v96; // xmm0_8
  96. __int64 v97; // ST34_8
  97. int v98; // eax
  98. int *v99; // eax
  99. int v100; // ecx
  100. __int64 v101; // xmm4_8
  101. BOOL v102; // eax
  102. int v103; // eax
  103. __int128 v104; // xmm2
  104. __int64 v105; // xmm0_8
  105. int v106; // eax
  106. unsigned int v107; // eax
  107. _DWORD *v108; // edx
  108. int v109; // eax
  109. __int64 v110; // xmm2_8
  110. BOOL v111; // eax
  111. int v112; // eax
  112. __int64 *v113; // eax
  113. double v114; // xmm0_8
  114. unsigned int v115; // eax
  115. int v116; // edx
  116. int v117; // eax
  117. unsigned int v118; // eax
  118. _DWORD *v119; // edx
  119. int v120; // eax
  120. int v121; // eax
  121. __m128i v122; // xmm0
  122. unsigned int v123; // eax
  123. unsigned int v124; // eax
  124. _DWORD *v125; // ecx
  125. unsigned int v126; // edx
  126. int v127; // esi
  127. int v128; // eax
  128. unsigned int v129; // edx
  129. int v130; // edx
  130. int v131; // ecx
  131. BOOL v132; // ecx
  132. unsigned int v133; // edx
  133. int v134; // ecx
  134. int v135; // ecx
  135. int v136; // ecx
  136. int v137; // eax
  137. int v138; // eax
  138. int v139; // ecx
  139. int v140; // ecx
  140. int v141; // eax
  141. unsigned int *v142; // eax
  142. unsigned int v143; // eax
  143. int v144; // eax
  144. int v145; // edx
  145. int v146; // eax
  146. unsigned int v147; // edx
  147. int v148; // ecx
  148. int v149; // ecx
  149. int v150; // ecx
  150. int v151; // eax
  151. int v152; // eax
  152. int v153; // ecx
  153. int v154; // eax
  154. unsigned int v155; // eax
  155. int v156; // eax
  156. int v157; // edx
  157. int v158; // eax
  158. unsigned int v159; // edx
  159. int v160; // ecx
  160. int v161; // ecx
  161. int v162; // ecx
  162. int v163; // eax
  163. int v164; // eax
  164. int v165; // ecx
  165. int v166; // eax
  166. BOOL v167; // eax
  167. unsigned int v168; // edx
  168. int v169; // edx
  169. int v170; // eax
  170. int v171; // ecx
  171. int v172; // ecx
  172. int v173; // eax
  173. int v174; // eax
  174. unsigned __int64 *v175; // eax
  175. int v176; // eax
  176. unsigned int v177; // esi
  177. unsigned __int64 *v178; // edx
  178. unsigned int v179; // edx
  179. int v180; // edx
  180. int v181; // eax
  181. int v182; // ecx
  182. int v183; // eax
  183. unsigned int v184; // esi
  184. __int16 v185; // ax
  185. int v186; // edx
  186. int v187; // eax
  187. int v188; // ST10_4
  188. int v189; // eax
  189. int v190; // edx
  190. int v191; // ST0C_4
  191. int v192; // eax
  192. unsigned int *v193; // edi
  193. _DWORD *v194; // edx
  194. unsigned int v195; // eax
  195. int v196; // edi
  196. int v197; // ecx
  197. int v198; // esi
  198. int v199; // eax
  199. int v200; // edx
  200. unsigned int *v201; // ecx
  201. int v202; // eax
  202. int v203; // eax
  203. _QWORD *v204; // eax
  204. double v205; // xmm2_8
  205. __int64 v206; // xmm4_8
  206. double v207; // xmm3_8
  207. int v208; // eax
  208. double v209; // xmm4_8
  209. bool v210; // cf
  210. int v211; // eax
  211. int v212; // edx
  212. int v213; // ecx
  213. __int64 *v214; // eax
  214. unsigned __int64 *v215; // ecx
  215. __int64 v216; // xmm3_8
  216. __int64 v217; // xmm0_8
  217. unsigned int v218; // eax
  218. double v219; // xmm2_8
  219. int v220; // esi
  220. _DWORD *v221; // ecx
  221. _DWORD *v222; // edx
  222. _DWORD *v223; // esi
  223. int v224; // edx
  224. int v225; // edx
  225. unsigned int v226; // esi
  226. int v227; // edx
  227. int v228; // edx
  228. int v229; // eax
  229. int v230; // eax
  230. int v231; // ecx
  231. int v232; // eax
  232. int v233; // edx
  233. unsigned int v234; // edx
  234. int v235; // eax
  235. unsigned int v236; // edx
  236. _DWORD *v237; // edi
  237. _DWORD *v238; // eax
  238. int v239; // ecx
  239. char v240; // al
  240. int v241; // ecx
  241. unsigned int v242; // ecx
  242. int proto; // eax MAPDST
  243. int nelems; // eax MAPDST
  244. int v245; // esi
  245. int LClosure; // eax MAPDST
  246. int v247; // edx
  247. char v248; // cl
  248. int v249; // edx
  249. int v251; // eax
  250. int v252; // eax
  251. int v253; // edx
  252. _DWORD *v254; // ecx
  253. unsigned int v255; // esi
  254. int v256; // eax
  255. unsigned int v257; // ecx
  256. int v258; // edx
  257. int v259; // eax
  258. unsigned int v260; // ST08_4
  259. int v261; // eax
  260. int v262; // edx
  261. int v263; // edx
  262. int *v264; // ecx
  263. _DWORD *v265; // edx
  264. unsigned int v266; // eax
  265. int v267; // edx
  266. int v268; // ecx
  267. int v269; // edx
  268. int v270; // eax
  269. unsigned int v271; // ecx
  270. int v272; // esi
  271. int v273; // ecx
  272. int v274; // edi
  273. _DWORD *v275; // eax
  274. _DWORD *v276; // esi
  275. int v277; // ecx
  276. int v278; // edx
  277. int v279; // esi
  278. int v280; // edx
  279. int v281; // eax
  280. int v282; // edx
  281. unsigned int *v283; // ST10_4
  282. int v284; // eax
  283. _DWORD *v285; // edx
  284. unsigned int v286; // ecx
  285. __int64 v287; // [esp-110h] [ebp-11Ch]
  286. signed int v288; // [esp-108h] [ebp-114h]
  287. int v289; // [esp-100h] [ebp-10Ch]
  288. signed int v290; // [esp-F8h] [ebp-104h]
  289. int v291; // [esp-F0h] [ebp-FCh]
  290. signed int v292; // [esp-E8h] [ebp-F4h]
  291. int v293; // [esp-E0h] [ebp-ECh]
  292. signed int v294; // [esp-D8h] [ebp-E4h]
  293. int v295; // [esp-D0h] [ebp-DCh]
  294. signed int v296; // [esp-C8h] [ebp-D4h]
  295. int v297; // [esp-C0h] [ebp-CCh]
  296. signed int v298; // [esp-B8h] [ebp-C4h]
  297. int v299; // [esp-B0h] [ebp-BCh]
  298. signed int v300; // [esp-A8h] [ebp-B4h]
  299. int v301; // [esp-A0h] [ebp-ACh]
  300. int v302; // [esp-98h] [ebp-A4h]
  301. int v303; // [esp-90h] [ebp-9Ch]
  302. int v304; // [esp-88h] [ebp-94h]
  303. int v305; // [esp-80h] [ebp-8Ch]
  304. int v306; // [esp-78h] [ebp-84h]
  305. unsigned int v307; // [esp-6Ch] [ebp-78h]
  306. unsigned int *v308; // [esp-68h] [ebp-74h]
  307. unsigned int v309; // [esp-64h] [ebp-70h]
  308. int v310; // [esp-60h] [ebp-6Ch]
  309. unsigned int *v311; // [esp-5Ch] [ebp-68h]
  310. unsigned int *v312; // [esp-58h] [ebp-64h]
  311. unsigned int *v313; // [esp-54h] [ebp-60h]
  312. int *v314; // [esp-50h] [ebp-5Ch]
  313. int v315; // [esp-4Ch] [ebp-58h]
  314. int v316; // [esp-48h] [ebp-54h]
  315. unsigned __int64 *v318; // [esp-40h] [ebp-4Ch]
  316. _DWORD *v319; // [esp-3Ch] [ebp-48h]
  317. int v320; // [esp-38h] [ebp-44h]
  318. int v321; // [esp-30h] [ebp-3Ch]
  319. int v322; // [esp-2Ch] [ebp-38h]
  320. char *v323; // [esp-28h] [ebp-34h]
  321. unsigned int *v324; // [esp-24h] [ebp-30h] MAPDST
  322. int v325; // [esp-20h] [ebp-2Ch]
  323. int v327; // [esp-18h] [ebp-24h]
  324. unsigned int v328; // [esp-14h] [ebp-20h]
  325. unsigned int v329; // [esp-10h] [ebp-1Ch]
  326. unsigned int v331; // [esp-8h] [ebp-14h]
  327. int v332; // [esp-4h] [ebp-10h]
  328. _BYTE *v334; // [esp+4h] [ebp-8h]
  329. _BYTE *retaddr; // [esp+Ch] [ebp+0h]
  330.  
  331. v334 = retaddr;
  332. v4 = (_DWORD *)(L + 20);
  333. v323 = (char *)(L + 20);
  334. v319 = (_DWORD *)(L + 24);
  335. LABEL_2:
  336. v5 = xmmword_1C72DA0;
  337. *(_QWORD *)&v6.m128d_f64[0] = qword_1C706E0;
  338. reentry:
  339. v7 = *(_DWORD *)(L + 32);
  340. v8 = (_DWORD *)((char *)v4 - *v4);
  341. v331 = *(_DWORD *)(L + 16);
  342. v321 = **(_DWORD **)(v7 + 20);
  343. v9 = (v321 + 16) ^ *(_DWORD *)(v321 + 16);
  344. v316 = v321 + 16;
  345. v327 = v9 + 8 - *(_DWORD *)(v9 + 8);
  346. v10 = (_DWORD *)(L + 24 - *(_DWORD *)(L + 24) + 52);
  347. v322 = (int)v10 + *v10;
  348. v11 = (_DWORD *)(((v321 + 16) ^ *(_DWORD *)(v321 + 16)) + 36);
  349. v310 = (int)v11 - *v11;
  350. v309 = v322 + 2;
  351. while ( 1 )
  352. {
  353. v12 = (int)v8 - v310;
  354. v307 = *v8;
  355. v13 = v322 * v307;
  356. v324 = v8;
  357. proto = (int)v8;
  358. v314 = (int *)v8;
  359. v311 = v8;
  360. v315 = (int)v8;
  361. v320 = (int)v8;
  362. v318 = (unsigned __int64 *)v8;
  363. v313 = v8;
  364. v308 = v8;
  365. v312 = v8;
  366. v325 = (int)v8;
  367. v328 = (unsigned int)v8;
  368. ++v8;
  369. result = v12 >> 2;
  370. v332 = result;
  371. nelems = (int)v8;
  372. v329 = v322 * v307;
  373. if ( v309 < 4 )
  374. return result;
  375. v15 = *(_BYTE *)(L + 56);
  376. if ( !(v15 & 0xC) )
  377. goto LABEL_10;
  378. v16 = (*(_DWORD *)(L + 112))-- == 1;
  379. if ( !v16 && !(v15 & 4) )
  380. goto LABEL_10;
  381. sub_C72FB0(L, v8);
  382. if ( *(_BYTE *)(L + 6) == 1 )
  383. break;
  384. v5 = xmmword_1C72DA0;
  385. *(_QWORD *)&v6.m128d_f64[0] = qword_1C706E0;
  386. v13 = v329;
  387. result = v332;
  388. v331 = *(_DWORD *)(L + 16);
  389. LABEL_10:
  390. LClosure = v13 >> 26;
  391. v17 = v331;
  392. if ( v13 >> 26 <= 0x25 )
  393. {
  394. switch ( LClosure )
  395. {
  396. case 0:
  397. v23 = (unsigned int *)(v331 + 16 * (unsigned __int8)(v13 >> 18));
  398. if ( !(v13 & 0x3FE00) )
  399. v8 = (unsigned int *)v328;
  400. *v23 = v13 & 0x1FF;
  401. v23[2] = 3;
  402. goto LABEL_21;
  403. case 1:
  404. nelems = v331 + 16 * (unsigned __int8)(v13 >> 18);
  405. *(_DWORD *)v323 = v323 - (char *)v8;
  406. v26 = v13 >> 9;
  407. if ( (v13 >> 9) & 0x100 )
  408. v27 = v327 + 16 * (unsigned __int8)v26;
  409. else
  410. v27 = v331 + 16 * ((v13 >> 9) & 0x1FF);
  411. sub_C6BF10(L, v331 + 16 * (v13 & 0x1FF), v27, nelems, 1);
  412. goto LABEL_27;
  413. case 2:
  414. v21 = *(_DWORD **)(*(_DWORD *)(v321 + 4 * (v13 & 0x1FF) + 20) + 8);
  415. goto LABEL_17;
  416. case 3:
  417. v298 = 7;
  418. v297 = *(_DWORD *)(v321 + 12);
  419. *(_DWORD *)v323 = v323 - (char *)v8;
  420. sub_C6C120(L, &v297, v327 + 16 * (v13 & 0x3FFFF), v331 + 16 * (unsigned __int8)(v13 >> 18));
  421. goto LABEL_27;
  422. case 4:
  423. v21 = (_DWORD *)(v327 + 16 * (v13 & 0x3FFFF));
  424. LABEL_17:
  425. v22 = (_DWORD *)(v331 + 16 * (unsigned __int8)(v329 >> 18));
  426. *v22 = *v21;
  427. v22[1] = v21[1];
  428. v22[2] = v21[2];
  429. continue;
  430. case 5:
  431. v28 = v13 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v13, 7) ^ __ROL4__(v13, 13);
  432. nelems = v331
  433. + 16
  434. * (unsigned __int8)((v13 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v13, 7) ^ __ROL4__(v13, 13)) >> 18);
  435. v29 = *(_DWORD *)(v321 + 4 * (v28 & 0x1FF) + 20);
  436. v30 = (_DWORD *)(v331
  437. + 16
  438. * (unsigned __int8)((v13 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v13, 7) ^ __ROL4__(v13, 13)) >> 18));
  439. LClosure = *(_DWORD *)(v321 + 4 * (v28 & 0x1FF) + 20);
  440. if ( (v28 & 0xFC000000) != 335544320 )
  441. continue;
  442. v31 = *(_DWORD **)(v29 + 8);
  443. *v31 = *v30;
  444. v31[1] = v30[1];
  445. v31[2] = v30[2];
  446. if ( v30[2] >= 4 && *(_BYTE *)(*v30 + 4) & 3 && *(_BYTE *)(LClosure + 4) & 4 )
  447. sub_C64F20(L, LClosure, *v30);
  448. goto LABEL_28;
  449. case 6:
  450. v18 = (_DWORD *)(v331 + 16 * (v13 & 0x1FF));
  451. v19 = (_DWORD *)(v331 + 16 * (unsigned __int8)(v329 >> 18));
  452. v16 = (v329 & 0x3FE00) == 0;
  453. *v19 = *v18;
  454. v19[1] = v18[1];
  455. v19[2] = v18[2];
  456. if ( v16 )
  457. v20 = *(_DWORD *)(L + 16);
  458. else
  459. v20 = *(_DWORD *)(L + 12);
  460. *(_DWORD *)(L + 12) = v20;
  461. continue;
  462. case 7:
  463. v24 = v331 + 16 * (unsigned __int8)(v13 >> 18);
  464. v25 = v331 + 16 * (v13 & 0x1FF);
  465. do
  466. {
  467. *(_DWORD *)(v25 + 8) = 0;
  468. v25 -= 16;
  469. }
  470. while ( v25 >= v24 );
  471. continue;
  472. case 8:
  473. v299 = *(_DWORD *)(v321 + 12);
  474. v300 = 7;
  475. *(_DWORD *)v323 = v323 - (char *)v8;
  476. sub_C6BF10(L, &v299, v327 + 16 * (v13 & 0x3FFFF), v331 + 16 * (unsigned __int8)(v13 >> 18), 1);
  477. goto LABEL_27;
  478. case 9:
  479. LClosure = v331 + 16 * (unsigned __int8)(v13 >> 18);
  480. nelems = v331 + 16 * (v13 & 0x1FF);
  481. v40 = sub_C68900(L, v331 + 16 * (v13 & 0x1FF));
  482. v41 = nelems;
  483. v42 = (_DWORD *)LClosure;
  484. v16 = *(_DWORD *)(v40 + 8) == 6;
  485. v43 = *(_DWORD *)nelems;
  486. if ( v16 )
  487. {
  488. *(_DWORD *)LClosure = v43;
  489. v42[1] = *(_DWORD *)(v41 + 4);
  490. v44 = *(_DWORD *)(v41 + 8);
  491. v45 = v329 >> 9;
  492. v42[2] = v44;
  493. if ( v45 & 0x100 )
  494. v46 = (_DWORD *)(v327 + 16 * (unsigned __int8)v45);
  495. else
  496. v46 = (_DWORD *)(v331 + 16 * (v45 & 0x1FF));
  497. v42[4] = *v46;
  498. v42[5] = v46[1];
  499. v42[6] = v46[2];
  500. goto LABEL_28;
  501. }
  502. *(_DWORD *)(LClosure + 16) = v43;
  503. v42[5] = *(_DWORD *)(v41 + 4);
  504. v42[6] = *(_DWORD *)(v41 + 8);
  505. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  506. v47 = v329 >> 9;
  507. if ( (v329 >> 9) & 0x100 )
  508. v48 = v327 + 16 * (unsigned __int8)v47;
  509. else
  510. v48 = v331 + 16 * ((v329 >> 9) & 0x1FF);
  511. sub_C6BF10(L, v41, v48, v42, 1);
  512. goto LABEL_27;
  513. case 10:
  514. LClosure = v331 + 16 * (unsigned __int8)(v13 >> 18);
  515. if ( v13 & 0x100 )
  516. v77 = v327 + 16 * (unsigned __int8)v13;
  517. else
  518. v77 = v331 + 16 * (v13 & 0x1FF);
  519. v78 = v13 >> 9;
  520. nelems = v77;
  521. if ( v78 & 0x100 )
  522. v79 = v327 + 16 * (unsigned __int8)v78;
  523. else
  524. v79 = v331 + 16 * (v78 & 0x1FF);
  525. if ( *(_DWORD *)(v77 + 8) == 2 && *(_DWORD *)(v79 + 8) == 2 )
  526. {
  527. v52 = xmmword_1FC2B20;
  528. v54 = COERCE_DOUBLE(*(_QWORD *)v77 ^ xmmword_1FC2B20) / COERCE_DOUBLE(*(_QWORD *)v79 ^ xmmword_1FC2B20);
  529. goto LABEL_71;
  530. }
  531. v80 = (__int64 *)nelems;
  532. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  533. sub_C61690(L, LClosure, v80, (__int64 *)v79, 7);
  534. goto LABEL_27;
  535. case 11:
  536. v325 = v331 + 16 * (unsigned __int8)(v13 >> 18);
  537. if ( v13 & 0x100 )
  538. v58 = v327 + 16 * (unsigned __int8)v13;
  539. else
  540. v58 = v331 + 16 * (v13 & 0x1FF);
  541. v59 = v13 >> 9;
  542. v328 = v58;
  543. if ( v59 & 0x100 )
  544. v60 = (int *)(v327 + 16 * (unsigned __int8)v59);
  545. else
  546. v60 = (int *)(v331 + 16 * (v59 & 0x1FF));
  547. v16 = *(_DWORD *)(v58 + 8) == 2;
  548. v329 = (unsigned int)v60;
  549. if ( v16 && v60[2] == 2 )
  550. {
  551. v61 = xmmword_1FC2B20;
  552. *(_QWORD *)&v62 = *(_QWORD *)v58 ^ xmmword_1FC2B20;
  553. v63 = (__int64 *)v325;
  554. v64 = v62 - COERCE_DOUBLE(*(_QWORD *)v60 ^ xmmword_1FC2B20);
  555. *(_QWORD *)&v6.m128d_f64[0] = qword_1C706E0;
  556. *(_DWORD *)(v325 + 8) = 2;
  557. *v63 = *(_QWORD *)&v64 ^ v61;
  558. continue;
  559. }
  560. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  561. v65 = (int *)v328;
  562. v66 = *(_DWORD *)(v328 + 8);
  563. if ( v66 == 2 )
  564. {
  565. v67 = xmmword_1FC2B20;
  566. }
  567. else
  568. {
  569. if ( v66 != 4 )
  570. goto LABEL_94;
  571. v68 = sub_C68560((unsigned __int8 *)(*(_DWORD *)v328 + 24), (double *)&v306);
  572. v60 = (int *)v329;
  573. if ( !v68 )
  574. goto LABEL_94;
  575. v65 = &v295;
  576. v67 = xmmword_1FC2B20;
  577. v296 = 2;
  578. *(_QWORD *)&v295 = *(_QWORD *)&v306 ^ xmmword_1FC2B20;
  579. }
  580. nelems = (int)v65;
  581. v69 = v60[2];
  582. if ( v69 == 2 )
  583. goto LABEL_92;
  584. if ( v69 == 4 )
  585. {
  586. if ( sub_C68560((unsigned __int8 *)(*v60 + 24), (double *)&v305) )
  587. {
  588. v60 = &v293;
  589. v67 = xmmword_1FC2B20;
  590. v294 = 2;
  591. *(_QWORD *)&v293 = *(_QWORD *)&v305 ^ xmmword_1FC2B20;
  592. LABEL_92:
  593. v70 = (__int64 *)v325;
  594. v71 = COERCE_DOUBLE(*(_QWORD *)nelems ^ v67) - COERCE_DOUBLE(*(_QWORD *)v60 ^ v67);
  595. *(_DWORD *)(v325 + 8) = 2;
  596. *v70 = *(_QWORD *)&v71 ^ v67;
  597. goto LABEL_27;
  598. }
  599. v60 = (int *)v329;
  600. }
  601. LABEL_94:
  602. v72 = sub_C62AA0(L, v328, v60, v325, 11);
  603. goto LABEL_95;
  604. case 12:
  605. LClosure = v331 + 16 * (unsigned __int8)(v13 >> 18);
  606. if ( v13 & 0x100 )
  607. v81 = v327 + 16 * (unsigned __int8)v13;
  608. else
  609. v81 = v331 + 16 * (v13 & 0x1FF);
  610. v82 = v13 >> 9;
  611. nelems = v81;
  612. if ( v82 & 0x100 )
  613. v83 = v327 + 16 * (unsigned __int8)v82;
  614. else
  615. v83 = v331 + 16 * (v82 & 0x1FF);
  616. if ( *(_DWORD *)(v81 + 8) == 2 && *(_DWORD *)(v83 + 8) == 2 )
  617. {
  618. v84 = xmmword_1FC2B20;
  619. *(_QWORD *)&v85 = *(_QWORD *)v81 ^ xmmword_1FC2B20;
  620. v86 = (unsigned __int64 *)LClosure;
  621. *(_QWORD *)&v87 = *(_QWORD *)v83 ^ xmmword_1FC2B20;
  622. *(_DWORD *)(LClosure + 8) = 2;
  623. *(_QWORD *)&v88.m128d_f64[0] = qword_1C706F0 & COERCE_UNSIGNED_INT64(v85 / v87);
  624. *(_QWORD *)&v89.m128d_f64[0] = COERCE_UNSIGNED_INT64(v85 / v87) ^ *(_QWORD *)&v88.m128d_f64[0];
  625. *(_QWORD *)&v89.m128d_f64[0] = (unsigned __int128)_mm_cmplt_sd(v89, v6);
  626. v90 = v85 / v87
  627. + COERCE_DOUBLE(*(_QWORD *)&v6.m128d_f64[0] & *(_QWORD *)&v89.m128d_f64[0] | *(_QWORD *)&v88.m128d_f64[0])
  628. - COERCE_DOUBLE(*(_QWORD *)&v6.m128d_f64[0] & *(_QWORD *)&v89.m128d_f64[0] | *(_QWORD *)&v88.m128d_f64[0]);
  629. v89.m128d_f64[0] = v90 - v85 / v87;
  630. *v86 = COERCE_UNSIGNED_INT64(
  631. v85
  632. - (v90 - COERCE_DOUBLE(*(unsigned __int128 *)&_mm_cmpgt_sd(v89, v88) & *(_QWORD *)&qword_1C706D0))
  633. * v87) ^ v84;
  634. goto LABEL_28;
  635. }
  636. v91 = (__int64 *)nelems;
  637. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  638. sub_C61690(L, LClosure, v91, (__int64 *)v83, 9);
  639. goto LABEL_27;
  640. case 13:
  641. nelems = v13 & 0x1FF;
  642. v34 = (v13 >> 9) & 0x1FF;
  643. LClosure = v331 + 16 * (unsigned __int8)(v13 >> 18);
  644. if ( (unsigned __int8)(v13 >> 9) >> 3 )
  645. v34 = (((v13 >> 9) & 7) + 8) << (((unsigned __int8)(v13 >> 9) >> 3) - 1);
  646. v35 = nelems;
  647. if ( (unsigned __int8)nelems >> 3 )
  648. v35 = ((nelems & 7) + 8) << (((unsigned __int8)nelems >> 3) - 1);
  649. v36 = sub_C66AF0(L, v35, v34);
  650. v37 = LClosure;
  651. *(_DWORD *)LClosure = v36;
  652. *(_DWORD *)(v37 + 8) = 7;
  653. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  654. v38 = L + 24 - *(_DWORD *)(L + 24);
  655. v39 = L + 24 - *(_DWORD *)(L + 24);
  656. goto LABEL_50;
  657. case 14:
  658. v325 = v331 + 16 * (unsigned __int8)(v13 >> 18);
  659. if ( v13 & 0x100 )
  660. v92 = v327 + 16 * (unsigned __int8)v13;
  661. else
  662. v92 = v331 + 16 * (v13 & 0x1FF);
  663. v93 = v13 >> 9;
  664. v328 = v92;
  665. if ( v93 & 0x100 )
  666. v94 = (int *)(v327 + 16 * (unsigned __int8)v93);
  667. else
  668. v94 = (int *)(v331 + 16 * (v93 & 0x1FF));
  669. v16 = *(_DWORD *)(v92 + 8) == 2;
  670. v329 = (unsigned int)v94;
  671. if ( v16 && v94[2] == 2 )
  672. {
  673. v95 = *(unsigned __int64 *)v94;
  674. v96 = *(_QWORD *)v92 ^ xmmword_1FC2B20;
  675. v97 = xmmword_1FC2B20;
  676. sub_159DFB8();
  677. v98 = v325;
  678. *(_QWORD *)v325 = v96 ^ v97;
  679. *(_DWORD *)(v98 + 8) = 2;
  680. goto LABEL_28;
  681. }
  682. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  683. v99 = (int *)v328;
  684. v100 = *(_DWORD *)(v328 + 8);
  685. if ( v100 == 2 )
  686. {
  687. v101 = xmmword_1FC2B20;
  688. }
  689. else
  690. {
  691. if ( v100 != 4 )
  692. goto LABEL_147;
  693. v102 = sub_C68560((unsigned __int8 *)(*(_DWORD *)v328 + 24), (double *)&v304);
  694. v94 = (int *)v329;
  695. if ( !v102 )
  696. goto LABEL_147;
  697. v99 = &v291;
  698. v101 = xmmword_1FC2B20;
  699. v292 = 2;
  700. *(_QWORD *)&v291 = *(_QWORD *)&v304 ^ xmmword_1FC2B20;
  701. }
  702. nelems = (int)v99;
  703. v103 = v94[2];
  704. if ( v103 == 2 )
  705. goto LABEL_145;
  706. if ( v103 == 4 )
  707. {
  708. if ( sub_C68560((unsigned __int8 *)(*v94 + 24), (double *)&v303) )
  709. {
  710. v94 = &v289;
  711. v101 = xmmword_1FC2B20;
  712. v290 = 2;
  713. *(_QWORD *)&v289 = *(_QWORD *)&v303 ^ xmmword_1FC2B20;
  714. LABEL_145:
  715. v104 = *(unsigned __int64 *)v94;
  716. v105 = *(_QWORD *)nelems ^ v101;
  717. sub_159DFB8();
  718. v106 = v325;
  719. *(_QWORD *)v325 = v105 ^ xmmword_1FC2B20;
  720. *(_DWORD *)(v106 + 8) = 2;
  721. goto LABEL_27;
  722. }
  723. v94 = (int *)v329;
  724. }
  725. LABEL_147:
  726. v72 = sub_C62AA0(L, v328, v94, v325, 12);
  727. LABEL_95:
  728. if ( !v72 )
  729. sub_C664E0(L, (__int64 *)v328, (__int64 *)v329);
  730. goto LABEL_27;
  731. case 15:
  732. nelems = v331 + 16 * (unsigned __int8)(v13 >> 18);
  733. *(_DWORD *)v323 = v323 - (char *)v8;
  734. v32 = v13 >> 9;
  735. if ( (v13 >> 9) & 0x100 )
  736. v33 = v327 + 16 * (unsigned __int8)v32;
  737. else
  738. v33 = v331 + 16 * ((v13 >> 9) & 0x1FF);
  739. if ( v13 & 0x100 )
  740. sub_C6C120(L, nelems, v327 + 16 * (unsigned __int8)v13, v33);
  741. else
  742. sub_C6C120(L, nelems, v331 + 16 * (v13 & 0x1FF), v33);
  743. goto LABEL_27;
  744. case 16:
  745. LClosure = v331 + 16 * (unsigned __int8)(v13 >> 18);
  746. if ( v13 & 0x100 )
  747. v49 = v327 + 16 * (unsigned __int8)v13;
  748. else
  749. v49 = v331 + 16 * (v13 & 0x1FF);
  750. v50 = v13 >> 9;
  751. nelems = v49;
  752. if ( v50 & 0x100 )
  753. v51 = v327 + 16 * (unsigned __int8)v50;
  754. else
  755. v51 = v331 + 16 * (v50 & 0x1FF);
  756. if ( *(_DWORD *)(v49 + 8) == 2 && *(_DWORD *)(v51 + 8) == 2 )
  757. {
  758. v52 = xmmword_1FC2B20;
  759. v53 = COERCE_DOUBLE(*(_QWORD *)v51 ^ xmmword_1FC2B20) + COERCE_DOUBLE(*(_QWORD *)v49 ^ xmmword_1FC2B20);
  760. goto LABEL_70;
  761. }
  762. v57 = (__int64 *)nelems;
  763. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  764. sub_C61690(L, LClosure, v57, (__int64 *)v51, 8);
  765. goto LABEL_27;
  766. case 17:
  767. LClosure = v331 + 16 * (unsigned __int8)(v13 >> 18);
  768. if ( v13 & 0x100 )
  769. v73 = v327 + 16 * (unsigned __int8)v13;
  770. else
  771. v73 = v331 + 16 * (v13 & 0x1FF);
  772. v74 = v13 >> 9;
  773. nelems = v73;
  774. if ( v74 & 0x100 )
  775. v75 = v327 + 16 * (unsigned __int8)v74;
  776. else
  777. v75 = v331 + 16 * (v74 & 0x1FF);
  778. if ( *(_DWORD *)(v73 + 8) != 2 || *(_DWORD *)(v75 + 8) != 2 )
  779. {
  780. v76 = (__int64 *)nelems;
  781. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  782. sub_C61690(L, LClosure, v76, (__int64 *)v75, 6);
  783. goto LABEL_27;
  784. }
  785. v52 = xmmword_1FC2B20;
  786. v53 = COERCE_DOUBLE(*(_QWORD *)v75 ^ xmmword_1FC2B20) * COERCE_DOUBLE(*(_QWORD *)v73 ^ xmmword_1FC2B20);
  787. LABEL_70:
  788. v54 = v53;
  789. LABEL_71:
  790. v55 = LClosure;
  791. v56 = *(_QWORD *)&v54 ^ v52;
  792. goto LABEL_72;
  793. case 18:
  794. v118 = v13 >> 18;
  795. v119 = (_DWORD *)(v331 + 16 * (v13 & 0x1FF));
  796. v329 = (unsigned int)v119;
  797. v328 = v331 + 16 * (unsigned __int8)v118;
  798. v120 = v119[2];
  799. if ( v120 == 4 )
  800. {
  801. v124 = v328;
  802. *(_QWORD *)v328 = COERCE_UNSIGNED_INT64((double)(unsigned int)(*(_DWORD *)(*v119 + 16) - (*v119 + 16))) ^ xmmword_1FC2B20;
  803. *(_QWORD *)&v6.m128d_f64[0] = qword_1C706E0;
  804. *(_DWORD *)(v124 + 8) = 2;
  805. continue;
  806. }
  807. if ( v120 == 7 )
  808. {
  809. v122 = _mm_cvtsi32_si128(sub_C66970(*v119));
  810. v123 = v328;
  811. *(_QWORD *)v328 = *(unsigned __int128 *)&_mm_cvtepi32_pd(v122) ^ xmmword_1FC2B20;
  812. *(_DWORD *)(v123 + 8) = 2;
  813. goto LABEL_28;
  814. }
  815. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  816. v121 = sub_C689E0(L, v119, 14);
  817. if ( !*(_DWORD *)(v121 + 8) )
  818. {
  819. v121 = sub_C689E0(L, &unk_1CAC650, 14);
  820. if ( !*(_DWORD *)(v121 + 8) )
  821. {
  822. v324 = (unsigned int *)((char *)&stru_1F13D00.toState + 2);
  823. sub_C66720(L, v329, &stru_1F13D00.toState - 629010);
  824. }
  825. }
  826. sub_C629E0(L, v328, v121, v329, &unk_1CAC650);
  827. goto LABEL_27;
  828. case 19:
  829. v127 = L;
  830. *(_DWORD *)v323 = v323 - (char *)v8;
  831. v143 = v13 >> 9;
  832. if ( (v13 >> 9) & 0x100 )
  833. v144 = v327 + 16 * (unsigned __int8)v143;
  834. else
  835. v144 = v331 + 16 * ((v13 >> 9) & 0x1FF);
  836. if ( v13 & 0x100 )
  837. v145 = v327 + 16 * (unsigned __int8)v13;
  838. else
  839. v145 = v331 + 16 * (v13 & 0x1FF);
  840. v146 = sub_C6C090(L, v145, v144);
  841. if ( v146 != (unsigned __int8)(v329 >> 18) )
  842. goto LABEL_215;
  843. v147 = v322 * *v8;
  844. v148 = v332++ + 1;
  845. v328 = v147 >> 26;
  846. switch ( v147 >> 26 )
  847. {
  848. case 5u:
  849. v149 = v147 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v147, 7) ^ __ROL4__(v147, 13);
  850. break;
  851. case 0x14u:
  852. v149 = v147 ^ -10065 * v332 & 0x3FFFF ^ __ROR4__(v147, 6) ^ __ROL4__(v147, 9);
  853. break;
  854. case 0x1Bu:
  855. case 0x22u:
  856. v150 = v147 * ((_DWORD)&stru_1F3D89C + v148 + 19) - (_DWORD)&unk_1C0BCC3;
  857. v152 = v332 * v147 - 5512095;
  858. goto LABEL_229;
  859. case 0x1Fu:
  860. v150 = v148 - 29799480 * v147 - 5512095;
  861. v151 = 32757935 * v147;
  862. goto LABEL_228;
  863. case 0x25u:
  864. v150 = 32757935 * v147 + v148 - 29408451;
  865. v151 = 9837702 * v147;
  866. LABEL_228:
  867. v152 = v332 + v151;
  868. LABEL_229:
  869. v149 = (v328 << 26) | (v152 ^ v150) & 0x3FFFFFF;
  870. break;
  871. default:
  872. v149 = v147;
  873. break;
  874. }
  875. if ( (v149 & 0xFC000000) != 1342177280 )
  876. goto LABEL_215;
  877. nelems = v147 >> 26;
  878. switch ( v147 >> 26 )
  879. {
  880. case 5u:
  881. v142 = v308;
  882. v139 = v147 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v147, 7) ^ __ROL4__(v147, 13);
  883. break;
  884. case 0x14u:
  885. v142 = v308;
  886. v139 = v147 ^ -10065 * v332 & 0x3FFFF ^ __ROR4__(v147, 6) ^ __ROL4__(v147, 9);
  887. break;
  888. case 0x1Bu:
  889. case 0x22u:
  890. v142 = v308;
  891. v139 = (v147 >> 26 << 26) | ((v332 * v147 - 5512095) ^ (v147 * ((_DWORD)&stru_1F3D89C + v332 + 19)
  892. - (_DWORD)&unk_1C0BCC3)) & 0x3FFFFFF;
  893. break;
  894. case 0x1Fu:
  895. v153 = v332 - 29799480 * v147 - 5512095;
  896. v154 = v332 + 32757935 * v147;
  897. goto LABEL_238;
  898. case 0x25u:
  899. v153 = 32757935 * v147 + v332 - 29408451;
  900. v154 = v332 + 9837702 * v147;
  901. LABEL_238:
  902. v139 = (nelems << 26) | (v154 ^ v153) & 0x3FFFFFF;
  903. v142 = v308;
  904. break;
  905. default:
  906. v142 = v308;
  907. v139 = v147;
  908. break;
  909. }
  910. goto LABEL_212;
  911. case 20:
  912. v329 = __ROR4__(v13, 6) ^ __ROL4__(v13, 9);
  913. v329 ^= -10065 * v332 & 0x3FFFF;
  914. v329 ^= v13;
  915. if ( (v329 & 0xFC000000) != 1342177280 )
  916. continue;
  917. v8 = (unsigned int *)(v325 - 524280 + 4 * (v329 & 0x3FFFF));
  918. if ( retaddr - (_BYTE *)sub_8F1000 < (unsigned int)&loc_F9B1C0
  919. || retaddr - (_BYTE *)sub_2347000 < (unsigned int)&loc_C5705A + 6 )
  920. {
  921. goto LABEL_28;
  922. }
  923. dword_20E46C8 |= 0x200000u;
  924. LODWORD(qword_20E4698) = qword_20E4698 | 0x100000;
  925. dword_20E7A94 = 0;
  926. continue;
  927. case 21:
  928. v127 = L;
  929. *(_DWORD *)v323 = v323 - (char *)v8;
  930. v155 = v13 >> 9;
  931. if ( (v13 >> 9) & 0x100 )
  932. v156 = v327 + 16 * (unsigned __int8)v155;
  933. else
  934. v156 = v331 + 16 * ((v13 >> 9) & 0x1FF);
  935. if ( v13 & 0x100 )
  936. v157 = v327 + 16 * (unsigned __int8)v13;
  937. else
  938. v157 = v331 + 16 * (v13 & 0x1FF);
  939. v158 = sub_C64BB0(L, v157, v156);
  940. if ( v158 != (unsigned __int8)(v329 >> 18) )
  941. goto LABEL_215;
  942. v159 = v322 * *v8;
  943. v160 = v332++ + 1;
  944. v328 = v159 >> 26;
  945. switch ( v159 >> 26 )
  946. {
  947. case 5u:
  948. v161 = v159 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v159, 7) ^ __ROL4__(v159, 13);
  949. break;
  950. case 0x14u:
  951. v161 = v159 ^ -10065 * v332 & 0x3FFFF ^ __ROR4__(v159, 6) ^ __ROL4__(v159, 9);
  952. break;
  953. case 0x1Bu:
  954. case 0x22u:
  955. v162 = v159 * ((_DWORD)&stru_1F3D89C + v160 + 19) - (_DWORD)&unk_1C0BCC3;
  956. v164 = v332 * v159 - 5512095;
  957. goto LABEL_254;
  958. case 0x1Fu:
  959. v162 = v160 - 29799480 * v159 - 5512095;
  960. v163 = 32757935 * v159;
  961. goto LABEL_253;
  962. case 0x25u:
  963. v162 = 32757935 * v159 + v160 - 29408451;
  964. v163 = 9837702 * v159;
  965. LABEL_253:
  966. v164 = v332 + v163;
  967. LABEL_254:
  968. v161 = (v328 << 26) | (v164 ^ v162) & 0x3FFFFFF;
  969. break;
  970. default:
  971. v161 = v159;
  972. break;
  973. }
  974. if ( (v161 & 0xFC000000) != 1342177280 )
  975. goto LABEL_215;
  976. nelems = v159 >> 26;
  977. switch ( v159 >> 26 )
  978. {
  979. case 5u:
  980. v142 = v313;
  981. v139 = v159 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v159, 7) ^ __ROL4__(v159, 13);
  982. break;
  983. case 0x14u:
  984. v142 = v313;
  985. v139 = v159 ^ -10065 * v332 & 0x3FFFF ^ __ROR4__(v159, 6) ^ __ROL4__(v159, 9);
  986. break;
  987. case 0x1Bu:
  988. case 0x22u:
  989. v142 = v313;
  990. v139 = (v159 >> 26 << 26) | ((v332 * v159 - 5512095) ^ (v159 * ((_DWORD)&stru_1F3D89C + v332 + 19)
  991. - (_DWORD)&unk_1C0BCC3)) & 0x3FFFFFF;
  992. break;
  993. case 0x1Fu:
  994. v165 = v332 - 29799480 * v159 - 5512095;
  995. v166 = v332 + 32757935 * v159;
  996. goto LABEL_263;
  997. case 0x25u:
  998. v165 = 32757935 * v159 + v332 - 29408451;
  999. v166 = v332 + 9837702 * v159;
  1000. LABEL_263:
  1001. v139 = (nelems << 26) | (v166 ^ v165) & 0x3FFFFFF;
  1002. v142 = v313;
  1003. break;
  1004. default:
  1005. v142 = v313;
  1006. v139 = v159;
  1007. break;
  1008. }
  1009. goto LABEL_212;
  1010. case 22:
  1011. v115 = v13;
  1012. v116 = 2 * (v13 & 0x1FF);
  1013. v117 = 2 * (unsigned __int8)(v115 >> 18);
  1014. if ( *(_DWORD *)(v331 + 8 * v116 + 8)
  1015. && (*(_DWORD *)(v331 + 8 * v116 + 8) != 3 || *(_DWORD *)(v331 + 8 * v116)) )
  1016. {
  1017. *(_DWORD *)(v331 + 8 * v117 + 8) = 3;
  1018. *(_DWORD *)(v17 + 8 * v117) = 0;
  1019. }
  1020. else
  1021. {
  1022. *(_DWORD *)(v331 + 8 * v117 + 8) = 3;
  1023. *(_DWORD *)(v17 + 8 * v117) = 1;
  1024. }
  1025. continue;
  1026. case 23:
  1027. v167 = !*(_DWORD *)(v331 + 16 * (unsigned __int8)(v13 >> 18) + 8)
  1028. || *(_DWORD *)(v331 + 16 * (unsigned __int8)(v13 >> 18) + 8) == 3
  1029. && !*(_DWORD *)(v331 + 16 * (unsigned __int8)(v13 >> 18));
  1030. if ( v167 == ((v13 >> 9) & 0x1FF) )
  1031. goto LABEL_21;
  1032. v168 = v322 * *v8;
  1033. ++v332;
  1034. v329 = v168;
  1035. v328 = v168 >> 26;
  1036. switch ( v168 >> 26 )
  1037. {
  1038. case 5u:
  1039. v168 = v329 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v329, 7) ^ __ROL4__(v168, 13);
  1040. break;
  1041. case 0x14u:
  1042. v168 = v329 ^ -10065 * v332 & 0x3FFFF ^ __ROR4__(v329, 6) ^ __ROL4__(v168, 9);
  1043. break;
  1044. case 0x1Bu:
  1045. case 0x22u:
  1046. v169 = v329 * ((_DWORD)&stru_1F3D89C + v332 + 19) - (_DWORD)&unk_1C0BCC3;
  1047. v170 = v332 * v329 - 5512095;
  1048. goto LABEL_279;
  1049. case 0x1Fu:
  1050. v169 = v332 - 29799480 * v168 - 5512095;
  1051. v170 = v332 + 32757935 * v329;
  1052. goto LABEL_279;
  1053. case 0x25u:
  1054. v169 = 32757935 * v168 + v332 - 29408451;
  1055. v170 = v332 + 9837702 * v329;
  1056. LABEL_279:
  1057. v168 = (v328 << 26) | (v170 ^ v169) & 0x3FFFFFF;
  1058. break;
  1059. default:
  1060. break;
  1061. }
  1062. if ( (v168 & 0xFC000000) != 1342177280 )
  1063. goto LABEL_21;
  1064. nelems = v329 >> 26;
  1065. switch ( v329 >> 26 )
  1066. {
  1067. case 5u:
  1068. v171 = v329 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v329, 7) ^ __ROL4__(v329, 13);
  1069. break;
  1070. case 0x14u:
  1071. v171 = v329 ^ -10065 * v332 & 0x3FFFF ^ __ROR4__(v329, 6) ^ __ROL4__(v329, 9);
  1072. break;
  1073. case 0x1Bu:
  1074. case 0x22u:
  1075. v171 = (v329 >> 26 << 26) | ((v332 * v329 - 5512095) ^ (v329 * ((_DWORD)&stru_1F3D89C + v332 + 19)
  1076. - (_DWORD)&unk_1C0BCC3)) & 0x3FFFFFF;
  1077. break;
  1078. case 0x1Fu:
  1079. v172 = v332 - 29799480 * v329 - 5512095;
  1080. v173 = v332 + 32757935 * v329;
  1081. goto LABEL_285;
  1082. case 0x25u:
  1083. v172 = 32757935 * v329 + v332 - 29408451;
  1084. v173 = v332 + 9837702 * v329;
  1085. LABEL_285:
  1086. v171 = (nelems << 26) | (v173 ^ v172) & 0x3FFFFFF;
  1087. break;
  1088. default:
  1089. v171 = v329;
  1090. break;
  1091. }
  1092. v174 = (int)v318;
  1093. goto LABEL_290;
  1094. case 24:
  1095. v107 = v13;
  1096. v108 = (_DWORD *)(v331 + 16 * (v13 & 0x1FF));
  1097. v55 = v331 + 16 * (unsigned __int8)(v107 >> 18);
  1098. v329 = (unsigned int)v108;
  1099. LClosure = v55;
  1100. if ( v108[2] != 2 )
  1101. {
  1102. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  1103. v109 = v108[2];
  1104. if ( v109 == 2 )
  1105. {
  1106. v110 = xmmword_1FC2B20;
  1107. nelems = (int)v108;
  1108. LABEL_155:
  1109. v112 = v108[2];
  1110. if ( v112 == 2 )
  1111. goto LABEL_159;
  1112. if ( v112 == 4 )
  1113. {
  1114. if ( sub_C68560((unsigned __int8 *)(*v108 + 24), (double *)&v301) )
  1115. {
  1116. v110 = xmmword_1FC2B20;
  1117. LABEL_159:
  1118. v5 = xmmword_1C72DA0;
  1119. v113 = (__int64 *)LClosure;
  1120. v114 = COERCE_DOUBLE(*(_QWORD *)nelems ^ v110 ^ xmmword_1C72DA0);
  1121. *(_QWORD *)&v6.m128d_f64[0] = qword_1C706E0;
  1122. *(_DWORD *)(LClosure + 8) = 2;
  1123. *v113 = *(_QWORD *)&v114 ^ v110;
  1124. v331 = *(_DWORD *)(L + 16);
  1125. continue;
  1126. }
  1127. v108 = (_DWORD *)v329;
  1128. }
  1129. }
  1130. else if ( v109 == 4 )
  1131. {
  1132. v111 = sub_C68560((unsigned __int8 *)(*v108 + 24), (double *)&v302);
  1133. v108 = (_DWORD *)v329;
  1134. if ( v111 )
  1135. {
  1136. v110 = xmmword_1FC2B20;
  1137. v288 = 2;
  1138. v287 = *(_QWORD *)&v302 ^ xmmword_1FC2B20;
  1139. nelems = (int)&v287;
  1140. goto LABEL_155;
  1141. }
  1142. }
  1143. if ( !sub_C62AA0(L, v108, v108, LClosure, 10) )
  1144. sub_C664E0(L, (__int64 *)v329, (__int64 *)v329);
  1145. v5 = xmmword_1C72DA0;
  1146. *(_QWORD *)&v6.m128d_f64[0] = qword_1C706E0;
  1147. v331 = *(_DWORD *)(L + 16);
  1148. continue;
  1149. }
  1150. v56 = *(_QWORD *)v108 ^ xmmword_1FC2B20 ^ v5 ^ xmmword_1FC2B20;
  1151. LABEL_72:
  1152. *(_QWORD *)&v6.m128d_f64[0] = qword_1C706E0;
  1153. *(_QWORD *)v55 = v56;
  1154. *(_DWORD *)(v55 + 8) = 2;
  1155. continue;
  1156. case 25:
  1157. v328 = v13 & 0x1FF;
  1158. *(_DWORD *)v323 = v323 - (char *)v8;
  1159. sub_C68C20(L, ((v13 >> 9) & 0x1FF) - (v13 & 0x1FF) + 1, (v13 >> 9) & 0x1FF);
  1160. if ( *(_DWORD *)(L + 24 - *(_DWORD *)(L + 24) + 76) >= *(_DWORD *)(L + 24 - *(_DWORD *)(L + 24) + 72) )
  1161. sub_C652E0(L);
  1162. v331 = *(_DWORD *)(L + 16);
  1163. v328 = v331 + 16 * v328;
  1164. v125 = (_DWORD *)(v331 + 16 * (unsigned __int8)(v329 >> 18));
  1165. v126 = v328;
  1166. *v125 = *(_DWORD *)v328;
  1167. v125[1] = *(_DWORD *)(v126 + 4);
  1168. v125[2] = *(_DWORD *)(v126 + 8);
  1169. goto LABEL_28;
  1170. case 26:
  1171. v127 = L;
  1172. if ( v13 & 0x100 )
  1173. v128 = v327 + 16 * (unsigned __int8)v13;
  1174. else
  1175. v128 = v331 + 16 * (v13 & 0x1FF);
  1176. v129 = v13 >> 9;
  1177. nelems = v128;
  1178. if ( v129 & 0x100 )
  1179. v130 = v327 + 16 * (unsigned __int8)v129;
  1180. else
  1181. v130 = v331 + 16 * (v129 & 0x1FF);
  1182. v131 = nelems;
  1183. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  1184. v132 = *(_DWORD *)(v131 + 8) == *(_DWORD *)(v130 + 8) && sub_C69060(L, v131, v130);
  1185. if ( v132 == (unsigned __int8)(v329 >> 18) )
  1186. {
  1187. v133 = v322 * *v8;
  1188. v134 = v332++ + 1;
  1189. v328 = v133 >> 26;
  1190. switch ( v133 >> 26 )
  1191. {
  1192. case 5u:
  1193. v135 = v133 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v133, 7) ^ __ROL4__(v133, 13);
  1194. break;
  1195. case 0x14u:
  1196. v135 = v133 ^ -10065 * v332 & 0x3FFFF ^ __ROR4__(v133, 6) ^ __ROL4__(v133, 9);
  1197. break;
  1198. case 0x1Bu:
  1199. case 0x22u:
  1200. v136 = v133 * ((_DWORD)&stru_1F3D89C + v134 + 19) - (_DWORD)&unk_1C0BCC3;
  1201. v138 = v133 * v332 - 5512095;
  1202. goto LABEL_198;
  1203. case 0x1Fu:
  1204. v136 = v134 - 29799480 * v133 - 5512095;
  1205. v137 = 32757935 * v133;
  1206. goto LABEL_197;
  1207. case 0x25u:
  1208. v136 = 32757935 * v133 + v134 - 29408451;
  1209. v137 = 9837702 * v133;
  1210. LABEL_197:
  1211. v138 = v332 + v137;
  1212. LABEL_198:
  1213. v135 = (v328 << 26) | (v138 ^ v136) & 0x3FFFFFF;
  1214. break;
  1215. default:
  1216. v135 = v133;
  1217. break;
  1218. }
  1219. if ( (v135 & 0xFC000000) == 1342177280 )
  1220. {
  1221. nelems = v133 >> 26;
  1222. switch ( v133 >> 26 )
  1223. {
  1224. case 5u:
  1225. v139 = v133 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v133, 7) ^ __ROL4__(v133, 13);
  1226. break;
  1227. case 0x14u:
  1228. v139 = v133 ^ -10065 * v332 & 0x3FFFF ^ __ROR4__(v133, 6) ^ __ROL4__(v133, 9);
  1229. break;
  1230. case 0x1Bu:
  1231. case 0x22u:
  1232. v139 = (v133 >> 26 << 26) | ((v332 * v133 - 5512095) ^ (v133 * ((_DWORD)&stru_1F3D89C + v332 + 19)
  1233. - (_DWORD)&unk_1C0BCC3)) & 0x3FFFFFF;
  1234. break;
  1235. case 0x1Fu:
  1236. v140 = v332 - 29799480 * v133 - 5512095;
  1237. v141 = v332 + 32757935 * v133;
  1238. goto LABEL_207;
  1239. case 0x25u:
  1240. v140 = 32757935 * v133 + v332 - 29408451;
  1241. v141 = v332 + 9837702 * v133;
  1242. LABEL_207:
  1243. v139 = (nelems << 26) | (v141 ^ v140) & 0x3FFFFFF;
  1244. break;
  1245. default:
  1246. v139 = v133;
  1247. break;
  1248. }
  1249. v142 = v312;
  1250. LABEL_212:
  1251. v8 = &v142[(v139 & 0x3FFFF) - 131070];
  1252. if ( retaddr - (_BYTE *)sub_8F1000 >= (unsigned int)&loc_F9B1C0
  1253. && retaddr - (_BYTE *)sub_2347000 >= (unsigned int)&loc_C5705A + 6 )
  1254. {
  1255. dword_20E46C8 |= 0x200000u;
  1256. LODWORD(qword_20E4698) = qword_20E4698 | 0x100000;
  1257. dword_20E7A94 = 0;
  1258. }
  1259. }
  1260. }
  1261. LABEL_215:
  1262. v331 = *(_DWORD *)(v127 + 16);
  1263. goto LABEL_216;
  1264. case 27:
  1265. v328 = v13 * ((_DWORD)&stru_1F3D89C + result + 19) - (_DWORD)&unk_1C0BCC3;
  1266. v328 ^= result * v13 - 5512095;
  1267. v320 = v331 + 16 * (unsigned __int8)((v328 & 0x3FFFFFF | 0x6C000000) >> 18);
  1268. v190 = (v328 & 0x3FFFFFF | 0x6C000000) & 0x1FF;
  1269. if ( v190 )
  1270. *(_DWORD *)(L + 12) = v331 + 16 * (unsigned __int8)((v328 & 0x3FFFFFF | 0x6C000000) >> 18) + 16 * v190;
  1271. v191 = v320;
  1272. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  1273. *(_DWORD *)(L + 12) = *(_DWORD *)(L + 16);
  1274. v192 = sub_C65960(L, v191, -1);
  1275. if ( !v192 )
  1276. goto LABEL_27;
  1277. if ( v192 != 1 )
  1278. goto LABEL_430;
  1279. v193 = (unsigned int *)(*(_DWORD *)(L + 32) - 24);
  1280. v16 = *(_DWORD *)(L + 100) == 0;
  1281. v324 = v193;
  1282. v194 = (_DWORD *)v193[11];
  1283. nelems = v193[5];
  1284. LClosure = (int)v194;
  1285. if ( !v16 )
  1286. {
  1287. sub_C660B0(L, v193[1]);
  1288. v194 = (_DWORD *)LClosure;
  1289. }
  1290. v195 = ((v193[7] - (_DWORD)v194) & 0xFFFFFFF0) + v193[5];
  1291. v193[1] = v195;
  1292. v196 = 0;
  1293. *(_DWORD *)(L + 16) = v195;
  1294. if ( (unsigned int)v194 < *(_DWORD *)(L + 12) )
  1295. {
  1296. v197 = 0;
  1297. do
  1298. {
  1299. v198 = nelems;
  1300. ++v196;
  1301. *(_DWORD *)(v197 + nelems) = *v194;
  1302. *(_DWORD *)(v197 + v198 + 4) = v194[1];
  1303. v199 = v194[2];
  1304. v200 = v198;
  1305. *(_DWORD *)(v197 + v200 + 8) = v199;
  1306. v197 = 16 * v196;
  1307. v194 = (_DWORD *)(16 * v196 + LClosure);
  1308. }
  1309. while ( (unsigned int)v194 < *(_DWORD *)(L + 12) );
  1310. }
  1311. v201 = v324;
  1312. v4 = (_DWORD *)(L + 20);
  1313. v202 = 16 * v196 + nelems;
  1314. *(_DWORD *)(L + 12) = v202;
  1315. v201[3] = v202;
  1316. v203 = (int)v4 - *v4;
  1317. ++v201[2];
  1318. v201[4] = v203;
  1319. *(_DWORD *)(L + 32) -= 24;
  1320. goto LABEL_2;
  1321. case 28:
  1322. v220 = (unsigned __int8)(v13 >> 18);
  1323. v221 = (_DWORD *)(v331 + 16 * v220);
  1324. v222 = v221 + 12;
  1325. v222[8] = v221[8];
  1326. v222[9] = v221[9];
  1327. v222[10] = v221[10];
  1328. v222[4] = v221[4];
  1329. v222[5] = v221[5];
  1330. v222[6] = v221[6];
  1331. *v222 = *v221;
  1332. v222[1] = v221[1];
  1333. v222[2] = v221[2];
  1334. *(_DWORD *)(L + 12) = v221 + 24;
  1335. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  1336. sub_C65440(L, (int)(v221 + 12), (v329 >> 9) & 0x1FF);
  1337. v331 = *(_DWORD *)(L + 16);
  1338. v223 = (_DWORD *)(v331 + 16 * (v220 + 3));
  1339. *(_DWORD *)(L + 12) = *(_DWORD *)(*(_DWORD *)(L + 32) + 12);
  1340. if ( !v223[2] )
  1341. goto LABEL_216;
  1342. v224 = v332;
  1343. *(v223 - 4) = *v223;
  1344. v225 = v224 + 1;
  1345. *(v223 - 3) = v223[1];
  1346. *(v223 - 2) = v223[2];
  1347. v226 = v322 * *v8;
  1348. v332 = v225;
  1349. v328 = v226 >> 26;
  1350. switch ( v226 >> 26 )
  1351. {
  1352. case 5u:
  1353. v227 = v226 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v226, 7) ^ __ROL4__(v226, 13);
  1354. break;
  1355. case 0x14u:
  1356. v227 = v226 ^ -10065 * v332 & 0x3FFFF ^ __ROR4__(v226, 6) ^ __ROL4__(v226, 9);
  1357. break;
  1358. case 0x1Bu:
  1359. case 0x22u:
  1360. v228 = v226 * ((_DWORD)&stru_1F3D89C + v225 + 19) - (_DWORD)&unk_1C0BCC3;
  1361. v230 = v332 * v226 - 5512095;
  1362. goto LABEL_355;
  1363. case 0x1Fu:
  1364. v228 = v225 - 29799480 * v226 - 5512095;
  1365. v229 = 32757935 * v226;
  1366. goto LABEL_354;
  1367. case 0x25u:
  1368. v228 = 32757935 * v226 + v225 - 29408451;
  1369. v229 = 9837702 * v226;
  1370. LABEL_354:
  1371. v230 = v332 + v229;
  1372. LABEL_355:
  1373. v227 = (v328 << 26) | (v230 ^ v228) & 0x3FFFFFF;
  1374. break;
  1375. default:
  1376. v227 = v226;
  1377. break;
  1378. }
  1379. if ( (v227 & 0xFC000000) != 1342177280 )
  1380. goto LABEL_216;
  1381. switch ( v226 >> 26 )
  1382. {
  1383. case 5u:
  1384. v231 = v226 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v226, 7) ^ __ROL4__(v226, 13);
  1385. break;
  1386. case 0x14u:
  1387. v231 = v226 ^ -10065 * v332 & 0x3FFFF ^ __ROR4__(v226, 6) ^ __ROL4__(v226, 9);
  1388. break;
  1389. case 0x1Bu:
  1390. case 0x22u:
  1391. v231 = (v226 >> 26 << 26) | ((v226 * v332 - 5512095) ^ (v226 * ((_DWORD)&stru_1F3D89C + v332 + 19)
  1392. - (_DWORD)&unk_1C0BCC3)) & 0x3FFFFFF;
  1393. break;
  1394. case 0x1Fu:
  1395. v231 = (v226 >> 26 << 26) | ((v332 + 32757935 * v226) ^ (v332 - 29799480 * v226 - 5512095)) & 0x3FFFFFF;
  1396. break;
  1397. case 0x25u:
  1398. v231 = (v226 >> 26 << 26) | ((v332 + 9837702 * v226) ^ (32757935 * v226 + v332 - 29408451)) & 0x3FFFFFF;
  1399. break;
  1400. default:
  1401. v231 = v226;
  1402. break;
  1403. }
  1404. v8 = (unsigned int *)&v314[(v231 & 0x3FFFF) - 131070];
  1405. if ( retaddr - (_BYTE *)sub_8F1000 >= (unsigned int)&loc_F9B1C0
  1406. && retaddr - (_BYTE *)sub_2347000 >= (unsigned int)&loc_C5705A + 6 )
  1407. {
  1408. dword_20E46C8 |= 0x200000u;
  1409. LODWORD(qword_20E4698) = qword_20E4698 | 0x100000;
  1410. ++v8;
  1411. dword_20E7A94 = 0;
  1412. }
  1413. else
  1414. {
  1415. LABEL_216:
  1416. ++v8;
  1417. }
  1418. goto LABEL_28;
  1419. case 29:
  1420. v204 = (_QWORD *)(v331 + 16 * (unsigned __int8)(v13 >> 18));
  1421. v320 = (int)v204;
  1422. *(_QWORD *)&v205 = v204[4] ^ xmmword_1FC2B20;
  1423. v206 = v204[2];
  1424. v207 = COERCE_DOUBLE(*v204 ^ xmmword_1FC2B20) + v205;
  1425. v208 = 0;
  1426. *(_QWORD *)&v209 = v206 ^ xmmword_1FC2B20;
  1427. if ( v205 <= 0.0 )
  1428. v210 = v207 < v209;
  1429. else
  1430. v210 = v209 < v207;
  1431. v5 = xmmword_1C72DA0;
  1432. LOBYTE(v208) = !v210;
  1433. *(_QWORD *)&v6.m128d_f64[0] = qword_1C706E0;
  1434. if ( !v208 )
  1435. continue;
  1436. v8 = (unsigned int *)(v315 - 524280 + 4 * (v13 & 0x3FFFF));
  1437. if ( retaddr - (_BYTE *)sub_8F1000 >= (unsigned int)&loc_F9B1C0
  1438. && retaddr - (_BYTE *)sub_2347000 >= (unsigned int)&loc_C5705A + 6 )
  1439. {
  1440. dword_20E46C8 |= 0x200000u;
  1441. LODWORD(qword_20E4698) = qword_20E4698 | 0x100000;
  1442. dword_20E7A94 = 0;
  1443. }
  1444. v211 = v320;
  1445. *(_QWORD *)v320 = *(_QWORD *)&v207 ^ xmmword_1FC2B20;
  1446. *(_DWORD *)(v211 + 8) = 2;
  1447. *(_QWORD *)(v211 + 48) = *(_QWORD *)&v207 ^ xmmword_1FC2B20;
  1448. *(_DWORD *)(v211 + 56) = 2;
  1449. goto LABEL_28;
  1450. case 30:
  1451. v332 = v331 + 16 * (unsigned __int8)(v13 >> 18);
  1452. v232 = v13 & 0x1FF;
  1453. v233 = (v13 >> 9) & 0x1FF;
  1454. v325 = v232;
  1455. if ( !v232 )
  1456. {
  1457. v325 = ((*(_DWORD *)(L + 12) - v332) >> 4) - 1;
  1458. *(_DWORD *)(L + 12) = *(_DWORD *)(*(_DWORD *)(L + 32) + 12);
  1459. }
  1460. if ( !v233 )
  1461. {
  1462. v234 = *v8;
  1463. v8 = (unsigned int *)(proto + 8);
  1464. v233 = v322 * v234;
  1465. nelems = proto + 8;
  1466. }
  1467. if ( *(_DWORD *)(v332 + 8) != 7 )
  1468. continue;
  1469. v328 = *(_DWORD *)v332;
  1470. v235 = v325 - 50 + 50 * v233;
  1471. v236 = v328;
  1472. v329 = v235;
  1473. if ( v235 > *(_DWORD *)(v328 + 20) )
  1474. {
  1475. sub_C66C80(L, v328, v235);
  1476. v236 = v328;
  1477. }
  1478. v5 = xmmword_1C72DA0;
  1479. *(_QWORD *)&v6.m128d_f64[0] = qword_1C706E0;
  1480. if ( v325 <= 0 )
  1481. continue;
  1482. v237 = (_DWORD *)(v332 + 16 * v325);
  1483. do
  1484. {
  1485. v238 = (_DWORD *)sub_C66D60(L, v236, v329);
  1486. v239 = *v237;
  1487. --v329;
  1488. v236 = v328;
  1489. *v238 = v239;
  1490. v238[1] = v237[1];
  1491. v238[2] = v237[2];
  1492. if ( v237[2] >= 4 )
  1493. {
  1494. if ( *(_BYTE *)(*v237 + 4) & 3 )
  1495. {
  1496. v240 = *(_BYTE *)(v236 + 4);
  1497. if ( v240 & 4 )
  1498. {
  1499. v241 = L + 24 - *(_DWORD *)(L + 24);
  1500. *(_BYTE *)(v236 + 4) = v240 & 0xFB;
  1501. *(_DWORD *)(v236 + 12) = *(_DWORD *)(v241 + 40);
  1502. *(_DWORD *)(v241 + 40) = v236;
  1503. }
  1504. }
  1505. }
  1506. v237 -= 4;
  1507. --v325;
  1508. }
  1509. while ( v325 > 0 );
  1510. v8 = (unsigned int *)nelems;
  1511. goto LABEL_28;
  1512. case 31:
  1513. v184 = ((v332 + 32757935 * v13) ^ (v332 - 29799480 * v13 - 5512095)) & 0x3FFFFFF | 0x7C000000;
  1514. v185 = (v332 - 10065 * v13) ^ (v332 - -19400 * v13 - 7071);
  1515. v186 = v331 + 16 * (unsigned __int8)(v184 >> 18);
  1516. nelems = ((v184 >> 9) & 0x1FF) - 1;
  1517. v187 = v185 & 0x1FF;
  1518. if ( v187 )
  1519. *(_DWORD *)(L + 12) = v186 + 16 * v187;
  1520. v188 = nelems;
  1521. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  1522. v189 = sub_C65960(L, v186, v188);
  1523. if ( !v189 )
  1524. {
  1525. ++nexeccalls;
  1526. v4 = (_DWORD *)(L + 20);
  1527. goto LABEL_2;
  1528. }
  1529. if ( v189 != 1 )
  1530. goto LABEL_430;
  1531. if ( nelems >= 0 )
  1532. *(_DWORD *)(L + 12) = *(_DWORD *)(*(_DWORD *)(L + 32) + 12);
  1533. LABEL_27:
  1534. v331 = *(_DWORD *)(L + 16);
  1535. LABEL_28:
  1536. v5 = xmmword_1C72DA0;
  1537. *(_QWORD *)&v6.m128d_f64[0] = qword_1C706E0;
  1538. continue;
  1539. case 32:
  1540. v8 = v324 + 2;
  1541. sub_C660B0(L, v331 + 16 * (unsigned __int8)(v13 >> 18));
  1542. goto LABEL_28;
  1543. case 33:
  1544. v328 = v331 + 16 * (unsigned __int8)(v13 >> 18);
  1545. v175 = (unsigned __int64 *)(v331 + 16 * (v13 & 0x1FF));
  1546. v318 = v175;
  1547. nelems = !*((_DWORD *)v175 + 2) || *((_DWORD *)v175 + 2) == 3 && !*(_DWORD *)v175;
  1548. if ( nelems == ((v13 >> 9) & 0x1FF) )
  1549. goto LABEL_21;
  1550. v176 = *(_DWORD *)v175;
  1551. v177 = v328;
  1552. ++v332;
  1553. *(_DWORD *)v328 = v176;
  1554. v178 = v318;
  1555. *(_DWORD *)(v177 + 4) = *((_DWORD *)v318 + 1);
  1556. *(_DWORD *)(v177 + 8) = *((_DWORD *)v178 + 2);
  1557. v179 = v322 * *v8;
  1558. v329 = v179;
  1559. v328 = v179 >> 26;
  1560. switch ( v179 >> 26 )
  1561. {
  1562. case 5u:
  1563. v179 = v329 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v329, 7) ^ __ROL4__(v179, 13);
  1564. break;
  1565. case 0x14u:
  1566. v179 = v329 ^ -10065 * v332 & 0x3FFFF ^ __ROR4__(v329, 6) ^ __ROL4__(v179, 9);
  1567. break;
  1568. case 0x1Bu:
  1569. case 0x22u:
  1570. v180 = v329 * ((_DWORD)&stru_1F3D89C + v332 + 19) - (_DWORD)&unk_1C0BCC3;
  1571. v181 = v332 * v329 - 5512095;
  1572. goto LABEL_305;
  1573. case 0x1Fu:
  1574. v180 = v332 - 29799480 * v179 - 5512095;
  1575. v181 = v332 + 32757935 * v329;
  1576. goto LABEL_305;
  1577. case 0x25u:
  1578. v180 = 32757935 * v179 + v332 - 29408451;
  1579. v181 = v332 + 9837702 * v329;
  1580. LABEL_305:
  1581. v179 = (v328 << 26) | (v181 ^ v180) & 0x3FFFFFF;
  1582. break;
  1583. default:
  1584. break;
  1585. }
  1586. if ( (v179 & 0xFC000000) != 1342177280 )
  1587. goto LABEL_21;
  1588. nelems = v329 >> 26;
  1589. switch ( v329 >> 26 )
  1590. {
  1591. case 5u:
  1592. v174 = v320;
  1593. v171 = v329 ^ 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v329, 7) ^ __ROL4__(v329, 13);
  1594. break;
  1595. case 0x14u:
  1596. v174 = v320;
  1597. v171 = v329 ^ -10065 * v332 & 0x3FFFF ^ __ROR4__(v329, 6) ^ __ROL4__(v329, 9);
  1598. break;
  1599. case 0x1Bu:
  1600. case 0x22u:
  1601. v174 = v320;
  1602. v171 = (v329 >> 26 << 26) | ((v329 * v332 - 5512095) ^ (v329 * ((_DWORD)&stru_1F3D89C + v332 + 19)
  1603. - (_DWORD)&unk_1C0BCC3)) & 0x3FFFFFF;
  1604. break;
  1605. case 0x1Fu:
  1606. v182 = v332 - 29799480 * v329 - 5512095;
  1607. v183 = v332 + 32757935 * v329;
  1608. goto LABEL_311;
  1609. case 0x25u:
  1610. v182 = 32757935 * v329 + v332 - 29408451;
  1611. v183 = v332 + 9837702 * v329;
  1612. LABEL_311:
  1613. v171 = (nelems << 26) | (v183 ^ v182) & 0x3FFFFFF;
  1614. v174 = v320;
  1615. break;
  1616. default:
  1617. v174 = v320;
  1618. v171 = v329;
  1619. break;
  1620. }
  1621. LABEL_290:
  1622. v8 = (unsigned int *)(v174 - 524280 + 4 * (v171 & 0x3FFFF));
  1623. if ( retaddr - (_BYTE *)sub_8F1000 < (unsigned int)&loc_F9B1C0
  1624. || retaddr - (_BYTE *)sub_2347000 < (unsigned int)&loc_C5705A + 6 )
  1625. {
  1626. LABEL_21:
  1627. ++v8;
  1628. }
  1629. else
  1630. {
  1631. dword_20E46C8 |= 0x200000u;
  1632. LODWORD(qword_20E4698) = qword_20E4698 | 0x100000;
  1633. ++v8;
  1634. dword_20E7A94 = 0;
  1635. }
  1636. continue;
  1637. case 34:
  1638. nelems = v13 >> 26;
  1639. switch ( v13 >> 26 )
  1640. {
  1641. case 5u:
  1642. v327 = 9837702 * v332 & 0x3FC01FF ^ __ROR4__(v13, 7) ^ __ROL4__(v13, 13);
  1643. v327 ^= v13;
  1644. v13 = v327;
  1645. break;
  1646. case 0x14u:
  1647. v327 = -10065 * v332 & 0x3FFFF ^ __ROR4__(v13, 6) ^ __ROL4__(v13, 9);
  1648. v327 ^= v13;
  1649. v17 = v331;
  1650. v13 = v327;
  1651. break;
  1652. case 0x1Bu:
  1653. case 0x22u:
  1654. v279 = v13 * ((_DWORD)&stru_1F3D89C + v332 + 19) - (_DWORD)&unk_1C0BCC3;
  1655. v280 = v332 * v13 - 5512095;
  1656. v327 = v280 ^ v279;
  1657. v278 = v280 ^ v279;
  1658. goto LABEL_421;
  1659. case 0x1Fu:
  1660. v327 = v332 - 29799480 * v13 - 5512095;
  1661. v278 = (v332 + 32757935 * v13) ^ v327;
  1662. LABEL_421:
  1663. v13 = (nelems << 26) | v278 & 0x3FFFFFF;
  1664. break;
  1665. case 0x25u:
  1666. v17 = v331;
  1667. v327 = v332 - 29408451 + 32757935 * v13;
  1668. v13 = (nelems << 26) | ((v332 + 9837702 * v13) ^ v327) & 0x3FFFFFF;
  1669. break;
  1670. default:
  1671. break;
  1672. }
  1673. v281 = v17 + 16 * (unsigned __int8)(v13 >> 18);
  1674. v324 = (unsigned int *)(v17 + 16 * (unsigned __int8)(v13 >> 18));
  1675. v282 = v13 & 0x1FF;
  1676. if ( v282 )
  1677. *(_DWORD *)(L + 12) = 16 * v282 + v281 - 16;
  1678. if ( *(_DWORD *)(L + 100) )
  1679. sub_C660B0(L, v17);
  1680. v283 = v324;
  1681. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  1682. v284 = sub_C658C0(L, v283);
  1683. if ( !--nexeccalls )
  1684. goto LABEL_430;
  1685. v5 = xmmword_1C72DA0;
  1686. v4 = (_DWORD *)(L + 20);
  1687. *(_QWORD *)&v6.m128d_f64[0] = qword_1C706E0;
  1688. if ( !v284 )
  1689. goto reentry;
  1690. v4 = (_DWORD *)(L + 20);
  1691. *(_DWORD *)(L + 12) = *(_DWORD *)(*(_DWORD *)(L + 32) + 12);
  1692. goto LABEL_2;
  1693. case 35:
  1694. v212 = v331 + 16 * (unsigned __int8)(v13 >> 18);
  1695. v318 = (unsigned __int64 *)v212;
  1696. v320 = v212 + 32;
  1697. v213 = v212 + 16;
  1698. v315 = v212 + 16;
  1699. *(_DWORD *)v323 = v323 - (char *)v8;
  1700. if ( *(_DWORD *)(v212 + 8) != 2 )
  1701. {
  1702. if ( !sub_C6C310(v212, v212) )
  1703. {
  1704. v324 = (unsigned int *)((char *)&stru_1FB8C64.action + 3);
  1705. sub_C666F0(L, &stru_1FB8C64.action - 797928);
  1706. }
  1707. v213 = v315;
  1708. }
  1709. if ( *(_DWORD *)(v213 + 8) != 2 && !sub_C6C310(v213, v213) )
  1710. {
  1711. v324 = (unsigned int *)((char *)&stru_1FBA9AC.pTryBlockMap + 1);
  1712. sub_C666F0(L, &stru_1FBA9AC.pTryBlockMap - 799795);
  1713. }
  1714. v214 = (__int64 *)v320;
  1715. if ( *(_DWORD *)(v320 + 8) != 2 )
  1716. {
  1717. v214 = (__int64 *)sub_C6C310(v320, v320);
  1718. if ( !v214 )
  1719. {
  1720. v324 = (unsigned int *)&unk_1FBC707;
  1721. sub_C666F0(L, (char *)&unk_1FBC707 - 3206647);
  1722. }
  1723. }
  1724. v215 = v318;
  1725. v216 = xmmword_1FC2B20;
  1726. v217 = *v214;
  1727. v218 = v329;
  1728. *(_QWORD *)&v219 = *v318 ^ xmmword_1FC2B20;
  1729. *((_DWORD *)v318 + 2) = 2;
  1730. *v215 = COERCE_UNSIGNED_INT64(v219 - COERCE_DOUBLE(v217 ^ v216)) ^ v216;
  1731. v8 = &v311[(v218 & 0x3FFFF) - 131070];
  1732. if ( retaddr - (_BYTE *)sub_8F1000 >= (unsigned int)&loc_F9B1C0
  1733. && retaddr - (_BYTE *)sub_2347000 >= (unsigned int)&loc_C5705A + 6 )
  1734. {
  1735. dword_20E46C8 |= 0x200000u;
  1736. LODWORD(qword_20E4698) = qword_20E4698 | 0x100000;
  1737. dword_20E7A94 = 0;
  1738. }
  1739. goto LABEL_28;
  1740. case 36:
  1741. v266 = v13 >> 18;
  1742. v267 = (v13 & 0x1FF) - 1;
  1743. v324 = (unsigned int *)(16 * (unsigned __int8)v266);
  1744. LClosure = (int)v324 + v331;
  1745. v329 = *(_DWORD *)(L + 32);
  1746. v332 = (*(_DWORD *)(v329 + 4) - *(_DWORD *)(v329 + 20)) >> 4;
  1747. v332 -= *(unsigned __int8 *)((v316 ^ *(_DWORD *)v316) + 0x4D);
  1748. --v332;
  1749. if ( v267 == -1 )
  1750. {
  1751. v268 = v332;
  1752. v269 = v332;
  1753. *(_DWORD *)(L + 20) = L + 20 - (_DWORD)v8;
  1754. v270 = *(_DWORD *)(L + 8) - *(_DWORD *)(L + 12);
  1755. proto = 16 * v269;
  1756. if ( v270 <= 16 * v269 )
  1757. sub_C657A0(L, v268);
  1758. v271 = *(_DWORD *)(L + 16);
  1759. v267 = v332;
  1760. LClosure = (int)v324 + v271;
  1761. v331 = v271;
  1762. *(_DWORD *)(L + 12) = (char *)v324 + v271 + proto;
  1763. }
  1764. v5 = xmmword_1C72DA0;
  1765. *(_QWORD *)&v6.m128d_f64[0] = qword_1C706E0;
  1766. v325 = 0;
  1767. if ( v267 > 0 )
  1768. {
  1769. v272 = v332;
  1770. v273 = v325;
  1771. v274 = -16 * v332;
  1772. v275 = (_DWORD *)(LClosure + 8);
  1773. v328 = LClosure + 8;
  1774. do
  1775. {
  1776. if ( v273 >= v272 )
  1777. {
  1778. *v275 = 0;
  1779. }
  1780. else
  1781. {
  1782. v276 = (_DWORD *)v328;
  1783. v277 = *(_DWORD *)(v329 + 4);
  1784. *(_DWORD *)(v328 - 8) = *(_DWORD *)(v277 + v274);
  1785. *(v276 - 1) = *(_DWORD *)(v277 + v274 + 4);
  1786. *v276 = *(_DWORD *)(v277 + v274 + 8);
  1787. v275 = v276;
  1788. v273 = v325;
  1789. v272 = v332;
  1790. }
  1791. ++v273;
  1792. v275 += 4;
  1793. v274 += 16;
  1794. v325 = v273;
  1795. v328 = (unsigned int)v275;
  1796. }
  1797. while ( v273 < v267 );
  1798. v5 = xmmword_1C72DA0;
  1799. *(_QWORD *)&v6.m128d_f64[0] = qword_1C706E0;
  1800. v8 = (unsigned int *)nelems;
  1801. }
  1802. continue;
  1803. case 37:
  1804. v242 = ((v332 + 9837702 * v13) ^ (32757935 * v13 + v332 - 29408451)) & 0x3FFFFFF | 0x94000000;
  1805. v314 = (int *)(v331 + 16 * (unsigned __int8)(v242 >> 18));
  1806. proto = *(_DWORD *)(4 * (v242 & 0x3FFFF)
  1807. - *(_DWORD *)((v316 ^ *(_DWORD *)v316) + 0x20)
  1808. + (v316 ^ *(_DWORD *)v316)
  1809. + 32);
  1810. nelems = *(unsigned __int8 *)(proto + 79);
  1811. v245 = *(_DWORD *)(v321 + 12);
  1812. v324 = (unsigned int *)nelems;
  1813. LClosure = luaM_realloc_(L, 0, 0, 4 * nelems + 20, 4);
  1814. v247 = (int)v319 - *v319;
  1815. *(_DWORD *)LClosure = *(_DWORD *)(v247 + 28);
  1816. v248 = *(_BYTE *)(v247 + 20);
  1817. *(_DWORD *)(v247 + 28) = LClosure;
  1818. v249 = nelems;
  1819. *(_BYTE *)(LClosure + 4) = v248 & 3;
  1820. *(_WORD *)(LClosure + 5) = 6;
  1821. *(_DWORD *)(LClosure + 12) = v245;
  1822. *(_BYTE *)(LClosure + 7) = v249;
  1823. if ( v249 )
  1824. {
  1825. v251 = LClosure + 4 * v249 + 20;
  1826. do
  1827. {
  1828. *(_DWORD *)(v251 - 4) = 0;
  1829. v251 -= 4;
  1830. v324 = (unsigned int *)((char *)v324 - 1);
  1831. }
  1832. while ( v324 );
  1833. }
  1834. *(_DWORD *)(LClosure + 16) = (LClosure + 16) ^ proto;
  1835. v252 = 0;
  1836. v332 = 0;
  1837. if ( !v249 )
  1838. goto LABEL_402;
  1839. v253 = LClosure + 24;
  1840. v254 = (_DWORD *)(LClosure + 20);
  1841. v325 = LClosure + 24;
  1842. v329 = LClosure + 20;
  1843. break;
  1844. }
  1845. while ( 2 )
  1846. {
  1847. v255 = v322 * *v8;
  1848. v328 = v322 * *v8;
  1849. v328 >>= 26;
  1850. switch ( v328 )
  1851. {
  1852. case 0x10u:
  1853. v256 = sub_C661B0(L, v331 + 16 * (v255 & 0x1FF));
  1854. v257 = v329;
  1855. v258 = v325;
  1856. ++v8;
  1857. *(_DWORD *)v329 = v256;
  1858. v254 = (_DWORD *)(v257 + 4);
  1859. v252 = v332 + 1;
  1860. v253 = v258 + 4;
  1861. goto LABEL_400;
  1862. case 0xBu:
  1863. ++v8;
  1864. *v254 = *(_DWORD *)(v321 + 4 * (v255 & 0x1FF) + 20);
  1865. ++v254;
  1866. v252 = v332 + 1;
  1867. v253 += 4;
  1868. goto LABEL_400;
  1869. case 0x11u:
  1870. v259 = sub_C661B0(L, v331 + 16 * (v255 & 0x1FF));
  1871. v260 = v331 + 16 * ((v255 >> 9) & 0x1FF);
  1872. *(_DWORD *)v329 = v259;
  1873. v261 = sub_C661B0(L, v260);
  1874. v254 = (_DWORD *)v329;
  1875. LABEL_399:
  1876. v263 = v325;
  1877. ++v8;
  1878. v254 += 2;
  1879. *(_DWORD *)v325 = v261;
  1880. v252 = v332 + 2;
  1881. v253 = v263 + 8;
  1882. LABEL_400:
  1883. v325 = v253;
  1884. v329 = (unsigned int)v254;
  1885. v332 = v252;
  1886. break;
  1887. case 0xAu:
  1888. v262 = v321;
  1889. *v254 = *(_DWORD *)(v321 + 4 * (v255 & 0x1FF) + 20);
  1890. v261 = *(_DWORD *)(v262 + 4 * ((v255 >> 9) & 0x1FF) + 20);
  1891. goto LABEL_399;
  1892. }
  1893. if ( v252 >= nelems )
  1894. {
  1895. LABEL_402:
  1896. v264 = v314;
  1897. v265 = v319;
  1898. *v314 = LClosure;
  1899. v264[2] = 6;
  1900. *(_DWORD *)v323 = v323 - (char *)v8;
  1901. v38 = (int)v265 - *v265;
  1902. v39 = (int)v265 - *v265;
  1903. LABEL_50:
  1904. if ( *(_DWORD *)(v39 + 76) >= *(_DWORD *)(v38 + 72) )
  1905. sub_C652E0(L);
  1906. goto LABEL_27;
  1907. }
  1908. continue;
  1909. }
  1910. }
  1911. }
  1912. *(_DWORD *)v323 = v323 - (char *)v8 + 4;
  1913. LABEL_430:
  1914. v286 = 0;
  1915. v319 = (_DWORD *)-16363968;
  1916. while ( *v285 != -1 )
  1917. {
  1918. result = v285[1] - 25739712;
  1919. if ( result <= (unsigned int)v319 )
  1920. {
  1921. result = v286 + 2 * v286 + 1;
  1922. goto LABEL_438;
  1923. }
  1924. ++v286;
  1925. v285 = (_DWORD *)*v285;
  1926. if ( v286 >= 2 )
  1927. return result;
  1928. }
  1929. result = v285[6] - 25739712;
  1930. if ( result > (unsigned int)v319 )
  1931. return result;
  1932. result = 3 * v286;
  1933. LABEL_438:
  1934. if ( 1 << result )
  1935. {
  1936. nelems = 4096;
  1937. v324 = (unsigned int *)&unk_20F5760;
  1938. result = 4096;
  1939. unk_20F5760 |= 0x1000u;
  1940. }
  1941. return result;
  1942. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement