
size_t sub_actual(size_t start,sb *in,sb *t,hash_control *formal_hash,int kind,sb *out,
                 int copyifnotthere)

{
  size_t sVar1;
  char *pcVar2;
  void *pvVar3;
  
  sVar1 = get_token(start,in,(sb *)&in->len,t);
  if ((sVar1 < in->len) && (kind == in->ptr[sVar1])) {
    if (((macro_mri == 0) || (macro_strip_at != 0)) && ((macro_strip_at == 0 || (kind == 0x40)))) {
      sVar1 = sVar1 + 1;
      goto LAB_0011c995;
    }
  }
  else {
LAB_0011c995:
    if ((macro_strip_at != 0) && (kind == 0x40)) {
      if ((start == sVar1) || (in->ptr[sVar1 - 1] != '@')) goto LAB_0011ca20;
      pcVar2 = sb_terminate(t);
      pvVar3 = hash_find(formal_hash,pcVar2);
      if (pvVar3 == (void *)0x0) goto LAB_0011ca20;
      goto LAB_0011c9bb;
    }
  }
  pcVar2 = sb_terminate(t);
  pvVar3 = hash_find(formal_hash,pcVar2);
  if (pvVar3 == (void *)0x0) {
    if (kind == 0x26) {
      sb_add_char(out,0x26);
      sb_add_sb(out,t);
      if (start == sVar1) {
        return sVar1;
      }
      if (in->ptr[sVar1 - 1] != '&') {
        return sVar1;
      }
      sb_add_char(out,0x26);
      return sVar1;
    }
LAB_0011ca20:
    if (copyifnotthere != 0) {
      sb_add_sb(out,t);
      return sVar1;
    }
    sb_add_char(out,0x5c);
    sb_add_sb(out,t);
    return sVar1;
  }
LAB_0011c9bb:
  if (*(long *)((long)pvVar3 + 0x40) == 0) {
    sb_add_sb(out,(sb *)((long)pvVar3 + 0x20));
  }
  else {
    sb_add_sb(out,(sb *)((long)pvVar3 + 0x38));
  }
  return sVar1;
}



ulong FUN_0011c940(ulong param_1,long *param_2,undefined8 param_3,undefined8 param_4,int param_5,
                  undefined8 param_6,int param_7)

{
  ulong uVar1;
  undefined8 uVar2;
  long lVar3;
  
  uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3);
  if ((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))) {
    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))
    {
      uVar1 = uVar1 + 1;
      goto LAB_0011c995;
    }
  }
  else {
LAB_0011c995:
    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {
      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;
      uVar2 = FUN_001280b0(param_3);
      lVar3 = FUN_00119460(param_4,uVar2);
      if (lVar3 == 0) goto LAB_0011ca20;
      goto LAB_0011c9bb;
    }
  }
  uVar2 = FUN_001280b0(param_3);
  lVar3 = FUN_00119460(param_4,uVar2);
  if (lVar3 == 0) {
    if (param_5 == 0x26) {
      FUN_00128010(param_6,0x26);
      FUN_00127f60(param_6,param_3);
      if (param_1 == uVar1) {
        return uVar1;
      }
      if (*(char *)(*param_2 + -1 + uVar1) != '&') {
        return uVar1;
      }
      FUN_00128010(param_6,0x26);
      return uVar1;
    }
LAB_0011ca20:
    if (param_7 != 0) {
      FUN_00127f60(param_6,param_3);
      return uVar1;
    }
    FUN_00128010(param_6,0x5c);
    FUN_00127f60(param_6,param_3);
    return uVar1;
  }
LAB_0011c9bb:
  if (*(long *)(lVar3 + 0x40) == 0) {
    FUN_00127f60(param_6,lVar3 + 0x20);
  }
  else {
    FUN_00127f60(param_6,lVar3 + 0x38);
  }
  return uVar1;
}


