
_Bool __regparm3 is_valid_ipv4_address(char *str,char *end)

{
  uint uVar1;
  bool bVar2;
  char *pcVar3;
  int iVar4;
  int iVar5;
  
  if (end <= str) {
    return false;
  }
  bVar2 = false;
  iVar5 = 0;
  iVar4 = 0;
  do {
    while( true ) {
      pcVar3 = str + 1;
      uVar1 = (int)*str - 0x30;
      if (uVar1 < 10) break;
      if ((bool)(bVar2 & *str == 0x2e ^ 1U | iVar5 == 4)) {
        return false;
      }
      iVar4 = 0;
      bVar2 = false;
      str = pcVar3;
      if (end == pcVar3) goto LAB_00029f66;
    }
    iVar4 = uVar1 + iVar4 * 10;
    if (0xff < iVar4) {
      return false;
    }
    if (!bVar2) {
      iVar5 = iVar5 + 1;
      if (4 < iVar5) {
        return false;
      }
      bVar2 = true;
    }
    str = pcVar3;
  } while (end != pcVar3);
LAB_00029f66:
  return 3 < iVar5;
}



bool __regparm3 FUN_00029f00(char *param_1,char *param_2)

{
  uint uVar1;
  bool bVar2;
  char *pcVar3;
  int iVar4;
  int iVar5;
  
  if (param_2 <= param_1) {
    return false;
  }
  bVar2 = false;
  iVar5 = 0;
  iVar4 = 0;
  do {
    while( true ) {
      pcVar3 = param_1 + 1;
      uVar1 = (int)*param_1 - 0x30;
      if (uVar1 < 10) break;
      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {
        return false;
      }
      iVar4 = 0;
      bVar2 = false;
      param_1 = pcVar3;
      if (param_2 == pcVar3) goto LAB_00029f66;
    }
    iVar4 = uVar1 + iVar4 * 10;
    if (0xff < iVar4) {
      return false;
    }
    if (!bVar2) {
      iVar5 = iVar5 + 1;
      if (4 < iVar5) {
        return false;
      }
      bVar2 = true;
    }
    param_1 = pcVar3;
  } while (param_2 != pcVar3);
LAB_00029f66:
  return 3 < iVar5;
}


