EmpEvaluateNodeLink
__int64 __fastcall EmpEvaluateNodeLink(
__int64 a1,
__int64 a2,
unsigned int a3,
__int64 a4,
int a5,
__int64 a6,
int a7,
__int64 a8,
int a9,
ULONGLONG a10,
int a11){
unsigned int v13;
int v14;
__int64 v15;
_QWORD *Pool;
unsigned int v17;
_QWORD *v18;
_DWORD *v19;
__int64 v20;
__int64 v21;
unsigned int v22;
unsigned int v23;
unsigned int v24;
unsigned int v25;
unsigned int v26;
__int64 v27;
int v28;
unsigned int v30;
int v31;
unsigned int ullMultiplicand;
unsigned int v34;
int v35;
ULONGLONG pullResult;
ULONGLONG v37;
unsigned int *v38;
unsigned int v43;
v37 = a10;
v13 = a3;
pullResult = 0i64;
v14 = *(_DWORD *)a1;
v15 = 0i64;
Pool = 0i64;
v17 = 1;
v18 = 0i64;
v19 = 0i64;
v20 = 0i64;
if( *(_DWORD *)a1 > 1u )
{
if( v14 != 2 )
return v17;
v27 = *(_QWORD *)(a1 + 8);
v28 = EmpEvaluateNodeLink(
*(_QWORD *)(v27 + 8),
a2,
a3,
a4,
a5,
a6,
a7,
*(_QWORD *)(v27 + 24),
*(_DWORD *)(v27 + 16),
a10,
a11);
if( v28 == 1 )
return v17;
if( *(_BYTE *)v27 == 38 )
{
if( !v28 )
return 0;
}
else if( v28 == 2 && *(_BYTE *)v27 == 124 )
{
return 2;
}
v31 = EmpEvaluateNodeLink(
*(_QWORD *)(v27 + 32),
a2,
a3,
a4,
a5,
a6,
a7,
*(_QWORD *)(v27 + 48),
*(_DWORD *)(v27 + 40),
a10,
a11);
if( v31 == 1 )
return v17;
if( *(_BYTE *)v27 == 38 )
{
if( v28 && v31 )
return 2;
v17 = 0;
}
if( *(_BYTE *)v27 != 124 )
return v17;
if( !v28 && !v31 )
return 0;
return 2;
}
v21 = *(_QWORD *)(a1 + 8);
if( v14 )
{
v15 = *(_QWORD *)(a1 + 8);
if( !*(_BYTE *)(v21 + 20) )
return v17;
v30 = *(_DWORD *)(v21 + 48);
v23 = *(_DWORD *)(v21 + 40);
v22 = *(_DWORD *)(v15 + 44);
v43 = v30;
v13 = a3;
}
else
{
v20 = *(_QWORD *)(a1 + 8);
if( !*(_QWORD *)(v21 + 16) )
return v17;
v22 = *(_DWORD *)(v21 + 60);
v43 = *(_DWORD *)(v21 + 64);
v23 = *(_DWORD *)(v21 + 56);
}
ullMultiplicand = v22;
v34 = v23;
v35 = *(_DWORD *)(a1 + 16);
if( v35 && (v38 = *(unsigned int **)(a1 + 24)) != 0i64 || (v38 = (unsigned int *)a8, v35 = a9, a8) )
{
if( v23 )
{
if( RtlULongLongMult(v23, 8ui64, &pullResult) < 0 )
return v17;
Pool = (_QWORD *)EmpAllocatePool(pullResult);
if( !Pool )
return v17;
}
if( ullMultiplicand )
{
if( RtlULongLongMult(ullMultiplicand, 4ui64, &pullResult) < 0 )
goto LABEL_25;
v19 = (_DWORD *)EmpAllocatePool(pullResult);
if( !v19 )
goto LABEL_25;
}
v24 = v43;
if( v43 )
{
if( RtlULongLongMult(v43, 8ui64, &pullResult) < 0 || (v18 = (_QWORD *)EmpAllocatePool(pullResult)) == 0i64 )
{
v26 = a11;
LABEL_23:
if( v19 )
EmpFreePool(v19, a10, v26);
LABEL_25:
if( Pool )
EmpFreePool(Pool, a10, (unsigned int)a11);
return v17;
}
v24 = v43;
}
if( EmpEvaluateParseNodeMapping(v38, v35, a2, a3, a4, a5, a6, a7, Pool, v34, v19, ullMultiplicand, v18, v24) )
{
if( *(_DWORD *)a1 )
v25 = EmpEvaluateNodeLink(
*(_QWORD *)(v15 + 96),
(__int64)Pool,
v34,
(__int64)v19,
ullMultiplicand,
(__int64)v18,
v43,
0i64,
0,
v37,
a11);
else
v25 = (*(__int64(__fastcall **)(_QWORD *, _QWORD, _QWORD *, _QWORD, _DWORD *, unsigned int, _QWORD))(v20 + 16))(
v18,
v43,
Pool,
v34,
v19,
ullMultiplicand,
*(_QWORD *)(v20 + 32));
v17 = v25;
}
v26 = a11;
if( v18 )
EmpFreePool(v18, a10, (unsigned int)a11);
goto LABEL_23;
}
if( v14 )
return(unsigned int)EmpEvaluateNodeLink(*(_QWORD *)(v15 + 96), a2, v13, a4, a5, a6, a7, 0i64, 0, a10, a11);
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