PUSH R15
PUSH R14
MOV R14,R9
PUSH R13
MOV R13,RDI
PUSH R12
MOV R12D,R8D
PUSH RBP
MOV RBP,RDX
LEA RDX,[RSI + 0x8]
PUSH RBX
MOV RBX,RSI
SUB RSP,0x18
MOV qword ptr [RSP + 0x8],RCX
MOV RCX,RBP
CALL 0x0011c860
CMP RAX,qword ptr [RBX + 0x8]
MOV R15,RAX
MOV EAX,dword ptr [0x0019d200]
JNC 0x0011c98e
MOV RCX,qword ptr [RBX]
MOVSX ECX,byte ptr [RCX + R15*0x1]
CMP R12D,ECX
JZ 0x0011ca90
CMP R12D,0x40
SETZ CL
TEST EAX,EAX
JZ 0x0011c99d
TEST CL,CL
JNZ 0x0011c9f0
MOV RDI,RBP
CALL 0x001280b0
MOV RDI,qword ptr [RSP + 0x8]
MOV RSI,RAX
CALL 0x00119460
TEST RAX,RAX
JZ 0x0011ca40
CMP qword ptr [RAX + 0x40],0x0
JNZ 0x0011c9e0
LEA RSI,[RAX + 0x20]
MOV RDI,R14
CALL 0x00127f60
ADD RSP,0x18
MOV RAX,R15
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
LEA RSI,[RAX + 0x38]
MOV RDI,R14
CALL 0x00127f60
JMP 0x0011c9ce
CMP R13,R15
JZ 0x0011ca20
MOV RAX,qword ptr [RBX]
CMP byte ptr [RAX + R15*0x1 + -0x1],0x40
JNZ 0x0011ca20
MOV RDI,RBP
CALL 0x001280b0
MOV RDI,qword ptr [RSP + 0x8]
MOV RSI,RAX
CALL 0x00119460
TEST RAX,RAX
JNZ 0x0011c9bb
NOP word ptr [RAX + RAX*0x1]
MOV EAX,dword ptr [RSP + 0x50]
TEST EAX,EAX
JZ 0x0011cac0
MOV RSI,RBP
MOV RDI,R14
CALL 0x00127f60
JMP 0x0011c9ce
CMP R12D,0x26
JNZ 0x0011ca20
MOV ESI,0x26
MOV RDI,R14
CALL 0x00128010
MOV RSI,RBP
MOV RDI,R14
CALL 0x00127f60
CMP R13,R15
JZ 0x0011c9ce
MOV RAX,qword ptr [RBX]
CMP byte ptr [RAX + R15*0x1 + -0x1],0x26
JNZ 0x0011c9ce
MOV ESI,0x26
MOV RDI,R14
CALL 0x00128010
JMP 0x0011c9ce
MOV EDX,dword ptr [0x0019d204]
TEST EDX,EDX
JZ 0x0011caa2
TEST EAX,EAX
JZ 0x0011c99d
CMP R12D,0x40
SETZ CL
TEST EAX,EAX
JZ 0x0011cab5
TEST CL,CL
JZ 0x0011c99d
ADD R15,0x1
JMP 0x0011c995
MOV RDI,R14
MOV ESI,0x5c
CALL 0x00128010
MOV RSI,RBP
MOV RDI,R14
CALL 0x00127f60
JMP 0x0011c9ce
(translation_unit "ulong FUN_0011c940(ulong param_1,long *param_2,undefined8 param_3,undefined8 param_4,int param_5,\n                  undefined8 param_6,int param_7)\n\n{\n  ulong uVar1;\n  undefined8 uVar2;\n  long lVar3;\n  \n  uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3);\n  if ((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))) {\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }\n  uVar2 = FUN_001280b0(param_3);\n  lVar3 = FUN_00119460(param_4,uVar2);\n  if (lVar3 == 0) {\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }\nLAB_0011c9bb:\n  if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }\n  return uVar1;\n}\n\n" (function_definition "ulong FUN_0011c940(ulong param_1,long *param_2,undefined8 param_3,undefined8 param_4,int param_5,\n                  undefined8 param_6,int param_7)\n\n{\n  ulong uVar1;\n  undefined8 uVar2;\n  long lVar3;\n  \n  uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3);\n  if ((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))) {\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }\n  uVar2 = FUN_001280b0(param_3);\n  lVar3 = FUN_00119460(param_4,uVar2);\n  if (lVar3 == 0) {\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }\nLAB_0011c9bb:\n  if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }\n  return uVar1;\n}" type_identifier (function_declarator "FUN_0011c940(ulong param_1,long *param_2,undefined8 param_3,undefined8 param_4,int param_5,\n                  undefined8 param_6,int param_7)" identifier (parameter_list "(ulong param_1,long *param_2,undefined8 param_3,undefined8 param_4,int param_5,\n                  undefined8 param_6,int param_7)" ( (parameter_declaration "ulong param_1" type_identifier 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 "undefined8 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "undefined8 param_6" type_identifier identifier) , (parameter_declaration "int param_7" primitive_type identifier) ))) (compound_statement "{\n  ulong uVar1;\n  undefined8 uVar2;\n  long lVar3;\n  \n  uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3);\n  if ((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))) {\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }\n  uVar2 = FUN_001280b0(param_3);\n  lVar3 = FUN_00119460(param_4,uVar2);\n  if (lVar3 == 0) {\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }\nLAB_0011c9bb:\n  if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }\n  return uVar1;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (expression_statement "uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3);" (assignment_expression "uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3)" identifier = (call_expression "FUN_0011c860(param_1,param_2,param_2 + 1,param_3)" identifier (argument_list "(param_1,param_2,param_2 + 1,param_3)" ( identifier , identifier , (binary_expression "param_2 + 1" identifier + number_literal) , identifier )))) ;) (if_statement "if ((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))) {\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }" if (parenthesized_expression "((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1)))" ( (binary_expression "(uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))" (parenthesized_expression "(uVar1 < (ulong)param_2[1])" ( (binary_expression "uVar1 < (ulong)param_2[1]" identifier < (cast_expression "(ulong)param_2[1]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) )) && (parenthesized_expression "(param_5 == *(char *)(*param_2 + uVar1))" ( (binary_expression "param_5 == *(char *)(*param_2 + uVar1)" identifier == (pointer_expression "*(char *)(*param_2 + uVar1)" * (cast_expression "(char *)(*param_2 + uVar1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + uVar1)" ( (binary_expression "*param_2 + uVar1" (pointer_expression "*param_2" * identifier) + identifier) ))))) ))) )) (compound_statement "{\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }" { (if_statement "if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }" if (parenthesized_expression "(((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))" ( (binary_expression "((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40)))" (parenthesized_expression "((DAT_0019d204 == 0) || (DAT_0019d200 != 0))" ( (binary_expression "(DAT_0019d204 == 0) || (DAT_0019d200 != 0)" (parenthesized_expression "(DAT_0019d204 == 0)" ( (binary_expression "DAT_0019d204 == 0" identifier == number_literal) )) || (parenthesized_expression "(DAT_0019d200 != 0)" ( (binary_expression "DAT_0019d200 != 0" identifier != number_literal) ))) )) && (parenthesized_expression "((DAT_0019d200 == 0 || (param_5 == 0x40)))" ( (parenthesized_expression "(DAT_0019d200 == 0 || (param_5 == 0x40))" ( (binary_expression "DAT_0019d200 == 0 || (param_5 == 0x40)" (binary_expression "DAT_0019d200 == 0" identifier == number_literal) || (parenthesized_expression "(param_5 == 0x40)" ( (binary_expression "param_5 == 0x40" identifier == number_literal) ))) )) ))) )) (compound_statement "{\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }" { (expression_statement "uVar1 = uVar1 + 1;" (assignment_expression "uVar1 = uVar1 + 1" identifier = (binary_expression "uVar1 + 1" identifier + number_literal)) ;) (goto_statement "goto LAB_0011c995;" goto statement_identifier ;) })) }) (else_clause "else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }" else (compound_statement "{\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }" { (labeled_statement "LAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }" statement_identifier : (if_statement "if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }" if (parenthesized_expression "((DAT_0019d200 != 0) && (param_5 == 0x40))" ( (binary_expression "(DAT_0019d200 != 0) && (param_5 == 0x40)" (parenthesized_expression "(DAT_0019d200 != 0)" ( (binary_expression "DAT_0019d200 != 0" identifier != number_literal) )) && (parenthesized_expression "(param_5 == 0x40)" ( (binary_expression "param_5 == 0x40" identifier == number_literal) ))) )) (compound_statement "{\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }" { (if_statement "if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;" if (parenthesized_expression "((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@'))" ( (binary_expression "(param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')" (parenthesized_expression "(param_1 == uVar1)" ( (binary_expression "param_1 == uVar1" identifier == identifier) )) || (parenthesized_expression "(*(char *)(*param_2 + -1 + uVar1) != '@')" ( (binary_expression "*(char *)(*param_2 + -1 + uVar1) != '@'" (pointer_expression "*(char *)(*param_2 + -1 + uVar1)" * (cast_expression "(char *)(*param_2 + -1 + uVar1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + -1 + uVar1)" ( (binary_expression "*param_2 + -1 + uVar1" (binary_expression "*param_2 + -1" (pointer_expression "*param_2" * identifier) + number_literal) + identifier) )))) != (char_literal "'@'" ' character ')) ))) )) (goto_statement "goto LAB_0011ca20;" goto statement_identifier ;)) (expression_statement "uVar2 = FUN_001280b0(param_3);" (assignment_expression "uVar2 = FUN_001280b0(param_3)" identifier = (call_expression "FUN_001280b0(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (expression_statement "lVar3 = FUN_00119460(param_4,uVar2);" (assignment_expression "lVar3 = FUN_00119460(param_4,uVar2)" identifier = (call_expression "FUN_00119460(param_4,uVar2)" identifier (argument_list "(param_4,uVar2)" ( identifier , identifier )))) ;) (if_statement "if (lVar3 == 0) goto LAB_0011ca20;" if (parenthesized_expression "(lVar3 == 0)" ( (binary_expression "lVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0011ca20;" goto statement_identifier ;)) (goto_statement "goto LAB_0011c9bb;" goto statement_identifier ;) }))) }))) (expression_statement "uVar2 = FUN_001280b0(param_3);" (assignment_expression "uVar2 = FUN_001280b0(param_3)" identifier = (call_expression "FUN_001280b0(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (expression_statement "lVar3 = FUN_00119460(param_4,uVar2);" (assignment_expression "lVar3 = FUN_00119460(param_4,uVar2)" identifier = (call_expression "FUN_00119460(param_4,uVar2)" identifier (argument_list "(param_4,uVar2)" ( identifier , identifier )))) ;) (if_statement "if (lVar3 == 0) {\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }" if (parenthesized_expression "(lVar3 == 0)" ( (binary_expression "lVar3 == 0" identifier == number_literal) )) (compound_statement "{\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }" { (if_statement "if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }" if (parenthesized_expression "(param_5 == 0x26)" ( (binary_expression "param_5 == 0x26" identifier == number_literal) )) (compound_statement "{\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }" { (expression_statement "FUN_00128010(param_6,0x26);" (call_expression "FUN_00128010(param_6,0x26)" identifier (argument_list "(param_6,0x26)" ( identifier , number_literal ))) ;) (expression_statement "FUN_00127f60(param_6,param_3);" (call_expression "FUN_00127f60(param_6,param_3)" identifier (argument_list "(param_6,param_3)" ( identifier , identifier ))) ;) (if_statement "if (param_1 == uVar1) {\n        return uVar1;\n      }" if (parenthesized_expression "(param_1 == uVar1)" ( (binary_expression "param_1 == uVar1" identifier == identifier) )) (compound_statement "{\n        return uVar1;\n      }" { (return_statement "return uVar1;" return identifier ;) })) (if_statement "if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }" if (parenthesized_expression "(*(char *)(*param_2 + -1 + uVar1) != '&')" ( (binary_expression "*(char *)(*param_2 + -1 + uVar1) != '&'" (pointer_expression "*(char *)(*param_2 + -1 + uVar1)" * (cast_expression "(char *)(*param_2 + -1 + uVar1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + -1 + uVar1)" ( (binary_expression "*param_2 + -1 + uVar1" (binary_expression "*param_2 + -1" (pointer_expression "*param_2" * identifier) + number_literal) + identifier) )))) != (char_literal "'&'" ' character ')) )) (compound_statement "{\n        return uVar1;\n      }" { (return_statement "return uVar1;" return identifier ;) })) (expression_statement "FUN_00128010(param_6,0x26);" (call_expression "FUN_00128010(param_6,0x26)" identifier (argument_list "(param_6,0x26)" ( identifier , number_literal ))) ;) (return_statement "return uVar1;" return identifier ;) })) (labeled_statement "LAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }" statement_identifier : (if_statement "if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }" if (parenthesized_expression "(param_7 != 0)" ( (binary_expression "param_7 != 0" identifier != number_literal) )) (compound_statement "{\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }" { (expression_statement "FUN_00127f60(param_6,param_3);" (call_expression "FUN_00127f60(param_6,param_3)" identifier (argument_list "(param_6,param_3)" ( identifier , identifier ))) ;) (return_statement "return uVar1;" return identifier ;) }))) (expression_statement "FUN_00128010(param_6,0x5c);" (call_expression "FUN_00128010(param_6,0x5c)" identifier (argument_list "(param_6,0x5c)" ( identifier , number_literal ))) ;) (expression_statement "FUN_00127f60(param_6,param_3);" (call_expression "FUN_00127f60(param_6,param_3)" identifier (argument_list "(param_6,param_3)" ( identifier , identifier ))) ;) (return_statement "return uVar1;" return identifier ;) })) (labeled_statement "LAB_0011c9bb:\n  if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }" statement_identifier : (if_statement "if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }" if (parenthesized_expression "(*(long *)(lVar3 + 0x40) == 0)" ( (binary_expression "*(long *)(lVar3 + 0x40) == 0" (pointer_expression "*(long *)(lVar3 + 0x40)" * (cast_expression "(long *)(lVar3 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x40)" ( (binary_expression "lVar3 + 0x40" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }" { (expression_statement "FUN_00127f60(param_6,lVar3 + 0x20);" (call_expression "FUN_00127f60(param_6,lVar3 + 0x20)" identifier (argument_list "(param_6,lVar3 + 0x20)" ( identifier , (binary_expression "lVar3 + 0x20" identifier + number_literal) ))) ;) }) (else_clause "else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }" else (compound_statement "{\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }" { (expression_statement "FUN_00127f60(param_6,lVar3 + 0x38);" (call_expression "FUN_00127f60(param_6,lVar3 + 0x38)" identifier (argument_list "(param_6,lVar3 + 0x38)" ( identifier , (binary_expression "lVar3 + 0x38" identifier + number_literal) ))) ;) })))) (return_statement "return uVar1;" return identifier ;) })))
(translation_unit "size_t sub_actual(size_t start,sb *in,sb *t,hash_control *formal_hash,int kind,sb *out,\n                 int copyifnotthere)\n\n{\n  size_t sVar1;\n  char *pcVar2;\n  void *pvVar3;\n  \n  sVar1 = get_token(start,in,(sb *)&in->len,t);\n  if ((sVar1 < in->len) && (kind == in->ptr[sVar1])) {\n    if (((macro_mri == 0) || (macro_strip_at != 0)) && ((macro_strip_at == 0 || (kind == 0x40)))) {\n      sVar1 = sVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((macro_strip_at != 0) && (kind == 0x40)) {\n      if ((start == sVar1) || (in->ptr[sVar1 - 1] != '@')) goto LAB_0011ca20;\n      pcVar2 = sb_terminate(t);\n      pvVar3 = hash_find(formal_hash,pcVar2);\n      if (pvVar3 == (void *)0x0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }\n  pcVar2 = sb_terminate(t);\n  pvVar3 = hash_find(formal_hash,pcVar2);\n  if (pvVar3 == (void *)0x0) {\n    if (kind == 0x26) {\n      sb_add_char(out,0x26);\n      sb_add_sb(out,t);\n      if (start == sVar1) {\n        return sVar1;\n      }\n      if (in->ptr[sVar1 - 1] != '&') {\n        return sVar1;\n      }\n      sb_add_char(out,0x26);\n      return sVar1;\n    }\nLAB_0011ca20:\n    if (copyifnotthere != 0) {\n      sb_add_sb(out,t);\n      return sVar1;\n    }\n    sb_add_char(out,0x5c);\n    sb_add_sb(out,t);\n    return sVar1;\n  }\nLAB_0011c9bb:\n  if (*(long *)((long)pvVar3 + 0x40) == 0) {\n    sb_add_sb(out,(sb *)((long)pvVar3 + 0x20));\n  }\n  else {\n    sb_add_sb(out,(sb *)((long)pvVar3 + 0x38));\n  }\n  return sVar1;\n}\n\n" (function_definition "size_t sub_actual(size_t start,sb *in,sb *t,hash_control *formal_hash,int kind,sb *out,\n                 int copyifnotthere)\n\n{\n  size_t sVar1;\n  char *pcVar2;\n  void *pvVar3;\n  \n  sVar1 = get_token(start,in,(sb *)&in->len,t);\n  if ((sVar1 < in->len) && (kind == in->ptr[sVar1])) {\n    if (((macro_mri == 0) || (macro_strip_at != 0)) && ((macro_strip_at == 0 || (kind == 0x40)))) {\n      sVar1 = sVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((macro_strip_at != 0) && (kind == 0x40)) {\n      if ((start == sVar1) || (in->ptr[sVar1 - 1] != '@')) goto LAB_0011ca20;\n      pcVar2 = sb_terminate(t);\n      pvVar3 = hash_find(formal_hash,pcVar2);\n      if (pvVar3 == (void *)0x0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }\n  pcVar2 = sb_terminate(t);\n  pvVar3 = hash_find(formal_hash,pcVar2);\n  if (pvVar3 == (void *)0x0) {\n    if (kind == 0x26) {\n      sb_add_char(out,0x26);\n      sb_add_sb(out,t);\n      if (start == sVar1) {\n        return sVar1;\n      }\n      if (in->ptr[sVar1 - 1] != '&') {\n        return sVar1;\n      }\n      sb_add_char(out,0x26);\n      return sVar1;\n    }\nLAB_0011ca20:\n    if (copyifnotthere != 0) {\n      sb_add_sb(out,t);\n      return sVar1;\n    }\n    sb_add_char(out,0x5c);\n    sb_add_sb(out,t);\n    return sVar1;\n  }\nLAB_0011c9bb:\n  if (*(long *)((long)pvVar3 + 0x40) == 0) {\n    sb_add_sb(out,(sb *)((long)pvVar3 + 0x20));\n  }\n  else {\n    sb_add_sb(out,(sb *)((long)pvVar3 + 0x38));\n  }\n  return sVar1;\n}" primitive_type (function_declarator "sub_actual(size_t start,sb *in,sb *t,hash_control *formal_hash,int kind,sb *out,\n                 int copyifnotthere)" identifier (parameter_list "(size_t start,sb *in,sb *t,hash_control *formal_hash,int kind,sb *out,\n                 int copyifnotthere)" ( (parameter_declaration "size_t start" primitive_type identifier) , (parameter_declaration "sb *in" type_identifier (pointer_declarator "*in" * identifier)) , (parameter_declaration "sb *t" type_identifier (pointer_declarator "*t" * identifier)) , (parameter_declaration "hash_control *formal_hash" type_identifier (pointer_declarator "*formal_hash" * identifier)) , (parameter_declaration "int kind" primitive_type identifier) , (parameter_declaration "sb *out" type_identifier (pointer_declarator "*out" * identifier)) , (parameter_declaration "int copyifnotthere" primitive_type identifier) ))) (compound_statement "{\n  size_t sVar1;\n  char *pcVar2;\n  void *pvVar3;\n  \n  sVar1 = get_token(start,in,(sb *)&in->len,t);\n  if ((sVar1 < in->len) && (kind == in->ptr[sVar1])) {\n    if (((macro_mri == 0) || (macro_strip_at != 0)) && ((macro_strip_at == 0 || (kind == 0x40)))) {\n      sVar1 = sVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((macro_strip_at != 0) && (kind == 0x40)) {\n      if ((start == sVar1) || (in->ptr[sVar1 - 1] != '@')) goto LAB_0011ca20;\n      pcVar2 = sb_terminate(t);\n      pvVar3 = hash_find(formal_hash,pcVar2);\n      if (pvVar3 == (void *)0x0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }\n  pcVar2 = sb_terminate(t);\n  pvVar3 = hash_find(formal_hash,pcVar2);\n  if (pvVar3 == (void *)0x0) {\n    if (kind == 0x26) {\n      sb_add_char(out,0x26);\n      sb_add_sb(out,t);\n      if (start == sVar1) {\n        return sVar1;\n      }\n      if (in->ptr[sVar1 - 1] != '&') {\n        return sVar1;\n      }\n      sb_add_char(out,0x26);\n      return sVar1;\n    }\nLAB_0011ca20:\n    if (copyifnotthere != 0) {\n      sb_add_sb(out,t);\n      return sVar1;\n    }\n    sb_add_char(out,0x5c);\n    sb_add_sb(out,t);\n    return sVar1;\n  }\nLAB_0011c9bb:\n  if (*(long *)((long)pvVar3 + 0x40) == 0) {\n    sb_add_sb(out,(sb *)((long)pvVar3 + 0x20));\n  }\n  else {\n    sb_add_sb(out,(sb *)((long)pvVar3 + 0x38));\n  }\n  return sVar1;\n}" { (declaration "size_t sVar1;" primitive_type identifier ;) (declaration "char *pcVar2;" primitive_type (pointer_declarator "*pcVar2" * identifier) ;) (declaration "void *pvVar3;" primitive_type (pointer_declarator "*pvVar3" * identifier) ;) (expression_statement "sVar1 = get_token(start,in,(sb *)&in->len,t);" (assignment_expression "sVar1 = get_token(start,in,(sb *)&in->len,t)" identifier = (call_expression "get_token(start,in,(sb *)&in->len,t)" identifier (argument_list "(start,in,(sb *)&in->len,t)" ( identifier , identifier , (cast_expression "(sb *)&in->len" ( (type_descriptor "sb *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&in->len" & (field_expression "in->len" identifier -> field_identifier))) , identifier )))) ;) (if_statement "if ((sVar1 < in->len) && (kind == in->ptr[sVar1])) {\n    if (((macro_mri == 0) || (macro_strip_at != 0)) && ((macro_strip_at == 0 || (kind == 0x40)))) {\n      sVar1 = sVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((macro_strip_at != 0) && (kind == 0x40)) {\n      if ((start == sVar1) || (in->ptr[sVar1 - 1] != '@')) goto LAB_0011ca20;\n      pcVar2 = sb_terminate(t);\n      pvVar3 = hash_find(formal_hash,pcVar2);\n      if (pvVar3 == (void *)0x0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }" if (parenthesized_expression "((sVar1 < in->len) && (kind == in->ptr[sVar1]))" ( (binary_expression "(sVar1 < in->len) && (kind == in->ptr[sVar1])" (parenthesized_expression "(sVar1 < in->len)" ( (binary_expression "sVar1 < in->len" identifier < (field_expression "in->len" identifier -> field_identifier)) )) && (parenthesized_expression "(kind == in->ptr[sVar1])" ( (binary_expression "kind == in->ptr[sVar1]" identifier == (subscript_expression "in->ptr[sVar1]" (field_expression "in->ptr" identifier -> field_identifier) [ identifier ])) ))) )) (compound_statement "{\n    if (((macro_mri == 0) || (macro_strip_at != 0)) && ((macro_strip_at == 0 || (kind == 0x40)))) {\n      sVar1 = sVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }" { (if_statement "if (((macro_mri == 0) || (macro_strip_at != 0)) && ((macro_strip_at == 0 || (kind == 0x40)))) {\n      sVar1 = sVar1 + 1;\n      goto LAB_0011c995;\n    }" if (parenthesized_expression "(((macro_mri == 0) || (macro_strip_at != 0)) && ((macro_strip_at == 0 || (kind == 0x40))))" ( (binary_expression "((macro_mri == 0) || (macro_strip_at != 0)) && ((macro_strip_at == 0 || (kind == 0x40)))" (parenthesized_expression "((macro_mri == 0) || (macro_strip_at != 0))" ( (binary_expression "(macro_mri == 0) || (macro_strip_at != 0)" (parenthesized_expression "(macro_mri == 0)" ( (binary_expression "macro_mri == 0" identifier == number_literal) )) || (parenthesized_expression "(macro_strip_at != 0)" ( (binary_expression "macro_strip_at != 0" identifier != number_literal) ))) )) && (parenthesized_expression "((macro_strip_at == 0 || (kind == 0x40)))" ( (parenthesized_expression "(macro_strip_at == 0 || (kind == 0x40))" ( (binary_expression "macro_strip_at == 0 || (kind == 0x40)" (binary_expression "macro_strip_at == 0" identifier == number_literal) || (parenthesized_expression "(kind == 0x40)" ( (binary_expression "kind == 0x40" identifier == number_literal) ))) )) ))) )) (compound_statement "{\n      sVar1 = sVar1 + 1;\n      goto LAB_0011c995;\n    }" { (expression_statement "sVar1 = sVar1 + 1;" (assignment_expression "sVar1 = sVar1 + 1" identifier = (binary_expression "sVar1 + 1" identifier + number_literal)) ;) (goto_statement "goto LAB_0011c995;" goto statement_identifier ;) })) }) (else_clause "else {\nLAB_0011c995:\n    if ((macro_strip_at != 0) && (kind == 0x40)) {\n      if ((start == sVar1) || (in->ptr[sVar1 - 1] != '@')) goto LAB_0011ca20;\n      pcVar2 = sb_terminate(t);\n      pvVar3 = hash_find(formal_hash,pcVar2);\n      if (pvVar3 == (void *)0x0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }" else (compound_statement "{\nLAB_0011c995:\n    if ((macro_strip_at != 0) && (kind == 0x40)) {\n      if ((start == sVar1) || (in->ptr[sVar1 - 1] != '@')) goto LAB_0011ca20;\n      pcVar2 = sb_terminate(t);\n      pvVar3 = hash_find(formal_hash,pcVar2);\n      if (pvVar3 == (void *)0x0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }" { (labeled_statement "LAB_0011c995:\n    if ((macro_strip_at != 0) && (kind == 0x40)) {\n      if ((start == sVar1) || (in->ptr[sVar1 - 1] != '@')) goto LAB_0011ca20;\n      pcVar2 = sb_terminate(t);\n      pvVar3 = hash_find(formal_hash,pcVar2);\n      if (pvVar3 == (void *)0x0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }" statement_identifier : (if_statement "if ((macro_strip_at != 0) && (kind == 0x40)) {\n      if ((start == sVar1) || (in->ptr[sVar1 - 1] != '@')) goto LAB_0011ca20;\n      pcVar2 = sb_terminate(t);\n      pvVar3 = hash_find(formal_hash,pcVar2);\n      if (pvVar3 == (void *)0x0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }" if (parenthesized_expression "((macro_strip_at != 0) && (kind == 0x40))" ( (binary_expression "(macro_strip_at != 0) && (kind == 0x40)" (parenthesized_expression "(macro_strip_at != 0)" ( (binary_expression "macro_strip_at != 0" identifier != number_literal) )) && (parenthesized_expression "(kind == 0x40)" ( (binary_expression "kind == 0x40" identifier == number_literal) ))) )) (compound_statement "{\n      if ((start == sVar1) || (in->ptr[sVar1 - 1] != '@')) goto LAB_0011ca20;\n      pcVar2 = sb_terminate(t);\n      pvVar3 = hash_find(formal_hash,pcVar2);\n      if (pvVar3 == (void *)0x0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }" { (if_statement "if ((start == sVar1) || (in->ptr[sVar1 - 1] != '@')) goto LAB_0011ca20;" if (parenthesized_expression "((start == sVar1) || (in->ptr[sVar1 - 1] != '@'))" ( (binary_expression "(start == sVar1) || (in->ptr[sVar1 - 1] != '@')" (parenthesized_expression "(start == sVar1)" ( (binary_expression "start == sVar1" identifier == identifier) )) || (parenthesized_expression "(in->ptr[sVar1 - 1] != '@')" ( (binary_expression "in->ptr[sVar1 - 1] != '@'" (subscript_expression "in->ptr[sVar1 - 1]" (field_expression "in->ptr" identifier -> field_identifier) [ (binary_expression "sVar1 - 1" identifier - number_literal) ]) != (char_literal "'@'" ' character ')) ))) )) (goto_statement "goto LAB_0011ca20;" goto statement_identifier ;)) (expression_statement "pcVar2 = sb_terminate(t);" (assignment_expression "pcVar2 = sb_terminate(t)" identifier = (call_expression "sb_terminate(t)" identifier (argument_list "(t)" ( identifier )))) ;) (expression_statement "pvVar3 = hash_find(formal_hash,pcVar2);" (assignment_expression "pvVar3 = hash_find(formal_hash,pcVar2)" identifier = (call_expression "hash_find(formal_hash,pcVar2)" identifier (argument_list "(formal_hash,pcVar2)" ( identifier , identifier )))) ;) (if_statement "if (pvVar3 == (void *)0x0) goto LAB_0011ca20;" if (parenthesized_expression "(pvVar3 == (void *)0x0)" ( (binary_expression "pvVar3 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0011ca20;" goto statement_identifier ;)) (goto_statement "goto LAB_0011c9bb;" goto statement_identifier ;) }))) }))) (expression_statement "pcVar2 = sb_terminate(t);" (assignment_expression "pcVar2 = sb_terminate(t)" identifier = (call_expression "sb_terminate(t)" identifier (argument_list "(t)" ( identifier )))) ;) (expression_statement "pvVar3 = hash_find(formal_hash,pcVar2);" (assignment_expression "pvVar3 = hash_find(formal_hash,pcVar2)" identifier = (call_expression "hash_find(formal_hash,pcVar2)" identifier (argument_list "(formal_hash,pcVar2)" ( identifier , identifier )))) ;) (if_statement "if (pvVar3 == (void *)0x0) {\n    if (kind == 0x26) {\n      sb_add_char(out,0x26);\n      sb_add_sb(out,t);\n      if (start == sVar1) {\n        return sVar1;\n      }\n      if (in->ptr[sVar1 - 1] != '&') {\n        return sVar1;\n      }\n      sb_add_char(out,0x26);\n      return sVar1;\n    }\nLAB_0011ca20:\n    if (copyifnotthere != 0) {\n      sb_add_sb(out,t);\n      return sVar1;\n    }\n    sb_add_char(out,0x5c);\n    sb_add_sb(out,t);\n    return sVar1;\n  }" if (parenthesized_expression "(pvVar3 == (void *)0x0)" ( (binary_expression "pvVar3 == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    if (kind == 0x26) {\n      sb_add_char(out,0x26);\n      sb_add_sb(out,t);\n      if (start == sVar1) {\n        return sVar1;\n      }\n      if (in->ptr[sVar1 - 1] != '&') {\n        return sVar1;\n      }\n      sb_add_char(out,0x26);\n      return sVar1;\n    }\nLAB_0011ca20:\n    if (copyifnotthere != 0) {\n      sb_add_sb(out,t);\n      return sVar1;\n    }\n    sb_add_char(out,0x5c);\n    sb_add_sb(out,t);\n    return sVar1;\n  }" { (if_statement "if (kind == 0x26) {\n      sb_add_char(out,0x26);\n      sb_add_sb(out,t);\n      if (start == sVar1) {\n        return sVar1;\n      }\n      if (in->ptr[sVar1 - 1] != '&') {\n        return sVar1;\n      }\n      sb_add_char(out,0x26);\n      return sVar1;\n    }" if (parenthesized_expression "(kind == 0x26)" ( (binary_expression "kind == 0x26" identifier == number_literal) )) (compound_statement "{\n      sb_add_char(out,0x26);\n      sb_add_sb(out,t);\n      if (start == sVar1) {\n        return sVar1;\n      }\n      if (in->ptr[sVar1 - 1] != '&') {\n        return sVar1;\n      }\n      sb_add_char(out,0x26);\n      return sVar1;\n    }" { (expression_statement "sb_add_char(out,0x26);" (call_expression "sb_add_char(out,0x26)" identifier (argument_list "(out,0x26)" ( identifier , number_literal ))) ;) (expression_statement "sb_add_sb(out,t);" (call_expression "sb_add_sb(out,t)" identifier (argument_list "(out,t)" ( identifier , identifier ))) ;) (if_statement "if (start == sVar1) {\n        return sVar1;\n      }" if (parenthesized_expression "(start == sVar1)" ( (binary_expression "start == sVar1" identifier == identifier) )) (compound_statement "{\n        return sVar1;\n      }" { (return_statement "return sVar1;" return identifier ;) })) (if_statement "if (in->ptr[sVar1 - 1] != '&') {\n        return sVar1;\n      }" if (parenthesized_expression "(in->ptr[sVar1 - 1] != '&')" ( (binary_expression "in->ptr[sVar1 - 1] != '&'" (subscript_expression "in->ptr[sVar1 - 1]" (field_expression "in->ptr" identifier -> field_identifier) [ (binary_expression "sVar1 - 1" identifier - number_literal) ]) != (char_literal "'&'" ' character ')) )) (compound_statement "{\n        return sVar1;\n      }" { (return_statement "return sVar1;" return identifier ;) })) (expression_statement "sb_add_char(out,0x26);" (call_expression "sb_add_char(out,0x26)" identifier (argument_list "(out,0x26)" ( identifier , number_literal ))) ;) (return_statement "return sVar1;" return identifier ;) })) (labeled_statement "LAB_0011ca20:\n    if (copyifnotthere != 0) {\n      sb_add_sb(out,t);\n      return sVar1;\n    }" statement_identifier : (if_statement "if (copyifnotthere != 0) {\n      sb_add_sb(out,t);\n      return sVar1;\n    }" if (parenthesized_expression "(copyifnotthere != 0)" ( (binary_expression "copyifnotthere != 0" identifier != number_literal) )) (compound_statement "{\n      sb_add_sb(out,t);\n      return sVar1;\n    }" { (expression_statement "sb_add_sb(out,t);" (call_expression "sb_add_sb(out,t)" identifier (argument_list "(out,t)" ( identifier , identifier ))) ;) (return_statement "return sVar1;" return identifier ;) }))) (expression_statement "sb_add_char(out,0x5c);" (call_expression "sb_add_char(out,0x5c)" identifier (argument_list "(out,0x5c)" ( identifier , number_literal ))) ;) (expression_statement "sb_add_sb(out,t);" (call_expression "sb_add_sb(out,t)" identifier (argument_list "(out,t)" ( identifier , identifier ))) ;) (return_statement "return sVar1;" return identifier ;) })) (labeled_statement "LAB_0011c9bb:\n  if (*(long *)((long)pvVar3 + 0x40) == 0) {\n    sb_add_sb(out,(sb *)((long)pvVar3 + 0x20));\n  }\n  else {\n    sb_add_sb(out,(sb *)((long)pvVar3 + 0x38));\n  }" statement_identifier : (if_statement "if (*(long *)((long)pvVar3 + 0x40) == 0) {\n    sb_add_sb(out,(sb *)((long)pvVar3 + 0x20));\n  }\n  else {\n    sb_add_sb(out,(sb *)((long)pvVar3 + 0x38));\n  }" if (parenthesized_expression "(*(long *)((long)pvVar3 + 0x40) == 0)" ( (binary_expression "*(long *)((long)pvVar3 + 0x40) == 0" (pointer_expression "*(long *)((long)pvVar3 + 0x40)" * (cast_expression "(long *)((long)pvVar3 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar3 + 0x40)" ( (binary_expression "(long)pvVar3 + 0x40" (cast_expression "(long)pvVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) == number_literal) )) (compound_statement "{\n    sb_add_sb(out,(sb *)((long)pvVar3 + 0x20));\n  }" { (expression_statement "sb_add_sb(out,(sb *)((long)pvVar3 + 0x20));" (call_expression "sb_add_sb(out,(sb *)((long)pvVar3 + 0x20))" identifier (argument_list "(out,(sb *)((long)pvVar3 + 0x20))" ( identifier , (cast_expression "(sb *)((long)pvVar3 + 0x20)" ( (type_descriptor "sb *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar3 + 0x20)" ( (binary_expression "(long)pvVar3 + 0x20" (cast_expression "(long)pvVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))) ))) ;) }) (else_clause "else {\n    sb_add_sb(out,(sb *)((long)pvVar3 + 0x38));\n  }" else (compound_statement "{\n    sb_add_sb(out,(sb *)((long)pvVar3 + 0x38));\n  }" { (expression_statement "sb_add_sb(out,(sb *)((long)pvVar3 + 0x38));" (call_expression "sb_add_sb(out,(sb *)((long)pvVar3 + 0x38))" identifier (argument_list "(out,(sb *)((long)pvVar3 + 0x38))" ( identifier , (cast_expression "(sb *)((long)pvVar3 + 0x38)" ( (type_descriptor "sb *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar3 + 0x38)" ( (binary_expression "(long)pvVar3 + 0x38" (cast_expression "(long)pvVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))) ))) ;) })))) (return_statement "return sVar1;" return identifier ;) })))
(translation_unit "ulong FUN_0011c940(ulong param_1,long *param_2,undefined8 param_3,undefined8 param_4,int param_5,\n                  undefined8 param_6,int param_7)\n\n{\n  ulong uVar1;\n  undefined8 uVar2;\n  long lVar3;\n  \n  uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3);\n  if ((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))) {\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }\n  uVar2 = FUN_001280b0(param_3);\n  lVar3 = FUN_00119460(param_4,uVar2);\n  if (lVar3 == 0) {\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }\nLAB_0011c9bb:\n  if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }\n  return uVar1;\n}\n\n" (function_definition "ulong FUN_0011c940(ulong param_1,long *param_2,undefined8 param_3,undefined8 param_4,int param_5,\n                  undefined8 param_6,int param_7)\n\n{\n  ulong uVar1;\n  undefined8 uVar2;\n  long lVar3;\n  \n  uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3);\n  if ((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))) {\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }\n  uVar2 = FUN_001280b0(param_3);\n  lVar3 = FUN_00119460(param_4,uVar2);\n  if (lVar3 == 0) {\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }\nLAB_0011c9bb:\n  if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }\n  return uVar1;\n}" type_identifier (function_declarator "FUN_0011c940(ulong param_1,long *param_2,undefined8 param_3,undefined8 param_4,int param_5,\n                  undefined8 param_6,int param_7)" identifier (parameter_list "(ulong param_1,long *param_2,undefined8 param_3,undefined8 param_4,int param_5,\n                  undefined8 param_6,int param_7)" ( (parameter_declaration "ulong param_1" type_identifier 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 "undefined8 param_4" type_identifier identifier) , (parameter_declaration "int param_5" primitive_type identifier) , (parameter_declaration "undefined8 param_6" type_identifier identifier) , (parameter_declaration "int param_7" primitive_type identifier) ))) (compound_statement "{\n  ulong uVar1;\n  undefined8 uVar2;\n  long lVar3;\n  \n  uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3);\n  if ((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))) {\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }\n  uVar2 = FUN_001280b0(param_3);\n  lVar3 = FUN_00119460(param_4,uVar2);\n  if (lVar3 == 0) {\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }\nLAB_0011c9bb:\n  if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }\n  return uVar1;\n}" { (declaration "ulong uVar1;" type_identifier identifier ;) (declaration "undefined8 uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (expression_statement "uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3);" (assignment_expression "uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3)" identifier = (call_expression "FUN_0011c860(param_1,param_2,param_2 + 1,param_3)" identifier (argument_list "(param_1,param_2,param_2 + 1,param_3)" ( identifier , identifier , (binary_expression "param_2 + 1" identifier + number_literal) , identifier )))) ;) (if_statement "if ((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))) {\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }" if (parenthesized_expression "((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1)))" ( (binary_expression "(uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))" (parenthesized_expression "(uVar1 < (ulong)param_2[1])" ( (binary_expression "uVar1 < (ulong)param_2[1]" identifier < (cast_expression "(ulong)param_2[1]" ( (type_descriptor "ulong" type_identifier) ) (subscript_expression "param_2[1]" identifier [ number_literal ]))) )) && (parenthesized_expression "(param_5 == *(char *)(*param_2 + uVar1))" ( (binary_expression "param_5 == *(char *)(*param_2 + uVar1)" identifier == (pointer_expression "*(char *)(*param_2 + uVar1)" * (cast_expression "(char *)(*param_2 + uVar1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + uVar1)" ( (binary_expression "*param_2 + uVar1" (pointer_expression "*param_2" * identifier) + identifier) ))))) ))) )) (compound_statement "{\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }" { (if_statement "if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }" if (parenthesized_expression "(((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))" ( (binary_expression "((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40)))" (parenthesized_expression "((DAT_0019d204 == 0) || (DAT_0019d200 != 0))" ( (binary_expression "(DAT_0019d204 == 0) || (DAT_0019d200 != 0)" (parenthesized_expression "(DAT_0019d204 == 0)" ( (binary_expression "DAT_0019d204 == 0" identifier == number_literal) )) || (parenthesized_expression "(DAT_0019d200 != 0)" ( (binary_expression "DAT_0019d200 != 0" identifier != number_literal) ))) )) && (parenthesized_expression "((DAT_0019d200 == 0 || (param_5 == 0x40)))" ( (parenthesized_expression "(DAT_0019d200 == 0 || (param_5 == 0x40))" ( (binary_expression "DAT_0019d200 == 0 || (param_5 == 0x40)" (binary_expression "DAT_0019d200 == 0" identifier == number_literal) || (parenthesized_expression "(param_5 == 0x40)" ( (binary_expression "param_5 == 0x40" identifier == number_literal) ))) )) ))) )) (compound_statement "{\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }" { (expression_statement "uVar1 = uVar1 + 1;" (assignment_expression "uVar1 = uVar1 + 1" identifier = (binary_expression "uVar1 + 1" identifier + number_literal)) ;) (goto_statement "goto LAB_0011c995;" goto statement_identifier ;) })) }) (else_clause "else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }" else (compound_statement "{\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }" { (labeled_statement "LAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }" statement_identifier : (if_statement "if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }" if (parenthesized_expression "((DAT_0019d200 != 0) && (param_5 == 0x40))" ( (binary_expression "(DAT_0019d200 != 0) && (param_5 == 0x40)" (parenthesized_expression "(DAT_0019d200 != 0)" ( (binary_expression "DAT_0019d200 != 0" identifier != number_literal) )) && (parenthesized_expression "(param_5 == 0x40)" ( (binary_expression "param_5 == 0x40" identifier == number_literal) ))) )) (compound_statement "{\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }" { (if_statement "if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;" if (parenthesized_expression "((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@'))" ( (binary_expression "(param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')" (parenthesized_expression "(param_1 == uVar1)" ( (binary_expression "param_1 == uVar1" identifier == identifier) )) || (parenthesized_expression "(*(char *)(*param_2 + -1 + uVar1) != '@')" ( (binary_expression "*(char *)(*param_2 + -1 + uVar1) != '@'" (pointer_expression "*(char *)(*param_2 + -1 + uVar1)" * (cast_expression "(char *)(*param_2 + -1 + uVar1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + -1 + uVar1)" ( (binary_expression "*param_2 + -1 + uVar1" (binary_expression "*param_2 + -1" (pointer_expression "*param_2" * identifier) + number_literal) + identifier) )))) != (char_literal "'@'" ' character ')) ))) )) (goto_statement "goto LAB_0011ca20;" goto statement_identifier ;)) (expression_statement "uVar2 = FUN_001280b0(param_3);" (assignment_expression "uVar2 = FUN_001280b0(param_3)" identifier = (call_expression "FUN_001280b0(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (expression_statement "lVar3 = FUN_00119460(param_4,uVar2);" (assignment_expression "lVar3 = FUN_00119460(param_4,uVar2)" identifier = (call_expression "FUN_00119460(param_4,uVar2)" identifier (argument_list "(param_4,uVar2)" ( identifier , identifier )))) ;) (if_statement "if (lVar3 == 0) goto LAB_0011ca20;" if (parenthesized_expression "(lVar3 == 0)" ( (binary_expression "lVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_0011ca20;" goto statement_identifier ;)) (goto_statement "goto LAB_0011c9bb;" goto statement_identifier ;) }))) }))) (expression_statement "uVar2 = FUN_001280b0(param_3);" (assignment_expression "uVar2 = FUN_001280b0(param_3)" identifier = (call_expression "FUN_001280b0(param_3)" identifier (argument_list "(param_3)" ( identifier )))) ;) (expression_statement "lVar3 = FUN_00119460(param_4,uVar2);" (assignment_expression "lVar3 = FUN_00119460(param_4,uVar2)" identifier = (call_expression "FUN_00119460(param_4,uVar2)" identifier (argument_list "(param_4,uVar2)" ( identifier , identifier )))) ;) (if_statement "if (lVar3 == 0) {\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }" if (parenthesized_expression "(lVar3 == 0)" ( (binary_expression "lVar3 == 0" identifier == number_literal) )) (compound_statement "{\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }" { (if_statement "if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }" if (parenthesized_expression "(param_5 == 0x26)" ( (binary_expression "param_5 == 0x26" identifier == number_literal) )) (compound_statement "{\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }" { (expression_statement "FUN_00128010(param_6,0x26);" (call_expression "FUN_00128010(param_6,0x26)" identifier (argument_list "(param_6,0x26)" ( identifier , number_literal ))) ;) (expression_statement "FUN_00127f60(param_6,param_3);" (call_expression "FUN_00127f60(param_6,param_3)" identifier (argument_list "(param_6,param_3)" ( identifier , identifier ))) ;) (if_statement "if (param_1 == uVar1) {\n        return uVar1;\n      }" if (parenthesized_expression "(param_1 == uVar1)" ( (binary_expression "param_1 == uVar1" identifier == identifier) )) (compound_statement "{\n        return uVar1;\n      }" { (return_statement "return uVar1;" return identifier ;) })) (if_statement "if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }" if (parenthesized_expression "(*(char *)(*param_2 + -1 + uVar1) != '&')" ( (binary_expression "*(char *)(*param_2 + -1 + uVar1) != '&'" (pointer_expression "*(char *)(*param_2 + -1 + uVar1)" * (cast_expression "(char *)(*param_2 + -1 + uVar1)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*param_2 + -1 + uVar1)" ( (binary_expression "*param_2 + -1 + uVar1" (binary_expression "*param_2 + -1" (pointer_expression "*param_2" * identifier) + number_literal) + identifier) )))) != (char_literal "'&'" ' character ')) )) (compound_statement "{\n        return uVar1;\n      }" { (return_statement "return uVar1;" return identifier ;) })) (expression_statement "FUN_00128010(param_6,0x26);" (call_expression "FUN_00128010(param_6,0x26)" identifier (argument_list "(param_6,0x26)" ( identifier , number_literal ))) ;) (return_statement "return uVar1;" return identifier ;) })) (labeled_statement "LAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }" statement_identifier : (if_statement "if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }" if (parenthesized_expression "(param_7 != 0)" ( (binary_expression "param_7 != 0" identifier != number_literal) )) (compound_statement "{\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }" { (expression_statement "FUN_00127f60(param_6,param_3);" (call_expression "FUN_00127f60(param_6,param_3)" identifier (argument_list "(param_6,param_3)" ( identifier , identifier ))) ;) (return_statement "return uVar1;" return identifier ;) }))) (expression_statement "FUN_00128010(param_6,0x5c);" (call_expression "FUN_00128010(param_6,0x5c)" identifier (argument_list "(param_6,0x5c)" ( identifier , number_literal ))) ;) (expression_statement "FUN_00127f60(param_6,param_3);" (call_expression "FUN_00127f60(param_6,param_3)" identifier (argument_list "(param_6,param_3)" ( identifier , identifier ))) ;) (return_statement "return uVar1;" return identifier ;) })) (labeled_statement "LAB_0011c9bb:\n  if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }" statement_identifier : (if_statement "if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }" if (parenthesized_expression "(*(long *)(lVar3 + 0x40) == 0)" ( (binary_expression "*(long *)(lVar3 + 0x40) == 0" (pointer_expression "*(long *)(lVar3 + 0x40)" * (cast_expression "(long *)(lVar3 + 0x40)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + 0x40)" ( (binary_expression "lVar3 + 0x40" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }" { (expression_statement "FUN_00127f60(param_6,lVar3 + 0x20);" (call_expression "FUN_00127f60(param_6,lVar3 + 0x20)" identifier (argument_list "(param_6,lVar3 + 0x20)" ( identifier , (binary_expression "lVar3 + 0x20" identifier + number_literal) ))) ;) }) (else_clause "else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }" else (compound_statement "{\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }" { (expression_statement "FUN_00127f60(param_6,lVar3 + 0x38);" (call_expression "FUN_00127f60(param_6,lVar3 + 0x38)" identifier (argument_list "(param_6,lVar3 + 0x38)" ( identifier , (binary_expression "lVar3 + 0x38" identifier + number_literal) ))) ;) })))) (return_statement "return uVar1;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) )) && (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) + IDENT) ))))) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression IDENT != LIT) ))) )) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression IDENT == LIT) || (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (goto_statement goto statement_identifier ;) })) }) (else_clause else (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (binary_expression IDENT == LIT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == IDENT) )) || (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) + LIT) + IDENT) )))) != (char_literal ' character ')) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (goto_statement goto statement_identifier ;) }))) }))) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , 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 , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (compound_statement { (return_statement return IDENT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * IDENT) + LIT) + IDENT) )))) != (char_literal ' character ')) )) (compound_statement { (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (return_statement return IDENT ;) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT ))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (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 (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) ))) ;) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) ))) ;) })))) (return_statement return IDENT ;) })))
(function_definition "ulong FUN_0011c940(ulong param_1,long *param_2,undefined8 param_3,undefined8 param_4,int param_5,\n                  undefined8 param_6,int param_7)\n\n{\n  ulong uVar1;\n  undefined8 uVar2;\n  long lVar3;\n  \n  uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3);\n  if ((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))) {\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }\n  uVar2 = FUN_001280b0(param_3);\n  lVar3 = FUN_00119460(param_4,uVar2);\n  if (lVar3 == 0) {\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }\nLAB_0011c9bb:\n  if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }\n  return uVar1;\n}" (type_identifier "ulong") (function_declarator "FUN_0011c940(ulong param_1,long *param_2,undefined8 param_3,undefined8 param_4,int param_5,\n                  undefined8 param_6,int param_7)" (identifier "FUN_0011c940") (parameter_list "(ulong param_1,long *param_2,undefined8 param_3,undefined8 param_4,int param_5,\n                  undefined8 param_6,int param_7)" (( "(") (parameter_declaration "ulong param_1" (type_identifier "ulong") (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 "undefined8 param_4" (type_identifier "undefined8") (identifier "param_4")) (, ",") (parameter_declaration "int param_5" (primitive_type "int") (identifier "param_5")) (, ",") (parameter_declaration "undefined8 param_6" (type_identifier "undefined8") (identifier "param_6")) (, ",") (parameter_declaration "int param_7" (primitive_type "int") (identifier "param_7")) () ")"))) (compound_statement "{\n  ulong uVar1;\n  undefined8 uVar2;\n  long lVar3;\n  \n  uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3);\n  if ((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))) {\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }\n  uVar2 = FUN_001280b0(param_3);\n  lVar3 = FUN_00119460(param_4,uVar2);\n  if (lVar3 == 0) {\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }\nLAB_0011c9bb:\n  if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }\n  return uVar1;\n}" ({ "{") (declaration "ulong uVar1;" (type_identifier "ulong") (identifier "uVar1") (; ";")) (declaration "undefined8 uVar2;" (type_identifier "undefined8") (identifier "uVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (expression_statement "uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3);" (assignment_expression "uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3)" (identifier "uVar1") (= "=") (call_expression "FUN_0011c860(param_1,param_2,param_2 + 1,param_3)" (identifier "FUN_0011c860") (argument_list "(param_1,param_2,param_2 + 1,param_3)" (( "(") (identifier "param_1") (, ",") (identifier "param_2") (, ",") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1")) (, ",") (identifier "param_3") () ")")))) (; ";")) (if_statement "if ((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))) {\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }\n  else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }" (if "if") (parenthesized_expression "((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1)))" (( "(") (binary_expression "(uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))" (parenthesized_expression "(uVar1 < (ulong)param_2[1])" (( "(") (binary_expression "uVar1 < (ulong)param_2[1]" (identifier "uVar1") (< "<") (cast_expression "(ulong)param_2[1]" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]")))) () ")")) (&& "&&") (parenthesized_expression "(param_5 == *(char *)(*param_2 + uVar1))" (( "(") (binary_expression "param_5 == *(char *)(*param_2 + uVar1)" (identifier "param_5") (== "==") (pointer_expression "*(char *)(*param_2 + uVar1)" (* "*") (cast_expression "(char *)(*param_2 + uVar1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_2 + uVar1)" (( "(") (binary_expression "*param_2 + uVar1" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (identifier "uVar1")) () ")"))))) () ")"))) () ")")) (compound_statement "{\n    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }\n  }" ({ "{") (if_statement "if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))\n    {\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }" (if "if") (parenthesized_expression "(((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))" (( "(") (binary_expression "((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40)))" (parenthesized_expression "((DAT_0019d204 == 0) || (DAT_0019d200 != 0))" (( "(") (binary_expression "(DAT_0019d204 == 0) || (DAT_0019d200 != 0)" (parenthesized_expression "(DAT_0019d204 == 0)" (( "(") (binary_expression "DAT_0019d204 == 0" (identifier "DAT_0019d204") (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(DAT_0019d200 != 0)" (( "(") (binary_expression "DAT_0019d200 != 0" (identifier "DAT_0019d200") (!= "!=") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "((DAT_0019d200 == 0 || (param_5 == 0x40)))" (( "(") (parenthesized_expression "(DAT_0019d200 == 0 || (param_5 == 0x40))" (( "(") (binary_expression "DAT_0019d200 == 0 || (param_5 == 0x40)" (binary_expression "DAT_0019d200 == 0" (identifier "DAT_0019d200") (== "==") (number_literal "0")) (|| "||") (parenthesized_expression "(param_5 == 0x40)" (( "(") (binary_expression "param_5 == 0x40" (identifier "param_5") (== "==") (number_literal "0x40")) () ")"))) () ")")) () ")"))) () ")")) (compound_statement "{\n      uVar1 = uVar1 + 1;\n      goto LAB_0011c995;\n    }" ({ "{") (expression_statement "uVar1 = uVar1 + 1;" (assignment_expression "uVar1 = uVar1 + 1" (identifier "uVar1") (= "=") (binary_expression "uVar1 + 1" (identifier "uVar1") (+ "+") (number_literal "1"))) (; ";")) (goto_statement "goto LAB_0011c995;" (goto "goto") (statement_identifier "LAB_0011c995") (; ";")) (} "}"))) (} "}")) (else_clause "else {\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }" (else "else") (compound_statement "{\nLAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }\n  }" ({ "{") (labeled_statement "LAB_0011c995:\n    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }" (statement_identifier "LAB_0011c995") (: ":") (if_statement "if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }" (if "if") (parenthesized_expression "((DAT_0019d200 != 0) && (param_5 == 0x40))" (( "(") (binary_expression "(DAT_0019d200 != 0) && (param_5 == 0x40)" (parenthesized_expression "(DAT_0019d200 != 0)" (( "(") (binary_expression "DAT_0019d200 != 0" (identifier "DAT_0019d200") (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(param_5 == 0x40)" (( "(") (binary_expression "param_5 == 0x40" (identifier "param_5") (== "==") (number_literal "0x40")) () ")"))) () ")")) (compound_statement "{\n      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;\n      uVar2 = FUN_001280b0(param_3);\n      lVar3 = FUN_00119460(param_4,uVar2);\n      if (lVar3 == 0) goto LAB_0011ca20;\n      goto LAB_0011c9bb;\n    }" ({ "{") (if_statement "if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;" (if "if") (parenthesized_expression "((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@'))" (( "(") (binary_expression "(param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')" (parenthesized_expression "(param_1 == uVar1)" (( "(") (binary_expression "param_1 == uVar1" (identifier "param_1") (== "==") (identifier "uVar1")) () ")")) (|| "||") (parenthesized_expression "(*(char *)(*param_2 + -1 + uVar1) != '@')" (( "(") (binary_expression "*(char *)(*param_2 + -1 + uVar1) != '@'" (pointer_expression "*(char *)(*param_2 + -1 + uVar1)" (* "*") (cast_expression "(char *)(*param_2 + -1 + uVar1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_2 + -1 + uVar1)" (( "(") (binary_expression "*param_2 + -1 + uVar1" (binary_expression "*param_2 + -1" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "-1")) (+ "+") (identifier "uVar1")) () ")")))) (!= "!=") (char_literal "'@'" (' "'") (character "@") (' "'"))) () ")"))) () ")")) (goto_statement "goto LAB_0011ca20;" (goto "goto") (statement_identifier "LAB_0011ca20") (; ";"))) (expression_statement "uVar2 = FUN_001280b0(param_3);" (assignment_expression "uVar2 = FUN_001280b0(param_3)" (identifier "uVar2") (= "=") (call_expression "FUN_001280b0(param_3)" (identifier "FUN_001280b0") (argument_list "(param_3)" (( "(") (identifier "param_3") () ")")))) (; ";")) (expression_statement "lVar3 = FUN_00119460(param_4,uVar2);" (assignment_expression "lVar3 = FUN_00119460(param_4,uVar2)" (identifier "lVar3") (= "=") (call_expression "FUN_00119460(param_4,uVar2)" (identifier "FUN_00119460") (argument_list "(param_4,uVar2)" (( "(") (identifier "param_4") (, ",") (identifier "uVar2") () ")")))) (; ";")) (if_statement "if (lVar3 == 0) goto LAB_0011ca20;" (if "if") (parenthesized_expression "(lVar3 == 0)" (( "(") (binary_expression "lVar3 == 0" (identifier "lVar3") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_0011ca20;" (goto "goto") (statement_identifier "LAB_0011ca20") (; ";"))) (goto_statement "goto LAB_0011c9bb;" (goto "goto") (statement_identifier "LAB_0011c9bb") (; ";")) (} "}")))) (} "}")))) (expression_statement "uVar2 = FUN_001280b0(param_3);" (assignment_expression "uVar2 = FUN_001280b0(param_3)" (identifier "uVar2") (= "=") (call_expression "FUN_001280b0(param_3)" (identifier "FUN_001280b0") (argument_list "(param_3)" (( "(") (identifier "param_3") () ")")))) (; ";")) (expression_statement "lVar3 = FUN_00119460(param_4,uVar2);" (assignment_expression "lVar3 = FUN_00119460(param_4,uVar2)" (identifier "lVar3") (= "=") (call_expression "FUN_00119460(param_4,uVar2)" (identifier "FUN_00119460") (argument_list "(param_4,uVar2)" (( "(") (identifier "param_4") (, ",") (identifier "uVar2") () ")")))) (; ";")) (if_statement "if (lVar3 == 0) {\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }" (if "if") (parenthesized_expression "(lVar3 == 0)" (( "(") (binary_expression "lVar3 == 0" (identifier "lVar3") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }\nLAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }\n    FUN_00128010(param_6,0x5c);\n    FUN_00127f60(param_6,param_3);\n    return uVar1;\n  }" ({ "{") (if_statement "if (param_5 == 0x26) {\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }" (if "if") (parenthesized_expression "(param_5 == 0x26)" (( "(") (binary_expression "param_5 == 0x26" (identifier "param_5") (== "==") (number_literal "0x26")) () ")")) (compound_statement "{\n      FUN_00128010(param_6,0x26);\n      FUN_00127f60(param_6,param_3);\n      if (param_1 == uVar1) {\n        return uVar1;\n      }\n      if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }\n      FUN_00128010(param_6,0x26);\n      return uVar1;\n    }" ({ "{") (expression_statement "FUN_00128010(param_6,0x26);" (call_expression "FUN_00128010(param_6,0x26)" (identifier "FUN_00128010") (argument_list "(param_6,0x26)" (( "(") (identifier "param_6") (, ",") (number_literal "0x26") () ")"))) (; ";")) (expression_statement "FUN_00127f60(param_6,param_3);" (call_expression "FUN_00127f60(param_6,param_3)" (identifier "FUN_00127f60") (argument_list "(param_6,param_3)" (( "(") (identifier "param_6") (, ",") (identifier "param_3") () ")"))) (; ";")) (if_statement "if (param_1 == uVar1) {\n        return uVar1;\n      }" (if "if") (parenthesized_expression "(param_1 == uVar1)" (( "(") (binary_expression "param_1 == uVar1" (identifier "param_1") (== "==") (identifier "uVar1")) () ")")) (compound_statement "{\n        return uVar1;\n      }" ({ "{") (return_statement "return uVar1;" (return "return") (identifier "uVar1") (; ";")) (} "}"))) (if_statement "if (*(char *)(*param_2 + -1 + uVar1) != '&') {\n        return uVar1;\n      }" (if "if") (parenthesized_expression "(*(char *)(*param_2 + -1 + uVar1) != '&')" (( "(") (binary_expression "*(char *)(*param_2 + -1 + uVar1) != '&'" (pointer_expression "*(char *)(*param_2 + -1 + uVar1)" (* "*") (cast_expression "(char *)(*param_2 + -1 + uVar1)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*param_2 + -1 + uVar1)" (( "(") (binary_expression "*param_2 + -1 + uVar1" (binary_expression "*param_2 + -1" (pointer_expression "*param_2" (* "*") (identifier "param_2")) (+ "+") (number_literal "-1")) (+ "+") (identifier "uVar1")) () ")")))) (!= "!=") (char_literal "'&'" (' "'") (character "&") (' "'"))) () ")")) (compound_statement "{\n        return uVar1;\n      }" ({ "{") (return_statement "return uVar1;" (return "return") (identifier "uVar1") (; ";")) (} "}"))) (expression_statement "FUN_00128010(param_6,0x26);" (call_expression "FUN_00128010(param_6,0x26)" (identifier "FUN_00128010") (argument_list "(param_6,0x26)" (( "(") (identifier "param_6") (, ",") (number_literal "0x26") () ")"))) (; ";")) (return_statement "return uVar1;" (return "return") (identifier "uVar1") (; ";")) (} "}"))) (labeled_statement "LAB_0011ca20:\n    if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }" (statement_identifier "LAB_0011ca20") (: ":") (if_statement "if (param_7 != 0) {\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }" (if "if") (parenthesized_expression "(param_7 != 0)" (( "(") (binary_expression "param_7 != 0" (identifier "param_7") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      FUN_00127f60(param_6,param_3);\n      return uVar1;\n    }" ({ "{") (expression_statement "FUN_00127f60(param_6,param_3);" (call_expression "FUN_00127f60(param_6,param_3)" (identifier "FUN_00127f60") (argument_list "(param_6,param_3)" (( "(") (identifier "param_6") (, ",") (identifier "param_3") () ")"))) (; ";")) (return_statement "return uVar1;" (return "return") (identifier "uVar1") (; ";")) (} "}")))) (expression_statement "FUN_00128010(param_6,0x5c);" (call_expression "FUN_00128010(param_6,0x5c)" (identifier "FUN_00128010") (argument_list "(param_6,0x5c)" (( "(") (identifier "param_6") (, ",") (number_literal "0x5c") () ")"))) (; ";")) (expression_statement "FUN_00127f60(param_6,param_3);" (call_expression "FUN_00127f60(param_6,param_3)" (identifier "FUN_00127f60") (argument_list "(param_6,param_3)" (( "(") (identifier "param_6") (, ",") (identifier "param_3") () ")"))) (; ";")) (return_statement "return uVar1;" (return "return") (identifier "uVar1") (; ";")) (} "}"))) (labeled_statement "LAB_0011c9bb:\n  if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }" (statement_identifier "LAB_0011c9bb") (: ":") (if_statement "if (*(long *)(lVar3 + 0x40) == 0) {\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }\n  else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }" (if "if") (parenthesized_expression "(*(long *)(lVar3 + 0x40) == 0)" (( "(") (binary_expression "*(long *)(lVar3 + 0x40) == 0" (pointer_expression "*(long *)(lVar3 + 0x40)" (* "*") (cast_expression "(long *)(lVar3 + 0x40)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + 0x40)" (( "(") (binary_expression "lVar3 + 0x40" (identifier "lVar3") (+ "+") (number_literal "0x40")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    FUN_00127f60(param_6,lVar3 + 0x20);\n  }" ({ "{") (expression_statement "FUN_00127f60(param_6,lVar3 + 0x20);" (call_expression "FUN_00127f60(param_6,lVar3 + 0x20)" (identifier "FUN_00127f60") (argument_list "(param_6,lVar3 + 0x20)" (( "(") (identifier "param_6") (, ",") (binary_expression "lVar3 + 0x20" (identifier "lVar3") (+ "+") (number_literal "0x20")) () ")"))) (; ";")) (} "}")) (else_clause "else {\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }" (else "else") (compound_statement "{\n    FUN_00127f60(param_6,lVar3 + 0x38);\n  }" ({ "{") (expression_statement "FUN_00127f60(param_6,lVar3 + 0x38);" (call_expression "FUN_00127f60(param_6,lVar3 + 0x38)" (identifier "FUN_00127f60") (argument_list "(param_6,lVar3 + 0x38)" (( "(") (identifier "param_6") (, ",") (binary_expression "lVar3 + 0x38" (identifier "lVar3") (+ "+") (number_literal "0x38")) () ")"))) (; ";")) (} "}"))))) (return_statement "return uVar1;" (return "return") (identifier "uVar1") (; ";")) (} "}")))

size_t function_1(size_t var_6,type_1 *in,type_1 *t,type_2 *formal_hash,int var_3,type_1 *out,
                 int var_12)

{
  size_t var_2;
  char *pcVar2;
  void *var_9;
  
  var_2 = var_1(var_6,in,(type_1 *)&in->len,t);
  if ((var_2 < in->len) && (var_3 == in->ptr[var_2])) {
    if (((var_4 == 0) || (var_5 != 0)) && ((var_5 == 0 || (var_3 == 0x40)))) {
      var_2 = var_2 + 1;
      goto LAB_0011c995;
    }
  }
  else {
LAB_0011c995:
    if ((var_5 != 0) && (var_3 == 0x40)) {
      if ((var_6 == var_2) || (in->ptr[var_2 - 1] != '@')) goto LAB_0011ca20;
      pcVar2 = var_7(t);
      var_9 = var_8(formal_hash,pcVar2);
      if (var_9 == (void *)0x0) goto LAB_0011ca20;
      goto LAB_0011c9bb;
    }
  }
  pcVar2 = var_7(t);
  var_9 = var_8(formal_hash,pcVar2);
  if (var_9 == (void *)0x0) {
    if (var_3 == 0x26) {
      var_10(out,0x26);
      var_11(out,t);
      if (var_6 == var_2) {
        return var_2;
      }
      if (in->ptr[var_2 - 1] != '&') {
        return var_2;
      }
      var_10(out,0x26);
      return var_2;
    }
LAB_0011ca20:
    if (var_12 != 0) {
      var_11(out,t);
      return var_2;
    }
    var_10(out,0x5c);
    var_11(out,t);
    return var_2;
  }
LAB_0011c9bb:
  if (*(long *)((long)var_9 + 0x40) == 0) {
    var_11(out,(type_1 *)((long)var_9 + 0x20));
  }
  else {
    var_11(out,(type_1 *)((long)var_9 + 0x38));
  }
  return var_2;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (primitive_type) 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: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (binary_expression left: (identifier) right: (number_literal)) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (subscript_expression argument: (identifier) index: (number_literal))))) right: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (identifier))))))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (parenthesized_expression (parenthesized_expression (binary_expression left: (binary_expression left: (identifier) right: (number_literal)) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (goto_statement label: (statement_identifier))))) alternative: (else_clause (compound_statement (labeled_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: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)) right: (identifier))))) right: (char_literal (character)))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (goto_statement label: (statement_identifier)))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (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) (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)) right: (identifier))))) right: (char_literal (character)))) consequence: (compound_statement (return_statement (identifier)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal)))) (return_statement (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) (identifier)))) (return_statement (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (number_literal)))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier)))) (return_statement (identifier)))) (labeled_statement label: (statement_identifier) (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 (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal)))))) alternative: (else_clause (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))))))) (return_statement (identifier)))))

