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;
}