
/* DWARF original prototype: bool unquote(Version_script_info * this, string * pattern) */

bool __thiscall gold::Version_script_info::unquote(Version_script_info *this,string *pattern)

{
  char cVar1;
  ulong uVar2;
  pointer pcVar3;
  ulong uVar4;
  ulong uVar5;
  
  uVar2 = pattern->_M_string_length;
  if (uVar2 != 0) {
    uVar4 = 0;
    uVar5 = 0;
    do {
      pcVar3 = (pattern->_M_dataplus)._M_p;
      cVar1 = pcVar3[uVar4];
      if (cVar1 == '?') {
        return true;
      }
      if (cVar1 < '@') {
        if (cVar1 == '*') {
          return true;
        }
      }
      else {
        if (cVar1 == '[') {
          return true;
        }
        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {
          return false;
        }
      }
      if (uVar5 != uVar4) {
        pcVar3[uVar5] = pcVar3[uVar4];
      }
      uVar4 = uVar4 + 1;
      uVar5 = uVar5 + 1;
    } while (uVar4 < uVar2);
  }
  return false;
}



undefined8 FUN_00436d10(undefined8 param_1,long *param_2)

{
  char cVar1;
  ulong uVar2;
  long lVar3;
  ulong uVar4;
  ulong uVar5;
  
  uVar2 = param_2[1];
  if (uVar2 != 0) {
    uVar4 = 0;
    uVar5 = 0;
    do {
      lVar3 = *param_2;
      cVar1 = *(char *)(lVar3 + uVar4);
      if (cVar1 == '?') {
        return 1;
      }
      if (cVar1 < '@') {
        if (cVar1 == '*') {
          return 1;
        }
      }
      else {
        if (cVar1 == '[') {
          return 1;
        }
        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {
          return 0;
        }
      }
      if (uVar5 != uVar4) {
        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);
      }
      uVar4 = uVar4 + 1;
      uVar5 = uVar5 + 1;
    } while (uVar4 < uVar2);
  }
  return 0;
}


