Advertisement
Guest User

Untitled

a guest
Oct 3rd, 2013
404
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 15.10 KB | None | 0 0
  1. void __thiscall VM_x_setFLAG_sub_66A696(_vm_x *this, unsigned int FLAGa2)
  2. {
  3.   this->_OF = (FLAGa2 >> 11) & 1;
  4.   this->_CF = FLAGa2 & 1;
  5.   this->_PF = ((unsigned __int8)FLAGa2 >> 2) & 1;
  6.   this->_SF = ((unsigned __int8)FLAGa2 >> 7) & 1;
  7.   this->_ZF = ((unsigned __int8)FLAGa2 >> 6) & 1;
  8.   this->_DF = (FLAGa2 >> 10) & 1;
  9. }
  10. ------------------
  11. void __thiscall VM_x_VM_RUN_sub_66A6D7(_vm_x *this)
  12. {
  13.   unsigned int v2; // eax@1
  14.   signed int opcount_v3; // ecx@1
  15.   _OPCODE *_map_op_v4; // ecx@2
  16.   int _PPv5; // edi@2
  17.   int eip_v6; // eax@2
  18.   unsigned int v7; // eax@2
  19.   unsigned int v8; // eax@6
  20.   char v9; // dl@6
  21.   unsigned int iv10; // eax@10
  22.   char *v11; // eax@11
  23.   int *v11_v12; // ecx@14
  24.   unsigned int v13; // edx@14
  25.   int v14; // eax@16
  26.   int v15; // eax@17
  27.   int v16; // ebx@30
  28.   bool v17; // dl@35
  29.   unsigned int v18; // edx@46
  30.   bool v19; // bl@47
  31.   int v20; // ecx@55
  32.   int v21; // ST08_4@60
  33.   unsigned int _END_EIP_opcount_v23; // [sp+8h] [bp-14h]@1
  34.   int v23; // [sp+Ch] [bp-10h]@45
  35.   int v15_v25; // [sp+10h] [bp-Ch]@6
  36.   int *v11_v26; // [sp+14h] [bp-8h]@6
  37.   char v26; // [sp+1Ah] [bp-2h]@1
  38.   unsigned __int8 OPidxv28; // [sp+1Bh] [bp-1h]@2
  39.  
  40.   VM_x_setFLAG_sub_66A696(this, (unsigned __int16)FLAGS_word_7D77A0);
  41.   memcpy_0(this->_args_field_54, &ARG_eax_dword_7D77A4, 0x20u);
  42.   LeaveCriticalSection(&VM_crit_stru_7D77C8);
  43.   construct_opcode_ar_sub_66A9D2();
  44.   VM_oo_12_end_dword_7D779C = 0;
  45.   v2 = sub_66A485();
  46.   this->_HM_field_48 = v2;
  47.   this->_bfield_74 = 0;
  48.   v26 = ~(unsigned __int8)(v2 >> 4) & 1;
  49.   opcount_v3 = this->_map_op_array_field_8->_mapop_field_268.endfield_4
  50.              - (unsigned int)this->_map_op_array_field_8->_mapop_field_268.beginfield_0;
  51.   this->_EIP1_field_4C = 0;
  52.   this->_EIP2_field_50 = 0;
  53.   _END_EIP_opcount_v23 = opcount_v3 >> 4;
  54.   if ( opcount_v3 >> 4 )
  55.   {
  56.     while ( 1 )
  57.     {
  58.       _map_op_v4 = this->_map_op_array_field_8;
  59.       _PPv5 = (int)&_map_op_v4->_mapop_field_268.beginfield_0[4 * this->_EIP1_field_4C];
  60.       eip_v6 = this->_EIP1_field_4C + 1;
  61.       ++this->_EIP2_field_50;
  62.       this->_EIP1_field_4C = eip_v6;
  63.       v7 = *(_DWORD *)_PPv5;
  64.       OPidxv28 = LOBYTE(_map_op_v4->_ar67_1_field_10C[(*(_DWORD *)_PPv5 >> 4) & 0x7F]);
  65.       if ( OPidxv28 == 0x1B )
  66.         break;
  67.       if ( OPidxv28 == 0x1D )
  68.       {
  69.         if ( VM_x_FLAG_cmp_sub_66A238(this, ((v7 >> 25) & 7) + ((v7 & 0x30000000) != 0 ? 8 : 0)) )
  70.           break;
  71.       }
  72.       else
  73.       {
  74.         v11_v26 = 0;
  75.         v15_v25 = 0;
  76.         v8 = *(_DWORD *)_PPv5;
  77.         v9 = (*(_DWORD *)_PPv5 >> 12) & 1;
  78.         if ( OPidxv28 == 0x2A || OPidxv28 == 0x2B )
  79.           v9 = 0;
  80.         if ( BYTE1(v8) & 0x40 )
  81.         {
  82.           iv10 = LOBYTE(_map_op_v4->_ar8_1_field_238[(v8 >> 15) & 7]);
  83.           if ( v9 )
  84.             v11 = VM_x_get_Args_sub_66A1EF(this, iv10);
  85.           else
  86.             v11 = (char *)&this->_args_field_54[iv10];
  87.         }
  88.         else
  89.         {
  90.           v11 = 0;
  91.         }
  92.         v11_v12 = (int *)v11;
  93.         v11_v26 = (int *)v11;
  94.         v13 = *(_DWORD *)_PPv5;
  95.         if ( v13 & 0x40000 )
  96.         {
  97.           v15 = 0;
  98.           if ( v13 & 0x80000 )
  99.             v15 = this->_args_field_54[(v13 >> 22) & 7];
  100.           if ( v13 & 0x200000 )
  101.           {
  102.             v11_v12 = v11_v26;
  103.             v15 += this->_args_field_54[(v13 >> 25) & 7] << ((v13 >> 28) & 3);
  104.           }
  105.           if ( v13 & 0x100000 )
  106.             v15 += *(_DWORD *)(_PPv5 + 8);
  107.         }
  108.         else if ( v13 & 0x80000 )
  109.         {
  110.           v14 = (v13 >> 22) & 7;
  111.           if ( (v13 >> 12) & 1 )
  112.           {
  113.             v15 = (int)VM_x_get_Args_sub_66A1EF(this, v14);
  114.             v11_v12 = v11_v26;
  115.           }
  116.           else
  117.           {
  118.             v15 = (int)&this->_args_field_54[v14];
  119.           }
  120.         }
  121.         else
  122.         {
  123.           v15 = 0;
  124.         }
  125.         v15_v25 = v15;
  126.         if ( *(_DWORD *)_PPv5 & 0x80000000 && *(_DWORD *)_PPv5 & 0x40000000 )
  127.         {
  128.           v15 = *(_DWORD *)(_PPv5 + 4);
  129.           v15_v25 = *(_DWORD *)(_PPv5 + 4);
  130.         }
  131.         if ( *(_BYTE *)(_PPv5 + 1) & 8 )
  132.         {
  133.           v16 = (int)v11_v12;
  134.           v11_v12 = (int *)v15;
  135.           v15 = v16;
  136.           v11_v26 = v11_v12;
  137.           v15_v25 = v16;
  138.         }
  139.         if ( *(_DWORD *)_PPv5 & 0x80000000 && !(*(_DWORD *)_PPv5 & 0x40000000) )
  140.         {
  141.           v17 = v15 && v11_v12;
  142.           if ( v15 && !v11_v12 )
  143.           {
  144.             v11_v12 = (int *)v15;
  145.             v11_v26 = (int *)v15;
  146.           }
  147.           if ( !v17 )
  148.           {
  149.             v15 = _PPv5 + 4;
  150.             v15_v25 = _PPv5 + 4;
  151.           }
  152.         }
  153.         if ( v15 && !v11_v12 )
  154.         {
  155.           v11_v12 = (int *)v15;
  156.           v11_v26 = (int *)v15;
  157.         }
  158.         v23 = *(_DWORD *)_PPv5 & 0x1000;
  159.         v19 = 0;
  160.         if ( !v23 )
  161.         {
  162.           v18 = *(_DWORD *)_PPv5;
  163.           if ( !(BYTE1(v18) & 0x20) )
  164.             v19 = 1;
  165.         }
  166.         if ( OPidxv28 || !v19 )
  167.         {
  168.           if ( !v26 )
  169.             goto _OP_CALL_loc_66A998;
  170.           if ( OPidxv28 == 0x17 )
  171.           {
  172.             if ( v19 )
  173.             {
  174.               v20 = *v11_v12 - *(_DWORD *)v15;
  175.               this->_CF = (((unsigned __int64)v20 >> 32) & 1) != 0;
  176.               VM_x_FLAGS_sub_66A212(this, v20);
  177.             }
  178.             else
  179.             {
  180.               if ( !v23 )
  181.                 goto _OP_CALL_loc_66A998;
  182.               v21 = *(_BYTE *)v11_v12 - *(_BYTE *)v15;
  183.               this->_CF = BYTE1(v21) & 1;
  184.               VM_x_FLAGS_sub_66A212(this, v21);
  185.             }
  186.             this->_OF = 0;
  187.           }
  188.           else
  189.           {
  190.             if ( OPidxv28 != 0x14 || !v23 )
  191.             {
  192. _OP_CALL_loc_66A998:
  193.               (**(void (__fastcall ***)(int, int **, int *, _vm_x *, int))OPcode_array_dword_7D7798[OPidxv28])(
  194.                 OPcode_array_dword_7D7798[OPidxv28],
  195.                 &v11_v26,
  196.                 &v15_v25,
  197.                 this,
  198.                 _PPv5);
  199.               goto LABEL_63;
  200.             }
  201.             *(_BYTE *)v11_v12 ^= *(_BYTE *)v15;
  202.             VM_x_FLAGS_sub_66A212(this, *(_BYTE *)v11_v26);
  203.             this->_OF = 0;
  204.             this->_CF = 0;
  205.           }
  206.         }
  207.         else
  208.         {
  209.           *v11_v12 = *(_DWORD *)v15;
  210.         }
  211.       }
  212. LABEL_63:
  213.       if ( this->_EIP1_field_4C >= _END_EIP_opcount_v23 )
  214.         goto LABEL_64;
  215.     }
  216.     VM_x_hand_jmp_sub_66A37E(this, *(_DWORD *)(_PPv5 + 4), _PPv5);
  217.     goto LABEL_63;
  218.   }
  219. LABEL_64:
  220.   VM_x_exit_stop_sub_66A3D3(this->_map_op_array_field_8->_stopEIP_field_264);
  221. }
  222. ---------------------------
  223. void __thiscall VM_x_hand_jmp_sub_66A37E(_vm_x *this, unsigned int toa2, int a3)
  224. {
  225.   int v4; // eax@1
  226.   int v5; // eax@5
  227.  
  228.   v4 = *(_DWORD *)(a3 + 12);
  229.   if ( v4 == -1 )
  230.   {
  231.     v5 = OPCODE_find_sub_66AC5D(this->_map_op_array_field_8, toa2);
  232.     if ( v5 == -1 )
  233.     {
  234.       *(_DWORD *)(a3 + 12) = -2;
  235.     }
  236.     else
  237.     {
  238.       *(_DWORD *)(a3 + 12) = v5;
  239.       this->_EIP1_field_4C = v5;
  240.     }
  241.   }
  242.   else if ( v4 != -2 )
  243.   {
  244.     this->_EIP1_field_4C = v4;
  245.     return;
  246.   }
  247.   if ( *(_DWORD *)(a3 + 12) == -2 )
  248.     VM_x_exit_stop_sub_66A3D3(toa2);
  249. }
  250. -----------------------
  251. signed int __thiscall OPCODE_find_sub_66AC5D(_OPCODE *this, unsigned int a2)
  252. {
  253.   int v2; // edi@3
  254.   signed int res; // eax@3
  255.   signed int endv4; // edx@3
  256.   int iv5; // esi@4
  257.   unsigned int v6; // ebx@6
  258.  
  259.   if ( a2 >= this->_startEIP_field_260
  260.     && a2 < this->_stopEIP_field_264
  261.     && (v2 = this->_startEIP_field_260,
  262.         res = 0,
  263.         (endv4 = (signed int)(this->_mapop_field_268.endfield_4 - (unsigned int)this->_mapop_field_268.beginfield_0) >> 4) != 0) )
  264.   {
  265.     iv5 = 0;
  266.     while ( v2 != a2 )
  267.     {
  268.       v6 = this->_mapop_field_268.beginfield_0[iv5];
  269.       iv5 += 4;
  270.       v2 += v6 & 0xF;
  271.       ++res;
  272.       if ( res >= (unsigned int)endv4 )
  273.         goto LABEL_7;
  274.     }
  275.   }
  276.   else
  277.   {
  278. LABEL_7:
  279.     res = -1;
  280.   }
  281.   return res;
  282. }
  283. -------------------------------
  284. char __thiscall VM_x_FLAG_cmp_sub_66A238(_vm_x *this, char a2)
  285. {
  286.   char res; // al@2
  287.   bool v4; // zf@10
  288.   bool v5; // zf@12
  289.  
  290.   switch ( a2 )
  291.   {
  292.     case 0:
  293.       return this->_OF;
  294.     case 1:
  295.       return this->_OF == 0;
  296.     case 2:
  297.       return this->_CF;
  298.     case 3:
  299.       return this->_CF == 0;
  300.     case 4:
  301.       return this->_ZF;
  302.     case 5:
  303.       return this->_ZF == 0;
  304.     case 6:
  305.       if ( this->_CF )
  306.         goto LABEL_26;
  307.       v4 = this->_ZF == 0;
  308.       goto LABEL_21;
  309.     case 7:
  310.       if ( this->_CF )
  311.         goto LABEL_22;
  312.       v5 = this->_ZF == 0;
  313.       goto LABEL_25;
  314.     case 8:
  315.       return this->_SF;
  316.     case 9:
  317.       return this->_SF == 0;
  318.     case 0xA:
  319.       return this->_PF;
  320.     case 0xB:
  321.       return this->_PF == 0;
  322.     case 0xC:
  323.       return this->_SF != this->_OF;
  324.     case 0xD:
  325.       return this->_SF == this->_OF;
  326.     case 0xE:
  327.       if ( !this->_ZF )
  328.       {
  329.         v4 = this->_SF == this->_OF;
  330. LABEL_21:
  331.         if ( v4 )
  332.           goto LABEL_22;
  333.       }
  334.       goto LABEL_26;
  335.     case 0xF:
  336.       if ( this->_ZF )
  337.         goto LABEL_22;
  338.       v5 = this->_SF == this->_OF;
  339. LABEL_25:
  340.       if ( !v5 )
  341. LABEL_22:
  342.         res = 0;
  343.       else
  344. LABEL_26:
  345.         res = 1;
  346.       break;
  347.     default:
  348.       res = 0;
  349.       break;
  350.   }
  351.   return res;
  352. }
  353. -----------------------------
  354. void __thiscall OPCODE_Init_sub_66AA63(_OPCODE *this)
  355. {
  356.   unsigned int v2; // eax@1
  357.   _OPCODE *v3; // ecx@1
  358.   unsigned int v4; // eax@3
  359.   int *v5; // ecx@3
  360.   unsigned int v6; // eax@5
  361.   int *v7; // ecx@5
  362.   int *v8; // ecx@7
  363.   unsigned int v9; // eax@7
  364.  
  365.   std_map_clear_sub_66ACED(
  366.     (int)&this->_mapop_field_268,
  367.     this->_mapop_field_268.beginfield_0,
  368.     this->_mapop_field_268.endfield_4);
  369.   this->_initbfield_258 = 0;
  370.   this->_opcount_field_25C = 0;
  371.   v2 = 0;
  372.   v3 = this;
  373.   do
  374.   {
  375.     v3->_ar67_0_field_0[0] = v2++;
  376.     v3 = (_OPCODE *)((char *)v3 + 4);
  377.   }
  378.   while ( v2 < 67 );
  379.   v4 = 0;
  380.   v5 = this->_ar67_1_field_10C;
  381.   do
  382.   {
  383.     *v5 = v4++;
  384.     ++v5;
  385.   }
  386.   while ( v4 < 67 );
  387.   v6 = 0;
  388.   v7 = this->_ar8_0_field_218;
  389.   do
  390.   {
  391.     *v7 = v6++;
  392.     ++v7;
  393.   }
  394.   while ( v6 < 8 );
  395.   v8 = this->_ar8_1_field_238;
  396.   v9 = 0;
  397.   do
  398.   {
  399.     *v8 = v9++;
  400.     ++v8;
  401.   }
  402.   while ( v9 < 8 );
  403. }
  404. --------------------
  405. void __thiscall OPCODE_Add_sub_66ABC4(_OPCODE *this, int pa2, int a3)
  406. {
  407.   int v4; // ebx@1
  408.   int v5; // esi@1
  409.   int endv6; // edx@1
  410.   unsigned int v7; // ecx@3
  411.   unsigned int *v8; // eax@3
  412.   unsigned int v9; // ebx@4
  413.   char v10; // [sp+Ch] [bp-14h]@1
  414.   int v11; // [sp+1Ch] [bp-4h]@2
  415.   int iv12; // [sp+28h] [bp+8h]@2
  416.  
  417.   this->_startEIP_field_260 = *(_DWORD *)pa2;
  418.   v4 = *(_DWORD *)(pa2 + 4);
  419.   v5 = pa2 + 8;
  420.   std_map_sub_66AD22((int)&this->_mapop_field_268, *(_DWORD *)(pa2 + 4), (int)&v10);
  421.   endv6 = this->_startEIP_field_260;
  422.   if ( v4 )
  423.   {
  424.     iv12 = 0;
  425.     v11 = v4;
  426.     do
  427.     {
  428.       v7 = *(_DWORD *)v5;
  429.       v8 = &this->_mapop_field_268.beginfield_0[iv12];
  430.       v5 += 4;
  431.       *v8 = v7;
  432.       if ( v7 & 0x100000 )
  433.       {
  434.         v9 = *(_DWORD *)v5;
  435.         v5 += 4;
  436.         v8[2] = v9;
  437.       }
  438.       if ( v7 & 0x80000000 )
  439.       {
  440.         v8[1] = -*(_DWORD *)v5;
  441.         v5 += 4;
  442.       }
  443.       v8[3] = -1;
  444.       iv12 += 4;
  445.       endv6 += v7 & 0xF;
  446.       --v11;
  447.     }
  448.     while ( v11 );
  449.   }
  450.   this->_stopEIP_field_264 = endv6;
  451.   OPCODE_unpack_sub_66AAD0(this, 0);
  452. }
  453. --------------------
  454. void __thiscall OPCODE_unpack_sub_66AAD0(_OPCODE *this, char a2)
  455. {
  456.   signed int sizev3; // edi@1
  457.   char *v4; // ebx@2
  458.   unsigned int iv5; // eax@2
  459.   _OPCODE *v6; // ecx@2
  460.   int v7; // edx@3
  461.   unsigned int iv8; // eax@4
  462.   int v9; // ecx@5
  463.   int iv10; // ebx@8
  464.   unsigned int *v11; // ecx@9
  465.   unsigned int v12; // edx@9
  466.   unsigned int v13; // eax@9
  467.   int randv14; // [sp+8h] [bp-4h]@2
  468.  
  469.   sizev3 = (signed int)(this->_mapop_field_268.endfield_4 - (unsigned int)this->_mapop_field_268.beginfield_0) >> 4;
  470.   if ( !this->_initbfield_258 )
  471.   {
  472.     this->_initbfield_258 = 1;
  473.     randv14 = rand();
  474.     srand(sizev3);
  475.     this->_opcount_field_25C = sizev3;
  476.     shuffle_randoml_sub_5BC5BA(this->_ar67_0_field_0, this->_ar67_1_field_10C);
  477.     v4 = (char *)this->_ar8_0_field_218;
  478.     shuffle_randoml_sub_5BC5BA(this->_ar8_0_field_218, this->_ar8_1_field_238);
  479.     iv5 = 0;
  480.     v6 = this;
  481.     do
  482.     {
  483.       v7 = v6->_ar67_0_field_0[0];
  484.       v6 = (_OPCODE *)((char *)v6 + 4);
  485.       this->_ar67_1_field_10C[v7] = iv5++;
  486.     }
  487.     while ( iv5 < 67 );
  488.     iv8 = 0;
  489.     do
  490.     {
  491.       v9 = *(_DWORD *)v4;
  492.       v4 += 4;
  493.       this->_ar8_1_field_238[v9] = iv8++;
  494.     }
  495.     while ( iv8 < 8 );
  496.     if ( a2 && sizev3 )
  497.     {
  498.       iv10 = 0;
  499.       do
  500.       {
  501.         v11 = &this->_mapop_field_268.beginfield_0[iv10];
  502.         v12 = *v11;
  503.         LOWORD(v12) = *v11 & 0xF80F;
  504.         v13 = v12 | 16 * (this->_ar67_0_field_0[(*v11 >> 4) & 0x7F] & 0x7F);
  505.         *v11 = v13;
  506.         if ( BYTE1(v13) & 0x40 )
  507.           *v11 = v13 & 0xFFFC7FFF | ((this->_ar8_0_field_218[(v13 >> 15) & 7] & 7) << 15);
  508.         iv10 += 4;
  509.         --sizev3;
  510.       }
  511.       while ( sizev3 );
  512.     }
  513.     srand(randv14);
  514.   }
  515. }
  516. ---------------
  517. _vm_x *__cdecl alloc_ctx_vm_ret_0x78_sub_66A00E(int tbla1)
  518. {
  519.   int v1; // esi@2
  520.   int iv2; // eax@4
  521.   int _flag_v3; // ecx@4
  522.   _vm_x *v4; // ecx@7
  523.   _vm_x *res; // eax@8
  524.   int iv6; // esi@9
  525.   _vm_x *v7; // ecx@9
  526.   _vm_x *rv8; // esi@11
  527.  
  528.   EnterCriticalSection(&VM_crit_stru_7D77C8);
  529.   if ( !vm_ctx_array[0]._ptr0x78_field_0 )
  530.   {
  531.     v1 = (int)&vm_ctx_array[0]._ptr0xFE0_field_4;
  532.     do
  533.     {
  534.       *(_DWORD *)(v1 - 4) = operator new(0x78u);
  535.       *(_DWORD *)v1 = operator new(0xFE0u);
  536.       *(_BYTE *)(v1 + 4) = 1;
  537.       v1 += 12;
  538.     }
  539.     while ( v1 < (unsigned int)&VM_oo_12_end_dword_7D779C );
  540.   }
  541.   iv2 = 0;
  542.   _flag_v3 = (int)&vm_ctx_array[0]._flag_field_8;
  543.   while ( !*(_BYTE *)_flag_v3 )
  544.   {
  545.     _flag_v3 += 12;
  546.     ++iv2;
  547.     if ( _flag_v3 >= (unsigned int)&FLAGS_word_7D77A0 )
  548.     {
  549.       LeaveCriticalSection(&VM_crit_stru_7D77C8);
  550.       v4 = (_vm_x *)operator new(0x78u);
  551.       if ( v4 )
  552.         res = vm_x_ctor_0x78_sub_66A18E(v4, tbla1, 0);
  553.       else
  554.         res = 0;
  555.       return res;
  556.     }
  557.   }
  558.   iv6 = iv2;
  559.   vm_ctx_array[iv2]._flag_field_8 = 0;
  560.   v7 = vm_ctx_array[iv2]._ptr0x78_field_0;
  561.   if ( v7 )
  562.     vm_x_ctor_0x78_sub_66A18E(v7, tbla1, vm_ctx_array[iv6]._ptr0xFE0_field_4);
  563.   rv8 = vm_ctx_array[iv6]._ptr0x78_field_0;
  564.   LeaveCriticalSection(&VM_crit_stru_7D77C8);
  565.   return rv8;
  566. }
  567. -----------------
  568. void __cdecl free_ctx_vm_sub_66A103(_vm_x *pa1)
  569. {
  570.   int iv1; // eax@1
  571.   _vm_ctx *vmv2; // ecx@1
  572.   int v3; // edi@7
  573.  
  574.   EnterCriticalSection(&VM_crit_stru_7D77C8);
  575.   iv1 = 0;
  576.   vmv2 = vm_ctx_array;
  577.   do
  578.   {
  579.     if ( vmv2->_ptr0x78_field_0 == pa1 )
  580.     {
  581.       v3 = iv1;
  582.       dtor_0x78_sub_66A1D6(vm_ctx_array[iv1]._ptr0x78_field_0);
  583.       vm_ctx_array[v3]._flag_field_8 = 1;
  584.       LeaveCriticalSection(&VM_crit_stru_7D77C8);
  585.       return;
  586.     }
  587.     ++vmv2;
  588.     ++iv1;
  589.   }
  590.   while ( (unsigned int)vmv2 < (unsigned int)&OPcode_array_dword_7D7798 );
  591.   LeaveCriticalSection(&VM_crit_stru_7D77C8);
  592.   if ( pa1 )
  593.   {
  594.     dtor_0x78_sub_66A1D6(pa1);
  595.     free_sub_65A591(pa1);
  596.   }
  597. }
  598. ---------------
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement