
int __regparm3 d_number(d_info *di)

{
  int iVar1;
  char cVar2;
  char *pcVar3;
  bool bVar4;
  int iVar5;
  char *pcVar6;
  int iVar7;
  
  pcVar3 = di->s;
  cVar2 = *pcVar3;
  if (cVar2 == 'n') {
    pcVar6 = pcVar3 + 1;
    di->s = pcVar6;
    cVar2 = pcVar3[1];
    if (9 < (byte)(cVar2 - 0x30U)) {
      return 0;
    }
    bVar4 = true;
  }
  else {
    if (9 < (byte)(cVar2 - 0x30U)) {
      return 0;
    }
    bVar4 = false;
    pcVar6 = pcVar3;
  }
  iVar5 = (int)cVar2;
  iVar7 = 0;
  do {
    pcVar6 = pcVar6 + 1;
    di->s = pcVar6;
    iVar1 = iVar5 + iVar7 * 10;
    iVar5 = (int)*pcVar6;
    iVar7 = iVar1 + -0x30;
    if (9 < (byte)(*pcVar6 - 0x30U)) {
      if (bVar4) {
        iVar7 = 0x30 - iVar1;
      }
      return iVar7;
    }
  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));
  return -1;
}



int __regparm3 FUN_001d46d0(int *param_1)

{
  int iVar1;
  char cVar2;
  char *pcVar3;
  bool bVar4;
  int iVar5;
  char *pcVar6;
  int iVar7;
  
  pcVar3 = (char *)*param_1;
  cVar2 = *pcVar3;
  if (cVar2 == 'n') {
    pcVar6 = pcVar3 + 1;
    *param_1 = (int)pcVar6;
    cVar2 = pcVar3[1];
    if (9 < (byte)(cVar2 - 0x30U)) {
      return 0;
    }
    bVar4 = true;
  }
  else {
    if (9 < (byte)(cVar2 - 0x30U)) {
      return 0;
    }
    bVar4 = false;
    pcVar6 = pcVar3;
  }
  iVar5 = (int)cVar2;
  iVar7 = 0;
  do {
    pcVar6 = pcVar6 + 1;
    *param_1 = (int)pcVar6;
    iVar1 = iVar5 + iVar7 * 10;
    iVar5 = (int)*pcVar6;
    iVar7 = iVar1 + -0x30;
    if (9 < (byte)(*pcVar6 - 0x30U)) {
      if (bVar4) {
        iVar7 = 0x30 - iVar1;
      }
      return iVar7;
    }
  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));
  return -1;
}


