
demangle_component * d_find_pack(d_print_info *dpi,demangle_component *dc)

{
  demangle_component *pdVar1;
  
  if (dc == (demangle_component *)0x0) {
    return (demangle_component *)0x0;
  }
  do {
    switch(dc->type) {
    case DEMANGLE_COMPONENT_NAME:
    case DEMANGLE_COMPONENT_FUNCTION_PARAM:
    case DEMANGLE_COMPONENT_SUB_STD:
    case DEMANGLE_COMPONENT_BUILTIN_TYPE:
    case DEMANGLE_COMPONENT_FIXED_TYPE:
    case DEMANGLE_COMPONENT_OPERATOR:
    case DEMANGLE_COMPONENT_CHARACTER:
    case DEMANGLE_COMPONENT_NUMBER:
    case DEMANGLE_COMPONENT_LAMBDA:
    case DEMANGLE_COMPONENT_DEFAULT_ARG:
    case DEMANGLE_COMPONENT_UNNAMED_TYPE:
    case DEMANGLE_COMPONENT_PACK_EXPANSION:
    case DEMANGLE_COMPONENT_TAGGED_NAME:
      goto LAB_00291882;
    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
      pdVar1 = d_lookup_template_argument(dpi,(demangle_component *)&(dc->u).s_name);
      if ((pdVar1 != (demangle_component *)0x0) &&
         (pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)) {
        return pdVar1;
      }
      goto LAB_00291882;
    case DEMANGLE_COMPONENT_CTOR:
    case DEMANGLE_COMPONENT_DTOR:
    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
      goto switchD_00291855_caseD_7;
    }
    pdVar1 = d_find_pack(dpi,(dc->u).s_fixed.length);
    if (pdVar1 != (demangle_component *)0x0) {
      return pdVar1;
    }
switchD_00291855_caseD_7:
    dc = (dc->u).s_extended_operator.name;
  } while (dc != (demangle_component *)0x0);
LAB_00291882:
  return (demangle_component *)0x0;
}



int * FUN_00291830(undefined8 param_1,undefined4 *param_2)

{
  int *piVar1;
  
  if (param_2 == (undefined4 *)0x0) {
    return (int *)0x0;
  }
  do {
    switch(*param_2) {
    case 0:
    case 6:
    case 0x18:
    case 0x27:
    case 0x2c:
    case 0x31:
    case 0x40:
    case 0x41:
    case 0x45:
    case 0x46:
    case 0x47:
    case 0x4a:
    case 0x4b:
      goto LAB_00291882;
    case 5:
      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);
      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {
        return piVar1;
      }
      goto LAB_00291882;
    case 7:
    case 8:
    case 0x32:
      goto switchD_00291855_caseD_7;
    }
    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));
    if (piVar1 != (int *)0x0) {
      return piVar1;
    }
switchD_00291855_caseD_7:
    param_2 = *(undefined4 **)(param_2 + 4);
  } while (param_2 != (undefined4 *)0x0);
LAB_00291882:
  return (int *)0x0;
}