MOV R8,qword ptr [RSI + 0x8]
TEST R8,R8
JZ 0x00436d68
XOR EAX,EAX
XOR EDX,EDX
JMP 0x00436d4c
CMP CL,0x5b
JZ 0x00436d5f
CMP CL,0x5c
JNZ 0x00436d33
ADD RAX,0x1
CMP R8,RAX
JBE 0x00436d68
CMP RDX,RAX
JZ 0x00436d3f
MOVZX ECX,byte ptr [RDI + RAX*0x1]
MOV byte ptr [RDI + RDX*0x1],CL
ADD RAX,0x1
ADD RDX,0x1
CMP R8,RAX
JBE 0x00436d68
MOV RDI,qword ptr [RSI]
MOVZX ECX,byte ptr [RDI + RAX*0x1]
CMP CL,0x3f
JZ 0x00436d5f
JG 0x00436d20
CMP CL,0x2a
JNZ 0x00436d33
MOV EAX,0x1
RET
XOR EAX,EAX
RET
(translation_unit "undefined8 FUN_00436d10(undefined8 param_1,long *param_2)\n\n{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  \n  uVar2 = param_2[1];\n  if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_00436d10(undefined8 param_1,long *param_2)\n\n{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  \n  uVar2 = param_2[1];\n  if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_00436d10(undefined8 param_1,long *param_2)" identifier (parameter_list "(undefined8 param_1,long *param_2)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  \n  uVar2 = param_2[1];\n  if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }\n  return 0;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (expression_statement "uVar2 = param_2[1];" (assignment_expression "uVar2 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (if_statement "if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);" do (compound_statement "{\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    }" { (expression_statement "lVar3 = *param_2;" (assignment_expression "lVar3 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "cVar1 = *(char *)(lVar3 + uVar4);" (assignment_expression "cVar1 = *(char *)(lVar3 + uVar4)" identifier = (pointer_expression "*(char *)(lVar3 + uVar4)" * (cast_expression "(char *)(lVar3 + uVar4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + uVar4)" ( (binary_expression "lVar3 + uVar4" identifier + identifier) ))))) ;) (if_statement "if (cVar1 == '?') {\n        return 1;\n      }" if (parenthesized_expression "(cVar1 == '?')" ( (binary_expression "cVar1 == '?'" identifier == (char_literal "'?'" ' character ')) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }" if (parenthesized_expression "(cVar1 < '@')" ( (binary_expression "cVar1 < '@'" identifier < (char_literal "'@'" ' character ')) )) (compound_statement "{\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }" { (if_statement "if (cVar1 == '*') {\n          return 1;\n        }" if (parenthesized_expression "(cVar1 == '*')" ( (binary_expression "cVar1 == '*'" identifier == (char_literal "'*'" ' character ')) )) (compound_statement "{\n          return 1;\n        }" { (return_statement "return 1;" return number_literal ;) })) }) (else_clause "else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }" else (compound_statement "{\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }" { (if_statement "if (cVar1 == '[') {\n          return 1;\n        }" if (parenthesized_expression "(cVar1 == '[')" ( (binary_expression "cVar1 == '['" identifier == (char_literal "'['" ' character ')) )) (compound_statement "{\n          return 1;\n        }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }" if (parenthesized_expression "((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4))" ( (binary_expression "(cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)" (parenthesized_expression "(cVar1 == '\\')" ( (binary_expression "cVar1 == '\\'" identifier == (char_literal "'\\'" ' escape_sequence ')) )) && (parenthesized_expression "(uVar4 = uVar4 + 1, uVar2 <= uVar4)" ( (comma_expression "uVar4 = uVar4 + 1, uVar2 <= uVar4" (assignment_expression "uVar4 = uVar4 + 1" identifier = (binary_expression "uVar4 + 1" identifier + number_literal)) , (binary_expression "uVar2 <= uVar4" identifier <= identifier)) ))) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) }))) (if_statement "if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }" if (parenthesized_expression "(uVar5 != uVar4)" ( (binary_expression "uVar5 != uVar4" identifier != identifier) )) (compound_statement "{\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }" { (expression_statement "*(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);" (assignment_expression "*(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4)" (pointer_expression "*(undefined1 *)(lVar3 + uVar5)" * (cast_expression "(undefined1 *)(lVar3 + uVar5)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + uVar5)" ( (binary_expression "lVar3 + uVar5" identifier + identifier) )))) = (pointer_expression "*(undefined1 *)(lVar3 + uVar4)" * (cast_expression "(undefined1 *)(lVar3 + uVar4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + uVar4)" ( (binary_expression "lVar3 + uVar4" identifier + identifier) ))))) ;) })) (expression_statement "uVar4 = uVar4 + 1;" (assignment_expression "uVar4 = uVar4 + 1" identifier = (binary_expression "uVar4 + 1" identifier + number_literal)) ;) (expression_statement "uVar5 = uVar5 + 1;" (assignment_expression "uVar5 = uVar5 + 1" identifier = (binary_expression "uVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar4 < uVar2)" ( (binary_expression "uVar4 < uVar2" identifier < identifier) )) ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit "/* DWARF original prototype: bool unquote(Version_script_info * this, string * pattern) */\n\nbool __thiscall gold::Version_script_info::unquote(Version_script_info *this,string *pattern)\n\n{\n  char cVar1;\n  ulong uVar2;\n  pointer pcVar3;\n  ulong uVar4;\n  ulong uVar5;\n  \n  uVar2 = pattern->_M_string_length;\n  if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      pcVar3 = (pattern->_M_dataplus)._M_p;\n      cVar1 = pcVar3[uVar4];\n      if (cVar1 == '?') {\n        return true;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return true;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return true;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return false;\n        }\n      }\n      if (uVar5 != uVar4) {\n        pcVar3[uVar5] = pcVar3[uVar4];\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }\n  return false;\n}\n\n" comment (function_definition "bool __thiscall gold::Version_script_info::unquote(Version_script_info *this,string *pattern)\n\n{\n  char cVar1;\n  ulong uVar2;\n  pointer pcVar3;\n  ulong uVar4;\n  ulong uVar5;\n  \n  uVar2 = pattern->_M_string_length;\n  if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      pcVar3 = (pattern->_M_dataplus)._M_p;\n      cVar1 = pcVar3[uVar4];\n      if (cVar1 == '?') {\n        return true;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return true;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return true;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return false;\n        }\n      }\n      if (uVar5 != uVar4) {\n        pcVar3[uVar5] = pcVar3[uVar4];\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }\n  return false;\n}" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "gold::Version_script_info::" identifier : : identifier : :) (function_declarator "unquote(Version_script_info *this,string *pattern)" identifier (parameter_list "(Version_script_info *this,string *pattern)" ( (parameter_declaration "Version_script_info *this" type_identifier (pointer_declarator "*this" * identifier)) , (parameter_declaration "string *pattern" type_identifier (pointer_declarator "*pattern" * identifier)) ))) (compound_statement "{\n  char cVar1;\n  ulong uVar2;\n  pointer pcVar3;\n  ulong uVar4;\n  ulong uVar5;\n  \n  uVar2 = pattern->_M_string_length;\n  if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      pcVar3 = (pattern->_M_dataplus)._M_p;\n      cVar1 = pcVar3[uVar4];\n      if (cVar1 == '?') {\n        return true;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return true;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return true;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return false;\n        }\n      }\n      if (uVar5 != uVar4) {\n        pcVar3[uVar5] = pcVar3[uVar4];\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }\n  return false;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "pointer pcVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (expression_statement "uVar2 = pattern->_M_string_length;" (assignment_expression "uVar2 = pattern->_M_string_length" identifier = (field_expression "pattern->_M_string_length" identifier -> field_identifier)) ;) (if_statement "if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      pcVar3 = (pattern->_M_dataplus)._M_p;\n      cVar1 = pcVar3[uVar4];\n      if (cVar1 == '?') {\n        return true;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return true;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return true;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return false;\n        }\n      }\n      if (uVar5 != uVar4) {\n        pcVar3[uVar5] = pcVar3[uVar4];\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      pcVar3 = (pattern->_M_dataplus)._M_p;\n      cVar1 = pcVar3[uVar4];\n      if (cVar1 == '?') {\n        return true;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return true;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return true;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return false;\n        }\n      }\n      if (uVar5 != uVar4) {\n        pcVar3[uVar5] = pcVar3[uVar4];\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n      pcVar3 = (pattern->_M_dataplus)._M_p;\n      cVar1 = pcVar3[uVar4];\n      if (cVar1 == '?') {\n        return true;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return true;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return true;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return false;\n        }\n      }\n      if (uVar5 != uVar4) {\n        pcVar3[uVar5] = pcVar3[uVar4];\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);" do (compound_statement "{\n      pcVar3 = (pattern->_M_dataplus)._M_p;\n      cVar1 = pcVar3[uVar4];\n      if (cVar1 == '?') {\n        return true;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return true;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return true;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return false;\n        }\n      }\n      if (uVar5 != uVar4) {\n        pcVar3[uVar5] = pcVar3[uVar4];\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    }" { (expression_statement "pcVar3 = (pattern->_M_dataplus)._M_p;" (assignment_expression "pcVar3 = (pattern->_M_dataplus)._M_p" identifier = (field_expression "(pattern->_M_dataplus)._M_p" (parenthesized_expression "(pattern->_M_dataplus)" ( (field_expression "pattern->_M_dataplus" identifier -> field_identifier) )) . field_identifier)) ;) (expression_statement "cVar1 = pcVar3[uVar4];" (assignment_expression "cVar1 = pcVar3[uVar4]" identifier = (subscript_expression "pcVar3[uVar4]" identifier [ identifier ])) ;) (if_statement "if (cVar1 == '?') {\n        return true;\n      }" if (parenthesized_expression "(cVar1 == '?')" ( (binary_expression "cVar1 == '?'" identifier == (char_literal "'?'" ' character ')) )) (compound_statement "{\n        return true;\n      }" { (return_statement "return true;" return true ;) })) (if_statement "if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return true;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return true;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return false;\n        }\n      }" if (parenthesized_expression "(cVar1 < '@')" ( (binary_expression "cVar1 < '@'" identifier < (char_literal "'@'" ' character ')) )) (compound_statement "{\n        if (cVar1 == '*') {\n          return true;\n        }\n      }" { (if_statement "if (cVar1 == '*') {\n          return true;\n        }" if (parenthesized_expression "(cVar1 == '*')" ( (binary_expression "cVar1 == '*'" identifier == (char_literal "'*'" ' character ')) )) (compound_statement "{\n          return true;\n        }" { (return_statement "return true;" return true ;) })) }) (else_clause "else {\n        if (cVar1 == '[') {\n          return true;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return false;\n        }\n      }" else (compound_statement "{\n        if (cVar1 == '[') {\n          return true;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return false;\n        }\n      }" { (if_statement "if (cVar1 == '[') {\n          return true;\n        }" if (parenthesized_expression "(cVar1 == '[')" ( (binary_expression "cVar1 == '['" identifier == (char_literal "'['" ' character ')) )) (compound_statement "{\n          return true;\n        }" { (return_statement "return true;" return true ;) })) (if_statement "if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return false;\n        }" if (parenthesized_expression "((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4))" ( (binary_expression "(cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)" (parenthesized_expression "(cVar1 == '\\')" ( (binary_expression "cVar1 == '\\'" identifier == (char_literal "'\\'" ' escape_sequence ')) )) && (parenthesized_expression "(uVar4 = uVar4 + 1, uVar2 <= uVar4)" ( (comma_expression "uVar4 = uVar4 + 1, uVar2 <= uVar4" (assignment_expression "uVar4 = uVar4 + 1" identifier = (binary_expression "uVar4 + 1" identifier + number_literal)) , (binary_expression "uVar2 <= uVar4" identifier <= identifier)) ))) )) (compound_statement "{\n          return false;\n        }" { (return_statement "return false;" return false ;) })) }))) (if_statement "if (uVar5 != uVar4) {\n        pcVar3[uVar5] = pcVar3[uVar4];\n      }" if (parenthesized_expression "(uVar5 != uVar4)" ( (binary_expression "uVar5 != uVar4" identifier != identifier) )) (compound_statement "{\n        pcVar3[uVar5] = pcVar3[uVar4];\n      }" { (expression_statement "pcVar3[uVar5] = pcVar3[uVar4];" (assignment_expression "pcVar3[uVar5] = pcVar3[uVar4]" (subscript_expression "pcVar3[uVar5]" identifier [ identifier ]) = (subscript_expression "pcVar3[uVar4]" identifier [ identifier ])) ;) })) (expression_statement "uVar4 = uVar4 + 1;" (assignment_expression "uVar4 = uVar4 + 1" identifier = (binary_expression "uVar4 + 1" identifier + number_literal)) ;) (expression_statement "uVar5 = uVar5 + 1;" (assignment_expression "uVar5 = uVar5 + 1" identifier = (binary_expression "uVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar4 < uVar2)" ( (binary_expression "uVar4 < uVar2" identifier < identifier) )) ;) })) (return_statement "return false;" return false ;) })))
(translation_unit "undefined8 FUN_00436d10(undefined8 param_1,long *param_2)\n\n{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  \n  uVar2 = param_2[1];\n  if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }\n  return 0;\n}\n\n" (function_definition "undefined8 FUN_00436d10(undefined8 param_1,long *param_2)\n\n{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  \n  uVar2 = param_2[1];\n  if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }\n  return 0;\n}" type_identifier (function_declarator "FUN_00436d10(undefined8 param_1,long *param_2)" identifier (parameter_list "(undefined8 param_1,long *param_2)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  \n  uVar2 = param_2[1];\n  if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }\n  return 0;\n}" { (declaration "char cVar1;" primitive_type identifier ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (expression_statement "uVar2 = param_2[1];" (assignment_expression "uVar2 = param_2[1]" identifier = (subscript_expression "param_2[1]" identifier [ number_literal ])) ;) (if_statement "if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }" { (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" identifier = number_literal) ;) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" identifier = number_literal) ;) (do_statement "do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);" do (compound_statement "{\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    }" { (expression_statement "lVar3 = *param_2;" (assignment_expression "lVar3 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "cVar1 = *(char *)(lVar3 + uVar4);" (assignment_expression "cVar1 = *(char *)(lVar3 + uVar4)" identifier = (pointer_expression "*(char *)(lVar3 + uVar4)" * (cast_expression "(char *)(lVar3 + uVar4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + uVar4)" ( (binary_expression "lVar3 + uVar4" identifier + identifier) ))))) ;) (if_statement "if (cVar1 == '?') {\n        return 1;\n      }" if (parenthesized_expression "(cVar1 == '?')" ( (binary_expression "cVar1 == '?'" identifier == (char_literal "'?'" ' character ')) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }" if (parenthesized_expression "(cVar1 < '@')" ( (binary_expression "cVar1 < '@'" identifier < (char_literal "'@'" ' character ')) )) (compound_statement "{\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }" { (if_statement "if (cVar1 == '*') {\n          return 1;\n        }" if (parenthesized_expression "(cVar1 == '*')" ( (binary_expression "cVar1 == '*'" identifier == (char_literal "'*'" ' character ')) )) (compound_statement "{\n          return 1;\n        }" { (return_statement "return 1;" return number_literal ;) })) }) (else_clause "else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }" else (compound_statement "{\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }" { (if_statement "if (cVar1 == '[') {\n          return 1;\n        }" if (parenthesized_expression "(cVar1 == '[')" ( (binary_expression "cVar1 == '['" identifier == (char_literal "'['" ' character ')) )) (compound_statement "{\n          return 1;\n        }" { (return_statement "return 1;" return number_literal ;) })) (if_statement "if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }" if (parenthesized_expression "((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4))" ( (binary_expression "(cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)" (parenthesized_expression "(cVar1 == '\\')" ( (binary_expression "cVar1 == '\\'" identifier == (char_literal "'\\'" ' escape_sequence ')) )) && (parenthesized_expression "(uVar4 = uVar4 + 1, uVar2 <= uVar4)" ( (comma_expression "uVar4 = uVar4 + 1, uVar2 <= uVar4" (assignment_expression "uVar4 = uVar4 + 1" identifier = (binary_expression "uVar4 + 1" identifier + number_literal)) , (binary_expression "uVar2 <= uVar4" identifier <= identifier)) ))) )) (compound_statement "{\n          return 0;\n        }" { (return_statement "return 0;" return number_literal ;) })) }))) (if_statement "if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }" if (parenthesized_expression "(uVar5 != uVar4)" ( (binary_expression "uVar5 != uVar4" identifier != identifier) )) (compound_statement "{\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }" { (expression_statement "*(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);" (assignment_expression "*(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4)" (pointer_expression "*(undefined1 *)(lVar3 + uVar5)" * (cast_expression "(undefined1 *)(lVar3 + uVar5)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + uVar5)" ( (binary_expression "lVar3 + uVar5" identifier + identifier) )))) = (pointer_expression "*(undefined1 *)(lVar3 + uVar4)" * (cast_expression "(undefined1 *)(lVar3 + uVar4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar3 + uVar4)" ( (binary_expression "lVar3 + uVar4" identifier + identifier) ))))) ;) })) (expression_statement "uVar4 = uVar4 + 1;" (assignment_expression "uVar4 = uVar4 + 1" identifier = (binary_expression "uVar4 + 1" identifier + number_literal)) ;) (expression_statement "uVar5 = uVar5 + 1;" (assignment_expression "uVar5 = uVar5 + 1" identifier = (binary_expression "uVar5 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(uVar4 < uVar2)" ( (binary_expression "uVar4 < uVar2" identifier < identifier) )) ;) })) (return_statement "return 0;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (char_literal ' character ')) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (return_statement return LIT ;) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' character ')) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression IDENT + LIT)) , (binary_expression IDENT <= IDENT)) ))) )) (compound_statement { (return_statement return LIT ;) })) }))) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) )))) = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))))) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT < IDENT) )) ;) })) (return_statement return LIT ;) })))
(function_definition "undefined8 FUN_00436d10(undefined8 param_1,long *param_2)\n\n{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  \n  uVar2 = param_2[1];\n  if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }\n  return 0;\n}" (type_identifier "undefined8") (function_declarator "FUN_00436d10(undefined8 param_1,long *param_2)" (identifier "FUN_00436d10") (parameter_list "(undefined8 param_1,long *param_2)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  char cVar1;\n  ulong uVar2;\n  long lVar3;\n  ulong uVar4;\n  ulong uVar5;\n  \n  uVar2 = param_2[1];\n  if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }\n  return 0;\n}" ({ "{") (declaration "char cVar1;" (primitive_type "char") (identifier "cVar1") (; ";")) (declaration "ulong uVar2;" (type_identifier "ulong") (identifier "uVar2") (; ";")) (declaration "long lVar3;" (sized_type_specifier "long" (long "long")) (identifier "lVar3") (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "ulong uVar5;" (type_identifier "ulong") (identifier "uVar5") (; ";")) (expression_statement "uVar2 = param_2[1];" (assignment_expression "uVar2 = param_2[1]" (identifier "uVar2") (= "=") (subscript_expression "param_2[1]" (identifier "param_2") ([ "[") (number_literal "1") (] "]"))) (; ";")) (if_statement "if (uVar2 != 0) {\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }" (if "if") (parenthesized_expression "(uVar2 != 0)" (( "(") (binary_expression "uVar2 != 0" (identifier "uVar2") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar4 = 0;\n    uVar5 = 0;\n    do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);\n  }" ({ "{") (expression_statement "uVar4 = 0;" (assignment_expression "uVar4 = 0" (identifier "uVar4") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar5 = 0;" (assignment_expression "uVar5 = 0" (identifier "uVar5") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    } while (uVar4 < uVar2);" (do "do") (compound_statement "{\n      lVar3 = *param_2;\n      cVar1 = *(char *)(lVar3 + uVar4);\n      if (cVar1 == '?') {\n        return 1;\n      }\n      if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }\n      if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }\n      uVar4 = uVar4 + 1;\n      uVar5 = uVar5 + 1;\n    }" ({ "{") (expression_statement "lVar3 = *param_2;" (assignment_expression "lVar3 = *param_2" (identifier "lVar3") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "cVar1 = *(char *)(lVar3 + uVar4);" (assignment_expression "cVar1 = *(char *)(lVar3 + uVar4)" (identifier "cVar1") (= "=") (pointer_expression "*(char *)(lVar3 + uVar4)" (* "*") (cast_expression "(char *)(lVar3 + uVar4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + uVar4)" (( "(") (binary_expression "lVar3 + uVar4" (identifier "lVar3") (+ "+") (identifier "uVar4")) () ")"))))) (; ";")) (if_statement "if (cVar1 == '?') {\n        return 1;\n      }" (if "if") (parenthesized_expression "(cVar1 == '?')" (( "(") (binary_expression "cVar1 == '?'" (identifier "cVar1") (== "==") (char_literal "'?'" (' "'") (character "?") (' "'"))) () ")")) (compound_statement "{\n        return 1;\n      }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (if_statement "if (cVar1 < '@') {\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }\n      else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }" (if "if") (parenthesized_expression "(cVar1 < '@')" (( "(") (binary_expression "cVar1 < '@'" (identifier "cVar1") (< "<") (char_literal "'@'" (' "'") (character "@") (' "'"))) () ")")) (compound_statement "{\n        if (cVar1 == '*') {\n          return 1;\n        }\n      }" ({ "{") (if_statement "if (cVar1 == '*') {\n          return 1;\n        }" (if "if") (parenthesized_expression "(cVar1 == '*')" (( "(") (binary_expression "cVar1 == '*'" (identifier "cVar1") (== "==") (char_literal "'*'" (' "'") (character "*") (' "'"))) () ")")) (compound_statement "{\n          return 1;\n        }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }" (else "else") (compound_statement "{\n        if (cVar1 == '[') {\n          return 1;\n        }\n        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }\n      }" ({ "{") (if_statement "if (cVar1 == '[') {\n          return 1;\n        }" (if "if") (parenthesized_expression "(cVar1 == '[')" (( "(") (binary_expression "cVar1 == '['" (identifier "cVar1") (== "==") (char_literal "'['" (' "'") (character "[") (' "'"))) () ")")) (compound_statement "{\n          return 1;\n        }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (if_statement "if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {\n          return 0;\n        }" (if "if") (parenthesized_expression "((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4))" (( "(") (binary_expression "(cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)" (parenthesized_expression "(cVar1 == '\\')" (( "(") (binary_expression "cVar1 == '\\'" (identifier "cVar1") (== "==") (char_literal "'\\'" (' "'") (escape_sequence "\\") (' "'"))) () ")")) (&& "&&") (parenthesized_expression "(uVar4 = uVar4 + 1, uVar2 <= uVar4)" (( "(") (comma_expression "uVar4 = uVar4 + 1, uVar2 <= uVar4" (assignment_expression "uVar4 = uVar4 + 1" (identifier "uVar4") (= "=") (binary_expression "uVar4 + 1" (identifier "uVar4") (+ "+") (number_literal "1"))) (, ",") (binary_expression "uVar2 <= uVar4" (identifier "uVar2") (<= "<=") (identifier "uVar4"))) () ")"))) () ")")) (compound_statement "{\n          return 0;\n        }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (} "}")))) (if_statement "if (uVar5 != uVar4) {\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }" (if "if") (parenthesized_expression "(uVar5 != uVar4)" (( "(") (binary_expression "uVar5 != uVar4" (identifier "uVar5") (!= "!=") (identifier "uVar4")) () ")")) (compound_statement "{\n        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);\n      }" ({ "{") (expression_statement "*(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);" (assignment_expression "*(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4)" (pointer_expression "*(undefined1 *)(lVar3 + uVar5)" (* "*") (cast_expression "(undefined1 *)(lVar3 + uVar5)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + uVar5)" (( "(") (binary_expression "lVar3 + uVar5" (identifier "lVar3") (+ "+") (identifier "uVar5")) () ")")))) (= "=") (pointer_expression "*(undefined1 *)(lVar3 + uVar4)" (* "*") (cast_expression "(undefined1 *)(lVar3 + uVar4)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar3 + uVar4)" (( "(") (binary_expression "lVar3 + uVar4" (identifier "lVar3") (+ "+") (identifier "uVar4")) () ")"))))) (; ";")) (} "}"))) (expression_statement "uVar4 = uVar4 + 1;" (assignment_expression "uVar4 = uVar4 + 1" (identifier "uVar4") (= "=") (binary_expression "uVar4 + 1" (identifier "uVar4") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "uVar5 = uVar5 + 1;" (assignment_expression "uVar5 = uVar5 + 1" (identifier "uVar5") (= "=") (binary_expression "uVar5 + 1" (identifier "uVar5") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(uVar4 < uVar2)" (( "(") (binary_expression "uVar4 < uVar2" (identifier "uVar4") (< "<") (identifier "uVar2")) () ")")) (; ";")) (} "}"))) (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))

/* DWARF original prototype: bool unquote(Version_script_info * this, string * pattern) */

bool __thiscall gold::type_1::function_1(type_1 *this,type_2 *pattern)

{
  char var_2;
  type_3 var_1;
  type_4 pcVar3;
  type_3 var_3;
  type_3 var_4;
  
  var_1 = pattern->_M_string_length;
  if (var_1 != 0) {
    var_3 = 0;
    var_4 = 0;
    do {
      pcVar3 = (pattern->_M_dataplus)._M_p;
      var_2 = pcVar3[var_3];
      if (var_2 == '?') {
        return true;
      }
      if (var_2 < '@') {
        if (var_2 == '*') {
          return true;
        }
      }
      else {
        if (var_2 == '[') {
          return true;
        }
        if ((var_2 == '\\') && (var_3 = var_3 + 1, var_1 <= var_3)) {
          return false;
        }
      }
      if (var_4 != var_3) {
        pcVar3[var_4] = pcVar3[var_3];
      }
      var_3 = var_3 + 1;
      var_4 = var_4 + 1;
    } while (var_3 < var_1);
  }
  return false;
}


(translation_unit (function_definition type: (type_identifier) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (subscript_expression argument: (identifier) index: (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (character)))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (character)))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (character)))) consequence: (compound_statement (return_statement (number_literal))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (character)))) consequence: (compound_statement (return_statement (number_literal)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))) right: (binary_expression left: (identifier) right: (identifier)))))) consequence: (compound_statement (return_statement (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))) consequence: (compound_statement (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (identifier))))))))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (identifier)))))) (return_statement (number_literal)))))

undefined8 MASKED(undefined8 param_1,long *param_2)

{
  char cVar1;
  ulong uVar2;
  long lVar3;
  ulong uVar4;
  ulong uVar5;
  
  uVar2 = param_2[1];
  if (uVar2 != 0) {
    uVar4 = 0;
    uVar5 = 0;
    do {
      lVar3 = *param_2;
      cVar1 = *(char *)(lVar3 + uVar4);
      if (cVar1 == '?') {
        return 1;
      }
      if (cVar1 < '@') {
        if (cVar1 == '*') {
          return 1;
        }
      }
      else {
        if (cVar1 == '[') {
          return 1;
        }
        if ((cVar1 == '\\') && (uVar4 = uVar4 + 1, uVar2 <= uVar4)) {
          return 0;
        }
      }
      if (uVar5 != uVar4) {
        *(undefined1 *)(lVar3 + uVar5) = *(undefined1 *)(lVar3 + uVar4);
      }
      uVar4 = uVar4 + 1;
      uVar5 = uVar5 + 1;
    } while (uVar4 < uVar2);
  }
  return 0;
}

