
int demangle_template_value_parm(work_stuff *work,char **mangled,string *s,type_kind_t tk)

{
  byte bVar1;
  bool bVar2;
  bool bVar3;
  byte bVar4;
  int iVar5;
  int iVar6;
  uint uVar7;
  size_t sVar8;
  char *pcVar9;
  char *pcVar10;
  byte *s_00;
  size_t __n;
  char tmp [2];
  
  s_00 = (byte *)*mangled;
  bVar4 = *s_00;
  if (bVar4 == 0x59) {
    *mangled = (char *)(s_00 + 1);
    iVar5 = consume_count_with_underscores(mangled);
    if (iVar5 == -1) {
      return -1;
    }
    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar5)) {
      return -1;
    }
    iVar6 = consume_count_with_underscores(mangled);
    if (iVar6 == -1) {
      return -1;
    }
    if (work->tmpl_argvec != (char **)0x0) {
      pcVar9 = work->tmpl_argvec[iVar5];
      if (pcVar9 == (char *)0x0) {
        return 1;
      }
      if (*pcVar9 == '\0') {
        return 1;
      }
      string_append(s,pcVar9);
      return 1;
    }
    string_append_template_idx(s,iVar5);
    return 1;
  }
  if (tk != tk_integral) {
    if (tk == tk_char) {
      if (bVar4 == 0x6d) {
        string_appendn(s,"-",1);
        *mangled = *mangled + 1;
      }
      string_appendn(s,"\'",1);
      iVar5 = consume_count(mangled);
      if (0 < iVar5) {
        tmp[0] = (char)iVar5;
        tmp[1] = '\0';
        string_appendn(s,tmp,1);
        string_appendn(s,"\'",1);
        return 1;
      }
      return 0;
    }
    if (tk == tk_bool) {
      iVar5 = consume_count(mangled);
      if (iVar5 == 0) {
        string_appendn(s,"false",5);
        return 1;
      }
      if (iVar5 != 1) {
        return 0;
      }
      string_appendn(s,"true",4);
      return 1;
    }
    if (tk != tk_real) {
      if (2 < tk - tk_pointer) {
        return 1;
      }
      if (bVar4 != 0x51) {
        iVar5 = consume_count(mangled);
        if (iVar5 != -1) {
          __n = (size_t)iVar5;
          sVar8 = strlen(*mangled);
          if ((long)__n <= (long)sVar8) {
            if (iVar5 == 0) {
              string_appendn(s,"0",1);
            }
            else {
              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));
              strncpy(pcVar9,*mangled,__n);
              pcVar9[__n] = '\0';
              pcVar10 = cplus_demangle(pcVar9,work->options);
              if (tk == tk_pointer) {
                string_appendn(s,"&",1);
              }
              if (pcVar10 == (char *)0x0) {
                if (*pcVar9 != '\0') {
                  string_append(s,pcVar9);
                }
              }
              else {
                if (*pcVar10 != '\0') {
                  string_append(s,pcVar10);
                }
                free(pcVar10);
              }
              free(pcVar9);
            }
            *mangled = *mangled + __n;
            return 1;
          }
        }
        return -1;
      }
LAB_00321c80:
      iVar5 = demangle_qualified(work,mangled,s,0,1);
      return iVar5;
    }
    if (bVar4 != 0x45) {
      if (bVar4 == 0x6d) {
        string_appendn(s,"-",1);
        pcVar9 = *mangled;
        s_00 = (byte *)(pcVar9 + 1);
        *mangled = (char *)s_00;
        bVar4 = pcVar9[1];
      }
      bVar1 = (byte)_sch_istable[bVar4];
      while ((bVar1 & 4) != 0) {
        string_appendn(s,(char *)s_00,1);
        pcVar9 = *mangled;
        s_00 = (byte *)(pcVar9 + 1);
        *mangled = (char *)s_00;
        bVar4 = pcVar9[1];
        bVar1 = (byte)_sch_istable[bVar4];
      }
      if (bVar4 == 0x2e) {
        pcVar9 = ".";
        do {
          string_appendn(s,pcVar9,1);
          pcVar10 = *mangled;
          pcVar9 = pcVar10 + 1;
          *mangled = pcVar9;
          bVar4 = pcVar10[1];
        } while ((_sch_istable[bVar4] & 4) != 0);
      }
      else {
        bVar4 = **mangled;
      }
      if (bVar4 != 0x65) {
        return 1;
      }
      pcVar9 = "e";
      do {
        string_appendn(s,pcVar9,1);
        pcVar10 = *mangled;
        pcVar9 = pcVar10 + 1;
        *mangled = pcVar9;
      } while ((_sch_istable[(byte)pcVar10[1]] & 4) != 0);
      return 1;
    }
LAB_00321eb0:
    iVar5 = demangle_expression(work,mangled,s,tk);
    return iVar5;
  }
  if (bVar4 == 0x45) goto LAB_00321eb0;
  if ((bVar4 == 0x51) || (bVar4 == 0x4b)) goto LAB_00321c80;
  if (bVar4 == 0x5f) {
    if (s_00[1] != 0x6d) {
      bVar3 = true;
      bVar2 = false;
      uVar7 = consume_count_with_underscores(mangled);
      goto LAB_00321c67;
    }
    bVar3 = false;
    string_appendn(s,"-",1);
    *mangled = *mangled + 2;
  }
  else {
    bVar3 = true;
    if (bVar4 == 0x6d) {
      string_appendn(s,"-",1);
      *mangled = *mangled + 1;
    }
  }
  bVar2 = true;
  uVar7 = consume_count(mangled);
LAB_00321c67:
  if (uVar7 != 0xffffffff) {
    sprintf(tmp,"%d",(ulong)uVar7);
    if (tmp[0] != '\0') {
      string_append(s,tmp);
    }
    if (((9 < (int)uVar7 || bVar2) && (!bVar3)) && (**mangled == '_')) {
      *mangled = *mangled + 1;
    }
    return 1;
  }
  return 0;
}



undefined8 FUN_00321a30(undefined4 *param_1,long *param_2,undefined8 param_3,int param_4)

{
  byte bVar1;
  long lVar2;
  bool bVar3;
  bool bVar4;
  byte bVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  size_t sVar9;
  char *pcVar10;
  char *__ptr;
  undefined8 uVar11;
  byte *pbVar12;
  size_t __n;
  char local_58 [40];
  
  pbVar12 = (byte *)*param_2;
  bVar5 = *pbVar12;
  if (bVar5 == 0x59) {
    *param_2 = (long)(pbVar12 + 1);
    iVar6 = FUN_00320920(param_2);
    if (iVar6 == -1) {
      return 0xffffffff;
    }
    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {
      return 0xffffffff;
    }
    iVar7 = FUN_00320920(param_2);
    if (iVar7 == -1) {
      return 0xffffffff;
    }
    if (*(long *)(param_1 + 0x14) != 0) {
      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);
      if (pcVar10 == (char *)0x0) {
        return 1;
      }
      if (*pcVar10 == '\0') {
        return 1;
      }
      FUN_00320c60(param_3);
      return 1;
    }
    FUN_00320ca0(param_3,iVar6);
    return 1;
  }
  if (param_4 != 4) {
    if (param_4 == 6) {
      if (bVar5 == 0x6d) {
        FUN_00320bb0(param_3,&DAT_003e8978,1);
        *param_2 = *param_2 + 1;
      }
      FUN_00320bb0(param_3,&DAT_003e261d,1);
      iVar6 = FUN_00320870(param_2);
      if (0 < iVar6) {
        local_58[0] = (char)iVar6;
        local_58[1] = 0;
        FUN_00320bb0(param_3,local_58,1);
        FUN_00320bb0(param_3,&DAT_003e261d,1);
        return 1;
      }
      return 0;
    }
    if (param_4 == 5) {
      iVar6 = FUN_00320870(param_2);
      if (iVar6 == 0) {
        FUN_00320bb0(param_3,"false",5);
        return 1;
      }
      if (iVar6 != 1) {
        return 0;
      }
      FUN_00320bb0(param_3,&DAT_003e8a7b,4);
      return 1;
    }
    if (param_4 != 7) {
      if (2 < param_4 - 1U) {
        return 1;
      }
      if (bVar5 != 0x51) {
        iVar6 = FUN_00320870(param_2);
        if (iVar6 != -1) {
          __n = (size_t)iVar6;
          sVar9 = strlen((char *)*param_2);
          if ((long)__n <= (long)sVar9) {
            if (iVar6 == 0) {
              FUN_00320bb0(param_3,"0",1);
            }
            else {
              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));
              strncpy(pcVar10,(char *)*param_2,__n);
              pcVar10[__n] = '\0';
              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);
              if (param_4 == 1) {
                FUN_00320bb0(param_3,&DAT_003fb356,1);
              }
              if (__ptr == (char *)0x0) {
                if (*pcVar10 != '\0') {
                  FUN_00320c60(param_3,pcVar10);
                }
              }
              else {
                if (*__ptr != '\0') {
                  FUN_00320c60(param_3,__ptr);
                }
                free(__ptr);
              }
              free(pcVar10);
            }
            *param_2 = *param_2 + __n;
            return 1;
          }
        }
        return 0xffffffff;
      }
LAB_00321c80:
      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);
      return uVar11;
    }
    if (bVar5 != 0x45) {
      if (bVar5 == 0x6d) {
        FUN_00320bb0(param_3,&DAT_003e8978,1);
        lVar2 = *param_2;
        pbVar12 = (byte *)(lVar2 + 1);
        *param_2 = (long)pbVar12;
        bVar5 = *(byte *)(lVar2 + 1);
      }
      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];
      while ((bVar1 & 4) != 0) {
        FUN_00320bb0(param_3,pbVar12,1);
        lVar2 = *param_2;
        pbVar12 = (byte *)(lVar2 + 1);
        *param_2 = (long)pbVar12;
        bVar5 = *(byte *)(lVar2 + 1);
        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];
      }
      if (bVar5 == 0x2e) {
        pcVar10 = ".";
        do {
          FUN_00320bb0(param_3,pcVar10,1);
          lVar2 = *param_2;
          pcVar10 = (char *)(lVar2 + 1);
          *param_2 = (long)pcVar10;
          bVar5 = *(byte *)(lVar2 + 1);
        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);
      }
      else {
        bVar5 = *(byte *)*param_2;
      }
      if (bVar5 != 0x65) {
        return 1;
      }
      pcVar10 = "e";
      do {
        FUN_00320bb0(param_3,pcVar10,1);
        lVar2 = *param_2;
        pcVar10 = (char *)(lVar2 + 1);
        *param_2 = (long)pcVar10;
      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);
      return 1;
    }
LAB_00321eb0:
    uVar11 = FUN_00321f80(param_1,param_2,param_3);
    return uVar11;
  }
  if (bVar5 == 0x45) goto LAB_00321eb0;
  if ((bVar5 == 0x51) || (bVar5 == 0x4b)) goto LAB_00321c80;
  if (bVar5 == 0x5f) {
    if (pbVar12[1] != 0x6d) {
      bVar4 = true;
      bVar3 = false;
      uVar8 = FUN_00320920(param_2);
      goto LAB_00321c67;
    }
    bVar4 = false;
    FUN_00320bb0(param_3,&DAT_003e8978,1);
    *param_2 = *param_2 + 2;
  }
  else {
    bVar4 = true;
    if (bVar5 == 0x6d) {
      FUN_00320bb0(param_3,&DAT_003e8978,1);
      *param_2 = *param_2 + 1;
    }
  }
  bVar3 = true;
  uVar8 = FUN_00320870(param_2);
LAB_00321c67:
  if (uVar8 != 0xffffffff) {
    sprintf(local_58,"%d",(ulong)uVar8);
    if (local_58[0] != '\0') {
      FUN_00320c60(param_3,local_58);
    }
    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {
      *param_2 = (long)((char *)*param_2 + 1);
    }
    return 1;
  }
  return 0;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
