CmpSwapHiveStorage

INT64 __fastcall CmpSwapHiveStorage(INT64 a1, INT64 a2){
  _QWORD *v4; 
  INT64 v5; 
  __int64 v6; 
  __int64 v7; 
  int v8; 
  __int64 *v9; 
  __int64 v10; 
  INT64 v11; 
  __int64 v12; 
  __int64 v13; 
  __int64 v14; 
  __int64 v15; 
  __int64 v16; 
  __int64 *v17; 
  __int64 **v18; 
  __int64 *v19; 
  _QWORD *v20; 
  __int64 *v21; 
  _QWORD *v22; 
  char *v23; 
  __int64 **v24; 
  __int64 v25; 
  __int64 v26; 
  __int64 v27; 
  __int64 v28; 
  INT64 result; 
  __int64 v30; 
  __int64 *v31; 
  __int64 **v32; 

  HvSwapHiveStorage(a1, a2);
  v4 = (_QWORD *)(a2 + 1536);
  v5 = a1 - a2;
  v6 = 6i64;
  do
  {
    v7 = *(_QWORD *)((char *)v4 + v5);
    *(_QWORD *)((char *)v4 + v5) = *v4;
    *v4++ = v7;
    --v6;
  }
  while( v6 );
  v8 = *(_DWORD *)(a1 + 1784);
  v9 = (__int64 *)(a1 + 1888);
  v10 = 64i64;
  *(_DWORD *)(a1 + 1784) = *(_DWORD *)(a2 + 1784);
  *(_DWORD *)(a2 + 1784) = v8;
  v11 = a2 - a1;
  v12 = *(_QWORD *)(a1 + 1800);
  *(_QWORD *)(a1 + 1800) = *(_QWORD *)(a2 + 1800);
  v13 = *(_QWORD *)(a2 + 1808);
  *(_QWORD *)(a2 + 1800) = v12;
  v14 = *(_QWORD *)(a1 + 1808);
  *(_QWORD *)(a1 + 1808) = v13;
  *(_QWORD *)(a2 + 1808) = v14;
  LODWORD(v13) = *(_DWORD *)(a1 + 1864);
  *(_DWORD *)(a1 + 1864) = *(_DWORD *)(a2 + 1864);
  LODWORD(v14) = *(_DWORD *)(a2 + 1868);
  *(_DWORD *)(a2 + 1864) = v13;
  LODWORD(v13) = *(_DWORD *)(a1 + 1868);
  *(_DWORD *)(a1 + 1868) = v14;
  LODWORD(v14) = *(_DWORD *)(a2 + 1872);
  *(_DWORD *)(a2 + 1868) = v13;
  LODWORD(v13) = *(_DWORD *)(a1 + 1872);
  *(_DWORD *)(a1 + 1872) = v14;
  v15 = *(_QWORD *)(a2 + 1880);
  *(_DWORD *)(a2 + 1872) = v13;
  v16 = *(_QWORD *)(a1 + 1880);
  *(_QWORD *)(a1 + 1880) = v15;
  *(_QWORD *)(a2 + 1880) = v16;
  do
  {
    v17 = (__int64 *)*v9;
    v18 = &v31;
    v32 = &v31;
    v19 = (__int64 *)&v31;
    v31 = (__int64 *)&v31;
    if( v17 != v9 )
    {
      v31 = v17;
      v32 = *(__int64 ***)((char *)v9 + v11 + v5 + 8);
      v20 = v32;
      v17[1] = (__int64)&v31;
      *v20 = &v31;
      v19 = v31;
      *(__int64 *)((char *)v9 + v11 + v5 + 8) = (__int64)v9;
      v18 = v32;
      *v9 = (__int64)v9;
    }
    v21 = (__int64 *)((char *)v9 + v11);
    v22 = *(_QWORD **)((char *)v9 + v11);
    if( v22 != (__int64 *)((char *)v9 + v11) )
    {
      v23 = (char *)v9 + v11;
      v24 = *(__int64 ***)((char *)v9 + v11 + 8);
      *v9 = (__int64)v22;
      *(_QWORD *)&v23[v5 + 8] = v24;
      v22[1] = v9;
      *v24 = v9;
      v19 = v31;
      *((_QWORD *)v23 + 1) = v21;
      v18 = v32;
      *v21 = (__int64)v21;
    }
    if( v19 != (__int64 *)&v31 )
    {
      *v21 = (__int64)v19;
      *(__int64 *)((char *)v9 + v11 + 8) = (__int64)v18;
      v19[1] = (__int64)v21;
      *v18 = v21;
    }
    v9 += 2;
    --v10;
  }
  while( v10 );
  v25 = *(_QWORD *)(a1 + 4176);
  *(_QWORD *)(a1 + 4176) = *(_QWORD *)(a2 + 4176);
  v26 = *(_QWORD *)(a2 + 4184);
  *(_QWORD *)(a2 + 4176) = v25;
  v27 = *(_QWORD *)(a1 + 4184);
  *(_QWORD *)(a1 + 4184) = v26;
  *(_QWORD *)(a2 + 4184) = v27;
  v28 = *(_QWORD *)(a1 + 4224);
  *(_QWORD *)(a1 + 4224) = *(_QWORD *)(a2 + 4224);
  *(_QWORD *)(a2 + 4224) = v28;
  LODWORD(v27) = *(_DWORD *)(a1 + 4264);
  *(_DWORD *)(a1 + 4264) = *(_DWORD *)(a2 + 4264);
  LODWORD(v28) = *(_DWORD *)(a2 + 4268);
  *(_DWORD *)(a2 + 4264) = v27;
  LODWORD(v27) = *(_DWORD *)(a1 + 4268);
  *(_DWORD *)(a1 + 4268) = v28;
  LODWORD(v28) = *(_DWORD *)(a2 + 4792);
  *(_DWORD *)(a2 + 4268) = v27;
  LODWORD(v27) = *(_DWORD *)(a1 + 4792);
  *(_DWORD *)(a1 + 4792) = v28;
  LODWORD(v28) = *(_DWORD *)(a2 + 4796);
  *(_DWORD *)(a2 + 4792) = v27;
  LODWORD(v27) = *(_DWORD *)(a1 + 4796);
  *(_DWORD *)(a1 + 4796) = v28;
  LODWORD(v28) = *(_DWORD *)(a2 + 4800);
  *(_DWORD *)(a2 + 4796) = v27;
  LODWORD(v27) = *(_DWORD *)(a1 + 4800);
  *(_DWORD *)(a1 + 4800) = v28;
  LODWORD(v28) = *(_DWORD *)(a2 + 4804);
  *(_DWORD *)(a2 + 4800) = v27;
  LODWORD(v27) = *(_DWORD *)(a1 + 4804);
  *(_DWORD *)(a1 + 4804) = v28;
  result = *(_QWORD *)(a2 + 4832);
  *(_DWORD *)(a2 + 4804) = v27;
  v30 = *(_QWORD *)(a1 + 4832);
  *(_QWORD *)(a1 + 4832) = result;
  *(_QWORD *)(a2 + 4832) = v30;
  return result;
}

Referenced by:

CmpRefreshHive
CmpReorganizeHive