TEST RSI,RSI
JZ 0x002918b0
PUSH R12
MOV R12,RDI
PUSH RBP
LEA RBP,[0x358c50]
PUSH RBX
MOV RBX,RSI
CMP dword ptr [RBX],0x4b
JA 0x00291860
MOV EAX,dword ptr [RBX]
MOVSXD RAX,dword ptr [RBP + RAX*0x4]
ADD RAX,RBP
JMP RAX
MOV RSI,qword ptr [RBX + 0x8]
MOV RDI,R12
CALL 0x00291830
TEST RAX,RAX
JNZ 0x00291882
MOV RBX,qword ptr [RBX + 0x10]
TEST RBX,RBX
JNZ 0x00291846
NOP word ptr [RAX + RAX*0x1]
XOR EAX,EAX
POP RBX
POP RBP
POP R12
RET
LEA RSI,[RBX + 0x8]
MOV RDI,R12
CALL 0x002917f0
TEST RAX,RAX
JZ 0x00291880
CMP dword ptr [RAX],0x2f
JNZ 0x00291880
POP RBX
POP RBP
POP R12
RET
XOR EAX,EAX
RET
(translation_unit "int * FUN_00291830(undefined8 param_1,undefined4 *param_2)\n\n{\n  int *piVar1;\n  \n  if (param_2 == (undefined4 *)0x0) {\n    return (int *)0x0;\n  }\n  do {\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  } while (param_2 != (undefined4 *)0x0);\nLAB_00291882:\n  return (int *)0x0;\n}\n\n" (function_definition "int * FUN_00291830(undefined8 param_1,undefined4 *param_2)\n\n{\n  int *piVar1;\n  \n  if (param_2 == (undefined4 *)0x0) {\n    return (int *)0x0;\n  }\n  do {\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  } while (param_2 != (undefined4 *)0x0);\nLAB_00291882:\n  return (int *)0x0;\n}" primitive_type (pointer_declarator "* FUN_00291830(undefined8 param_1,undefined4 *param_2)" * (function_declarator "FUN_00291830(undefined8 param_1,undefined4 *param_2)" identifier (parameter_list "(undefined8 param_1,undefined4 *param_2)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) )))) (compound_statement "{\n  int *piVar1;\n  \n  if (param_2 == (undefined4 *)0x0) {\n    return (int *)0x0;\n  }\n  do {\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  } while (param_2 != (undefined4 *)0x0);\nLAB_00291882:\n  return (int *)0x0;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (if_statement "if (param_2 == (undefined4 *)0x0) {\n    return (int *)0x0;\n  }" if (parenthesized_expression "(param_2 == (undefined4 *)0x0)" ( (binary_expression "param_2 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (int *)0x0;\n  }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (do_statement "do {\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  } while (param_2 != (undefined4 *)0x0);" do (compound_statement "{\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  }" { (switch_statement "switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }" switch (parenthesized_expression "(*param_2)" ( (pointer_expression "*param_2" * identifier) )) (compound_statement "{\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }" { (case_statement "case 0:" case number_literal :) (case_statement "case 6:" case number_literal :) (case_statement "case 0x18:" case number_literal :) (case_statement "case 0x27:" case number_literal :) (case_statement "case 0x2c:" case number_literal :) (case_statement "case 0x31:" case number_literal :) (case_statement "case 0x40:" case number_literal :) (case_statement "case 0x41:" case number_literal :) (case_statement "case 0x45:" case number_literal :) (case_statement "case 0x46:" case number_literal :) (case_statement "case 0x47:" case number_literal :) (case_statement "case 0x4a:" case number_literal :) (case_statement "case 0x4b:\n      goto LAB_00291882;" case number_literal : (goto_statement "goto LAB_00291882;" goto statement_identifier ;)) (case_statement "case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;" case number_literal : (expression_statement "piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);" (assignment_expression "piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2)" identifier = (cast_expression "(int *)FUN_002917f0(param_1,param_2 + 2)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002917f0(param_1,param_2 + 2)" identifier (argument_list "(param_1,param_2 + 2)" ( identifier , (binary_expression "param_2 + 2" identifier + number_literal) ))))) ;) (if_statement "if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }" if (parenthesized_expression "((piVar1 != (int *)0x0) && (*piVar1 == 0x2f))" ( (binary_expression "(piVar1 != (int *)0x0) && (*piVar1 == 0x2f)" (parenthesized_expression "(piVar1 != (int *)0x0)" ( (binary_expression "piVar1 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*piVar1 == 0x2f)" ( (binary_expression "*piVar1 == 0x2f" (pointer_expression "*piVar1" * identifier) == number_literal) ))) )) (compound_statement "{\n        return piVar1;\n      }" { (return_statement "return piVar1;" return identifier ;) })) (goto_statement "goto LAB_00291882;" goto statement_identifier ;)) (case_statement "case 7:" case number_literal :) (case_statement "case 8:" case number_literal :) (case_statement "case 0x32:\n      goto switchD_00291855_caseD_7;" case number_literal : (goto_statement "goto switchD_00291855_caseD_7;" goto statement_identifier ;)) })) (expression_statement "piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));" (assignment_expression "piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2))" identifier = (cast_expression "(int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2))" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00291830(param_1,*(undefined8 *)(param_2 + 2))" identifier (argument_list "(param_1,*(undefined8 *)(param_2 + 2))" ( identifier , (pointer_expression "*(undefined8 *)(param_2 + 2)" * (cast_expression "(undefined8 *)(param_2 + 2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 2)" ( (binary_expression "param_2 + 2" identifier + number_literal) )))) ))))) ;) (if_statement "if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }" if (parenthesized_expression "(piVar1 != (int *)0x0)" ( (binary_expression "piVar1 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return piVar1;\n    }" { (return_statement "return piVar1;" return identifier ;) })) (labeled_statement "switchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);" statement_identifier : (expression_statement "param_2 = *(undefined4 **)(param_2 + 4);" (assignment_expression "param_2 = *(undefined4 **)(param_2 + 4)" identifier = (pointer_expression "*(undefined4 **)(param_2 + 4)" * (cast_expression "(undefined4 **)(param_2 + 4)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;)) }) while (parenthesized_expression "(param_2 != (undefined4 *)0x0)" ( (binary_expression "param_2 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (labeled_statement "LAB_00291882:\n  return (int *)0x0;" statement_identifier : (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;)) })))
(translation_unit "demangle_component * d_find_pack(d_print_info *dpi,demangle_component *dc)\n\n{\n  demangle_component *pdVar1;\n  \n  if (dc == (demangle_component *)0x0) {\n    return (demangle_component *)0x0;\n  }\n  do {\n    switch(dc->type) {\n    case DEMANGLE_COMPONENT_NAME:\n    case DEMANGLE_COMPONENT_FUNCTION_PARAM:\n    case DEMANGLE_COMPONENT_SUB_STD:\n    case DEMANGLE_COMPONENT_BUILTIN_TYPE:\n    case DEMANGLE_COMPONENT_FIXED_TYPE:\n    case DEMANGLE_COMPONENT_OPERATOR:\n    case DEMANGLE_COMPONENT_CHARACTER:\n    case DEMANGLE_COMPONENT_NUMBER:\n    case DEMANGLE_COMPONENT_LAMBDA:\n    case DEMANGLE_COMPONENT_DEFAULT_ARG:\n    case DEMANGLE_COMPONENT_UNNAMED_TYPE:\n    case DEMANGLE_COMPONENT_PACK_EXPANSION:\n    case DEMANGLE_COMPONENT_TAGGED_NAME:\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:\n      pdVar1 = d_lookup_template_argument(dpi,(demangle_component *)&(dc->u).s_name);\n      if ((pdVar1 != (demangle_component *)0x0) &&\n         (pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)) {\n        return pdVar1;\n      }\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_CTOR:\n    case DEMANGLE_COMPONENT_DTOR:\n    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:\n      goto switchD_00291855_caseD_7;\n    }\n    pdVar1 = d_find_pack(dpi,(dc->u).s_fixed.length);\n    if (pdVar1 != (demangle_component *)0x0) {\n      return pdVar1;\n    }\nswitchD_00291855_caseD_7:\n    dc = (dc->u).s_extended_operator.name;\n  } while (dc != (demangle_component *)0x0);\nLAB_00291882:\n  return (demangle_component *)0x0;\n}\n\n" (function_definition "demangle_component * d_find_pack(d_print_info *dpi,demangle_component *dc)\n\n{\n  demangle_component *pdVar1;\n  \n  if (dc == (demangle_component *)0x0) {\n    return (demangle_component *)0x0;\n  }\n  do {\n    switch(dc->type) {\n    case DEMANGLE_COMPONENT_NAME:\n    case DEMANGLE_COMPONENT_FUNCTION_PARAM:\n    case DEMANGLE_COMPONENT_SUB_STD:\n    case DEMANGLE_COMPONENT_BUILTIN_TYPE:\n    case DEMANGLE_COMPONENT_FIXED_TYPE:\n    case DEMANGLE_COMPONENT_OPERATOR:\n    case DEMANGLE_COMPONENT_CHARACTER:\n    case DEMANGLE_COMPONENT_NUMBER:\n    case DEMANGLE_COMPONENT_LAMBDA:\n    case DEMANGLE_COMPONENT_DEFAULT_ARG:\n    case DEMANGLE_COMPONENT_UNNAMED_TYPE:\n    case DEMANGLE_COMPONENT_PACK_EXPANSION:\n    case DEMANGLE_COMPONENT_TAGGED_NAME:\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:\n      pdVar1 = d_lookup_template_argument(dpi,(demangle_component *)&(dc->u).s_name);\n      if ((pdVar1 != (demangle_component *)0x0) &&\n         (pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)) {\n        return pdVar1;\n      }\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_CTOR:\n    case DEMANGLE_COMPONENT_DTOR:\n    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:\n      goto switchD_00291855_caseD_7;\n    }\n    pdVar1 = d_find_pack(dpi,(dc->u).s_fixed.length);\n    if (pdVar1 != (demangle_component *)0x0) {\n      return pdVar1;\n    }\nswitchD_00291855_caseD_7:\n    dc = (dc->u).s_extended_operator.name;\n  } while (dc != (demangle_component *)0x0);\nLAB_00291882:\n  return (demangle_component *)0x0;\n}" type_identifier (pointer_declarator "* d_find_pack(d_print_info *dpi,demangle_component *dc)" * (function_declarator "d_find_pack(d_print_info *dpi,demangle_component *dc)" identifier (parameter_list "(d_print_info *dpi,demangle_component *dc)" ( (parameter_declaration "d_print_info *dpi" type_identifier (pointer_declarator "*dpi" * identifier)) , (parameter_declaration "demangle_component *dc" type_identifier (pointer_declarator "*dc" * identifier)) )))) (compound_statement "{\n  demangle_component *pdVar1;\n  \n  if (dc == (demangle_component *)0x0) {\n    return (demangle_component *)0x0;\n  }\n  do {\n    switch(dc->type) {\n    case DEMANGLE_COMPONENT_NAME:\n    case DEMANGLE_COMPONENT_FUNCTION_PARAM:\n    case DEMANGLE_COMPONENT_SUB_STD:\n    case DEMANGLE_COMPONENT_BUILTIN_TYPE:\n    case DEMANGLE_COMPONENT_FIXED_TYPE:\n    case DEMANGLE_COMPONENT_OPERATOR:\n    case DEMANGLE_COMPONENT_CHARACTER:\n    case DEMANGLE_COMPONENT_NUMBER:\n    case DEMANGLE_COMPONENT_LAMBDA:\n    case DEMANGLE_COMPONENT_DEFAULT_ARG:\n    case DEMANGLE_COMPONENT_UNNAMED_TYPE:\n    case DEMANGLE_COMPONENT_PACK_EXPANSION:\n    case DEMANGLE_COMPONENT_TAGGED_NAME:\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:\n      pdVar1 = d_lookup_template_argument(dpi,(demangle_component *)&(dc->u).s_name);\n      if ((pdVar1 != (demangle_component *)0x0) &&\n         (pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)) {\n        return pdVar1;\n      }\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_CTOR:\n    case DEMANGLE_COMPONENT_DTOR:\n    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:\n      goto switchD_00291855_caseD_7;\n    }\n    pdVar1 = d_find_pack(dpi,(dc->u).s_fixed.length);\n    if (pdVar1 != (demangle_component *)0x0) {\n      return pdVar1;\n    }\nswitchD_00291855_caseD_7:\n    dc = (dc->u).s_extended_operator.name;\n  } while (dc != (demangle_component *)0x0);\nLAB_00291882:\n  return (demangle_component *)0x0;\n}" { (declaration "demangle_component *pdVar1;" type_identifier (pointer_declarator "*pdVar1" * identifier) ;) (if_statement "if (dc == (demangle_component *)0x0) {\n    return (demangle_component *)0x0;\n  }" if (parenthesized_expression "(dc == (demangle_component *)0x0)" ( (binary_expression "dc == (demangle_component *)0x0" identifier == (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (demangle_component *)0x0;\n  }" { (return_statement "return (demangle_component *)0x0;" return (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (do_statement "do {\n    switch(dc->type) {\n    case DEMANGLE_COMPONENT_NAME:\n    case DEMANGLE_COMPONENT_FUNCTION_PARAM:\n    case DEMANGLE_COMPONENT_SUB_STD:\n    case DEMANGLE_COMPONENT_BUILTIN_TYPE:\n    case DEMANGLE_COMPONENT_FIXED_TYPE:\n    case DEMANGLE_COMPONENT_OPERATOR:\n    case DEMANGLE_COMPONENT_CHARACTER:\n    case DEMANGLE_COMPONENT_NUMBER:\n    case DEMANGLE_COMPONENT_LAMBDA:\n    case DEMANGLE_COMPONENT_DEFAULT_ARG:\n    case DEMANGLE_COMPONENT_UNNAMED_TYPE:\n    case DEMANGLE_COMPONENT_PACK_EXPANSION:\n    case DEMANGLE_COMPONENT_TAGGED_NAME:\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:\n      pdVar1 = d_lookup_template_argument(dpi,(demangle_component *)&(dc->u).s_name);\n      if ((pdVar1 != (demangle_component *)0x0) &&\n         (pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)) {\n        return pdVar1;\n      }\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_CTOR:\n    case DEMANGLE_COMPONENT_DTOR:\n    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:\n      goto switchD_00291855_caseD_7;\n    }\n    pdVar1 = d_find_pack(dpi,(dc->u).s_fixed.length);\n    if (pdVar1 != (demangle_component *)0x0) {\n      return pdVar1;\n    }\nswitchD_00291855_caseD_7:\n    dc = (dc->u).s_extended_operator.name;\n  } while (dc != (demangle_component *)0x0);" do (compound_statement "{\n    switch(dc->type) {\n    case DEMANGLE_COMPONENT_NAME:\n    case DEMANGLE_COMPONENT_FUNCTION_PARAM:\n    case DEMANGLE_COMPONENT_SUB_STD:\n    case DEMANGLE_COMPONENT_BUILTIN_TYPE:\n    case DEMANGLE_COMPONENT_FIXED_TYPE:\n    case DEMANGLE_COMPONENT_OPERATOR:\n    case DEMANGLE_COMPONENT_CHARACTER:\n    case DEMANGLE_COMPONENT_NUMBER:\n    case DEMANGLE_COMPONENT_LAMBDA:\n    case DEMANGLE_COMPONENT_DEFAULT_ARG:\n    case DEMANGLE_COMPONENT_UNNAMED_TYPE:\n    case DEMANGLE_COMPONENT_PACK_EXPANSION:\n    case DEMANGLE_COMPONENT_TAGGED_NAME:\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:\n      pdVar1 = d_lookup_template_argument(dpi,(demangle_component *)&(dc->u).s_name);\n      if ((pdVar1 != (demangle_component *)0x0) &&\n         (pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)) {\n        return pdVar1;\n      }\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_CTOR:\n    case DEMANGLE_COMPONENT_DTOR:\n    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:\n      goto switchD_00291855_caseD_7;\n    }\n    pdVar1 = d_find_pack(dpi,(dc->u).s_fixed.length);\n    if (pdVar1 != (demangle_component *)0x0) {\n      return pdVar1;\n    }\nswitchD_00291855_caseD_7:\n    dc = (dc->u).s_extended_operator.name;\n  }" { (switch_statement "switch(dc->type) {\n    case DEMANGLE_COMPONENT_NAME:\n    case DEMANGLE_COMPONENT_FUNCTION_PARAM:\n    case DEMANGLE_COMPONENT_SUB_STD:\n    case DEMANGLE_COMPONENT_BUILTIN_TYPE:\n    case DEMANGLE_COMPONENT_FIXED_TYPE:\n    case DEMANGLE_COMPONENT_OPERATOR:\n    case DEMANGLE_COMPONENT_CHARACTER:\n    case DEMANGLE_COMPONENT_NUMBER:\n    case DEMANGLE_COMPONENT_LAMBDA:\n    case DEMANGLE_COMPONENT_DEFAULT_ARG:\n    case DEMANGLE_COMPONENT_UNNAMED_TYPE:\n    case DEMANGLE_COMPONENT_PACK_EXPANSION:\n    case DEMANGLE_COMPONENT_TAGGED_NAME:\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:\n      pdVar1 = d_lookup_template_argument(dpi,(demangle_component *)&(dc->u).s_name);\n      if ((pdVar1 != (demangle_component *)0x0) &&\n         (pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)) {\n        return pdVar1;\n      }\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_CTOR:\n    case DEMANGLE_COMPONENT_DTOR:\n    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:\n      goto switchD_00291855_caseD_7;\n    }" switch (parenthesized_expression "(dc->type)" ( (field_expression "dc->type" identifier -> field_identifier) )) (compound_statement "{\n    case DEMANGLE_COMPONENT_NAME:\n    case DEMANGLE_COMPONENT_FUNCTION_PARAM:\n    case DEMANGLE_COMPONENT_SUB_STD:\n    case DEMANGLE_COMPONENT_BUILTIN_TYPE:\n    case DEMANGLE_COMPONENT_FIXED_TYPE:\n    case DEMANGLE_COMPONENT_OPERATOR:\n    case DEMANGLE_COMPONENT_CHARACTER:\n    case DEMANGLE_COMPONENT_NUMBER:\n    case DEMANGLE_COMPONENT_LAMBDA:\n    case DEMANGLE_COMPONENT_DEFAULT_ARG:\n    case DEMANGLE_COMPONENT_UNNAMED_TYPE:\n    case DEMANGLE_COMPONENT_PACK_EXPANSION:\n    case DEMANGLE_COMPONENT_TAGGED_NAME:\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:\n      pdVar1 = d_lookup_template_argument(dpi,(demangle_component *)&(dc->u).s_name);\n      if ((pdVar1 != (demangle_component *)0x0) &&\n         (pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)) {\n        return pdVar1;\n      }\n      goto LAB_00291882;\n    case DEMANGLE_COMPONENT_CTOR:\n    case DEMANGLE_COMPONENT_DTOR:\n    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:\n      goto switchD_00291855_caseD_7;\n    }" { (case_statement "case DEMANGLE_COMPONENT_NAME:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_FUNCTION_PARAM:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_SUB_STD:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_BUILTIN_TYPE:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_FIXED_TYPE:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_OPERATOR:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_CHARACTER:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_NUMBER:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_LAMBDA:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_DEFAULT_ARG:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_UNNAMED_TYPE:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_PACK_EXPANSION:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_TAGGED_NAME:\n      goto LAB_00291882;" case identifier : (goto_statement "goto LAB_00291882;" goto statement_identifier ;)) (case_statement "case DEMANGLE_COMPONENT_TEMPLATE_PARAM:\n      pdVar1 = d_lookup_template_argument(dpi,(demangle_component *)&(dc->u).s_name);\n      if ((pdVar1 != (demangle_component *)0x0) &&\n         (pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)) {\n        return pdVar1;\n      }\n      goto LAB_00291882;" case identifier : (expression_statement "pdVar1 = d_lookup_template_argument(dpi,(demangle_component *)&(dc->u).s_name);" (assignment_expression "pdVar1 = d_lookup_template_argument(dpi,(demangle_component *)&(dc->u).s_name)" identifier = (call_expression "d_lookup_template_argument(dpi,(demangle_component *)&(dc->u).s_name)" identifier (argument_list "(dpi,(demangle_component *)&(dc->u).s_name)" ( identifier , (cast_expression "(demangle_component *)&(dc->u).s_name" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&(dc->u).s_name" & (field_expression "(dc->u).s_name" (parenthesized_expression "(dc->u)" ( (field_expression "dc->u" identifier -> field_identifier) )) . field_identifier))) )))) ;) (if_statement "if ((pdVar1 != (demangle_component *)0x0) &&\n         (pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)) {\n        return pdVar1;\n      }" if (parenthesized_expression "((pdVar1 != (demangle_component *)0x0) &&\n         (pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST))" ( (binary_expression "(pdVar1 != (demangle_component *)0x0) &&\n         (pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)" (parenthesized_expression "(pdVar1 != (demangle_component *)0x0)" ( (binary_expression "pdVar1 != (demangle_component *)0x0" identifier != (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST)" ( (binary_expression "pdVar1->type == DEMANGLE_COMPONENT_TEMPLATE_ARGLIST" (field_expression "pdVar1->type" identifier -> field_identifier) == identifier) ))) )) (compound_statement "{\n        return pdVar1;\n      }" { (return_statement "return pdVar1;" return identifier ;) })) (goto_statement "goto LAB_00291882;" goto statement_identifier ;)) (case_statement "case DEMANGLE_COMPONENT_CTOR:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_DTOR:" case identifier :) (case_statement "case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:\n      goto switchD_00291855_caseD_7;" case identifier : (goto_statement "goto switchD_00291855_caseD_7;" goto statement_identifier ;)) })) (expression_statement "pdVar1 = d_find_pack(dpi,(dc->u).s_fixed.length);" (assignment_expression "pdVar1 = d_find_pack(dpi,(dc->u).s_fixed.length)" identifier = (call_expression "d_find_pack(dpi,(dc->u).s_fixed.length)" identifier (argument_list "(dpi,(dc->u).s_fixed.length)" ( identifier , (field_expression "(dc->u).s_fixed.length" (field_expression "(dc->u).s_fixed" (parenthesized_expression "(dc->u)" ( (field_expression "dc->u" identifier -> field_identifier) )) . field_identifier) . field_identifier) )))) ;) (if_statement "if (pdVar1 != (demangle_component *)0x0) {\n      return pdVar1;\n    }" if (parenthesized_expression "(pdVar1 != (demangle_component *)0x0)" ( (binary_expression "pdVar1 != (demangle_component *)0x0" identifier != (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return pdVar1;\n    }" { (return_statement "return pdVar1;" return identifier ;) })) (labeled_statement "switchD_00291855_caseD_7:\n    dc = (dc->u).s_extended_operator.name;" statement_identifier : (expression_statement "dc = (dc->u).s_extended_operator.name;" (assignment_expression "dc = (dc->u).s_extended_operator.name" identifier = (field_expression "(dc->u).s_extended_operator.name" (field_expression "(dc->u).s_extended_operator" (parenthesized_expression "(dc->u)" ( (field_expression "dc->u" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;)) }) while (parenthesized_expression "(dc != (demangle_component *)0x0)" ( (binary_expression "dc != (demangle_component *)0x0" identifier != (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (labeled_statement "LAB_00291882:\n  return (demangle_component *)0x0;" statement_identifier : (return_statement "return (demangle_component *)0x0;" return (cast_expression "(demangle_component *)0x0" ( (type_descriptor "demangle_component *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal) ;)) })))
(translation_unit "int * FUN_00291830(undefined8 param_1,undefined4 *param_2)\n\n{\n  int *piVar1;\n  \n  if (param_2 == (undefined4 *)0x0) {\n    return (int *)0x0;\n  }\n  do {\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  } while (param_2 != (undefined4 *)0x0);\nLAB_00291882:\n  return (int *)0x0;\n}\n\n" (function_definition "int * FUN_00291830(undefined8 param_1,undefined4 *param_2)\n\n{\n  int *piVar1;\n  \n  if (param_2 == (undefined4 *)0x0) {\n    return (int *)0x0;\n  }\n  do {\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  } while (param_2 != (undefined4 *)0x0);\nLAB_00291882:\n  return (int *)0x0;\n}" primitive_type (pointer_declarator "* FUN_00291830(undefined8 param_1,undefined4 *param_2)" * (function_declarator "FUN_00291830(undefined8 param_1,undefined4 *param_2)" identifier (parameter_list "(undefined8 param_1,undefined4 *param_2)" ( (parameter_declaration "undefined8 param_1" type_identifier identifier) , (parameter_declaration "undefined4 *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) )))) (compound_statement "{\n  int *piVar1;\n  \n  if (param_2 == (undefined4 *)0x0) {\n    return (int *)0x0;\n  }\n  do {\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  } while (param_2 != (undefined4 *)0x0);\nLAB_00291882:\n  return (int *)0x0;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (if_statement "if (param_2 == (undefined4 *)0x0) {\n    return (int *)0x0;\n  }" if (parenthesized_expression "(param_2 == (undefined4 *)0x0)" ( (binary_expression "param_2 == (undefined4 *)0x0" identifier == (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return (int *)0x0;\n  }" { (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;) })) (do_statement "do {\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  } while (param_2 != (undefined4 *)0x0);" do (compound_statement "{\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  }" { (switch_statement "switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }" switch (parenthesized_expression "(*param_2)" ( (pointer_expression "*param_2" * identifier) )) (compound_statement "{\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }" { (case_statement "case 0:" case number_literal :) (case_statement "case 6:" case number_literal :) (case_statement "case 0x18:" case number_literal :) (case_statement "case 0x27:" case number_literal :) (case_statement "case 0x2c:" case number_literal :) (case_statement "case 0x31:" case number_literal :) (case_statement "case 0x40:" case number_literal :) (case_statement "case 0x41:" case number_literal :) (case_statement "case 0x45:" case number_literal :) (case_statement "case 0x46:" case number_literal :) (case_statement "case 0x47:" case number_literal :) (case_statement "case 0x4a:" case number_literal :) (case_statement "case 0x4b:\n      goto LAB_00291882;" case number_literal : (goto_statement "goto LAB_00291882;" goto statement_identifier ;)) (case_statement "case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;" case number_literal : (expression_statement "piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);" (assignment_expression "piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2)" identifier = (cast_expression "(int *)FUN_002917f0(param_1,param_2 + 2)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002917f0(param_1,param_2 + 2)" identifier (argument_list "(param_1,param_2 + 2)" ( identifier , (binary_expression "param_2 + 2" identifier + number_literal) ))))) ;) (if_statement "if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }" if (parenthesized_expression "((piVar1 != (int *)0x0) && (*piVar1 == 0x2f))" ( (binary_expression "(piVar1 != (int *)0x0) && (*piVar1 == 0x2f)" (parenthesized_expression "(piVar1 != (int *)0x0)" ( (binary_expression "piVar1 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(*piVar1 == 0x2f)" ( (binary_expression "*piVar1 == 0x2f" (pointer_expression "*piVar1" * identifier) == number_literal) ))) )) (compound_statement "{\n        return piVar1;\n      }" { (return_statement "return piVar1;" return identifier ;) })) (goto_statement "goto LAB_00291882;" goto statement_identifier ;)) (case_statement "case 7:" case number_literal :) (case_statement "case 8:" case number_literal :) (case_statement "case 0x32:\n      goto switchD_00291855_caseD_7;" case number_literal : (goto_statement "goto switchD_00291855_caseD_7;" goto statement_identifier ;)) })) (expression_statement "piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));" (assignment_expression "piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2))" identifier = (cast_expression "(int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2))" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00291830(param_1,*(undefined8 *)(param_2 + 2))" identifier (argument_list "(param_1,*(undefined8 *)(param_2 + 2))" ( identifier , (pointer_expression "*(undefined8 *)(param_2 + 2)" * (cast_expression "(undefined8 *)(param_2 + 2)" ( (type_descriptor "undefined8 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_2 + 2)" ( (binary_expression "param_2 + 2" identifier + number_literal) )))) ))))) ;) (if_statement "if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }" if (parenthesized_expression "(piVar1 != (int *)0x0)" ( (binary_expression "piVar1 != (int *)0x0" identifier != (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      return piVar1;\n    }" { (return_statement "return piVar1;" return identifier ;) })) (labeled_statement "switchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);" statement_identifier : (expression_statement "param_2 = *(undefined4 **)(param_2 + 4);" (assignment_expression "param_2 = *(undefined4 **)(param_2 + 4)" identifier = (pointer_expression "*(undefined4 **)(param_2 + 4)" * (cast_expression "(undefined4 **)(param_2 + 4)" ( (type_descriptor "undefined4 **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(param_2 + 4)" ( (binary_expression "param_2 + 4" identifier + number_literal) ))))) ;)) }) while (parenthesized_expression "(param_2 != (undefined4 *)0x0)" ( (binary_expression "param_2 != (undefined4 *)0x0" identifier != (cast_expression "(undefined4 *)0x0" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (labeled_statement "LAB_00291882:\n  return (int *)0x0;" statement_identifier : (return_statement "return (int *)0x0;" return (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal) ;)) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) )))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;) })) (do_statement do (compound_statement { (switch_statement switch (parenthesized_expression ( (pointer_expression * IDENT) )) (compound_statement { (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT : (goto_statement goto statement_identifier ;)) (case_statement case LIT : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , (binary_expression IDENT + LIT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) ))) )) (compound_statement { (return_statement return IDENT ;) })) (goto_statement goto statement_identifier ;)) (case_statement case LIT :) (case_statement case LIT :) (case_statement case LIT : (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return IDENT ;) })) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;)) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) ;) (labeled_statement statement_identifier : (return_statement return (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT) ;)) })))
(function_definition "int * FUN_00291830(undefined8 param_1,undefined4 *param_2)\n\n{\n  int *piVar1;\n  \n  if (param_2 == (undefined4 *)0x0) {\n    return (int *)0x0;\n  }\n  do {\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  } while (param_2 != (undefined4 *)0x0);\nLAB_00291882:\n  return (int *)0x0;\n}" (primitive_type "int") (pointer_declarator "* FUN_00291830(undefined8 param_1,undefined4 *param_2)" (* "*") (function_declarator "FUN_00291830(undefined8 param_1,undefined4 *param_2)" (identifier "FUN_00291830") (parameter_list "(undefined8 param_1,undefined4 *param_2)" (( "(") (parameter_declaration "undefined8 param_1" (type_identifier "undefined8") (identifier "param_1")) (, ",") (parameter_declaration "undefined4 *param_2" (type_identifier "undefined4") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")")))) (compound_statement "{\n  int *piVar1;\n  \n  if (param_2 == (undefined4 *)0x0) {\n    return (int *)0x0;\n  }\n  do {\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  } while (param_2 != (undefined4 *)0x0);\nLAB_00291882:\n  return (int *)0x0;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (if_statement "if (param_2 == (undefined4 *)0x0) {\n    return (int *)0x0;\n  }" (if "if") (parenthesized_expression "(param_2 == (undefined4 *)0x0)" (( "(") (binary_expression "param_2 == (undefined4 *)0x0" (identifier "param_2") (== "==") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return (int *)0x0;\n  }" ({ "{") (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";")) (} "}"))) (do_statement "do {\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  } while (param_2 != (undefined4 *)0x0);" (do "do") (compound_statement "{\n    switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }\n    piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));\n    if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }\nswitchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);\n  }" ({ "{") (switch_statement "switch(*param_2) {\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }" (switch "switch") (parenthesized_expression "(*param_2)" (( "(") (pointer_expression "*param_2" (* "*") (identifier "param_2")) () ")")) (compound_statement "{\n    case 0:\n    case 6:\n    case 0x18:\n    case 0x27:\n    case 0x2c:\n    case 0x31:\n    case 0x40:\n    case 0x41:\n    case 0x45:\n    case 0x46:\n    case 0x47:\n    case 0x4a:\n    case 0x4b:\n      goto LAB_00291882;\n    case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;\n    case 7:\n    case 8:\n    case 0x32:\n      goto switchD_00291855_caseD_7;\n    }" ({ "{") (case_statement "case 0:" (case "case") (number_literal "0") (: ":")) (case_statement "case 6:" (case "case") (number_literal "6") (: ":")) (case_statement "case 0x18:" (case "case") (number_literal "0x18") (: ":")) (case_statement "case 0x27:" (case "case") (number_literal "0x27") (: ":")) (case_statement "case 0x2c:" (case "case") (number_literal "0x2c") (: ":")) (case_statement "case 0x31:" (case "case") (number_literal "0x31") (: ":")) (case_statement "case 0x40:" (case "case") (number_literal "0x40") (: ":")) (case_statement "case 0x41:" (case "case") (number_literal "0x41") (: ":")) (case_statement "case 0x45:" (case "case") (number_literal "0x45") (: ":")) (case_statement "case 0x46:" (case "case") (number_literal "0x46") (: ":")) (case_statement "case 0x47:" (case "case") (number_literal "0x47") (: ":")) (case_statement "case 0x4a:" (case "case") (number_literal "0x4a") (: ":")) (case_statement "case 0x4b:\n      goto LAB_00291882;" (case "case") (number_literal "0x4b") (: ":") (goto_statement "goto LAB_00291882;" (goto "goto") (statement_identifier "LAB_00291882") (; ";"))) (case_statement "case 5:\n      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);\n      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }\n      goto LAB_00291882;" (case "case") (number_literal "5") (: ":") (expression_statement "piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);" (assignment_expression "piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2)" (identifier "piVar1") (= "=") (cast_expression "(int *)FUN_002917f0(param_1,param_2 + 2)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002917f0(param_1,param_2 + 2)" (identifier "FUN_002917f0") (argument_list "(param_1,param_2 + 2)" (( "(") (identifier "param_1") (, ",") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2")) () ")"))))) (; ";")) (if_statement "if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {\n        return piVar1;\n      }" (if "if") (parenthesized_expression "((piVar1 != (int *)0x0) && (*piVar1 == 0x2f))" (( "(") (binary_expression "(piVar1 != (int *)0x0) && (*piVar1 == 0x2f)" (parenthesized_expression "(piVar1 != (int *)0x0)" (( "(") (binary_expression "piVar1 != (int *)0x0" (identifier "piVar1") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(*piVar1 == 0x2f)" (( "(") (binary_expression "*piVar1 == 0x2f" (pointer_expression "*piVar1" (* "*") (identifier "piVar1")) (== "==") (number_literal "0x2f")) () ")"))) () ")")) (compound_statement "{\n        return piVar1;\n      }" ({ "{") (return_statement "return piVar1;" (return "return") (identifier "piVar1") (; ";")) (} "}"))) (goto_statement "goto LAB_00291882;" (goto "goto") (statement_identifier "LAB_00291882") (; ";"))) (case_statement "case 7:" (case "case") (number_literal "7") (: ":")) (case_statement "case 8:" (case "case") (number_literal "8") (: ":")) (case_statement "case 0x32:\n      goto switchD_00291855_caseD_7;" (case "case") (number_literal "0x32") (: ":") (goto_statement "goto switchD_00291855_caseD_7;" (goto "goto") (statement_identifier "switchD_00291855_caseD_7") (; ";"))) (} "}"))) (expression_statement "piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2));" (assignment_expression "piVar1 = (int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2))" (identifier "piVar1") (= "=") (cast_expression "(int *)FUN_00291830(param_1,*(undefined8 *)(param_2 + 2))" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00291830(param_1,*(undefined8 *)(param_2 + 2))" (identifier "FUN_00291830") (argument_list "(param_1,*(undefined8 *)(param_2 + 2))" (( "(") (identifier "param_1") (, ",") (pointer_expression "*(undefined8 *)(param_2 + 2)" (* "*") (cast_expression "(undefined8 *)(param_2 + 2)" (( "(") (type_descriptor "undefined8 *" (type_identifier "undefined8") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_2 + 2)" (( "(") (binary_expression "param_2 + 2" (identifier "param_2") (+ "+") (number_literal "2")) () ")")))) () ")"))))) (; ";")) (if_statement "if (piVar1 != (int *)0x0) {\n      return piVar1;\n    }" (if "if") (parenthesized_expression "(piVar1 != (int *)0x0)" (( "(") (binary_expression "piVar1 != (int *)0x0" (identifier "piVar1") (!= "!=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      return piVar1;\n    }" ({ "{") (return_statement "return piVar1;" (return "return") (identifier "piVar1") (; ";")) (} "}"))) (labeled_statement "switchD_00291855_caseD_7:\n    param_2 = *(undefined4 **)(param_2 + 4);" (statement_identifier "switchD_00291855_caseD_7") (: ":") (expression_statement "param_2 = *(undefined4 **)(param_2 + 4);" (assignment_expression "param_2 = *(undefined4 **)(param_2 + 4)" (identifier "param_2") (= "=") (pointer_expression "*(undefined4 **)(param_2 + 4)" (* "*") (cast_expression "(undefined4 **)(param_2 + 4)" (( "(") (type_descriptor "undefined4 **" (type_identifier "undefined4") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(param_2 + 4)" (( "(") (binary_expression "param_2 + 4" (identifier "param_2") (+ "+") (number_literal "4")) () ")"))))) (; ";"))) (} "}")) (while "while") (parenthesized_expression "(param_2 != (undefined4 *)0x0)" (( "(") (binary_expression "param_2 != (undefined4 *)0x0" (identifier "param_2") (!= "!=") (cast_expression "(undefined4 *)0x0" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (labeled_statement "LAB_00291882:\n  return (int *)0x0;" (statement_identifier "LAB_00291882") (: ":") (return_statement "return (int *)0x0;" (return "return") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")) (; ";"))) (} "}")))

type_1 * function_1(type_2 *dpi,type_1 *var_1)

{
  type_1 *var_3;
  
  if (var_1 == (type_1 *)0x0) {
    return (type_1 *)0x0;
  }
  do {
    switch(var_1->type) {
    case DEMANGLE_COMPONENT_NAME:
    case DEMANGLE_COMPONENT_FUNCTION_PARAM:
    case DEMANGLE_COMPONENT_SUB_STD:
    case DEMANGLE_COMPONENT_BUILTIN_TYPE:
    case DEMANGLE_COMPONENT_FIXED_TYPE:
    case DEMANGLE_COMPONENT_OPERATOR:
    case DEMANGLE_COMPONENT_CHARACTER:
    case DEMANGLE_COMPONENT_NUMBER:
    case DEMANGLE_COMPONENT_LAMBDA:
    case DEMANGLE_COMPONENT_DEFAULT_ARG:
    case DEMANGLE_COMPONENT_UNNAMED_TYPE:
    case DEMANGLE_COMPONENT_PACK_EXPANSION:
    case DEMANGLE_COMPONENT_TAGGED_NAME:
      goto LAB_00291882;
    case DEMANGLE_COMPONENT_TEMPLATE_PARAM:
      var_3 = var_2(dpi,(type_1 *)&(var_1->u).s_name);
      if ((var_3 != (type_1 *)0x0) &&
         (var_3->type == var_4)) {
        return var_3;
      }
      goto LAB_00291882;
    case DEMANGLE_COMPONENT_CTOR:
    case DEMANGLE_COMPONENT_DTOR:
    case DEMANGLE_COMPONENT_EXTENDED_OPERATOR:
      goto switchD_00291855_caseD_7;
    }
    var_3 = function_1(dpi,(var_1->u).s_fixed.length);
    if (var_3 != (type_1 *)0x0) {
      return var_3;
    }
switchD_00291855_caseD_7:
    var_1 = (var_1->u).s_extended_operator.name;
  } while (var_1 != (type_1 *)0x0);
LAB_00291882:
  return (type_1 *)0x0;
}


(translation_unit (function_definition type: (primitive_type) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (identifier)) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier)))))) body: (compound_statement (declaration type: (primitive_type) declarator: (pointer_declarator declarator: (identifier))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (do_statement body: (compound_statement (switch_statement condition: (parenthesized_expression (pointer_expression argument: (identifier))) body: (compound_statement (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal) (goto_statement label: (statement_identifier))) (case_statement value: (number_literal) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (binary_expression left: (identifier) right: (number_literal))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))))) consequence: (compound_statement (return_statement (identifier)))) (goto_statement label: (statement_identifier))) (case_statement value: (number_literal)) (case_statement value: (number_literal)) (case_statement value: (number_literal) (goto_statement label: (statement_identifier))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (identifier) (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))) consequence: (compound_statement (return_statement (identifier)))) (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator declarator: (abstract_pointer_declarator))) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal))))) (labeled_statement label: (statement_identifier) (return_statement (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (number_literal)))))))

int * MASKED(undefined8 param_1,undefined4 *param_2)

{
  int *piVar1;
  
  if (param_2 == (undefined4 *)0x0) {
    return (int *)0x0;
  }
  do {
    switch(*param_2) {
    case 0:
    case 6:
    case 0x18:
    case 0x27:
    case 0x2c:
    case 0x31:
    case 0x40:
    case 0x41:
    case 0x45:
    case 0x46:
    case 0x47:
    case 0x4a:
    case 0x4b:
      goto LAB_00291882;
    case 5:
      piVar1 = (int *)FUN_002917f0(param_1,param_2 + 2);
      if ((piVar1 != (int *)0x0) && (*piVar1 == 0x2f)) {
        return piVar1;
      }
      goto LAB_00291882;
    case 7:
    case 8:
    case 0x32:
      goto switchD_00291855_caseD_7;
    }
    piVar1 = (int *)MASKED(param_1,*(undefined8 *)(param_2 + 2));
    if (piVar1 != (int *)0x0) {
      return piVar1;
    }
switchD_00291855_caseD_7:
    param_2 = *(undefined4 **)(param_2 + 4);
  } while (param_2 != (undefined4 *)0x0);
LAB_00291882:
  return (int *)0x0;
}