MOV R12,RDI
PUSH RBP
MOV RBP,RDX
PUSH RBX
MOV RBX,RSI
SUB RSP,0x38
MOV RSI,qword ptr [RSI]
MOVZX EAX,byte ptr [RSI]
CMP AL,0x59
JZ 0x00321bb8
CMP ECX,0x4
JZ 0x00321c30
CMP ECX,0x6
JZ 0x00321b50
CMP ECX,0x5
JZ 0x00321ca0
CMP ECX,0x7
JZ 0x00321ce0
LEA EDX,[RCX + -0x1]
MOV dword ptr [RSP + 0xc],ECX
CMP EDX,0x2
JA 0x00321b37
CMP AL,0x51
JZ 0x00321c80
MOV RDI,RBX
CALL 0x00320870
MOV R13D,EAX
CMP EAX,-0x1
JZ 0x00321f74
MOV RDI,qword ptr [RBX]
MOVSXD R14,R13D
CALL 0x00150490
CMP R14,RAX
JG 0x00321f74
TEST R13D,R13D
MOV ECX,dword ptr [RSP + 0xc]
JZ 0x00321da0
LEA EDI,[R13 + 0x1]
MOV dword ptr [RSP + 0xc],ECX
MOVSXD RDI,EDI
CALL 0x00336e30
MOV RSI,qword ptr [RBX]
MOV RDX,R14
MOV R13,RAX
MOV RDI,RAX
CALL 0x001508a0
MOV byte ptr [R13 + R14*0x1],0x0
MOV ESI,dword ptr [R12]
MOV RDI,R13
CALL 0x003218a0
MOV ECX,dword ptr [RSP + 0xc]
MOV R12,RAX
CMP ECX,0x1
JZ 0x00321f5b
TEST R12,R12
JZ 0x00321f20
CMP byte ptr [R12],0x0
JZ 0x00321b24
MOV RSI,R12
MOV RDI,RBP
CALL 0x00320c60
MOV RDI,R12
CALL 0x00150470
MOV RDI,R13
CALL 0x00150470
ADD qword ptr [RBX],R14
MOV EAX,0x1
ADD RSP,0x38
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CMP AL,0x6d
JZ 0x00321d80
MOV EDX,0x1
LEA RSI,[0x3e261d]
MOV RDI,RBP
CALL 0x00320bb0
MOV RDI,RBX
CALL 0x00320870
MOV EDX,EAX
XOR EAX,EAX
TEST EDX,EDX
JLE 0x00321b3c
MOV byte ptr [RSP + 0x10],DL
LEA RSI,[RSP + 0x10]
MOV EDX,0x1
MOV RDI,RBP
MOV byte ptr [RSP + 0x11],0x0
CALL 0x00320bb0
MOV EDX,0x1
LEA RSI,[0x3e261d]
MOV RDI,RBP
CALL 0x00320bb0
MOV EAX,0x1
JMP 0x00321b3c
ADD RSI,0x1
MOV RDI,RBX
MOV qword ptr [RBX],RSI
CALL 0x00320920
MOVSXD R13,EAX
CMP R13D,-0x1
JZ 0x00321f74
CMP qword ptr [R12 + 0x50],0x0
JZ 0x00321be7
CMP dword ptr [R12 + 0x58],R13D
JLE 0x00321f74
MOV RDI,RBX
CALL 0x00320920
CMP EAX,-0x1
JZ 0x00321f74
MOV RAX,qword ptr [R12 + 0x50]
TEST RAX,RAX
JZ 0x00321ec8
MOV RSI,qword ptr [RAX + R13*0x8]
TEST RSI,RSI
JZ 0x00321b37
CMP byte ptr [RSI],0x0
JZ 0x00321b37
MOV RDI,RBP
CALL 0x00320c60
MOV EAX,0x1
JMP 0x00321b3c
CMP AL,0x45
JZ 0x00321eb0
CMP AL,0x51
JZ 0x00321c80
CMP AL,0x4b
JZ 0x00321c80
CMP AL,0x5f
JZ 0x00321ee0
MOV R14D,0x1
CMP AL,0x6d
JZ 0x00321e90
MOV RDI,RBX
MOV R13D,0x1
CALL 0x00320870
MOV R12D,EAX
CMP R12D,-0x1
JNZ 0x00321dc0
XOR EAX,EAX
JMP 0x00321b3c
MOV R8D,0x1
XOR ECX,ECX
MOV RDX,RBP
MOV RSI,RBX
MOV RDI,R12
CALL 0x003245e0
JMP 0x00321b3c
MOV RDI,RBX
CALL 0x00320870
TEST EAX,EAX
JZ 0x00321f00
CMP EAX,0x1
JNZ 0x00321c71
MOV EDX,0x4
LEA RSI,[0x3e8a7b]
MOV RDI,RBP
MOV dword ptr [RSP + 0xc],EAX
CALL 0x00320bb0
MOV EAX,dword ptr [RSP + 0xc]
JMP 0x00321b3c
CMP AL,0x45
JZ 0x00321eb0
CMP AL,0x6d
JZ 0x00321e20
LEA R12,[0x3fef20]
MOVZX EDX,AL
TEST byte ptr [R12 + RDX*0x2],0x4
JZ 0x00321d2d
NOP dword ptr [RAX]
MOV EDX,0x1
MOV RDI,RBP
CALL 0x00320bb0
MOV RAX,qword ptr [RBX]
LEA RSI,[RAX + 0x1]
MOV qword ptr [RBX],RSI
MOVZX EDX,byte ptr [RAX + 0x1]
MOV RAX,RDX
TEST byte ptr [R12 + RDX*0x2],0x4
JNZ 0x00321d08
CMP AL,0x2e
JZ 0x00321e50
MOV RAX,qword ptr [RBX]
MOVZX EAX,byte ptr [RAX]
CMP AL,0x65
JNZ 0x00321b37
MOV EDX,0x1
LEA RSI,[0x3ff6ba]
JMP 0x00321d5d
MOV EDX,0x1
MOV RDI,RBP
CALL 0x00320bb0
MOV RAX,qword ptr [RBX]
LEA RSI,[RAX + 0x1]
MOV qword ptr [RBX],RSI
MOVZX EAX,byte ptr [RAX + 0x1]
TEST byte ptr [R12 + RAX*0x2],0x4
JNZ 0x00321d58
JMP 0x00321b37
MOV EDX,0x1
LEA RSI,[0x3e8978]
MOV RDI,RBP
CALL 0x00320bb0
ADD qword ptr [RBX],0x1
JMP 0x00321b58
MOV EDX,0x1
LEA RSI,[0x3e27e4]
MOV RDI,RBP
CALL 0x00320bb0
JMP 0x00321b34
LEA R15,[RSP + 0x10]
XOR EAX,EAX
MOV EDX,R12D
LEA RSI,[0x3f2e71]
MOV RDI,R15
CALL 0x00150590
CMP byte ptr [RSP + 0x10],0x0
JZ 0x00321deb
MOV RSI,R15
MOV RDI,RBP
CALL 0x00320c60
CMP R12D,0x9
SETG AL
OR AL,R13B
JZ 0x00321b37
TEST R14D,R14D
JNZ 0x00321b37
MOV RAX,qword ptr [RBX]
CMP byte ptr [RAX],0x5f
JNZ 0x00321b37
ADD RAX,0x1
MOV qword ptr [RBX],RAX
JMP 0x00321b37
LEA RSI,[0x3e8978]
MOV EDX,0x1
MOV RDI,RBP
CALL 0x00320bb0
MOV RAX,qword ptr [RBX]
LEA RSI,[RAX + 0x1]
MOV qword ptr [RBX],RSI
MOVZX EAX,byte ptr [RAX + 0x1]
JMP 0x00321cf0
MOV EDX,0x1
LEA RSI,[0x3e8e90]
JMP 0x00321e65
MOV EDX,0x1
MOV RDI,RBP
CALL 0x00320bb0
MOV RAX,qword ptr [RBX]
LEA RSI,[RAX + 0x1]
MOV qword ptr [RBX],RSI
MOVZX EDX,byte ptr [RAX + 0x1]
MOV RAX,RDX
TEST byte ptr [R12 + RDX*0x2],0x4
JNZ 0x00321e60
JMP 0x00321d3b
MOV EDX,0x1
LEA RSI,[0x3e8978]
MOV RDI,RBP
CALL 0x00320bb0
ADD qword ptr [RBX],0x1
JMP 0x00321c56
MOV RDX,RBP
MOV RSI,RBX
MOV RDI,R12
CALL 0x00321f80
JMP 0x00321b3c
MOV ESI,R13D
MOV RDI,RBP
CALL 0x00320ca0
MOV EAX,0x1
JMP 0x00321b3c
CMP byte ptr [RSI + 0x1],0x6d
JZ 0x00321f3b
MOV RDI,RBX
MOV R14D,0x1
XOR R13D,R13D
CALL 0x00320920
MOV R12D,EAX
JMP 0x00321c67
MOV EDX,0x5
LEA RSI,[0x3e8a75]
MOV RDI,RBP
CALL 0x00320bb0
MOV EAX,0x1
JMP 0x00321b3c
CMP byte ptr [R13],0x0
JZ 0x00321b2c
MOV RSI,R13
MOV RDI,RBP
CALL 0x00320c60
JMP 0x00321b2c
MOV EDX,0x1
LEA RSI,[0x3e8978]
MOV RDI,RBP
XOR R14D,R14D
CALL 0x00320bb0
ADD qword ptr [RBX],0x2
JMP 0x00321c56
MOV EDX,0x1
LEA RSI,[0x3fb356]
MOV RDI,RBP
CALL 0x00320bb0
JMP 0x00321b09
MOV EAX,0xffffffff
JMP 0x00321b3c
(translation_unit "undefined8 FUN_00321a30(undefined4 *param_1,long *param_2,undefined8 param_3,int param_4)\n\n{\n  byte bVar1;\n  long lVar2;\n  bool bVar3;\n  bool bVar4;\n  byte bVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  size_t sVar9;\n  char *pcVar10;\n  char *__ptr;\n  undefined8 uVar11;\n  byte *pbVar12;\n  size_t __n;\n  char local_58 [40];\n  \n  pbVar12 = (byte *)*param_2;\n  bVar5 = *pbVar12;\n  if (bVar5 == 0x59) {\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }\n  if (param_4 != 4) {\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }\n  if (bVar5 == 0x45) goto LAB_00321eb0;\n  if ((bVar5 == 0x51) || (bVar5 == 0x4b)) goto LAB_00321c80;\n  if (bVar5 == 0x5f) {\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }\n  else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }\n  bVar3 = true;\n  uVar8 = FUN_00320870(param_2);\nLAB_00321c67:\n  if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_00321a30(undefined4 *param_1,long *param_2,undefined8 param_3,int param_4)\n\n{\n  byte bVar1;\n  long lVar2;\n  bool bVar3;\n  bool bVar4;\n  byte bVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  size_t sVar9;\n  char *pcVar10;\n  char *__ptr;\n  undefined8 uVar11;\n  byte *pbVar12;\n  size_t __n;\n  char local_58 [40];\n  \n  pbVar12 = (byte *)*param_2;\n  bVar5 = *pbVar12;\n  if (bVar5 == 0x59) {\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }\n  if (param_4 != 4) {\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }\n  if (bVar5 == 0x45) goto LAB_00321eb0;\n  if ((bVar5 == 0x51) || (bVar5 == 0x4b)) goto LAB_00321c80;\n  if (bVar5 == 0x5f) {\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }\n  else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }\n  bVar3 = true;\n  uVar8 = FUN_00320870(param_2);\nLAB_00321c67:\n  if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_00321a30(undefined4 *param_1,long *param_2,undefined8 param_3,int param_4)" identifier (parameter_list "(undefined4 *param_1,long *param_2,undefined8 param_3,int param_4)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  byte bVar1;\n  long lVar2;\n  bool bVar3;\n  bool bVar4;\n  byte bVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  size_t sVar9;\n  char *pcVar10;\n  char *__ptr;\n  undefined8 uVar11;\n  byte *pbVar12;\n  size_t __n;\n  char local_58 [40];\n  \n  pbVar12 = (byte *)*param_2;\n  bVar5 = *pbVar12;\n  if (bVar5 == 0x59) {\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }\n  if (param_4 != 4) {\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }\n  if (bVar5 == 0x45) goto LAB_00321eb0;\n  if ((bVar5 == 0x51) || (bVar5 == 0x4b)) goto LAB_00321c80;\n  if (bVar5 == 0x5f) {\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }\n  else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }\n  bVar3 = true;\n  uVar8 = FUN_00320870(param_2);\nLAB_00321c67:\n  if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }\n  return 0;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "bool bVar3;" primitive_type identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "byte bVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "size_t sVar9;" primitive_type identifier ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "char *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "undefined8 uVar11;" type_identifier identifier ;) (declaration "byte *pbVar12;" type_identifier (pointer_declarator "*pbVar12" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "char local_58 [40];" primitive_type (array_declarator "local_58 [40]" identifier [ number_literal ]) ;) (expression_statement "pbVar12 = (byte *)*param_2;" (assignment_expression "pbVar12 = (byte *)*param_2" identifier = (cast_expression "(byte *)*param_2" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "bVar5 = *pbVar12;" (assignment_expression "bVar5 = *pbVar12" identifier = (pointer_expression "*pbVar12" * identifier)) ;) (if_statement "if (bVar5 == 0x59) {\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }" if (parenthesized_expression "(bVar5 == 0x59)" ( (binary_expression "bVar5 == 0x59" identifier == number_literal) )) (compound_statement "{\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }" { (expression_statement "*param_2 = (long)(pbVar12 + 1);" (assignment_expression "*param_2 = (long)(pbVar12 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)(pbVar12 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(pbVar12 + 1)" ( (binary_expression "pbVar12 + 1" identifier + number_literal) )))) ;) (expression_statement "iVar6 = FUN_00320920(param_2);" (assignment_expression "iVar6 = FUN_00320920(param_2)" identifier = (call_expression "FUN_00320920(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (iVar6 == -1) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) (if_statement "if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6))" ( (binary_expression "(*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)" (parenthesized_expression "(*(long *)(param_1 + 0x14) != 0)" ( (binary_expression "*(long *)(param_1 + 0x14) != 0" (pointer_expression "*(long *)(param_1 + 0x14)" * (cast_expression "(long *)(param_1 + 0x14)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "((int)param_1[0x16] <= iVar6)" ( (binary_expression "(int)param_1[0x16] <= iVar6" (cast_expression "(int)param_1[0x16]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0x16]" identifier [ number_literal ])) <= identifier) ))) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) (expression_statement "iVar7 = FUN_00320920(param_2);" (assignment_expression "iVar7 = FUN_00320920(param_2)" identifier = (call_expression "FUN_00320920(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (iVar7 == -1) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(iVar7 == -1)" ( (binary_expression "iVar7 == -1" identifier == number_literal) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) (if_statement "if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }" if (parenthesized_expression "(*(long *)(param_1 + 0x14) != 0)" ( (binary_expression "*(long *)(param_1 + 0x14) != 0" (pointer_expression "*(long *)(param_1 + 0x14)" * (cast_expression "(long *)(param_1 + 0x14)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }" { (expression_statement "pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);" (assignment_expression "pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8)" identifier = (pointer_expression "*(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8)" * (cast_expression "(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(param_1 + 0x14) + (long)iVar6 * 8)" ( (binary_expression "*(long *)(param_1 + 0x14) + (long)iVar6 * 8" (pointer_expression "*(long *)(param_1 + 0x14)" * (cast_expression "(long *)(param_1 + 0x14)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) + (binary_expression "(long)iVar6 * 8" (cast_expression "(long)iVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ))))) ;) (if_statement "if (pcVar10 == (char *)0x0) {\n        return 1;\n      }" if (parenthesized_expression "(pcVar10 == (char *)0x0)" ( (binary_expression "pcVar10 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (*pcVar10 == '\0') {\n        return 1;\n      }" if (parenthesized_expression "(*pcVar10 == '\0')" ( (binary_expression "*pcVar10 == '\0'" (pointer_expression "*pcVar10" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "FUN_00320c60(param_3);" (call_expression "FUN_00320c60(param_3)" identifier (argument_list "(param_3)" ( identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (expression_statement "FUN_00320ca0(param_3,iVar6);" (call_expression "FUN_00320ca0(param_3,iVar6)" identifier (argument_list "(param_3,iVar6)" ( identifier , identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (if_statement "if (param_4 != 4) {\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }" if (parenthesized_expression "(param_4 != 4)" ( (binary_expression "param_4 != 4" identifier != number_literal) )) (compound_statement "{\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }" { (if_statement "if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }" if (parenthesized_expression "(param_4 == 6)" ( (binary_expression "param_4 == 6" identifier == number_literal) )) (compound_statement "{\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }" { (if_statement "if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }" if (parenthesized_expression "(bVar5 == 0x6d)" ( (binary_expression "bVar5 == 0x6d" identifier == number_literal) )) (compound_statement "{\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }" { (expression_statement "FUN_00320bb0(param_3,&DAT_003e8978,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8978,1)" identifier (argument_list "(param_3,&DAT_003e8978,1)" ( identifier , (pointer_expression "&DAT_003e8978" & identifier) , number_literal ))) ;) (expression_statement "*param_2 = *param_2 + 1;" (assignment_expression "*param_2 = *param_2 + 1" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + 1" (pointer_expression "*param_2" * identifier) + number_literal)) ;) })) (expression_statement "FUN_00320bb0(param_3,&DAT_003e261d,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e261d,1)" identifier (argument_list "(param_3,&DAT_003e261d,1)" ( identifier , (pointer_expression "&DAT_003e261d" & identifier) , number_literal ))) ;) (expression_statement "iVar6 = FUN_00320870(param_2);" (assignment_expression "iVar6 = FUN_00320870(param_2)" identifier = (call_expression "FUN_00320870(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (compound_statement "{\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }" { (expression_statement "local_58[0] = (char)iVar6;" (assignment_expression "local_58[0] = (char)iVar6" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (cast_expression "(char)iVar6" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "local_58[1] = 0;" (assignment_expression "local_58[1] = 0" (subscript_expression "local_58[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "FUN_00320bb0(param_3,local_58,1);" (call_expression "FUN_00320bb0(param_3,local_58,1)" identifier (argument_list "(param_3,local_58,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "FUN_00320bb0(param_3,&DAT_003e261d,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e261d,1)" identifier (argument_list "(param_3,&DAT_003e261d,1)" ( identifier , (pointer_expression "&DAT_003e261d" & identifier) , number_literal ))) ;) (return_statement "return 1;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }" if (parenthesized_expression "(param_4 == 5)" ( (binary_expression "param_4 == 5" identifier == number_literal) )) (compound_statement "{\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }" { (expression_statement "iVar6 = FUN_00320870(param_2);" (assignment_expression "iVar6 = FUN_00320870(param_2)" identifier = (call_expression "FUN_00320870(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }" { (expression_statement "FUN_00320bb0(param_3,"false",5);" (call_expression "FUN_00320bb0(param_3,"false",5)" identifier (argument_list "(param_3,"false",5)" ( identifier , (string_literal ""false"" " string_content ") , number_literal ))) ;) (return_statement "return 1;" return number_literal ;) })) (if_statement "if (iVar6 != 1) {\n        return 0;\n      }" if (parenthesized_expression "(iVar6 != 1)" ( (binary_expression "iVar6 != 1" identifier != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_00320bb0(param_3,&DAT_003e8a7b,4);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8a7b,4)" identifier (argument_list "(param_3,&DAT_003e8a7b,4)" ( identifier , (pointer_expression "&DAT_003e8a7b" & identifier) , number_literal ))) ;) (return_statement "return 1;" return number_literal ;) })) (if_statement "if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }" if (parenthesized_expression "(param_4 != 7)" ( (binary_expression "param_4 != 7" identifier != number_literal) )) (compound_statement "{\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }" { (if_statement "if (2 < param_4 - 1U) {\n        return 1;\n      }" if (parenthesized_expression "(2 < param_4 - 1U)" ( (binary_expression "2 < param_4 - 1U" number_literal < (binary_expression "param_4 - 1U" identifier - number_literal)) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }" if (parenthesized_expression "(bVar5 != 0x51)" ( (binary_expression "bVar5 != 0x51" identifier != number_literal) )) (compound_statement "{\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }" { (expression_statement "iVar6 = FUN_00320870(param_2);" (assignment_expression "iVar6 = FUN_00320870(param_2)" identifier = (call_expression "FUN_00320870(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }" if (parenthesized_expression "(iVar6 != -1)" ( (binary_expression "iVar6 != -1" identifier != number_literal) )) (compound_statement "{\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }" { (expression_statement "__n = (size_t)iVar6;" (assignment_expression "__n = (size_t)iVar6" identifier = (cast_expression "(size_t)iVar6" ( (type_descriptor "size_t" primitive_type) ) identifier)) ;) (expression_statement "sVar9 = strlen((char *)*param_2);" (assignment_expression "sVar9 = strlen((char *)*param_2)" identifier = (call_expression "strlen((char *)*param_2)" identifier (argument_list "((char *)*param_2)" ( (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) )))) ;) (if_statement "if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }" if (parenthesized_expression "((long)__n <= (long)sVar9)" ( (binary_expression "(long)__n <= (long)sVar9" (cast_expression "(long)__n" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) <= (cast_expression "(long)sVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) (compound_statement "{\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }" { (if_statement "if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n              FUN_00320bb0(param_3,"0",1);\n            }" { (expression_statement "FUN_00320bb0(param_3,"0",1);" (call_expression "FUN_00320bb0(param_3,"0",1)" identifier (argument_list "(param_3,"0",1)" ( identifier , (string_literal ""0"" " string_content ") , number_literal ))) ;) }) (else_clause "else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }" else (compound_statement "{\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }" { (expression_statement "pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));" (assignment_expression "pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1))" identifier = (cast_expression "(char *)FUN_00336e30((long)(iVar6 + 1))" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00336e30((long)(iVar6 + 1))" identifier (argument_list "((long)(iVar6 + 1))" ( (cast_expression "(long)(iVar6 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(iVar6 + 1)" ( (binary_expression "iVar6 + 1" identifier + number_literal) ))) ))))) ;) (expression_statement "strncpy(pcVar10,(char *)*param_2,__n);" (call_expression "strncpy(pcVar10,(char *)*param_2,__n)" identifier (argument_list "(pcVar10,(char *)*param_2,__n)" ( identifier , (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) , identifier ))) ;) (expression_statement "pcVar10[__n] = '\0';" (assignment_expression "pcVar10[__n] = '\0'" (subscript_expression "pcVar10[__n]" identifier [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "__ptr = (char *)FUN_003218a0(pcVar10,*param_1);" (assignment_expression "__ptr = (char *)FUN_003218a0(pcVar10,*param_1)" identifier = (cast_expression "(char *)FUN_003218a0(pcVar10,*param_1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_003218a0(pcVar10,*param_1)" identifier (argument_list "(pcVar10,*param_1)" ( identifier , (pointer_expression "*param_1" * identifier) ))))) ;) (if_statement "if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }" if (parenthesized_expression "(param_4 == 1)" ( (binary_expression "param_4 == 1" identifier == number_literal) )) (compound_statement "{\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }" { (expression_statement "FUN_00320bb0(param_3,&DAT_003fb356,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003fb356,1)" identifier (argument_list "(param_3,&DAT_003fb356,1)" ( identifier , (pointer_expression "&DAT_003fb356" & identifier) , number_literal ))) ;) })) (if_statement "if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }" if (parenthesized_expression "(__ptr == (char *)0x0)" ( (binary_expression "__ptr == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }" { (if_statement "if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }" if (parenthesized_expression "(*pcVar10 != '\0')" ( (binary_expression "*pcVar10 != '\0'" (pointer_expression "*pcVar10" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                  FUN_00320c60(param_3,pcVar10);\n                }" { (expression_statement "FUN_00320c60(param_3,pcVar10);" (call_expression "FUN_00320c60(param_3,pcVar10)" identifier (argument_list "(param_3,pcVar10)" ( identifier , identifier ))) ;) })) }) (else_clause "else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }" else (compound_statement "{\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }" { (if_statement "if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }" if (parenthesized_expression "(*__ptr != '\0')" ( (binary_expression "*__ptr != '\0'" (pointer_expression "*__ptr" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                  FUN_00320c60(param_3,__ptr);\n                }" { (expression_statement "FUN_00320c60(param_3,__ptr);" (call_expression "FUN_00320c60(param_3,__ptr)" identifier (argument_list "(param_3,__ptr)" ( identifier , identifier ))) ;) })) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) }))) (expression_statement "free(pcVar10);" (call_expression "free(pcVar10)" identifier (argument_list "(pcVar10)" ( identifier ))) ;) }))) (expression_statement "*param_2 = *param_2 + __n;" (assignment_expression "*param_2 = *param_2 + __n" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + __n" (pointer_expression "*param_2" * identifier) + identifier)) ;) (return_statement "return 1;" return number_literal ;) })) })) (return_statement "return 0xffffffff;" return number_literal ;) })) (labeled_statement "LAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);" statement_identifier : (expression_statement "uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);" (assignment_expression "uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1)" identifier = (call_expression "FUN_003245e0(param_1,param_2,param_3,0,1)" identifier (argument_list "(param_1,param_2,param_3,0,1)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;)) (return_statement "return uVar11;" return identifier ;) })) (if_statement "if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }" if (parenthesized_expression "(bVar5 != 0x45)" ( (binary_expression "bVar5 != 0x45" identifier != number_literal) )) (compound_statement "{\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }" { (if_statement "if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }" if (parenthesized_expression "(bVar5 == 0x6d)" ( (binary_expression "bVar5 == 0x6d" identifier == number_literal) )) (compound_statement "{\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }" { (expression_statement "FUN_00320bb0(param_3,&DAT_003e8978,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8978,1)" identifier (argument_list "(param_3,&DAT_003e8978,1)" ( identifier , (pointer_expression "&DAT_003e8978" & identifier) , number_literal ))) ;) (expression_statement "lVar2 = *param_2;" (assignment_expression "lVar2 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "pbVar12 = (byte *)(lVar2 + 1);" (assignment_expression "pbVar12 = (byte *)(lVar2 + 1)" identifier = (cast_expression "(byte *)(lVar2 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) )))) ;) (expression_statement "*param_2 = (long)pbVar12;" (assignment_expression "*param_2 = (long)pbVar12" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)pbVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "bVar5 = *(byte *)(lVar2 + 1);" (assignment_expression "bVar5 = *(byte *)(lVar2 + 1)" identifier = (pointer_expression "*(byte *)(lVar2 + 1)" * (cast_expression "(byte *)(lVar2 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) ))))) ;) })) (expression_statement "bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];" (assignment_expression "bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2]" identifier = (subscript_expression "(&DAT_003fef20)[(ulong)bVar5 * 2]" (parenthesized_expression "(&DAT_003fef20)" ( (pointer_expression "&DAT_003fef20" & identifier) )) [ (binary_expression "(ulong)bVar5 * 2" (cast_expression "(ulong)bVar5" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal) ])) ;) (while_statement "while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }" while (parenthesized_expression "((bVar1 & 4) != 0)" ( (binary_expression "(bVar1 & 4) != 0" (parenthesized_expression "(bVar1 & 4)" ( (binary_expression "bVar1 & 4" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }" { (expression_statement "FUN_00320bb0(param_3,pbVar12,1);" (call_expression "FUN_00320bb0(param_3,pbVar12,1)" identifier (argument_list "(param_3,pbVar12,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "lVar2 = *param_2;" (assignment_expression "lVar2 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "pbVar12 = (byte *)(lVar2 + 1);" (assignment_expression "pbVar12 = (byte *)(lVar2 + 1)" identifier = (cast_expression "(byte *)(lVar2 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) )))) ;) (expression_statement "*param_2 = (long)pbVar12;" (assignment_expression "*param_2 = (long)pbVar12" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)pbVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "bVar5 = *(byte *)(lVar2 + 1);" (assignment_expression "bVar5 = *(byte *)(lVar2 + 1)" identifier = (pointer_expression "*(byte *)(lVar2 + 1)" * (cast_expression "(byte *)(lVar2 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) ))))) ;) (expression_statement "bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];" (assignment_expression "bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2]" identifier = (subscript_expression "(&DAT_003fef20)[(ulong)bVar5 * 2]" (parenthesized_expression "(&DAT_003fef20)" ( (pointer_expression "&DAT_003fef20" & identifier) )) [ (binary_expression "(ulong)bVar5 * 2" (cast_expression "(ulong)bVar5" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal) ])) ;) })) (if_statement "if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }" if (parenthesized_expression "(bVar5 == 0x2e)" ( (binary_expression "bVar5 == 0x2e" identifier == number_literal) )) (compound_statement "{\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }" { (expression_statement "pcVar10 = ".";" (assignment_expression "pcVar10 = "."" identifier = (string_literal ""."" " string_content ")) ;) (do_statement "do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);" do (compound_statement "{\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        }" { (expression_statement "FUN_00320bb0(param_3,pcVar10,1);" (call_expression "FUN_00320bb0(param_3,pcVar10,1)" identifier (argument_list "(param_3,pcVar10,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "lVar2 = *param_2;" (assignment_expression "lVar2 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "pcVar10 = (char *)(lVar2 + 1);" (assignment_expression "pcVar10 = (char *)(lVar2 + 1)" identifier = (cast_expression "(char *)(lVar2 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) )))) ;) (expression_statement "*param_2 = (long)pcVar10;" (assignment_expression "*param_2 = (long)pcVar10" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)pcVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "bVar5 = *(byte *)(lVar2 + 1);" (assignment_expression "bVar5 = *(byte *)(lVar2 + 1)" identifier = (pointer_expression "*(byte *)(lVar2 + 1)" * (cast_expression "(byte *)(lVar2 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0)" ( (binary_expression "((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0" (parenthesized_expression "((&DAT_003fef20)[(ulong)bVar5 * 2] & 4)" ( (binary_expression "(&DAT_003fef20)[(ulong)bVar5 * 2] & 4" (subscript_expression "(&DAT_003fef20)[(ulong)bVar5 * 2]" (parenthesized_expression "(&DAT_003fef20)" ( (pointer_expression "&DAT_003fef20" & identifier) )) [ (binary_expression "(ulong)bVar5 * 2" (cast_expression "(ulong)bVar5" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal) ]) & number_literal) )) != number_literal) )) ;) }) (else_clause "else {\n        bVar5 = *(byte *)*param_2;\n      }" else (compound_statement "{\n        bVar5 = *(byte *)*param_2;\n      }" { (expression_statement "bVar5 = *(byte *)*param_2;" (assignment_expression "bVar5 = *(byte *)*param_2" identifier = (pointer_expression "*(byte *)*param_2" * (cast_expression "(byte *)*param_2" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)))) ;) }))) (if_statement "if (bVar5 != 0x65) {\n        return 1;\n      }" if (parenthesized_expression "(bVar5 != 0x65)" ( (binary_expression "bVar5 != 0x65" identifier != number_literal) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "pcVar10 = "e";" (assignment_expression "pcVar10 = "e"" identifier = (string_literal ""e"" " string_content ")) ;) (do_statement "do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);" do (compound_statement "{\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      }" { (expression_statement "FUN_00320bb0(param_3,pcVar10,1);" (call_expression "FUN_00320bb0(param_3,pcVar10,1)" identifier (argument_list "(param_3,pcVar10,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "lVar2 = *param_2;" (assignment_expression "lVar2 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "pcVar10 = (char *)(lVar2 + 1);" (assignment_expression "pcVar10 = (char *)(lVar2 + 1)" identifier = (cast_expression "(char *)(lVar2 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) )))) ;) (expression_statement "*param_2 = (long)pcVar10;" (assignment_expression "*param_2 = (long)pcVar10" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)pcVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) }) while (parenthesized_expression "(((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0)" ( (binary_expression "((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0" (parenthesized_expression "((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4)" ( (binary_expression "(&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4" (subscript_expression "(&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2]" (parenthesized_expression "(&DAT_003fef20)" ( (pointer_expression "&DAT_003fef20" & identifier) )) [ (binary_expression "(ulong)*(byte *)(lVar2 + 1) * 2" (binary_expression "(ulong)*(byte *)(lVar2 + 1)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(byte *)(lVar2 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) )))) * number_literal) ]) & number_literal) )) != number_literal) )) ;) (return_statement "return 1;" return number_literal ;) })) (labeled_statement "LAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);" statement_identifier : (expression_statement "uVar11 = FUN_00321f80(param_1,param_2,param_3);" (assignment_expression "uVar11 = FUN_00321f80(param_1,param_2,param_3)" identifier = (call_expression "FUN_00321f80(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;)) (return_statement "return uVar11;" return identifier ;) })) (if_statement "if (bVar5 == 0x45) goto LAB_00321eb0;" if (parenthesized_expression "(bVar5 == 0x45)" ( (binary_expression "bVar5 == 0x45" identifier == number_literal) )) (goto_statement "goto LAB_00321eb0;" goto statement_identifier ;)) (if_statement "if ((bVar5 == 0x51) || (bVar5 == 0x4b)) goto LAB_00321c80;" if (parenthesized_expression "((bVar5 == 0x51) || (bVar5 == 0x4b))" ( (binary_expression "(bVar5 == 0x51) || (bVar5 == 0x4b)" (parenthesized_expression "(bVar5 == 0x51)" ( (binary_expression "bVar5 == 0x51" identifier == number_literal) )) || (parenthesized_expression "(bVar5 == 0x4b)" ( (binary_expression "bVar5 == 0x4b" identifier == number_literal) ))) )) (goto_statement "goto LAB_00321c80;" goto statement_identifier ;)) (if_statement "if (bVar5 == 0x5f) {\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }\n  else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }" if (parenthesized_expression "(bVar5 == 0x5f)" ( (binary_expression "bVar5 == 0x5f" identifier == number_literal) )) (compound_statement "{\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }" { (if_statement "if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }" if (parenthesized_expression "(pbVar12[1] != 0x6d)" ( (binary_expression "pbVar12[1] != 0x6d" (subscript_expression "pbVar12[1]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }" { (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;) (expression_statement "bVar3 = false;" (assignment_expression "bVar3 = false" identifier = false) ;) (expression_statement "uVar8 = FUN_00320920(param_2);" (assignment_expression "uVar8 = FUN_00320920(param_2)" identifier = (call_expression "FUN_00320920(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (goto_statement "goto LAB_00321c67;" goto statement_identifier ;) })) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) (expression_statement "FUN_00320bb0(param_3,&DAT_003e8978,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8978,1)" identifier (argument_list "(param_3,&DAT_003e8978,1)" ( identifier , (pointer_expression "&DAT_003e8978" & identifier) , number_literal ))) ;) (expression_statement "*param_2 = *param_2 + 2;" (assignment_expression "*param_2 = *param_2 + 2" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + 2" (pointer_expression "*param_2" * identifier) + number_literal)) ;) }) (else_clause "else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }" else (compound_statement "{\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }" { (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;) (if_statement "if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }" if (parenthesized_expression "(bVar5 == 0x6d)" ( (binary_expression "bVar5 == 0x6d" identifier == number_literal) )) (compound_statement "{\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }" { (expression_statement "FUN_00320bb0(param_3,&DAT_003e8978,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8978,1)" identifier (argument_list "(param_3,&DAT_003e8978,1)" ( identifier , (pointer_expression "&DAT_003e8978" & identifier) , number_literal ))) ;) (expression_statement "*param_2 = *param_2 + 1;" (assignment_expression "*param_2 = *param_2 + 1" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + 1" (pointer_expression "*param_2" * identifier) + number_literal)) ;) })) }))) (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" identifier = true) ;) (expression_statement "uVar8 = FUN_00320870(param_2);" (assignment_expression "uVar8 = FUN_00320870(param_2)" identifier = (call_expression "FUN_00320870(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (labeled_statement "LAB_00321c67:\n  if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }" statement_identifier : (if_statement "if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }" if (parenthesized_expression "(uVar8 != 0xffffffff)" ( (binary_expression "uVar8 != 0xffffffff" identifier != number_literal) )) (compound_statement "{\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }" { (expression_statement "sprintf(local_58,"%d",(ulong)uVar8);" (call_expression "sprintf(local_58,"%d",(ulong)uVar8)" identifier (argument_list "(local_58,"%d",(ulong)uVar8)" ( identifier , (string_literal ""%d"" " string_content ") , (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier) ))) ;) (if_statement "if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }" if (parenthesized_expression "(local_58[0] != '\0')" ( (binary_expression "local_58[0] != '\0'" (subscript_expression "local_58[0]" identifier [ number_literal ]) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      FUN_00320c60(param_3,local_58);\n    }" { (expression_statement "FUN_00320c60(param_3,local_58);" (call_expression "FUN_00320c60(param_3,local_58)" identifier (argument_list "(param_3,local_58)" ( identifier , identifier ))) ;) })) (if_statement "if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }" if (parenthesized_expression "(((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_'))" ( (binary_expression "((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')" (parenthesized_expression "((9 < (int)uVar8 || bVar3) && (!bVar4))" ( (binary_expression "(9 < (int)uVar8 || bVar3) && (!bVar4)" (parenthesized_expression "(9 < (int)uVar8 || bVar3)" ( (binary_expression "9 < (int)uVar8 || bVar3" (binary_expression "9 < (int)uVar8" number_literal < (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier)) || identifier) )) && (parenthesized_expression "(!bVar4)" ( (unary_expression "!bVar4" ! identifier) ))) )) && (parenthesized_expression "(*(char *)*param_2 == '_')" ( (binary_expression "*(char *)*param_2 == '_'" (pointer_expression "*(char *)*param_2" * (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) == (char_literal "'_'" ' character ')) ))) )) (compound_statement "{\n      *param_2 = (long)((char *)*param_2 + 1);\n    }" { (expression_statement "*param_2 = (long)((char *)*param_2 + 1);" (assignment_expression "*param_2 = (long)((char *)*param_2 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((char *)*param_2 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((char *)*param_2 + 1)" ( (binary_expression "(char *)*param_2 + 1" (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) + number_literal) )))) ;) })) (return_statement "return 1;" return number_literal ;) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "int demangle_template_value_parm(work_stuff *work,char **mangled,string *s,type_kind_t tk)\n\n{\n  byte bVar1;\n  bool bVar2;\n  bool bVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  size_t sVar8;\n  char *pcVar9;\n  char *pcVar10;\n  byte *s_00;\n  size_t __n;\n  char tmp [2];\n  \n  s_00 = (byte *)*mangled;\n  bVar4 = *s_00;\n  if (bVar4 == 0x59) {\n    *mangled = (char *)(s_00 + 1);\n    iVar5 = consume_count_with_underscores(mangled);\n    if (iVar5 == -1) {\n      return -1;\n    }\n    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar5)) {\n      return -1;\n    }\n    iVar6 = consume_count_with_underscores(mangled);\n    if (iVar6 == -1) {\n      return -1;\n    }\n    if (work->tmpl_argvec != (char **)0x0) {\n      pcVar9 = work->tmpl_argvec[iVar5];\n      if (pcVar9 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar9 == '\0') {\n        return 1;\n      }\n      string_append(s,pcVar9);\n      return 1;\n    }\n    string_append_template_idx(s,iVar5);\n    return 1;\n  }\n  if (tk != tk_integral) {\n    if (tk == tk_char) {\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        *mangled = *mangled + 1;\n      }\n      string_appendn(s,"\'",1);\n      iVar5 = consume_count(mangled);\n      if (0 < iVar5) {\n        tmp[0] = (char)iVar5;\n        tmp[1] = '\0';\n        string_appendn(s,tmp,1);\n        string_appendn(s,"\'",1);\n        return 1;\n      }\n      return 0;\n    }\n    if (tk == tk_bool) {\n      iVar5 = consume_count(mangled);\n      if (iVar5 == 0) {\n        string_appendn(s,"false",5);\n        return 1;\n      }\n      if (iVar5 != 1) {\n        return 0;\n      }\n      string_appendn(s,"true",4);\n      return 1;\n    }\n    if (tk != tk_real) {\n      if (2 < tk - tk_pointer) {\n        return 1;\n      }\n      if (bVar4 != 0x51) {\n        iVar5 = consume_count(mangled);\n        if (iVar5 != -1) {\n          __n = (size_t)iVar5;\n          sVar8 = strlen(*mangled);\n          if ((long)__n <= (long)sVar8) {\n            if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }\n            *mangled = *mangled + __n;\n            return 1;\n          }\n        }\n        return -1;\n      }\nLAB_00321c80:\n      iVar5 = demangle_qualified(work,mangled,s,0,1);\n      return iVar5;\n    }\n    if (bVar4 != 0x45) {\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n      }\n      bVar1 = (byte)_sch_istable[bVar4];\n      while ((bVar1 & 4) != 0) {\n        string_appendn(s,(char *)s_00,1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n        bVar1 = (byte)_sch_istable[bVar4];\n      }\n      if (bVar4 == 0x2e) {\n        pcVar9 = ".";\n        do {\n          string_appendn(s,pcVar9,1);\n          pcVar10 = *mangled;\n          pcVar9 = pcVar10 + 1;\n          *mangled = pcVar9;\n          bVar4 = pcVar10[1];\n        } while ((_sch_istable[bVar4] & 4) != 0);\n      }\n      else {\n        bVar4 = **mangled;\n      }\n      if (bVar4 != 0x65) {\n        return 1;\n      }\n      pcVar9 = "e";\n      do {\n        string_appendn(s,pcVar9,1);\n        pcVar10 = *mangled;\n        pcVar9 = pcVar10 + 1;\n        *mangled = pcVar9;\n      } while ((_sch_istable[(byte)pcVar10[1]] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    iVar5 = demangle_expression(work,mangled,s,tk);\n    return iVar5;\n  }\n  if (bVar4 == 0x45) goto LAB_00321eb0;\n  if ((bVar4 == 0x51) || (bVar4 == 0x4b)) goto LAB_00321c80;\n  if (bVar4 == 0x5f) {\n    if (s_00[1] != 0x6d) {\n      bVar3 = true;\n      bVar2 = false;\n      uVar7 = consume_count_with_underscores(mangled);\n      goto LAB_00321c67;\n    }\n    bVar3 = false;\n    string_appendn(s,"-",1);\n    *mangled = *mangled + 2;\n  }\n  else {\n    bVar3 = true;\n    if (bVar4 == 0x6d) {\n      string_appendn(s,"-",1);\n      *mangled = *mangled + 1;\n    }\n  }\n  bVar2 = true;\n  uVar7 = consume_count(mangled);\nLAB_00321c67:\n  if (uVar7 != 0xffffffff) {\n    sprintf(tmp,"%d",(ulong)uVar7);\n    if (tmp[0] != '\0') {\n      string_append(s,tmp);\n    }\n    if (((9 < (int)uVar7 || bVar2) && (!bVar3)) && (**mangled == '_')) {\n      *mangled = *mangled + 1;\n    }\n    return 1;\n  }\n  return 0;\n}\n\n" (function_definition "int demangle_template_value_parm(work_stuff *work,char **mangled,string *s,type_kind_t tk)\n\n{\n  byte bVar1;\n  bool bVar2;\n  bool bVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  size_t sVar8;\n  char *pcVar9;\n  char *pcVar10;\n  byte *s_00;\n  size_t __n;\n  char tmp [2];\n  \n  s_00 = (byte *)*mangled;\n  bVar4 = *s_00;\n  if (bVar4 == 0x59) {\n    *mangled = (char *)(s_00 + 1);\n    iVar5 = consume_count_with_underscores(mangled);\n    if (iVar5 == -1) {\n      return -1;\n    }\n    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar5)) {\n      return -1;\n    }\n    iVar6 = consume_count_with_underscores(mangled);\n    if (iVar6 == -1) {\n      return -1;\n    }\n    if (work->tmpl_argvec != (char **)0x0) {\n      pcVar9 = work->tmpl_argvec[iVar5];\n      if (pcVar9 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar9 == '\0') {\n        return 1;\n      }\n      string_append(s,pcVar9);\n      return 1;\n    }\n    string_append_template_idx(s,iVar5);\n    return 1;\n  }\n  if (tk != tk_integral) {\n    if (tk == tk_char) {\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        *mangled = *mangled + 1;\n      }\n      string_appendn(s,"\'",1);\n      iVar5 = consume_count(mangled);\n      if (0 < iVar5) {\n        tmp[0] = (char)iVar5;\n        tmp[1] = '\0';\n        string_appendn(s,tmp,1);\n        string_appendn(s,"\'",1);\n        return 1;\n      }\n      return 0;\n    }\n    if (tk == tk_bool) {\n      iVar5 = consume_count(mangled);\n      if (iVar5 == 0) {\n        string_appendn(s,"false",5);\n        return 1;\n      }\n      if (iVar5 != 1) {\n        return 0;\n      }\n      string_appendn(s,"true",4);\n      return 1;\n    }\n    if (tk != tk_real) {\n      if (2 < tk - tk_pointer) {\n        return 1;\n      }\n      if (bVar4 != 0x51) {\n        iVar5 = consume_count(mangled);\n        if (iVar5 != -1) {\n          __n = (size_t)iVar5;\n          sVar8 = strlen(*mangled);\n          if ((long)__n <= (long)sVar8) {\n            if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }\n            *mangled = *mangled + __n;\n            return 1;\n          }\n        }\n        return -1;\n      }\nLAB_00321c80:\n      iVar5 = demangle_qualified(work,mangled,s,0,1);\n      return iVar5;\n    }\n    if (bVar4 != 0x45) {\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n      }\n      bVar1 = (byte)_sch_istable[bVar4];\n      while ((bVar1 & 4) != 0) {\n        string_appendn(s,(char *)s_00,1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n        bVar1 = (byte)_sch_istable[bVar4];\n      }\n      if (bVar4 == 0x2e) {\n        pcVar9 = ".";\n        do {\n          string_appendn(s,pcVar9,1);\n          pcVar10 = *mangled;\n          pcVar9 = pcVar10 + 1;\n          *mangled = pcVar9;\n          bVar4 = pcVar10[1];\n        } while ((_sch_istable[bVar4] & 4) != 0);\n      }\n      else {\n        bVar4 = **mangled;\n      }\n      if (bVar4 != 0x65) {\n        return 1;\n      }\n      pcVar9 = "e";\n      do {\n        string_appendn(s,pcVar9,1);\n        pcVar10 = *mangled;\n        pcVar9 = pcVar10 + 1;\n        *mangled = pcVar9;\n      } while ((_sch_istable[(byte)pcVar10[1]] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    iVar5 = demangle_expression(work,mangled,s,tk);\n    return iVar5;\n  }\n  if (bVar4 == 0x45) goto LAB_00321eb0;\n  if ((bVar4 == 0x51) || (bVar4 == 0x4b)) goto LAB_00321c80;\n  if (bVar4 == 0x5f) {\n    if (s_00[1] != 0x6d) {\n      bVar3 = true;\n      bVar2 = false;\n      uVar7 = consume_count_with_underscores(mangled);\n      goto LAB_00321c67;\n    }\n    bVar3 = false;\n    string_appendn(s,"-",1);\n    *mangled = *mangled + 2;\n  }\n  else {\n    bVar3 = true;\n    if (bVar4 == 0x6d) {\n      string_appendn(s,"-",1);\n      *mangled = *mangled + 1;\n    }\n  }\n  bVar2 = true;\n  uVar7 = consume_count(mangled);\nLAB_00321c67:\n  if (uVar7 != 0xffffffff) {\n    sprintf(tmp,"%d",(ulong)uVar7);\n    if (tmp[0] != '\0') {\n      string_append(s,tmp);\n    }\n    if (((9 < (int)uVar7 || bVar2) && (!bVar3)) && (**mangled == '_')) {\n      *mangled = *mangled + 1;\n    }\n    return 1;\n  }\n  return 0;\n}" primitive_type (function_declarator "demangle_template_value_parm(work_stuff *work,char **mangled,string *s,type_kind_t tk)" identifier (parameter_list "(work_stuff *work,char **mangled,string *s,type_kind_t tk)" ( (parameter_declaration "work_stuff *work" type_identifier (pointer_declarator "*work" * identifier)) , (parameter_declaration "char **mangled" primitive_type (pointer_declarator "**mangled" * (pointer_declarator "*mangled" * identifier))) , (parameter_declaration "string *s" type_identifier (pointer_declarator "*s" * identifier)) , (parameter_declaration "type_kind_t tk" type_identifier identifier) ))) (compound_statement "{\n  byte bVar1;\n  bool bVar2;\n  bool bVar3;\n  byte bVar4;\n  int iVar5;\n  int iVar6;\n  uint uVar7;\n  size_t sVar8;\n  char *pcVar9;\n  char *pcVar10;\n  byte *s_00;\n  size_t __n;\n  char tmp [2];\n  \n  s_00 = (byte *)*mangled;\n  bVar4 = *s_00;\n  if (bVar4 == 0x59) {\n    *mangled = (char *)(s_00 + 1);\n    iVar5 = consume_count_with_underscores(mangled);\n    if (iVar5 == -1) {\n      return -1;\n    }\n    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar5)) {\n      return -1;\n    }\n    iVar6 = consume_count_with_underscores(mangled);\n    if (iVar6 == -1) {\n      return -1;\n    }\n    if (work->tmpl_argvec != (char **)0x0) {\n      pcVar9 = work->tmpl_argvec[iVar5];\n      if (pcVar9 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar9 == '\0') {\n        return 1;\n      }\n      string_append(s,pcVar9);\n      return 1;\n    }\n    string_append_template_idx(s,iVar5);\n    return 1;\n  }\n  if (tk != tk_integral) {\n    if (tk == tk_char) {\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        *mangled = *mangled + 1;\n      }\n      string_appendn(s,"\'",1);\n      iVar5 = consume_count(mangled);\n      if (0 < iVar5) {\n        tmp[0] = (char)iVar5;\n        tmp[1] = '\0';\n        string_appendn(s,tmp,1);\n        string_appendn(s,"\'",1);\n        return 1;\n      }\n      return 0;\n    }\n    if (tk == tk_bool) {\n      iVar5 = consume_count(mangled);\n      if (iVar5 == 0) {\n        string_appendn(s,"false",5);\n        return 1;\n      }\n      if (iVar5 != 1) {\n        return 0;\n      }\n      string_appendn(s,"true",4);\n      return 1;\n    }\n    if (tk != tk_real) {\n      if (2 < tk - tk_pointer) {\n        return 1;\n      }\n      if (bVar4 != 0x51) {\n        iVar5 = consume_count(mangled);\n        if (iVar5 != -1) {\n          __n = (size_t)iVar5;\n          sVar8 = strlen(*mangled);\n          if ((long)__n <= (long)sVar8) {\n            if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }\n            *mangled = *mangled + __n;\n            return 1;\n          }\n        }\n        return -1;\n      }\nLAB_00321c80:\n      iVar5 = demangle_qualified(work,mangled,s,0,1);\n      return iVar5;\n    }\n    if (bVar4 != 0x45) {\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n      }\n      bVar1 = (byte)_sch_istable[bVar4];\n      while ((bVar1 & 4) != 0) {\n        string_appendn(s,(char *)s_00,1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n        bVar1 = (byte)_sch_istable[bVar4];\n      }\n      if (bVar4 == 0x2e) {\n        pcVar9 = ".";\n        do {\n          string_appendn(s,pcVar9,1);\n          pcVar10 = *mangled;\n          pcVar9 = pcVar10 + 1;\n          *mangled = pcVar9;\n          bVar4 = pcVar10[1];\n        } while ((_sch_istable[bVar4] & 4) != 0);\n      }\n      else {\n        bVar4 = **mangled;\n      }\n      if (bVar4 != 0x65) {\n        return 1;\n      }\n      pcVar9 = "e";\n      do {\n        string_appendn(s,pcVar9,1);\n        pcVar10 = *mangled;\n        pcVar9 = pcVar10 + 1;\n        *mangled = pcVar9;\n      } while ((_sch_istable[(byte)pcVar10[1]] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    iVar5 = demangle_expression(work,mangled,s,tk);\n    return iVar5;\n  }\n  if (bVar4 == 0x45) goto LAB_00321eb0;\n  if ((bVar4 == 0x51) || (bVar4 == 0x4b)) goto LAB_00321c80;\n  if (bVar4 == 0x5f) {\n    if (s_00[1] != 0x6d) {\n      bVar3 = true;\n      bVar2 = false;\n      uVar7 = consume_count_with_underscores(mangled);\n      goto LAB_00321c67;\n    }\n    bVar3 = false;\n    string_appendn(s,"-",1);\n    *mangled = *mangled + 2;\n  }\n  else {\n    bVar3 = true;\n    if (bVar4 == 0x6d) {\n      string_appendn(s,"-",1);\n      *mangled = *mangled + 1;\n    }\n  }\n  bVar2 = true;\n  uVar7 = consume_count(mangled);\nLAB_00321c67:\n  if (uVar7 != 0xffffffff) {\n    sprintf(tmp,"%d",(ulong)uVar7);\n    if (tmp[0] != '\0') {\n      string_append(s,tmp);\n    }\n    if (((9 < (int)uVar7 || bVar2) && (!bVar3)) && (**mangled == '_')) {\n      *mangled = *mangled + 1;\n    }\n    return 1;\n  }\n  return 0;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "bool bVar3;" primitive_type identifier ;) (declaration "byte bVar4;" type_identifier identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "uint uVar7;" type_identifier identifier ;) (declaration "size_t sVar8;" primitive_type identifier ;) (declaration "char *pcVar9;" primitive_type (pointer_declarator "*pcVar9" * identifier) ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "byte *s_00;" type_identifier (pointer_declarator "*s_00" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "char tmp [2];" primitive_type (array_declarator "tmp [2]" identifier [ number_literal ]) ;) (expression_statement "s_00 = (byte *)*mangled;" (assignment_expression "s_00 = (byte *)*mangled" identifier = (cast_expression "(byte *)*mangled" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*mangled" * identifier))) ;) (expression_statement "bVar4 = *s_00;" (assignment_expression "bVar4 = *s_00" identifier = (pointer_expression "*s_00" * identifier)) ;) (if_statement "if (bVar4 == 0x59) {\n    *mangled = (char *)(s_00 + 1);\n    iVar5 = consume_count_with_underscores(mangled);\n    if (iVar5 == -1) {\n      return -1;\n    }\n    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar5)) {\n      return -1;\n    }\n    iVar6 = consume_count_with_underscores(mangled);\n    if (iVar6 == -1) {\n      return -1;\n    }\n    if (work->tmpl_argvec != (char **)0x0) {\n      pcVar9 = work->tmpl_argvec[iVar5];\n      if (pcVar9 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar9 == '\0') {\n        return 1;\n      }\n      string_append(s,pcVar9);\n      return 1;\n    }\n    string_append_template_idx(s,iVar5);\n    return 1;\n  }" if (parenthesized_expression "(bVar4 == 0x59)" ( (binary_expression "bVar4 == 0x59" identifier == number_literal) )) (compound_statement "{\n    *mangled = (char *)(s_00 + 1);\n    iVar5 = consume_count_with_underscores(mangled);\n    if (iVar5 == -1) {\n      return -1;\n    }\n    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar5)) {\n      return -1;\n    }\n    iVar6 = consume_count_with_underscores(mangled);\n    if (iVar6 == -1) {\n      return -1;\n    }\n    if (work->tmpl_argvec != (char **)0x0) {\n      pcVar9 = work->tmpl_argvec[iVar5];\n      if (pcVar9 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar9 == '\0') {\n        return 1;\n      }\n      string_append(s,pcVar9);\n      return 1;\n    }\n    string_append_template_idx(s,iVar5);\n    return 1;\n  }" { (expression_statement "*mangled = (char *)(s_00 + 1);" (assignment_expression "*mangled = (char *)(s_00 + 1)" (pointer_expression "*mangled" * identifier) = (cast_expression "(char *)(s_00 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(s_00 + 1)" ( (binary_expression "s_00 + 1" identifier + number_literal) )))) ;) (expression_statement "iVar5 = consume_count_with_underscores(mangled);" (assignment_expression "iVar5 = consume_count_with_underscores(mangled)" identifier = (call_expression "consume_count_with_underscores(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (if_statement "if (iVar5 == -1) {\n      return -1;\n    }" if (parenthesized_expression "(iVar5 == -1)" ( (binary_expression "iVar5 == -1" identifier == number_literal) )) (compound_statement "{\n      return -1;\n    }" { (return_statement "return -1;" return number_literal ;) })) (if_statement "if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar5)) {\n      return -1;\n    }" if (parenthesized_expression "((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar5))" ( (binary_expression "(work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= iVar5)" (parenthesized_expression "(work->tmpl_argvec != (char **)0x0)" ( (binary_expression "work->tmpl_argvec != (char **)0x0" (field_expression "work->tmpl_argvec" identifier -> field_identifier) != (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) && (parenthesized_expression "(work->ntmpl_args <= iVar5)" ( (binary_expression "work->ntmpl_args <= iVar5" (field_expression "work->ntmpl_args" identifier -> field_identifier) <= identifier) ))) )) (compound_statement "{\n      return -1;\n    }" { (return_statement "return -1;" return number_literal ;) })) (expression_statement "iVar6 = consume_count_with_underscores(mangled);" (assignment_expression "iVar6 = consume_count_with_underscores(mangled)" identifier = (call_expression "consume_count_with_underscores(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (if_statement "if (iVar6 == -1) {\n      return -1;\n    }" if (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) (compound_statement "{\n      return -1;\n    }" { (return_statement "return -1;" return number_literal ;) })) (if_statement "if (work->tmpl_argvec != (char **)0x0) {\n      pcVar9 = work->tmpl_argvec[iVar5];\n      if (pcVar9 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar9 == '\0') {\n        return 1;\n      }\n      string_append(s,pcVar9);\n      return 1;\n    }" if (parenthesized_expression "(work->tmpl_argvec != (char **)0x0)" ( (binary_expression "work->tmpl_argvec != (char **)0x0" (field_expression "work->tmpl_argvec" identifier -> field_identifier) != (cast_expression "(char **)0x0" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) number_literal)) )) (compound_statement "{\n      pcVar9 = work->tmpl_argvec[iVar5];\n      if (pcVar9 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar9 == '\0') {\n        return 1;\n      }\n      string_append(s,pcVar9);\n      return 1;\n    }" { (expression_statement "pcVar9 = work->tmpl_argvec[iVar5];" (assignment_expression "pcVar9 = work->tmpl_argvec[iVar5]" identifier = (subscript_expression "work->tmpl_argvec[iVar5]" (field_expression "work->tmpl_argvec" identifier -> field_identifier) [ identifier ])) ;) (if_statement "if (pcVar9 == (char *)0x0) {\n        return 1;\n      }" if (parenthesized_expression "(pcVar9 == (char *)0x0)" ( (binary_expression "pcVar9 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (*pcVar9 == '\0') {\n        return 1;\n      }" if (parenthesized_expression "(*pcVar9 == '\0')" ( (binary_expression "*pcVar9 == '\0'" (pointer_expression "*pcVar9" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "string_append(s,pcVar9);" (call_expression "string_append(s,pcVar9)" identifier (argument_list "(s,pcVar9)" ( identifier , identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (expression_statement "string_append_template_idx(s,iVar5);" (call_expression "string_append_template_idx(s,iVar5)" identifier (argument_list "(s,iVar5)" ( identifier , identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (if_statement "if (tk != tk_integral) {\n    if (tk == tk_char) {\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        *mangled = *mangled + 1;\n      }\n      string_appendn(s,"\'",1);\n      iVar5 = consume_count(mangled);\n      if (0 < iVar5) {\n        tmp[0] = (char)iVar5;\n        tmp[1] = '\0';\n        string_appendn(s,tmp,1);\n        string_appendn(s,"\'",1);\n        return 1;\n      }\n      return 0;\n    }\n    if (tk == tk_bool) {\n      iVar5 = consume_count(mangled);\n      if (iVar5 == 0) {\n        string_appendn(s,"false",5);\n        return 1;\n      }\n      if (iVar5 != 1) {\n        return 0;\n      }\n      string_appendn(s,"true",4);\n      return 1;\n    }\n    if (tk != tk_real) {\n      if (2 < tk - tk_pointer) {\n        return 1;\n      }\n      if (bVar4 != 0x51) {\n        iVar5 = consume_count(mangled);\n        if (iVar5 != -1) {\n          __n = (size_t)iVar5;\n          sVar8 = strlen(*mangled);\n          if ((long)__n <= (long)sVar8) {\n            if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }\n            *mangled = *mangled + __n;\n            return 1;\n          }\n        }\n        return -1;\n      }\nLAB_00321c80:\n      iVar5 = demangle_qualified(work,mangled,s,0,1);\n      return iVar5;\n    }\n    if (bVar4 != 0x45) {\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n      }\n      bVar1 = (byte)_sch_istable[bVar4];\n      while ((bVar1 & 4) != 0) {\n        string_appendn(s,(char *)s_00,1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n        bVar1 = (byte)_sch_istable[bVar4];\n      }\n      if (bVar4 == 0x2e) {\n        pcVar9 = ".";\n        do {\n          string_appendn(s,pcVar9,1);\n          pcVar10 = *mangled;\n          pcVar9 = pcVar10 + 1;\n          *mangled = pcVar9;\n          bVar4 = pcVar10[1];\n        } while ((_sch_istable[bVar4] & 4) != 0);\n      }\n      else {\n        bVar4 = **mangled;\n      }\n      if (bVar4 != 0x65) {\n        return 1;\n      }\n      pcVar9 = "e";\n      do {\n        string_appendn(s,pcVar9,1);\n        pcVar10 = *mangled;\n        pcVar9 = pcVar10 + 1;\n        *mangled = pcVar9;\n      } while ((_sch_istable[(byte)pcVar10[1]] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    iVar5 = demangle_expression(work,mangled,s,tk);\n    return iVar5;\n  }" if (parenthesized_expression "(tk != tk_integral)" ( (binary_expression "tk != tk_integral" identifier != identifier) )) (compound_statement "{\n    if (tk == tk_char) {\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        *mangled = *mangled + 1;\n      }\n      string_appendn(s,"\'",1);\n      iVar5 = consume_count(mangled);\n      if (0 < iVar5) {\n        tmp[0] = (char)iVar5;\n        tmp[1] = '\0';\n        string_appendn(s,tmp,1);\n        string_appendn(s,"\'",1);\n        return 1;\n      }\n      return 0;\n    }\n    if (tk == tk_bool) {\n      iVar5 = consume_count(mangled);\n      if (iVar5 == 0) {\n        string_appendn(s,"false",5);\n        return 1;\n      }\n      if (iVar5 != 1) {\n        return 0;\n      }\n      string_appendn(s,"true",4);\n      return 1;\n    }\n    if (tk != tk_real) {\n      if (2 < tk - tk_pointer) {\n        return 1;\n      }\n      if (bVar4 != 0x51) {\n        iVar5 = consume_count(mangled);\n        if (iVar5 != -1) {\n          __n = (size_t)iVar5;\n          sVar8 = strlen(*mangled);\n          if ((long)__n <= (long)sVar8) {\n            if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }\n            *mangled = *mangled + __n;\n            return 1;\n          }\n        }\n        return -1;\n      }\nLAB_00321c80:\n      iVar5 = demangle_qualified(work,mangled,s,0,1);\n      return iVar5;\n    }\n    if (bVar4 != 0x45) {\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n      }\n      bVar1 = (byte)_sch_istable[bVar4];\n      while ((bVar1 & 4) != 0) {\n        string_appendn(s,(char *)s_00,1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n        bVar1 = (byte)_sch_istable[bVar4];\n      }\n      if (bVar4 == 0x2e) {\n        pcVar9 = ".";\n        do {\n          string_appendn(s,pcVar9,1);\n          pcVar10 = *mangled;\n          pcVar9 = pcVar10 + 1;\n          *mangled = pcVar9;\n          bVar4 = pcVar10[1];\n        } while ((_sch_istable[bVar4] & 4) != 0);\n      }\n      else {\n        bVar4 = **mangled;\n      }\n      if (bVar4 != 0x65) {\n        return 1;\n      }\n      pcVar9 = "e";\n      do {\n        string_appendn(s,pcVar9,1);\n        pcVar10 = *mangled;\n        pcVar9 = pcVar10 + 1;\n        *mangled = pcVar9;\n      } while ((_sch_istable[(byte)pcVar10[1]] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    iVar5 = demangle_expression(work,mangled,s,tk);\n    return iVar5;\n  }" { (if_statement "if (tk == tk_char) {\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        *mangled = *mangled + 1;\n      }\n      string_appendn(s,"\'",1);\n      iVar5 = consume_count(mangled);\n      if (0 < iVar5) {\n        tmp[0] = (char)iVar5;\n        tmp[1] = '\0';\n        string_appendn(s,tmp,1);\n        string_appendn(s,"\'",1);\n        return 1;\n      }\n      return 0;\n    }" if (parenthesized_expression "(tk == tk_char)" ( (binary_expression "tk == tk_char" identifier == identifier) )) (compound_statement "{\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        *mangled = *mangled + 1;\n      }\n      string_appendn(s,"\'",1);\n      iVar5 = consume_count(mangled);\n      if (0 < iVar5) {\n        tmp[0] = (char)iVar5;\n        tmp[1] = '\0';\n        string_appendn(s,tmp,1);\n        string_appendn(s,"\'",1);\n        return 1;\n      }\n      return 0;\n    }" { (if_statement "if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        *mangled = *mangled + 1;\n      }" if (parenthesized_expression "(bVar4 == 0x6d)" ( (binary_expression "bVar4 == 0x6d" identifier == number_literal) )) (compound_statement "{\n        string_appendn(s,"-",1);\n        *mangled = *mangled + 1;\n      }" { (expression_statement "string_appendn(s,"-",1);" (call_expression "string_appendn(s,"-",1)" identifier (argument_list "(s,"-",1)" ( identifier , (string_literal ""-"" " string_content ") , number_literal ))) ;) (expression_statement "*mangled = *mangled + 1;" (assignment_expression "*mangled = *mangled + 1" (pointer_expression "*mangled" * identifier) = (binary_expression "*mangled + 1" (pointer_expression "*mangled" * identifier) + number_literal)) ;) })) (expression_statement "string_appendn(s,"\'",1);" (call_expression "string_appendn(s,"\'",1)" identifier (argument_list "(s,"\'",1)" ( identifier , (string_literal ""\'"" " escape_sequence ") , number_literal ))) ;) (expression_statement "iVar5 = consume_count(mangled);" (assignment_expression "iVar5 = consume_count(mangled)" identifier = (call_expression "consume_count(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (if_statement "if (0 < iVar5) {\n        tmp[0] = (char)iVar5;\n        tmp[1] = '\0';\n        string_appendn(s,tmp,1);\n        string_appendn(s,"\'",1);\n        return 1;\n      }" if (parenthesized_expression "(0 < iVar5)" ( (binary_expression "0 < iVar5" number_literal < identifier) )) (compound_statement "{\n        tmp[0] = (char)iVar5;\n        tmp[1] = '\0';\n        string_appendn(s,tmp,1);\n        string_appendn(s,"\'",1);\n        return 1;\n      }" { (expression_statement "tmp[0] = (char)iVar5;" (assignment_expression "tmp[0] = (char)iVar5" (subscript_expression "tmp[0]" identifier [ number_literal ]) = (cast_expression "(char)iVar5" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "tmp[1] = '\0';" (assignment_expression "tmp[1] = '\0'" (subscript_expression "tmp[1]" identifier [ number_literal ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "string_appendn(s,tmp,1);" (call_expression "string_appendn(s,tmp,1)" identifier (argument_list "(s,tmp,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "string_appendn(s,"\'",1);" (call_expression "string_appendn(s,"\'",1)" identifier (argument_list "(s,"\'",1)" ( identifier , (string_literal ""\'"" " escape_sequence ") , number_literal ))) ;) (return_statement "return 1;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (tk == tk_bool) {\n      iVar5 = consume_count(mangled);\n      if (iVar5 == 0) {\n        string_appendn(s,"false",5);\n        return 1;\n      }\n      if (iVar5 != 1) {\n        return 0;\n      }\n      string_appendn(s,"true",4);\n      return 1;\n    }" if (parenthesized_expression "(tk == tk_bool)" ( (binary_expression "tk == tk_bool" identifier == identifier) )) (compound_statement "{\n      iVar5 = consume_count(mangled);\n      if (iVar5 == 0) {\n        string_appendn(s,"false",5);\n        return 1;\n      }\n      if (iVar5 != 1) {\n        return 0;\n      }\n      string_appendn(s,"true",4);\n      return 1;\n    }" { (expression_statement "iVar5 = consume_count(mangled);" (assignment_expression "iVar5 = consume_count(mangled)" identifier = (call_expression "consume_count(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (if_statement "if (iVar5 == 0) {\n        string_appendn(s,"false",5);\n        return 1;\n      }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n        string_appendn(s,"false",5);\n        return 1;\n      }" { (expression_statement "string_appendn(s,"false",5);" (call_expression "string_appendn(s,"false",5)" identifier (argument_list "(s,"false",5)" ( identifier , (string_literal ""false"" " string_content ") , number_literal ))) ;) (return_statement "return 1;" return number_literal ;) })) (if_statement "if (iVar5 != 1) {\n        return 0;\n      }" if (parenthesized_expression "(iVar5 != 1)" ( (binary_expression "iVar5 != 1" identifier != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "string_appendn(s,"true",4);" (call_expression "string_appendn(s,"true",4)" identifier (argument_list "(s,"true",4)" ( identifier , (string_literal ""true"" " string_content ") , number_literal ))) ;) (return_statement "return 1;" return number_literal ;) })) (if_statement "if (tk != tk_real) {\n      if (2 < tk - tk_pointer) {\n        return 1;\n      }\n      if (bVar4 != 0x51) {\n        iVar5 = consume_count(mangled);\n        if (iVar5 != -1) {\n          __n = (size_t)iVar5;\n          sVar8 = strlen(*mangled);\n          if ((long)__n <= (long)sVar8) {\n            if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }\n            *mangled = *mangled + __n;\n            return 1;\n          }\n        }\n        return -1;\n      }\nLAB_00321c80:\n      iVar5 = demangle_qualified(work,mangled,s,0,1);\n      return iVar5;\n    }" if (parenthesized_expression "(tk != tk_real)" ( (binary_expression "tk != tk_real" identifier != identifier) )) (compound_statement "{\n      if (2 < tk - tk_pointer) {\n        return 1;\n      }\n      if (bVar4 != 0x51) {\n        iVar5 = consume_count(mangled);\n        if (iVar5 != -1) {\n          __n = (size_t)iVar5;\n          sVar8 = strlen(*mangled);\n          if ((long)__n <= (long)sVar8) {\n            if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }\n            *mangled = *mangled + __n;\n            return 1;\n          }\n        }\n        return -1;\n      }\nLAB_00321c80:\n      iVar5 = demangle_qualified(work,mangled,s,0,1);\n      return iVar5;\n    }" { (if_statement "if (2 < tk - tk_pointer) {\n        return 1;\n      }" if (parenthesized_expression "(2 < tk - tk_pointer)" ( (binary_expression "2 < tk - tk_pointer" number_literal < (binary_expression "tk - tk_pointer" identifier - identifier)) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (bVar4 != 0x51) {\n        iVar5 = consume_count(mangled);\n        if (iVar5 != -1) {\n          __n = (size_t)iVar5;\n          sVar8 = strlen(*mangled);\n          if ((long)__n <= (long)sVar8) {\n            if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }\n            *mangled = *mangled + __n;\n            return 1;\n          }\n        }\n        return -1;\n      }" if (parenthesized_expression "(bVar4 != 0x51)" ( (binary_expression "bVar4 != 0x51" identifier != number_literal) )) (compound_statement "{\n        iVar5 = consume_count(mangled);\n        if (iVar5 != -1) {\n          __n = (size_t)iVar5;\n          sVar8 = strlen(*mangled);\n          if ((long)__n <= (long)sVar8) {\n            if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }\n            *mangled = *mangled + __n;\n            return 1;\n          }\n        }\n        return -1;\n      }" { (expression_statement "iVar5 = consume_count(mangled);" (assignment_expression "iVar5 = consume_count(mangled)" identifier = (call_expression "consume_count(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (if_statement "if (iVar5 != -1) {\n          __n = (size_t)iVar5;\n          sVar8 = strlen(*mangled);\n          if ((long)__n <= (long)sVar8) {\n            if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }\n            *mangled = *mangled + __n;\n            return 1;\n          }\n        }" if (parenthesized_expression "(iVar5 != -1)" ( (binary_expression "iVar5 != -1" identifier != number_literal) )) (compound_statement "{\n          __n = (size_t)iVar5;\n          sVar8 = strlen(*mangled);\n          if ((long)__n <= (long)sVar8) {\n            if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }\n            *mangled = *mangled + __n;\n            return 1;\n          }\n        }" { (expression_statement "__n = (size_t)iVar5;" (assignment_expression "__n = (size_t)iVar5" identifier = (cast_expression "(size_t)iVar5" ( (type_descriptor "size_t" primitive_type) ) identifier)) ;) (expression_statement "sVar8 = strlen(*mangled);" (assignment_expression "sVar8 = strlen(*mangled)" identifier = (call_expression "strlen(*mangled)" identifier (argument_list "(*mangled)" ( (pointer_expression "*mangled" * identifier) )))) ;) (if_statement "if ((long)__n <= (long)sVar8) {\n            if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }\n            *mangled = *mangled + __n;\n            return 1;\n          }" if (parenthesized_expression "((long)__n <= (long)sVar8)" ( (binary_expression "(long)__n <= (long)sVar8" (cast_expression "(long)__n" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) <= (cast_expression "(long)sVar8" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) (compound_statement "{\n            if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }\n            *mangled = *mangled + __n;\n            return 1;\n          }" { (if_statement "if (iVar5 == 0) {\n              string_appendn(s,"0",1);\n            }\n            else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }" if (parenthesized_expression "(iVar5 == 0)" ( (binary_expression "iVar5 == 0" identifier == number_literal) )) (compound_statement "{\n              string_appendn(s,"0",1);\n            }" { (expression_statement "string_appendn(s,"0",1);" (call_expression "string_appendn(s,"0",1)" identifier (argument_list "(s,"0",1)" ( identifier , (string_literal ""0"" " string_content ") , number_literal ))) ;) }) (else_clause "else {\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }" else (compound_statement "{\n              pcVar9 = (char *)xmalloc((long)(iVar5 + 1));\n              strncpy(pcVar9,*mangled,__n);\n              pcVar9[__n] = '\0';\n              pcVar10 = cplus_demangle(pcVar9,work->options);\n              if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }\n              if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }\n              free(pcVar9);\n            }" { (expression_statement "pcVar9 = (char *)xmalloc((long)(iVar5 + 1));" (assignment_expression "pcVar9 = (char *)xmalloc((long)(iVar5 + 1))" identifier = (cast_expression "(char *)xmalloc((long)(iVar5 + 1))" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "xmalloc((long)(iVar5 + 1))" identifier (argument_list "((long)(iVar5 + 1))" ( (cast_expression "(long)(iVar5 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(iVar5 + 1)" ( (binary_expression "iVar5 + 1" identifier + number_literal) ))) ))))) ;) (expression_statement "strncpy(pcVar9,*mangled,__n);" (call_expression "strncpy(pcVar9,*mangled,__n)" identifier (argument_list "(pcVar9,*mangled,__n)" ( identifier , (pointer_expression "*mangled" * identifier) , identifier ))) ;) (expression_statement "pcVar9[__n] = '\0';" (assignment_expression "pcVar9[__n] = '\0'" (subscript_expression "pcVar9[__n]" identifier [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "pcVar10 = cplus_demangle(pcVar9,work->options);" (assignment_expression "pcVar10 = cplus_demangle(pcVar9,work->options)" identifier = (call_expression "cplus_demangle(pcVar9,work->options)" identifier (argument_list "(pcVar9,work->options)" ( identifier , (field_expression "work->options" identifier -> field_identifier) )))) ;) (if_statement "if (tk == tk_pointer) {\n                string_appendn(s,"&",1);\n              }" if (parenthesized_expression "(tk == tk_pointer)" ( (binary_expression "tk == tk_pointer" identifier == identifier) )) (compound_statement "{\n                string_appendn(s,"&",1);\n              }" { (expression_statement "string_appendn(s,"&",1);" (call_expression "string_appendn(s,"&",1)" identifier (argument_list "(s,"&",1)" ( identifier , (string_literal ""&"" " string_content ") , number_literal ))) ;) })) (if_statement "if (pcVar10 == (char *)0x0) {\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }\n              else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }" if (parenthesized_expression "(pcVar10 == (char *)0x0)" ( (binary_expression "pcVar10 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }\n              }" { (if_statement "if (*pcVar9 != '\0') {\n                  string_append(s,pcVar9);\n                }" if (parenthesized_expression "(*pcVar9 != '\0')" ( (binary_expression "*pcVar9 != '\0'" (pointer_expression "*pcVar9" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                  string_append(s,pcVar9);\n                }" { (expression_statement "string_append(s,pcVar9);" (call_expression "string_append(s,pcVar9)" identifier (argument_list "(s,pcVar9)" ( identifier , identifier ))) ;) })) }) (else_clause "else {\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }" else (compound_statement "{\n                if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }\n                free(pcVar10);\n              }" { (if_statement "if (*pcVar10 != '\0') {\n                  string_append(s,pcVar10);\n                }" if (parenthesized_expression "(*pcVar10 != '\0')" ( (binary_expression "*pcVar10 != '\0'" (pointer_expression "*pcVar10" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                  string_append(s,pcVar10);\n                }" { (expression_statement "string_append(s,pcVar10);" (call_expression "string_append(s,pcVar10)" identifier (argument_list "(s,pcVar10)" ( identifier , identifier ))) ;) })) (expression_statement "free(pcVar10);" (call_expression "free(pcVar10)" identifier (argument_list "(pcVar10)" ( identifier ))) ;) }))) (expression_statement "free(pcVar9);" (call_expression "free(pcVar9)" identifier (argument_list "(pcVar9)" ( identifier ))) ;) }))) (expression_statement "*mangled = *mangled + __n;" (assignment_expression "*mangled = *mangled + __n" (pointer_expression "*mangled" * identifier) = (binary_expression "*mangled + __n" (pointer_expression "*mangled" * identifier) + identifier)) ;) (return_statement "return 1;" return number_literal ;) })) })) (return_statement "return -1;" return number_literal ;) })) (labeled_statement "LAB_00321c80:\n      iVar5 = demangle_qualified(work,mangled,s,0,1);" statement_identifier : (expression_statement "iVar5 = demangle_qualified(work,mangled,s,0,1);" (assignment_expression "iVar5 = demangle_qualified(work,mangled,s,0,1)" identifier = (call_expression "demangle_qualified(work,mangled,s,0,1)" identifier (argument_list "(work,mangled,s,0,1)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;)) (return_statement "return iVar5;" return identifier ;) })) (if_statement "if (bVar4 != 0x45) {\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n      }\n      bVar1 = (byte)_sch_istable[bVar4];\n      while ((bVar1 & 4) != 0) {\n        string_appendn(s,(char *)s_00,1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n        bVar1 = (byte)_sch_istable[bVar4];\n      }\n      if (bVar4 == 0x2e) {\n        pcVar9 = ".";\n        do {\n          string_appendn(s,pcVar9,1);\n          pcVar10 = *mangled;\n          pcVar9 = pcVar10 + 1;\n          *mangled = pcVar9;\n          bVar4 = pcVar10[1];\n        } while ((_sch_istable[bVar4] & 4) != 0);\n      }\n      else {\n        bVar4 = **mangled;\n      }\n      if (bVar4 != 0x65) {\n        return 1;\n      }\n      pcVar9 = "e";\n      do {\n        string_appendn(s,pcVar9,1);\n        pcVar10 = *mangled;\n        pcVar9 = pcVar10 + 1;\n        *mangled = pcVar9;\n      } while ((_sch_istable[(byte)pcVar10[1]] & 4) != 0);\n      return 1;\n    }" if (parenthesized_expression "(bVar4 != 0x45)" ( (binary_expression "bVar4 != 0x45" identifier != number_literal) )) (compound_statement "{\n      if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n      }\n      bVar1 = (byte)_sch_istable[bVar4];\n      while ((bVar1 & 4) != 0) {\n        string_appendn(s,(char *)s_00,1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n        bVar1 = (byte)_sch_istable[bVar4];\n      }\n      if (bVar4 == 0x2e) {\n        pcVar9 = ".";\n        do {\n          string_appendn(s,pcVar9,1);\n          pcVar10 = *mangled;\n          pcVar9 = pcVar10 + 1;\n          *mangled = pcVar9;\n          bVar4 = pcVar10[1];\n        } while ((_sch_istable[bVar4] & 4) != 0);\n      }\n      else {\n        bVar4 = **mangled;\n      }\n      if (bVar4 != 0x65) {\n        return 1;\n      }\n      pcVar9 = "e";\n      do {\n        string_appendn(s,pcVar9,1);\n        pcVar10 = *mangled;\n        pcVar9 = pcVar10 + 1;\n        *mangled = pcVar9;\n      } while ((_sch_istable[(byte)pcVar10[1]] & 4) != 0);\n      return 1;\n    }" { (if_statement "if (bVar4 == 0x6d) {\n        string_appendn(s,"-",1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n      }" if (parenthesized_expression "(bVar4 == 0x6d)" ( (binary_expression "bVar4 == 0x6d" identifier == number_literal) )) (compound_statement "{\n        string_appendn(s,"-",1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n      }" { (expression_statement "string_appendn(s,"-",1);" (call_expression "string_appendn(s,"-",1)" identifier (argument_list "(s,"-",1)" ( identifier , (string_literal ""-"" " string_content ") , number_literal ))) ;) (expression_statement "pcVar9 = *mangled;" (assignment_expression "pcVar9 = *mangled" identifier = (pointer_expression "*mangled" * identifier)) ;) (expression_statement "s_00 = (byte *)(pcVar9 + 1);" (assignment_expression "s_00 = (byte *)(pcVar9 + 1)" identifier = (cast_expression "(byte *)(pcVar9 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar9 + 1)" ( (binary_expression "pcVar9 + 1" identifier + number_literal) )))) ;) (expression_statement "*mangled = (char *)s_00;" (assignment_expression "*mangled = (char *)s_00" (pointer_expression "*mangled" * identifier) = (cast_expression "(char *)s_00" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "bVar4 = pcVar9[1];" (assignment_expression "bVar4 = pcVar9[1]" identifier = (subscript_expression "pcVar9[1]" identifier [ number_literal ])) ;) })) (expression_statement "bVar1 = (byte)_sch_istable[bVar4];" (assignment_expression "bVar1 = (byte)_sch_istable[bVar4]" identifier = (cast_expression "(byte)_sch_istable[bVar4]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "_sch_istable[bVar4]" identifier [ identifier ]))) ;) (while_statement "while ((bVar1 & 4) != 0) {\n        string_appendn(s,(char *)s_00,1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n        bVar1 = (byte)_sch_istable[bVar4];\n      }" while (parenthesized_expression "((bVar1 & 4) != 0)" ( (binary_expression "(bVar1 & 4) != 0" (parenthesized_expression "(bVar1 & 4)" ( (binary_expression "bVar1 & 4" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        string_appendn(s,(char *)s_00,1);\n        pcVar9 = *mangled;\n        s_00 = (byte *)(pcVar9 + 1);\n        *mangled = (char *)s_00;\n        bVar4 = pcVar9[1];\n        bVar1 = (byte)_sch_istable[bVar4];\n      }" { (expression_statement "string_appendn(s,(char *)s_00,1);" (call_expression "string_appendn(s,(char *)s_00,1)" identifier (argument_list "(s,(char *)s_00,1)" ( identifier , (cast_expression "(char *)s_00" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , number_literal ))) ;) (expression_statement "pcVar9 = *mangled;" (assignment_expression "pcVar9 = *mangled" identifier = (pointer_expression "*mangled" * identifier)) ;) (expression_statement "s_00 = (byte *)(pcVar9 + 1);" (assignment_expression "s_00 = (byte *)(pcVar9 + 1)" identifier = (cast_expression "(byte *)(pcVar9 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar9 + 1)" ( (binary_expression "pcVar9 + 1" identifier + number_literal) )))) ;) (expression_statement "*mangled = (char *)s_00;" (assignment_expression "*mangled = (char *)s_00" (pointer_expression "*mangled" * identifier) = (cast_expression "(char *)s_00" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (expression_statement "bVar4 = pcVar9[1];" (assignment_expression "bVar4 = pcVar9[1]" identifier = (subscript_expression "pcVar9[1]" identifier [ number_literal ])) ;) (expression_statement "bVar1 = (byte)_sch_istable[bVar4];" (assignment_expression "bVar1 = (byte)_sch_istable[bVar4]" identifier = (cast_expression "(byte)_sch_istable[bVar4]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "_sch_istable[bVar4]" identifier [ identifier ]))) ;) })) (if_statement "if (bVar4 == 0x2e) {\n        pcVar9 = ".";\n        do {\n          string_appendn(s,pcVar9,1);\n          pcVar10 = *mangled;\n          pcVar9 = pcVar10 + 1;\n          *mangled = pcVar9;\n          bVar4 = pcVar10[1];\n        } while ((_sch_istable[bVar4] & 4) != 0);\n      }\n      else {\n        bVar4 = **mangled;\n      }" if (parenthesized_expression "(bVar4 == 0x2e)" ( (binary_expression "bVar4 == 0x2e" identifier == number_literal) )) (compound_statement "{\n        pcVar9 = ".";\n        do {\n          string_appendn(s,pcVar9,1);\n          pcVar10 = *mangled;\n          pcVar9 = pcVar10 + 1;\n          *mangled = pcVar9;\n          bVar4 = pcVar10[1];\n        } while ((_sch_istable[bVar4] & 4) != 0);\n      }" { (expression_statement "pcVar9 = ".";" (assignment_expression "pcVar9 = "."" identifier = (string_literal ""."" " string_content ")) ;) (do_statement "do {\n          string_appendn(s,pcVar9,1);\n          pcVar10 = *mangled;\n          pcVar9 = pcVar10 + 1;\n          *mangled = pcVar9;\n          bVar4 = pcVar10[1];\n        } while ((_sch_istable[bVar4] & 4) != 0);" do (compound_statement "{\n          string_appendn(s,pcVar9,1);\n          pcVar10 = *mangled;\n          pcVar9 = pcVar10 + 1;\n          *mangled = pcVar9;\n          bVar4 = pcVar10[1];\n        }" { (expression_statement "string_appendn(s,pcVar9,1);" (call_expression "string_appendn(s,pcVar9,1)" identifier (argument_list "(s,pcVar9,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "pcVar10 = *mangled;" (assignment_expression "pcVar10 = *mangled" identifier = (pointer_expression "*mangled" * identifier)) ;) (expression_statement "pcVar9 = pcVar10 + 1;" (assignment_expression "pcVar9 = pcVar10 + 1" identifier = (binary_expression "pcVar10 + 1" identifier + number_literal)) ;) (expression_statement "*mangled = pcVar9;" (assignment_expression "*mangled = pcVar9" (pointer_expression "*mangled" * identifier) = identifier) ;) (expression_statement "bVar4 = pcVar10[1];" (assignment_expression "bVar4 = pcVar10[1]" identifier = (subscript_expression "pcVar10[1]" identifier [ number_literal ])) ;) }) while (parenthesized_expression "((_sch_istable[bVar4] & 4) != 0)" ( (binary_expression "(_sch_istable[bVar4] & 4) != 0" (parenthesized_expression "(_sch_istable[bVar4] & 4)" ( (binary_expression "_sch_istable[bVar4] & 4" (subscript_expression "_sch_istable[bVar4]" identifier [ identifier ]) & number_literal) )) != number_literal) )) ;) }) (else_clause "else {\n        bVar4 = **mangled;\n      }" else (compound_statement "{\n        bVar4 = **mangled;\n      }" { (expression_statement "bVar4 = **mangled;" (assignment_expression "bVar4 = **mangled" identifier = (pointer_expression "**mangled" * (pointer_expression "*mangled" * identifier))) ;) }))) (if_statement "if (bVar4 != 0x65) {\n        return 1;\n      }" if (parenthesized_expression "(bVar4 != 0x65)" ( (binary_expression "bVar4 != 0x65" identifier != number_literal) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "pcVar9 = "e";" (assignment_expression "pcVar9 = "e"" identifier = (string_literal ""e"" " string_content ")) ;) (do_statement "do {\n        string_appendn(s,pcVar9,1);\n        pcVar10 = *mangled;\n        pcVar9 = pcVar10 + 1;\n        *mangled = pcVar9;\n      } while ((_sch_istable[(byte)pcVar10[1]] & 4) != 0);" do (compound_statement "{\n        string_appendn(s,pcVar9,1);\n        pcVar10 = *mangled;\n        pcVar9 = pcVar10 + 1;\n        *mangled = pcVar9;\n      }" { (expression_statement "string_appendn(s,pcVar9,1);" (call_expression "string_appendn(s,pcVar9,1)" identifier (argument_list "(s,pcVar9,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "pcVar10 = *mangled;" (assignment_expression "pcVar10 = *mangled" identifier = (pointer_expression "*mangled" * identifier)) ;) (expression_statement "pcVar9 = pcVar10 + 1;" (assignment_expression "pcVar9 = pcVar10 + 1" identifier = (binary_expression "pcVar10 + 1" identifier + number_literal)) ;) (expression_statement "*mangled = pcVar9;" (assignment_expression "*mangled = pcVar9" (pointer_expression "*mangled" * identifier) = identifier) ;) }) while (parenthesized_expression "((_sch_istable[(byte)pcVar10[1]] & 4) != 0)" ( (binary_expression "(_sch_istable[(byte)pcVar10[1]] & 4) != 0" (parenthesized_expression "(_sch_istable[(byte)pcVar10[1]] & 4)" ( (binary_expression "_sch_istable[(byte)pcVar10[1]] & 4" (subscript_expression "_sch_istable[(byte)pcVar10[1]]" identifier [ (cast_expression "(byte)pcVar10[1]" ( (type_descriptor "byte" type_identifier) ) (subscript_expression "pcVar10[1]" identifier [ number_literal ])) ]) & number_literal) )) != number_literal) )) ;) (return_statement "return 1;" return number_literal ;) })) (labeled_statement "LAB_00321eb0:\n    iVar5 = demangle_expression(work,mangled,s,tk);" statement_identifier : (expression_statement "iVar5 = demangle_expression(work,mangled,s,tk);" (assignment_expression "iVar5 = demangle_expression(work,mangled,s,tk)" identifier = (call_expression "demangle_expression(work,mangled,s,tk)" identifier (argument_list "(work,mangled,s,tk)" ( identifier , identifier , identifier , identifier )))) ;)) (return_statement "return iVar5;" return identifier ;) })) (if_statement "if (bVar4 == 0x45) goto LAB_00321eb0;" if (parenthesized_expression "(bVar4 == 0x45)" ( (binary_expression "bVar4 == 0x45" identifier == number_literal) )) (goto_statement "goto LAB_00321eb0;" goto statement_identifier ;)) (if_statement "if ((bVar4 == 0x51) || (bVar4 == 0x4b)) goto LAB_00321c80;" if (parenthesized_expression "((bVar4 == 0x51) || (bVar4 == 0x4b))" ( (binary_expression "(bVar4 == 0x51) || (bVar4 == 0x4b)" (parenthesized_expression "(bVar4 == 0x51)" ( (binary_expression "bVar4 == 0x51" identifier == number_literal) )) || (parenthesized_expression "(bVar4 == 0x4b)" ( (binary_expression "bVar4 == 0x4b" identifier == number_literal) ))) )) (goto_statement "goto LAB_00321c80;" goto statement_identifier ;)) (if_statement "if (bVar4 == 0x5f) {\n    if (s_00[1] != 0x6d) {\n      bVar3 = true;\n      bVar2 = false;\n      uVar7 = consume_count_with_underscores(mangled);\n      goto LAB_00321c67;\n    }\n    bVar3 = false;\n    string_appendn(s,"-",1);\n    *mangled = *mangled + 2;\n  }\n  else {\n    bVar3 = true;\n    if (bVar4 == 0x6d) {\n      string_appendn(s,"-",1);\n      *mangled = *mangled + 1;\n    }\n  }" if (parenthesized_expression "(bVar4 == 0x5f)" ( (binary_expression "bVar4 == 0x5f" identifier == number_literal) )) (compound_statement "{\n    if (s_00[1] != 0x6d) {\n      bVar3 = true;\n      bVar2 = false;\n      uVar7 = consume_count_with_underscores(mangled);\n      goto LAB_00321c67;\n    }\n    bVar3 = false;\n    string_appendn(s,"-",1);\n    *mangled = *mangled + 2;\n  }" { (if_statement "if (s_00[1] != 0x6d) {\n      bVar3 = true;\n      bVar2 = false;\n      uVar7 = consume_count_with_underscores(mangled);\n      goto LAB_00321c67;\n    }" if (parenthesized_expression "(s_00[1] != 0x6d)" ( (binary_expression "s_00[1] != 0x6d" (subscript_expression "s_00[1]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      bVar3 = true;\n      bVar2 = false;\n      uVar7 = consume_count_with_underscores(mangled);\n      goto LAB_00321c67;\n    }" { (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" identifier = true) ;) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "uVar7 = consume_count_with_underscores(mangled);" (assignment_expression "uVar7 = consume_count_with_underscores(mangled)" identifier = (call_expression "consume_count_with_underscores(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (goto_statement "goto LAB_00321c67;" goto statement_identifier ;) })) (expression_statement "bVar3 = false;" (assignment_expression "bVar3 = false" identifier = false) ;) (expression_statement "string_appendn(s,"-",1);" (call_expression "string_appendn(s,"-",1)" identifier (argument_list "(s,"-",1)" ( identifier , (string_literal ""-"" " string_content ") , number_literal ))) ;) (expression_statement "*mangled = *mangled + 2;" (assignment_expression "*mangled = *mangled + 2" (pointer_expression "*mangled" * identifier) = (binary_expression "*mangled + 2" (pointer_expression "*mangled" * identifier) + number_literal)) ;) }) (else_clause "else {\n    bVar3 = true;\n    if (bVar4 == 0x6d) {\n      string_appendn(s,"-",1);\n      *mangled = *mangled + 1;\n    }\n  }" else (compound_statement "{\n    bVar3 = true;\n    if (bVar4 == 0x6d) {\n      string_appendn(s,"-",1);\n      *mangled = *mangled + 1;\n    }\n  }" { (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" identifier = true) ;) (if_statement "if (bVar4 == 0x6d) {\n      string_appendn(s,"-",1);\n      *mangled = *mangled + 1;\n    }" if (parenthesized_expression "(bVar4 == 0x6d)" ( (binary_expression "bVar4 == 0x6d" identifier == number_literal) )) (compound_statement "{\n      string_appendn(s,"-",1);\n      *mangled = *mangled + 1;\n    }" { (expression_statement "string_appendn(s,"-",1);" (call_expression "string_appendn(s,"-",1)" identifier (argument_list "(s,"-",1)" ( identifier , (string_literal ""-"" " string_content ") , number_literal ))) ;) (expression_statement "*mangled = *mangled + 1;" (assignment_expression "*mangled = *mangled + 1" (pointer_expression "*mangled" * identifier) = (binary_expression "*mangled + 1" (pointer_expression "*mangled" * identifier) + number_literal)) ;) })) }))) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) (expression_statement "uVar7 = consume_count(mangled);" (assignment_expression "uVar7 = consume_count(mangled)" identifier = (call_expression "consume_count(mangled)" identifier (argument_list "(mangled)" ( identifier )))) ;) (labeled_statement "LAB_00321c67:\n  if (uVar7 != 0xffffffff) {\n    sprintf(tmp,"%d",(ulong)uVar7);\n    if (tmp[0] != '\0') {\n      string_append(s,tmp);\n    }\n    if (((9 < (int)uVar7 || bVar2) && (!bVar3)) && (**mangled == '_')) {\n      *mangled = *mangled + 1;\n    }\n    return 1;\n  }" statement_identifier : (if_statement "if (uVar7 != 0xffffffff) {\n    sprintf(tmp,"%d",(ulong)uVar7);\n    if (tmp[0] != '\0') {\n      string_append(s,tmp);\n    }\n    if (((9 < (int)uVar7 || bVar2) && (!bVar3)) && (**mangled == '_')) {\n      *mangled = *mangled + 1;\n    }\n    return 1;\n  }" if (parenthesized_expression "(uVar7 != 0xffffffff)" ( (binary_expression "uVar7 != 0xffffffff" identifier != number_literal) )) (compound_statement "{\n    sprintf(tmp,"%d",(ulong)uVar7);\n    if (tmp[0] != '\0') {\n      string_append(s,tmp);\n    }\n    if (((9 < (int)uVar7 || bVar2) && (!bVar3)) && (**mangled == '_')) {\n      *mangled = *mangled + 1;\n    }\n    return 1;\n  }" { (expression_statement "sprintf(tmp,"%d",(ulong)uVar7);" (call_expression "sprintf(tmp,"%d",(ulong)uVar7)" identifier (argument_list "(tmp,"%d",(ulong)uVar7)" ( identifier , (string_literal ""%d"" " string_content ") , (cast_expression "(ulong)uVar7" ( (type_descriptor "ulong" type_identifier) ) identifier) ))) ;) (if_statement "if (tmp[0] != '\0') {\n      string_append(s,tmp);\n    }" if (parenthesized_expression "(tmp[0] != '\0')" ( (binary_expression "tmp[0] != '\0'" (subscript_expression "tmp[0]" identifier [ number_literal ]) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      string_append(s,tmp);\n    }" { (expression_statement "string_append(s,tmp);" (call_expression "string_append(s,tmp)" identifier (argument_list "(s,tmp)" ( identifier , identifier ))) ;) })) (if_statement "if (((9 < (int)uVar7 || bVar2) && (!bVar3)) && (**mangled == '_')) {\n      *mangled = *mangled + 1;\n    }" if (parenthesized_expression "(((9 < (int)uVar7 || bVar2) && (!bVar3)) && (**mangled == '_'))" ( (binary_expression "((9 < (int)uVar7 || bVar2) && (!bVar3)) && (**mangled == '_')" (parenthesized_expression "((9 < (int)uVar7 || bVar2) && (!bVar3))" ( (binary_expression "(9 < (int)uVar7 || bVar2) && (!bVar3)" (parenthesized_expression "(9 < (int)uVar7 || bVar2)" ( (binary_expression "9 < (int)uVar7 || bVar2" (binary_expression "9 < (int)uVar7" number_literal < (cast_expression "(int)uVar7" ( (type_descriptor "int" primitive_type) ) identifier)) || identifier) )) && (parenthesized_expression "(!bVar3)" ( (unary_expression "!bVar3" ! identifier) ))) )) && (parenthesized_expression "(**mangled == '_')" ( (binary_expression "**mangled == '_'" (pointer_expression "**mangled" * (pointer_expression "*mangled" * identifier)) == (char_literal "'_'" ' character ')) ))) )) (compound_statement "{\n      *mangled = *mangled + 1;\n    }" { (expression_statement "*mangled = *mangled + 1;" (assignment_expression "*mangled = *mangled + 1" (pointer_expression "*mangled" * identifier) = (binary_expression "*mangled + 1" (pointer_expression "*mangled" * identifier) + number_literal)) ;) })) (return_statement "return 1;" return number_literal ;) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "undefined8 FUN_00321a30(undefined4 *param_1,long *param_2,undefined8 param_3,int param_4)\n\n{\n  byte bVar1;\n  long lVar2;\n  bool bVar3;\n  bool bVar4;\n  byte bVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  size_t sVar9;\n  char *pcVar10;\n  char *__ptr;\n  undefined8 uVar11;\n  byte *pbVar12;\n  size_t __n;\n  char local_58 [40];\n  \n  pbVar12 = (byte *)*param_2;\n  bVar5 = *pbVar12;\n  if (bVar5 == 0x59) {\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }\n  if (param_4 != 4) {\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }\n  if (bVar5 == 0x45) goto LAB_00321eb0;\n  if ((bVar5 == 0x51) || (bVar5 == 0x4b)) goto LAB_00321c80;\n  if (bVar5 == 0x5f) {\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }\n  else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }\n  bVar3 = true;\n  uVar8 = FUN_00320870(param_2);\nLAB_00321c67:\n  if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_00321a30(undefined4 *param_1,long *param_2,undefined8 param_3,int param_4)\n\n{\n  byte bVar1;\n  long lVar2;\n  bool bVar3;\n  bool bVar4;\n  byte bVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  size_t sVar9;\n  char *pcVar10;\n  char *__ptr;\n  undefined8 uVar11;\n  byte *pbVar12;\n  size_t __n;\n  char local_58 [40];\n  \n  pbVar12 = (byte *)*param_2;\n  bVar5 = *pbVar12;\n  if (bVar5 == 0x59) {\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }\n  if (param_4 != 4) {\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }\n  if (bVar5 == 0x45) goto LAB_00321eb0;\n  if ((bVar5 == 0x51) || (bVar5 == 0x4b)) goto LAB_00321c80;\n  if (bVar5 == 0x5f) {\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }\n  else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }\n  bVar3 = true;\n  uVar8 = FUN_00320870(param_2);\nLAB_00321c67:\n  if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_00321a30(undefined4 *param_1,long *param_2,undefined8 param_3,int param_4)" identifier (parameter_list "(undefined4 *param_1,long *param_2,undefined8 param_3,int param_4)" ( (parameter_declaration "undefined4 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "undefined8 param_3" type_identifier identifier) , (parameter_declaration "int param_4" primitive_type identifier) ))) (compound_statement "{\n  byte bVar1;\n  long lVar2;\n  bool bVar3;\n  bool bVar4;\n  byte bVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  size_t sVar9;\n  char *pcVar10;\n  char *__ptr;\n  undefined8 uVar11;\n  byte *pbVar12;\n  size_t __n;\n  char local_58 [40];\n  \n  pbVar12 = (byte *)*param_2;\n  bVar5 = *pbVar12;\n  if (bVar5 == 0x59) {\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }\n  if (param_4 != 4) {\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }\n  if (bVar5 == 0x45) goto LAB_00321eb0;\n  if ((bVar5 == 0x51) || (bVar5 == 0x4b)) goto LAB_00321c80;\n  if (bVar5 == 0x5f) {\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }\n  else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }\n  bVar3 = true;\n  uVar8 = FUN_00320870(param_2);\nLAB_00321c67:\n  if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }\n  return 0;\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "bool bVar3;" primitive_type identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "byte bVar5;" type_identifier identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "size_t sVar9;" primitive_type identifier ;) (declaration "char *pcVar10;" primitive_type (pointer_declarator "*pcVar10" * identifier) ;) (declaration "char *__ptr;" primitive_type (pointer_declarator "*__ptr" * identifier) ;) (declaration "undefined8 uVar11;" type_identifier identifier ;) (declaration "byte *pbVar12;" type_identifier (pointer_declarator "*pbVar12" * identifier) ;) (declaration "size_t __n;" primitive_type identifier ;) (declaration "char local_58 [40];" primitive_type (array_declarator "local_58 [40]" identifier [ number_literal ]) ;) (expression_statement "pbVar12 = (byte *)*param_2;" (assignment_expression "pbVar12 = (byte *)*param_2" identifier = (cast_expression "(byte *)*param_2" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) ;) (expression_statement "bVar5 = *pbVar12;" (assignment_expression "bVar5 = *pbVar12" identifier = (pointer_expression "*pbVar12" * identifier)) ;) (if_statement "if (bVar5 == 0x59) {\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }" if (parenthesized_expression "(bVar5 == 0x59)" ( (binary_expression "bVar5 == 0x59" identifier == number_literal) )) (compound_statement "{\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }" { (expression_statement "*param_2 = (long)(pbVar12 + 1);" (assignment_expression "*param_2 = (long)(pbVar12 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)(pbVar12 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(pbVar12 + 1)" ( (binary_expression "pbVar12 + 1" identifier + number_literal) )))) ;) (expression_statement "iVar6 = FUN_00320920(param_2);" (assignment_expression "iVar6 = FUN_00320920(param_2)" identifier = (call_expression "FUN_00320920(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (iVar6 == -1) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(iVar6 == -1)" ( (binary_expression "iVar6 == -1" identifier == number_literal) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) (if_statement "if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6))" ( (binary_expression "(*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)" (parenthesized_expression "(*(long *)(param_1 + 0x14) != 0)" ( (binary_expression "*(long *)(param_1 + 0x14) != 0" (pointer_expression "*(long *)(param_1 + 0x14)" * (cast_expression "(long *)(param_1 + 0x14)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) != number_literal) )) && (parenthesized_expression "((int)param_1[0x16] <= iVar6)" ( (binary_expression "(int)param_1[0x16] <= iVar6" (cast_expression "(int)param_1[0x16]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_1[0x16]" identifier [ number_literal ])) <= identifier) ))) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) (expression_statement "iVar7 = FUN_00320920(param_2);" (assignment_expression "iVar7 = FUN_00320920(param_2)" identifier = (call_expression "FUN_00320920(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (iVar7 == -1) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(iVar7 == -1)" ( (binary_expression "iVar7 == -1" identifier == number_literal) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) (if_statement "if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }" if (parenthesized_expression "(*(long *)(param_1 + 0x14) != 0)" ( (binary_expression "*(long *)(param_1 + 0x14) != 0" (pointer_expression "*(long *)(param_1 + 0x14)" * (cast_expression "(long *)(param_1 + 0x14)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) != number_literal) )) (compound_statement "{\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }" { (expression_statement "pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);" (assignment_expression "pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8)" identifier = (pointer_expression "*(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8)" * (cast_expression "(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8)" ( (type_descriptor "char **" primitive_type (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(param_1 + 0x14) + (long)iVar6 * 8)" ( (binary_expression "*(long *)(param_1 + 0x14) + (long)iVar6 * 8" (pointer_expression "*(long *)(param_1 + 0x14)" * (cast_expression "(long *)(param_1 + 0x14)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x14)" ( (binary_expression "param_1 + 0x14" identifier + number_literal) )))) + (binary_expression "(long)iVar6 * 8" (cast_expression "(long)iVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) * number_literal)) ))))) ;) (if_statement "if (pcVar10 == (char *)0x0) {\n        return 1;\n      }" if (parenthesized_expression "(pcVar10 == (char *)0x0)" ( (binary_expression "pcVar10 == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (*pcVar10 == '\0') {\n        return 1;\n      }" if (parenthesized_expression "(*pcVar10 == '\0')" ( (binary_expression "*pcVar10 == '\0'" (pointer_expression "*pcVar10" * identifier) == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "FUN_00320c60(param_3);" (call_expression "FUN_00320c60(param_3)" identifier (argument_list "(param_3)" ( identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (expression_statement "FUN_00320ca0(param_3,iVar6);" (call_expression "FUN_00320ca0(param_3,iVar6)" identifier (argument_list "(param_3,iVar6)" ( identifier , identifier ))) ;) (return_statement "return 1;" return number_literal ;) })) (if_statement "if (param_4 != 4) {\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }" if (parenthesized_expression "(param_4 != 4)" ( (binary_expression "param_4 != 4" identifier != number_literal) )) (compound_statement "{\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }" { (if_statement "if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }" if (parenthesized_expression "(param_4 == 6)" ( (binary_expression "param_4 == 6" identifier == number_literal) )) (compound_statement "{\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }" { (if_statement "if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }" if (parenthesized_expression "(bVar5 == 0x6d)" ( (binary_expression "bVar5 == 0x6d" identifier == number_literal) )) (compound_statement "{\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }" { (expression_statement "FUN_00320bb0(param_3,&DAT_003e8978,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8978,1)" identifier (argument_list "(param_3,&DAT_003e8978,1)" ( identifier , (pointer_expression "&DAT_003e8978" & identifier) , number_literal ))) ;) (expression_statement "*param_2 = *param_2 + 1;" (assignment_expression "*param_2 = *param_2 + 1" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + 1" (pointer_expression "*param_2" * identifier) + number_literal)) ;) })) (expression_statement "FUN_00320bb0(param_3,&DAT_003e261d,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e261d,1)" identifier (argument_list "(param_3,&DAT_003e261d,1)" ( identifier , (pointer_expression "&DAT_003e261d" & identifier) , number_literal ))) ;) (expression_statement "iVar6 = FUN_00320870(param_2);" (assignment_expression "iVar6 = FUN_00320870(param_2)" identifier = (call_expression "FUN_00320870(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }" if (parenthesized_expression "(0 < iVar6)" ( (binary_expression "0 < iVar6" number_literal < identifier) )) (compound_statement "{\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }" { (expression_statement "local_58[0] = (char)iVar6;" (assignment_expression "local_58[0] = (char)iVar6" (subscript_expression "local_58[0]" identifier [ number_literal ]) = (cast_expression "(char)iVar6" ( (type_descriptor "char" primitive_type) ) identifier)) ;) (expression_statement "local_58[1] = 0;" (assignment_expression "local_58[1] = 0" (subscript_expression "local_58[1]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "FUN_00320bb0(param_3,local_58,1);" (call_expression "FUN_00320bb0(param_3,local_58,1)" identifier (argument_list "(param_3,local_58,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "FUN_00320bb0(param_3,&DAT_003e261d,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e261d,1)" identifier (argument_list "(param_3,&DAT_003e261d,1)" ( identifier , (pointer_expression "&DAT_003e261d" & identifier) , number_literal ))) ;) (return_statement "return 1;" return number_literal ;) })) (return_statement "return 0;" return number_literal ;) })) (if_statement "if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }" if (parenthesized_expression "(param_4 == 5)" ( (binary_expression "param_4 == 5" identifier == number_literal) )) (compound_statement "{\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }" { (expression_statement "iVar6 = FUN_00320870(param_2);" (assignment_expression "iVar6 = FUN_00320870(param_2)" identifier = (call_expression "FUN_00320870(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }" { (expression_statement "FUN_00320bb0(param_3,"false",5);" (call_expression "FUN_00320bb0(param_3,"false",5)" identifier (argument_list "(param_3,"false",5)" ( identifier , (string_literal ""false"" " string_content ") , number_literal ))) ;) (return_statement "return 1;" return number_literal ;) })) (if_statement "if (iVar6 != 1) {\n        return 0;\n      }" if (parenthesized_expression "(iVar6 != 1)" ( (binary_expression "iVar6 != 1" identifier != number_literal) )) (compound_statement "{\n        return 0;\n      }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "FUN_00320bb0(param_3,&DAT_003e8a7b,4);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8a7b,4)" identifier (argument_list "(param_3,&DAT_003e8a7b,4)" ( identifier , (pointer_expression "&DAT_003e8a7b" & identifier) , number_literal ))) ;) (return_statement "return 1;" return number_literal ;) })) (if_statement "if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }" if (parenthesized_expression "(param_4 != 7)" ( (binary_expression "param_4 != 7" identifier != number_literal) )) (compound_statement "{\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }" { (if_statement "if (2 < param_4 - 1U) {\n        return 1;\n      }" if (parenthesized_expression "(2 < param_4 - 1U)" ( (binary_expression "2 < param_4 - 1U" number_literal < (binary_expression "param_4 - 1U" identifier - number_literal)) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }" if (parenthesized_expression "(bVar5 != 0x51)" ( (binary_expression "bVar5 != 0x51" identifier != number_literal) )) (compound_statement "{\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }" { (expression_statement "iVar6 = FUN_00320870(param_2);" (assignment_expression "iVar6 = FUN_00320870(param_2)" identifier = (call_expression "FUN_00320870(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (if_statement "if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }" if (parenthesized_expression "(iVar6 != -1)" ( (binary_expression "iVar6 != -1" identifier != number_literal) )) (compound_statement "{\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }" { (expression_statement "__n = (size_t)iVar6;" (assignment_expression "__n = (size_t)iVar6" identifier = (cast_expression "(size_t)iVar6" ( (type_descriptor "size_t" primitive_type) ) identifier)) ;) (expression_statement "sVar9 = strlen((char *)*param_2);" (assignment_expression "sVar9 = strlen((char *)*param_2)" identifier = (call_expression "strlen((char *)*param_2)" identifier (argument_list "((char *)*param_2)" ( (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) )))) ;) (if_statement "if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }" if (parenthesized_expression "((long)__n <= (long)sVar9)" ( (binary_expression "(long)__n <= (long)sVar9" (cast_expression "(long)__n" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) <= (cast_expression "(long)sVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) (compound_statement "{\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }" { (if_statement "if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }" if (parenthesized_expression "(iVar6 == 0)" ( (binary_expression "iVar6 == 0" identifier == number_literal) )) (compound_statement "{\n              FUN_00320bb0(param_3,"0",1);\n            }" { (expression_statement "FUN_00320bb0(param_3,"0",1);" (call_expression "FUN_00320bb0(param_3,"0",1)" identifier (argument_list "(param_3,"0",1)" ( identifier , (string_literal ""0"" " string_content ") , number_literal ))) ;) }) (else_clause "else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }" else (compound_statement "{\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }" { (expression_statement "pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));" (assignment_expression "pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1))" identifier = (cast_expression "(char *)FUN_00336e30((long)(iVar6 + 1))" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00336e30((long)(iVar6 + 1))" identifier (argument_list "((long)(iVar6 + 1))" ( (cast_expression "(long)(iVar6 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(iVar6 + 1)" ( (binary_expression "iVar6 + 1" identifier + number_literal) ))) ))))) ;) (expression_statement "strncpy(pcVar10,(char *)*param_2,__n);" (call_expression "strncpy(pcVar10,(char *)*param_2,__n)" identifier (argument_list "(pcVar10,(char *)*param_2,__n)" ( identifier , (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) , identifier ))) ;) (expression_statement "pcVar10[__n] = '\0';" (assignment_expression "pcVar10[__n] = '\0'" (subscript_expression "pcVar10[__n]" identifier [ identifier ]) = (char_literal "'\0'" ' escape_sequence ')) ;) (expression_statement "__ptr = (char *)FUN_003218a0(pcVar10,*param_1);" (assignment_expression "__ptr = (char *)FUN_003218a0(pcVar10,*param_1)" identifier = (cast_expression "(char *)FUN_003218a0(pcVar10,*param_1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_003218a0(pcVar10,*param_1)" identifier (argument_list "(pcVar10,*param_1)" ( identifier , (pointer_expression "*param_1" * identifier) ))))) ;) (if_statement "if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }" if (parenthesized_expression "(param_4 == 1)" ( (binary_expression "param_4 == 1" identifier == number_literal) )) (compound_statement "{\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }" { (expression_statement "FUN_00320bb0(param_3,&DAT_003fb356,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003fb356,1)" identifier (argument_list "(param_3,&DAT_003fb356,1)" ( identifier , (pointer_expression "&DAT_003fb356" & identifier) , number_literal ))) ;) })) (if_statement "if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }" if (parenthesized_expression "(__ptr == (char *)0x0)" ( (binary_expression "__ptr == (char *)0x0" identifier == (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }" { (if_statement "if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }" if (parenthesized_expression "(*pcVar10 != '\0')" ( (binary_expression "*pcVar10 != '\0'" (pointer_expression "*pcVar10" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                  FUN_00320c60(param_3,pcVar10);\n                }" { (expression_statement "FUN_00320c60(param_3,pcVar10);" (call_expression "FUN_00320c60(param_3,pcVar10)" identifier (argument_list "(param_3,pcVar10)" ( identifier , identifier ))) ;) })) }) (else_clause "else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }" else (compound_statement "{\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }" { (if_statement "if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }" if (parenthesized_expression "(*__ptr != '\0')" ( (binary_expression "*__ptr != '\0'" (pointer_expression "*__ptr" * identifier) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                  FUN_00320c60(param_3,__ptr);\n                }" { (expression_statement "FUN_00320c60(param_3,__ptr);" (call_expression "FUN_00320c60(param_3,__ptr)" identifier (argument_list "(param_3,__ptr)" ( identifier , identifier ))) ;) })) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" identifier (argument_list "(__ptr)" ( identifier ))) ;) }))) (expression_statement "free(pcVar10);" (call_expression "free(pcVar10)" identifier (argument_list "(pcVar10)" ( identifier ))) ;) }))) (expression_statement "*param_2 = *param_2 + __n;" (assignment_expression "*param_2 = *param_2 + __n" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + __n" (pointer_expression "*param_2" * identifier) + identifier)) ;) (return_statement "return 1;" return number_literal ;) })) })) (return_statement "return 0xffffffff;" return number_literal ;) })) (labeled_statement "LAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);" statement_identifier : (expression_statement "uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);" (assignment_expression "uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1)" identifier = (call_expression "FUN_003245e0(param_1,param_2,param_3,0,1)" identifier (argument_list "(param_1,param_2,param_3,0,1)" ( identifier , identifier , identifier , number_literal , number_literal )))) ;)) (return_statement "return uVar11;" return identifier ;) })) (if_statement "if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }" if (parenthesized_expression "(bVar5 != 0x45)" ( (binary_expression "bVar5 != 0x45" identifier != number_literal) )) (compound_statement "{\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }" { (if_statement "if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }" if (parenthesized_expression "(bVar5 == 0x6d)" ( (binary_expression "bVar5 == 0x6d" identifier == number_literal) )) (compound_statement "{\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }" { (expression_statement "FUN_00320bb0(param_3,&DAT_003e8978,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8978,1)" identifier (argument_list "(param_3,&DAT_003e8978,1)" ( identifier , (pointer_expression "&DAT_003e8978" & identifier) , number_literal ))) ;) (expression_statement "lVar2 = *param_2;" (assignment_expression "lVar2 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "pbVar12 = (byte *)(lVar2 + 1);" (assignment_expression "pbVar12 = (byte *)(lVar2 + 1)" identifier = (cast_expression "(byte *)(lVar2 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) )))) ;) (expression_statement "*param_2 = (long)pbVar12;" (assignment_expression "*param_2 = (long)pbVar12" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)pbVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "bVar5 = *(byte *)(lVar2 + 1);" (assignment_expression "bVar5 = *(byte *)(lVar2 + 1)" identifier = (pointer_expression "*(byte *)(lVar2 + 1)" * (cast_expression "(byte *)(lVar2 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) ))))) ;) })) (expression_statement "bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];" (assignment_expression "bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2]" identifier = (subscript_expression "(&DAT_003fef20)[(ulong)bVar5 * 2]" (parenthesized_expression "(&DAT_003fef20)" ( (pointer_expression "&DAT_003fef20" & identifier) )) [ (binary_expression "(ulong)bVar5 * 2" (cast_expression "(ulong)bVar5" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal) ])) ;) (while_statement "while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }" while (parenthesized_expression "((bVar1 & 4) != 0)" ( (binary_expression "(bVar1 & 4) != 0" (parenthesized_expression "(bVar1 & 4)" ( (binary_expression "bVar1 & 4" identifier & number_literal) )) != number_literal) )) (compound_statement "{\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }" { (expression_statement "FUN_00320bb0(param_3,pbVar12,1);" (call_expression "FUN_00320bb0(param_3,pbVar12,1)" identifier (argument_list "(param_3,pbVar12,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "lVar2 = *param_2;" (assignment_expression "lVar2 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "pbVar12 = (byte *)(lVar2 + 1);" (assignment_expression "pbVar12 = (byte *)(lVar2 + 1)" identifier = (cast_expression "(byte *)(lVar2 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) )))) ;) (expression_statement "*param_2 = (long)pbVar12;" (assignment_expression "*param_2 = (long)pbVar12" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)pbVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "bVar5 = *(byte *)(lVar2 + 1);" (assignment_expression "bVar5 = *(byte *)(lVar2 + 1)" identifier = (pointer_expression "*(byte *)(lVar2 + 1)" * (cast_expression "(byte *)(lVar2 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) ))))) ;) (expression_statement "bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];" (assignment_expression "bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2]" identifier = (subscript_expression "(&DAT_003fef20)[(ulong)bVar5 * 2]" (parenthesized_expression "(&DAT_003fef20)" ( (pointer_expression "&DAT_003fef20" & identifier) )) [ (binary_expression "(ulong)bVar5 * 2" (cast_expression "(ulong)bVar5" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal) ])) ;) })) (if_statement "if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }" if (parenthesized_expression "(bVar5 == 0x2e)" ( (binary_expression "bVar5 == 0x2e" identifier == number_literal) )) (compound_statement "{\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }" { (expression_statement "pcVar10 = ".";" (assignment_expression "pcVar10 = "."" identifier = (string_literal ""."" " string_content ")) ;) (do_statement "do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);" do (compound_statement "{\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        }" { (expression_statement "FUN_00320bb0(param_3,pcVar10,1);" (call_expression "FUN_00320bb0(param_3,pcVar10,1)" identifier (argument_list "(param_3,pcVar10,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "lVar2 = *param_2;" (assignment_expression "lVar2 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "pcVar10 = (char *)(lVar2 + 1);" (assignment_expression "pcVar10 = (char *)(lVar2 + 1)" identifier = (cast_expression "(char *)(lVar2 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) )))) ;) (expression_statement "*param_2 = (long)pcVar10;" (assignment_expression "*param_2 = (long)pcVar10" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)pcVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "bVar5 = *(byte *)(lVar2 + 1);" (assignment_expression "bVar5 = *(byte *)(lVar2 + 1)" identifier = (pointer_expression "*(byte *)(lVar2 + 1)" * (cast_expression "(byte *)(lVar2 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) ))))) ;) }) while (parenthesized_expression "(((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0)" ( (binary_expression "((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0" (parenthesized_expression "((&DAT_003fef20)[(ulong)bVar5 * 2] & 4)" ( (binary_expression "(&DAT_003fef20)[(ulong)bVar5 * 2] & 4" (subscript_expression "(&DAT_003fef20)[(ulong)bVar5 * 2]" (parenthesized_expression "(&DAT_003fef20)" ( (pointer_expression "&DAT_003fef20" & identifier) )) [ (binary_expression "(ulong)bVar5 * 2" (cast_expression "(ulong)bVar5" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal) ]) & number_literal) )) != number_literal) )) ;) }) (else_clause "else {\n        bVar5 = *(byte *)*param_2;\n      }" else (compound_statement "{\n        bVar5 = *(byte *)*param_2;\n      }" { (expression_statement "bVar5 = *(byte *)*param_2;" (assignment_expression "bVar5 = *(byte *)*param_2" identifier = (pointer_expression "*(byte *)*param_2" * (cast_expression "(byte *)*param_2" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)))) ;) }))) (if_statement "if (bVar5 != 0x65) {\n        return 1;\n      }" if (parenthesized_expression "(bVar5 != 0x65)" ( (binary_expression "bVar5 != 0x65" identifier != number_literal) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "pcVar10 = "e";" (assignment_expression "pcVar10 = "e"" identifier = (string_literal ""e"" " string_content ")) ;) (do_statement "do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);" do (compound_statement "{\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      }" { (expression_statement "FUN_00320bb0(param_3,pcVar10,1);" (call_expression "FUN_00320bb0(param_3,pcVar10,1)" identifier (argument_list "(param_3,pcVar10,1)" ( identifier , identifier , number_literal ))) ;) (expression_statement "lVar2 = *param_2;" (assignment_expression "lVar2 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "pcVar10 = (char *)(lVar2 + 1);" (assignment_expression "pcVar10 = (char *)(lVar2 + 1)" identifier = (cast_expression "(char *)(lVar2 + 1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) )))) ;) (expression_statement "*param_2 = (long)pcVar10;" (assignment_expression "*param_2 = (long)pcVar10" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)pcVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) }) while (parenthesized_expression "(((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0)" ( (binary_expression "((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0" (parenthesized_expression "((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4)" ( (binary_expression "(&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4" (subscript_expression "(&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2]" (parenthesized_expression "(&DAT_003fef20)" ( (pointer_expression "&DAT_003fef20" & identifier) )) [ (binary_expression "(ulong)*(byte *)(lVar2 + 1) * 2" (binary_expression "(ulong)*(byte *)(lVar2 + 1)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(byte *)(lVar2 + 1)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar2 + 1)" ( (binary_expression "lVar2 + 1" identifier + number_literal) )))) * number_literal) ]) & number_literal) )) != number_literal) )) ;) (return_statement "return 1;" return number_literal ;) })) (labeled_statement "LAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);" statement_identifier : (expression_statement "uVar11 = FUN_00321f80(param_1,param_2,param_3);" (assignment_expression "uVar11 = FUN_00321f80(param_1,param_2,param_3)" identifier = (call_expression "FUN_00321f80(param_1,param_2,param_3)" identifier (argument_list "(param_1,param_2,param_3)" ( identifier , identifier , identifier )))) ;)) (return_statement "return uVar11;" return identifier ;) })) (if_statement "if (bVar5 == 0x45) goto LAB_00321eb0;" if (parenthesized_expression "(bVar5 == 0x45)" ( (binary_expression "bVar5 == 0x45" identifier == number_literal) )) (goto_statement "goto LAB_00321eb0;" goto statement_identifier ;)) (if_statement "if ((bVar5 == 0x51) || (bVar5 == 0x4b)) goto LAB_00321c80;" if (parenthesized_expression "((bVar5 == 0x51) || (bVar5 == 0x4b))" ( (binary_expression "(bVar5 == 0x51) || (bVar5 == 0x4b)" (parenthesized_expression "(bVar5 == 0x51)" ( (binary_expression "bVar5 == 0x51" identifier == number_literal) )) || (parenthesized_expression "(bVar5 == 0x4b)" ( (binary_expression "bVar5 == 0x4b" identifier == number_literal) ))) )) (goto_statement "goto LAB_00321c80;" goto statement_identifier ;)) (if_statement "if (bVar5 == 0x5f) {\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }\n  else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }" if (parenthesized_expression "(bVar5 == 0x5f)" ( (binary_expression "bVar5 == 0x5f" identifier == number_literal) )) (compound_statement "{\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }" { (if_statement "if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }" if (parenthesized_expression "(pbVar12[1] != 0x6d)" ( (binary_expression "pbVar12[1] != 0x6d" (subscript_expression "pbVar12[1]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }" { (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;) (expression_statement "bVar3 = false;" (assignment_expression "bVar3 = false" identifier = false) ;) (expression_statement "uVar8 = FUN_00320920(param_2);" (assignment_expression "uVar8 = FUN_00320920(param_2)" identifier = (call_expression "FUN_00320920(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (goto_statement "goto LAB_00321c67;" goto statement_identifier ;) })) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) (expression_statement "FUN_00320bb0(param_3,&DAT_003e8978,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8978,1)" identifier (argument_list "(param_3,&DAT_003e8978,1)" ( identifier , (pointer_expression "&DAT_003e8978" & identifier) , number_literal ))) ;) (expression_statement "*param_2 = *param_2 + 2;" (assignment_expression "*param_2 = *param_2 + 2" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + 2" (pointer_expression "*param_2" * identifier) + number_literal)) ;) }) (else_clause "else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }" else (compound_statement "{\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }" { (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;) (if_statement "if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }" if (parenthesized_expression "(bVar5 == 0x6d)" ( (binary_expression "bVar5 == 0x6d" identifier == number_literal) )) (compound_statement "{\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }" { (expression_statement "FUN_00320bb0(param_3,&DAT_003e8978,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8978,1)" identifier (argument_list "(param_3,&DAT_003e8978,1)" ( identifier , (pointer_expression "&DAT_003e8978" & identifier) , number_literal ))) ;) (expression_statement "*param_2 = *param_2 + 1;" (assignment_expression "*param_2 = *param_2 + 1" (pointer_expression "*param_2" * identifier) = (binary_expression "*param_2 + 1" (pointer_expression "*param_2" * identifier) + number_literal)) ;) })) }))) (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" identifier = true) ;) (expression_statement "uVar8 = FUN_00320870(param_2);" (assignment_expression "uVar8 = FUN_00320870(param_2)" identifier = (call_expression "FUN_00320870(param_2)" identifier (argument_list "(param_2)" ( identifier )))) ;) (labeled_statement "LAB_00321c67:\n  if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }" statement_identifier : (if_statement "if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }" if (parenthesized_expression "(uVar8 != 0xffffffff)" ( (binary_expression "uVar8 != 0xffffffff" identifier != number_literal) )) (compound_statement "{\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }" { (expression_statement "sprintf(local_58,"%d",(ulong)uVar8);" (call_expression "sprintf(local_58,"%d",(ulong)uVar8)" identifier (argument_list "(local_58,"%d",(ulong)uVar8)" ( identifier , (string_literal ""%d"" " string_content ") , (cast_expression "(ulong)uVar8" ( (type_descriptor "ulong" type_identifier) ) identifier) ))) ;) (if_statement "if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }" if (parenthesized_expression "(local_58[0] != '\0')" ( (binary_expression "local_58[0] != '\0'" (subscript_expression "local_58[0]" identifier [ number_literal ]) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      FUN_00320c60(param_3,local_58);\n    }" { (expression_statement "FUN_00320c60(param_3,local_58);" (call_expression "FUN_00320c60(param_3,local_58)" identifier (argument_list "(param_3,local_58)" ( identifier , identifier ))) ;) })) (if_statement "if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }" if (parenthesized_expression "(((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_'))" ( (binary_expression "((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')" (parenthesized_expression "((9 < (int)uVar8 || bVar3) && (!bVar4))" ( (binary_expression "(9 < (int)uVar8 || bVar3) && (!bVar4)" (parenthesized_expression "(9 < (int)uVar8 || bVar3)" ( (binary_expression "9 < (int)uVar8 || bVar3" (binary_expression "9 < (int)uVar8" number_literal < (cast_expression "(int)uVar8" ( (type_descriptor "int" primitive_type) ) identifier)) || identifier) )) && (parenthesized_expression "(!bVar4)" ( (unary_expression "!bVar4" ! identifier) ))) )) && (parenthesized_expression "(*(char *)*param_2 == '_')" ( (binary_expression "*(char *)*param_2 == '_'" (pointer_expression "*(char *)*param_2" * (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier))) == (char_literal "'_'" ' character ')) ))) )) (compound_statement "{\n      *param_2 = (long)((char *)*param_2 + 1);\n    }" { (expression_statement "*param_2 = (long)((char *)*param_2 + 1);" (assignment_expression "*param_2 = (long)((char *)*param_2 + 1)" (pointer_expression "*param_2" * identifier) = (cast_expression "(long)((char *)*param_2 + 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "((char *)*param_2 + 1)" ( (binary_expression "(char *)*param_2 + 1" (cast_expression "(char *)*param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_2" * identifier)) + number_literal) )))) ;) })) (return_statement "return 1;" return number_literal ;) }))) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) <= IDENT) ))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) * LIT)) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))) ;) (return_statement return LIT ;) })) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") , LIT ))) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))) ;) (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT - LIT)) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) <= (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") , LIT ))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))) ))))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) , IDENT ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ IDENT ]) = (char_literal ' escape_sequence ')) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , (pointer_expression * IDENT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) }))) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + IDENT)) ;) (return_statement return LIT ;) })) })) (return_statement return LIT ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , LIT , LIT )))) ;)) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT) ])) ;) (while_statement while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT & LIT) )) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT) ])) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (do_statement do (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT) ]) & LIT) )) != LIT) )) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)))) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (string_literal " string_content ")) ;) (do_statement do (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , LIT ))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression (parenthesized_expression ( (pointer_expression & IDENT) )) [ (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) * LIT) ]) & LIT) )) != LIT) )) ;) (return_statement return LIT ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT )))) ;)) (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (pointer_expression & IDENT) , LIT ))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (binary_expression (pointer_expression * IDENT) + LIT)) ;) })) }))) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (string_literal " string_content ") , (cast_expression ( (type_descriptor TYPE) ) IDENT) ))) ;) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression LIT < (cast_expression ( (type_descriptor TYPE) ) IDENT)) || IDENT) )) && (parenthesized_expression ( (unary_expression ! IDENT) ))) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) == (char_literal ' character ')) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) + LIT) )))) ;) })) (return_statement return LIT ;) }))) (return_statement return LIT ;) })))
(function_definition "undefined8 FUN_00321a30(undefined4 *param_1,long *param_2,undefined8 param_3,int param_4)\n\n{\n  byte bVar1;\n  long lVar2;\n  bool bVar3;\n  bool bVar4;\n  byte bVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  size_t sVar9;\n  char *pcVar10;\n  char *__ptr;\n  undefined8 uVar11;\n  byte *pbVar12;\n  size_t __n;\n  char local_58 [40];\n  \n  pbVar12 = (byte *)*param_2;\n  bVar5 = *pbVar12;\n  if (bVar5 == 0x59) {\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }\n  if (param_4 != 4) {\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }\n  if (bVar5 == 0x45) goto LAB_00321eb0;\n  if ((bVar5 == 0x51) || (bVar5 == 0x4b)) goto LAB_00321c80;\n  if (bVar5 == 0x5f) {\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }\n  else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }\n  bVar3 = true;\n  uVar8 = FUN_00320870(param_2);\nLAB_00321c67:\n  if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }\n  return 0;\n}" (type_identifier "undefined8") (function_declarator "FUN_00321a30(undefined4 *param_1,long *param_2,undefined8 param_3,int param_4)" (identifier "FUN_00321a30") (parameter_list "(undefined4 *param_1,long *param_2,undefined8 param_3,int param_4)" (( "(") (parameter_declaration "undefined4 *param_1" (type_identifier "undefined4") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "undefined8 param_3" (type_identifier "undefined8") (identifier "param_3")) (, ",") (parameter_declaration "int param_4" (primitive_type "int") (identifier "param_4")) () ")"))) (compound_statement "{\n  byte bVar1;\n  long lVar2;\n  bool bVar3;\n  bool bVar4;\n  byte bVar5;\n  int iVar6;\n  int iVar7;\n  uint uVar8;\n  size_t sVar9;\n  char *pcVar10;\n  char *__ptr;\n  undefined8 uVar11;\n  byte *pbVar12;\n  size_t __n;\n  char local_58 [40];\n  \n  pbVar12 = (byte *)*param_2;\n  bVar5 = *pbVar12;\n  if (bVar5 == 0x59) {\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }\n  if (param_4 != 4) {\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }\n  if (bVar5 == 0x45) goto LAB_00321eb0;\n  if ((bVar5 == 0x51) || (bVar5 == 0x4b)) goto LAB_00321c80;\n  if (bVar5 == 0x5f) {\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }\n  else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }\n  bVar3 = true;\n  uVar8 = FUN_00320870(param_2);\nLAB_00321c67:\n  if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }\n  return 0;\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "bool bVar3;" (primitive_type "bool") (identifier "bVar3") (; ";")) (declaration "bool bVar4;" (primitive_type "bool") (identifier "bVar4") (; ";")) (declaration "byte bVar5;" (type_identifier "byte") (identifier "bVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "uint uVar8;" (type_identifier "uint") (identifier "uVar8") (; ";")) (declaration "size_t sVar9;" (primitive_type "size_t") (identifier "sVar9") (; ";")) (declaration "char *pcVar10;" (primitive_type "char") (pointer_declarator "*pcVar10" (* "*") (identifier "pcVar10")) (; ";")) (declaration "char *__ptr;" (primitive_type "char") (pointer_declarator "*__ptr" (* "*") (identifier "__ptr")) (; ";")) (declaration "undefined8 uVar11;" (type_identifier "undefined8") (identifier "uVar11") (; ";")) (declaration "byte *pbVar12;" (type_identifier "byte") (pointer_declarator "*pbVar12" (* "*") (identifier "pbVar12")) (; ";")) (declaration "size_t __n;" (primitive_type "size_t") (identifier "__n") (; ";")) (declaration "char local_58 [40];" (primitive_type "char") (array_declarator "local_58 [40]" (identifier "local_58") ([ "[") (number_literal "40") (] "]")) (; ";")) (expression_statement "pbVar12 = (byte *)*param_2;" (assignment_expression "pbVar12 = (byte *)*param_2" (identifier "pbVar12") (= "=") (cast_expression "(byte *)*param_2" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (; ";")) (expression_statement "bVar5 = *pbVar12;" (assignment_expression "bVar5 = *pbVar12" (identifier "bVar5") (= "=") (pointer_expression "*pbVar12" (* "*") (identifier "pbVar12"))) (; ";")) (if_statement "if (bVar5 == 0x59) {\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }" (if "if") (parenthesized_expression "(bVar5 == 0x59)" (( "(") (binary_expression "bVar5 == 0x59" (identifier "bVar5") (== "==") (number_literal "0x59")) () ")")) (compound_statement "{\n    *param_2 = (long)(pbVar12 + 1);\n    iVar6 = FUN_00320920(param_2);\n    if (iVar6 == -1) {\n      return 0xffffffff;\n    }\n    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }\n    iVar7 = FUN_00320920(param_2);\n    if (iVar7 == -1) {\n      return 0xffffffff;\n    }\n    if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }\n    FUN_00320ca0(param_3,iVar6);\n    return 1;\n  }" ({ "{") (expression_statement "*param_2 = (long)(pbVar12 + 1);" (assignment_expression "*param_2 = (long)(pbVar12 + 1)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)(pbVar12 + 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(pbVar12 + 1)" (( "(") (binary_expression "pbVar12 + 1" (identifier "pbVar12") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "iVar6 = FUN_00320920(param_2);" (assignment_expression "iVar6 = FUN_00320920(param_2)" (identifier "iVar6") (= "=") (call_expression "FUN_00320920(param_2)" (identifier "FUN_00320920") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (iVar6 == -1) {\n      return 0xffffffff;\n    }" (if "if") (parenthesized_expression "(iVar6 == -1)" (( "(") (binary_expression "iVar6 == -1" (identifier "iVar6") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n      return 0xffffffff;\n    }" ({ "{") (return_statement "return 0xffffffff;" (return "return") (number_literal "0xffffffff") (; ";")) (} "}"))) (if_statement "if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {\n      return 0xffffffff;\n    }" (if "if") (parenthesized_expression "((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6))" (( "(") (binary_expression "(*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)" (parenthesized_expression "(*(long *)(param_1 + 0x14) != 0)" (( "(") (binary_expression "*(long *)(param_1 + 0x14) != 0" (pointer_expression "*(long *)(param_1 + 0x14)" (* "*") (cast_expression "(long *)(param_1 + 0x14)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "((int)param_1[0x16] <= iVar6)" (( "(") (binary_expression "(int)param_1[0x16] <= iVar6" (cast_expression "(int)param_1[0x16]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_1[0x16]" (identifier "param_1") ([ "[") (number_literal "0x16") (] "]"))) (<= "<=") (identifier "iVar6")) () ")"))) () ")")) (compound_statement "{\n      return 0xffffffff;\n    }" ({ "{") (return_statement "return 0xffffffff;" (return "return") (number_literal "0xffffffff") (; ";")) (} "}"))) (expression_statement "iVar7 = FUN_00320920(param_2);" (assignment_expression "iVar7 = FUN_00320920(param_2)" (identifier "iVar7") (= "=") (call_expression "FUN_00320920(param_2)" (identifier "FUN_00320920") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (iVar7 == -1) {\n      return 0xffffffff;\n    }" (if "if") (parenthesized_expression "(iVar7 == -1)" (( "(") (binary_expression "iVar7 == -1" (identifier "iVar7") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n      return 0xffffffff;\n    }" ({ "{") (return_statement "return 0xffffffff;" (return "return") (number_literal "0xffffffff") (; ";")) (} "}"))) (if_statement "if (*(long *)(param_1 + 0x14) != 0) {\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }" (if "if") (parenthesized_expression "(*(long *)(param_1 + 0x14) != 0)" (( "(") (binary_expression "*(long *)(param_1 + 0x14) != 0" (pointer_expression "*(long *)(param_1 + 0x14)" (* "*") (cast_expression "(long *)(param_1 + 0x14)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);\n      if (pcVar10 == (char *)0x0) {\n        return 1;\n      }\n      if (*pcVar10 == '\0') {\n        return 1;\n      }\n      FUN_00320c60(param_3);\n      return 1;\n    }" ({ "{") (expression_statement "pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);" (assignment_expression "pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8)" (identifier "pcVar10") (= "=") (pointer_expression "*(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8)" (* "*") (cast_expression "(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8)" (( "(") (type_descriptor "char **" (primitive_type "char") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)(param_1 + 0x14) + (long)iVar6 * 8)" (( "(") (binary_expression "*(long *)(param_1 + 0x14) + (long)iVar6 * 8" (pointer_expression "*(long *)(param_1 + 0x14)" (* "*") (cast_expression "(long *)(param_1 + 0x14)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x14)" (( "(") (binary_expression "param_1 + 0x14" (identifier "param_1") (+ "+") (number_literal "0x14")) () ")")))) (+ "+") (binary_expression "(long)iVar6 * 8" (cast_expression "(long)iVar6" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "iVar6")) (* "*") (number_literal "8"))) () ")"))))) (; ";")) (if_statement "if (pcVar10 == (char *)0x0) {\n        return 1;\n      }" (if "if") (parenthesized_expression "(pcVar10 == (char *)0x0)" (( "(") (binary_expression "pcVar10 == (char *)0x0" (identifier "pcVar10") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        return 1;\n      }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (if_statement "if (*pcVar10 == '\0') {\n        return 1;\n      }" (if "if") (parenthesized_expression "(*pcVar10 == '\0')" (( "(") (binary_expression "*pcVar10 == '\0'" (pointer_expression "*pcVar10" (* "*") (identifier "pcVar10")) (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n        return 1;\n      }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "FUN_00320c60(param_3);" (call_expression "FUN_00320c60(param_3)" (identifier "FUN_00320c60") (argument_list "(param_3)" (( "(") (identifier "param_3") () ")"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "FUN_00320ca0(param_3,iVar6);" (call_expression "FUN_00320ca0(param_3,iVar6)" (identifier "FUN_00320ca0") (argument_list "(param_3,iVar6)" (( "(") (identifier "param_3") (, ",") (identifier "iVar6") () ")"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (if_statement "if (param_4 != 4) {\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }" (if "if") (parenthesized_expression "(param_4 != 4)" (( "(") (binary_expression "param_4 != 4" (identifier "param_4") (!= "!=") (number_literal "4")) () ")")) (compound_statement "{\n    if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }\n    if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }\n    if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }\n    if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }\nLAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);\n    return uVar11;\n  }" ({ "{") (if_statement "if (param_4 == 6) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_4 == 6)" (( "(") (binary_expression "param_4 == 6" (identifier "param_4") (== "==") (number_literal "6")) () ")")) (compound_statement "{\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }\n      FUN_00320bb0(param_3,&DAT_003e261d,1);\n      iVar6 = FUN_00320870(param_2);\n      if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }\n      return 0;\n    }" ({ "{") (if_statement "if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }" (if "if") (parenthesized_expression "(bVar5 == 0x6d)" (( "(") (binary_expression "bVar5 == 0x6d" (identifier "bVar5") (== "==") (number_literal "0x6d")) () ")")) (compound_statement "{\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        *param_2 = *param_2 + 1;\n      }" ({ "{") (expression_statement "FUN_00320bb0(param_3,&DAT_003e8978,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8978,1)" (identifier "FUN_00320bb0") (argument_list "(param_3,&DAT_003e8978,1)" (( "(") (identifier "param_3") (, ",") (pointer_expression "&DAT_003e8978" (& "&") (identifier "DAT_003e8978")) (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "*param_2 = *param_2 + 1;" (assignment_expression "*param_2 = *param_2 + 1" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "*param_2 + 1" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (expression_statement "FUN_00320bb0(param_3,&DAT_003e261d,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e261d,1)" (identifier "FUN_00320bb0") (argument_list "(param_3,&DAT_003e261d,1)" (( "(") (identifier "param_3") (, ",") (pointer_expression "&DAT_003e261d" (& "&") (identifier "DAT_003e261d")) (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "iVar6 = FUN_00320870(param_2);" (assignment_expression "iVar6 = FUN_00320870(param_2)" (identifier "iVar6") (= "=") (call_expression "FUN_00320870(param_2)" (identifier "FUN_00320870") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (0 < iVar6) {\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }" (if "if") (parenthesized_expression "(0 < iVar6)" (( "(") (binary_expression "0 < iVar6" (number_literal "0") (< "<") (identifier "iVar6")) () ")")) (compound_statement "{\n        local_58[0] = (char)iVar6;\n        local_58[1] = 0;\n        FUN_00320bb0(param_3,local_58,1);\n        FUN_00320bb0(param_3,&DAT_003e261d,1);\n        return 1;\n      }" ({ "{") (expression_statement "local_58[0] = (char)iVar6;" (assignment_expression "local_58[0] = (char)iVar6" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (= "=") (cast_expression "(char)iVar6" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "iVar6"))) (; ";")) (expression_statement "local_58[1] = 0;" (assignment_expression "local_58[1] = 0" (subscript_expression "local_58[1]" (identifier "local_58") ([ "[") (number_literal "1") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "FUN_00320bb0(param_3,local_58,1);" (call_expression "FUN_00320bb0(param_3,local_58,1)" (identifier "FUN_00320bb0") (argument_list "(param_3,local_58,1)" (( "(") (identifier "param_3") (, ",") (identifier "local_58") (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "FUN_00320bb0(param_3,&DAT_003e261d,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e261d,1)" (identifier "FUN_00320bb0") (argument_list "(param_3,&DAT_003e261d,1)" (( "(") (identifier "param_3") (, ",") (pointer_expression "&DAT_003e261d" (& "&") (identifier "DAT_003e261d")) (, ",") (number_literal "1") () ")"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (param_4 == 5) {\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }" (if "if") (parenthesized_expression "(param_4 == 5)" (( "(") (binary_expression "param_4 == 5" (identifier "param_4") (== "==") (number_literal "5")) () ")")) (compound_statement "{\n      iVar6 = FUN_00320870(param_2);\n      if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }\n      if (iVar6 != 1) {\n        return 0;\n      }\n      FUN_00320bb0(param_3,&DAT_003e8a7b,4);\n      return 1;\n    }" ({ "{") (expression_statement "iVar6 = FUN_00320870(param_2);" (assignment_expression "iVar6 = FUN_00320870(param_2)" (identifier "iVar6") (= "=") (call_expression "FUN_00320870(param_2)" (identifier "FUN_00320870") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (iVar6 == 0) {\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_00320bb0(param_3,"false",5);\n        return 1;\n      }" ({ "{") (expression_statement "FUN_00320bb0(param_3,"false",5);" (call_expression "FUN_00320bb0(param_3,"false",5)" (identifier "FUN_00320bb0") (argument_list "(param_3,"false",5)" (( "(") (identifier "param_3") (, ",") (string_literal ""false"" (" """) (string_content "false") (" """)) (, ",") (number_literal "5") () ")"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (if_statement "if (iVar6 != 1) {\n        return 0;\n      }" (if "if") (parenthesized_expression "(iVar6 != 1)" (( "(") (binary_expression "iVar6 != 1" (identifier "iVar6") (!= "!=") (number_literal "1")) () ")")) (compound_statement "{\n        return 0;\n      }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "FUN_00320bb0(param_3,&DAT_003e8a7b,4);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8a7b,4)" (identifier "FUN_00320bb0") (argument_list "(param_3,&DAT_003e8a7b,4)" (( "(") (identifier "param_3") (, ",") (pointer_expression "&DAT_003e8a7b" (& "&") (identifier "DAT_003e8a7b")) (, ",") (number_literal "4") () ")"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (if_statement "if (param_4 != 7) {\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }" (if "if") (parenthesized_expression "(param_4 != 7)" (( "(") (binary_expression "param_4 != 7" (identifier "param_4") (!= "!=") (number_literal "7")) () ")")) (compound_statement "{\n      if (2 < param_4 - 1U) {\n        return 1;\n      }\n      if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }\nLAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);\n      return uVar11;\n    }" ({ "{") (if_statement "if (2 < param_4 - 1U) {\n        return 1;\n      }" (if "if") (parenthesized_expression "(2 < param_4 - 1U)" (( "(") (binary_expression "2 < param_4 - 1U" (number_literal "2") (< "<") (binary_expression "param_4 - 1U" (identifier "param_4") (- "-") (number_literal "1U"))) () ")")) (compound_statement "{\n        return 1;\n      }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (if_statement "if (bVar5 != 0x51) {\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }" (if "if") (parenthesized_expression "(bVar5 != 0x51)" (( "(") (binary_expression "bVar5 != 0x51" (identifier "bVar5") (!= "!=") (number_literal "0x51")) () ")")) (compound_statement "{\n        iVar6 = FUN_00320870(param_2);\n        if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }\n        return 0xffffffff;\n      }" ({ "{") (expression_statement "iVar6 = FUN_00320870(param_2);" (assignment_expression "iVar6 = FUN_00320870(param_2)" (identifier "iVar6") (= "=") (call_expression "FUN_00320870(param_2)" (identifier "FUN_00320870") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (if_statement "if (iVar6 != -1) {\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }" (if "if") (parenthesized_expression "(iVar6 != -1)" (( "(") (binary_expression "iVar6 != -1" (identifier "iVar6") (!= "!=") (number_literal "-1")) () ")")) (compound_statement "{\n          __n = (size_t)iVar6;\n          sVar9 = strlen((char *)*param_2);\n          if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }\n        }" ({ "{") (expression_statement "__n = (size_t)iVar6;" (assignment_expression "__n = (size_t)iVar6" (identifier "__n") (= "=") (cast_expression "(size_t)iVar6" (( "(") (type_descriptor "size_t" (primitive_type "size_t")) () ")") (identifier "iVar6"))) (; ";")) (expression_statement "sVar9 = strlen((char *)*param_2);" (assignment_expression "sVar9 = strlen((char *)*param_2)" (identifier "sVar9") (= "=") (call_expression "strlen((char *)*param_2)" (identifier "strlen") (argument_list "((char *)*param_2)" (( "(") (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) () ")")))) (; ";")) (if_statement "if ((long)__n <= (long)sVar9) {\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }" (if "if") (parenthesized_expression "((long)__n <= (long)sVar9)" (( "(") (binary_expression "(long)__n <= (long)sVar9" (cast_expression "(long)__n" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__n")) (<= "<=") (cast_expression "(long)sVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "sVar9"))) () ")")) (compound_statement "{\n            if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }\n            *param_2 = *param_2 + __n;\n            return 1;\n          }" ({ "{") (if_statement "if (iVar6 == 0) {\n              FUN_00320bb0(param_3,"0",1);\n            }\n            else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }" (if "if") (parenthesized_expression "(iVar6 == 0)" (( "(") (binary_expression "iVar6 == 0" (identifier "iVar6") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n              FUN_00320bb0(param_3,"0",1);\n            }" ({ "{") (expression_statement "FUN_00320bb0(param_3,"0",1);" (call_expression "FUN_00320bb0(param_3,"0",1)" (identifier "FUN_00320bb0") (argument_list "(param_3,"0",1)" (( "(") (identifier "param_3") (, ",") (string_literal ""0"" (" """) (string_content "0") (" """)) (, ",") (number_literal "1") () ")"))) (; ";")) (} "}")) (else_clause "else {\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }" (else "else") (compound_statement "{\n              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));\n              strncpy(pcVar10,(char *)*param_2,__n);\n              pcVar10[__n] = '\0';\n              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);\n              if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }\n              if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }\n              free(pcVar10);\n            }" ({ "{") (expression_statement "pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));" (assignment_expression "pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1))" (identifier "pcVar10") (= "=") (cast_expression "(char *)FUN_00336e30((long)(iVar6 + 1))" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00336e30((long)(iVar6 + 1))" (identifier "FUN_00336e30") (argument_list "((long)(iVar6 + 1))" (( "(") (cast_expression "(long)(iVar6 + 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(iVar6 + 1)" (( "(") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1")) () ")"))) () ")"))))) (; ";")) (expression_statement "strncpy(pcVar10,(char *)*param_2,__n);" (call_expression "strncpy(pcVar10,(char *)*param_2,__n)" (identifier "strncpy") (argument_list "(pcVar10,(char *)*param_2,__n)" (( "(") (identifier "pcVar10") (, ",") (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (, ",") (identifier "__n") () ")"))) (; ";")) (expression_statement "pcVar10[__n] = '\0';" (assignment_expression "pcVar10[__n] = '\0'" (subscript_expression "pcVar10[__n]" (identifier "pcVar10") ([ "[") (identifier "__n") (] "]")) (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (expression_statement "__ptr = (char *)FUN_003218a0(pcVar10,*param_1);" (assignment_expression "__ptr = (char *)FUN_003218a0(pcVar10,*param_1)" (identifier "__ptr") (= "=") (cast_expression "(char *)FUN_003218a0(pcVar10,*param_1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_003218a0(pcVar10,*param_1)" (identifier "FUN_003218a0") (argument_list "(pcVar10,*param_1)" (( "(") (identifier "pcVar10") (, ",") (pointer_expression "*param_1" (* "*") (identifier "param_1")) () ")"))))) (; ";")) (if_statement "if (param_4 == 1) {\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }" (if "if") (parenthesized_expression "(param_4 == 1)" (( "(") (binary_expression "param_4 == 1" (identifier "param_4") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n                FUN_00320bb0(param_3,&DAT_003fb356,1);\n              }" ({ "{") (expression_statement "FUN_00320bb0(param_3,&DAT_003fb356,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003fb356,1)" (identifier "FUN_00320bb0") (argument_list "(param_3,&DAT_003fb356,1)" (( "(") (identifier "param_3") (, ",") (pointer_expression "&DAT_003fb356" (& "&") (identifier "DAT_003fb356")) (, ",") (number_literal "1") () ")"))) (; ";")) (} "}"))) (if_statement "if (__ptr == (char *)0x0) {\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }\n              else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }" (if "if") (parenthesized_expression "(__ptr == (char *)0x0)" (( "(") (binary_expression "__ptr == (char *)0x0" (identifier "__ptr") (== "==") (cast_expression "(char *)0x0" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n                if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }\n              }" ({ "{") (if_statement "if (*pcVar10 != '\0') {\n                  FUN_00320c60(param_3,pcVar10);\n                }" (if "if") (parenthesized_expression "(*pcVar10 != '\0')" (( "(") (binary_expression "*pcVar10 != '\0'" (pointer_expression "*pcVar10" (* "*") (identifier "pcVar10")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n                  FUN_00320c60(param_3,pcVar10);\n                }" ({ "{") (expression_statement "FUN_00320c60(param_3,pcVar10);" (call_expression "FUN_00320c60(param_3,pcVar10)" (identifier "FUN_00320c60") (argument_list "(param_3,pcVar10)" (( "(") (identifier "param_3") (, ",") (identifier "pcVar10") () ")"))) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }" (else "else") (compound_statement "{\n                if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }\n                free(__ptr);\n              }" ({ "{") (if_statement "if (*__ptr != '\0') {\n                  FUN_00320c60(param_3,__ptr);\n                }" (if "if") (parenthesized_expression "(*__ptr != '\0')" (( "(") (binary_expression "*__ptr != '\0'" (pointer_expression "*__ptr" (* "*") (identifier "__ptr")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n                  FUN_00320c60(param_3,__ptr);\n                }" ({ "{") (expression_statement "FUN_00320c60(param_3,__ptr);" (call_expression "FUN_00320c60(param_3,__ptr)" (identifier "FUN_00320c60") (argument_list "(param_3,__ptr)" (( "(") (identifier "param_3") (, ",") (identifier "__ptr") () ")"))) (; ";")) (} "}"))) (expression_statement "free(__ptr);" (call_expression "free(__ptr)" (identifier "free") (argument_list "(__ptr)" (( "(") (identifier "__ptr") () ")"))) (; ";")) (} "}")))) (expression_statement "free(pcVar10);" (call_expression "free(pcVar10)" (identifier "free") (argument_list "(pcVar10)" (( "(") (identifier "pcVar10") () ")"))) (; ";")) (} "}")))) (expression_statement "*param_2 = *param_2 + __n;" (assignment_expression "*param_2 = *param_2 + __n" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "*param_2 + __n" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (identifier "__n"))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (} "}"))) (return_statement "return 0xffffffff;" (return "return") (number_literal "0xffffffff") (; ";")) (} "}"))) (labeled_statement "LAB_00321c80:\n      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);" (statement_identifier "LAB_00321c80") (: ":") (expression_statement "uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);" (assignment_expression "uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1)" (identifier "uVar11") (= "=") (call_expression "FUN_003245e0(param_1,param_2,param_3,0,1)" (identifier "FUN_003245e0") (argument_list "(param_1,param_2,param_3,0,1)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") (, ",") (number_literal "0") (, ",") (number_literal "1") () ")")))) (; ";"))) (return_statement "return uVar11;" (return "return") (identifier "uVar11") (; ";")) (} "}"))) (if_statement "if (bVar5 != 0x45) {\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }" (if "if") (parenthesized_expression "(bVar5 != 0x45)" (( "(") (binary_expression "bVar5 != 0x45" (identifier "bVar5") (!= "!=") (number_literal "0x45")) () ")")) (compound_statement "{\n      if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }\n      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }\n      if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }\n      if (bVar5 != 0x65) {\n        return 1;\n      }\n      pcVar10 = "e";\n      do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);\n      return 1;\n    }" ({ "{") (if_statement "if (bVar5 == 0x6d) {\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }" (if "if") (parenthesized_expression "(bVar5 == 0x6d)" (( "(") (binary_expression "bVar5 == 0x6d" (identifier "bVar5") (== "==") (number_literal "0x6d")) () ")")) (compound_statement "{\n        FUN_00320bb0(param_3,&DAT_003e8978,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n      }" ({ "{") (expression_statement "FUN_00320bb0(param_3,&DAT_003e8978,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8978,1)" (identifier "FUN_00320bb0") (argument_list "(param_3,&DAT_003e8978,1)" (( "(") (identifier "param_3") (, ",") (pointer_expression "&DAT_003e8978" (& "&") (identifier "DAT_003e8978")) (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "lVar2 = *param_2;" (assignment_expression "lVar2 = *param_2" (identifier "lVar2") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "pbVar12 = (byte *)(lVar2 + 1);" (assignment_expression "pbVar12 = (byte *)(lVar2 + 1)" (identifier "pbVar12") (= "=") (cast_expression "(byte *)(lVar2 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 1)" (( "(") (binary_expression "lVar2 + 1" (identifier "lVar2") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "*param_2 = (long)pbVar12;" (assignment_expression "*param_2 = (long)pbVar12" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)pbVar12" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pbVar12"))) (; ";")) (expression_statement "bVar5 = *(byte *)(lVar2 + 1);" (assignment_expression "bVar5 = *(byte *)(lVar2 + 1)" (identifier "bVar5") (= "=") (pointer_expression "*(byte *)(lVar2 + 1)" (* "*") (cast_expression "(byte *)(lVar2 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 1)" (( "(") (binary_expression "lVar2 + 1" (identifier "lVar2") (+ "+") (number_literal "1")) () ")"))))) (; ";")) (} "}"))) (expression_statement "bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];" (assignment_expression "bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2]" (identifier "bVar1") (= "=") (subscript_expression "(&DAT_003fef20)[(ulong)bVar5 * 2]" (parenthesized_expression "(&DAT_003fef20)" (( "(") (pointer_expression "&DAT_003fef20" (& "&") (identifier "DAT_003fef20")) () ")")) ([ "[") (binary_expression "(ulong)bVar5 * 2" (cast_expression "(ulong)bVar5" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar5")) (* "*") (number_literal "2")) (] "]"))) (; ";")) (while_statement "while ((bVar1 & 4) != 0) {\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }" (while "while") (parenthesized_expression "((bVar1 & 4) != 0)" (( "(") (binary_expression "(bVar1 & 4) != 0" (parenthesized_expression "(bVar1 & 4)" (( "(") (binary_expression "bVar1 & 4" (identifier "bVar1") (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        FUN_00320bb0(param_3,pbVar12,1);\n        lVar2 = *param_2;\n        pbVar12 = (byte *)(lVar2 + 1);\n        *param_2 = (long)pbVar12;\n        bVar5 = *(byte *)(lVar2 + 1);\n        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];\n      }" ({ "{") (expression_statement "FUN_00320bb0(param_3,pbVar12,1);" (call_expression "FUN_00320bb0(param_3,pbVar12,1)" (identifier "FUN_00320bb0") (argument_list "(param_3,pbVar12,1)" (( "(") (identifier "param_3") (, ",") (identifier "pbVar12") (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "lVar2 = *param_2;" (assignment_expression "lVar2 = *param_2" (identifier "lVar2") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "pbVar12 = (byte *)(lVar2 + 1);" (assignment_expression "pbVar12 = (byte *)(lVar2 + 1)" (identifier "pbVar12") (= "=") (cast_expression "(byte *)(lVar2 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 1)" (( "(") (binary_expression "lVar2 + 1" (identifier "lVar2") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "*param_2 = (long)pbVar12;" (assignment_expression "*param_2 = (long)pbVar12" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)pbVar12" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pbVar12"))) (; ";")) (expression_statement "bVar5 = *(byte *)(lVar2 + 1);" (assignment_expression "bVar5 = *(byte *)(lVar2 + 1)" (identifier "bVar5") (= "=") (pointer_expression "*(byte *)(lVar2 + 1)" (* "*") (cast_expression "(byte *)(lVar2 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 1)" (( "(") (binary_expression "lVar2 + 1" (identifier "lVar2") (+ "+") (number_literal "1")) () ")"))))) (; ";")) (expression_statement "bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];" (assignment_expression "bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2]" (identifier "bVar1") (= "=") (subscript_expression "(&DAT_003fef20)[(ulong)bVar5 * 2]" (parenthesized_expression "(&DAT_003fef20)" (( "(") (pointer_expression "&DAT_003fef20" (& "&") (identifier "DAT_003fef20")) () ")")) ([ "[") (binary_expression "(ulong)bVar5 * 2" (cast_expression "(ulong)bVar5" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar5")) (* "*") (number_literal "2")) (] "]"))) (; ";")) (} "}"))) (if_statement "if (bVar5 == 0x2e) {\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }\n      else {\n        bVar5 = *(byte *)*param_2;\n      }" (if "if") (parenthesized_expression "(bVar5 == 0x2e)" (( "(") (binary_expression "bVar5 == 0x2e" (identifier "bVar5") (== "==") (number_literal "0x2e")) () ")")) (compound_statement "{\n        pcVar10 = ".";\n        do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);\n      }" ({ "{") (expression_statement "pcVar10 = ".";" (assignment_expression "pcVar10 = "."" (identifier "pcVar10") (= "=") (string_literal ""."" (" """) (string_content ".") (" """))) (; ";")) (do_statement "do {\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);" (do "do") (compound_statement "{\n          FUN_00320bb0(param_3,pcVar10,1);\n          lVar2 = *param_2;\n          pcVar10 = (char *)(lVar2 + 1);\n          *param_2 = (long)pcVar10;\n          bVar5 = *(byte *)(lVar2 + 1);\n        }" ({ "{") (expression_statement "FUN_00320bb0(param_3,pcVar10,1);" (call_expression "FUN_00320bb0(param_3,pcVar10,1)" (identifier "FUN_00320bb0") (argument_list "(param_3,pcVar10,1)" (( "(") (identifier "param_3") (, ",") (identifier "pcVar10") (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "lVar2 = *param_2;" (assignment_expression "lVar2 = *param_2" (identifier "lVar2") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "pcVar10 = (char *)(lVar2 + 1);" (assignment_expression "pcVar10 = (char *)(lVar2 + 1)" (identifier "pcVar10") (= "=") (cast_expression "(char *)(lVar2 + 1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 1)" (( "(") (binary_expression "lVar2 + 1" (identifier "lVar2") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "*param_2 = (long)pcVar10;" (assignment_expression "*param_2 = (long)pcVar10" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)pcVar10" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar10"))) (; ";")) (expression_statement "bVar5 = *(byte *)(lVar2 + 1);" (assignment_expression "bVar5 = *(byte *)(lVar2 + 1)" (identifier "bVar5") (= "=") (pointer_expression "*(byte *)(lVar2 + 1)" (* "*") (cast_expression "(byte *)(lVar2 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 1)" (( "(") (binary_expression "lVar2 + 1" (identifier "lVar2") (+ "+") (number_literal "1")) () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0)" (( "(") (binary_expression "((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0" (parenthesized_expression "((&DAT_003fef20)[(ulong)bVar5 * 2] & 4)" (( "(") (binary_expression "(&DAT_003fef20)[(ulong)bVar5 * 2] & 4" (subscript_expression "(&DAT_003fef20)[(ulong)bVar5 * 2]" (parenthesized_expression "(&DAT_003fef20)" (( "(") (pointer_expression "&DAT_003fef20" (& "&") (identifier "DAT_003fef20")) () ")")) ([ "[") (binary_expression "(ulong)bVar5 * 2" (cast_expression "(ulong)bVar5" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar5")) (* "*") (number_literal "2")) (] "]")) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}")) (else_clause "else {\n        bVar5 = *(byte *)*param_2;\n      }" (else "else") (compound_statement "{\n        bVar5 = *(byte *)*param_2;\n      }" ({ "{") (expression_statement "bVar5 = *(byte *)*param_2;" (assignment_expression "bVar5 = *(byte *)*param_2" (identifier "bVar5") (= "=") (pointer_expression "*(byte *)*param_2" (* "*") (cast_expression "(byte *)*param_2" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2"))))) (; ";")) (} "}")))) (if_statement "if (bVar5 != 0x65) {\n        return 1;\n      }" (if "if") (parenthesized_expression "(bVar5 != 0x65)" (( "(") (binary_expression "bVar5 != 0x65" (identifier "bVar5") (!= "!=") (number_literal "0x65")) () ")")) (compound_statement "{\n        return 1;\n      }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "pcVar10 = "e";" (assignment_expression "pcVar10 = "e"" (identifier "pcVar10") (= "=") (string_literal ""e"" (" """) (string_content "e") (" """))) (; ";")) (do_statement "do {\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);" (do "do") (compound_statement "{\n        FUN_00320bb0(param_3,pcVar10,1);\n        lVar2 = *param_2;\n        pcVar10 = (char *)(lVar2 + 1);\n        *param_2 = (long)pcVar10;\n      }" ({ "{") (expression_statement "FUN_00320bb0(param_3,pcVar10,1);" (call_expression "FUN_00320bb0(param_3,pcVar10,1)" (identifier "FUN_00320bb0") (argument_list "(param_3,pcVar10,1)" (( "(") (identifier "param_3") (, ",") (identifier "pcVar10") (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "lVar2 = *param_2;" (assignment_expression "lVar2 = *param_2" (identifier "lVar2") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "pcVar10 = (char *)(lVar2 + 1);" (assignment_expression "pcVar10 = (char *)(lVar2 + 1)" (identifier "pcVar10") (= "=") (cast_expression "(char *)(lVar2 + 1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 1)" (( "(") (binary_expression "lVar2 + 1" (identifier "lVar2") (+ "+") (number_literal "1")) () ")")))) (; ";")) (expression_statement "*param_2 = (long)pcVar10;" (assignment_expression "*param_2 = (long)pcVar10" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)pcVar10" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pcVar10"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0)" (( "(") (binary_expression "((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0" (parenthesized_expression "((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4)" (( "(") (binary_expression "(&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4" (subscript_expression "(&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2]" (parenthesized_expression "(&DAT_003fef20)" (( "(") (pointer_expression "&DAT_003fef20" (& "&") (identifier "DAT_003fef20")) () ")")) ([ "[") (binary_expression "(ulong)*(byte *)(lVar2 + 1) * 2" (binary_expression "(ulong)*(byte *)(lVar2 + 1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(byte *)(lVar2 + 1)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar2 + 1)" (( "(") (binary_expression "lVar2 + 1" (identifier "lVar2") (+ "+") (number_literal "1")) () ")")))) (* "*") (number_literal "2")) (] "]")) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (labeled_statement "LAB_00321eb0:\n    uVar11 = FUN_00321f80(param_1,param_2,param_3);" (statement_identifier "LAB_00321eb0") (: ":") (expression_statement "uVar11 = FUN_00321f80(param_1,param_2,param_3);" (assignment_expression "uVar11 = FUN_00321f80(param_1,param_2,param_3)" (identifier "uVar11") (= "=") (call_expression "FUN_00321f80(param_1,param_2,param_3)" (identifier "FUN_00321f80") (argument_list "(param_1,param_2,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (identifier "param_3") () ")")))) (; ";"))) (return_statement "return uVar11;" (return "return") (identifier "uVar11") (; ";")) (} "}"))) (if_statement "if (bVar5 == 0x45) goto LAB_00321eb0;" (if "if") (parenthesized_expression "(bVar5 == 0x45)" (( "(") (binary_expression "bVar5 == 0x45" (identifier "bVar5") (== "==") (number_literal "0x45")) () ")")) (goto_statement "goto LAB_00321eb0;" (goto "goto") (statement_identifier "LAB_00321eb0") (; ";"))) (if_statement "if ((bVar5 == 0x51) || (bVar5 == 0x4b)) goto LAB_00321c80;" (if "if") (parenthesized_expression "((bVar5 == 0x51) || (bVar5 == 0x4b))" (( "(") (binary_expression "(bVar5 == 0x51) || (bVar5 == 0x4b)" (parenthesized_expression "(bVar5 == 0x51)" (( "(") (binary_expression "bVar5 == 0x51" (identifier "bVar5") (== "==") (number_literal "0x51")) () ")")) (|| "||") (parenthesized_expression "(bVar5 == 0x4b)" (( "(") (binary_expression "bVar5 == 0x4b" (identifier "bVar5") (== "==") (number_literal "0x4b")) () ")"))) () ")")) (goto_statement "goto LAB_00321c80;" (goto "goto") (statement_identifier "LAB_00321c80") (; ";"))) (if_statement "if (bVar5 == 0x5f) {\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }\n  else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }" (if "if") (parenthesized_expression "(bVar5 == 0x5f)" (( "(") (binary_expression "bVar5 == 0x5f" (identifier "bVar5") (== "==") (number_literal "0x5f")) () ")")) (compound_statement "{\n    if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }\n    bVar4 = false;\n    FUN_00320bb0(param_3,&DAT_003e8978,1);\n    *param_2 = *param_2 + 2;\n  }" ({ "{") (if_statement "if (pbVar12[1] != 0x6d) {\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }" (if "if") (parenthesized_expression "(pbVar12[1] != 0x6d)" (( "(") (binary_expression "pbVar12[1] != 0x6d" (subscript_expression "pbVar12[1]" (identifier "pbVar12") ([ "[") (number_literal "1") (] "]")) (!= "!=") (number_literal "0x6d")) () ")")) (compound_statement "{\n      bVar4 = true;\n      bVar3 = false;\n      uVar8 = FUN_00320920(param_2);\n      goto LAB_00321c67;\n    }" ({ "{") (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" (identifier "bVar4") (= "=") (true "true")) (; ";")) (expression_statement "bVar3 = false;" (assignment_expression "bVar3 = false" (identifier "bVar3") (= "=") (false "false")) (; ";")) (expression_statement "uVar8 = FUN_00320920(param_2);" (assignment_expression "uVar8 = FUN_00320920(param_2)" (identifier "uVar8") (= "=") (call_expression "FUN_00320920(param_2)" (identifier "FUN_00320920") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (goto_statement "goto LAB_00321c67;" (goto "goto") (statement_identifier "LAB_00321c67") (; ";")) (} "}"))) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" (identifier "bVar4") (= "=") (false "false")) (; ";")) (expression_statement "FUN_00320bb0(param_3,&DAT_003e8978,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8978,1)" (identifier "FUN_00320bb0") (argument_list "(param_3,&DAT_003e8978,1)" (( "(") (identifier "param_3") (, ",") (pointer_expression "&DAT_003e8978" (& "&") (identifier "DAT_003e8978")) (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "*param_2 = *param_2 + 2;" (assignment_expression "*param_2 = *param_2 + 2" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "*param_2 + 2" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "2"))) (; ";")) (} "}")) (else_clause "else {\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }" (else "else") (compound_statement "{\n    bVar4 = true;\n    if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }\n  }" ({ "{") (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" (identifier "bVar4") (= "=") (true "true")) (; ";")) (if_statement "if (bVar5 == 0x6d) {\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }" (if "if") (parenthesized_expression "(bVar5 == 0x6d)" (( "(") (binary_expression "bVar5 == 0x6d" (identifier "bVar5") (== "==") (number_literal "0x6d")) () ")")) (compound_statement "{\n      FUN_00320bb0(param_3,&DAT_003e8978,1);\n      *param_2 = *param_2 + 1;\n    }" ({ "{") (expression_statement "FUN_00320bb0(param_3,&DAT_003e8978,1);" (call_expression "FUN_00320bb0(param_3,&DAT_003e8978,1)" (identifier "FUN_00320bb0") (argument_list "(param_3,&DAT_003e8978,1)" (( "(") (identifier "param_3") (, ",") (pointer_expression "&DAT_003e8978" (& "&") (identifier "DAT_003e8978")) (, ",") (number_literal "1") () ")"))) (; ";")) (expression_statement "*param_2 = *param_2 + 1;" (assignment_expression "*param_2 = *param_2 + 1" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (binary_expression "*param_2 + 1" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "1"))) (; ";")) (} "}"))) (} "}")))) (expression_statement "bVar3 = true;" (assignment_expression "bVar3 = true" (identifier "bVar3") (= "=") (true "true")) (; ";")) (expression_statement "uVar8 = FUN_00320870(param_2);" (assignment_expression "uVar8 = FUN_00320870(param_2)" (identifier "uVar8") (= "=") (call_expression "FUN_00320870(param_2)" (identifier "FUN_00320870") (argument_list "(param_2)" (( "(") (identifier "param_2") () ")")))) (; ";")) (labeled_statement "LAB_00321c67:\n  if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }" (statement_identifier "LAB_00321c67") (: ":") (if_statement "if (uVar8 != 0xffffffff) {\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }" (if "if") (parenthesized_expression "(uVar8 != 0xffffffff)" (( "(") (binary_expression "uVar8 != 0xffffffff" (identifier "uVar8") (!= "!=") (number_literal "0xffffffff")) () ")")) (compound_statement "{\n    sprintf(local_58,"%d",(ulong)uVar8);\n    if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }\n    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }\n    return 1;\n  }" ({ "{") (expression_statement "sprintf(local_58,"%d",(ulong)uVar8);" (call_expression "sprintf(local_58,"%d",(ulong)uVar8)" (identifier "sprintf") (argument_list "(local_58,"%d",(ulong)uVar8)" (( "(") (identifier "local_58") (, ",") (string_literal ""%d"" (" """) (string_content "%d") (" """)) (, ",") (cast_expression "(ulong)uVar8" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar8")) () ")"))) (; ";")) (if_statement "if (local_58[0] != '\0') {\n      FUN_00320c60(param_3,local_58);\n    }" (if "if") (parenthesized_expression "(local_58[0] != '\0')" (( "(") (binary_expression "local_58[0] != '\0'" (subscript_expression "local_58[0]" (identifier "local_58") ([ "[") (number_literal "0") (] "]")) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      FUN_00320c60(param_3,local_58);\n    }" ({ "{") (expression_statement "FUN_00320c60(param_3,local_58);" (call_expression "FUN_00320c60(param_3,local_58)" (identifier "FUN_00320c60") (argument_list "(param_3,local_58)" (( "(") (identifier "param_3") (, ",") (identifier "local_58") () ")"))) (; ";")) (} "}"))) (if_statement "if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {\n      *param_2 = (long)((char *)*param_2 + 1);\n    }" (if "if") (parenthesized_expression "(((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_'))" (( "(") (binary_expression "((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')" (parenthesized_expression "((9 < (int)uVar8 || bVar3) && (!bVar4))" (( "(") (binary_expression "(9 < (int)uVar8 || bVar3) && (!bVar4)" (parenthesized_expression "(9 < (int)uVar8 || bVar3)" (( "(") (binary_expression "9 < (int)uVar8 || bVar3" (binary_expression "9 < (int)uVar8" (number_literal "9") (< "<") (cast_expression "(int)uVar8" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "uVar8"))) (|| "||") (identifier "bVar3")) () ")")) (&& "&&") (parenthesized_expression "(!bVar4)" (( "(") (unary_expression "!bVar4" (! "!") (identifier "bVar4")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(*(char *)*param_2 == '_')" (( "(") (binary_expression "*(char *)*param_2 == '_'" (pointer_expression "*(char *)*param_2" (* "*") (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2")))) (== "==") (char_literal "'_'" (' "'") (character "_") (' "'"))) () ")"))) () ")")) (compound_statement "{\n      *param_2 = (long)((char *)*param_2 + 1);\n    }" ({ "{") (expression_statement "*param_2 = (long)((char *)*param_2 + 1);" (assignment_expression "*param_2 = (long)((char *)*param_2 + 1)" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (= "=") (cast_expression "(long)((char *)*param_2 + 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "((char *)*param_2 + 1)" (( "(") (binary_expression "(char *)*param_2 + 1" (cast_expression "(char *)*param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (+ "+") (number_literal "1")) () ")")))) (; ";")) (} "}"))) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}")))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

int function_1(type_1 *work,char **mangled,type_2 *s,type_3 var_9)

{
  type_4 var_25;
  bool var_29;
  bool bVar3;
  type_4 var_1;
  int var_4;
  int var_5;
  type_5 var_27;
  size_t sVar8;
  char *var_6;
  char *var_21;
  type_4 *var_2;
  size_t var_23;
  char tmp [2];
  
  var_2 = (type_4 *)*mangled;
  var_1 = *var_2;
  if (var_1 == 0x59) {
    *mangled = (char *)(var_2 + 1);
    var_4 = var_3(mangled);
    if (var_4 == -1) {
      return -1;
    }
    if ((work->tmpl_argvec != (char **)0x0) && (work->ntmpl_args <= var_4)) {
      return -1;
    }
    var_5 = var_3(mangled);
    if (var_5 == -1) {
      return -1;
    }
    if (work->tmpl_argvec != (char **)0x0) {
      var_6 = work->tmpl_argvec[var_4];
      if (var_6 == (char *)0x0) {
        return 1;
      }
      if (*var_6 == '\0') {
        return 1;
      }
      var_7(s,var_6);
      return 1;
    }
    var_8(s,var_4);
    return 1;
  }
  if (var_9 != var_10) {
    if (var_9 == var_11) {
      if (var_1 == 0x6d) {
        var_12(s,"-",1);
        *mangled = *mangled + 1;
      }
      var_12(s,"\'",1);
      var_4 = var_13(mangled);
      if (0 < var_4) {
        tmp[0] = (char)var_4;
        tmp[1] = '\0';
        var_12(s,tmp,1);
        var_12(s,"\'",1);
        return 1;
      }
      return 0;
    }
    if (var_9 == var_14) {
      var_4 = var_13(mangled);
      if (var_4 == 0) {
        var_12(s,"false",5);
        return 1;
      }
      if (var_4 != 1) {
        return 0;
      }
      var_12(s,"true",4);
      return 1;
    }
    if (var_9 != var_15) {
      if (2 < var_9 - var_16) {
        return 1;
      }
      if (var_1 != 0x51) {
        var_4 = var_13(mangled);
        if (var_4 != -1) {
          var_23 = (size_t)var_4;
          sVar8 = var_17(*mangled);
          if ((long)var_23 <= (long)sVar8) {
            if (var_4 == 0) {
              var_12(s,"0",1);
            }
            else {
              var_6 = (char *)var_18((long)(var_4 + 1));
              var_19(var_6,*mangled,var_23);
              var_6[var_23] = '\0';
              var_21 = var_20(var_6,work->options);
              if (var_9 == var_16) {
                var_12(s,"&",1);
              }
              if (var_21 == (char *)0x0) {
                if (*var_6 != '\0') {
                  var_7(s,var_6);
                }
              }
              else {
                if (*var_21 != '\0') {
                  var_7(s,var_21);
                }
                var_22(var_21);
              }
              var_22(var_6);
            }
            *mangled = *mangled + var_23;
            return 1;
          }
        }
        return -1;
      }
LAB_00321c80:
      var_4 = var_24(work,mangled,s,0,1);
      return var_4;
    }
    if (var_1 != 0x45) {
      if (var_1 == 0x6d) {
        var_12(s,"-",1);
        var_6 = *mangled;
        var_2 = (type_4 *)(var_6 + 1);
        *mangled = (char *)var_2;
        var_1 = var_6[1];
      }
      var_25 = (type_4)_sch_istable[var_1];
      while ((var_25 & 4) != 0) {
        var_12(s,(char *)var_2,1);
        var_6 = *mangled;
        var_2 = (type_4 *)(var_6 + 1);
        *mangled = (char *)var_2;
        var_1 = var_6[1];
        var_25 = (type_4)_sch_istable[var_1];
      }
      if (var_1 == 0x2e) {
        var_6 = ".";
        do {
          var_12(s,var_6,1);
          var_21 = *mangled;
          var_6 = var_21 + 1;
          *mangled = var_6;
          var_1 = var_21[1];
        } while ((_sch_istable[var_1] & 4) != 0);
      }
      else {
        var_1 = **mangled;
      }
      if (var_1 != 0x65) {
        return 1;
      }
      var_6 = "e";
      do {
        var_12(s,var_6,1);
        var_21 = *mangled;
        var_6 = var_21 + 1;
        *mangled = var_6;
      } while ((_sch_istable[(type_4)var_21[1]] & 4) != 0);
      return 1;
    }
LAB_00321eb0:
    var_4 = var_26(work,mangled,s,var_9);
    return var_4;
  }
  if (var_1 == 0x45) goto LAB_00321eb0;
  if ((var_1 == 0x51) || (var_1 == 0x4b)) goto LAB_00321c80;
  if (var_1 == 0x5f) {
    if (var_2[1] != 0x6d) {
      bVar3 = true;
      var_29 = false;
      var_27 = var_3(mangled);
      goto LAB_00321c67;
    }
    bVar3 = false;
    var_12(s,"-",1);
    *mangled = *mangled + 2;
  }
  else {
    bVar3 = true;
    if (var_1 == 0x6d) {
      var_12(s,"-",1);
      *mangled = *mangled + 1;
    }
  }
  var_29 = true;
  var_27 = var_13(mangled);
LAB_00321c67:
  if (var_27 != 0xffffffff) {
    var_28(tmp,"%d",(type_6)var_27);
    if (tmp[0] != '\0') {
      var_7(s,tmp);
    }
    if (((9 < (int)var_27 || var_29) && (!bVar3)) && (**mangled == '_')) {
      *mangled = *mangled + 1;
    }
    return 1;
  }
  return 0;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) declarator: (identifier)))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal))) right: (identifier))))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (number_literal)))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier)))) (return_statement (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (number_literal)))) (return_statement (number_literal)))) (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (string_literal (string_content)) (number_literal)))) (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (number_literal)))) (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (binary_expression left: (identifier) right: (number_literal)))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (string_literal (string_content)) (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))) (identifier)))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (identifier)) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier)))) (return_statement (number_literal)))))) (return_statement (number_literal)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (number_literal) (number_literal)))))) (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))) (while_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (number_literal))) body: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content)))) (do_statement body: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (string_literal (string_content)))) (do_statement body: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier))))) condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (parenthesized_expression (pointer_expression argument: (identifier))) index: (binary_expression left: (binary_expression left: (parenthesized_expression (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) right: (number_literal)))) (return_statement (number_literal)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier)))))) (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) consequence: (goto_statement label: (statement_identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (true))) (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) alternative: (else_clause (compound_statement (expression_statement (assignment_expression left: (identifier) right: (true))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (identifier)) (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))))))) (expression_statement (assignment_expression left: (identifier) right: (true))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (string_literal (string_content)) (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (char_literal (escape_sequence)))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier))) right: (identifier))) right: (parenthesized_expression (unary_expression argument: (identifier))))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier)))) right: (char_literal (character)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))) right: (number_literal)))))))) (return_statement (number_literal))))) (return_statement (number_literal)))))

undefined8 MASKED(undefined4 *param_1,long *param_2,undefined8 param_3,int param_4)

{
  byte bVar1;
  long lVar2;
  bool bVar3;
  bool bVar4;
  byte bVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  size_t sVar9;
  char *pcVar10;
  char *__ptr;
  undefined8 uVar11;
  byte *pbVar12;
  size_t __n;
  char local_58 [40];
  
  pbVar12 = (byte *)*param_2;
  bVar5 = *pbVar12;
  if (bVar5 == 0x59) {
    *param_2 = (long)(pbVar12 + 1);
    iVar6 = FUN_00320920(param_2);
    if (iVar6 == -1) {
      return 0xffffffff;
    }
    if ((*(long *)(param_1 + 0x14) != 0) && ((int)param_1[0x16] <= iVar6)) {
      return 0xffffffff;
    }
    iVar7 = FUN_00320920(param_2);
    if (iVar7 == -1) {
      return 0xffffffff;
    }
    if (*(long *)(param_1 + 0x14) != 0) {
      pcVar10 = *(char **)(*(long *)(param_1 + 0x14) + (long)iVar6 * 8);
      if (pcVar10 == (char *)0x0) {
        return 1;
      }
      if (*pcVar10 == '\0') {
        return 1;
      }
      FUN_00320c60(param_3);
      return 1;
    }
    FUN_00320ca0(param_3,iVar6);
    return 1;
  }
  if (param_4 != 4) {
    if (param_4 == 6) {
      if (bVar5 == 0x6d) {
        FUN_00320bb0(param_3,&DAT_003e8978,1);
        *param_2 = *param_2 + 1;
      }
      FUN_00320bb0(param_3,&DAT_003e261d,1);
      iVar6 = FUN_00320870(param_2);
      if (0 < iVar6) {
        local_58[0] = (char)iVar6;
        local_58[1] = 0;
        FUN_00320bb0(param_3,local_58,1);
        FUN_00320bb0(param_3,&DAT_003e261d,1);
        return 1;
      }
      return 0;
    }
    if (param_4 == 5) {
      iVar6 = FUN_00320870(param_2);
      if (iVar6 == 0) {
        FUN_00320bb0(param_3,"false",5);
        return 1;
      }
      if (iVar6 != 1) {
        return 0;
      }
      FUN_00320bb0(param_3,&DAT_003e8a7b,4);
      return 1;
    }
    if (param_4 != 7) {
      if (2 < param_4 - 1U) {
        return 1;
      }
      if (bVar5 != 0x51) {
        iVar6 = FUN_00320870(param_2);
        if (iVar6 != -1) {
          __n = (size_t)iVar6;
          sVar9 = strlen((char *)*param_2);
          if ((long)__n <= (long)sVar9) {
            if (iVar6 == 0) {
              FUN_00320bb0(param_3,"0",1);
            }
            else {
              pcVar10 = (char *)FUN_00336e30((long)(iVar6 + 1));
              strncpy(pcVar10,(char *)*param_2,__n);
              pcVar10[__n] = '\0';
              __ptr = (char *)FUN_003218a0(pcVar10,*param_1);
              if (param_4 == 1) {
                FUN_00320bb0(param_3,&DAT_003fb356,1);
              }
              if (__ptr == (char *)0x0) {
                if (*pcVar10 != '\0') {
                  FUN_00320c60(param_3,pcVar10);
                }
              }
              else {
                if (*__ptr != '\0') {
                  FUN_00320c60(param_3,__ptr);
                }
                free(__ptr);
              }
              free(pcVar10);
            }
            *param_2 = *param_2 + __n;
            return 1;
          }
        }
        return 0xffffffff;
      }
LAB_00321c80:
      uVar11 = FUN_003245e0(param_1,param_2,param_3,0,1);
      return uVar11;
    }
    if (bVar5 != 0x45) {
      if (bVar5 == 0x6d) {
        FUN_00320bb0(param_3,&DAT_003e8978,1);
        lVar2 = *param_2;
        pbVar12 = (byte *)(lVar2 + 1);
        *param_2 = (long)pbVar12;
        bVar5 = *(byte *)(lVar2 + 1);
      }
      bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];
      while ((bVar1 & 4) != 0) {
        FUN_00320bb0(param_3,pbVar12,1);
        lVar2 = *param_2;
        pbVar12 = (byte *)(lVar2 + 1);
        *param_2 = (long)pbVar12;
        bVar5 = *(byte *)(lVar2 + 1);
        bVar1 = (&DAT_003fef20)[(ulong)bVar5 * 2];
      }
      if (bVar5 == 0x2e) {
        pcVar10 = ".";
        do {
          FUN_00320bb0(param_3,pcVar10,1);
          lVar2 = *param_2;
          pcVar10 = (char *)(lVar2 + 1);
          *param_2 = (long)pcVar10;
          bVar5 = *(byte *)(lVar2 + 1);
        } while (((&DAT_003fef20)[(ulong)bVar5 * 2] & 4) != 0);
      }
      else {
        bVar5 = *(byte *)*param_2;
      }
      if (bVar5 != 0x65) {
        return 1;
      }
      pcVar10 = "e";
      do {
        FUN_00320bb0(param_3,pcVar10,1);
        lVar2 = *param_2;
        pcVar10 = (char *)(lVar2 + 1);
        *param_2 = (long)pcVar10;
      } while (((&DAT_003fef20)[(ulong)*(byte *)(lVar2 + 1) * 2] & 4) != 0);
      return 1;
    }
LAB_00321eb0:
    uVar11 = FUN_00321f80(param_1,param_2,param_3);
    return uVar11;
  }
  if (bVar5 == 0x45) goto LAB_00321eb0;
  if ((bVar5 == 0x51) || (bVar5 == 0x4b)) goto LAB_00321c80;
  if (bVar5 == 0x5f) {
    if (pbVar12[1] != 0x6d) {
      bVar4 = true;
      bVar3 = false;
      uVar8 = FUN_00320920(param_2);
      goto LAB_00321c67;
    }
    bVar4 = false;
    FUN_00320bb0(param_3,&DAT_003e8978,1);
    *param_2 = *param_2 + 2;
  }
  else {
    bVar4 = true;
    if (bVar5 == 0x6d) {
      FUN_00320bb0(param_3,&DAT_003e8978,1);
      *param_2 = *param_2 + 1;
    }
  }
  bVar3 = true;
  uVar8 = FUN_00320870(param_2);
LAB_00321c67:
  if (uVar8 != 0xffffffff) {
    sprintf(local_58,"%d",(ulong)uVar8);
    if (local_58[0] != '\0') {
      FUN_00320c60(param_3,local_58);
    }
    if (((9 < (int)uVar8 || bVar3) && (!bVar4)) && (*(char *)*param_2 == '_')) {
      *param_2 = (long)((char *)*param_2 + 1);
    }
    return 1;
  }
  return 0;
}