CMP EAX,EDX
JNC 0x00029f7f
PUSH EBP
MOV ECX,EAX
XOR EAX,EAX
PUSH EDI
PUSH ESI
XOR ESI,ESI
PUSH EBX
XOR EBX,EBX
JMP 0x00029f3c
LEA EBX,[EBX + EBX*0x4]
LEA EBX,[EBP + EBX*0x2]
CMP EBX,0xff
JG 0x00029f78
TEST AL,AL
JNZ 0x00029f38
ADD ESI,0x1
CMP ESI,0x4
JG 0x00029f6c
MOV EAX,0x1
CMP EDX,ECX
JZ 0x00029f66
ADD ECX,0x1
MOVSX EDI,byte ptr [ECX + -0x1]
LEA EBP,[EDI + -0x30]
CMP EBP,0x9
JBE 0x00029f18
CMP EDI,0x2e
SETZ BL
AND EAX,EBX
XOR EAX,0x1
CMP ESI,0x4
SETZ BL
OR AL,BL
JNZ 0x00029f78
XOR EBX,EBX
CMP EDX,ECX
JNZ 0x00029f3c
CMP ESI,0x3
SETG AL
POP EBX
POP ESI
POP EDI
POP EBP
RET
POP EBX
XOR EAX,EAX
POP ESI
POP EDI
POP EBP
RET
XOR EAX,EAX
RET
(translation_unit "bool __regparm3 FUN_00029f00(char *param_1,char *param_2)\n\n{\n  uint uVar1;\n  bool bVar2;\n  char *pcVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_2 <= param_1) {\n    return false;\n  }\n  bVar2 = false;\n  iVar5 = 0;\n  iVar4 = 0;\n  do {\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  } while (param_2 != pcVar3);\nLAB_00029f66:\n  return 3 < iVar5;\n}\n\n" (function_definition "bool __regparm3 FUN_00029f00(char *param_1,char *param_2)\n\n{\n  uint uVar1;\n  bool bVar2;\n  char *pcVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_2 <= param_1) {\n    return false;\n  }\n  bVar2 = false;\n  iVar5 = 0;\n  iVar4 = 0;\n  do {\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  } while (param_2 != pcVar3);\nLAB_00029f66:\n  return 3 < iVar5;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00029f00(char *param_1,char *param_2)" identifier (parameter_list "(char *param_1,char *param_2)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  bool bVar2;\n  char *pcVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_2 <= param_1) {\n    return false;\n  }\n  bVar2 = false;\n  iVar5 = 0;\n  iVar4 = 0;\n  do {\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  } while (param_2 != pcVar3);\nLAB_00029f66:\n  return 3 < iVar5;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (if_statement "if (param_2 <= param_1) {\n    return false;\n  }" if (parenthesized_expression "(param_2 <= param_1)" ( (binary_expression "param_2 <= param_1" identifier <= identifier) )) (compound_statement "{\n    return false;\n  }" { (return_statement "return false;" return false ;) })) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  } while (param_2 != pcVar3);" do (compound_statement "{\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  }" { (while_statement "while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }" { (expression_statement "pcVar3 = param_1 + 1;" (assignment_expression "pcVar3 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (expression_statement "uVar1 = (int)*param_1 - 0x30;" (assignment_expression "uVar1 = (int)*param_1 - 0x30" identifier = (binary_expression "(int)*param_1 - 0x30" (cast_expression "(int)*param_1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*param_1" * identifier)) - number_literal)) ;) (if_statement "if (uVar1 < 10) break;" if (parenthesized_expression "(uVar1 < 10)" ( (binary_expression "uVar1 < 10" identifier < number_literal) )) (break_statement "break;" break ;)) (if_statement "if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }" if (parenthesized_expression "((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4))" ( (cast_expression "(bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)" ( (type_descriptor "bool" primitive_type) ) (parenthesized_expression "(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)" ( (binary_expression "bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4" (binary_expression "bVar2 & *param_1 == 0x2e ^ 1U" (binary_expression "bVar2 & *param_1 == 0x2e" identifier & (binary_expression "*param_1 == 0x2e" (pointer_expression "*param_1" * identifier) == number_literal)) ^ number_literal) | (binary_expression "iVar5 == 4" identifier == number_literal)) ))) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "param_1 = pcVar3;" (assignment_expression "param_1 = pcVar3" identifier = identifier) ;) (if_statement "if (param_2 == pcVar3) goto LAB_00029f66;" if (parenthesized_expression "(param_2 == pcVar3)" ( (binary_expression "param_2 == pcVar3" identifier == identifier) )) (goto_statement "goto LAB_00029f66;" goto statement_identifier ;)) })) (expression_statement "iVar4 = uVar1 + iVar4 * 10;" (assignment_expression "iVar4 = uVar1 + iVar4 * 10" identifier = (binary_expression "uVar1 + iVar4 * 10" identifier + (binary_expression "iVar4 * 10" identifier * number_literal))) ;) (if_statement "if (0xff < iVar4) {\n      return false;\n    }" if (parenthesized_expression "(0xff < iVar4)" ( (binary_expression "0xff < iVar4" number_literal < identifier) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (if_statement "if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }" if (parenthesized_expression "(!bVar2)" ( (unary_expression "!bVar2" ! identifier) )) (compound_statement "{\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }" { (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) (if_statement "if (4 < iVar5) {\n        return false;\n      }" if (parenthesized_expression "(4 < iVar5)" ( (binary_expression "4 < iVar5" number_literal < identifier) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) })) (expression_statement "param_1 = pcVar3;" (assignment_expression "param_1 = pcVar3" identifier = identifier) ;) }) while (parenthesized_expression "(param_2 != pcVar3)" ( (binary_expression "param_2 != pcVar3" identifier != identifier) )) ;) (labeled_statement "LAB_00029f66:\n  return 3 < iVar5;" statement_identifier : (return_statement "return 3 < iVar5;" return (binary_expression "3 < iVar5" number_literal < identifier) ;)) })))
(translation_unit "_Bool __regparm3 is_valid_ipv4_address(char *str,char *end)\n\n{\n  uint uVar1;\n  bool bVar2;\n  char *pcVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (end <= str) {\n    return false;\n  }\n  bVar2 = false;\n  iVar5 = 0;\n  iVar4 = 0;\n  do {\n    while( true ) {\n      pcVar3 = str + 1;\n      uVar1 = (int)*str - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *str == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      str = pcVar3;\n      if (end == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    str = pcVar3;\n  } while (end != pcVar3);\nLAB_00029f66:\n  return 3 < iVar5;\n}\n\n" (function_definition "_Bool __regparm3 is_valid_ipv4_address(char *str,char *end)\n\n{\n  uint uVar1;\n  bool bVar2;\n  char *pcVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (end <= str) {\n    return false;\n  }\n  bVar2 = false;\n  iVar5 = 0;\n  iVar4 = 0;\n  do {\n    while( true ) {\n      pcVar3 = str + 1;\n      uVar1 = (int)*str - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *str == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      str = pcVar3;\n      if (end == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    str = pcVar3;\n  } while (end != pcVar3);\nLAB_00029f66:\n  return 3 < iVar5;\n}" type_identifier (ERROR "__regparm3" identifier) (function_declarator "is_valid_ipv4_address(char *str,char *end)" identifier (parameter_list "(char *str,char *end)" ( (parameter_declaration "char *str" primitive_type (pointer_declarator "*str" * identifier)) , (parameter_declaration "char *end" primitive_type (pointer_declarator "*end" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  bool bVar2;\n  char *pcVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (end <= str) {\n    return false;\n  }\n  bVar2 = false;\n  iVar5 = 0;\n  iVar4 = 0;\n  do {\n    while( true ) {\n      pcVar3 = str + 1;\n      uVar1 = (int)*str - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *str == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      str = pcVar3;\n      if (end == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    str = pcVar3;\n  } while (end != pcVar3);\nLAB_00029f66:\n  return 3 < iVar5;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (if_statement "if (end <= str) {\n    return false;\n  }" if (parenthesized_expression "(end <= str)" ( (binary_expression "end <= str" identifier <= identifier) )) (compound_statement "{\n    return false;\n  }" { (return_statement "return false;" return false ;) })) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n    while( true ) {\n      pcVar3 = str + 1;\n      uVar1 = (int)*str - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *str == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      str = pcVar3;\n      if (end == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    str = pcVar3;\n  } while (end != pcVar3);" do (compound_statement "{\n    while( true ) {\n      pcVar3 = str + 1;\n      uVar1 = (int)*str - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *str == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      str = pcVar3;\n      if (end == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    str = pcVar3;\n  }" { (while_statement "while( true ) {\n      pcVar3 = str + 1;\n      uVar1 = (int)*str - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *str == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      str = pcVar3;\n      if (end == pcVar3) goto LAB_00029f66;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      pcVar3 = str + 1;\n      uVar1 = (int)*str - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *str == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      str = pcVar3;\n      if (end == pcVar3) goto LAB_00029f66;\n    }" { (expression_statement "pcVar3 = str + 1;" (assignment_expression "pcVar3 = str + 1" identifier = (binary_expression "str + 1" identifier + number_literal)) ;) (expression_statement "uVar1 = (int)*str - 0x30;" (assignment_expression "uVar1 = (int)*str - 0x30" identifier = (binary_expression "(int)*str - 0x30" (cast_expression "(int)*str" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*str" * identifier)) - number_literal)) ;) (if_statement "if (uVar1 < 10) break;" if (parenthesized_expression "(uVar1 < 10)" ( (binary_expression "uVar1 < 10" identifier < number_literal) )) (break_statement "break;" break ;)) (if_statement "if ((bool)(bVar2 & *str == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }" if (parenthesized_expression "((bool)(bVar2 & *str == 0x2e ^ 1U | iVar5 == 4))" ( (cast_expression "(bool)(bVar2 & *str == 0x2e ^ 1U | iVar5 == 4)" ( (type_descriptor "bool" primitive_type) ) (parenthesized_expression "(bVar2 & *str == 0x2e ^ 1U | iVar5 == 4)" ( (binary_expression "bVar2 & *str == 0x2e ^ 1U | iVar5 == 4" (binary_expression "bVar2 & *str == 0x2e ^ 1U" (binary_expression "bVar2 & *str == 0x2e" identifier & (binary_expression "*str == 0x2e" (pointer_expression "*str" * identifier) == number_literal)) ^ number_literal) | (binary_expression "iVar5 == 4" identifier == number_literal)) ))) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "str = pcVar3;" (assignment_expression "str = pcVar3" identifier = identifier) ;) (if_statement "if (end == pcVar3) goto LAB_00029f66;" if (parenthesized_expression "(end == pcVar3)" ( (binary_expression "end == pcVar3" identifier == identifier) )) (goto_statement "goto LAB_00029f66;" goto statement_identifier ;)) })) (expression_statement "iVar4 = uVar1 + iVar4 * 10;" (assignment_expression "iVar4 = uVar1 + iVar4 * 10" identifier = (binary_expression "uVar1 + iVar4 * 10" identifier + (binary_expression "iVar4 * 10" identifier * number_literal))) ;) (if_statement "if (0xff < iVar4) {\n      return false;\n    }" if (parenthesized_expression "(0xff < iVar4)" ( (binary_expression "0xff < iVar4" number_literal < identifier) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (if_statement "if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }" if (parenthesized_expression "(!bVar2)" ( (unary_expression "!bVar2" ! identifier) )) (compound_statement "{\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }" { (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) (if_statement "if (4 < iVar5) {\n        return false;\n      }" if (parenthesized_expression "(4 < iVar5)" ( (binary_expression "4 < iVar5" number_literal < identifier) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) })) (expression_statement "str = pcVar3;" (assignment_expression "str = pcVar3" identifier = identifier) ;) }) while (parenthesized_expression "(end != pcVar3)" ( (binary_expression "end != pcVar3" identifier != identifier) )) ;) (labeled_statement "LAB_00029f66:\n  return 3 < iVar5;" statement_identifier : (return_statement "return 3 < iVar5;" return (binary_expression "3 < iVar5" number_literal < identifier) ;)) })))
(translation_unit "bool __regparm3 FUN_00029f00(char *param_1,char *param_2)\n\n{\n  uint uVar1;\n  bool bVar2;\n  char *pcVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_2 <= param_1) {\n    return false;\n  }\n  bVar2 = false;\n  iVar5 = 0;\n  iVar4 = 0;\n  do {\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  } while (param_2 != pcVar3);\nLAB_00029f66:\n  return 3 < iVar5;\n}\n\n" (function_definition "bool __regparm3 FUN_00029f00(char *param_1,char *param_2)\n\n{\n  uint uVar1;\n  bool bVar2;\n  char *pcVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_2 <= param_1) {\n    return false;\n  }\n  bVar2 = false;\n  iVar5 = 0;\n  iVar4 = 0;\n  do {\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  } while (param_2 != pcVar3);\nLAB_00029f66:\n  return 3 < iVar5;\n}" primitive_type (ERROR "__regparm3" identifier) (function_declarator "FUN_00029f00(char *param_1,char *param_2)" identifier (parameter_list "(char *param_1,char *param_2)" ( (parameter_declaration "char *param_1" primitive_type (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "char *param_2" primitive_type (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  uint uVar1;\n  bool bVar2;\n  char *pcVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_2 <= param_1) {\n    return false;\n  }\n  bVar2 = false;\n  iVar5 = 0;\n  iVar4 = 0;\n  do {\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  } while (param_2 != pcVar3);\nLAB_00029f66:\n  return 3 < iVar5;\n}" { (declaration "uint uVar1;" type_identifier identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "char *pcVar3;" primitive_type (pointer_declarator "*pcVar3" * identifier) ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "int iVar5;" primitive_type identifier ;) (if_statement "if (param_2 <= param_1) {\n    return false;\n  }" if (parenthesized_expression "(param_2 <= param_1)" ( (binary_expression "param_2 <= param_1" identifier <= identifier) )) (compound_statement "{\n    return false;\n  }" { (return_statement "return false;" return false ;) })) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" identifier = number_literal) ;) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (do_statement "do {\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  } while (param_2 != pcVar3);" do (compound_statement "{\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  }" { (while_statement "while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }" { (expression_statement "pcVar3 = param_1 + 1;" (assignment_expression "pcVar3 = param_1 + 1" identifier = (binary_expression "param_1 + 1" identifier + number_literal)) ;) (expression_statement "uVar1 = (int)*param_1 - 0x30;" (assignment_expression "uVar1 = (int)*param_1 - 0x30" identifier = (binary_expression "(int)*param_1 - 0x30" (cast_expression "(int)*param_1" ( (type_descriptor "int" primitive_type) ) (pointer_expression "*param_1" * identifier)) - number_literal)) ;) (if_statement "if (uVar1 < 10) break;" if (parenthesized_expression "(uVar1 < 10)" ( (binary_expression "uVar1 < 10" identifier < number_literal) )) (break_statement "break;" break ;)) (if_statement "if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }" if (parenthesized_expression "((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4))" ( (cast_expression "(bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)" ( (type_descriptor "bool" primitive_type) ) (parenthesized_expression "(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)" ( (binary_expression "bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4" (binary_expression "bVar2 & *param_1 == 0x2e ^ 1U" (binary_expression "bVar2 & *param_1 == 0x2e" identifier & (binary_expression "*param_1 == 0x2e" (pointer_expression "*param_1" * identifier) == number_literal)) ^ number_literal) | (binary_expression "iVar5 == 4" identifier == number_literal)) ))) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" identifier = number_literal) ;) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "param_1 = pcVar3;" (assignment_expression "param_1 = pcVar3" identifier = identifier) ;) (if_statement "if (param_2 == pcVar3) goto LAB_00029f66;" if (parenthesized_expression "(param_2 == pcVar3)" ( (binary_expression "param_2 == pcVar3" identifier == identifier) )) (goto_statement "goto LAB_00029f66;" goto statement_identifier ;)) })) (expression_statement "iVar4 = uVar1 + iVar4 * 10;" (assignment_expression "iVar4 = uVar1 + iVar4 * 10" identifier = (binary_expression "uVar1 + iVar4 * 10" identifier + (binary_expression "iVar4 * 10" identifier * number_literal))) ;) (if_statement "if (0xff < iVar4) {\n      return false;\n    }" if (parenthesized_expression "(0xff < iVar4)" ( (binary_expression "0xff < iVar4" number_literal < identifier) )) (compound_statement "{\n      return false;\n    }" { (return_statement "return false;" return false ;) })) (if_statement "if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }" if (parenthesized_expression "(!bVar2)" ( (unary_expression "!bVar2" ! identifier) )) (compound_statement "{\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }" { (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" identifier = (binary_expression "iVar5 + 1" identifier + number_literal)) ;) (if_statement "if (4 < iVar5) {\n        return false;\n      }" if (parenthesized_expression "(4 < iVar5)" ( (binary_expression "4 < iVar5" number_literal < identifier) )) (compound_statement "{\n        return false;\n      }" { (return_statement "return false;" return false ;) })) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) })) (expression_statement "param_1 = pcVar3;" (assignment_expression "param_1 = pcVar3" identifier = identifier) ;) }) while (parenthesized_expression "(param_2 != pcVar3)" ( (binary_expression "param_2 != pcVar3" identifier != identifier) )) ;) (labeled_statement "LAB_00029f66:\n  return 3 < iVar5;" statement_identifier : (return_statement "return 3 < iVar5;" return (binary_expression "3 < iVar5" number_literal < identifier) ;)) })))
(translation_unit (function_definition TYPE (ERROR IDENT) (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (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 ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT)) - LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (cast_expression ( (type_descriptor TYPE) ) (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT & (binary_expression (pointer_expression * IDENT) == LIT)) ^ LIT) | (binary_expression IDENT == LIT)) ))) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == IDENT) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression IDENT * LIT))) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (return_statement return BOOL ;) })) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (return_statement return BOOL ;) })) (expression_statement (assignment_expression IDENT = BOOL) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (labeled_statement statement_identifier : (return_statement return (binary_expression LIT < IDENT) ;)) })))
(function_definition "bool __regparm3 FUN_00029f00(char *param_1,char *param_2)\n\n{\n  uint uVar1;\n  bool bVar2;\n  char *pcVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_2 <= param_1) {\n    return false;\n  }\n  bVar2 = false;\n  iVar5 = 0;\n  iVar4 = 0;\n  do {\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  } while (param_2 != pcVar3);\nLAB_00029f66:\n  return 3 < iVar5;\n}" (primitive_type "bool") (ERROR "__regparm3" (identifier "__regparm3")) (function_declarator "FUN_00029f00(char *param_1,char *param_2)" (identifier "FUN_00029f00") (parameter_list "(char *param_1,char *param_2)" (( "(") (parameter_declaration "char *param_1" (primitive_type "char") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "char *param_2" (primitive_type "char") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  uint uVar1;\n  bool bVar2;\n  char *pcVar3;\n  int iVar4;\n  int iVar5;\n  \n  if (param_2 <= param_1) {\n    return false;\n  }\n  bVar2 = false;\n  iVar5 = 0;\n  iVar4 = 0;\n  do {\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  } while (param_2 != pcVar3);\nLAB_00029f66:\n  return 3 < iVar5;\n}" ({ "{") (declaration "uint uVar1;" (type_identifier "uint") (identifier "uVar1") (; ";")) (declaration "bool bVar2;" (primitive_type "bool") (identifier "bVar2") (; ";")) (declaration "char *pcVar3;" (primitive_type "char") (pointer_declarator "*pcVar3" (* "*") (identifier "pcVar3")) (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "int iVar5;" (primitive_type "int") (identifier "iVar5") (; ";")) (if_statement "if (param_2 <= param_1) {\n    return false;\n  }" (if "if") (parenthesized_expression "(param_2 <= param_1)" (( "(") (binary_expression "param_2 <= param_1" (identifier "param_2") (<= "<=") (identifier "param_1")) () ")")) (compound_statement "{\n    return false;\n  }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" (identifier "bVar2") (= "=") (false "false")) (; ";")) (expression_statement "iVar5 = 0;" (assignment_expression "iVar5 = 0" (identifier "iVar5") (= "=") (number_literal "0")) (; ";")) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" (identifier "iVar4") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  } while (param_2 != pcVar3);" (do "do") (compound_statement "{\n    while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }\n    iVar4 = uVar1 + iVar4 * 10;\n    if (0xff < iVar4) {\n      return false;\n    }\n    if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }\n    param_1 = pcVar3;\n  }" ({ "{") (while_statement "while( true ) {\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      pcVar3 = param_1 + 1;\n      uVar1 = (int)*param_1 - 0x30;\n      if (uVar1 < 10) break;\n      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }\n      iVar4 = 0;\n      bVar2 = false;\n      param_1 = pcVar3;\n      if (param_2 == pcVar3) goto LAB_00029f66;\n    }" ({ "{") (expression_statement "pcVar3 = param_1 + 1;" (assignment_expression "pcVar3 = param_1 + 1" (identifier "pcVar3") (= "=") (binary_expression "param_1 + 1" (identifier "param_1") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar1 = (int)*param_1 - 0x30;" (assignment_expression "uVar1 = (int)*param_1 - 0x30" (identifier "uVar1") (= "=") (binary_expression "(int)*param_1 - 0x30" (cast_expression "(int)*param_1" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (- "-") (number_literal "0x30"))) (; ";")) (if_statement "if (uVar1 < 10) break;" (if "if") (parenthesized_expression "(uVar1 < 10)" (( "(") (binary_expression "uVar1 < 10" (identifier "uVar1") (< "<") (number_literal "10")) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {\n        return false;\n      }" (if "if") (parenthesized_expression "((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4))" (( "(") (cast_expression "(bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)" (( "(") (type_descriptor "bool" (primitive_type "bool")) () ")") (parenthesized_expression "(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)" (( "(") (binary_expression "bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4" (binary_expression "bVar2 & *param_1 == 0x2e ^ 1U" (binary_expression "bVar2 & *param_1 == 0x2e" (identifier "bVar2") (& "&") (binary_expression "*param_1 == 0x2e" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (== "==") (number_literal "0x2e"))) (^ "^") (number_literal "1U")) (| "|") (binary_expression "iVar5 == 4" (identifier "iVar5") (== "==") (number_literal "4"))) () ")"))) () ")")) (compound_statement "{\n        return false;\n      }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (expression_statement "iVar4 = 0;" (assignment_expression "iVar4 = 0" (identifier "iVar4") (= "=") (number_literal "0")) (; ";")) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" (identifier "bVar2") (= "=") (false "false")) (; ";")) (expression_statement "param_1 = pcVar3;" (assignment_expression "param_1 = pcVar3" (identifier "param_1") (= "=") (identifier "pcVar3")) (; ";")) (if_statement "if (param_2 == pcVar3) goto LAB_00029f66;" (if "if") (parenthesized_expression "(param_2 == pcVar3)" (( "(") (binary_expression "param_2 == pcVar3" (identifier "param_2") (== "==") (identifier "pcVar3")) () ")")) (goto_statement "goto LAB_00029f66;" (goto "goto") (statement_identifier "LAB_00029f66") (; ";"))) (} "}"))) (expression_statement "iVar4 = uVar1 + iVar4 * 10;" (assignment_expression "iVar4 = uVar1 + iVar4 * 10" (identifier "iVar4") (= "=") (binary_expression "uVar1 + iVar4 * 10" (identifier "uVar1") (+ "+") (binary_expression "iVar4 * 10" (identifier "iVar4") (* "*") (number_literal "10")))) (; ";")) (if_statement "if (0xff < iVar4) {\n      return false;\n    }" (if "if") (parenthesized_expression "(0xff < iVar4)" (( "(") (binary_expression "0xff < iVar4" (number_literal "0xff") (< "<") (identifier "iVar4")) () ")")) (compound_statement "{\n      return false;\n    }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (if_statement "if (!bVar2) {\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }" (if "if") (parenthesized_expression "(!bVar2)" (( "(") (unary_expression "!bVar2" (! "!") (identifier "bVar2")) () ")")) (compound_statement "{\n      iVar5 = iVar5 + 1;\n      if (4 < iVar5) {\n        return false;\n      }\n      bVar2 = true;\n    }" ({ "{") (expression_statement "iVar5 = iVar5 + 1;" (assignment_expression "iVar5 = iVar5 + 1" (identifier "iVar5") (= "=") (binary_expression "iVar5 + 1" (identifier "iVar5") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (4 < iVar5) {\n        return false;\n      }" (if "if") (parenthesized_expression "(4 < iVar5)" (( "(") (binary_expression "4 < iVar5" (number_literal "4") (< "<") (identifier "iVar5")) () ")")) (compound_statement "{\n        return false;\n      }" ({ "{") (return_statement "return false;" (return "return") (false "false") (; ";")) (} "}"))) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" (identifier "bVar2") (= "=") (true "true")) (; ";")) (} "}"))) (expression_statement "param_1 = pcVar3;" (assignment_expression "param_1 = pcVar3" (identifier "param_1") (= "=") (identifier "pcVar3")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(param_2 != pcVar3)" (( "(") (binary_expression "param_2 != pcVar3" (identifier "param_2") (!= "!=") (identifier "pcVar3")) () ")")) (; ";")) (labeled_statement "LAB_00029f66:\n  return 3 < iVar5;" (statement_identifier "LAB_00029f66") (: ":") (return_statement "return 3 < iVar5;" (return "return") (binary_expression "3 < iVar5" (number_literal "3") (< "<") (identifier "iVar5")) (; ";"))) (} "}")))

type_1 __regparm3 function_1(char *var_2,char *var_1)

{
  type_2 var_3;
  bool var_4;
  char *var_6;
  int var_7;
  int var_5;
  
  if (var_1 <= var_2) {
    return false;
  }
  var_4 = false;
  var_5 = 0;
  var_7 = 0;
  do {
    while( true ) {
      var_6 = var_2 + 1;
      var_3 = (int)*var_2 - 0x30;
      if (var_3 < 10) break;
      if ((bool)(var_4 & *var_2 == 0x2e ^ 1U | var_5 == 4)) {
        return false;
      }
      var_7 = 0;
      var_4 = false;
      var_2 = var_6;
      if (var_1 == var_6) goto LAB_00029f66;
    }
    var_7 = var_3 + var_7 * 10;
    if (0xff < var_7) {
      return false;
    }
    if (!var_4) {
      var_5 = var_5 + 1;
      if (4 < var_5) {
        return false;
      }
      var_4 = true;
    }
    var_2 = var_6;
  } while (var_1 != var_6);
LAB_00029f66:
  return 3 < var_5;
}


(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))) (parameter_declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (return_statement (false)))) (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (true)) body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier))) right: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (if_statement condition: (parenthesized_expression (cast_expression type: (type_descriptor type: (primitive_type)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))))) consequence: (compound_statement (return_statement (false)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) (if_statement condition: (parenthesized_expression (binary_expression left: (number_literal) right: (identifier))) consequence: (compound_statement (return_statement (false)))) (if_statement condition: (parenthesized_expression (unary_expression argument: (identifier))) consequence: (compound_statement (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: (identifier))) consequence: (compound_statement (return_statement (false)))) (expression_statement (assignment_expression left: (identifier) right: (true))))) (expression_statement (assignment_expression left: (identifier) right: (identifier)))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))) (labeled_statement label: (statement_identifier) (return_statement (binary_expression left: (number_literal) right: (identifier)))))))

bool __regparm3 MASKED(char *param_1,char *param_2)

{
  uint uVar1;
  bool bVar2;
  char *pcVar3;
  int iVar4;
  int iVar5;
  
  if (param_2 <= param_1) {
    return false;
  }
  bVar2 = false;
  iVar5 = 0;
  iVar4 = 0;
  do {
    while( true ) {
      pcVar3 = param_1 + 1;
      uVar1 = (int)*param_1 - 0x30;
      if (uVar1 < 10) break;
      if ((bool)(bVar2 & *param_1 == 0x2e ^ 1U | iVar5 == 4)) {
        return false;
      }
      iVar4 = 0;
      bVar2 = false;
      param_1 = pcVar3;
      if (param_2 == pcVar3) goto LAB_00029f66;
    }
    iVar4 = uVar1 + iVar4 * 10;
    if (0xff < iVar4) {
      return false;
    }
    if (!bVar2) {
      iVar5 = iVar5 + 1;
      if (4 < iVar5) {
        return false;
      }
      bVar2 = true;
    }
    param_1 = pcVar3;
  } while (param_2 != pcVar3);
LAB_00029f66:
  return 3 < iVar5;
}