ulong MASKED(ulong param_1,long *param_2,undefined8 param_3,undefined8 param_4,int param_5,
                  undefined8 param_6,int param_7)

{
  ulong uVar1;
  undefined8 uVar2;
  long lVar3;
  
  uVar1 = FUN_0011c860(param_1,param_2,param_2 + 1,param_3);
  if ((uVar1 < (ulong)param_2[1]) && (param_5 == *(char *)(*param_2 + uVar1))) {
    if (((DAT_0019d204 == 0) || (DAT_0019d200 != 0)) && ((DAT_0019d200 == 0 || (param_5 == 0x40))))
    {
      uVar1 = uVar1 + 1;
      goto LAB_0011c995;
    }
  }
  else {
LAB_0011c995:
    if ((DAT_0019d200 != 0) && (param_5 == 0x40)) {
      if ((param_1 == uVar1) || (*(char *)(*param_2 + -1 + uVar1) != '@')) goto LAB_0011ca20;
      uVar2 = FUN_001280b0(param_3);
      lVar3 = FUN_00119460(param_4,uVar2);
      if (lVar3 == 0) goto LAB_0011ca20;
      goto LAB_0011c9bb;
    }
  }
  uVar2 = FUN_001280b0(param_3);
  lVar3 = FUN_00119460(param_4,uVar2);
  if (lVar3 == 0) {
    if (param_5 == 0x26) {
      FUN_00128010(param_6,0x26);
      FUN_00127f60(param_6,param_3);
      if (param_1 == uVar1) {
        return uVar1;
      }
      if (*(char *)(*param_2 + -1 + uVar1) != '&') {
        return uVar1;
      }
      FUN_00128010(param_6,0x26);
      return uVar1;
    }
LAB_0011ca20:
    if (param_7 != 0) {
      FUN_00127f60(param_6,param_3);
      return uVar1;
    }
    FUN_00128010(param_6,0x5c);
    FUN_00127f60(param_6,param_3);
    return uVar1;
  }
LAB_0011c9bb:
  if (*(long *)(lVar3 + 0x40) == 0) {
    FUN_00127f60(param_6,lVar3 + 0x20);
  }
  else {
    FUN_00127f60(param_6,lVar3 + 0x38);
  }
  return uVar1;
}

