__int64 __fastcall sub_AAC(char *a1)
{
unsigned __int64 v1; // rdi
char *v2; // rbx
unsigned __int64 v3; // rax
unsigned __int64 v4; // r9
unsigned __int64 v5; // rax
__int64 v6; // rdx
__int64 v7; // r8
unsigned int v8; // r9d
unsigned __int64 v9; // rcx
char n88; // al
__int64 v11; // r9
__int64 v12; // rax
__int64 v14; // [rsp+30h] [rbp+8h]
v1 = 0; /*0xabc*/
v2 = a1; /*0xabe*/
if ( !a1 ) /*0xac8*/
{
sub_788("e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c", 2561, "(String != ((void *) 0))"); /*0xadd*/
return v14; /*0xbc0*/
}
v3 = sub_D0C(a1, 1000001); /*0xb08*/
if ( v3 > v4 ) /*0xb10*/
{
sub_788( /*0xb25*/
"e:\\hs\\MdePkg\\Library\\BaseLib\\SafeString.c",
2568,
"(AsciiStrnLenS (String, (_gPcd_FixedAtBuild_PcdMaximumAsciiStringLength) + 1) <= (_gPcd_FixedAtBuild_PcdMaximumAsc"
"iiStringLength))");
LODWORD(v4) = 1000000; /*0xb2a*/
}
v5 = sub_D0C(v2, (int)v4 + 1); /*0xb38*/
v9 = v8; /*0xb3d*/
if ( v5 > v8 ) /*0xb43*/
return v14; /*0xb43*/
while ( *v2 == 32 || *v2 == 9 ) /*0xb4d*/
++v2; /*0xb4f*/
LOBYTE(v7) = 48; /*0xb54*/
while ( *v2 == 48 ) /*0xb5f*/
++v2; /*0xb59*/
n88 = *v2; /*0xb67*/
if ( (unsigned __int8)(*v2 - 97) <= 0x19u ) /*0xb6a*/
n88 -= 32; /*0xb6c*/
if ( n88 == 88 ) /*0xb71*/
{
if ( *(v2 - 1) != 48 ) /*0xb77*/
return v1; /*0xb77*/
++v2; /*0xb79*/
}
v11 = -1; /*0xb7c*/
while ( (unsigned __int8)(*v2 - v7) <= 9u || (unsigned __int8)(*v2 - 65) <= 5u || (unsigned __int8)(*v2 - 97) <= 5u ) /*0xb97*/
{
LOBYTE(v9) = *v2; /*0xb99*/
v12 = sub_A7C(v9, v6, v7, v11); /*0xb9b*/
v9 = (unsigned __int64)(v11 - v12) >> 4; /*0xba6*/
if ( v1 > v9 ) /*0xbad*/
return v11; /*0xbbe*/
v1 = v12 + 16 * v1; /*0xbb3*/
++v2; /*0xbb6*/
}
return v1; /*0xbcd*/
}