undefined4 FUN_00489f80(int param_1,uint *param_2)
{
bool bVar1;
bool bVar2;
int iVar3;
uint uVar4;
undefined4 uVar5;
undefined4 uVar6;
byte *pbVar7;
char *pcVar8;
char *pcVar9;
byte bVar10;
char *pcVar11;
uint uVar12;
int iVar13;
double dVar14;
undefined8 uVar15;
undefined1 auStack_e0 [4];
char local_dc [172];
char *local_30;
iVar13 = *(int *)(param_1 + 0x3c);
bVar10 = (&DAT_00498f1f)[iVar13];
uVar12 = (uint)bVar10;
if (iVar13 == 1) {
pbVar7 = &DAT_00498f30;
do {
iVar3 = FUN_00489bec(param_2);
if ((iVar3 < 0) || ((uint)*pbVar7 != *param_2)) {
FUN_00489b9c(param_2);
if (&DAT_00498f31 <= pbVar7) {
return 0xfffffffe;
}
goto LAB_0048a07c;
}
pbVar7 = pbVar7 + 1;
} while (*pbVar7 != 0);
if (*(char *)(param_1 + 0x44) == '\0') {
return 0;
}
uVar6 = *(undefined4 *)(param_1 + 0x38);
uVar5 = *(undefined4 *)(param_1 + 0x2c);
*(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;
uVar15 = 0;
LAB_0048a2b0:
FUN_00488b20(uVar5,uVar6,(int)uVar15,(int)((ulonglong)uVar15 >> 0x20));
LAB_0048a5fc:
uVar5 = 0;
}
else {
LAB_0048a07c:
FUN_00489bec(param_2);
uVar4 = *param_2;
if ((int)uVar4 < 0) {
return 0xffffffff;
}
if ((uVar4 == 0x2b) || (pcVar8 = local_dc, uVar4 == 0x2d)) {
local_dc[0] = (char)uVar4;
FUN_00489bec(param_2);
pcVar8 = local_dc + 1;
}
if ((bVar10 & 0xef) == 0) {
if (*param_2 != 0x30) {
if (uVar12 == 0) {
uVar12 = 10;
goto LAB_0048a160;
}
uVar4 = *param_2;
goto LAB_0048a164;
}
FUN_00489bec(param_2);
if ((*param_2 | 0x20) != 0x78) {
FUN_00489b9c(param_2);
*param_2 = 0x30;
if (*(int *)(param_1 + 0x3c) < 8) {
uVar12 = (bVar10 >> 1) + 8;
}
else {
uVar12 = 10;
}
LAB_0048a160:
uVar4 = *param_2;
goto LAB_0048a164;
}
iVar3 = FUN_00489bec(param_2);
if (-1 < iVar3) {
*pcVar8 = '0';
pcVar8[1] = 'x';
uVar12 = 0x10;
pcVar8 = pcVar8 + 2;
goto LAB_0048a160;
}
goto LAB_0048a608;
}
uVar4 = *param_2;
LAB_0048a164:
bVar1 = false;
if (uVar4 == 0x30) {
*pcVar8 = '0';
do {
FUN_00489bec(param_2);
} while (*param_2 == 0x30);
pcVar8 = pcVar8 + 1;
bVar1 = true;
}
local_30 = local_dc;
iVar3 = 0;
bVar2 = false;
while( true ) {
uVar4 = *param_2;
if (((*(ushort *)(PTR_DAT_004b7614 + uVar4 * 2) & 0x10) == 0) ||
((uVar12 != 0x10 && ((int)uVar12 < (int)(uVar4 - 0x2f))))) break;
if ((int)pcVar8 - (int)local_30 < 0x41) { //possible issue identified - semgrep
*pcVar8 = (char)uVar4;
bVar2 = true;
pcVar8 = pcVar8 + 1;
bVar1 = true;
}
else {
iVar3 = iVar3 + 1;
}
FUN_00489bec(param_2);
}
if (*(int *)(param_1 + 0x3c) < 8) {
FUN_00489b9c(param_2);
*pcVar8 = '\0';
if (bVar1) {
if (*(char *)(param_1 + 0x44) == '\0') {
return 0;
}
uVar4 = (uint)(iVar13 < 6);
if (local_dc[0] == '-') {
uVar4 = 0;
}
*(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;
uVar6 = *(undefined4 *)(param_1 + 0x38);
uVar5 = *(undefined4 *)(param_1 + 0x2c);
uVar15 = FUN_0048a700(local_dc,0,uVar12,1 - uVar4);
goto LAB_0048a2b0;
}
}
else {
for (pbVar7 = (byte *)param_2[8]; *pbVar7 != 0; pbVar7 = pbVar7 + 1) {
if ((uint)*pbVar7 != *param_2) {
if ((byte *)param_2[8] < pbVar7) goto LAB_0048a608;
goto LAB_0048a3e8;
}
FUN_00489bec(param_2);
}
FUN_00483d50(pcVar8,param_2[6]);
pcVar8 = pcVar8 + param_2[7];
if ((!bVar2) && (*param_2 == 0x30)) {
*pcVar8 = '0';
iVar3 = iVar3 + 1;
do {
FUN_00489bec(param_2);
iVar3 = iVar3 + -1;
} while (*param_2 == 0x30);
pcVar8 = pcVar8 + 1;
bVar1 = true;
}
while( true ) {
uVar4 = *param_2;
if (((*(ushort *)(PTR_DAT_004b7614 + uVar4 * 2) & 0x10) == 0) ||
((uVar12 != 0x10 && ((int)uVar12 < (int)(uVar4 - 0x2f))))) break;
if ((int)pcVar8 - (int)local_dc < 0x41) {
*pcVar8 = (char)uVar4;
bVar1 = true;
pcVar8 = pcVar8 + 1;
}
FUN_00489bec(param_2);
}
LAB_0048a3e8:
pcVar9 = pcVar8;
if (bVar1) {
uVar4 = *param_2;
if ((uVar12 != 0x10) || (uVar12 = uVar4 | 0x20, uVar4 = *param_2, uVar12 != 0x70)) {
if ((uVar4 | 0x20) != 0x65) goto LAB_0048a590;
uVar4 = *param_2;
}
*pcVar8 = (char)uVar4;
FUN_00489bec(param_2);
uVar12 = *param_2;
if (-1 < (int)uVar12) {
pcVar9 = pcVar8 + 1;
if ((uVar12 == 0x2b) || (uVar12 == 0x2d)) {
*pcVar9 = (char)uVar12;
FUN_00489bec(param_2);
pcVar9 = pcVar8 + 2;
uVar12 = *param_2;
}
bVar10 = 0;
if (uVar12 == 0x30) {
*pcVar9 = '0';
do {
FUN_00489bec(param_2);
} while (*param_2 == 0x30);
pcVar9 = pcVar9 + 1;
bVar10 = 1;
}
while( true ) {
if (9 < (byte)((char)*param_2 - 0x30U)) break;
if (bVar10 < 0x14) {
*pcVar9 = (char)*param_2;
pcVar9 = pcVar9 + 1;
bVar10 = bVar10 + 1;
}
FUN_00489bec(param_2);
}
if (bVar10 != 0) goto LAB_0048a590;
}
}
else if (uVar12 != 0x10) {
uVar12 = *param_2 | 0x20;
if (uVar12 == 0x69) {
pcVar11 = "nfinity";
}
else {
if (uVar12 != 0x6e) goto LAB_0048a608;
pcVar11 = &DAT_00498f38;
}
*pcVar8 = (char)*param_2;
while( true ) {
FUN_00489bec(param_2);
pcVar9 = pcVar9 + 1;
if ((*param_2 | 0x20) != (uint)(byte)*pcVar11) break;
*pcVar9 = (char)*param_2;
pcVar11 = (char *)((byte *)pcVar11 + 1);
}
if (((byte)*pcVar11 == 0) || ((byte *)pcVar11 == (byte *)0x498f3d)) {
LAB_0048a590:
*pcVar9 = '\0';
dVar14 = (double)FUN_0048a9e0(local_dc,auStack_e0,iVar3);
if (*(char *)(param_1 + 0x44) != '\0') {
if ((*(uint *)(param_1 + 0x38) & 0x800) == 0) {
if ((*(uint *)(param_1 + 0x38) & 0x400) == 0) {
*(float *)*(double **)(param_1 + 0x2c) = (float)dVar14;
}
else {
**(double **)(param_1 + 0x2c) = dVar14;
}
}
else {
**(double **)(param_1 + 0x2c) = dVar14;
}
*(int *)(param_1 + 0x34) = *(int *)(param_1 + 0x34) + 1;
}
FUN_00489b9c(param_2);
goto LAB_0048a5fc;
}
}
LAB_0048a608:
FUN_00489b9c(param_2);
}
uVar5 = 0xfffffffe;
}
return uVar5;
}