Advertisement
Guest User

CambridgeGuy

a guest
Sep 20th, 2008
372
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 95.57 KB | None | 0 0
  1. /* This file has been generated by the Hex-Rays decompiler.
  2.    Copyright (c) 2007 Hex-Rays sprl <info@hex-rays.com>
  3.  
  4.    Detected compiler: GNU C++
  5. */
  6.  
  7. #include <windows.h>
  8. #include <defs.h>
  9.  
  10.  
  11. //-------------------------------------------------------------------------
  12. // Data declarations
  13.  
  14. extern char aWaninkokowashe[22]; // weak
  15. extern _UNKNOWN unk_4090C0; // weak
  16. extern _UNKNOWN unk_409248; // weak
  17. extern char aCommonKey[11]; // weak
  18. extern char aCkey_bin[9]; // weak
  19. extern char aKey_bin[8]; // weak
  20. extern char aWb_1[3]; // weak
  21. extern char aPartition_iso[14]; // weak
  22. extern char aIsoSize_3fMb[23]; // weak
  23. extern char aUsageSIsoFile[26]; // weak
  24. extern char aErrorNoFreeMem[38]; // weak
  25. extern char aErrorCouldNotO[33]; // weak
  26. extern char aErrorCouldNotR[41]; // weak
  27. extern char aErrorCouldNotF[43]; // weak
  28. extern char aErrorCouldNotG[47]; // weak
  29. extern char aCreatingBackup[41]; // weak
  30. extern char aErrorCouldNotC[46]; // weak
  31. extern char aBackupIsoCreat[39]; // weak
  32. extern char aPressAnyKeyToE[31]; // weak
  33. extern int byte_409480[]; // idb
  34. extern int dword_409880[]; // idb
  35. extern int dword_409C80[]; // idb
  36. extern int dword_40A080[]; // idb
  37. extern int dword_40A480[]; // idb
  38. extern int byte_40A880[]; // idb
  39. extern int dword_40AC80[]; // idb
  40. extern int dword_40B080[]; // idb
  41. extern int dword_40B480[]; // idb
  42. extern int dword_40B880[]; // idb
  43. extern int dword_40BC80[]; // idb
  44. extern char byte_40BCE8; // weak
  45. extern _UNKNOWN unk_40BCE9; // weak
  46. extern _UNKNOWN unk_40C010; // weak
  47. extern char byte_40C030; // weak
  48.  
  49. //-------------------------------------------------------------------------
  50. // Function declarations
  51.  
  52. int __cdecl sub_401290(int a1);
  53. _DWORD __cdecl sub_401310(_DWORD); // weak
  54. void *__cdecl sub_401374();
  55. signed int __cdecl sub_4013B8(const char *a1, FILE **a2);
  56. int __cdecl sub_40140D(FILE **a1);
  57. signed int __cdecl sub_40142A(int a1);
  58. signed int __cdecl sub_4019BF(const char *a1, void *a2);
  59. signed int __cdecl sub_401A38(int a1);
  60. int __cdecl sub_401B40(int a1);
  61. signed int __cdecl sub_401BCD(int a1, int a2);
  62. signed int __cdecl sub_401CAF(FILE **a1, int a2, int a3, int a4);
  63. signed int __cdecl sub_401E60(FILE **a1, int a2, int a3, int a4);
  64. signed int __cdecl sub_401EF8(FILE **a1, int a2, void *a3, void *a4, void *a5);
  65. signed int __cdecl sub_401FCF(FILE **a1, unsigned __int64 a2, size_t a3, int a4);
  66. signed int __cdecl sub_402135(int a1, int a2, int a3);
  67. signed int __cdecl sub_4027CF(int a1, unsigned __int64 a2, size_t a3, const void *a4);
  68. signed int __cdecl sub_40297D(FILE **a1);
  69. int __cdecl sub_402A13(FILE **a1);
  70. int __cdecl sub_402D20(int a1, unsigned int a2, int a3);
  71. int __cdecl sub_402D41(int a1, int a2, unsigned int a3, int a4, int a5);
  72. int __cdecl sub_402D9B(int a1, int a2, unsigned int a3, int a4, int a5);
  73. unsigned int __cdecl sub_402E00(int a1);
  74. unsigned int __cdecl sub_4031C0(int a1);
  75. signed int __cdecl sub_4035AD(const void *a1);
  76. void *__cdecl sub_403710(size_t a1);
  77. unsigned int __cdecl sub_403743(int a1);
  78. int __cdecl sub_403764(int a1);
  79. int __cdecl sub_4037A0(int a1);
  80. size_t __cdecl sub_4038F4(int a1, FILE *a2);
  81. void *__cdecl sub_40394C(int a1, const void *a2, size_t a3);
  82. signed int __cdecl sub_403A80(FILE **a1);
  83. int __cdecl main(int argc, const char **argv, const char *envp); // idb
  84. signed int __cdecl sub_403FE0(int a1, signed int a2, int a3);
  85. signed int __cdecl sub_4043D0(int a1, signed int a2, int a3);
  86. unsigned int __cdecl sub_404610(int a1, int a2, int a3);
  87. unsigned int __cdecl sub_404BE0(int a1, int a2, int a3);
  88. int __cdecl sub_4051A0(int a1, int a2, unsigned int a3, int a4, int a5, signed int a6);
  89. int __cdecl sub_4053F0(int a1, unsigned int a2, int a3);
  90. void *__cdecl sub_405460(void *a1, int a2); // idb
  91. signed int __cdecl sub_4054D0(int a1, int a2, unsigned int a3);
  92. signed int __cdecl sub_405890(int a1, int a2);
  93. signed int __cdecl sub_4059F0(int a1);
  94. int __cdecl sub_405A40(int a1, int a2, int a3);
  95. _DWORD __cdecl sub_40696C(_DWORD, _DWORD, _DWORD); // weak
  96. // _DWORD __main(); weak
  97. // _DWORD __cdecl ftello64(_DWORD); weak
  98. // _DWORD __cdecl fseeko64(_DWORD, _DWORD, _DWORD, _DWORD); weak
  99. // void *__cdecl memcpy(void *, const void *, size_t); idb
  100. // void *__cdecl memset(void *, int, size_t); idb
  101. // int printf(const char *, ...); idb
  102. // size_t __cdecl fread(void *, size_t, size_t, FILE *); idb
  103. // int __cdecl fclose(FILE *); idb
  104. // void __cdecl free(void *); idb
  105. // void __cdecl rewind(FILE *); idb
  106. // FILE *__cdecl fopen(const char *, const char *); idb
  107. // size_t __cdecl fwrite(const void *, size_t, size_t, FILE *); idb
  108. // void *__cdecl malloc(size_t); idb
  109. // int __cdecl getchar(); idb
  110. // void *__cdecl memchr(const void *, int, size_t); idb
  111.  
  112.  
  113. //----- (00401290) --------------------------------------------------------
  114. int __cdecl sub_401290(int a1)
  115. {
  116.   int v2; // eax@5
  117.   int v3; // [sp+14h] [bp-14h]@2
  118.   int v4; // [sp+20h] [bp-8h]@3
  119.   unsigned int v5; // [sp+24h] [bp-4h]@3
  120.   int v6; // [sp+1Ch] [bp-Ch]@5
  121.   int v7; // [sp+18h] [bp-10h]@5
  122.  
  123.   if ( a1 )
  124.   {
  125.     v4 = 0;
  126.     v5 = 0;
  127.     while ( v5 <= 0x11 )
  128.     {
  129.       v2 = a1 + 4 * v5;
  130.       v6 = v2 + 144;
  131.       sub_40394C((int)&v7, (const void *)(v2 + 144), 4u);
  132.       v4 += v7;
  133.       ++v5;
  134.     }
  135.     v4 += 256;
  136.     v3 = v4;
  137.   }
  138.   else
  139.   {
  140.     v3 = 0;
  141.   }
  142.   return v3;
  143. }
  144.  
  145. //----- (00401310) --------------------------------------------------------
  146. #error "40135D: invalid basic block (funcsize=30)"
  147.  
  148. //----- (00401374) --------------------------------------------------------
  149. void *__cdecl sub_401374()
  150. {
  151.   return sub_403710(0xA0u);
  152. }
  153.  
  154. //----- (004013B8) --------------------------------------------------------
  155. signed int __cdecl sub_4013B8(const char *a1, FILE **a2)
  156. {
  157.   signed int v3; // [sp+10h] [bp-8h]@4
  158.  
  159.   if ( *a2 )
  160.     fclose(*a2);
  161.   *a2 = fopen(a1, (const char *)&unk_4090C0);
  162.   if ( *a2 )
  163.     v3 = 0;
  164.   else
  165.     v3 = 1;
  166.   return v3;
  167. }
  168.  
  169. //----- (0040140D) --------------------------------------------------------
  170. int __cdecl sub_40140D(FILE **a1)
  171. {
  172.   int result; // eax@1
  173.  
  174.   result = (int)a1;
  175.   if ( *a1 )
  176.     result = fclose(*a1);
  177.   return result;
  178. }
  179.  
  180. //----- (0040142A) --------------------------------------------------------
  181. signed int __cdecl sub_40142A(int a1)
  182. {
  183.   int v2; // ebx@3
  184.   int v3; // edx@3
  185.   void *v4; // eax@5
  186.   int v5; // edx@9
  187.   FILE *v6; // [sp+30h] [bp-8h]@1
  188.   signed int v7; // [sp+10h] [bp-28h]@2
  189.   unsigned int v8; // [sp+24h] [bp-14h]@5
  190.   int v9; // [sp+20h] [bp-18h]@5
  191.   void *v10; // [sp+2Ch] [bp-Ch]@5
  192.   unsigned int v11; // [sp+28h] [bp-10h]@7
  193.   int v12; // [sp+1Ch] [bp-1Ch]@9
  194.   unsigned int v13; // [sp+18h] [bp-20h]@9
  195.   int v14; // [sp+14h] [bp-24h]@9
  196.  
  197.   v6 = *(FILE **)a1;
  198.   if ( sub_401310(a1) )
  199.   {
  200.     v7 = 1;
  201.   }
  202.   else
  203.   {
  204.     fseeko64(v6, 0, 0, 2);
  205.     v2 = a1;
  206.     *(_DWORD *)(a1 + 8) = ftello64(v6);
  207.     *(_DWORD *)(v2 + 12) = v3;
  208.     rewind(v6);
  209.     if ( fread((void *)(a1 + 24), 0x64u, 1u, v6) == 1 )
  210.     {
  211.       fseeko64(v6, 262144, 0, 0);
  212.       sub_4038F4((int)&v8, v6);
  213.       sub_4038F4((int)&v9, v6);
  214.       v4 = sub_403710(117960 * v8);
  215.       v10 = v4;
  216.       if ( v4 )
  217.       {
  218.         fseeko64(v6, 4 * v9, 0, 0);
  219.         v11 = 0;
  220.         while ( v11 < v8 )
  221.         {
  222.           v12 = (int)((char *)v10 + 117960 * v11);
  223.           v13 = 0;
  224.           v14 = 0;
  225.           sub_4038F4((int)&v13, v6);
  226.           sub_4038F4((int)&v14, v6);
  227.           v5 = 4 * (unsigned __int64)v13 >> 32;
  228.           *(_DWORD *)(v12 + 8) = 4 * v13;
  229.           *(_DWORD *)(v12 + 12) = v5;
  230.           *(_DWORD *)(v12 + 16) = v14;
  231.           ++v11;
  232.         }
  233.         v11 = 0;
  234.         while ( v11 < v8 )
  235.         {
  236.           v12 = (int)((char *)v10 + 117960 * v11);
  237.           *((_DWORD *)v10 + 29490 * v11) = v6;
  238.           fseeko64(v6, *((_DWORD *)v10 + 29490 * v11 + 2), *((_DWORD *)v10 + 29490 * v11 + 3), 0);
  239.           fread((void *)(v12 + 64), 0x2A4u, 1u, v6);
  240.           sub_402E00(v12 + 64);
  241.           fseeko64(v6, *(_DWORD *)(v12 + 8) + 676, __MKCADD__(676, *(_DWORD *)(v12 + 8)) + *(_DWORD *)(v12 + 12), 0);
  242.           fread((void *)(v12 + 36), 0x1Cu, 1u, v6);
  243.           sub_401B40(v12 + 36);
  244.           fseeko64(
  245.             v6,
  246.             *(_DWORD *)(v12 + 8) + 4 * *(_DWORD *)(v12 + 40),
  247.             *(_DWORD *)(v12 + 12) + __MKCADD__(*(_DWORD *)(v12 + 8), 4 * *(_DWORD *)(v12 + 40)),
  248.             0);
  249.           fread((void *)(v12 + 740), 0x49E4u, 1u, v6);
  250.           sub_4031C0(v12 + 740);
  251.           fseeko64(
  252.             v6,
  253.             *(_DWORD *)(v12 + 8) + 4 * *(_DWORD *)(v12 + 52),
  254.             *(_DWORD *)(v12 + 12) + __MKCADD__(*(_DWORD *)(v12 + 8), 4 * *(_DWORD *)(v12 + 52)),
  255.             0);
  256.           fread((void *)(v12 + 19656), 0x18000u, 1u, v6);
  257.           sub_401A38(v12);
  258.           ++v11;
  259.         }
  260.         *(_DWORD *)(a1 + 16) = v8;
  261.         *(_DWORD *)(a1 + 20) = v9;
  262.         *(_DWORD *)(a1 + 156) = v10;
  263.         v7 = 0;
  264.       }
  265.       else
  266.       {
  267.         v7 = 1;
  268.       }
  269.     }
  270.     else
  271.     {
  272.       v7 = 1;
  273.     }
  274.   }
  275.   return v7;
  276. }
  277.  
  278. //----- (004019BF) --------------------------------------------------------
  279. signed int __cdecl sub_4019BF(const char *a1, void *a2)
  280. {
  281.   FILE *v3; // eax@1
  282.   FILE *v4; // [sp+14h] [bp-4h]@1
  283.   signed int v5; // [sp+10h] [bp-8h]@2
  284.  
  285.   v3 = fopen(a1, (const char *)&unk_409248);
  286.   v4 = v3;
  287.   if ( v3 )
  288.   {
  289.     if ( fread(a2, 0x10u, 1u, v4) == 1 )
  290.     {
  291.       fclose(v4);
  292.       v5 = 0;
  293.     }
  294.     else
  295.     {
  296.       v5 = 1;
  297.     }
  298.   }
  299.   else
  300.   {
  301.     v5 = 1;
  302.   }
  303.   return v5;
  304. }
  305.  
  306. //----- (00401A38) --------------------------------------------------------
  307. signed int __cdecl sub_401A38(int a1)
  308. {
  309.   int v2; // edx@7
  310.   signed int v3; // [sp+2Ch] [bp-3Ch]@2
  311.   int v4; // [sp+5Ch] [bp-Ch]@3
  312.   char v5; // [sp+40h] [bp-28h]@3
  313.   int v6; // [sp+50h] [bp-18h]@7
  314.   int v7; // [sp+54h] [bp-14h]@7
  315.   char v8; // [sp+30h] [bp-38h]@7
  316.  
  317.   if ( a1 )
  318.   {
  319.     v4 = a1 + 384;
  320.     if ( sub_4019BF("common-key", &v5) && sub_4019BF("ckey.bin", &v5) && sub_4019BF("key.bin", &v5) )
  321.     {
  322.       v3 = 1;
  323.     }
  324.     else
  325.     {
  326.       v2 = *(_DWORD *)(v4 + 160);
  327.       v6 = *(_DWORD *)(v4 + 156);
  328.       v7 = v2;
  329.       sub_4037A0((int)&v6);
  330.       memset(&v8, 0, 0x10u);
  331.       memcpy(&v8, &v6, 8u);
  332.       sub_402D9B(v4 + 127, a1 + 20, 0x10u, (int)&v5, (int)&v8);
  333.       v3 = 0;
  334.     }
  335.   }
  336.   else
  337.   {
  338.     v3 = 1;
  339.   }
  340.   return v3;
  341. }
  342.  
  343. //----- (00401B40) --------------------------------------------------------
  344. int __cdecl sub_401B40(int a1)
  345. {
  346.   sub_403764(a1);
  347.   sub_403764(a1 + 4);
  348.   sub_403764(a1 + 8);
  349.   sub_403764(a1 + 12);
  350.   sub_403764(a1 + 16);
  351.   sub_403764(a1 + 20);
  352.   return sub_403764(a1 + 24);
  353. }
  354.  
  355. //----- (00401BCD) --------------------------------------------------------
  356. signed int __cdecl sub_401BCD(int a1, int a2)
  357. {
  358.   signed int v3; // [sp+2Ch] [bp-ACh]@2
  359.   char v4; // [sp+30h] [bp-A8h]@3
  360.  
  361.   if ( a1 )
  362.   {
  363.     if ( sub_401EF8((FILE **)a1, a2 << 6, 0, 0, &v4) )
  364.     {
  365.       v3 = 1;
  366.     }
  367.     else
  368.     {
  369.       sub_402D20((int)&v4, 0xA0u, a1 + 20 * a2 + 19656);
  370.       sub_402D20(a1 + 19656, 0x18000u, a1 + 1240);
  371.       if ( sub_4035AD((const void *)(a1 + 740)) )
  372.         v3 = 1;
  373.       else
  374.         v3 = 0;
  375.     }
  376.   }
  377.   else
  378.   {
  379.     v3 = 1;
  380.   }
  381.   return v3;
  382. }
  383.  
  384. //----- (00401CAF) --------------------------------------------------------
  385. signed int __cdecl sub_401CAF(FILE **a1, int a2, int a3, int a4)
  386. {
  387.   signed __int64 v5; // qax@3
  388.   int v6; // ebx@3
  389.   signed int v7; // [sp+2Ch] [bp-803Ch]@2
  390.   int v8; // [sp+805Ch] [bp-Ch]@3
  391.   int v9; // [sp+38h] [bp-8030h]@3
  392.   int v10; // [sp+3Ch] [bp-802Ch]@3
  393.   char v11; // [sp+50h] [bp-8018h]@3
  394.   char v12; // [sp+40h] [bp-8028h]@6
  395.   int v13; // [sp+450h] [bp-7C18h]@8
  396.   int v14; // [sp+34h] [bp-8034h]@8
  397.   int v15; // [sp+420h] [bp-7C48h]@8
  398.   int *v16; // [sp+30h] [bp-8038h]@8
  399.  
  400.   if ( a1 )
  401.   {
  402.     v8 = (int)(a1 + 9);
  403.     v5 = (unsigned __int64)*(a1 + 2) + 4 * (unsigned __int64)*(a1 + 14);
  404.     v6 = (int)((char *)*(a1 + 3) + *((_DWORD *)&v5 + 1));
  405.     v9 = (_DWORD)v5 + (a2 << 15);
  406.     v10 = v6 + __MKCADD__(v5, a2 << 15);
  407.     fseeko64(*a1, (_DWORD)v5 + (a2 << 15), v6 + __MKCADD__(v5, a2 << 15), 0);
  408.     if ( fread(&v11, 0x8000u, 1u, *a1) == 1 )
  409.     {
  410.       if ( a4 )
  411.       {
  412.         memset(&v12, 0, 0x10u);
  413.         sub_402D9B((int)&v11, a4, 0x400u, (int)(a1 + 5), (int)&v12);
  414.       }
  415.       if ( a3 )
  416.       {
  417.         v14 = (int)&v13;
  418.         v16 = &v15;
  419.         memcpy(&v12, &v15, 0x10u);
  420.         sub_402D9B(v14, a3, 0x7C00u, (int)(a1 + 5), (int)&v12);
  421.       }
  422.       v7 = 0;
  423.     }
  424.     else
  425.     {
  426.       v7 = 1;
  427.     }
  428.   }
  429.   else
  430.   {
  431.     v7 = 1;
  432.   }
  433.   return v7;
  434. }
  435.  
  436. //----- (00401E60) --------------------------------------------------------
  437. signed int __cdecl sub_401E60(FILE **a1, int a2, int a3, int a4)
  438. {
  439.   int v5; // [sp+24h] [bp-4h]@1
  440.   int v6; // [sp+20h] [bp-8h]@1
  441.   signed int v7; // [sp+14h] [bp-14h]@2
  442.   unsigned int v8; // [sp+1Ch] [bp-Ch]@3
  443.   int v9; // [sp+18h] [bp-10h]@5
  444.  
  445.   v5 = a3;
  446.   v6 = a4;
  447.   if ( a1 )
  448.   {
  449.     v8 = 0;
  450.     while ( v8 <= 0x3F )
  451.     {
  452.       v9 = v8 + (a2 << 6);
  453.       if ( sub_401CAF(a1, v8 + (a2 << 6), v5, v6) )
  454.         return 1;
  455.       if ( v5 )
  456.         v5 += 31744;
  457.       if ( v6 )
  458.         v6 += 1024;
  459.       ++v8;
  460.     }
  461.     v7 = 0;
  462.   }
  463.   else
  464.   {
  465.     v7 = 1;
  466.   }
  467.   return v7;
  468. }
  469.  
  470. //----- (00401EF8) --------------------------------------------------------
  471. signed int __cdecl sub_401EF8(FILE **a1, int a2, void *a3, void *a4, void *a5)
  472. {
  473.   signed int v6; // [sp+1Ch] [bp-40Ch]@2
  474.   char v7; // [sp+20h] [bp-408h]@3
  475.   int v8; // [sp+2A0h] [bp-188h]@8
  476.   int v9; // [sp+360h] [bp-C8h]@10
  477.  
  478.   if ( a1 )
  479.   {
  480.     if ( sub_401CAF(a1, a2, 0, (int)&v7) )
  481.     {
  482.       v6 = 1;
  483.     }
  484.     else
  485.     {
  486.       if ( a3 )
  487.         memcpy(a3, &v7, 0x26Cu);
  488.       if ( a4 )
  489.         memcpy(a4, &v8, 0xA0u);
  490.       if ( a5 )
  491.         memcpy(a5, &v9, 0xA0u);
  492.       v6 = 0;
  493.     }
  494.   }
  495.   else
  496.   {
  497.     v6 = 1;
  498.   }
  499.   return v6;
  500. }
  501.  
  502. //----- (00401FCF) --------------------------------------------------------
  503. signed int __cdecl sub_401FCF(FILE **a1, unsigned __int64 a2, size_t a3, int a4)
  504. {
  505.   unsigned __int64 v5; // qax@3
  506.   signed int v6; // [sp+10h] [bp-28h]@2
  507.   int v7; // [sp+2Ch] [bp-Ch]@3
  508.   int v8; // [sp+28h] [bp-10h]@3
  509.   int v9; // [sp+20h] [bp-18h]@3
  510.   int v10; // [sp+24h] [bp-14h]@3
  511.   void *v11; // [sp+34h] [bp-4h]@3
  512.   void *v12; // [sp+30h] [bp-8h]@3
  513.   unsigned int v13; // [sp+1Ch] [bp-1Ch]@6
  514.   int v14; // [sp+18h] [bp-20h]@8
  515.   int v15; // [sp+14h] [bp-24h]@8
  516.  
  517.   if ( a1 )
  518.   {
  519.     v7 = a2 / 0x7C00;
  520.     v5 = (a2 + a3) / 0x7C00;
  521.     v8 = (a2 + a3) / 0x7C00;
  522.     v9 = (_DWORD)v5 - v7 + 1;
  523.     v10 = (_DWORD)a2 - 31744 * v7;
  524.     v11 = sub_403710(31744 * ((_DWORD)v5 - v7 + 1));
  525.     v12 = sub_403710(a3);
  526.     if ( v11 && v12 )
  527.     {
  528.       v13 = 0;
  529.       while ( v13 < v9 )
  530.       {
  531.         v14 = (int)((char *)v11 + 31744 * v13);
  532.         v15 = v7 + v13;
  533.         if ( sub_401CAF(a1, v7 + v13, (int)((char *)v11 + 31744 * v13), 0) )
  534.           return 1;
  535.         ++v13;
  536.       }
  537.       memcpy(v12, (char *)v11 + v10, a3);
  538.       *(_DWORD *)a4 = v12;
  539.       free(v11);
  540.       v6 = 0;
  541.     }
  542.     else
  543.     {
  544.       v6 = 1;
  545.     }
  546.   }
  547.   else
  548.   {
  549.     v6 = 1;
  550.   }
  551.   return v6;
  552. }
  553.  
  554. //----- (00402135) --------------------------------------------------------
  555. signed int __cdecl sub_402135(int a1, int a2, int a3)
  556. {
  557.   void *v4; // eax@1
  558.   int v5; // edx@32
  559.   unsigned __int8 v6; // cf@32
  560.   int v7; // [sp+6Ch] [bp-3BCh]@1
  561.   signed int v8; // [sp+2Ch] [bp-3FCh]@2
  562.   unsigned int v9; // [sp+4Ch] [bp-3DCh]@5
  563.   void *v10; // [sp+3Ch] [bp-3ECh]@7
  564.   int v11; // [sp+38h] [bp-3F0h]@7
  565.   int v12; // [sp+34h] [bp-3F4h]@7
  566.   int v13; // [sp+30h] [bp-3F8h]@9
  567.   _BYTE v14[632]; // [sp+1B0h] [bp-278h]@9
  568.   _BYTE v15[160]; // [sp+110h] [bp-318h]@15
  569.   _BYTE v16[160]; // [sp+70h] [bp-3B8h]@22
  570.   char v17; // [sp+50h] [bp-3D8h]@28
  571.   int v18; // [sp+40h] [bp-3E8h]@32
  572.   int v19; // [sp+44h] [bp-3E4h]@32
  573.  
  574.   v4 = sub_403710(0x10000u);
  575.   v7 = (int)v4;
  576.   if ( v4 )
  577.   {
  578.     if ( sub_401E60((FILE **)a1, a2, 0, v7) )
  579.     {
  580.       v8 = 1;
  581.     }
  582.     else
  583.     {
  584.       v9 = 0;
  585.       while ( v9 <= 0x3F )
  586.       {
  587.         v10 = (void *)(v7 + (v9 << 10));
  588.         v11 = a3 + 31744 * v9;
  589.         v12 = 0;
  590.         while ( (unsigned int)v12 <= 0x7BFF )
  591.         {
  592.           v13 = 20 * ((unsigned int)v12 >> 10);
  593.           sub_402D20(v11 + v12, 0x400u, (int)&v14[20 * ((unsigned int)v12 >> 10)]);
  594.           v12 += 1024;
  595.         }
  596.         memcpy(v10, v14, 0x26Cu);
  597.         ++v9;
  598.       }
  599.       v9 = 0;
  600.       while ( v9 <= 0x3F )
  601.       {
  602.         v13 = 0;
  603.         while ( (unsigned int)v13 <= 7 )
  604.         {
  605.           v12 = v7 + ((v9 + v13) << 10);
  606.           v11 = 20 * v13;
  607.           sub_402D20(v7 + ((v9 + v13) << 10), 0x26Cu, (int)&v15[20 * v13]);
  608.           ++v13;
  609.         }
  610.         v13 = 0;
  611.         while ( (unsigned int)v13 <= 7 )
  612.         {
  613.           v12 = v7 + ((v9 + v13) << 10);
  614.           memcpy((void *)(v7 + ((v9 + v13++) << 10) + 640), v15, 0xA0u);
  615.         }
  616.         v9 += 8;
  617.       }
  618.       v9 = 0;
  619.       while ( v9 <= 0x3F )
  620.       {
  621.         v12 = v7 + (v9 << 10);
  622.         v11 = 20 * (v9 >> 3);
  623.         sub_402D20(v7 + (v9 << 10) + 640, 0xA0u, (int)&v16[20 * (v9 >> 3)]);
  624.         v9 += 8;
  625.       }
  626.       v9 = 0;
  627.       while ( v9 <= 0x3F )
  628.       {
  629.         v12 = v7 + (v9 << 10);
  630.         memcpy((void *)(v7 + (v9++ << 10) + 832), v16, 0xA0u);
  631.       }
  632.       v9 = 0;
  633.       while ( v9 <= 0x3F )
  634.       {
  635.         v12 = v7 + (v9 << 10);
  636.         memset(&v17, 0, 0x10u);
  637.         sub_402D41(v12, v12, 0x400u, a1 + 20, (int)&v17);
  638.         ++v9;
  639.       }
  640.       v9 = 0;
  641.       while ( v9 <= 0x3F )
  642.       {
  643.         v12 = a3 + 31744 * v9;
  644.         v11 = v7 + (v9 << 10);
  645.         memcpy(&v17, (const void *)(v7 + (v9 << 10) + 976), 0x10u);
  646.         sub_402D41(v12, v12, 0x7C00u, a1 + 20, (int)&v17);
  647.         ++v9;
  648.       }
  649.       v5 = *(_DWORD *)(a1 + 12)
  650.          + ((*(_DWORD *)(a1 + 8) + (unsigned __int64)(unsigned int)(4 * *(_DWORD *)(a1 + 56))) >> 32);
  651.       v18 = *(_DWORD *)(a1 + 8) + 4 * *(_DWORD *)(a1 + 56);
  652.       v6 = __MKCADD__(a2 << 21, v18);
  653.       v18 += a2 << 21;
  654.       v19 = v6 + v5;
  655.       fseeko64(*(_DWORD *)a1, v18, v6 + v5, 0);
  656.       v9 = 0;
  657.       while ( v9 <= 0x3F )
  658.       {
  659.         v12 = a3 + 31744 * v9;
  660.         v11 = v7 + (v9 << 10);
  661.         if ( fwrite((const void *)(v7 + (v9 << 10)), 0x400u, 1u, *(FILE **)a1) != 1 )
  662.           return 1;
  663.         if ( fwrite((const void *)v12, 0x7C00u, 1u, *(FILE **)a1) != 1 )
  664.           return 1;
  665.         ++v9;
  666.       }
  667.       if ( sub_401BCD(a1, a2) )
  668.       {
  669.         v8 = 1;
  670.       }
  671.       else
  672.       {
  673.         free((void *)v7);
  674.         v8 = 0;
  675.       }
  676.     }
  677.   }
  678.   else
  679.   {
  680.     v8 = 1;
  681.   }
  682.   return v8;
  683. }
  684.  
  685. //----- (004027CF) --------------------------------------------------------
  686. signed int __cdecl sub_4027CF(int a1, unsigned __int64 a2, size_t a3, const void *a4)
  687. {
  688.   unsigned __int64 v5; // qax@3
  689.   void *v6; // eax@3
  690.   signed int v7; // [sp+10h] [bp-28h]@2
  691.   int v8; // [sp+30h] [bp-8h]@3
  692.   int v9; // [sp+2Ch] [bp-Ch]@3
  693.   int v10; // [sp+20h] [bp-18h]@3
  694.   int v11; // [sp+24h] [bp-14h]@3
  695.   int v12; // [sp+28h] [bp-10h]@3
  696.   void *v13; // [sp+34h] [bp-4h]@3
  697.   unsigned int v14; // [sp+1Ch] [bp-1Ch]@5
  698.   int v15; // [sp+18h] [bp-20h]@7
  699.   int v16; // [sp+14h] [bp-24h]@7
  700.  
  701.   if ( a1 )
  702.   {
  703.     v8 = a2 / 0x1F0000;
  704.     v5 = (a2 + a3) / 0x1F0000;
  705.     v9 = (a2 + a3) / 0x1F0000;
  706.     v10 = (_DWORD)v5 - v8 + 1;
  707.     v11 = ((_DWORD)v5 - v8 + 1) << 6;
  708.     v12 = (_DWORD)a2 - 2031616 * v8;
  709.     v6 = sub_403710(2031616 * ((_DWORD)v5 - v8 + 1));
  710.     v13 = v6;
  711.     if ( v6 )
  712.     {
  713.       v14 = 0;
  714.       while ( v14 < v10 )
  715.       {
  716.         v15 = (int)((char *)v13 + 2031616 * v14);
  717.         v16 = v8 + v14;
  718.         if ( sub_401E60((FILE **)a1, v8 + v14, (int)((char *)v13 + 2031616 * v14), 0) )
  719.           return 1;
  720.         ++v14;
  721.       }
  722.       memcpy((char *)v13 + v12, a4, a3);
  723.       v14 = 0;
  724.       while ( v14 < v10 )
  725.       {
  726.         v16 = (int)((char *)v13 + 2031616 * v14);
  727.         v15 = v8 + v14;
  728.         if ( sub_402135(a1, v8 + v14, (int)((char *)v13 + 2031616 * v14)) )
  729.           return 1;
  730.         ++v14;
  731.       }
  732.       free(v13);
  733.       v7 = 0;
  734.     }
  735.     else
  736.     {
  737.       v7 = 1;
  738.     }
  739.   }
  740.   else
  741.   {
  742.     v7 = 1;
  743.   }
  744.   return v7;
  745. }
  746.  
  747. //----- (0040297D) --------------------------------------------------------
  748. signed int __cdecl sub_40297D(FILE **a1)
  749. {
  750.   signed int v2; // [sp+18h] [bp-7C10h]@2
  751.   char v3; // [sp+20h] [bp-7C08h]@3
  752.   signed int v4; // [sp+1Ch] [bp-7C0Ch]@5
  753.   int v5; // [sp+440h] [bp-77E8h]@5
  754.  
  755.   if ( a1 )
  756.   {
  757.     if ( sub_401CAF(a1, 0, (int)&v3, 0) )
  758.     {
  759.       v2 = -1;
  760.     }
  761.     else
  762.     {
  763.       sub_40394C((int)&v4, &v5, 4u);
  764.       v4 *= 4;
  765.       v2 = v4;
  766.     }
  767.   }
  768.   else
  769.   {
  770.     v2 = -1;
  771.   }
  772.   return v2;
  773. }
  774.  
  775. //----- (00402A13) --------------------------------------------------------
  776. int __cdecl sub_402A13(FILE **a1)
  777. {
  778.   signed int v2; // eax@3
  779.   int v3; // eax@5
  780.   int v4; // [sp+18h] [bp-10h]@2
  781.   signed int v5; // [sp+20h] [bp-8h]@3
  782.   int v6; // [sp+24h] [bp-4h]@3
  783.   int v7; // [sp+1Ch] [bp-Ch]@5
  784.  
  785.   if ( a1 )
  786.   {
  787.     v2 = sub_40297D(a1);
  788.     v5 = v2;
  789.     if ( sub_401FCF(a1, (unsigned int)v2, 0x100u, (int)&v6) )
  790.     {
  791.       v4 = 0;
  792.     }
  793.     else
  794.     {
  795.       v3 = sub_401290(v6);
  796.       v7 = v3;
  797.       if ( v3 )
  798.       {
  799.         free((void *)v6);
  800.         v4 = v7;
  801.       }
  802.       else
  803.       {
  804.         v4 = 0;
  805.       }
  806.     }
  807.   }
  808.   else
  809.   {
  810.     v4 = 0;
  811.   }
  812.   return v4;
  813. }
  814.  
  815. //----- (00402D20) --------------------------------------------------------
  816. int __cdecl sub_402D20(int a1, unsigned int a2, int a3)
  817. {
  818.   return sub_4053F0(a1, a2, a3);
  819. }
  820.  
  821. //----- (00402D41) --------------------------------------------------------
  822. int __cdecl sub_402D41(int a1, int a2, unsigned int a3, int a4, int a5)
  823. {
  824.   char v6; // [sp+20h] [bp-108h]@1
  825.  
  826.   sub_403FE0(a4, 128, (int)&v6);
  827.   return sub_4051A0(a1, a2, a3, (int)&v6, a5, 1);
  828. }
  829.  
  830. //----- (00402D9B) --------------------------------------------------------
  831. int __cdecl sub_402D9B(int a1, int a2, unsigned int a3, int a4, int a5)
  832. {
  833.   char v6; // [sp+20h] [bp-108h]@1
  834.  
  835.   sub_4043D0(a4, 128, (int)&v6);
  836.   return sub_4051A0(a1, a2, a3, (int)&v6, a5, 0);
  837. }
  838.  
  839. //----- (00402E00) --------------------------------------------------------
  840. unsigned int __cdecl sub_402E00(int a1)
  841. {
  842.   unsigned int result; // eax@1
  843.   int v2; // [sp+14h] [bp-4h]@1
  844.   int v3; // [sp+10h] [bp-8h]@1
  845.   unsigned int v4; // [sp+Ch] [bp-Ch]@1
  846.  
  847.   v2 = a1;
  848.   v3 = a1 + 320;
  849.   sub_403764(a1);
  850.   sub_4037A0(v3 + 144);
  851.   sub_403764(v3 + 152);
  852.   sub_4037A0(v3 + 156);
  853.   result = sub_403743(v3 + 164);
  854.   v4 = 0;
  855.   while ( v4 <= 7 )
  856.   {
  857.     sub_403764(v3 + 8 * v4 + 292);
  858.     sub_403764(v3 + 8 * v4 + 296);
  859.     result = (unsigned int)&v4;
  860.     ++v4;
  861.   }
  862.   return result;
  863. }
  864.  
  865. //----- (004031C0) --------------------------------------------------------
  866. unsigned int __cdecl sub_4031C0(int a1)
  867. {
  868.   unsigned int result; // eax@1
  869.   int v2; // [sp+14h] [bp-4h]@1
  870.   int v3; // [sp+10h] [bp-8h]@1
  871.   int v4; // [sp+Ch] [bp-Ch]@1
  872.   unsigned int v5; // [sp+8h] [bp-10h]@1
  873.  
  874.   v2 = a1;
  875.   v3 = a1 + 484;
  876.   v4 = a1 + 320;
  877.   sub_403764(a1);
  878.   sub_4037A0(v4 + 68);
  879.   sub_4037A0(v4 + 76);
  880.   sub_403764(v4 + 84);
  881.   sub_403743(v4 + 88);
  882.   sub_403764(v4 + 152);
  883.   sub_403743(v4 + 156);
  884.   sub_403743(v4 + 158);
  885.   result = sub_403743(v4 + 160);
  886.   v5 = 0;
  887.   while ( v5 <= 0x1FF )
  888.   {
  889.     sub_403764(v3 + 36 * v5);
  890.     sub_403743(v3 + 36 * v5 + 4);
  891.     sub_403743(v3 + 36 * v5 + 6);
  892.     sub_4037A0(v3 + 36 * v5 + 8);
  893.     result = (unsigned int)&v5;
  894.     ++v5;
  895.   }
  896.   return result;
  897. }
  898.  
  899. //----- (004035AD) --------------------------------------------------------
  900. signed int __cdecl sub_4035AD(const void *a1)
  901. {
  902.   signed int v2; // [sp+14h] [bp-4A34h]@2
  903.   char v3; // [sp+50h] [bp-49F8h]@3
  904.   int v4; // [sp+190h] [bp-48B8h]@3
  905.   int v5; // [sp+4Ch] [bp-49FCh]@3
  906.   char *v6; // [sp+48h] [bp-4A00h]@3
  907.   unsigned __int16 v7; // [sp+22Eh] [bp-481Ah]@3
  908.   unsigned int v8; // [sp+18h] [bp-4A30h]@3
  909.   __int16 v9; // [sp+1Eh] [bp-4A2Ah]@3
  910.   char v10; // [sp+20h] [bp-4A28h]@4
  911.  
  912.   if ( a1 )
  913.   {
  914.     memcpy(&v3, a1, 0x49E4u);
  915.     v5 = (int)&v4;
  916.     v6 = &v3;
  917.     v8 = 36 * v7 + 164;
  918.     sub_4031C0((int)&v3);
  919.     memcpy(v6 + 4, "WaNiNKoKOWaSHeRe!", 0x100u);
  920.     v9 = 0;
  921.     while ( 1 )
  922.     {
  923.       memcpy((void *)(v5 + 94), &v9, 2u);
  924.       sub_4053F0(v5, v8, (int)&v10);
  925.       if ( !v10 )
  926.         break;
  927.       ++v9;
  928.     }
  929.     sub_4031C0((int)&v3);
  930.     memcpy((void *)a1, &v3, 0x49E4u);
  931.     v2 = 0;
  932.   }
  933.   else
  934.   {
  935.     v2 = 1;
  936.   }
  937.   return v2;
  938. }
  939.  
  940. //----- (00403710) --------------------------------------------------------
  941. void *__cdecl sub_403710(size_t a1)
  942. {
  943.   void *v2; // eax@1
  944.   void *v3; // [sp+14h] [bp-4h]@1
  945.  
  946.   v2 = malloc(a1);
  947.   v3 = v2;
  948.   memset(v2, 0, a1);
  949.   return v3;
  950. }
  951.  
  952. //----- (00403743) --------------------------------------------------------
  953. unsigned int __cdecl sub_403743(int a1)
  954. {
  955.   unsigned int result; // eax@1
  956.  
  957.   result = ((unsigned int)*(_WORD *)a1 >> 8) | (*(_WORD *)a1 << 8);
  958.   *(_WORD *)a1 = result;
  959.   return result;
  960. }
  961.  
  962. //----- (00403764) --------------------------------------------------------
  963. int __cdecl sub_403764(int a1)
  964. {
  965.   int result; // eax@1
  966.   int v2; // eax@1
  967.  
  968.   v2 = *(_DWORD *)a1 << 8;
  969.   result = (*(_DWORD *)a1 >> 8) & 0xFF00 | v2 & 0xFF0000 | (*(_DWORD *)a1 >> 24) | (*(_DWORD *)a1 << 24);
  970.   *(_DWORD *)a1 = result;
  971.   return result;
  972. }
  973.  
  974. //----- (004037A0) --------------------------------------------------------
  975. int __cdecl sub_4037A0(int a1)
  976. {
  977.   int result; // eax@1
  978.   int v2; // edx@1
  979.   int v3; // ebx@1
  980.   int v4; // eax@1
  981.   int v5; // edx@1
  982.   int v6; // [sp+Ch] [bp-14h]@1
  983.   int v7; // [sp+0h] [bp-20h]@1
  984.   int v8; // [sp+4h] [bp-1Ch]@1
  985.  
  986.   v6 = a1;
  987.   v2 = *(_DWORD *)a1 << 8;
  988.   v3 = (unsigned __int8)(unsigned int)(*(_QWORD *)a1 << 8 >> 32) | (*(_QWORD *)a1 << 24 >> 32) & 0xFF00 | v2 & 0xFF0000;
  989.   v4 = *(_QWORD *)a1 >> 24;
  990.   v7 = v4 & 0xFF0000 | (*(_QWORD *)a1 >> 8) & 0xFF000000 | (*(_DWORD *)(a1 + 4) >> 24);
  991.   v8 = v3;
  992.   v5 = *(_DWORD *)a1 << 24;
  993.   *(_DWORD *)a1 = (*(_DWORD *)(a1 + 4) >> 8) & 0xFF00 | v7;
  994.   result = v5 | v3;
  995.   *(_DWORD *)(v6 + 4) = v5 | v3;
  996.   return result;
  997. }
  998.  
  999. //----- (004038F4) --------------------------------------------------------
  1000. size_t __cdecl sub_4038F4(int a1, FILE *a2)
  1001. {
  1002.   size_t v3; // eax@1
  1003.   int v4; // [sp+24h] [bp-4h]@1
  1004.   size_t v5; // [sp+20h] [bp-8h]@1
  1005.   size_t v6; // [sp+1Ch] [bp-Ch]@2
  1006.  
  1007.   v3 = fread(&v4, 4u, 1u, a2);
  1008.   v5 = v3;
  1009.   if ( v3 == 1 )
  1010.   {
  1011.     sub_403764((int)&v4);
  1012.     *(_DWORD *)a1 = v4;
  1013.     v6 = 0;
  1014.   }
  1015.   else
  1016.   {
  1017.     v6 = v5;
  1018.   }
  1019.   return v6;
  1020. }
  1021.  
  1022. //----- (0040394C) --------------------------------------------------------
  1023. void *__cdecl sub_40394C(int a1, const void *a2, size_t a3)
  1024. {
  1025.   void *v4; // eax@1
  1026.   int v5; // [sp+10h] [bp-8h]@1
  1027.   void *v6; // [sp+14h] [bp-4h]@1
  1028.   void *v7; // [sp+Ch] [bp-Ch]@2
  1029.  
  1030.   v4 = memcpy(&v5, a2, a3);
  1031.   v6 = v4;
  1032.   if ( v4 )
  1033.   {
  1034.     sub_403764((int)&v5);
  1035.     *(_DWORD *)a1 = v5;
  1036.     v7 = v6;
  1037.   }
  1038.   else
  1039.   {
  1040.     v7 = 0;
  1041.   }
  1042.   return v7;
  1043. }
  1044.  
  1045. //----- (00403A80) --------------------------------------------------------
  1046. signed int __cdecl sub_403A80(FILE **a1)
  1047. {
  1048.   int v2; // edx@1
  1049.   int v3; // edx@1
  1050.   char *v4; // edx@1
  1051.   int v5; // eax@1
  1052.   int v6; // edx@1
  1053.   FILE *v7; // eax@1
  1054.   __int64 v8; // ST04_8@5
  1055.   FILE *v9; // [sp+8Ch] [bp-1041Ch]@1
  1056.   unsigned __int64 v10; // [sp+50h] [bp-10458h]@1
  1057.   size_t v11; // [sp+68h] [bp-10440h]@1
  1058.   int v12; // [sp+6Ch] [bp-1043Ch]@1
  1059.   size_t v13; // [sp+60h] [bp-10448h]@1
  1060.   int v14; // [sp+64h] [bp-10444h]@1
  1061.   unsigned __int64 v15; // [sp+58h] [bp-10450h]@1
  1062.   __int64 v16; // [sp+80h] [bp-10428h]@1
  1063.   __int64 v17; // [sp+78h] [bp-10430h]@1
  1064.   __int64 v18; // [sp+70h] [bp-10438h]@1
  1065.   _BYTE v19[2048]; // [sp+90h] [bp-10418h]@1
  1066.   signed int v20; // [sp+44h] [bp-10464h]@2
  1067.   unsigned __int64 v23; // [sp+28h] [bp-10480h]@6
  1068.   char v24; // [sp+84A0h] [bp-8008h]@7
  1069.   char v25; // [sp+890h] [bp-FC18h]@7
  1070.   int v26; // [sp+8870h] [bp-7C38h]@7
  1071.   int v27; // [sp+88A0h] [bp-7C08h]@7
  1072.   char v28; // [sp+8A0h] [bp-FC08h]@7
  1073.  
  1074.   v9 = 0;
  1075.   v10 = 0i64;
  1076.   v11 = 676;
  1077.   v12 = 0;
  1078.   v13 = (size_t)*(a1 + 9);
  1079.   v14 = 0;
  1080.   v2 = 4 * (unsigned __int64)*(a1 + 15) >> 32;
  1081.   *(_DWORD *)&v15 = 4 * (_DWORD)*(a1 + 15);
  1082.   *((_DWORD *)&v15 + 1) = v2;
  1083.   v3 = (int)*(a1 + 3);
  1084.   *(_DWORD *)&v16 = *(a1 + 2);
  1085.   *((_DWORD *)&v16 + 1) = v3;
  1086.   v4 = (char *)*(a1 + 3) + (((unsigned __int64)*(a1 + 2) + (unsigned int)(4 * (_DWORD)*(a1 + 10))) >> 32);
  1087.   *(_DWORD *)&v17 = (char *)*(a1 + 2) + 4 * (_DWORD)*(a1 + 10);
  1088.   *((_DWORD *)&v17 + 1) = v4;
  1089.   v5 = 4 * (_DWORD)*(a1 + 14);
  1090.   v6 = (int)((char *)*(a1 + 3) + __MKCADD__(*(a1 + 2), v5));
  1091.   *(_DWORD *)&v18 = (char *)*(a1 + 2) + v5;
  1092.   *((_DWORD *)&v18 + 1) = v6;
  1093.   memset(v19, 0, 0x800u);
  1094.   fseeko64(*a1, v16, *((_DWORD *)&v16 + 1), 0);
  1095.   fread(v19, v11, 1u, *a1);
  1096.   fseeko64(*a1, v17, *((_DWORD *)&v17 + 1), 0);
  1097.   fread(&v19[-(-v11 & 0xFFFFFFC0)], v13, 1u, *a1);
  1098.   v7 = fopen("partition.iso", "wb");
  1099.   v9 = v7;
  1100.   if ( v7 )
  1101.   {
  1102.     fwrite(v19, 0x800u, 1u, v9);
  1103.     fseeko64(*a1, v18, *((_DWORD *)&v18 + 1), 0);
  1104.     __asm
  1105.     {
  1106.       fild    [ebp+var_10450]
  1107.       fstp    [ebp+var_10478]
  1108.     }
  1109.     if ( *((_DWORD *)&v15 + 1) < 0 )
  1110.     {
  1111.       __asm
  1112.       {
  1113.         fld     ds:tbyte_4092D0
  1114.         fld     [ebp+var_10478]
  1115.         faddp   st(1), st
  1116.         fstp    [ebp+var_10478]
  1117.       }
  1118.     }
  1119.     __asm
  1120.     {
  1121.       fld     [ebp+var_10478]
  1122.       fstp    [ebp+var_10460]
  1123.       fld     [ebp+var_10460]
  1124.       fld     ds:dbl_4092E0
  1125.       fdivp   st(1), st
  1126.       fstp    [esp+104A8h+var_104A4]
  1127.     }
  1128.     printf("    ISO size: %.3f MB\n", v8, *((_DWORD *)&v8 + 1));
  1129.     while ( 1 )
  1130.     {
  1131.       v23 = v10;
  1132.       if ( v10 >= v15 )
  1133.         break;
  1134.       fread(&v24, 0x8000u, 1u, *a1);
  1135.       memcpy(&v25, &v26, 0x10u);
  1136.       sub_402D9B((int)&v27, (int)&v28, 0x7C00u, (int)(a1 + 5), (int)&v25);
  1137.       fwrite(&v28, 0x7C00u, 1u, v9);
  1138.       v10 += 32768i64;
  1139.     }
  1140.     fclose(v9);
  1141.     v20 = 0;
  1142.   }
  1143.   else
  1144.   {
  1145.     v20 = 1;
  1146.   }
  1147.   return v20;
  1148. }
  1149.  
  1150. //----- (00403E2A) --------------------------------------------------------
  1151. int __cdecl main(int argc, const char **argv, const char *envp)
  1152. {
  1153.   void *v4; // eax@3
  1154.   signed int v5; // eax@5
  1155.   signed int v6; // eax@7
  1156.   signed int v7; // eax@16
  1157.   signed int v8; // eax@18
  1158.   signed int v9; // [sp+14h] [bp-14h]@1
  1159.   int v10; // [sp+24h] [bp-4h]@1
  1160.   int v11; // [sp+20h] [bp-8h]@1
  1161.   signed int v12; // [sp+18h] [bp-10h]@5
  1162.   unsigned int v13; // [sp+1Ch] [bp-Ch]@9
  1163.  
  1164.   v9 = 16;
  1165.   __main();
  1166.   v10 = 0;
  1167.   v11 = 0;
  1168.   if ( argc > 1 )
  1169.   {
  1170.     v4 = sub_401374();
  1171.     v10 = (int)v4;
  1172.     if ( v4 )
  1173.     {
  1174.       v5 = sub_4013B8(*(argv + 1), (FILE **)v10);
  1175.       v12 = v5;
  1176.       if ( v5 )
  1177.       {
  1178.         printf("[+] ERROR: Could not open \"%s\"!\n", *(argv + 1));
  1179.       }
  1180.       else
  1181.       {
  1182.         v6 = sub_40142A(v10);
  1183.         v12 = v6;
  1184.         if ( v6 )
  1185.         {
  1186.           printf("[+] ERROR: Could not retrieve ISO info!\n");
  1187.         }
  1188.         else
  1189.         {
  1190.           v13 = 0;
  1191.           while ( v13 < *(_DWORD *)(v10 + 16) )
  1192.           {
  1193.             if ( !*(_DWORD *)(117960 * v13 + *(_DWORD *)(v10 + 156) + 16) )
  1194.               v11 = *(_DWORD *)(v10 + 156) + 117960 * v13;
  1195.             ++v13;
  1196.           }
  1197.           if ( v11 )
  1198.           {
  1199.             v7 = sub_401A38(v11);
  1200.             v12 = v7;
  1201.             if ( v7 )
  1202.             {
  1203.               printf("[+] ERROR: Could not get partition title key!\n");
  1204.             }
  1205.             else
  1206.             {
  1207.               printf("[+] Creating backup ISO, please wait...\n");
  1208.               v8 = sub_403A80((FILE **)v11);
  1209.               v12 = v8;
  1210.               if ( v8 )
  1211.                 printf("\n    ERROR: Could not create the backup ISO!\n");
  1212.               else
  1213.                 printf("\n    Backup ISO created successfully!\n");
  1214.               sub_40140D((FILE **)v10);
  1215.             }
  1216.           }
  1217.           else
  1218.           {
  1219.             printf("[+] ERROR: Could not find game partition!\n");
  1220.           }
  1221.         }
  1222.       }
  1223.     }
  1224.     else
  1225.     {
  1226.       printf("[+] ERROR: No free memory available!\n");
  1227.     }
  1228.   }
  1229.   else
  1230.   {
  1231.     printf("[+] USAGE: %s <ISO file>\n", *argv);
  1232.   }
  1233.   printf("\n[+] Press any key to exit...\n");
  1234.   getchar();
  1235.   return 0;
  1236. }
  1237.  
  1238. //----- (00403FE0) --------------------------------------------------------
  1239. signed int __cdecl sub_403FE0(int a1, signed int a2, int a3)
  1240. {
  1241.   int v3; // ecx@1
  1242.   signed int v4; // ebp@1
  1243.   signed int v5; // edi@1
  1244.   signed int result; // eax@5
  1245.   int v7; // ebx@6
  1246.   int v8; // eax@19
  1247.   unsigned int v9; // ecx@19
  1248.   int v10; // ecx@22
  1249.   unsigned int v11; // esi@22
  1250.   unsigned int v12; // ecx@14
  1251.   int v13; // edx@14
  1252.   int v14; // esi@14
  1253.   int v15; // esi@14
  1254.   int v16; // esi@14
  1255.   int v17; // eax@18
  1256.   int v18; // esi@19
  1257.   int v19; // eax@19
  1258.   int v20; // eax@19
  1259.   int v21; // eax@19
  1260.   int v22; // ebp@21
  1261.   int v23; // edx@21
  1262.   int v24; // ebp@21
  1263.   int v25; // ebp@21
  1264.   int v26; // eax@22
  1265.   int v27; // ecx@22
  1266.   int v28; // ebp@22
  1267.   int v29; // ebp@22
  1268.   int v30; // ebp@22
  1269.  
  1270.   v3 = a1;
  1271.   v5 = 0;
  1272.   v4 = a2;
  1273.   if ( a1 && a3 )
  1274.   {
  1275.     if ( a2 == 128 || a2 == 192 || (result = -2, a2 == 256) )
  1276.     {
  1277.       v7 = a3;
  1278.       if ( a2 == 128 )
  1279.       {
  1280.         *(_DWORD *)(a3 + 240) = 10;
  1281.       }
  1282.       else
  1283.       {
  1284.         if ( a2 == 192 )
  1285.           *(_DWORD *)(a3 + 240) = 12;
  1286.         else
  1287.           *(_DWORD *)(a3 + 240) = 14;
  1288.       }
  1289.       *(_DWORD *)a3 = *(_BYTE *)(v3 + 3) ^ (*(_BYTE *)(v3 + 2) << 8) ^ (*(_BYTE *)(v3 + 1) << 16) ^ (*(_BYTE *)v3 << 24);
  1290.       *(_DWORD *)(a3 + 4) = *(_BYTE *)(v3 + 7) ^ (*(_BYTE *)(v3 + 6) << 8) ^ (*(_BYTE *)(v3 + 5) << 16) ^ (*(_BYTE *)(v3 + 4) << 24);
  1291.       *(_DWORD *)(a3 + 8) = *(_BYTE *)(v3 + 11) ^ (*(_BYTE *)(v3 + 10) << 8) ^ (*(_BYTE *)(v3 + 9) << 16) ^ (*(_BYTE *)(v3 + 8) << 24);
  1292.       *(_DWORD *)(a3 + 12) = *(_BYTE *)(v3 + 15) ^ (*(_BYTE *)(v3 + 14) << 8) ^ (*(_BYTE *)(v3 + 13) << 16) ^ (*(_BYTE *)(v3 + 12) << 24);
  1293.       if ( v4 == 128 )
  1294.       {
  1295.         while ( 1 )
  1296.         {
  1297.           v12 = *(_DWORD *)(v7 + 12);
  1298.           v13 = byte_40A880[BYTE1(v12)];
  1299.           v14 = dword_40BC80[v5] ^ LOBYTE(byte_40A880[v12 >> 24]) ^ byte_40A880[(unsigned __int8)v12] & 0xFF00 ^ v13 & 0xFF0000 ^ *(_DWORD *)v7 ^ byte_40A880[*(_BYTE *)(v7 + 14)] & 0xFF000000;
  1300.           *(_DWORD *)(v7 + 16) = v14;
  1301.           v15 = *(_DWORD *)(v7 + 4) ^ v14;
  1302.           *(_DWORD *)(v7 + 20) = v15;
  1303.           ++v5;
  1304.           v16 = *(_DWORD *)(v7 + 8) ^ v15;
  1305.           *(_DWORD *)(v7 + 24) = v16;
  1306.           *(_DWORD *)(v7 + 28) = v16 ^ v12;
  1307.           if ( v5 == 10 )
  1308.             break;
  1309.           v7 += 16;
  1310.         }
  1311.         result = 0;
  1312.       }
  1313.       else
  1314.       {
  1315.         *(_DWORD *)(a3 + 16) = *(_BYTE *)(v3 + 19) ^ (*(_BYTE *)(v3 + 18) << 8) ^ (*(_BYTE *)(v3 + 17) << 16) ^ (*(_BYTE *)(v3 + 16) << 24);
  1316.         *(_DWORD *)(a3 + 20) = *(_BYTE *)(v3 + 23) ^ (*(_BYTE *)(v3 + 22) << 8) ^ (*(_BYTE *)(v3 + 21) << 16) ^ (*(_BYTE *)(v3 + 20) << 24);
  1317.         if ( v4 == 192 )
  1318.         {
  1319.           while ( 1 )
  1320.           {
  1321.             v9 = *(_DWORD *)(v7 + 20);
  1322.             v18 = byte_40A880[BYTE1(v9)];
  1323.             v19 = dword_40BC80[v5] ^ LOBYTE(byte_40A880[v9 >> 24]) ^ byte_40A880[(unsigned __int8)v9] & 0xFF00 ^ v18 & 0xFF0000 ^ *(_DWORD *)v7 ^ byte_40A880[*(_BYTE *)(v7 + 22)] & 0xFF000000;
  1324.             *(_DWORD *)(v7 + 24) = v19;
  1325.             v20 = *(_DWORD *)(v7 + 4) ^ v19;
  1326.             *(_DWORD *)(v7 + 28) = v20;
  1327.             ++v5;
  1328.             v21 = *(_DWORD *)(v7 + 8) ^ v20;
  1329.             *(_DWORD *)(v7 + 32) = v21;
  1330.             v8 = *(_DWORD *)(v7 + 12) ^ v21;
  1331.             *(_DWORD *)(v7 + 36) = v8;
  1332.             if ( v5 == 8 )
  1333.               break;
  1334.             v17 = *(_DWORD *)(v7 + 16) ^ v8;
  1335.             *(_DWORD *)(v7 + 40) = v17;
  1336.             *(_DWORD *)(v7 + 44) = v17 ^ v9;
  1337.             v7 += 24;
  1338.           }
  1339.           result = 0;
  1340.         }
  1341.         else
  1342.         {
  1343.           *(_DWORD *)(a3 + 24) = *(_BYTE *)(v3 + 27) ^ (*(_BYTE *)(v3 + 26) << 8) ^ (*(_BYTE *)(v3 + 25) << 16) ^ (*(_BYTE *)(v3 + 24) << 24);
  1344.           result = 0;
  1345.           *(_DWORD *)(a3 + 28) = *(_BYTE *)(v3 + 31) ^ (*(_BYTE *)(v3 + 30) << 8) ^ (*(_BYTE *)(v3 + 29) << 16) ^ (*(_BYTE *)(v3 + 28) << 24);
  1346.           if ( v4 == 256 )
  1347.           {
  1348.             while ( 1 )
  1349.             {
  1350.               v11 = *(_DWORD *)(v7 + 28);
  1351.               v26 = *(_BYTE *)(v7 + 30);
  1352.               v27 = byte_40A880[BYTE1(v11)];
  1353.               v28 = dword_40BC80[v5] ^ LOBYTE(byte_40A880[v11 >> 24]) ^ byte_40A880[(_BYTE)v11] & 0xFF00 ^ v27 & 0xFF0000 ^ *(_DWORD *)v7 ^ byte_40A880[v26] & 0xFF000000;
  1354.               *(_DWORD *)(v7 + 32) = dword_40BC80[v5] ^ LOBYTE(byte_40A880[v11 >> 24]) ^ byte_40A880[(_BYTE)v11] & 0xFF00 ^ v27 & 0xFF0000 ^ *(_DWORD *)v7 ^ byte_40A880[v26] & 0xFF000000;
  1355.               v29 = *(_DWORD *)(v7 + 4) ^ v28;
  1356.               *(_DWORD *)(v7 + 36) = v29;
  1357.               v30 = *(_DWORD *)(v7 + 8) ^ v29;
  1358.               ++v5;
  1359.               v10 = v30 ^ *(_DWORD *)(v7 + 12);
  1360.               *(_DWORD *)(v7 + 40) = v30;
  1361.               *(_DWORD *)(v7 + 44) = v10;
  1362.               if ( v5 == 7 )
  1363.                 break;
  1364.               v22 = byte_40A880[((unsigned int)v10 >> 16) & 0xFF];
  1365.               v23 = LOBYTE(byte_40A880[(unsigned __int8)v10]) ^ byte_40A880[BYTE1(v10)] & 0xFF00 ^ v22 & 0xFF0000 ^ *(_DWORD *)(v7 + 16) ^ byte_40A880[(unsigned int)v10 >> 24] & 0xFF000000;
  1366.               v24 = v23 ^ *(_DWORD *)(v7 + 20);
  1367.               *(_DWORD *)(v7 + 52) = v23 ^ *(_DWORD *)(v7 + 20);
  1368.               v25 = *(_DWORD *)(v7 + 24) ^ v24;
  1369.               *(_DWORD *)(v7 + 48) = v23;
  1370.               *(_DWORD *)(v7 + 56) = v25;
  1371.               *(_DWORD *)(v7 + 60) = v25 ^ v11;
  1372.               v7 += 32;
  1373.             }
  1374.             result = 0;
  1375.           }
  1376.         }
  1377.       }
  1378.     }
  1379.   }
  1380.   else
  1381.   {
  1382.     result = -1;
  1383.   }
  1384.   return result;
  1385. }
  1386.  
  1387. //----- (004043D0) --------------------------------------------------------
  1388. signed int __cdecl sub_4043D0(int a1, signed int a2, int a3)
  1389. {
  1390.   signed int result; // eax@1
  1391.   int v4; // ebx@1
  1392.   int v5; // eax@2
  1393.   int v6; // ebp@2
  1394.   int v7; // edi@2
  1395.   int v8; // esi@2
  1396.   int v9; // ecx@3
  1397.   int v10; // ebx@3
  1398.   int v11; // ebx@6
  1399.   int v12; // edx@4
  1400.   int v13; // edx@4
  1401.   int v14; // edx@4
  1402.   int v15; // edx@4
  1403.   int v16; // ecx@7
  1404.   int v17; // eax@7
  1405.   unsigned int v18; // ecx@7
  1406.   int v19; // eax@7
  1407.   int v20; // edx@7
  1408.   unsigned int v21; // ecx@7
  1409.   int v22; // eax@7
  1410.   int v23; // edx@7
  1411.   unsigned int v24; // ecx@7
  1412.   signed int v25; // [sp+0h] [bp-14h]@2
  1413.  
  1414.   v4 = a3;
  1415.   result = sub_403FE0(a1, a2, a3);
  1416.   if ( result >= 0 )
  1417.   {
  1418.     v5 = *(_DWORD *)(v4 + 240);
  1419.     v6 = 0;
  1420.     v7 = 4 * v5;
  1421.     v8 = v4;
  1422.     v25 = *(_DWORD *)(v4 + 240);
  1423.     if ( 4 * v5 > 0 )
  1424.     {
  1425.       v10 = v4 + 16 * v5;
  1426.       v9 = v8;
  1427.       do
  1428.       {
  1429.         v12 = *(_DWORD *)v9;
  1430.         *(_DWORD *)v9 = *(_DWORD *)v10;
  1431.         *(_DWORD *)v10 = v12;
  1432.         v13 = *(_DWORD *)(v9 + 4);
  1433.         *(_DWORD *)(v9 + 4) = *(_DWORD *)(v10 + 4);
  1434.         *(_DWORD *)(v10 + 4) = v13;
  1435.         v14 = *(_DWORD *)(v9 + 8);
  1436.         *(_DWORD *)(v9 + 8) = *(_DWORD *)(v10 + 8);
  1437.         *(_DWORD *)(v10 + 8) = v14;
  1438.         v15 = *(_DWORD *)(v9 + 12);
  1439.         v6 += 4;
  1440.         v7 -= 4;
  1441.         *(_DWORD *)(v9 + 12) = *(_DWORD *)(v10 + 12);
  1442.         *(_DWORD *)(v10 + 12) = v15;
  1443.         v9 += 16;
  1444.         v10 -= 16;
  1445.       }
  1446.       while ( v6 < v7 );
  1447.     }
  1448.     if ( v25 > 1 )
  1449.     {
  1450.       v11 = v25 - 1;
  1451.       do
  1452.       {
  1453.         v8 += 16;
  1454.         v16 = *(_DWORD *)v8;
  1455.         v17 = dword_409C80[LOBYTE(byte_40A880[BYTE1(v16)])] ^ dword_40A480[LOBYTE(byte_40A880[*(_DWORD *)v8 >> 24])] ^ dword_40A080[LOBYTE(byte_40A880[(*(_DWORD *)v8 >> 16) & 0xFF])];
  1456.         v18 = *(_DWORD *)(v8 + 4);
  1457.         *(_DWORD *)v8 = dword_409880[LOBYTE(byte_40A880[*(_DWORD *)v8 & 0xFF])] ^ v17;
  1458.         v19 = dword_409C80[LOBYTE(byte_40A880[BYTE1(v18)])] ^ dword_40A480[LOBYTE(byte_40A880[v18 >> 24])] ^ dword_40A080[LOBYTE(byte_40A880[(v18 >> 16) & 0xFF])];
  1459.         v20 = LOBYTE(byte_40A880[(_BYTE)v18]);
  1460.         v21 = *(_DWORD *)(v8 + 8);
  1461.         *(_DWORD *)(v8 + 4) = dword_409880[v20] ^ v19;
  1462.         v22 = dword_409C80[LOBYTE(byte_40A880[BYTE1(v21)])] ^ dword_40A480[LOBYTE(byte_40A880[v21 >> 24])] ^ dword_40A080[LOBYTE(byte_40A880[(v21 >> 16) & 0xFF])];
  1463.         v23 = LOBYTE(byte_40A880[(_BYTE)v21]);
  1464.         v24 = *(_DWORD *)(v8 + 12);
  1465.         *(_DWORD *)(v8 + 8) = dword_409880[v23] ^ v22;
  1466.         --v11;
  1467.         *(_DWORD *)(v8 + 12) = dword_409880[LOBYTE(byte_40A880[(_BYTE)v24])] ^ dword_409C80[LOBYTE(byte_40A880[BYTE1(v24)])] ^ dword_40A480[LOBYTE(byte_40A880[v24 >> 24])] ^ dword_40A080[LOBYTE(byte_40A880[(v24 >> 16) & 0xFF])];
  1468.       }
  1469.       while ( v11 );
  1470.     }
  1471.     result = 0;
  1472.   }
  1473.   return result;
  1474. }
  1475.  
  1476. //----- (00404610) --------------------------------------------------------
  1477. unsigned int __cdecl sub_404610(int a1, int a2, int a3)
  1478. {
  1479.   int v3; // ecx@1
  1480.   int v4; // ebx@1
  1481.   int v5; // edi@1
  1482.   int v6; // esi@1
  1483.   int v7; // edx@3
  1484.   int v8; // ebp@3
  1485.   unsigned int result; // eax@4
  1486.   int v10; // edi@2
  1487.   int v11; // edi@2
  1488.   int v12; // esi@2
  1489.   int v13; // eax@2
  1490.   int v14; // esi@2
  1491.   unsigned int v15; // edx@2
  1492.   int v16; // esi@2
  1493.   int v17; // ebx@2
  1494.   int v18; // ecx@2
  1495.   int v19; // ebx@2
  1496.   int v20; // ebp@2
  1497.   int v21; // ecx@2
  1498.   int v22; // ebp@3
  1499.   int v23; // ebp@3
  1500.   int v24; // eax@3
  1501.   int v25; // edx@3
  1502.   unsigned int v26; // ecx@3
  1503.   int v27; // edx@3
  1504.   char v28; // zf@3
  1505.   int v29; // edi@4
  1506.   int v30; // ecx@4
  1507.   int v31; // ebx@4
  1508.   int v32; // ecx@4
  1509.   unsigned int v33; // edx@4
  1510.   int v34; // esi@4
  1511.   int v35; // ecx@4
  1512.   int v36; // ebp@4
  1513.   int v37; // ecx@4
  1514.   int v38; // [sp+84h] [bp-14h]@1
  1515.   int v39; // [sp+78h] [bp-20h]@1
  1516.   int v40; // [sp+7Ch] [bp-1Ch]@2
  1517.   int v41; // [sp+80h] [bp-18h]@2
  1518.   int v42; // [sp+30h] [bp-68h]@2
  1519.   int v43; // [sp+2Ch] [bp-6Ch]@2
  1520.   int v44; // [sp+28h] [bp-70h]@2
  1521.   int v45; // [sp+20h] [bp-78h]@2
  1522.   int v46; // [sp+1Ch] [bp-7Ch]@2
  1523.   int v47; // [sp+18h] [bp-80h]@2
  1524.   int v48; // [sp+14h] [bp-84h]@2
  1525.   int v49; // [sp+10h] [bp-88h]@2
  1526.   int v50; // [sp+Ch] [bp-8Ch]@2
  1527.   int v51; // [sp+8h] [bp-90h]@2
  1528.   int v52; // [sp+4h] [bp-94h]@2
  1529.   int v53; // [sp+0h] [bp-98h]@2
  1530.   int v54; // [sp+70h] [bp-28h]@3
  1531.   int v55; // [sp+6Ch] [bp-2Ch]@3
  1532.   int v56; // [sp+68h] [bp-30h]@3
  1533.   unsigned int v57; // [sp+64h] [bp-34h]@3
  1534.   int v58; // [sp+5Ch] [bp-3Ch]@3
  1535.   int v59; // [sp+58h] [bp-40h]@3
  1536.   int v60; // [sp+54h] [bp-44h]@3
  1537.   unsigned int v61; // [sp+50h] [bp-48h]@3
  1538.   int v62; // [sp+4Ch] [bp-4Ch]@3
  1539.   int v63; // [sp+48h] [bp-50h]@3
  1540.   int v64; // [sp+44h] [bp-54h]@3
  1541.  
  1542.   v38 = a3;
  1543.   v5 = *(_DWORD *)a3 ^ *(_BYTE *)(a1 + 3) ^ (*(_BYTE *)(a1 + 2) << 8) ^ (*(_BYTE *)(a1 + 1) << 16) ^ (*(_BYTE *)a1 << 24);
  1544.   v6 = *(_DWORD *)(a3 + 4) ^ *(_BYTE *)(a1 + 7) ^ (*(_BYTE *)(a1 + 6) << 8) ^ (*(_BYTE *)(a1 + 5) << 16) ^ (*(_BYTE *)(a1 + 4) << 24);
  1545.   v4 = *(_DWORD *)(a3 + 8) ^ *(_BYTE *)(a1 + 11) ^ (*(_BYTE *)(a1 + 10) << 8) ^ (*(_BYTE *)(a1 + 9) << 16) ^ (*(_BYTE *)(a1 + 8) << 24);
  1546.   v3 = *(_DWORD *)(a3 + 12) ^ *(_BYTE *)(a1 + 15) ^ (*(_BYTE *)(a1 + 14) << 8) ^ (*(_BYTE *)(a1 + 13) << 16) ^ (*(_BYTE *)(a1 + 12) << 24);
  1547.   v39 = *(_DWORD *)(a3 + 240) >> 1;
  1548.   while ( 1 )
  1549.   {
  1550.     v22 = dword_40B080[BYTE1(v4)] ^ dword_40B880[(unsigned int)v5 >> 24] ^ dword_40B480[((unsigned int)v6 >> 16) & 0xFF];
  1551.     v54 = ((unsigned int)v6 >> 16) & 0xFF;
  1552.     v23 = dword_40AC80[(unsigned __int8)v3] ^ v22;
  1553.     v55 = BYTE1(v4);
  1554.     v8 = *(_DWORD *)(v38 + 16) ^ v23;
  1555.     v56 = (unsigned __int8)v3;
  1556.     v57 = (unsigned int)v6 >> 24;
  1557.     v24 = dword_40B480[(unsigned __int8)((unsigned int)v4 >> 16)];
  1558.     v58 = (unsigned __int8)((unsigned int)v4 >> 16);
  1559.     v41 = dword_40B880[(unsigned int)v6 >> 24] ^ v24;
  1560.     v25 = dword_40B080[BYTE1(v3)];
  1561.     v59 = BYTE1(v3);
  1562.     v41 ^= v25;
  1563.     v41 ^= dword_40AC80[(_BYTE)v5];
  1564.     v60 = (_BYTE)v5;
  1565.     v26 = (unsigned int)v3 >> 16;
  1566.     v41 ^= *(_DWORD *)(v38 + 20);
  1567.     v61 = (unsigned int)v4 >> 24;
  1568.     v27 = dword_40B480[(unsigned __int8)v26];
  1569.     v62 = (unsigned __int8)v26;
  1570.     v40 = dword_40B880[(unsigned int)v4 >> 24] ^ v27;
  1571.     v63 = BYTE1(v5);
  1572.     v40 ^= dword_40B080[BYTE1(v5)];
  1573.     v40 ^= dword_40AC80[(_BYTE)v6];
  1574.     v64 = (_BYTE)v6;
  1575.     v40 ^= *(_DWORD *)(v38 + 24);
  1576.     v7 = *(_DWORD *)(v38 + 28) ^ dword_40AC80[(_BYTE)v4] ^ dword_40B080[BYTE1(v6)] ^ dword_40B880[v26 >> 8] ^ dword_40B480[((unsigned int)v5 >> 16) & 0xFF];
  1577.     v28 = v39-- == 1;
  1578.     v38 += 32;
  1579.     if ( v28 )
  1580.       break;
  1581.     v10 = dword_40B080[BYTE1(v40)] ^ dword_40B880[(unsigned int)v8 >> 24] ^ dword_40B480[((unsigned int)v41 >> 16) & 0xFF];
  1582.     v42 = ((unsigned int)v41 >> 16) & 0xFF;
  1583.     v11 = dword_40AC80[(unsigned __int8)v7] ^ v10;
  1584.     v43 = BYTE1(v40);
  1585.     v5 = *(_DWORD *)v38 ^ v11;
  1586.     v12 = dword_40B880[(unsigned int)v41 >> 24] ^ dword_40B480[((unsigned int)v40 >> 16) & 0xFF];
  1587.     v44 = (unsigned __int8)v7;
  1588.     v45 = ((unsigned int)v40 >> 16) & 0xFF;
  1589.     v13 = BYTE1(v7);
  1590.     v14 = dword_40B080[BYTE1(v7)] ^ v12;
  1591.     v15 = (unsigned int)v7 >> 16;
  1592.     v16 = dword_40AC80[(_BYTE)v8] ^ v14;
  1593.     v46 = v13;
  1594.     v47 = (_BYTE)v8;
  1595.     v6 = *(_DWORD *)(v38 + 4) ^ v16;
  1596.     v17 = dword_40B480[(unsigned __int8)v15];
  1597.     v48 = (unsigned __int8)v15;
  1598.     v18 = BYTE1(v8);
  1599.     v19 = dword_40AC80[(unsigned __int8)v41] ^ dword_40B080[BYTE1(v8)] ^ dword_40B880[(unsigned int)v40 >> 24] ^ v17;
  1600.     v20 = ((unsigned int)v8 >> 16) & 0xFF;
  1601.     v49 = v18;
  1602.     v50 = (unsigned __int8)v41;
  1603.     v4 = *(_DWORD *)(v38 + 8) ^ v19;
  1604.     v51 = v20;
  1605.     v21 = dword_40AC80[(unsigned __int8)v40] ^ dword_40B080[BYTE1(v41)] ^ dword_40B880[v15 >> 8] ^ dword_40B480[v20];
  1606.     v52 = BYTE1(v41);
  1607.     v53 = (unsigned __int8)v40;
  1608.     v3 = *(_DWORD *)(v38 + 12) ^ v21;
  1609.   }
  1610.   v29 = byte_40A880[((unsigned int)v41 >> 16) & 0xFF];
  1611.   v30 = *(_DWORD *)v38 ^ LOBYTE(byte_40A880[(unsigned __int8)v7]) ^ byte_40A880[BYTE1(v40)] & 0xFF00 ^ v29 & 0xFF0000 ^ byte_40A880[(unsigned int)v8 >> 24] & 0xFF000000;
  1612.   *(_BYTE *)a2 = (unsigned int)v30 >> 24;
  1613.   *(_BYTE *)(a2 + 1) = (unsigned int)v30 >> 16;
  1614.   *(_BYTE *)(a2 + 2) = BYTE1(v30);
  1615.   *(_BYTE *)(a2 + 3) = v30;
  1616.   v31 = byte_40A880[((unsigned int)v40 >> 16) & 0xFF];
  1617.   v32 = *(_DWORD *)(v38 + 4) ^ LOBYTE(byte_40A880[(_BYTE)v8]) ^ byte_40A880[BYTE1(v7)] & 0xFF00 ^ v31 & 0xFF0000 ^ byte_40A880[(unsigned int)v41 >> 24] & 0xFF000000;
  1618.   *(_BYTE *)(a2 + 4) = (unsigned int)v32 >> 24;
  1619.   *(_BYTE *)(a2 + 5) = (unsigned int)v32 >> 16;
  1620.   *(_BYTE *)(a2 + 6) = BYTE1(v32);
  1621.   *(_BYTE *)(a2 + 7) = v32;
  1622.   v33 = (unsigned int)v7 >> 16;
  1623.   v34 = byte_40A880[(unsigned __int8)v33];
  1624.   v35 = *(_DWORD *)(v38 + 8) ^ LOBYTE(byte_40A880[(unsigned __int8)v41]) ^ byte_40A880[BYTE1(v8)] & 0xFF00 ^ v34 & 0xFF0000 ^ byte_40A880[(unsigned int)v40 >> 24] & 0xFF000000;
  1625.   *(_BYTE *)(a2 + 8) = (unsigned int)v35 >> 24;
  1626.   *(_BYTE *)(a2 + 10) = BYTE1(v35);
  1627.   *(_BYTE *)(a2 + 11) = v35;
  1628.   *(_BYTE *)(a2 + 9) = (unsigned int)v35 >> 16;
  1629.   v36 = byte_40A880[((unsigned int)v8 >> 16) & 0xFF];
  1630.   v37 = *(_DWORD *)(v38 + 12) ^ LOBYTE(byte_40A880[(unsigned __int8)v40]) ^ byte_40A880[BYTE1(v41)] & 0xFF00 ^ v36 & 0xFF0000 ^ byte_40A880[v33 >> 8] & 0xFF000000;
  1631.   result = (unsigned int)v37 >> 24;
  1632.   *(_BYTE *)(a2 + 12) = (unsigned int)v37 >> 24;
  1633.   *(_BYTE *)(a2 + 13) = (unsigned int)v37 >> 16;
  1634.   *(_BYTE *)(a2 + 14) = BYTE1(v37);
  1635.   *(_BYTE *)(a2 + 15) = v37;
  1636.   return result;
  1637. }
  1638.  
  1639. //----- (00404BE0) --------------------------------------------------------
  1640. unsigned int __cdecl sub_404BE0(int a1, int a2, int a3)
  1641. {
  1642.   int v3; // ecx@1
  1643.   int v4; // ebx@1
  1644.   int v5; // ebp@1
  1645.   int v6; // esi@1
  1646.   int v7; // edx@3
  1647.   int v8; // edi@3
  1648.   unsigned int result; // eax@4
  1649.   int v10; // ebp@2
  1650.   int v11; // ebp@2
  1651.   int v12; // esi@2
  1652.   int v13; // esi@2
  1653.   int v14; // esi@2
  1654.   int v15; // ebx@2
  1655.   int v16; // ebx@2
  1656.   int v17; // edi@2
  1657.   int v18; // ecx@2
  1658.   int v19; // edx@3
  1659.   int v20; // eax@3
  1660.   int v21; // edi@3
  1661.   int v22; // ebx@3
  1662.   int v23; // edx@3
  1663.   int v24; // edx@3
  1664.   char v25; // zf@3
  1665.   int v26; // ebp@4
  1666.   int v27; // ecx@4
  1667.   int v28; // ebx@4
  1668.   int v29; // ecx@4
  1669.   int v30; // esi@4
  1670.   int v31; // ecx@4
  1671.   int v32; // edi@4
  1672.   int v33; // ecx@4
  1673.   int v34; // [sp+84h] [bp-14h]@1
  1674.   int v35; // [sp+78h] [bp-20h]@1
  1675.   int v36; // [sp+80h] [bp-18h]@2
  1676.   int v37; // [sp+34h] [bp-64h]@2
  1677.   int v38; // [sp+7Ch] [bp-1Ch]@2
  1678.   int v39; // [sp+30h] [bp-68h]@2
  1679.   int v40; // [sp+2Ch] [bp-6Ch]@2
  1680.   int v41; // [sp+24h] [bp-74h]@2
  1681.   int v42; // [sp+20h] [bp-78h]@2
  1682.   int v43; // [sp+1Ch] [bp-7Ch]@2
  1683.   int v44; // [sp+14h] [bp-84h]@2
  1684.   int v45; // [sp+10h] [bp-88h]@2
  1685.   int v46; // [sp+Ch] [bp-8Ch]@2
  1686.   int v47; // [sp+8h] [bp-90h]@2
  1687.   int v48; // [sp+4h] [bp-94h]@2
  1688.   int v49; // [sp+0h] [bp-98h]@2
  1689.   int v50; // [sp+70h] [bp-28h]@3
  1690.   int v51; // [sp+6Ch] [bp-2Ch]@3
  1691.   int v52; // [sp+68h] [bp-30h]@3
  1692.   int v53; // [sp+60h] [bp-38h]@3
  1693.   int v54; // [sp+5Ch] [bp-3Ch]@3
  1694.   int v55; // [sp+58h] [bp-40h]@3
  1695.   int v56; // [sp+50h] [bp-48h]@3
  1696.   int v57; // [sp+4Ch] [bp-4Ch]@3
  1697.   int v58; // [sp+48h] [bp-50h]@3
  1698.   int v59; // [sp+44h] [bp-54h]@3
  1699.  
  1700.   v34 = a3;
  1701.   v5 = *(_DWORD *)a3 ^ *(_BYTE *)(a1 + 3) ^ (*(_BYTE *)(a1 + 2) << 8) ^ (*(_BYTE *)(a1 + 1) << 16) ^ (*(_BYTE *)a1 << 24);
  1702.   v6 = *(_DWORD *)(a3 + 4) ^ *(_BYTE *)(a1 + 7) ^ (*(_BYTE *)(a1 + 6) << 8) ^ (*(_BYTE *)(a1 + 5) << 16) ^ (*(_BYTE *)(a1 + 4) << 24);
  1703.   v4 = *(_DWORD *)(a3 + 8) ^ *(_BYTE *)(a1 + 11) ^ (*(_BYTE *)(a1 + 10) << 8) ^ (*(_BYTE *)(a1 + 9) << 16) ^ (*(_BYTE *)(a1 + 8) << 24);
  1704.   v3 = *(_DWORD *)(a3 + 12) ^ *(_BYTE *)(a1 + 15) ^ (*(_BYTE *)(a1 + 14) << 8) ^ (*(_BYTE *)(a1 + 13) << 16) ^ (*(_BYTE *)(a1 + 12) << 24);
  1705.   v35 = *(_DWORD *)(a3 + 240) >> 1;
  1706.   while ( 1 )
  1707.   {
  1708.     v19 = dword_40A080[(unsigned __int8)((unsigned int)v3 >> 16)];
  1709.     v50 = (unsigned __int8)((unsigned int)v3 >> 16);
  1710.     v36 = dword_40A480[(unsigned int)v5 >> 24] ^ v19;
  1711.     v36 ^= dword_409C80[BYTE1(v4)];
  1712.     v51 = BYTE1(v4);
  1713.     v36 ^= dword_409880[(_BYTE)v6];
  1714.     v52 = (_BYTE)v6;
  1715.     v36 ^= *(_DWORD *)(v34 + 16);
  1716.     v20 = dword_40A080[(unsigned __int8)((unsigned int)v5 >> 16)];
  1717.     v53 = (unsigned __int8)((unsigned int)v5 >> 16);
  1718.     v38 = dword_40A480[(unsigned int)v6 >> 24] ^ v20;
  1719.     v38 ^= dword_409C80[BYTE1(v3)];
  1720.     v38 ^= dword_409880[(unsigned __int8)v4];
  1721.     v54 = BYTE1(v3);
  1722.     v55 = (unsigned __int8)v4;
  1723.     v38 ^= *(_DWORD *)(v34 + 20);
  1724.     v21 = dword_40A480[(unsigned int)v4 >> 24] ^ dword_40A080[((unsigned int)v6 >> 16) & 0xFF];
  1725.     v56 = ((unsigned int)v6 >> 16) & 0xFF;
  1726.     v57 = BYTE1(v5);
  1727.     v22 = ((unsigned int)v4 >> 16) & 0xFF;
  1728.     v8 = *(_DWORD *)(v34 + 24) ^ dword_409880[(unsigned __int8)v3] ^ dword_409C80[BYTE1(v5)] ^ v21;
  1729.     v23 = dword_40A080[v22];
  1730.     v58 = (unsigned __int8)v3;
  1731.     v24 = dword_40A480[(unsigned int)v3 >> 24] ^ v23;
  1732.     v59 = v22;
  1733.     v7 = *(_DWORD *)(v34 + 28) ^ dword_409880[(_BYTE)v5] ^ dword_409C80[BYTE1(v6)] ^ v24;
  1734.     v25 = v35-- == 1;
  1735.     v34 += 32;
  1736.     if ( v25 )
  1737.       break;
  1738.     v10 = dword_409C80[BYTE1(v8)] ^ dword_40A480[(unsigned int)v36 >> 24] ^ dword_40A080[((unsigned int)v7 >> 16) & 0xFF];
  1739.     v37 = ((unsigned int)v7 >> 16) & 0xFF;
  1740.     v11 = dword_409880[(unsigned __int8)v38] ^ v10;
  1741.     v39 = BYTE1(v8);
  1742.     v5 = *(_DWORD *)v34 ^ v11;
  1743.     v12 = dword_40A480[(unsigned int)v38 >> 24] ^ dword_40A080[((unsigned int)v36 >> 16) & 0xFF];
  1744.     v40 = (unsigned __int8)v38;
  1745.     v13 = dword_409C80[BYTE1(v7)] ^ v12;
  1746.     v41 = ((unsigned int)v36 >> 16) & 0xFF;
  1747.     v42 = BYTE1(v7);
  1748.     v14 = dword_409880[(_BYTE)v8] ^ v13;
  1749.     v43 = (_BYTE)v8;
  1750.     v6 = *(_DWORD *)(v34 + 4) ^ v14;
  1751.     v15 = dword_40A080[((unsigned int)v38 >> 16) & 0xFF];
  1752.     v44 = ((unsigned int)v38 >> 16) & 0xFF;
  1753.     v16 = dword_409880[(unsigned __int8)v7] ^ dword_409C80[BYTE1(v36)] ^ dword_40A480[(unsigned int)v8 >> 24] ^ v15;
  1754.     v17 = ((unsigned int)v8 >> 16) & 0xFF;
  1755.     v45 = BYTE1(v36);
  1756.     v46 = (unsigned __int8)v7;
  1757.     v4 = *(_DWORD *)(v34 + 8) ^ v16;
  1758.     v47 = v17;
  1759.     v18 = dword_409880[(unsigned __int8)v36] ^ dword_409C80[BYTE1(v38)] ^ dword_40A480[(unsigned int)v7 >> 24] ^ dword_40A080[v17];
  1760.     v48 = BYTE1(v38);
  1761.     v49 = (unsigned __int8)v36;
  1762.     v3 = *(_DWORD *)(v34 + 12) ^ v18;
  1763.   }
  1764.   v26 = byte_409480[((unsigned int)v7 >> 16) & 0xFF];
  1765.   v27 = *(_DWORD *)v34 ^ LOBYTE(byte_409480[(unsigned __int8)v38]) ^ byte_409480[BYTE1(v8)] & 0xFF00 ^ v26 & 0xFF0000 ^ byte_409480[(unsigned int)v36 >> 24] & 0xFF000000;
  1766.   *(_BYTE *)a2 = (unsigned int)v27 >> 24;
  1767.   *(_BYTE *)(a2 + 1) = (unsigned int)v27 >> 16;
  1768.   *(_BYTE *)(a2 + 2) = BYTE1(v27);
  1769.   *(_BYTE *)(a2 + 3) = v27;
  1770.   v28 = byte_409480[((unsigned int)v36 >> 16) & 0xFF];
  1771.   v29 = *(_DWORD *)(v34 + 4) ^ LOBYTE(byte_409480[(_BYTE)v8]) ^ byte_409480[BYTE1(v7)] & 0xFF00 ^ v28 & 0xFF0000 ^ byte_409480[(unsigned int)v38 >> 24] & 0xFF000000;
  1772.   *(_BYTE *)(a2 + 4) = (unsigned int)v29 >> 24;
  1773.   *(_BYTE *)(a2 + 7) = v29;
  1774.   *(_BYTE *)(a2 + 5) = (unsigned int)v29 >> 16;
  1775.   *(_BYTE *)(a2 + 6) = BYTE1(v29);
  1776.   v30 = byte_409480[((unsigned int)v38 >> 16) & 0xFF];
  1777.   v31 = *(_DWORD *)(v34 + 8) ^ LOBYTE(byte_409480[(unsigned __int8)v7]) ^ byte_409480[BYTE1(v36)] & 0xFF00 ^ v30 & 0xFF0000 ^ byte_409480[(unsigned int)v8 >> 24] & 0xFF000000;
  1778.   *(_BYTE *)(a2 + 8) = (unsigned int)v31 >> 24;
  1779.   *(_BYTE *)(a2 + 10) = BYTE1(v31);
  1780.   *(_BYTE *)(a2 + 11) = v31;
  1781.   *(_BYTE *)(a2 + 9) = (unsigned int)v31 >> 16;
  1782.   v32 = byte_409480[((unsigned int)v8 >> 16) & 0xFF];
  1783.   v33 = *(_DWORD *)(v34 + 12) ^ LOBYTE(byte_409480[(unsigned __int8)v36]) ^ byte_409480[BYTE1(v38)] & 0xFF00 ^ v32 & 0xFF0000 ^ byte_409480[(unsigned int)v7 >> 24] & 0xFF000000;
  1784.   result = (unsigned int)v33 >> 24;
  1785.   *(_BYTE *)(a2 + 12) = (unsigned int)v33 >> 24;
  1786.   *(_BYTE *)(a2 + 13) = (unsigned int)v33 >> 16;
  1787.   *(_BYTE *)(a2 + 14) = BYTE1(v33);
  1788.   *(_BYTE *)(a2 + 15) = v33;
  1789.   return result;
  1790. }
  1791.  
  1792. //----- (004051A0) --------------------------------------------------------
  1793. int __cdecl sub_4051A0(int a1, int a2, unsigned int a3, int a4, int a5, signed int a6)
  1794. {
  1795.   int v6; // ebx@1
  1796.   unsigned int v7; // ebp@1
  1797.   int v8; // edi@1
  1798.   int v9; // esi@1
  1799.   unsigned int v10; // edx@4
  1800.   int result; // eax@8
  1801.   unsigned int v12; // edx@11
  1802.   unsigned int v13; // edx@15
  1803.   int v14; // ecx@16
  1804.   unsigned int v15; // edx@19
  1805.   unsigned int v16; // edx@22
  1806.   unsigned int v17; // edx@28
  1807.   unsigned int v18; // edx@33
  1808.   unsigned int v19; // edx@36
  1809.   int v20; // [sp+0h] [bp-2Ch]@15
  1810.   int v21; // [sp+4h] [bp-28h]@15
  1811.   int v22; // [sp+8h] [bp-24h]@15
  1812.   int v23; // [sp+Ch] [bp-20h]@15
  1813.  
  1814.   v8 = a1;
  1815.   v6 = a2;
  1816.   v7 = a3;
  1817.   v9 = a5;
  1818.   if ( a6 == 1 )
  1819.   {
  1820.     while ( v7 > 0xF )
  1821.     {
  1822.       v12 = 0;
  1823.       do
  1824.       {
  1825.         *(_BYTE *)(v12 + v6) = *(_BYTE *)(v12 + v8) ^ *(_BYTE *)(v12 + v9);
  1826.         ++v12;
  1827.       }
  1828.       while ( v12 <= 0xF );
  1829.       sub_404610(v6, v6, a4);
  1830.       v9 = v6;
  1831.       v7 -= 16;
  1832.       v8 += 16;
  1833.       v6 += 16;
  1834.     }
  1835.     if ( v7 )
  1836.     {
  1837.       v15 = 0;
  1838.       while ( v15 < v7 )
  1839.       {
  1840.         *(_BYTE *)(v15 + v6) = *(_BYTE *)(v15 + v8) ^ *(_BYTE *)(v15 + v9);
  1841.         ++v15;
  1842.       }
  1843.       v16 = v7;
  1844.       while ( v16 <= 0xF )
  1845.       {
  1846.         *(_BYTE *)(v16 + v6) = *(_BYTE *)(v16 + v9);
  1847.         ++v16;
  1848.       }
  1849.       sub_404610(v6, v6, a4);
  1850.       v9 = v6;
  1851.     }
  1852.     *(_DWORD *)a5 = *(_DWORD *)v9;
  1853.     *(_DWORD *)(a5 + 4) = *(_DWORD *)(v9 + 4);
  1854.     *(_DWORD *)(a5 + 8) = *(_DWORD *)(v9 + 8);
  1855.     result = *(_DWORD *)(v9 + 12);
  1856.     *(_DWORD *)(a5 + 12) = *(_DWORD *)(v9 + 12);
  1857.   }
  1858.   else
  1859.   {
  1860.     if ( a1 == a2 )
  1861.     {
  1862.       while ( v7 > 0xF )
  1863.       {
  1864.         v20 = *(_DWORD *)v8;
  1865.         v21 = *(_DWORD *)(v8 + 4);
  1866.         v22 = *(_DWORD *)(v8 + 8);
  1867.         v23 = *(_DWORD *)(v8 + 12);
  1868.         sub_404BE0(v8, v6, a4);
  1869.         v13 = 0;
  1870.         do
  1871.         {
  1872.           v14 = a5;
  1873.           *(_BYTE *)(v13 + v6) ^= *(_BYTE *)(v13 + a5);
  1874.           ++v13;
  1875.         }
  1876.         while ( v13 <= 0xF );
  1877.         *(_DWORD *)v14 = v20;
  1878.         result = v21;
  1879.         *(_DWORD *)(v14 + 4) = v21;
  1880.         *(_DWORD *)(v14 + 8) = v22;
  1881.         *(_DWORD *)(v14 + 12) = v23;
  1882.         v7 -= 16;
  1883.         v8 += 16;
  1884.         v6 += 16;
  1885.       }
  1886.       if ( v7 )
  1887.       {
  1888.         v20 = *(_DWORD *)v8;
  1889.         v21 = *(_DWORD *)(v8 + 4);
  1890.         v22 = *(_DWORD *)(v8 + 8);
  1891.         v23 = *(_DWORD *)(v8 + 12);
  1892.         sub_404BE0((int)&v20, v6, a4);
  1893.         v18 = 0;
  1894.         while ( v18 < v7 )
  1895.         {
  1896.           *(_BYTE *)(v18 + v6) ^= *(_BYTE *)(v18 + a5);
  1897.           ++v18;
  1898.         }
  1899.         v19 = v7;
  1900.         while ( v19 <= 0xF )
  1901.         {
  1902.           *(_BYTE *)(v19 + v6) = *((_BYTE *)&v20 + v19);
  1903.           ++v19;
  1904.         }
  1905.         *(_DWORD *)a5 = v20;
  1906.         *(_DWORD *)(a5 + 4) = v21;
  1907.         *(_DWORD *)(a5 + 8) = v22;
  1908.         result = v23;
  1909.         *(_DWORD *)(a5 + 12) = v23;
  1910.       }
  1911.     }
  1912.     else
  1913.     {
  1914.       if ( a3 > 0xF )
  1915.       {
  1916.         do
  1917.         {
  1918.           sub_404BE0(v8, v6, a4);
  1919.           v10 = 0;
  1920.           do
  1921.           {
  1922.             *(_BYTE *)(v10 + v6) ^= *(_BYTE *)(v10 + v9);
  1923.             ++v10;
  1924.           }
  1925.           while ( v10 <= 0xF );
  1926.           v9 = v8;
  1927.           v7 -= 16;
  1928.           v8 += 16;
  1929.           v6 += 16;
  1930.         }
  1931.         while ( v7 > 0xF );
  1932.       }
  1933.       if ( v7 )
  1934.       {
  1935.         sub_404BE0(v8, (int)&v20, a4);
  1936.         v17 = 0;
  1937.         while ( v17 < v7 )
  1938.         {
  1939.           *(_BYTE *)(v17 + v6) = *((_BYTE *)&v20 + v17) ^ *(_BYTE *)(v17 + v9);
  1940.           ++v17;
  1941.         }
  1942.         v9 = v8;
  1943.       }
  1944.       *(_DWORD *)a5 = *(_DWORD *)v9;
  1945.       result = *(_DWORD *)(v9 + 4);
  1946.       *(_DWORD *)(a5 + 4) = *(_DWORD *)(v9 + 4);
  1947.       *(_DWORD *)(a5 + 8) = *(_DWORD *)(v9 + 8);
  1948.       *(_DWORD *)(a5 + 12) = *(_DWORD *)(v9 + 12);
  1949.     }
  1950.   }
  1951.   return result;
  1952. }
  1953.  
  1954. //----- (004053F0) --------------------------------------------------------
  1955. int __cdecl sub_4053F0(int a1, unsigned int a2, int a3)
  1956. {
  1957.   int v3; // ebx@1
  1958.   int v4; // edx@2
  1959.   signed int v6; // eax@2
  1960.   char v7; // [sp+0h] [bp-6Ch]@2
  1961.  
  1962.   v3 = a3;
  1963.   if ( !a3 )
  1964.     v3 = (int)&unk_40C010;
  1965.   v6 = sub_4059F0((int)&v7);
  1966.   v4 = 0;
  1967.   if ( v6 )
  1968.   {
  1969.     sub_4054D0((int)&v7, a1, a2);
  1970.     sub_405890(v3, (int)&v7);
  1971.     sub_405460(&v7, 96);
  1972.     v4 = v3;
  1973.   }
  1974.   return v4;
  1975. }
  1976.  
  1977. //----- (00405460) --------------------------------------------------------
  1978. void *__cdecl sub_405460(void *a1, int a2)
  1979. {
  1980.   void *v2; // edx@1
  1981.   int v3; // ecx@1
  1982.   void *v4; // edi@1
  1983.   int v5; // esi@1
  1984.   int v6; // ebx@2
  1985.   void *result; // eax@4
  1986.   int v8; // eax@3
  1987.  
  1988.   v5 = a2;
  1989.   v3 = a2 - 1;
  1990.   v4 = a1;
  1991.   v2 = a1;
  1992.   if ( a2 )
  1993.   {
  1994.     LOBYTE(v6) = byte_40C030;
  1995.     do
  1996.     {
  1997.       *(_BYTE *)v2 = v6;
  1998.       v2 = (char *)v2 + 1;
  1999.       v8 = (unsigned __int8)(byte_40C030 + ((_BYTE)v2 & 0xF));
  2000.       --v3;
  2001.       v6 = v8 + 17;
  2002.       byte_40C030 = (_BYTE)v8 + 17;
  2003.     }
  2004.     while ( v3 != -1 );
  2005.   }
  2006.   else
  2007.   {
  2008.     LOBYTE(v6) = byte_40C030;
  2009.   }
  2010.   result = memchr(v4, (unsigned __int8)v6, v5);
  2011.   if ( result )
  2012.     byte_40C030 = (_BYTE)v6 + 63;
  2013.   return result;
  2014. }
  2015.  
  2016. //----- (004054D0) --------------------------------------------------------
  2017. signed int __cdecl sub_4054D0(int a1, int a2, unsigned int a3)
  2018. {
  2019.   int v3; // ebx@1
  2020.   int v4; // ebp@1
  2021.   unsigned int v5; // edi@1
  2022.   int v6; // ecx@2
  2023.   int v7; // edx@3
  2024.   signed int v8; // eax@4
  2025.   signed int v9; // edx@5
  2026.   int v10; // esi@5
  2027.   int v11; // edx@6
  2028.   signed int v12; // ecx@10
  2029.   unsigned int v13; // esi@14
  2030.   char v14; // zf@17
  2031.   unsigned int v15; // ecx@17
  2032.   int v16; // ebp@17
  2033.   int v17; // esi@17
  2034.   int v18; // edx@20
  2035.   int v19; // ecx@20
  2036.   int v21; // edx@27
  2037.   int v22; // ebp@35
  2038.   signed int v23; // edi@35
  2039.   signed int v24; // ecx@40
  2040.   int v25; // edx@44
  2041.   int v26; // esi@44
  2042.   unsigned int v27; // eax@2
  2043.   int v28; // edx@11
  2044.   int v29; // edx@18
  2045.   int v30; // edx@41
  2046.   int v31; // [sp+8h] [bp-14h]@5
  2047.   signed int v32; // [sp+4h] [bp-18h]@5
  2048.  
  2049.   v5 = a3;
  2050.   v4 = a1;
  2051.   v3 = a2;
  2052.   if ( !a3 )
  2053.     return 1;
  2054.   v27 = *(_DWORD *)(a1 + 20);
  2055.   v6 = v27 + 8 * a3;
  2056.   if ( v27 > v6 )
  2057.     v7 = *(_DWORD *)(a1 + 24) + 1;
  2058.   else
  2059.     v7 = *(_DWORD *)(a1 + 24);
  2060.   v8 = *(_DWORD *)(a1 + 92);
  2061.   *(_DWORD *)(a1 + 24) = v7 + (a3 >> 29);
  2062.   *(_DWORD *)(a1 + 20) = v6;
  2063.   if ( v8 )
  2064.   {
  2065.     v31 = a1 + 28;
  2066.     v32 = v8 >> 2;
  2067.     v9 = v8 + v5;
  2068.     v10 = v8 & 3;
  2069.     if ( v8 + v5 > 0x3F )
  2070.     {
  2071.       v11 = *(_DWORD *)(v31 + 4 * v32);
  2072.       if ( v10 != 1 )
  2073.       {
  2074.         if ( v10 > 1 )
  2075.         {
  2076.           if ( v10 != 2 )
  2077.           {
  2078.             if ( v10 != 3 )
  2079.               goto LABEL_10;
  2080.             goto LABEL_53;
  2081.           }
  2082. LABEL_52:
  2083.           v11 |= *(_BYTE *)v3++ << 8;
  2084. LABEL_53:
  2085.           v11 |= *(_BYTE *)v3++;
  2086. LABEL_10:
  2087.           *(_DWORD *)(v31 + 4 * v32) = v11;
  2088.           v12 = v32;
  2089.           while ( 1 )
  2090.           {
  2091.             ++v12;
  2092.             if ( v12 > 15 )
  2093.               break;
  2094.             v28 = *(_BYTE *)(v3 + 3) | (*(_BYTE *)(v3 + 2) << 8) | (*(_BYTE *)(v3 + 1) << 16) | (*(_BYTE *)v3 << 24);
  2095.             v3 += 4;
  2096.             *(_DWORD *)(v31 + 4 * v12) = v28;
  2097.           }
  2098.           sub_40696C(v4, v31, 1);
  2099.           v5 = v5 + *(_DWORD *)(v4 + 92) - 64;
  2100.           *(_DWORD *)(v4 + 92) = 0;
  2101.           goto LABEL_14;
  2102.         }
  2103.         if ( v10 )
  2104.           goto LABEL_10;
  2105.         v11 = *(_BYTE *)a2 << 24;
  2106.         v3 = a2 + 1;
  2107.       }
  2108.       v11 |= *(_BYTE *)v3++ << 16;
  2109.       goto LABEL_52;
  2110.     }
  2111.     *(_DWORD *)(a1 + 92) = v9;
  2112.     if ( v10 + v5 <= 3 )
  2113.     {
  2114.       v21 = *(_DWORD *)(v31 + 4 * v32);
  2115.       if ( v10 != 1 )
  2116.       {
  2117.         if ( v10 > 1 )
  2118.         {
  2119.           if ( v10 != 2 )
  2120.           {
  2121. LABEL_30:
  2122.             *(_DWORD *)(v31 + 4 * v32) = v21;
  2123.             return 1;
  2124.           }
  2125. LABEL_57:
  2126.           v21 |= *(_BYTE *)v3 << 8;
  2127.           goto LABEL_30;
  2128.         }
  2129.         if ( v10 || (v21 = *(_BYTE *)a2 << 24, v3 = a2 + 1, --v5, !v5) )
  2130.           goto LABEL_30;
  2131.       }
  2132.       v21 |= *(_BYTE *)v3++ << 16;
  2133.       if ( v5 == 1 )
  2134.         goto LABEL_30;
  2135.       goto LABEL_57;
  2136.     }
  2137.     v23 = v9 >> 2;
  2138.     v22 = v9 & 3;
  2139.     if ( v10 )
  2140.       v6 = *(_DWORD *)(v31 + 4 * v32);
  2141.     if ( v10 != 1 )
  2142.     {
  2143.       if ( v10 > 1 )
  2144.       {
  2145.         if ( v10 != 2 )
  2146.         {
  2147.           if ( v10 != 3 )
  2148.           {
  2149. LABEL_40:
  2150.             *(_DWORD *)(v31 + 4 * v32) = v6;
  2151.             v24 = v32;
  2152.             while ( 1 )
  2153.             {
  2154.               ++v24;
  2155.               if ( v24 >= v23 )
  2156.                 break;
  2157.               v30 = *(_BYTE *)(v3 + 3) | (*(_BYTE *)(v3 + 2) << 8) | (*(_BYTE *)(v3 + 1) << 16) | (*(_BYTE *)v3 << 24);
  2158.               v3 += 4;
  2159.               *(_DWORD *)(v31 + 4 * v24) = v30;
  2160.             }
  2161.             if ( !v22 )
  2162.               return 1;
  2163.             v26 = 0;
  2164.             v25 = v3 + v22;
  2165.             if ( v22 != 2 )
  2166.             {
  2167.               if ( v22 <= 2 )
  2168.               {
  2169.                 if ( v22 != 1 )
  2170.                 {
  2171. LABEL_47:
  2172.                   *(_DWORD *)(v31 + 4 * v24) = v26;
  2173.                   return 1;
  2174.                 }
  2175. LABEL_66:
  2176.                 v26 |= *(_BYTE *)(v25 - 1) << 24;
  2177.                 goto LABEL_47;
  2178.               }
  2179.               if ( v22 != 3 )
  2180.                 goto LABEL_47;
  2181.               v25 = v3 + 2;
  2182.               v26 = *(_BYTE *)(v3 + 2) << 8;
  2183.             }
  2184.             --v25;
  2185.             v26 |= *(_BYTE *)v25 << 16;
  2186.             goto LABEL_66;
  2187.           }
  2188. LABEL_62:
  2189.           v6 |= *(_BYTE *)v3++;
  2190.           goto LABEL_40;
  2191.         }
  2192. LABEL_61:
  2193.         v6 |= *(_BYTE *)v3++ << 8;
  2194.         goto LABEL_62;
  2195.       }
  2196.       if ( v10 )
  2197.         goto LABEL_40;
  2198.       v6 = *(_BYTE *)a2 << 24;
  2199.       v3 = a2 + 1;
  2200.     }
  2201.     v6 |= *(_BYTE *)v3++ << 16;
  2202.     goto LABEL_61;
  2203.   }
  2204. LABEL_14:
  2205.   v13 = v5 >> 6;
  2206.   if ( (signed int)(v5 >> 6) > 0 )
  2207.   {
  2208.     sub_405A40(v4, v3, v5 >> 6);
  2209.     v3 += v13 << 6;
  2210.     v5 -= v13 << 6;
  2211.   }
  2212.   if ( v5 )
  2213.   {
  2214.     v17 = v4 + 28;
  2215.     *(_DWORD *)(v4 + 92) = v5;
  2216.     v16 = v5 & 3;
  2217.     v15 = v5 >> 2;
  2218.     v14 = v5 >> 2 == 0;
  2219.     while ( !v14 )
  2220.     {
  2221.       v29 = *(_BYTE *)(v3 + 3) | (*(_BYTE *)(v3 + 2) << 8) | (*(_BYTE *)(v3 + 1) << 16) | (*(_BYTE *)v3 << 24);
  2222.       v3 += 4;
  2223.       *(_DWORD *)v17 = v29;
  2224.       v17 += 4;
  2225.       --v15;
  2226.       v14 = v15 == 0;
  2227.     }
  2228.     v19 = 0;
  2229.     v18 = v3 + v16;
  2230.     if ( v16 != 2 )
  2231.     {
  2232.       if ( v16 <= 2 )
  2233.       {
  2234.         if ( v16 != 1 )
  2235.         {
  2236. LABEL_23:
  2237.           *(_DWORD *)v17 = 0;
  2238.           return 1;
  2239.         }
  2240. LABEL_34:
  2241.         *(_DWORD *)v17 = (*(_BYTE *)(v18 - 1) << 24) | v19;
  2242.         return 1;
  2243.       }
  2244.       if ( v16 != 3 )
  2245.         goto LABEL_23;
  2246.       v18 = v3 + 2;
  2247.       v19 = *(_BYTE *)(v3 + 2) << 8;
  2248.     }
  2249.     --v18;
  2250.     v19 |= *(_BYTE *)v18 << 16;
  2251.     goto LABEL_34;
  2252.   }
  2253.   return 1;
  2254. }
  2255.  
  2256. //----- (00405890) --------------------------------------------------------
  2257. signed int __cdecl sub_405890(int a1, int a2)
  2258. {
  2259.   int v2; // eax@1
  2260.   char *v3; // ecx@1
  2261.   int v4; // ebx@1
  2262.   int v5; // ebp@1
  2263.   signed int v6; // edi@1
  2264.   int v7; // esi@1
  2265.   int v8; // edx@2
  2266.   int v9; // eax@12
  2267.   signed int v11; // eax@1
  2268.   int v12; // edx@18
  2269.   int v13; // ebx@18
  2270.   int v14; // ecx@18
  2271.   unsigned int v15; // edx@18
  2272.   unsigned int v16; // edx@18
  2273.   unsigned int v17; // edx@18
  2274.   unsigned int v18; // edx@18
  2275.  
  2276.   v5 = a2;
  2277.   v11 = *(_DWORD *)(a2 + 92);
  2278.   v6 = v11 >> 2;
  2279.   v2 = v11 & 3;
  2280.   v7 = a1;
  2281.   v3 = &byte_40BCE8;
  2282.   v4 = a2 + 28;
  2283.   if ( !v2 )
  2284.   {
  2285. LABEL_8:
  2286.     v8 = (unsigned __int8)byte_40BCE8 << 24;
  2287.     v3 = (char *)&unk_40BCE9;
  2288.     goto LABEL_9;
  2289.   }
  2290.   v8 = *(_DWORD *)(v4 + 4 * v6);
  2291.   if ( v2 == 1 )
  2292.   {
  2293. LABEL_9:
  2294.     v8 |= *v3++ << 16;
  2295.     goto LABEL_10;
  2296.   }
  2297.   if ( v2 <= 1 )
  2298.   {
  2299.     if ( v2 )
  2300.       goto LABEL_12;
  2301.     goto LABEL_8;
  2302.   }
  2303.   if ( v2 != 2 )
  2304.   {
  2305.     if ( v2 != 3 )
  2306.       goto LABEL_12;
  2307.     goto LABEL_11;
  2308.   }
  2309. LABEL_10:
  2310.   v8 |= *v3++ << 8;
  2311. LABEL_11:
  2312.   v8 |= *v3;
  2313. LABEL_12:
  2314.   v9 = v6 + 1;
  2315.   *(_DWORD *)(v4 + 4 * v6) = v8;
  2316.   if ( v6 + 1 <= 14 )
  2317.     goto LABEL_17;
  2318.   if ( v9 <= 15 )
  2319.     *(_DWORD *)(v4 + 4 * v9) = 0;
  2320.   sub_40696C(v5, v4, 1);
  2321.   v9 = 0;
  2322.   do
  2323.   {
  2324.     *(_DWORD *)(v4 + 4 * v9++) = 0;
  2325. LABEL_17:
  2326.     ;
  2327.   }
  2328.   while ( v9 <= 13 );
  2329.   *(_DWORD *)(v4 + 56) = *(_DWORD *)(v5 + 24);
  2330.   *(_DWORD *)(v4 + 60) = *(_DWORD *)(v5 + 20);
  2331.   sub_40696C(v5, v4, 1);
  2332.   v12 = *(_DWORD *)v5;
  2333.   v13 = *(_DWORD *)v5 >> 16;
  2334.   v14 = *(_DWORD *)v5 >> 8;
  2335.   *(_BYTE *)v7 = *(_DWORD *)v5 >> 24;
  2336.   *(_BYTE *)(v7 + 1) = v13;
  2337.   *(_BYTE *)(v7 + 2) = v14;
  2338.   *(_BYTE *)(v7 + 3) = v12;
  2339.   v15 = *(_DWORD *)(v5 + 4);
  2340.   *(_BYTE *)(v7 + 4) = v15 >> 24;
  2341.   *(_BYTE *)(v7 + 5) = v15 >> 16;
  2342.   *(_BYTE *)(v7 + 6) = BYTE1(v15);
  2343.   *(_BYTE *)(v7 + 7) = v15;
  2344.   v16 = *(_DWORD *)(v5 + 8);
  2345.   *(_BYTE *)(v7 + 8) = v16 >> 24;
  2346.   *(_BYTE *)(v7 + 9) = v16 >> 16;
  2347.   *(_BYTE *)(v7 + 10) = BYTE1(v16);
  2348.   *(_BYTE *)(v7 + 11) = v16;
  2349.   v17 = *(_DWORD *)(v5 + 12);
  2350.   *(_BYTE *)(v7 + 12) = v17 >> 24;
  2351.   *(_BYTE *)(v7 + 13) = v17 >> 16;
  2352.   *(_BYTE *)(v7 + 14) = BYTE1(v17);
  2353.   *(_BYTE *)(v7 + 15) = v17;
  2354.   v18 = *(_DWORD *)(v5 + 16);
  2355.   *(_BYTE *)(v7 + 16) = v18 >> 24;
  2356.   *(_BYTE *)(v7 + 17) = v18 >> 16;
  2357.   *(_BYTE *)(v7 + 18) = BYTE1(v18);
  2358.   *(_BYTE *)(v7 + 19) = v18;
  2359.   *(_DWORD *)(v5 + 92) = 0;
  2360.   return 1;
  2361. }
  2362.  
  2363. //----- (004059F0) --------------------------------------------------------
  2364. signed int __cdecl sub_4059F0(int a1)
  2365. {
  2366.   *(_DWORD *)a1 = 1732584193;
  2367.   *(_DWORD *)(a1 + 4) = -271733879;
  2368.   *(_DWORD *)(a1 + 8) = -1732584194;
  2369.   *(_DWORD *)(a1 + 12) = 271733878;
  2370.   *(_DWORD *)(a1 + 16) = -1009589776;
  2371.   *(_DWORD *)(a1 + 20) = 0;
  2372.   *(_DWORD *)(a1 + 24) = 0;
  2373.   *(_DWORD *)(a1 + 92) = 0;
  2374.   return 1;
  2375. }
  2376.  
  2377. //----- (00405A40) --------------------------------------------------------
  2378. int __cdecl sub_405A40(int a1, int a2, int a3)
  2379. {
  2380.   int v3; // edx@1
  2381.   int v4; // ebx@1
  2382.   int v5; // ebp@1
  2383.   int v6; // edi@1
  2384.   int v7; // esi@1
  2385.   int result; // eax@2
  2386.   int v25; // eax@2
  2387.   int v26; // ecx@2
  2388.   int v27; // ebp@2
  2389.   int v28; // esi@2
  2390.   int v29; // esi@2
  2391.   int v30; // ebp@2
  2392.   int v31; // edi@2
  2393.   int v32; // edi@2
  2394.   int v33; // ebp@2
  2395.   int v34; // edx@2
  2396.   int v35; // edx@2
  2397.   int v36; // ebp@2
  2398.   int v37; // ebx@2
  2399.   int v38; // ebx@2
  2400.   int v39; // ebp@2
  2401.   int v40; // ecx@2
  2402.   int v41; // ecx@2
  2403.   int v42; // ebp@2
  2404.   int v43; // eax@2
  2405.   int v44; // eax@2
  2406.   int v45; // ebp@2
  2407.   int v46; // esi@2
  2408.   int v47; // esi@2
  2409.   int v48; // ebp@2
  2410.   int v49; // edi@2
  2411.   int v50; // edi@2
  2412.   int v51; // ebp@2
  2413.   int v52; // edx@2
  2414.   int v53; // edx@2
  2415.   int v54; // ebp@2
  2416.   int v55; // ebx@2
  2417.   int v56; // ebx@2
  2418.   int v57; // ebp@2
  2419.   int v58; // ecx@2
  2420.   int v59; // ecx@2
  2421.   int v60; // ebp@2
  2422.   int v61; // eax@2
  2423.   int v62; // eax@2
  2424.   int v63; // ebp@2
  2425.   int v64; // esi@2
  2426.   int v65; // esi@2
  2427.   int v66; // ebp@2
  2428.   int v67; // edi@2
  2429.   int v68; // edi@2
  2430.   int v69; // ebp@2
  2431.   int v70; // edx@2
  2432.   int v71; // edx@2
  2433.   int v72; // ebp@2
  2434.   int v73; // ebx@2
  2435.   int v74; // ebx@2
  2436.   int v75; // ebp@2
  2437.   int v76; // ecx@2
  2438.   int v77; // ecx@2
  2439.   int v78; // eax@2
  2440.   int v79; // ecx@2
  2441.   int v80; // ebp@2
  2442.   int v81; // eax@2
  2443.   int v82; // eax@2
  2444.   int v83; // esi@2
  2445.   int v84; // eax@2
  2446.   int v85; // ebp@2
  2447.   int v86; // esi@2
  2448.   int v87; // esi@2
  2449.   int v88; // edi@2
  2450.   int v89; // esi@2
  2451.   int v90; // ebp@2
  2452.   int v91; // edi@2
  2453.   int v92; // edi@2
  2454.   int v93; // edx@2
  2455.   int v94; // edi@2
  2456.   int v95; // ebp@2
  2457.   int v96; // edx@2
  2458.   int v97; // edx@2
  2459.   int v98; // ebx@2
  2460.   int v99; // edx@2
  2461.   int v100; // ebp@2
  2462.   int v101; // ebx@2
  2463.   int v102; // ebx@2
  2464.   int v103; // ecx@2
  2465.   int v104; // ebx@2
  2466.   int v105; // ebp@2
  2467.   int v106; // ecx@2
  2468.   int v107; // ecx@2
  2469.   int v108; // eax@2
  2470.   int v109; // ecx@2
  2471.   int v110; // ebp@2
  2472.   int v111; // eax@2
  2473.   int v112; // eax@2
  2474.   int v113; // esi@2
  2475.   int v114; // eax@2
  2476.   int v115; // ebp@2
  2477.   int v116; // esi@2
  2478.   int v117; // esi@2
  2479.   int v118; // edi@2
  2480.   int v119; // esi@2
  2481.   int v120; // ebp@2
  2482.   int v121; // edi@2
  2483.   int v122; // edi@2
  2484.   int v123; // edx@2
  2485.   int v124; // edi@2
  2486.   int v125; // ebp@2
  2487.   int v126; // edx@2
  2488.   int v127; // edx@2
  2489.   int v128; // ebx@2
  2490.   int v129; // edx@2
  2491.   int v130; // ebp@2
  2492.   int v131; // ebx@2
  2493.   int v132; // ebx@2
  2494.   int v133; // ecx@2
  2495.   int v134; // ebx@2
  2496.   int v135; // ebp@2
  2497.   int v136; // ecx@2
  2498.   int v137; // ecx@2
  2499.   int v138; // eax@2
  2500.   int v139; // ecx@2
  2501.   int v140; // ebp@2
  2502.   int v141; // eax@2
  2503.   int v142; // eax@2
  2504.   int v143; // esi@2
  2505.   int v144; // eax@2
  2506.   int v145; // ebp@2
  2507.   int v146; // esi@2
  2508.   int v147; // esi@2
  2509.   int v148; // edi@2
  2510.   int v149; // esi@2
  2511.   int v150; // ebp@2
  2512.   int v151; // edi@2
  2513.   int v152; // edi@2
  2514.   int v153; // edx@2
  2515.   int v154; // edi@2
  2516.   int v155; // ebp@2
  2517.   int v156; // edx@2
  2518.   int v157; // edx@2
  2519.   int v158; // ebx@2
  2520.   int v159; // edx@2
  2521.   int v160; // ebp@2
  2522.   int v161; // ebx@2
  2523.   int v162; // ebx@2
  2524.   int v163; // ecx@2
  2525.   int v164; // ebx@2
  2526.   int v165; // ebp@2
  2527.   int v166; // ecx@2
  2528.   int v167; // ecx@2
  2529.   int v168; // eax@2
  2530.   int v169; // ecx@2
  2531.   int v170; // ebp@2
  2532.   int v171; // eax@2
  2533.   int v172; // eax@2
  2534.   int v173; // esi@2
  2535.   int v174; // eax@2
  2536.   int v175; // ebp@2
  2537.   int v176; // esi@2
  2538.   int v177; // esi@2
  2539.   int v178; // edi@2
  2540.   int v179; // esi@2
  2541.   int v180; // ebp@2
  2542.   int v181; // edi@2
  2543.   int v182; // edi@2
  2544.   int v183; // edx@2
  2545.   int v184; // edi@2
  2546.   int v185; // ebp@2
  2547.   int v186; // edx@2
  2548.   int v187; // edx@2
  2549.   int v188; // ebx@2
  2550.   int v189; // edx@2
  2551.   int v190; // ebp@2
  2552.   int v191; // ebx@2
  2553.   int v192; // ebx@2
  2554.   int v193; // ecx@2
  2555.   int v194; // ebx@2
  2556.   int v195; // ebp@2
  2557.   int v196; // ecx@2
  2558.   int v197; // ecx@2
  2559.   int v198; // eax@2
  2560.   int v199; // ebp@2
  2561.   int v200; // eax@2
  2562.   int v201; // ecx@2
  2563.   int v202; // ebp@2
  2564.   int v203; // eax@2
  2565.   int v204; // eax@2
  2566.   int v205; // esi@2
  2567.   int v206; // ebp@2
  2568.   int v207; // esi@2
  2569.   int v208; // eax@2
  2570.   int v209; // ebp@2
  2571.   int v210; // esi@2
  2572.   int v211; // esi@2
  2573.   int v212; // edi@2
  2574.   int v213; // ebp@2
  2575.   int v214; // edi@2
  2576.   int v215; // esi@2
  2577.   int v216; // ebp@2
  2578.   int v217; // edi@2
  2579.   int v218; // edi@2
  2580.   int v219; // edx@2
  2581.   int v220; // ebp@2
  2582.   int v221; // edx@2
  2583.   int v222; // edi@2
  2584.   int v223; // ebp@2
  2585.   int v224; // edx@2
  2586.   int v225; // edx@2
  2587.   int v226; // ebx@2
  2588.   int v227; // ebp@2
  2589.   int v228; // ebx@2
  2590.   int v229; // edx@2
  2591.   int v230; // ebp@2
  2592.   int v231; // ebx@2
  2593.   int v232; // ebx@2
  2594.   int v233; // ecx@2
  2595.   int v234; // ebp@2
  2596.   int v235; // ecx@2
  2597.   int v236; // ebx@2
  2598.   int v237; // ebp@2
  2599.   int v238; // ecx@2
  2600.   int v239; // ecx@2
  2601.   int v240; // eax@2
  2602.   int v241; // ebp@2
  2603.   int v242; // eax@2
  2604.   int v243; // ecx@2
  2605.   int v244; // ebp@2
  2606.   int v245; // eax@2
  2607.   int v246; // eax@2
  2608.   int v247; // esi@2
  2609.   int v248; // ebp@2
  2610.   int v249; // esi@2
  2611.   int v250; // eax@2
  2612.   int v251; // ebp@2
  2613.   int v252; // esi@2
  2614.   int v253; // esi@2
  2615.   int v254; // edi@2
  2616.   int v255; // ebp@2
  2617.   int v256; // edi@2
  2618.   int v257; // esi@2
  2619.   int v258; // ebp@2
  2620.   int v259; // edi@2
  2621.   int v260; // edi@2
  2622.   int v261; // edx@2
  2623.   int v262; // ebp@2
  2624.   int v263; // edx@2
  2625.   int v264; // edi@2
  2626.   int v265; // ebp@2
  2627.   int v266; // edx@2
  2628.   int v267; // edx@2
  2629.   int v268; // ebx@2
  2630.   int v269; // ebp@2
  2631.   int v270; // ebx@2
  2632.   int v271; // edx@2
  2633.   int v272; // ebp@2
  2634.   int v273; // ebx@2
  2635.   int v274; // ebx@2
  2636.   int v275; // ecx@2
  2637.   int v276; // ebp@2
  2638.   int v277; // ecx@2
  2639.   int v278; // ebx@2
  2640.   int v279; // ebp@2
  2641.   int v280; // ecx@2
  2642.   int v281; // ecx@2
  2643.   int v282; // eax@2
  2644.   int v283; // ebp@2
  2645.   int v284; // eax@2
  2646.   int v285; // ecx@2
  2647.   int v286; // ebp@2
  2648.   int v287; // eax@2
  2649.   int v288; // eax@2
  2650.   int v289; // esi@2
  2651.   int v290; // ebp@2
  2652.   int v291; // esi@2
  2653.   int v292; // eax@2
  2654.   int v293; // ebp@2
  2655.   int v294; // esi@2
  2656.   int v295; // esi@2
  2657.   int v296; // edi@2
  2658.   int v297; // ebp@2
  2659.   int v298; // edi@2
  2660.   int v299; // esi@2
  2661.   int v300; // ebp@2
  2662.   int v301; // edi@2
  2663.   int v302; // edi@2
  2664.   int v303; // edx@2
  2665.   int v304; // ebp@2
  2666.   int v305; // edx@2
  2667.   int v306; // edi@2
  2668.   int v307; // ebp@2
  2669.   int v308; // edx@2
  2670.   int v309; // edx@2
  2671.   int v310; // ebx@2
  2672.   int v311; // ebp@2
  2673.   int v312; // ebx@2
  2674.   int v313; // edx@2
  2675.   int v314; // ebp@2
  2676.   int v315; // ebx@2
  2677.   int v316; // ebx@2
  2678.   int v317; // ecx@2
  2679.   int v318; // ebp@2
  2680.   int v319; // ecx@2
  2681.   int v320; // ebx@2
  2682.   int v321; // ebp@2
  2683.   int v322; // ecx@2
  2684.   int v323; // ecx@2
  2685.   int v324; // eax@2
  2686.   int v325; // ebp@2
  2687.   int v326; // eax@2
  2688.   int v327; // ecx@2
  2689.   int v328; // ebp@2
  2690.   int v329; // eax@2
  2691.   int v330; // eax@2
  2692.   int v331; // esi@2
  2693.   int v332; // ebp@2
  2694.   int v333; // esi@2
  2695.   int v334; // eax@2
  2696.   int v335; // ebp@2
  2697.   int v336; // esi@2
  2698.   int v337; // esi@2
  2699.   int v338; // edi@2
  2700.   int v339; // esi@2
  2701.   int v340; // ebp@2
  2702.   int v341; // edi@2
  2703.   int v342; // edi@2
  2704.   int v343; // edx@2
  2705.   int v344; // edi@2
  2706.   int v345; // ebp@2
  2707.   int v346; // edx@2
  2708.   int v347; // edx@2
  2709.   int v348; // ebx@2
  2710.   int v349; // edx@2
  2711.   int v350; // ebp@2
  2712.   int v351; // ebx@2
  2713.   int v352; // ebx@2
  2714.   int v353; // ecx@2
  2715.   int v354; // ebx@2
  2716.   int v355; // ebp@2
  2717.   int v356; // ecx@2
  2718.   int v357; // ecx@2
  2719.   int v358; // eax@2
  2720.   int v359; // ecx@2
  2721.   int v360; // ebp@2
  2722.   int v361; // eax@2
  2723.   int v362; // eax@2
  2724.   int v363; // esi@2
  2725.   int v364; // eax@2
  2726.   int v365; // ebp@2
  2727.   int v366; // esi@2
  2728.   int v367; // esi@2
  2729.   int v368; // edi@2
  2730.   int v369; // esi@2
  2731.   int v370; // ebp@2
  2732.   int v371; // edi@2
  2733.   int v372; // edi@2
  2734.   int v373; // edx@2
  2735.   int v374; // edi@2
  2736.   int v375; // ebp@2
  2737.   int v376; // edx@2
  2738.   int v377; // edx@2
  2739.   int v378; // ebx@2
  2740.   int v379; // edx@2
  2741.   int v380; // ebp@2
  2742.   int v381; // ebx@2
  2743.   int v382; // ebx@2
  2744.   int v383; // ecx@2
  2745.   int v384; // ebx@2
  2746.   int v385; // ebp@2
  2747.   int v386; // ecx@2
  2748.   int v387; // ecx@2
  2749.   int v388; // eax@2
  2750.   int v389; // ecx@2
  2751.   int v390; // ebp@2
  2752.   int v391; // eax@2
  2753.   int v392; // eax@2
  2754.   int v393; // esi@2
  2755.   int v394; // eax@2
  2756.   int v395; // ebp@2
  2757.   int v396; // esi@2
  2758.   int v397; // esi@2
  2759.   int v398; // edi@2
  2760.   int v399; // esi@2
  2761.   int v400; // ebp@2
  2762.   int v401; // edi@2
  2763.   int v402; // edi@2
  2764.   int v403; // edx@2
  2765.   int v404; // edi@2
  2766.   int v405; // ebp@2
  2767.   int v406; // edx@2
  2768.   int v407; // edx@2
  2769.   int v408; // ebx@2
  2770.   int v409; // edx@2
  2771.   int v410; // ebp@2
  2772.   int v411; // ebx@2
  2773.   int v412; // ebx@2
  2774.   int v413; // ecx@2
  2775.   int v414; // ebx@2
  2776.   int v415; // ebp@2
  2777.   int v416; // ecx@2
  2778.   int v417; // ecx@2
  2779.   int v418; // eax@2
  2780.   int v419; // ecx@2
  2781.   int v420; // ebp@2
  2782.   int v421; // eax@2
  2783.   int v422; // eax@2
  2784.   int v423; // esi@2
  2785.   int v424; // eax@2
  2786.   int v425; // ebp@2
  2787.   int v426; // esi@2
  2788.   int v427; // esi@2
  2789.   int v428; // edi@2
  2790.   int v429; // esi@2
  2791.   int v430; // ebp@2
  2792.   int v431; // edi@2
  2793.   int v432; // edi@2
  2794.   int v433; // edx@2
  2795.   int v434; // edi@2
  2796.   int v435; // ecx@2
  2797.   int v436; // esi@2
  2798.   int v437; // eax@2
  2799.   int v438; // eax@2
  2800.   int v439; // esi@2
  2801.   int v440; // [sp+44h] [bp-38h]@1
  2802.   int v441; // [sp+0h] [bp-7Ch]@2
  2803.   int v442; // [sp+4h] [bp-78h]@2
  2804.   int v443; // [sp+8h] [bp-74h]@2
  2805.   int v444; // [sp+Ch] [bp-70h]@2
  2806.   int v445; // [sp+10h] [bp-6Ch]@2
  2807.   int v446; // [sp+14h] [bp-68h]@2
  2808.   int v447; // [sp+18h] [bp-64h]@2
  2809.   int v448; // [sp+1Ch] [bp-60h]@2
  2810.   int v449; // [sp+20h] [bp-5Ch]@2
  2811.   int v450; // [sp+24h] [bp-58h]@2
  2812.   int v451; // [sp+28h] [bp-54h]@2
  2813.   int v452; // [sp+2Ch] [bp-50h]@2
  2814.   int v453; // [sp+30h] [bp-4Ch]@2
  2815.   int v454; // [sp+34h] [bp-48h]@2
  2816.   int v455; // [sp+38h] [bp-44h]@2
  2817.   int v456; // [sp+3Ch] [bp-40h]@2
  2818.  
  2819.   v7 = a2;
  2820.   v5 = a1;
  2821.   v3 = *(_DWORD *)(a1 + 12);
  2822.   v6 = *(_DWORD *)(a1 + 16);
  2823.   v4 = *(_DWORD *)(a1 + 8);
  2824.   v440 = a2 + (a3 << 6);
  2825.   do
  2826.   {
  2827.     __asm
  2828.     {
  2829.       bswap   eax
  2830.       bswap   ecx
  2831.     }
  2832.     v441 = _EAX;
  2833.     v442 = _ECX;
  2834.     __asm
  2835.     {
  2836.       bswap   eax
  2837.       bswap   ecx
  2838.     }
  2839.     v443 = _EAX;
  2840.     v444 = _ECX;
  2841.     __asm
  2842.     {
  2843.       bswap   eax
  2844.       bswap   ecx
  2845.     }
  2846.     v445 = _EAX;
  2847.     v446 = _ECX;
  2848.     __asm
  2849.     {
  2850.       bswap   eax
  2851.       bswap   ecx
  2852.     }
  2853.     v447 = _EAX;
  2854.     v448 = _ECX;
  2855.     __asm
  2856.     {
  2857.       bswap   eax
  2858.       bswap   ecx
  2859.     }
  2860.     v449 = _EAX;
  2861.     v450 = _ECX;
  2862.     __asm
  2863.     {
  2864.       bswap   eax
  2865.       bswap   ecx
  2866.     }
  2867.     v451 = _EAX;
  2868.     v452 = _ECX;
  2869.     __asm
  2870.     {
  2871.       bswap   eax
  2872.       bswap   ecx
  2873.     }
  2874.     v453 = _EAX;
  2875.     v454 = _ECX;
  2876.     __asm
  2877.     {
  2878.       bswap   eax
  2879.       bswap   ecx
  2880.     }
  2881.     v455 = _EAX;
  2882.     v456 = _ECX;
  2883.     a2 = v7;
  2884.     v25 = *(_DWORD *)v5;
  2885.     v26 = *(_DWORD *)(v5 + 4);
  2886.     v27 = __ROL__(*(_DWORD *)v5, 5);
  2887.     v28 = v26 & (v3 ^ v4);
  2888.     v26 = __ROR__(v26, 2);
  2889.     v29 = v6 + v27 + v441 + 1518500249 + (v3 ^ v28);
  2890.     v30 = __ROL__(v29, 5);
  2891.     v31 = v25 & (v4 ^ v26);
  2892.     v25 = __ROR__(v25, 2);
  2893.     v32 = v3 + v30 + v442 + 1518500249 + (v4 ^ v31);
  2894.     v33 = __ROL__(v32, 5);
  2895.     v34 = v29 & (v26 ^ v25);
  2896.     v29 = __ROR__(v29, 2);
  2897.     v35 = v4 + v33 + v443 + 1518500249 + (v26 ^ v34);
  2898.     v36 = __ROL__(v35, 5);
  2899.     v37 = v32 & (v25 ^ v29);
  2900.     v32 = __ROR__(v32, 2);
  2901.     v38 = v26 + v36 + v444 + 1518500249 + (v25 ^ v37);
  2902.     v39 = __ROL__(v38, 5);
  2903.     v40 = v35 & (v29 ^ v32);
  2904.     v35 = __ROR__(v35, 2);
  2905.     v41 = v25 + v39 + v445 + 1518500249 + (v29 ^ v40);
  2906.     v42 = __ROL__(v41, 5);
  2907.     v43 = v38 & (v32 ^ v35);
  2908.     v38 = __ROR__(v38, 2);
  2909.     v44 = v29 + v42 + v446 + 1518500249 + (v32 ^ v43);
  2910.     v45 = __ROL__(v44, 5);
  2911.     v46 = v41 & (v35 ^ v38);
  2912.     v41 = __ROR__(v41, 2);
  2913.     v47 = v32 + v45 + v447 + 1518500249 + (v35 ^ v46);
  2914.     v48 = __ROL__(v47, 5);
  2915.     v49 = v44 & (v38 ^ v41);
  2916.     v44 = __ROR__(v44, 2);
  2917.     v50 = v35 + v48 + v448 + 1518500249 + (v38 ^ v49);
  2918.     v51 = __ROL__(v50, 5);
  2919.     v52 = v47 & (v41 ^ v44);
  2920.     v47 = __ROR__(v47, 2);
  2921.     v53 = v38 + v51 + v449 + 1518500249 + (v41 ^ v52);
  2922.     v54 = __ROL__(v53, 5);
  2923.     v55 = v50 & (v44 ^ v47);
  2924.     v50 = __ROR__(v50, 2);
  2925.     v56 = v41 + v54 + v450 + 1518500249 + (v44 ^ v55);
  2926.     v57 = __ROL__(v56, 5);
  2927.     v58 = v53 & (v47 ^ v50);
  2928.     v53 = __ROR__(v53, 2);
  2929.     v59 = v44 + v57 + v451 + 1518500249 + (v47 ^ v58);
  2930.     v60 = __ROL__(v59, 5);
  2931.     v61 = v56 & (v50 ^ v53);
  2932.     v56 = __ROR__(v56, 2);
  2933.     v62 = v47 + v60 + v452 + 1518500249 + (v50 ^ v61);
  2934.     v63 = __ROL__(v62, 5);
  2935.     v64 = v59 & (v53 ^ v56);
  2936.     v59 = __ROR__(v59, 2);
  2937.     v65 = v50 + v63 + v453 + 1518500249 + (v53 ^ v64);
  2938.     v66 = __ROL__(v65, 5);
  2939.     v67 = v62 & (v56 ^ v59);
  2940.     v62 = __ROR__(v62, 2);
  2941.     v68 = v53 + v66 + v454 + 1518500249 + (v56 ^ v67);
  2942.     v69 = __ROL__(v68, 5);
  2943.     v70 = v65 & (v59 ^ v62);
  2944.     v65 = __ROR__(v65, 2);
  2945.     v71 = v56 + v69 + v455 + 1518500249 + (v59 ^ v70);
  2946.     v72 = __ROL__(v71, 5);
  2947.     v73 = v68 & (v62 ^ v65);
  2948.     v68 = __ROR__(v68, 2);
  2949.     v74 = v59 + v72 + v456 + 1518500249 + (v62 ^ v73);
  2950.     v75 = v71 & (v65 ^ v68);
  2951.     v71 = __ROR__(v71, 2);
  2952.     v76 = __ROL__(v454 ^ v449 ^ v441 ^ v443, 1);
  2953.     v441 = v76;
  2954.     v77 = (v65 ^ v75) + v76 + v62 + 1518500249;
  2955.     v78 = __ROL__(v74, 5);
  2956.     v79 = v78 + v77;
  2957.     v80 = v74 & (v68 ^ v71);
  2958.     v74 = __ROR__(v74, 2);
  2959.     v81 = __ROL__(v455 ^ v450 ^ v442 ^ v444, 1);
  2960.     v442 = v81;
  2961.     v82 = (v68 ^ v80) + v81 + v65 + 1518500249;
  2962.     v83 = __ROL__(v79, 5);
  2963.     v84 = v83 + v82;
  2964.     v85 = v79 & (v71 ^ v74);
  2965.     v79 = __ROR__(v79, 2);
  2966.     v86 = __ROL__(v456 ^ v451 ^ v443 ^ v445, 1);
  2967.     v443 = v86;
  2968.     v87 = (v71 ^ v85) + v86 + v68 + 1518500249;
  2969.     v88 = __ROL__(v84, 5);
  2970.     v89 = v88 + v87;
  2971.     v90 = v84 & (v74 ^ v79);
  2972.     v84 = __ROR__(v84, 2);
  2973.     v91 = __ROL__(v441 ^ v452 ^ v444 ^ v446, 1);
  2974.     v444 = v91;
  2975.     v92 = (v74 ^ v90) + v91 + v71 + 1518500249;
  2976.     v93 = __ROL__(v89, 5);
  2977.     v94 = v93 + v92;
  2978.     v95 = v89;
  2979.     v89 = __ROR__(v89, 2);
  2980.     v96 = __ROL__(v442 ^ v453 ^ v447 ^ v445, 1);
  2981.     v445 = v96;
  2982.     v97 = v96 + v74 + 1859775393;
  2983.     v98 = __ROL__(v94, 5);
  2984.     v99 = v98 + (v79 ^ v84 ^ v95) + v97;
  2985.     v100 = v94;
  2986.     v94 = __ROR__(v94, 2);
  2987.     v101 = __ROL__(v443 ^ v454 ^ v448 ^ v446, 1);
  2988.     v446 = v101;
  2989.     v102 = v101 + v79 + 1859775393;
  2990.     v103 = __ROL__(v99, 5);
  2991.     v104 = v103 + (v84 ^ v89 ^ v100) + v102;
  2992.     v105 = v99;
  2993.     v99 = __ROR__(v99, 2);
  2994.     v106 = __ROL__(v444 ^ v455 ^ v449 ^ v447, 1);
  2995.     v447 = v106;
  2996.     v107 = v106 + v84 + 1859775393;
  2997.     v108 = __ROL__(v104, 5);
  2998.     v109 = v108 + (v89 ^ v94 ^ v105) + v107;
  2999.     v110 = v104;
  3000.     v104 = __ROR__(v104, 2);
  3001.     v111 = __ROL__(v445 ^ v456 ^ v450 ^ v448, 1);
  3002.     v448 = v111;
  3003.     v112 = v111 + v89 + 1859775393;
  3004.     v113 = __ROL__(v109, 5);
  3005.     v114 = v113 + (v94 ^ v99 ^ v110) + v112;
  3006.     v115 = v109;
  3007.     v109 = __ROR__(v109, 2);
  3008.     v116 = __ROL__(v446 ^ v441 ^ v451 ^ v449, 1);
  3009.     v449 = v116;
  3010.     v117 = v116 + v94 + 1859775393;
  3011.     v118 = __ROL__(v114, 5);
  3012.     v119 = v118 + (v99 ^ v104 ^ v115) + v117;
  3013.     v120 = v114;
  3014.     v114 = __ROR__(v114, 2);
  3015.     v121 = __ROL__(v447 ^ v442 ^ v452 ^ v450, 1);
  3016.     v450 = v121;
  3017.     v122 = v121 + v99 + 1859775393;
  3018.     v123 = __ROL__(v119, 5);
  3019.     v124 = v123 + (v104 ^ v109 ^ v120) + v122;
  3020.     v125 = v119;
  3021.     v119 = __ROR__(v119, 2);
  3022.     v126 = __ROL__(v448 ^ v443 ^ v453 ^ v451, 1);
  3023.     v451 = v126;
  3024.     v127 = v126 + v104 + 1859775393;
  3025.     v128 = __ROL__(v124, 5);
  3026.     v129 = v128 + (v109 ^ v114 ^ v125) + v127;
  3027.     v130 = v124;
  3028.     v124 = __ROR__(v124, 2);
  3029.     v131 = __ROL__(v449 ^ v444 ^ v454 ^ v452, 1);
  3030.     v452 = v131;
  3031.     v132 = v131 + v109 + 1859775393;
  3032.     v133 = __ROL__(v129, 5);
  3033.     v134 = v133 + (v114 ^ v119 ^ v130) + v132;
  3034.     v135 = v129;
  3035.     v129 = __ROR__(v129, 2);
  3036.     v136 = __ROL__(v450 ^ v445 ^ v455 ^ v453, 1);
  3037.     v453 = v136;
  3038.     v137 = v136 + v114 + 1859775393;
  3039.     v138 = __ROL__(v134, 5);
  3040.     v139 = v138 + (v119 ^ v124 ^ v135) + v137;
  3041.     v140 = v134;
  3042.     v134 = __ROR__(v134, 2);
  3043.     v141 = __ROL__(v451 ^ v446 ^ v456 ^ v454, 1);
  3044.     v454 = v141;
  3045.     v142 = v141 + v119 + 1859775393;
  3046.     v143 = __ROL__(v139, 5);
  3047.     v144 = v143 + (v124 ^ v129 ^ v140) + v142;
  3048.     v145 = v139;
  3049.     v139 = __ROR__(v139, 2);
  3050.     v146 = __ROL__(v452 ^ v447 ^ v441 ^ v455, 1);
  3051.     v455 = v146;
  3052.     v147 = v146 + v124 + 1859775393;
  3053.     v148 = __ROL__(v144, 5);
  3054.     v149 = v148 + (v129 ^ v134 ^ v145) + v147;
  3055.     v150 = v144;
  3056.     v144 = __ROR__(v144, 2);
  3057.     v151 = __ROL__(v453 ^ v448 ^ v442 ^ v456, 1);
  3058.     v456 = v151;
  3059.     v152 = v151 + v129 + 1859775393;
  3060.     v153 = __ROL__(v149, 5);
  3061.     v154 = v153 + (v134 ^ v139 ^ v150) + v152;
  3062.     v155 = v149;
  3063.     v149 = __ROR__(v149, 2);
  3064.     v156 = __ROL__(v454 ^ v449 ^ v443 ^ v441, 1);
  3065.     v441 = v156;
  3066.     v157 = v156 + v134 + 1859775393;
  3067.     v158 = __ROL__(v154, 5);
  3068.     v159 = v158 + (v139 ^ v144 ^ v155) + v157;
  3069.     v160 = v154;
  3070.     v154 = __ROR__(v154, 2);
  3071.     v161 = __ROL__(v455 ^ v450 ^ v444 ^ v442, 1);
  3072.     v442 = v161;
  3073.     v162 = v161 + v139 + 1859775393;
  3074.     v163 = __ROL__(v159, 5);
  3075.     v164 = v163 + (v144 ^ v149 ^ v160) + v162;
  3076.     v165 = v159;
  3077.     v159 = __ROR__(v159, 2);
  3078.     v166 = __ROL__(v456 ^ v451 ^ v445 ^ v443, 1);
  3079.     v443 = v166;
  3080.     v167 = v166 + v144 + 1859775393;
  3081.     v168 = __ROL__(v164, 5);
  3082.     v169 = v168 + (v149 ^ v154 ^ v165) + v167;
  3083.     v170 = v164;
  3084.     v164 = __ROR__(v164, 2);
  3085.     v171 = __ROL__(v441 ^ v452 ^ v446 ^ v444, 1);
  3086.     v444 = v171;
  3087.     v172 = v171 + v149 + 1859775393;
  3088.     v173 = __ROL__(v169, 5);
  3089.     v174 = v173 + (v154 ^ v159 ^ v170) + v172;
  3090.     v175 = v169;
  3091.     v169 = __ROR__(v169, 2);
  3092.     v176 = __ROL__(v442 ^ v453 ^ v447 ^ v445, 1);
  3093.     v445 = v176;
  3094.     v177 = v176 + v154 + 1859775393;
  3095.     v178 = __ROL__(v174, 5);
  3096.     v179 = v178 + (v159 ^ v164 ^ v175) + v177;
  3097.     v180 = v174;
  3098.     v174 = __ROR__(v174, 2);
  3099.     v181 = __ROL__(v443 ^ v454 ^ v448 ^ v446, 1);
  3100.     v446 = v181;
  3101.     v182 = v181 + v159 + 1859775393;
  3102.     v183 = __ROL__(v179, 5);
  3103.     v184 = v183 + (v164 ^ v169 ^ v180) + v182;
  3104.     v185 = v179;
  3105.     v179 = __ROR__(v179, 2);
  3106.     v186 = __ROL__(v444 ^ v455 ^ v449 ^ v447, 1);
  3107.     v447 = v186;
  3108.     v187 = v186 + v164 + 1859775393;
  3109.     v188 = __ROL__(v184, 5);
  3110.     v189 = v188 + (v169 ^ v174 ^ v185) + v187;
  3111.     v190 = v184;
  3112.     v184 = __ROR__(v184, 2);
  3113.     v191 = __ROL__(v445 ^ v456 ^ v450 ^ v448, 1);
  3114.     v448 = v191;
  3115.     v192 = v191 + v169 + 1859775393;
  3116.     v193 = __ROL__(v189, 5);
  3117.     v194 = v193 + (v174 ^ v179 ^ v190) + v192;
  3118.     v195 = v179 & (v184 | v189);
  3119.     v196 = __ROL__(v446 ^ v441 ^ v451 ^ v449, 1);
  3120.     v449 = v196;
  3121.     v197 = v196 + v174 - 1894007588;
  3122.     v198 = v189;
  3123.     v189 = __ROR__(v189, 2);
  3124.     v199 = v184 & v198 | v195;
  3125.     v200 = __ROL__(v194, 5);
  3126.     v201 = v200 + v199 + v197;
  3127.     v202 = v184 & (v189 | v194);
  3128.     v203 = __ROL__(v447 ^ v442 ^ v452 ^ v450, 1);
  3129.     v450 = v203;
  3130.     v204 = v203 + v179 - 1894007588;
  3131.     v205 = v194;
  3132.     v194 = __ROR__(v194, 2);
  3133.     v206 = v189 & v205 | v202;
  3134.     v207 = __ROL__(v201, 5);
  3135.     v208 = v207 + v206 + v204;
  3136.     v209 = v189 & (v194 | v201);
  3137.     v210 = __ROL__(v448 ^ v443 ^ v453 ^ v451, 1);
  3138.     v451 = v210;
  3139.     v211 = v210 + v184 - 1894007588;
  3140.     v212 = v201;
  3141.     v201 = __ROR__(v201, 2);
  3142.     v213 = v194 & v212 | v209;
  3143.     v214 = __ROL__(v208, 5);
  3144.     v215 = v214 + v213 + v211;
  3145.     v216 = v194 & (v201 | v208);
  3146.     v217 = __ROL__(v449 ^ v444 ^ v454 ^ v452, 1);
  3147.     v452 = v217;
  3148.     v218 = v217 + v189 - 1894007588;
  3149.     v219 = v208;
  3150.     v208 = __ROR__(v208, 2);
  3151.     v220 = v201 & v219 | v216;
  3152.     v221 = __ROL__(v215, 5);
  3153.     v222 = v221 + v220 + v218;
  3154.     v223 = v201 & (v208 | v215);
  3155.     v224 = __ROL__(v450 ^ v445 ^ v455 ^ v453, 1);
  3156.     v453 = v224;
  3157.     v225 = v224 + v194 - 1894007588;
  3158.     v226 = v215;
  3159.     v215 = __ROR__(v215, 2);
  3160.     v227 = v208 & v226 | v223;
  3161.     v228 = __ROL__(v222, 5);
  3162.     v229 = v228 + v227 + v225;
  3163.     v230 = v208 & (v215 | v222);
  3164.     v231 = __ROL__(v451 ^ v446 ^ v456 ^ v454, 1);
  3165.     v454 = v231;
  3166.     v232 = v231 + v201 - 1894007588;
  3167.     v233 = v222;
  3168.     v222 = __ROR__(v222, 2);
  3169.     v234 = v215 & v233 | v230;
  3170.     v235 = __ROL__(v229, 5);
  3171.     v236 = v235 + v234 + v232;
  3172.     v237 = v215 & (v222 | v229);
  3173.     v238 = __ROL__(v452 ^ v447 ^ v441 ^ v455, 1);
  3174.     v455 = v238;
  3175.     v239 = v238 + v208 - 1894007588;
  3176.     v240 = v229;
  3177.     v229 = __ROR__(v229, 2);
  3178.     v241 = v222 & v240 | v237;
  3179.     v242 = __ROL__(v236, 5);
  3180.     v243 = v242 + v241 + v239;
  3181.     v244 = v222 & (v229 | v236);
  3182.     v245 = __ROL__(v453 ^ v448 ^ v442 ^ v456, 1);
  3183.     v456 = v245;
  3184.     v246 = v245 + v215 - 1894007588;
  3185.     v247 = v236;
  3186.     v236 = __ROR__(v236, 2);
  3187.     v248 = v229 & v247 | v244;
  3188.     v249 = __ROL__(v243, 5);
  3189.     v250 = v249 + v248 + v246;
  3190.     v251 = v229 & (v236 | v243);
  3191.     v252 = __ROL__(v454 ^ v449 ^ v443 ^ v441, 1);
  3192.     v441 = v252;
  3193.     v253 = v252 + v222 - 1894007588;
  3194.     v254 = v243;
  3195.     v243 = __ROR__(v243, 2);
  3196.     v255 = v236 & v254 | v251;
  3197.     v256 = __ROL__(v250, 5);
  3198.     v257 = v256 + v255 + v253;
  3199.     v258 = v236 & (v243 | v250);
  3200.     v259 = __ROL__(v455 ^ v450 ^ v444 ^ v442, 1);
  3201.     v442 = v259;
  3202.     v260 = v259 + v229 - 1894007588;
  3203.     v261 = v250;
  3204.     v250 = __ROR__(v250, 2);
  3205.     v262 = v243 & v261 | v258;
  3206.     v263 = __ROL__(v257, 5);
  3207.     v264 = v263 + v262 + v260;
  3208.     v265 = v243 & (v250 | v257);
  3209.     v266 = __ROL__(v456 ^ v451 ^ v445 ^ v443, 1);
  3210.     v443 = v266;
  3211.     v267 = v266 + v236 - 1894007588;
  3212.     v268 = v257;
  3213.     v257 = __ROR__(v257, 2);
  3214.     v269 = v250 & v268 | v265;
  3215.     v270 = __ROL__(v264, 5);
  3216.     v271 = v270 + v269 + v267;
  3217.     v272 = v250 & (v257 | v264);
  3218.     v273 = __ROL__(v441 ^ v452 ^ v446 ^ v444, 1);
  3219.     v444 = v273;
  3220.     v274 = v273 + v243 - 1894007588;
  3221.     v275 = v264;
  3222.     v264 = __ROR__(v264, 2);
  3223.     v276 = v257 & v275 | v272;
  3224.     v277 = __ROL__(v271, 5);
  3225.     v278 = v277 + v276 + v274;
  3226.     v279 = v257 & (v264 | v271);
  3227.     v280 = __ROL__(v442 ^ v453 ^ v447 ^ v445, 1);
  3228.     v445 = v280;
  3229.     v281 = v280 + v250 - 1894007588;
  3230.     v282 = v271;
  3231.     v271 = __ROR__(v271, 2);
  3232.     v283 = v264 & v282 | v279;
  3233.     v284 = __ROL__(v278, 5);
  3234.     v285 = v284 + v283 + v281;
  3235.     v286 = v264 & (v271 | v278);
  3236.     v287 = __ROL__(v443 ^ v454 ^ v448 ^ v446, 1);
  3237.     v446 = v287;
  3238.     v288 = v287 + v257 - 1894007588;
  3239.     v289 = v278;
  3240.     v278 = __ROR__(v278, 2);
  3241.     v290 = v271 & v289 | v286;
  3242.     v291 = __ROL__(v285, 5);
  3243.     v292 = v291 + v290 + v288;
  3244.     v293 = v271 & (v278 | v285);
  3245.     v294 = __ROL__(v444 ^ v455 ^ v449 ^ v447, 1);
  3246.     v447 = v294;
  3247.     v295 = v294 + v264 - 1894007588;
  3248.     v296 = v285;
  3249.     v285 = __ROR__(v285, 2);
  3250.     v297 = v278 & v296 | v293;
  3251.     v298 = __ROL__(v292, 5);
  3252.     v299 = v298 + v297 + v295;
  3253.     v300 = v278 & (v285 | v292);
  3254.     v301 = __ROL__(v445 ^ v456 ^ v450 ^ v448, 1);
  3255.     v448 = v301;
  3256.     v302 = v301 + v271 - 1894007588;
  3257.     v303 = v292;
  3258.     v292 = __ROR__(v292, 2);
  3259.     v304 = v285 & v303 | v300;
  3260.     v305 = __ROL__(v299, 5);
  3261.     v306 = v305 + v304 + v302;
  3262.     v307 = v285 & (v292 | v299);
  3263.     v308 = __ROL__(v446 ^ v441 ^ v451 ^ v449, 1);
  3264.     v449 = v308;
  3265.     v309 = v308 + v278 - 1894007588;
  3266.     v310 = v299;
  3267.     v299 = __ROR__(v299, 2);
  3268.     v311 = v292 & v310 | v307;
  3269.     v312 = __ROL__(v306, 5);
  3270.     v313 = v312 + v311 + v309;
  3271.     v314 = v292 & (v299 | v306);
  3272.     v315 = __ROL__(v447 ^ v442 ^ v452 ^ v450, 1);
  3273.     v450 = v315;
  3274.     v316 = v315 + v285 - 1894007588;
  3275.     v317 = v306;
  3276.     v306 = __ROR__(v306, 2);
  3277.     v318 = v299 & v317 | v314;
  3278.     v319 = __ROL__(v313, 5);
  3279.     v320 = v319 + v318 + v316;
  3280.     v321 = v299 & (v306 | v313);
  3281.     v322 = __ROL__(v448 ^ v443 ^ v453 ^ v451, 1);
  3282.     v451 = v322;
  3283.     v323 = v322 + v292 - 1894007588;
  3284.     v324 = v313;
  3285.     v313 = __ROR__(v313, 2);
  3286.     v325 = v306 & v324 | v321;
  3287.     v326 = __ROL__(v320, 5);
  3288.     v327 = v326 + v325 + v323;
  3289.     v328 = v306 & (v313 | v320);
  3290.     v329 = __ROL__(v449 ^ v444 ^ v454 ^ v452, 1);
  3291.     v452 = v329;
  3292.     v330 = v329 + v299 - 1894007588;
  3293.     v331 = v320;
  3294.     v320 = __ROR__(v320, 2);
  3295.     v332 = v313 & v331 | v328;
  3296.     v333 = __ROL__(v327, 5);
  3297.     v334 = v333 + v332 + v330;
  3298.     v335 = v327;
  3299.     v327 = __ROR__(v327, 2);
  3300.     v336 = __ROL__(v450 ^ v445 ^ v455 ^ v453, 1);
  3301.     v453 = v336;
  3302.     v337 = v336 + v306 - 899497514;
  3303.     v338 = __ROL__(v334, 5);
  3304.     v339 = v338 + (v313 ^ v320 ^ v335) + v337;
  3305.     v340 = v334;
  3306.     v334 = __ROR__(v334, 2);
  3307.     v341 = __ROL__(v451 ^ v446 ^ v456 ^ v454, 1);
  3308.     v454 = v341;
  3309.     v342 = v341 + v313 - 899497514;
  3310.     v343 = __ROL__(v339, 5);
  3311.     v344 = v343 + (v320 ^ v327 ^ v340) + v342;
  3312.     v345 = v339;
  3313.     v339 = __ROR__(v339, 2);
  3314.     v346 = __ROL__(v452 ^ v447 ^ v441 ^ v455, 1);
  3315.     v455 = v346;
  3316.     v347 = v346 + v320 - 899497514;
  3317.     v348 = __ROL__(v344, 5);
  3318.     v349 = v348 + (v327 ^ v334 ^ v345) + v347;
  3319.     v350 = v344;
  3320.     v344 = __ROR__(v344, 2);
  3321.     v351 = __ROL__(v453 ^ v448 ^ v442 ^ v456, 1);
  3322.     v456 = v351;
  3323.     v352 = v351 + v327 - 899497514;
  3324.     v353 = __ROL__(v349, 5);
  3325.     v354 = v353 + (v334 ^ v339 ^ v350) + v352;
  3326.     v355 = v349;
  3327.     v349 = __ROR__(v349, 2);
  3328.     v356 = __ROL__(v454 ^ v449 ^ v443 ^ v441, 1);
  3329.     v441 = v356;
  3330.     v357 = v356 + v334 - 899497514;
  3331.     v358 = __ROL__(v354, 5);
  3332.     v359 = v358 + (v339 ^ v344 ^ v355) + v357;
  3333.     v360 = v354;
  3334.     v354 = __ROR__(v354, 2);
  3335.     v361 = __ROL__(v455 ^ v450 ^ v444 ^ v442, 1);
  3336.     v442 = v361;
  3337.     v362 = v361 + v339 - 899497514;
  3338.     v363 = __ROL__(v359, 5);
  3339.     v364 = v363 + (v344 ^ v349 ^ v360) + v362;
  3340.     v365 = v359;
  3341.     v359 = __ROR__(v359, 2);
  3342.     v366 = __ROL__(v456 ^ v451 ^ v445 ^ v443, 1);
  3343.     v443 = v366;
  3344.     v367 = v366 + v344 - 899497514;
  3345.     v368 = __ROL__(v364, 5);
  3346.     v369 = v368 + (v349 ^ v354 ^ v365) + v367;
  3347.     v370 = v364;
  3348.     v364 = __ROR__(v364, 2);
  3349.     v371 = __ROL__(v441 ^ v452 ^ v446 ^ v444, 1);
  3350.     v444 = v371;
  3351.     v372 = v371 + v349 - 899497514;
  3352.     v373 = __ROL__(v369, 5);
  3353.     v374 = v373 + (v354 ^ v359 ^ v370) + v372;
  3354.     v375 = v369;
  3355.     v369 = __ROR__(v369, 2);
  3356.     v376 = __ROL__(v442 ^ v453 ^ v447 ^ v445, 1);
  3357.     v445 = v376;
  3358.     v377 = v376 + v354 - 899497514;
  3359.     v378 = __ROL__(v374, 5);
  3360.     v379 = v378 + (v359 ^ v364 ^ v375) + v377;
  3361.     v380 = v374;
  3362.     v374 = __ROR__(v374, 2);
  3363.     v381 = __ROL__(v443 ^ v454 ^ v448 ^ v446, 1);
  3364.     v446 = v381;
  3365.     v382 = v381 + v359 - 899497514;
  3366.     v383 = __ROL__(v379, 5);
  3367.     v384 = v383 + (v364 ^ v369 ^ v380) + v382;
  3368.     v385 = v379;
  3369.     v379 = __ROR__(v379, 2);
  3370.     v386 = __ROL__(v444 ^ v455 ^ v449 ^ v447, 1);
  3371.     v447 = v386;
  3372.     v387 = v386 + v364 - 899497514;
  3373.     v388 = __ROL__(v384, 5);
  3374.     v389 = v388 + (v369 ^ v374 ^ v385) + v387;
  3375.     v390 = v384;
  3376.     v384 = __ROR__(v384, 2);
  3377.     v391 = __ROL__(v445 ^ v456 ^ v450 ^ v448, 1);
  3378.     v448 = v391;
  3379.     v392 = v391 + v369 - 899497514;
  3380.     v393 = __ROL__(v389, 5);
  3381.     v394 = v393 + (v374 ^ v379 ^ v390) + v392;
  3382.     v395 = v389;
  3383.     v389 = __ROR__(v389, 2);
  3384.     v396 = __ROL__(v446 ^ v441 ^ v451 ^ v449, 1);
  3385.     v449 = v396;
  3386.     v397 = v396 + v374 - 899497514;
  3387.     v398 = __ROL__(v394, 5);
  3388.     v399 = v398 + (v379 ^ v384 ^ v395) + v397;
  3389.     v400 = v394;
  3390.     v394 = __ROR__(v394, 2);
  3391.     v401 = __ROL__(v447 ^ v442 ^ v452 ^ v450, 1);
  3392.     v450 = v401;
  3393.     v402 = v401 + v379 - 899497514;
  3394.     v403 = __ROL__(v399, 5);
  3395.     v404 = v403 + (v384 ^ v389 ^ v400) + v402;
  3396.     v405 = v399;
  3397.     v399 = __ROR__(v399, 2);
  3398.     v406 = __ROL__(v448 ^ v443 ^ v453 ^ v451, 1);
  3399.     v451 = v406;
  3400.     v407 = v406 + v384 - 899497514;
  3401.     v408 = __ROL__(v404, 5);
  3402.     v409 = v408 + (v389 ^ v394 ^ v405) + v407;
  3403.     v410 = v404;
  3404.     v404 = __ROR__(v404, 2);
  3405.     v411 = __ROL__(v449 ^ v444 ^ v454 ^ v452, 1);
  3406.     v452 = v411;
  3407.     v412 = v411 + v389 - 899497514;
  3408.     v413 = __ROL__(v409, 5);
  3409.     v414 = v413 + (v394 ^ v399 ^ v410) + v412;
  3410.     v415 = v409;
  3411.     v409 = __ROR__(v409, 2);
  3412.     v416 = __ROL__(v450 ^ v445 ^ v455 ^ v453, 1);
  3413.     v453 = v416;
  3414.     v417 = v416 + v394 - 899497514;
  3415.     v418 = __ROL__(v414, 5);
  3416.     v419 = v418 + (v399 ^ v404 ^ v415) + v417;
  3417.     v420 = v414;
  3418.     v414 = __ROR__(v414, 2);
  3419.     v421 = __ROL__(v451 ^ v446 ^ v456 ^ v454, 1);
  3420.     v454 = v421;
  3421.     v422 = v421 + v399 - 899497514;
  3422.     v423 = __ROL__(v419, 5);
  3423.     v424 = v423 + (v404 ^ v409 ^ v420) + v422;
  3424.     v425 = v419;
  3425.     v419 = __ROR__(v419, 2);
  3426.     v426 = __ROL__(v452 ^ v447 ^ v441 ^ v455, 1);
  3427.     v455 = v426;
  3428.     v427 = v426 + v404 - 899497514;
  3429.     v428 = __ROL__(v424, 5);
  3430.     v429 = v428 + (v409 ^ v414 ^ v425) + v427;
  3431.     v430 = v424;
  3432.     v424 = __ROR__(v424, 2);
  3433.     v431 = __ROL__(v453 ^ v448 ^ v442 ^ v456, 1);
  3434.     v456 = v431;
  3435.     v432 = v431 + v409 - 899497514;
  3436.     v433 = __ROL__(v429, 5);
  3437.     v434 = v433 + (v414 ^ v419 ^ v430) + v432;
  3438.     v5 = a1;
  3439.     v3 = v419 + *(_DWORD *)(a1 + 12);
  3440.     v435 = v429 + *(_DWORD *)(a1 + 4);
  3441.     v436 = v424;
  3442.     v437 = *(_DWORD *)a1;
  3443.     *(_DWORD *)(a1 + 12) = v3;
  3444.     v438 = v434 + v437;
  3445.     v6 = v414 + *(_DWORD *)(a1 + 16);
  3446.     v4 = v436 + *(_DWORD *)(a1 + 8);
  3447.     *(_DWORD *)a1 = v438;
  3448.     v439 = a2;
  3449.     *(_DWORD *)(a1 + 8) = v4;
  3450.     v7 = v439 + 64;
  3451.     result = v440;
  3452.     *(_DWORD *)(a1 + 16) = v6;
  3453.     *(_DWORD *)(a1 + 4) = v435;
  3454.   }
  3455.   while ( v7 < (unsigned int)result );
  3456.   return result;
  3457. }
  3458.  
  3459. //----- (0040696C) --------------------------------------------------------
  3460. #error "4069FF: invalid basic block (funcsize=47)"
  3461.  
  3462. #error "There were 2 decompilation failure(s) on 44 function(s)"
  3463.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement