RtlpHpVaMgrRangeFind

VOID __fastcall RtlpHpVaMgrRangeFind(INT64 a1, UINT16 a2, UINT16 a3, _QWORD *a4){
  unsigned __int64 i; 
  __int64 v6; 
  __int64 v8; 
  int v9; 
  unsigned __int64 v10; 
  unsigned __int64 v11; 
  __int64 v12; 
  __int64 v13; 
  __int64 v14; 
  unsigned __int64 v15; 
  _QWORD **v16; 
  unsigned __int64 v17; 
  _QWORD *v18; 
  i = *(_QWORD *)(a1 + 8);
  v6 = a3;
  v8 = a2;
  if( (*(_BYTE *)(a1 + 16) & 1) != 0 && i )
    i ^= a1 + 8;
  v9 = *(_BYTE *)(a1 + 16) & 1;
  v10 = 0i64;
  while( i )
  {
    if( a2 < *(_WORD *)(i + 24) )
    {
      v11 = *(_QWORD *)i;
      v10 = i;
    }
    else
    {
      if( a2 <= *(_WORD *)(i + 24) )
        goto LABEL_15;
      v11 = *(_QWORD *)(i + 8);
    }
    if( v9 && v11 )
      i ^= v11;
    else
      i = v11;
  }
  i = v10;
LABEL_15:
  if( i )
  {
    if( (unsigned __int16)v6 > 1u )
    {
      v12 = *(_QWORD *)(a1 + 24);
      v13 = v6;
      v14 = v6 - 1;
      while( 1 )
      {
        v15 = (i - *(_QWORD *)(v12 + 40)) >> *(_DWORD *)(v12 + 24);
        if( v8 + v15 + v13 - (v14 & (v15 + v13 - 1)) - 1 <= v15 + *(unsigned __int16 *)(i + 24) )
          break;
        v16 = *(_QWORD ***)(i + 8);
        v17 = i;
        if( v16 )
        {
          v18 = *v16;
          for( i = *(_QWORD *)(i + 8); v18; v18 = (_QWORD *)*v18 )
            i = (unsigned __int64)v18;
        }
        else
        {
          while( 1 )
          {
            i = *(_QWORD *)(i + 16) & 0xFFFFFFFFFFFFFFFCui64;
            if( !i || *(_QWORD *)i == v17 )
              break;
            v17 = i;
          }
        }
        if( !i )
          return;
      }
      *a4 = RtlSparseArrayElementAllocated(v12 + 16, v15 + v13 - (v14 & (v15 + v13 - 1)) - 1);
    }
    else
    {
      *a4 = i;
    }
  }
}

Referenced by:

RtlpHpVaMgrAlloc