AuthzBasepCopyoutSecurityAttributeValues

INT64 __fastcall AuthzBasepCopyoutSecurityAttributeValues(INT64 a1, INT64 a2, UINT64 a3, INT64 a4, INT64 pSizeUsed){
  unsigned int v5; 
  UINT64 v6; 
  unsigned __int16 v9; 
  __int64 v10; 
  UINT64 v11; 
  INT64 v12; 
  _QWORD *v13; 
  unsigned int v14; 
  __int64 v15; 
  UINT8 *v16; 
  __int64 v18; 
  UINT64 v19; 
  INT64 v20; 
  __int64 *v21; 
  UINT64 v22; 
  unsigned int v23; 
  UINT64 v24; 
  UINT8 *v25; 
  __int64 v26; 
  __int64 v27; 
  UINT64 v28; 
  INT64 v29; 
  __int64 *v30; 
  UINT64 v31; 
  unsigned int v32; 
  UINT64 v33; 
  UINT8 *v34; 
  __int64 v35; 
  UINT64 v36; 
  __int64 v37; 
  INT64 v38; 
  __int64 *v39; 
  UINT64 v40; 
  unsigned int v41; 
  UINT64 v42; 
  UINT8 *v43; 
  __int64 v44; 
  v5 = 0;
  v6 = a3 + a4;
  if( a3 + a4 < a3 )
    return(unsigned int)-2147483643;
  *(_QWORD *)pSizeUsed = 0i64;
  v9 = *(_WORD *)(a1 + 48);
  if( !v9 )
    return(unsigned int)-1073741811;
  if( v9 <= 2u )
    goto LABEL_4;
  switch( v9 )
  {
    case 3u:
      v18 = 16i64 * *(unsigned int *)(a1 + 60);
      v19 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
      if( v19 + v18 <= v6 )
      {
        *(_QWORD *)(a2 + 32) = v19;
        v20 = a1 + 72;
        v21 = *(__int64 **)(a1 + 72);
        v22 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
        v16 = (UINT8 *)(v18 + v19);
        v23 = 0;
        while( v21 != (__int64 *)v20 )
        {
          v24 = *((unsigned __int16 *)v21 + 20);
          v25 = &v16[v24];
          if( (unsigned __int64)&v16[v24] > v6 )
            return(unsigned int)-2147483643;
          v26 = 2i64 * v23;
          *(_WORD *)(v22 + 8 * v26) = v24;
          *(_WORD *)(v22 + 8 * v26 + 2) = v24;
          *(_QWORD *)(v22 + 8 * v26 + 8) = v16;
          memmove(v16, (UINT8 *)v21[6], v24);
          v21 = (__int64 *)*v21;
          v16 = v25;
          ++v23;
        }
        goto LABEL_9;
      }
      return(unsigned int)-2147483643;
    case 4u:
      v36 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
      v37 = 24i64 * *(unsigned int *)(a1 + 60);
      if( v36 + v37 <= v6 )
      {
        *(_QWORD *)(a2 + 32) = v36;
        v38 = a1 + 72;
        v39 = *(__int64 **)(a1 + 72);
        v40 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
        v16 = (UINT8 *)(v37 + v36);
        v41 = 0;
        while( v39 != (__int64 *)v38 )
        {
          v42 = *((unsigned __int16 *)v39 + 24);
          v43 = &v16[v42];
          if( (unsigned __int64)&v16[v42] > v6 )
            return(unsigned int)-2147483643;
          v44 = 3i64 * v41;
          *(_QWORD *)(v40 + 8 * v44) = v39[5];
          *(_WORD *)(v40 + 8 * v44 + 8) = v42;
          *(_WORD *)(v40 + 8 * v44 + 10) = v42;
          *(_QWORD *)(v40 + 8 * v44 + 16) = v16;
          memmove(v16, (UINT8 *)v39[7], v42);
          v39 = (__int64 *)*v39;
          v16 = v43;
          ++v41;
        }
        goto LABEL_9;
      }
      return(unsigned int)-2147483643;
    case 5u:
LABEL_22:
      v27 = 16i64 * *(unsigned int *)(a1 + 60);
      v28 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
      if( v28 + v27 <= v6 )
      {
        *(_QWORD *)(a2 + 32) = v28;
        v29 = a1 + 72;
        v30 = *(__int64 **)(a1 + 72);
        v31 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
        v16 = (UINT8 *)(v27 + v28);
        v32 = 0;
        while( v30 != (__int64 *)v29 )
        {
          v33 = *((unsigned int *)v30 + 12);
          v34 = &v16[v33];
          if( (unsigned __int64)&v16[v33] > v6 )
            return(unsigned int)-2147483643;
          v35 = 2i64 * v32;
          *(_QWORD *)(v31 + 8 * v35) = v16;
          *(_DWORD *)(v31 + 8 * v35 + 8) = v33;
          memmove(v16, (UINT8 *)v30[5], v33);
          v30 = (__int64 *)*v30;
          v16 = v34;
          ++v32;
        }
        goto LABEL_9;
      }
      return(unsigned int)-2147483643;
  }
  if( v9 != 6 )
  {
    if( v9 == 16 )
      goto LABEL_22;
    return(unsigned int)-1073741811;
  }
LABEL_4:
  v10 = 8i64 * *(unsigned int *)(a1 + 60);
  v11 = (a3 + 7) & 0xFFFFFFFFFFFFFFF8ui64;
  if( v11 + v10 > v6 )
    return(unsigned int)-2147483643;
  v12 = a1 + 72;
  *(_QWORD *)(a2 + 32) = v11;
  v13 = *(_QWORD **)(a1 + 72);
  v14 = 0;
  while( v13 != (_QWORD *)v12 )
  {
    v15 = v14++;
    *(_QWORD *)(v11 + 8 * v15) = v13[5];
    v13 = (_QWORD *)*v13;
  }
  v16 = (UINT8 *)(v10 + v11);
LABEL_9:
  *(_QWORD *)pSizeUsed = &v16[-a3];
  return v5;
}

Referenced by:

AuthzBasepCopyoutSecurityAttributes