EmpEvaluateNodeLink
__int64 __fastcall EmpEvaluateNodeLink(
int *a1,
__int64 a2,
unsigned int a3,
__int64 a4,
int a5,
__int64 a6,
int a7,
__int64 a8,
int a9,
UINT64 a10,
UINT64 a11){
unsigned int v13;
int v14;
__int64 v15;
_QWORD *v16;
unsigned int v17;
_QWORD *v18;
_DWORD *v19;
__int64 v20;
__int64 v21;
unsigned int v22;
unsigned int v23;
_QWORD *v24;
_DWORD *v25;
unsigned int v26;
_QWORD *v27;
unsigned int v28;
unsigned int v29;
__int64 v30;
int v31;
unsigned int v33;
int v34;
UINT64 v36;
UINT64 v37;
UINT64 v38;
unsigned int ullMultiplicand;
unsigned int v40;
int v41;
UINT64 pullResult;
UINT64 v43;
unsigned int *v44;
unsigned int v49;
v43 = a10;
v13 = a3;
pullResult = 0i64;
v14 = *a1;
v15 = 0i64;
v16 = 0i64;
v17 = 1;
v18 = 0i64;
v19 = 0i64;
v20 = 0i64;
if( (unsigned int)*a1 > 1 )
{
if( v14 != 2 )
return v17;
v30 = *((_QWORD *)a1 + 1);
LODWORD(v36) = a11;
v31 = EmpEvaluateNodeLink(
*(int **)(v30 + 8),
a2,
a3,
a4,
a5,
a6,
a7,
*(_QWORD *)(v30 + 24),
*(_DWORD *)(v30 + 16),
a10,
v36);
if( v31 == 1 )
return v17;
if( *(_BYTE *)v30 == 38 )
{
if( !v31 )
return 0;
}
else if( v31 == 2 && *(_BYTE *)v30 == 124 )
{
return 2;
}
LODWORD(v38) = a11;
v34 = EmpEvaluateNodeLink(
*(int **)(v30 + 32),
a2,
a3,
a4,
a5,
a6,
a7,
*(_QWORD *)(v30 + 48),
*(_DWORD *)(v30 + 40),
a10,
v38);
if( v34 == 1 )
return v17;
if( *(_BYTE *)v30 == 38 )
{
if( v31 && v34 )
return 2;
v17 = 0;
}
if( *(_BYTE *)v30 != 124 )
return v17;
if( !v31 && !v34 )
return 0;
return 2;
}
v21 = *((_QWORD *)a1 + 1);
if( v14 )
{
v15 = *((_QWORD *)a1 + 1);
if( !*(_BYTE *)(v21 + 20) )
return v17;
v33 = *(_DWORD *)(v21 + 48);
v23 = *(_DWORD *)(v21 + 40);
v22 = *(_DWORD *)(v15 + 44);
v49 = v33;
v13 = a3;
}
else
{
v20 = *((_QWORD *)a1 + 1);
if( !*(_QWORD *)(v21 + 16) )
return v17;
v22 = *(_DWORD *)(v21 + 60);
v49 = *(_DWORD *)(v21 + 64);
v23 = *(_DWORD *)(v21 + 56);
}
ullMultiplicand = v22;
v40 = v23;
v41 = a1[4];
if( v41 && (v44 = (unsigned int *)*((_QWORD *)a1 + 3)) != 0i64 || (v44 = (unsigned int *)a8, v41 = a9, a8) )
{
if( v23 )
{
if( RtlULongLongMult(v23, 8ui64, &pullResult) < 0 )
return v17;
LODWORD(v24) = EmpAllocatePool(pullResult);
v16 = v24;
if( !v24 )
return v17;
}
if( ullMultiplicand )
{
if( RtlULongLongMult(ullMultiplicand, 4ui64, &pullResult) < 0 )
goto LABEL_25;
LODWORD(v25) = EmpAllocatePool(pullResult);
v19 = v25;
if( !v25 )
goto LABEL_25;
}
v26 = v49;
if( v49 )
{
if( RtlULongLongMult(v49, 8ui64, &pullResult) < 0
|| (LODWORD(v27) = EmpAllocatePool(pullResult), (v18 = v27) == 0i64) )
{
v29 = a11;
LABEL_23:
if( v19 )
EmpFreePool(v19, a10, v29);
LABEL_25:
if( v16 )
EmpFreePool(v16, a10, (unsigned int)a11);
return v17;
}
v26 = v49;
}
if( EmpEvaluateParseNodeMapping(v44, v41, a2, a3, a4, a5, a6, a7, v16, v40, v19, ullMultiplicand, v18, v26) )
{
if( *a1 )
{
LODWORD(v37) = a11;
v28 = EmpEvaluateNodeLink(
*(int **)(v15 + 96),
(__int64)v16,
v40,
(__int64)v19,
ullMultiplicand,
(__int64)v18,
v49,
0i64,
0,
v43,
v37);
}
else
{
v28 = (*(__int64(__fastcall **)(_QWORD *, _QWORD, _QWORD *, _QWORD, _DWORD *, unsigned int, _QWORD))(v20 + 16))(
v18,
v49,
v16,
v40,
v19,
ullMultiplicand,
*(_QWORD *)(v20 + 32));
}
v17 = v28;
}
v29 = a11;
if( v18 )
EmpFreePool(v18, a10, (unsigned int)a11);
goto LABEL_23;
}
if( v14 )
{
LODWORD(v36) = a11;
return(unsigned int)EmpEvaluateNodeLink(*(int **)(v15 + 96), a2, v13, a4, a5, a6, a7, 0i64, 0, a10, v36);
}
else
{
return(unsigned int)(*(__int64(__fastcall **)(__int64, _QWORD, __int64, _QWORD, __int64, int, _QWORD))(v20 + 16))(
a6,
(unsigned int)a7,
a2,
a3,
a4,
a5,
*(_QWORD *)(v20 + 32));
}
}Referenced by:
EmpEvaluateNodeLink
EmpEvaluateTargetRule