PUSH EBP
PUSH EDI
MOV EDI,EAX
PUSH ESI
PUSH EBX
SUB ESP,0x4
MOV EBX,dword ptr [EAX]
MOVSX ECX,byte ptr [EBX]
CMP CL,0x6e
JZ 0x001d4770
LEA EAX,[ECX + -0x30]
CMP AL,0x9
JA 0x001d478f
MOV dword ptr [ESP],0x0
ADD EBX,0x1
XOR ESI,ESI
MOV EBP,0x7fffffff
JMP 0x001d4720
LEA EAX,[ECX + -0x30]
MOV EDX,EBP
ADD EBX,0x1
SUB EDX,EAX
MOV EAX,0xcccccccd
MUL EDX
SHR EDX,0x3
CMP EDX,ESI
JL 0x001d4758
LEA EAX,[ESI + ESI*0x4]
MOV dword ptr [EDI],EBX
LEA EAX,[ECX + EAX*0x2]
MOVSX ECX,byte ptr [EBX]
LEA ESI,[EAX + -0x30]
LEA EDX,[ECX + -0x30]
CMP DL,0x9
JBE 0x001d4708
MOV EDX,0x30
SUB EDX,EAX
MOV EAX,EDX
MOV EDX,dword ptr [ESP]
TEST EDX,EDX
CMOVNZ ESI,EAX
ADD ESP,0x4
MOV EAX,ESI
POP EBX
POP ESI
POP EDI
POP EBP
RET
ADD ESP,0x4
MOV ESI,0xffffffff
POP EBX
MOV EAX,ESI
POP ESI
POP EDI
POP EBP
RET
LEA EAX,[EBX + 0x1]
MOV dword ptr [EDI],EAX
MOVSX ECX,byte ptr [EBX + 0x1]
LEA EDX,[ECX + -0x30]
CMP DL,0x9
JA 0x001d478f
MOV EBX,EAX
MOV dword ptr [ESP],0x1
JMP 0x001d46f9
XOR ESI,ESI
JMP 0x001d4747
(translation_unit "int __regparm3 FUN_001d46d0(int *param_1)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  bool bVar4;\n  int iVar5;\n  char *pcVar6;\n  int iVar7;\n  \n  pcVar3 = (char *)*param_1;\n  cVar2 = *pcVar3;\n  if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }\n  iVar5 = (int)cVar2;\n  iVar7 = 0;\n  do {\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));\n  return -1;\n}\n\n" (function_definition "int __regparm3 FUN_001d46d0(int *param_1)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  bool bVar4;\n  int iVar5;\n  char *pcVar6;\n  int iVar7;\n  \n  pcVar3 = (char *)*param_1;\n  cVar2 = *pcVar3;\n  if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }\n  iVar5 = (int)cVar2;\n  iVar7 = 0;\n  do {\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));\n  return -1;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_001d46d0(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  bool bVar4;\n  int iVar5;\n  char *pcVar6;\n  int iVar7;\n  \n  pcVar3 = (char *)*param_1;\n  cVar2 = *pcVar3;\n  if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }\n  iVar5 = (int)cVar2;\n  iVar7 = 0;\n  do {\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));\n  return -1;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (expression_statement "pcVar3 = (char *)*param_1;" (assignment_expression "pcVar3 = (char *)*param_1" identifier = (cast_expression "(char *)*param_1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "cVar2 = *pcVar3;" (assignment_expression "cVar2 = *pcVar3" identifier = (pointer_expression "*pcVar3" * identifier)) ;) (if_statement "if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }" if (parenthesized_expression "(cVar2 == 'n')" ( (binary_expression "cVar2 == 'n'" identifier == (char_literal "'n'" ' character ')) )) (compound_statement "{\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }" { (expression_statement "pcVar6 = pcVar3 + 1;" (assignment_expression "pcVar6 = pcVar3 + 1" identifier = (binary_expression "pcVar3 + 1" identifier + number_literal)) ;) (expression_statement "*param_1 = (int)pcVar6;" (assignment_expression "*param_1 = (int)pcVar6" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)pcVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "cVar2 = pcVar3[1];" (assignment_expression "cVar2 = pcVar3[1]" identifier = (subscript_expression "pcVar3[1]" identifier [ number_literal ])) ;) (if_statement "if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }" if (parenthesized_expression "(9 < (byte)(cVar2 - 0x30U))" ( (binary_expression "9 < (byte)(cVar2 - 0x30U)" number_literal < (call_expression "(byte)(cVar2 - 0x30U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(cVar2 - 0x30U)" ( (binary_expression "cVar2 - 0x30U" identifier - number_literal) )))) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;) }) (else_clause "else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }" else (compound_statement "{\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }" { (if_statement "if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }" if (parenthesized_expression "(9 < (byte)(cVar2 - 0x30U))" ( (binary_expression "9 < (byte)(cVar2 - 0x30U)" number_literal < (call_expression "(byte)(cVar2 - 0x30U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(cVar2 - 0x30U)" ( (binary_expression "cVar2 - 0x30U" identifier - number_literal) )))) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) (expression_statement "pcVar6 = pcVar3;" (assignment_expression "pcVar6 = pcVar3" identifier = identifier) ;) }))) (expression_statement "iVar5 = (int)cVar2;" (assignment_expression "iVar5 = (int)cVar2" identifier = (cast_expression "(int)cVar2" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));" do (compound_statement "{\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  }" { (expression_statement "pcVar6 = pcVar6 + 1;" (assignment_expression "pcVar6 = pcVar6 + 1" identifier = (binary_expression "pcVar6 + 1" identifier + number_literal)) ;) (expression_statement "*param_1 = (int)pcVar6;" (assignment_expression "*param_1 = (int)pcVar6" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)pcVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar1 = iVar5 + iVar7 * 10;" (assignment_expression "iVar1 = iVar5 + iVar7 * 10" identifier = (binary_expression "iVar5 + iVar7 * 10" identifier + (binary_expression "iVar7 * 10" identifier * number_literal))) ;) (expression_statement "iVar5 = (int)*pcVar6;" (assignment_expression "iVar5 = (int)*pcVar6" identifier = (cast_expression "(int)*pcVar6" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*pcVar6" * identifier))) ;) (expression_statement "iVar7 = iVar1 + -0x30;" (assignment_expression "iVar7 = iVar1 + -0x30" identifier = (binary_expression "iVar1 + -0x30" identifier + number_literal)) ;) (if_statement "if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }" if (parenthesized_expression "(9 < (byte)(*pcVar6 - 0x30U))" ( (binary_expression "9 < (byte)(*pcVar6 - 0x30U)" number_literal < (call_expression "(byte)(*pcVar6 - 0x30U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*pcVar6 - 0x30U)" ( (binary_expression "*pcVar6 - 0x30U" (pointer_expression "*pcVar6" * identifier) - number_literal) )))) )) (compound_statement "{\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }" { (if_statement "if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }" if (parenthesized_expression "(bVar4)" ( identifier )) (compound_statement "{\n        iVar7 = 0x30 - iVar1;\n      }" { (expression_statement "iVar7 = 0x30 - iVar1;" (assignment_expression "iVar7 = 0x30 - iVar1" identifier = (binary_expression "0x30 - iVar1" number_literal - identifier)) ;) })) (return_statement "return iVar7;" return identifier ;) })) }) while (parenthesized_expression "(iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10))" ( (binary_expression "iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10)" identifier <= (cast_expression "(int)((0x7fffffffU - (iVar5 + -0x30)) / 10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((0x7fffffffU - (iVar5 + -0x30)) / 10)" ( (binary_expression "(0x7fffffffU - (iVar5 + -0x30)) / 10" (parenthesized_expression "(0x7fffffffU - (iVar5 + -0x30))" ( (binary_expression "0x7fffffffU - (iVar5 + -0x30)" number_literal - (parenthesized_expression "(iVar5 + -0x30)" ( (binary_expression "iVar5 + -0x30" identifier + number_literal) ))) )) / number_literal) )))) )) ;) (return_statement "return -1;" return number_literal ;) })))
(translation_unit "int __regparm3 d_number(d_info *di)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  bool bVar4;\n  int iVar5;\n  char *pcVar6;\n  int iVar7;\n  \n  pcVar3 = di->s;\n  cVar2 = *pcVar3;\n  if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    di->s = pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }\n  iVar5 = (int)cVar2;\n  iVar7 = 0;\n  do {\n    pcVar6 = pcVar6 + 1;\n    di->s = pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));\n  return -1;\n}\n\n" (function_definition "int __regparm3 d_number(d_info *di)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  bool bVar4;\n  int iVar5;\n  char *pcVar6;\n  int iVar7;\n  \n  pcVar3 = di->s;\n  cVar2 = *pcVar3;\n  if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    di->s = pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }\n  iVar5 = (int)cVar2;\n  iVar7 = 0;\n  do {\n    pcVar6 = pcVar6 + 1;\n    di->s = pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));\n  return -1;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "d_number(d_info *di)" identifier (parameter_list "(d_info *di)" ( (parameter_declaration "d_info *di" type_identifier (pointer_declarator "*di" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  bool bVar4;\n  int iVar5;\n  char *pcVar6;\n  int iVar7;\n  \n  pcVar3 = di->s;\n  cVar2 = *pcVar3;\n  if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    di->s = pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }\n  iVar5 = (int)cVar2;\n  iVar7 = 0;\n  do {\n    pcVar6 = pcVar6 + 1;\n    di->s = pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));\n  return -1;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (expression_statement "pcVar3 = di->s;" (assignment_expression "pcVar3 = di->s" identifier = (field_expression "di->s" identifier -> field_identifier)) ;) (expression_statement "cVar2 = *pcVar3;" (assignment_expression "cVar2 = *pcVar3" identifier = (pointer_expression "*pcVar3" * identifier)) ;) (if_statement "if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    di->s = pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }" if (parenthesized_expression "(cVar2 == 'n')" ( (binary_expression "cVar2 == 'n'" identifier == (char_literal "'n'" ' character ')) )) (compound_statement "{\n    pcVar6 = pcVar3 + 1;\n    di->s = pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }" { (expression_statement "pcVar6 = pcVar3 + 1;" (assignment_expression "pcVar6 = pcVar3 + 1" identifier = (binary_expression "pcVar3 + 1" identifier + number_literal)) ;) (expression_statement "di->s = pcVar6;" (assignment_expression "di->s = pcVar6" (field_expression "di->s" identifier -> field_identifier) = identifier) ;) (expression_statement "cVar2 = pcVar3[1];" (assignment_expression "cVar2 = pcVar3[1]" identifier = (subscript_expression "pcVar3[1]" identifier [ number_literal ])) ;) (if_statement "if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }" if (parenthesized_expression "(9 < (byte)(cVar2 - 0x30U))" ( (binary_expression "9 < (byte)(cVar2 - 0x30U)" number_literal < (call_expression "(byte)(cVar2 - 0x30U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(cVar2 - 0x30U)" ( (binary_expression "cVar2 - 0x30U" identifier - number_literal) )))) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;) }) (else_clause "else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }" else (compound_statement "{\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }" { (if_statement "if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }" if (parenthesized_expression "(9 < (byte)(cVar2 - 0x30U))" ( (binary_expression "9 < (byte)(cVar2 - 0x30U)" number_literal < (call_expression "(byte)(cVar2 - 0x30U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(cVar2 - 0x30U)" ( (binary_expression "cVar2 - 0x30U" identifier - number_literal) )))) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) (expression_statement "pcVar6 = pcVar3;" (assignment_expression "pcVar6 = pcVar3" identifier = identifier) ;) }))) (expression_statement "iVar5 = (int)cVar2;" (assignment_expression "iVar5 = (int)cVar2" identifier = (cast_expression "(int)cVar2" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n    pcVar6 = pcVar6 + 1;\n    di->s = pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));" do (compound_statement "{\n    pcVar6 = pcVar6 + 1;\n    di->s = pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  }" { (expression_statement "pcVar6 = pcVar6 + 1;" (assignment_expression "pcVar6 = pcVar6 + 1" identifier = (binary_expression "pcVar6 + 1" identifier + number_literal)) ;) (expression_statement "di->s = pcVar6;" (assignment_expression "di->s = pcVar6" (field_expression "di->s" identifier -> field_identifier) = identifier) ;) (expression_statement "iVar1 = iVar5 + iVar7 * 10;" (assignment_expression "iVar1 = iVar5 + iVar7 * 10" identifier = (binary_expression "iVar5 + iVar7 * 10" identifier + (binary_expression "iVar7 * 10" identifier * number_literal))) ;) (expression_statement "iVar5 = (int)*pcVar6;" (assignment_expression "iVar5 = (int)*pcVar6" identifier = (cast_expression "(int)*pcVar6" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*pcVar6" * identifier))) ;) (expression_statement "iVar7 = iVar1 + -0x30;" (assignment_expression "iVar7 = iVar1 + -0x30" identifier = (binary_expression "iVar1 + -0x30" identifier + number_literal)) ;) (if_statement "if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }" if (parenthesized_expression "(9 < (byte)(*pcVar6 - 0x30U))" ( (binary_expression "9 < (byte)(*pcVar6 - 0x30U)" number_literal < (call_expression "(byte)(*pcVar6 - 0x30U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*pcVar6 - 0x30U)" ( (binary_expression "*pcVar6 - 0x30U" (pointer_expression "*pcVar6" * identifier) - number_literal) )))) )) (compound_statement "{\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }" { (if_statement "if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }" if (parenthesized_expression "(bVar4)" ( identifier )) (compound_statement "{\n        iVar7 = 0x30 - iVar1;\n      }" { (expression_statement "iVar7 = 0x30 - iVar1;" (assignment_expression "iVar7 = 0x30 - iVar1" identifier = (binary_expression "0x30 - iVar1" number_literal - identifier)) ;) })) (return_statement "return iVar7;" return identifier ;) })) }) while (parenthesized_expression "(iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10))" ( (binary_expression "iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10)" identifier <= (cast_expression "(int)((0x7fffffffU - (iVar5 + -0x30)) / 10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((0x7fffffffU - (iVar5 + -0x30)) / 10)" ( (binary_expression "(0x7fffffffU - (iVar5 + -0x30)) / 10" (parenthesized_expression "(0x7fffffffU - (iVar5 + -0x30))" ( (binary_expression "0x7fffffffU - (iVar5 + -0x30)" number_literal - (parenthesized_expression "(iVar5 + -0x30)" ( (binary_expression "iVar5 + -0x30" identifier + number_literal) ))) )) / number_literal) )))) )) ;) (return_statement "return -1;" return number_literal ;) })))
(translation_unit "int __regparm3 FUN_001d46d0(int *param_1)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  bool bVar4;\n  int iVar5;\n  char *pcVar6;\n  int iVar7;\n  \n  pcVar3 = (char *)*param_1;\n  cVar2 = *pcVar3;\n  if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }\n  iVar5 = (int)cVar2;\n  iVar7 = 0;\n  do {\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));\n  return -1;\n}\n\n" (function_definition "int __regparm3 FUN_001d46d0(int *param_1)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  bool bVar4;\n  int iVar5;\n  char *pcVar6;\n  int iVar7;\n  \n  pcVar3 = (char *)*param_1;\n  cVar2 = *pcVar3;\n  if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }\n  iVar5 = (int)cVar2;\n  iVar7 = 0;\n  do {\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));\n  return -1;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_001d46d0(int *param_1)" identifier (parameter_list "(int *param_1)" ( (parameter_declaration "int *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) ))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  bool bVar4;\n  int iVar5;\n  char *pcVar6;\n  int iVar7;\n  \n  pcVar3 = (char *)*param_1;\n  cVar2 = *pcVar3;\n  if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }\n  iVar5 = (int)cVar2;\n  iVar7 = 0;\n  do {\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));\n  return -1;\n}" { (declaration "int iVar1;" primitive_type identifier ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "int iVar7;" primitive_type identifier ;) (expression_statement "pcVar3 = (char *)*param_1;" (assignment_expression "pcVar3 = (char *)*param_1" identifier = (cast_expression "(char *)*param_1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "cVar2 = *pcVar3;" (assignment_expression "cVar2 = *pcVar3" identifier = (pointer_expression "*pcVar3" * identifier)) ;) (if_statement "if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }" if (parenthesized_expression "(cVar2 == 'n')" ( (binary_expression "cVar2 == 'n'" identifier == (char_literal "'n'" ' character ')) )) (compound_statement "{\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }" { (expression_statement "pcVar6 = pcVar3 + 1;" (assignment_expression "pcVar6 = pcVar3 + 1" identifier = (binary_expression "pcVar3 + 1" identifier + number_literal)) ;) (expression_statement "*param_1 = (int)pcVar6;" (assignment_expression "*param_1 = (int)pcVar6" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)pcVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "cVar2 = pcVar3[1];" (assignment_expression "cVar2 = pcVar3[1]" identifier = (subscript_expression "pcVar3[1]" identifier [ number_literal ])) ;) (if_statement "if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }" if (parenthesized_expression "(9 < (byte)(cVar2 - 0x30U))" ( (binary_expression "9 < (byte)(cVar2 - 0x30U)" number_literal < (call_expression "(byte)(cVar2 - 0x30U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(cVar2 - 0x30U)" ( (binary_expression "cVar2 - 0x30U" identifier - number_literal) )))) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;) }) (else_clause "else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }" else (compound_statement "{\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }" { (if_statement "if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }" if (parenthesized_expression "(9 < (byte)(cVar2 - 0x30U))" ( (binary_expression "9 < (byte)(cVar2 - 0x30U)" number_literal < (call_expression "(byte)(cVar2 - 0x30U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(cVar2 - 0x30U)" ( (binary_expression "cVar2 - 0x30U" identifier - number_literal) )))) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) (expression_statement "pcVar6 = pcVar3;" (assignment_expression "pcVar6 = pcVar3" identifier = identifier) ;) }))) (expression_statement "iVar5 = (int)cVar2;" (assignment_expression "iVar5 = (int)cVar2" identifier = (cast_expression "(int)cVar2" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));" do (compound_statement "{\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  }" { (expression_statement "pcVar6 = pcVar6 + 1;" (assignment_expression "pcVar6 = pcVar6 + 1" identifier = (binary_expression "pcVar6 + 1" identifier + number_literal)) ;) (expression_statement "*param_1 = (int)pcVar6;" (assignment_expression "*param_1 = (int)pcVar6" (pointer_expression "*param_1" * identifier) = (cast_expression "(int)pcVar6" ( (type_descriptor "int" primitive_type) ) identifier)) ;) (expression_statement "iVar1 = iVar5 + iVar7 * 10;" (assignment_expression "iVar1 = iVar5 + iVar7 * 10" identifier = (binary_expression "iVar5 + iVar7 * 10" identifier + (binary_expression "iVar7 * 10" identifier * number_literal))) ;) (expression_statement "iVar5 = (int)*pcVar6;" (assignment_expression "iVar5 = (int)*pcVar6" identifier = (cast_expression "(int)*pcVar6" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*pcVar6" * identifier))) ;) (expression_statement "iVar7 = iVar1 + -0x30;" (assignment_expression "iVar7 = iVar1 + -0x30" identifier = (binary_expression "iVar1 + -0x30" identifier + number_literal)) ;) (if_statement "if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }" if (parenthesized_expression "(9 < (byte)(*pcVar6 - 0x30U))" ( (binary_expression "9 < (byte)(*pcVar6 - 0x30U)" number_literal < (call_expression "(byte)(*pcVar6 - 0x30U)" (parenthesized_expression "(byte)" ( identifier )) (argument_list "(*pcVar6 - 0x30U)" ( (binary_expression "*pcVar6 - 0x30U" (pointer_expression "*pcVar6" * identifier) - number_literal) )))) )) (compound_statement "{\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }" { (if_statement "if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }" if (parenthesized_expression "(bVar4)" ( identifier )) (compound_statement "{\n        iVar7 = 0x30 - iVar1;\n      }" { (expression_statement "iVar7 = 0x30 - iVar1;" (assignment_expression "iVar7 = 0x30 - iVar1" identifier = (binary_expression "0x30 - iVar1" number_literal - identifier)) ;) })) (return_statement "return iVar7;" return identifier ;) })) }) while (parenthesized_expression "(iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10))" ( (binary_expression "iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10)" identifier <= (cast_expression "(int)((0x7fffffffU - (iVar5 + -0x30)) / 10)" ( (type_descriptor "int" primitive_type) ) (parenthesized_expression "((0x7fffffffU - (iVar5 + -0x30)) / 10)" ( (binary_expression "(0x7fffffffU - (iVar5 + -0x30)) / 10" (parenthesized_expression "(0x7fffffffU - (iVar5 + -0x30))" ( (binary_expression "0x7fffffffU - (iVar5 + -0x30)" number_literal - (parenthesized_expression "(iVar5 + -0x30)" ( (binary_expression "iVar5 + -0x30" identifier + number_literal) ))) )) / number_literal) )))) )) ;) (return_statement "return -1;" return number_literal ;) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) )))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = BOOL) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression LIT < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - LIT) )))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * IDENT) - LIT) )))) )) (compound_statement { (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression LIT - IDENT)) ;) })) (return_statement return IDENT ;) })) }) while (parenthesized_expression ( (binary_expression IDENT <= (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression LIT - (parenthesized_expression ( (binary_expression IDENT + LIT) ))) )) / LIT) )))) )) ;) (return_statement return LIT ;) })))
(function_definition "int __regparm3 FUN_001d46d0(int *param_1)\n\n{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  bool bVar4;\n  int iVar5;\n  char *pcVar6;\n  int iVar7;\n  \n  pcVar3 = (char *)*param_1;\n  cVar2 = *pcVar3;\n  if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }\n  iVar5 = (int)cVar2;\n  iVar7 = 0;\n  do {\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));\n  return -1;\n}" (primitive_type "int") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_001d46d0(int *param_1)" (identifier "FUN_001d46d0") (parameter_list "(int *param_1)" (( "(") (parameter_declaration "int *param_1" (primitive_type "int") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) () ")"))) (compound_statement "{\n  int iVar1;\n  char cVar2;\n  char *pcVar3;\n  bool bVar4;\n  int iVar5;\n  char *pcVar6;\n  int iVar7;\n  \n  pcVar3 = (char *)*param_1;\n  cVar2 = *pcVar3;\n  if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }\n  iVar5 = (int)cVar2;\n  iVar7 = 0;\n  do {\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));\n  return -1;\n}" ({ "{") (declaration "int iVar1;" (primitive_type "int") (identifier "iVar1") (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "char *pcVar3;" (primitive_type "char") (pointer_declarator "*pcVar3" (* "*") (identifier "pcVar3")) (; ";")) (declaration "bool bVar4;" (primitive_type "bool") (identifier "bVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (declaration "char *pcVar6;" (primitive_type "char") (pointer_declarator "*pcVar6" (* "*") (identifier "pcVar6")) (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (expression_statement "pcVar3 = (char *)*param_1;" (assignment_expression "pcVar3 = (char *)*param_1" (identifier "pcVar3") (= "=") (cast_expression "(char *)*param_1" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "cVar2 = *pcVar3;" (assignment_expression "cVar2 = *pcVar3" (identifier "cVar2") (= "=") (pointer_expression "*pcVar3" (* "*") (identifier "pcVar3"))) (; ";")) (if_statement "if (cVar2 == 'n') {\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }\n  else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }" (if "if") (parenthesized_expression "(cVar2 == 'n')" (( "(") (binary_expression "cVar2 == 'n'" (identifier "cVar2") (== "==") (char_literal "'n'" (' "'") (character "n") (' "'"))) () ")")) (compound_statement "{\n    pcVar6 = pcVar3 + 1;\n    *param_1 = (int)pcVar6;\n    cVar2 = pcVar3[1];\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = true;\n  }" ({ "{") (expression_statement "pcVar6 = pcVar3 + 1;" (assignment_expression "pcVar6 = pcVar3 + 1" (identifier "pcVar6") (= "=") (binary_expression "pcVar3 + 1" (identifier "pcVar3") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*param_1 = (int)pcVar6;" (assignment_expression "*param_1 = (int)pcVar6" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (cast_expression "(int)pcVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar6"))) (; ";")) (expression_statement "cVar2 = pcVar3[1];" (assignment_expression "cVar2 = pcVar3[1]" (identifier "cVar2") (= "=") (subscript_expression "pcVar3[1]" (identifier "pcVar3") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(9 < (byte)(cVar2 - 0x30U))" (( "(") (binary_expression "9 < (byte)(cVar2 - 0x30U)" (number_literal "9") (< "<") (call_expression "(byte)(cVar2 - 0x30U)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(cVar2 - 0x30U)" (( "(") (binary_expression "cVar2 - 0x30U" (identifier "cVar2") (- "-") (number_literal "0x30U")) () ")")))) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" (identifier "bVar4") (= "=") (true "true")) (; ";")) (} "}")) (else_clause "else {\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }" (else "else") (compound_statement "{\n    if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }\n    bVar4 = false;\n    pcVar6 = pcVar3;\n  }" ({ "{") (if_statement "if (9 < (byte)(cVar2 - 0x30U)) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(9 < (byte)(cVar2 - 0x30U))" (( "(") (binary_expression "9 < (byte)(cVar2 - 0x30U)" (number_literal "9") (< "<") (call_expression "(byte)(cVar2 - 0x30U)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(cVar2 - 0x30U)" (( "(") (binary_expression "cVar2 - 0x30U" (identifier "cVar2") (- "-") (number_literal "0x30U")) () ")")))) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" (identifier "bVar4") (= "=") (false "false")) (; ";")) (expression_statement "pcVar6 = pcVar3;" (assignment_expression "pcVar6 = pcVar3" (identifier "pcVar6") (= "=") (identifier "pcVar3")) (; ";")) (} "}")))) (expression_statement "iVar5 = (int)cVar2;" (assignment_expression "iVar5 = (int)cVar2" (identifier "iVar5") (= "=") (cast_expression "(int)cVar2" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "cVar2"))) (; ";")) (expression_statement "iVar7 = 0;" (assignment_expression "iVar7 = 0" (identifier "iVar7") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));" (do "do") (compound_statement "{\n    pcVar6 = pcVar6 + 1;\n    *param_1 = (int)pcVar6;\n    iVar1 = iVar5 + iVar7 * 10;\n    iVar5 = (int)*pcVar6;\n    iVar7 = iVar1 + -0x30;\n    if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }\n  }" ({ "{") (expression_statement "pcVar6 = pcVar6 + 1;" (assignment_expression "pcVar6 = pcVar6 + 1" (identifier "pcVar6") (= "=") (binary_expression "pcVar6 + 1" (identifier "pcVar6") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*param_1 = (int)pcVar6;" (assignment_expression "*param_1 = (int)pcVar6" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (cast_expression "(int)pcVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (identifier "pcVar6"))) (; ";")) (expression_statement "iVar1 = iVar5 + iVar7 * 10;" (assignment_expression "iVar1 = iVar5 + iVar7 * 10" (identifier "iVar1") (= "=") (binary_expression "iVar5 + iVar7 * 10" (identifier "iVar5") (+ "+") (binary_expression "iVar7 * 10" (identifier "iVar7") (* "*") (number_literal "10")))) (; ";")) (expression_statement "iVar5 = (int)*pcVar6;" (assignment_expression "iVar5 = (int)*pcVar6" (identifier "iVar5") (= "=") (cast_expression "(int)*pcVar6" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*pcVar6" (* "*") (identifier "pcVar6")))) (; ";")) (expression_statement "iVar7 = iVar1 + -0x30;" (assignment_expression "iVar7 = iVar1 + -0x30" (identifier "iVar7") (= "=") (binary_expression "iVar1 + -0x30" (identifier "iVar1") (+ "+") (number_literal "-0x30"))) (; ";")) (if_statement "if (9 < (byte)(*pcVar6 - 0x30U)) {\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }" (if "if") (parenthesized_expression "(9 < (byte)(*pcVar6 - 0x30U))" (( "(") (binary_expression "9 < (byte)(*pcVar6 - 0x30U)" (number_literal "9") (< "<") (call_expression "(byte)(*pcVar6 - 0x30U)" (parenthesized_expression "(byte)" (( "(") (identifier "byte") () ")")) (argument_list "(*pcVar6 - 0x30U)" (( "(") (binary_expression "*pcVar6 - 0x30U" (pointer_expression "*pcVar6" (* "*") (identifier "pcVar6")) (- "-") (number_literal "0x30U")) () ")")))) () ")")) (compound_statement "{\n      if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }\n      return iVar7;\n    }" ({ "{") (if_statement "if (bVar4) {\n        iVar7 = 0x30 - iVar1;\n      }" (if "if") (parenthesized_expression "(bVar4)" (( "(") (identifier "bVar4") () ")")) (compound_statement "{\n        iVar7 = 0x30 - iVar1;\n      }" ({ "{") (expression_statement "iVar7 = 0x30 - iVar1;" (assignment_expression "iVar7 = 0x30 - iVar1" (identifier "iVar7") (= "=") (binary_expression "0x30 - iVar1" (number_literal "0x30") (- "-") (identifier "iVar1"))) (; ";")) (} "}"))) (return_statement "return iVar7;" (return "return") (identifier "iVar7") (; ";")) (} "}"))) (} "}")) (while "while") (parenthesized_expression "(iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10))" (( "(") (binary_expression "iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10)" (identifier "iVar7") (<= "<=") (cast_expression "(int)((0x7fffffffU - (iVar5 + -0x30)) / 10)" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (parenthesized_expression "((0x7fffffffU - (iVar5 + -0x30)) / 10)" (( "(") (binary_expression "(0x7fffffffU - (iVar5 + -0x30)) / 10" (parenthesized_expression "(0x7fffffffU - (iVar5 + -0x30))" (( "(") (binary_expression "0x7fffffffU - (iVar5 + -0x30)" (number_literal "0x7fffffffU") (- "-") (parenthesized_expression "(iVar5 + -0x30)" (( "(") (binary_expression "iVar5 + -0x30" (identifier "iVar5") (+ "+") (number_literal "-0x30")) () ")"))) () ")")) (/ "/") (number_literal "10")) () ")")))) () ")")) (; ";")) (return_statement "return -1;" (return "return") (number_literal "-1") (; ";")) (} "}")))

int __regparm3 function_1(type_1 *di)

{
  int var_6;
  char var_1;
  char *var_2;
  bool bVar4;
  int var_4;
  char *var_3;
  int var_5;
  
  var_2 = di->s;
  var_1 = *var_2;
  if (var_1 == 'n') {
    var_3 = var_2 + 1;
    di->s = var_3;
    var_1 = var_2[1];
    if (9 < (byte)(var_1 - 0x30U)) {
      return 0;
    }
    bVar4 = true;
  }
  else {
    if (9 < (byte)(var_1 - 0x30U)) {
      return 0;
    }
    bVar4 = false;
    var_3 = var_2;
  }
  var_4 = (int)var_1;
  var_5 = 0;
  do {
    var_3 = var_3 + 1;
    di->s = var_3;
    var_6 = var_4 + var_5 * 10;
    var_4 = (int)*var_3;
    var_5 = var_6 + -0x30;
    if (9 < (byte)(*var_3 - 0x30U)) {
      if (bVar4) {
        var_5 = 0x30 - var_6;
      }
      return var_5;
    }
  } while (var_5 <= (int)((0x7fffffffU - (var_4 + -0x30)) / 10));
  return -1;
}


(translation_unit (function_definition type: (primitive_type) (ERROR (identifier)) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (character)))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (true)))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (return_statement (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (number_literal) right: (identifier)))))) (return_statement (identifier))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))))))) (return_statement (number_literal)))))

int __regparm3 MASKED(int *param_1)

{
  int iVar1;
  char cVar2;
  char *pcVar3;
  bool bVar4;
  int iVar5;
  char *pcVar6;
  int iVar7;
  
  pcVar3 = (char *)*param_1;
  cVar2 = *pcVar3;
  if (cVar2 == 'n') {
    pcVar6 = pcVar3 + 1;
    *param_1 = (int)pcVar6;
    cVar2 = pcVar3[1];
    if (9 < (byte)(cVar2 - 0x30U)) {
      return 0;
    }
    bVar4 = true;
  }
  else {
    if (9 < (byte)(cVar2 - 0x30U)) {
      return 0;
    }
    bVar4 = false;
    pcVar6 = pcVar3;
  }
  iVar5 = (int)cVar2;
  iVar7 = 0;
  do {
    pcVar6 = pcVar6 + 1;
    *param_1 = (int)pcVar6;
    iVar1 = iVar5 + iVar7 * 10;
    iVar5 = (int)*pcVar6;
    iVar7 = iVar1 + -0x30;
    if (9 < (byte)(*pcVar6 - 0x30U)) {
      if (bVar4) {
        iVar7 = 0x30 - iVar1;
      }
      return iVar7;
    }
  } while (iVar7 <= (int)((0x7fffffffU - (iVar5 + -0x30)) / 10));
  return -1;
}

