__int64 sub_E14()
{
__int64 v0; // rax
__int16 v1; // ax
__int64 v2; // rdx
unsigned int v3; // edi
int v4; // eax
int v5; // ebx
__int64 v6; // rcx
__int64 v7; // r8
__int64 v8; // r9
unsigned __int16 v9; // ax
unsigned __int8 v10; // dl
unsigned int v11; // ebx
__int64 result; // rax
int v13; // r12d
int v14; // r15d
int v15; // r14d
int v16; // ebx
unsigned __int16 v17; // si
unsigned __int8 *v18; // rbx
unsigned __int16 n4_1; // di
__int64 n4; // r14
__int64 v21; // rcx
__int64 v22; // r8
__int64 v23; // rax
unsigned __int8 v24; // r12
unsigned __int8 v25; // al
unsigned __int16 v26; // r15
__int64 v27; // r13
bool v28; // al
__int64 v29; // rdi
__int64 v30; // rcx
__int64 v31; // r8
__int64 v32; // rdx
char v33; // al
__int16 v34; // kr08_2
__int64 v35; // r8
__int64 v36; // r9
char v37; // r10
void (*funcs_1386)(void); // rax
char v39; // bl
__int64 v40; // rdx
unsigned __int16 n0x20; // si
__int64 v42; // r14
__int64 v43; // rax
__int64 v44; // rdi
__int64 v45; // rbx
__int64 v46; // rdx
int n4096; // r12d
unsigned int n4096_1; // r15d
__int64 v49; // rdi
unsigned int v50; // edx
unsigned int v51; // r12d
__int64 v52; // rax
__int64 v53; // rcx
char v54; // r8
const char *Write_success_%X_n; // rdx
void (*funcs_157E)(void); // rax
char v57; // bl
__int64 v58; // r9
__int64 v59; // rbx
int v60; // [rsp+28h] [rbp-D8h]
__int64 v61; // [rsp+40h] [rbp-C0h] BYREF
unsigned __int8 v62; // [rsp+48h] [rbp-B8h]
char v63; // [rsp+49h] [rbp-B7h]
char v64[2]; // [rsp+4Ah] [rbp-B6h] BYREF
unsigned __int16 v65; // [rsp+4Ch] [rbp-B4h]
_BYTE v66[4]; // [rsp+50h] [rbp-B0h] BYREF
char v67[4]; // [rsp+54h] [rbp-ACh] BYREF
__int16 v68; // [rsp+58h] [rbp-A8h] BYREF
int v69; // [rsp+5Ah] [rbp-A6h]
__int64 v70; // [rsp+60h] [rbp-A0h] BYREF
_DWORD v71[4]; // [rsp+68h] [rbp-98h] BYREF
int v72; // [rsp+78h] [rbp-88h]
int v73; // [rsp+7Ch] [rbp-84h]
int v74; // [rsp+80h] [rbp-80h]
int v75; // [rsp+84h] [rbp-7Ch]
int v76; // [rsp+88h] [rbp-78h]
int v77; // [rsp+8Ch] [rbp-74h]
__int128 v78; // [rsp+90h] [rbp-70h] BYREF
_QWORD v79[40]; // [rsp+A0h] [rbp-60h] BYREF
__int64 v80; // [rsp+1F0h] [rbp+F0h] BYREF
__int64 v81; // [rsp+1F8h] [rbp+F8h] BYREF
unsigned __int8 v82; // [rsp+200h] [rbp+100h]
unsigned __int8 v83; // [rsp+208h] [rbp+108h]
v0 = sub_1AD8(); /*0xe30*/
v1 = (*(__int64 (__fastcall **)(__int64))(v0 + 16))(189); /*0xe3a*/
v2 = qword_4A20; /*0xe3d*/
v65 = v1 + 8; /*0xe50*/
*(_DWORD *)(qword_4A20 + 180) = 0; /*0xe55*/
if ( *(_DWORD *)(v2 + 184) == 267429210 /*0xe7f*/
&& (*(_DWORD *)(v2 + 180) = 8236, v4 = *(_DWORD *)(v2 + 184), (v4 & 0xFFFF0000) != 0) )
{
v3 = (unsigned __int16)v4 << 12; /*0xe84*/
}
else
{
v3 = 0; /*0xe66*/
}
v5 = 0; /*0xe8c*/
v6 = *(unsigned int *)sub_1CAC(1036304); /*0xe93*/
qword_4A20 = v6; /*0xe95*/
*(_DWORD *)(v6 + 180) = 0; /*0xe9e*/
if ( *(_DWORD *)(v6 + 184) == 267429210 ) /*0xeb6*/
{
*(_DWORD *)&byte_40[(unsigned int)v6 + 116] = 4; /*0xebc*/
v9 = (*(_DWORD *)&byte_40[(unsigned int)v6 + 120] >> 8) & 3; /*0xecf*/
*(_DWORD *)&byte_40[(unsigned int)v6 + 116] = 4096; /*0xed2*/
v7 = *(unsigned int *)&byte_40[(unsigned int)v6 + 120]; /*0xedc*/
v10 = 0; /*0xee3*/
v8 = (unsigned int)v9 + 1; /*0xeea*/
if ( v9 != -1 ) /*0xeed*/
{
do /*0xf66*/
{
if ( (v7 & 7) != 0 ) /*0xef6*/
{
switch ( v7 & 7 ) /*0xefb*/
{
case 1LL: /*0xefb*/
v5 += 0x100000; /*0xf4b*/
break;
case 2LL: /*0xefb*/
v5 += 0x200000; /*0xf43*/
break;
case 3LL: /*0xefb*/
v5 += 0x400000; /*0xf3b*/
break;
case 4LL: /*0xefb*/
v5 += 0x800000; /*0xf33*/
break;
case 5LL: /*0xefb*/
v5 += 0x1000000; /*0xf2b*/
break;
case 6LL: /*0xefb*/
v5 += 0x2000000; /*0xf23*/
break;
case 7LL: /*0xefb*/
v5 += 0x4000000; /*0xf1b*/
break;
}
}
else
{
v5 += 0x80000; /*0xf53*/
}
++v10; /*0xf59*/
LOBYTE(v7) = (unsigned __int8)v7 >> 4; /*0xf5c*/
}
while ( v10 < (unsigned int)v8 ); /*0xf66*/
}
}
v11 = -v5; /*0xf68*/
result = v3; /*0xf6a*/
*(_QWORD *)&v78 = v3 + (unsigned __int64)v11; /*0xf72*/
if ( (_QWORD)v78 )
{
sub_9BC(v3 + (unsigned __int64)v11, 0, v7, v8); /*0xf81*/
v13 = (unsigned __int8)dword_4CC0; /*0xf86*/
v14 = BYTE1(dword_4CC0); /*0xf95*/
v15 = BYTE2(dword_4CC0); /*0xf9d*/
v16 = HIBYTE(word_4CC4); /*0xfb3*/
LODWORD(v81) = dword_4CC0; /*0xfba*/
WORD2(v81) = word_4CC4; /*0xfd6*/
v73 = (unsigned __int8)word_4CC4; /*0xffb*/
v74 = HIBYTE(dword_4CC0); /*0x1002*/
v63 = sub_C90(&v81); /*0x1011*/
v72 = v16; /*0x1015*/
v75 = v15; /*0x1019*/
v76 = v14; /*0x101d*/
v77 = v13; /*0x1021*/
sub_1A50(64, "LanMac.MAC = [%X-%X-%X-%X-%X-%X] \n", v13, v14, v15, v74, v73, v16); /*0x102a*/
v17 = v65; /*0x102f*/
v18 = v66; /*0x1034*/
n4_1 = 0; /*0x103b*/
n4 = 4; /*0x1046*/
do /*0x1142*/
{
sub_1980(&v61, 6); /*0x1056*/
v23 = sub_BEC(v21, v17, v22, &v61); /*0x1063*/
v62 = BYTE1(v61); /*0x1071*/
v24 = v61; /*0x1071*/
__SET_PAIR__(v82, v83, WORD1(v61)); /*0x108b*/
v69 = *(_DWORD *)((char *)&v61 + 2); /*0x108b*/
__SET_PAIR__(v80, v81, WORD2(v61)); /*0x10a7*/
v68 = v61; /*0x10b1*/
if ( v23 >= 0 ) /*0x10b9*/
{
v25 = sub_C90(&v68); /*0x10c5*/
*v18 = v25; /*0x10de*/
sub_1A50(64, "ValidMacFRU[%d] = 0x%X \n", n4_1, v25); /*0x10e1*/
sub_1A50( /*0x112a*/
64,
"BMCFruMac.MAC = [%X-%X-%X-%X-%X-%X] \n",
v24,
v62,
v83,
v82,
(unsigned __int8)v81,
(unsigned __int8)v80);
}
else
{
*v18 = 0; /*0x10bb*/
}
++n4_1; /*0x1134*/
v17 += 6; /*0x1138*/
++v18; /*0x113b*/
}
while ( n4_1 < 4u ); /*0x1142*/
v26 = v65; /*0x114d*/
v27 = v78; /*0x1153*/
v28 = v66[0] || v66[1] || v66[2] || v66[3]; /*0x1179*/
if ( v63 )
{
sub_1A50(64, "The MAC[%x %x %x %x %x %x] is Valid.\n", v77, v76, v75, v74, v73, v72); /*0x11ba*/
v71[0] = -326642109; /*0x11d1*/
v71[1] = 1270213540; /*0x11dd*/
v71[2] = 1044374945; /*0x11ea*/
v71[3] = -1458720202; /*0x11f9*/
result = (*(__int64 (__fastcall **)(const __int16 *, _DWORD *, __int64, __int64, int *))(RuntimeServices + 88))( /*0x1206*/
L"LBG_LAN_Mac",
v71,
3,
24,
&dword_4CC0);
if ( result < 0 )
return sub_1A50(64, "Write MAC to NVRAM fail: %r\n", result);
}
else if ( v28 ) /*0x1228*/
{
sub_1A50(64, "The MAC is Invalid, but the MAC in FRU is Valid.\n"); /*0x1242*/
result = (*(__int64 (__fastcall **)(__int64, __int64, __int64 *))(qword_4B58 + 64))(4, 0x20000, &v70); /*0x125d*/
if ( result >= 0 ) /*0x1263*/
{
sub_27C4(v27, v70, 0x20000); /*0x1274*/
v29 = 0; /*0x1279*/
do /*0x1318*/
{
sub_1980(&v61, 6); /*0x1298*/
sub_BEC(v30, v26, v31, &v61); /*0x12a6*/
v33 = v61; /*0x12ab*/
v26 += 6; /*0x12af*/
v34 = *(_WORD *)((char *)&v61 + 1); /*0x12b7*/
LOBYTE(v36) = BYTE4(v61); /*0x12c0*/
LOBYTE(v35) = BYTE3(v61); /*0x12c0*/
v37 = BYTE5(v61); /*0x12c5*/
*((_BYTE *)&dword_4CC0 + v29) = v61; /*0x12ca*/
*(_WORD *)((char *)&dword_4CC0 + v29 + 1) = v34; /*0x12cd*/
*(_WORD *)((char *)&dword_4CC0 + v29 + 3) = __PAIR16__(v36, v35); /*0x12d5*/
*((_BYTE *)&dword_4CC0 + v29 + 5) = v37; /*0x12df*/
byte_4CA0[v29] = v33; /*0x12e4*/
*(_WORD *)&byte_4CA0[v29 + 1] = v34; /*0x12eb*/
*(_WORD *)&byte_4CA0[v29 + 3] = __PAIR16__(v36, v35); /*0x12f9*/
byte_4CA4[v29 + 1] = v37; /*0x1309*/
v29 += 6; /*0x1311*/
--n4; /*0x1314*/
}
while ( n4 ); /*0x1318*/
LOBYTE(v32) = 1; /*0x132d*/
dword_4C70 = dword_4CC0; /*0x1330*/
word_4C74 = word_4CC4; /*0x1366*/
sub_9BC(v70, v32, v35, v36); /*0x1372*/
funcs_1386 = (void (*)(void))funcs_1386; /*0x1377*/
v39 = 0; /*0x1381*/
while ( funcs_1386 ) /*0x1399*/
{
funcs_1386(); /*0x1386*/
funcs_1386 = *(void (**)(void))((char *)&funcs_1386 + (_QWORD)&_ImageBase[4 * (unsigned __int8)++v39]); /*0x138e*/
}
v40 = qword_4C28; /*0x139b*/
if ( qword_4C28 || (sub_2784(qword_4AD0), (v40 = qword_4C28) != 0) ) /*0x13bd*/
{
(*(void (**)(void))(v40 + 48))(); /*0x13bf*/
v40 = qword_4C28; /*0x13c2*/
}
n0x20 = 0; /*0x13c9*/
v42 = v27; /*0x13cd*/
do /*0x1542*/
{
v43 = n0x20 << 12; /*0x13d3*/
v44 = v43; /*0x13d6*/
v81 = v43; /*0x13d8*/
v45 = v43 + v27; /*0x13df*/
if ( (v40 || (sub_2784(v43 + v27), (v40 = qword_4C28) != 0)) /*0x1420*/
&& ((*(void (__fastcall **)(__int64))(v40 + 32))(v45), (v46 = qword_4C28) != 0)
|| (sub_2784(v45), (v46 = qword_4C28) != 0) )
{
(*(void (__fastcall **)(__int64))(v46 + 8))(v45); /*0x1425*/
}
sub_38BC(v45, v44 + v70); /*0x1433*/
n4096 = 4096; /*0x143d*/
n4096_1 = 4096; /*0x1446*/
v80 = v44 + v70; /*0x144b*/
v49 = 0; /*0x1452*/
while ( 1 ) /*0x1460*/
{
sub_39AE(v79, 256, 0); /*0x1460*/
sub_27C4(v27 + v49 + v81, v79, 256); /*0x147c*/
n4096_1 -= 256; /*0x1484*/
v50 = 0; /*0x148b*/
v51 = n4096 - n4096_1; /*0x148e*/
if ( v51 ) /*0x1491*/
break; /*0x1491*/
LABEL_64:
n4096 = n4096_1; /*0x14d0*/
v49 = 4096 - n4096_1; /*0x14d8*/
if ( n4096_1 > 0x1000 ) /*0x14e1*/
{
Write_success_%X_n = "Write success %X\n"; /*0x14e7*/
goto LABEL_66; /*0x14e7*/
}
}
v52 = v80; /*0x1493*/
v53 = 0; /*0x149a*/
while ( 1 ) /*0x14a0*/
{
if ( v52 ) /*0x14a0*/
{
v54 = *(_BYTE *)(v53 + v52 + v49); /*0x14a5*/
v52 = v80; /*0x14a9*/
}
else
{
v54 = -1; /*0x14b2*/
}
if ( *((_BYTE *)v79 + v53) != v54 ) /*0x14ba*/
break; /*0x14ba*/
++v50; /*0x14c0*/
++v53; /*0x14c2*/
if ( v50 >= v51 ) /*0x14ce*/
goto LABEL_64; /*0x14ce*/
}
Write_success_%X_n = "Write fail %X\n"; /*0x1667*/
LABEL_66:
sub_1A50(64, Write_success_%X_n, v42); /*0x14ee*/
v40 = qword_4C28; /*0x14fd*/
if ( qword_4C28 || (sub_2784(v45), (v40 = qword_4C28) != 0) ) /*0x151e*/
{
(*(void (__fastcall **)(__int64))(v40 + 40))(v45); /*0x1523*/
v40 = qword_4C28; /*0x1526*/
}
v42 += 4096; /*0x1533*/
++n0x20; /*0x153a*/
}
while ( n0x20 < 0x20u ); /*0x1542*/
if ( v40 || (sub_2784(qword_4AD0), (v40 = qword_4C28) != 0) ) /*0x1563*/
{
(*(void (**)(void))(v40 + 56))(); /*0x1565*/
funcs_157E = (void (*)(void))funcs_157E; /*0x1568*/
v57 = 0; /*0x156f*/
if ( funcs_157E ) /*0x1575*/
{
do /*0x1591*/
{
funcs_157E(); /*0x157e*/
funcs_157E = *(void (**)(void))((char *)&funcs_157E + (_QWORD)&_ImageBase[4 * (unsigned __int8)++v57]); /*0x1586*/
}
while ( funcs_157E ); /*0x1591*/
}
}
(*(void (__fastcall **)(__int64))(qword_4B58 + 72))(v70); /*0x159f*/
(*(void (__fastcall **)(__int64))(qword_4B58 + 248))(500000); /*0x15ae*/
LOBYTE(v80) = 0; /*0x15cb*/
v78 = xmmword_3B68; /*0x15d6*/
result = (*(__int64 (__fastcall **)(__int128 *, _QWORD, __int64 *))(qword_4B58 + 320))(&v78, 0, &qword_4B40); /*0x15db*/
if ( result >= 0 ) /*0x15e4*/
{
v64[0] = 2; /*0x15ed*/
LOBYTE(v58) = 2; /*0x15f7*/
LOBYTE(v80) = 1; /*0x15ff*/
LOBYTE(v60) = 1; /*0x1613*/
v59 = (*(__int64 (__fastcall **)(__int64, _QWORD, _QWORD, __int64, char *, int, char *, __int64 *))(qword_4B40 + 16))( /*0x1638*/
qword_4B40,
0,
0,
v58,
v64,
v60,
v67,
&v80);
(*(void (__fastcall **)(__int64))(qword_4B58 + 248))(360000000); /*0x163b*/
return sub_1A50(64, "Send power cycle status - %r\n", v59); /*0x164e*/
}
}
}
else
{
return sub_1A50(64, "Both of the Mac and MAC in FRU is invalid.\n"); /*0x1231*/
}
}
return result; /*0x1653*/
}