
/* DWARF original prototype: void
   _M_default_append(vector<unsigned_char,_std::allocator<unsigned_char>_> * this, size_type __n) */

void __thiscall
std::vector<unsigned_char,_std::allocator<unsigned_char>_>::_M_default_append
          (vector<unsigned_char,_std::allocator<unsigned_char>_> *this,size_type __n)

{
  void *pvVar1;
  ulong uVar2;
  pointer puVar3;
  ulong uVar4;
  ulong uVar5;
  pointer __src;
  pointer puVar6;
  
  if (__n == 0) {
    return;
  }
  puVar3 = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.
           _M_finish;
  __src = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_start
  ;
  uVar4 = (long)puVar3 - (long)__src;
  if (__n <= (ulong)((long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)
                           ._M_impl._M_end_of_storage - (long)puVar3)) {
    pvVar1 = memset(puVar3,0,__n);
    (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_finish =
         (pointer)(__n + (long)pvVar1);
    return;
  }
  if (~uVar4 < __n) {
                    /* WARNING: Subroutine does not return */
    __throw_length_error("vector::_M_default_append");
  }
  uVar5 = uVar4;
  if (uVar4 <= __n) {
    uVar5 = __n;
  }
  uVar2 = uVar5 + uVar4;
  if (CARRY8(uVar5,uVar4)) {
    uVar2 = 0xffffffffffffffff;
LAB_001c3a07:
    puVar3 = (pointer)operator_new(uVar2);
    __src = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.
            _M_start;
    puVar6 = puVar3 + uVar2;
    uVar5 = (long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.
                  _M_finish - (long)__src;
  }
  else {
    if (uVar2 != 0) goto LAB_001c3a07;
    puVar6 = (pointer)0x0;
    puVar3 = (pointer)0x0;
    uVar5 = uVar4;
  }
  memset(puVar3 + uVar4,0,__n);
  if (uVar5 == 0) {
    if (__src == (pointer)0x0) goto LAB_001c39d0;
  }
  else {
    memmove(puVar3,__src,uVar5);
  }
  operator_delete(__src);
LAB_001c39d0:
  (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_start =
       puVar3;
  (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.
  _M_end_of_storage = puVar6;
  (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_finish =
       puVar3 + __n + uVar4;
  return;
}



void FUN_001c3920(long *param_1,ulong param_2)

{
  void *pvVar1;
  long lVar2;
  ulong uVar3;
  ulong uVar4;
  void *__src;
  
  if (param_2 == 0) {
    return;
  }
  pvVar1 = (void *)param_1[1];
  __src = (void *)*param_1;
  uVar3 = (long)pvVar1 - (long)__src;
  if (param_2 <= (ulong)(param_1[2] - (long)pvVar1)) {
    pvVar1 = memset(pvVar1,0,param_2);
    param_1[1] = param_2 + (long)pvVar1;
    return;
  }
  if (~uVar3 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_00377380("vector::_M_default_append");
  }
  uVar4 = uVar3;
  if (uVar3 <= param_2) {
    uVar4 = param_2;
  }
  lVar2 = uVar4 + uVar3;
  if (CARRY8(uVar4,uVar3)) {
    lVar2 = -1;
LAB_001c3a07:
    pvVar1 = (void *)FUN_00337280(lVar2);
    __src = (void *)*param_1;
    lVar2 = lVar2 + (long)pvVar1;
    uVar4 = param_1[1] - (long)__src;
  }
  else {
    if (lVar2 != 0) goto LAB_001c3a07;
    lVar2 = 0;
    pvVar1 = (void *)0x0;
    uVar4 = uVar3;
  }
  memset((void *)((long)pvVar1 + uVar3),0,param_2);
  if (uVar4 == 0) {
    if (__src == (void *)0x0) goto LAB_001c39d0;
  }
  else {
    memmove(pvVar1,__src,uVar4);
  }
  FUN_00338a50(__src);
LAB_001c39d0:
  *param_1 = (long)pvVar1;
  param_1[2] = lVar2;
  param_1[1] = param_2 + uVar3 + (long)pvVar1;
  return;
}


TEST RSI,RSI
JZ 0x001c39f8
PUSH R15
PUSH R14
PUSH R13
PUSH R12
MOV R12,RDI
PUSH RBP
PUSH RBX
MOV RBX,RSI
SUB RSP,0x18
MOV RCX,qword ptr [RDI + 0x8]
MOV R8,qword ptr [RDI]
MOV RAX,qword ptr [RDI + 0x10]
MOV RBP,RCX
SUB RBP,R8
SUB RAX,RCX
MOV RDX,RBP
MOV R13,RBP
NOT RDX
CMP RSI,RAX
JA 0x001c3988
MOV RDX,RSI
MOV RDI,RCX
XOR ESI,ESI
CALL 0x00150100
ADD RBX,RAX
MOV qword ptr [R12 + 0x8],RBX
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CMP RDX,RSI
JC 0x001c3a45
CMP RSI,RBP
MOV RAX,RBP
CMOVNC RAX,RSI
ADD RAX,RBP
MOV R14,RAX
JC 0x001c3a00
TEST RAX,RAX
JNZ 0x001c3a07
XOR R14D,R14D
XOR R15D,R15D
XOR ESI,ESI
LEA RDI,[R15 + R13*0x1]
MOV RDX,RBX
MOV qword ptr [RSP + 0x8],R8
CALL 0x00150100
TEST RBP,RBP
MOV R8,qword ptr [RSP + 0x8]
JNZ 0x001c3a28
TEST R8,R8
JNZ 0x001c3a3b
ADD RBX,R13
MOV qword ptr [R12],R15
ADD RBX,R15
MOV qword ptr [R12 + 0x10],R14
MOV qword ptr [R12 + 0x8],RBX
ADD RSP,0x18
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
RET
MOV R14,-0x1
MOV RDI,R14
CALL 0x00337280
MOV R8,qword ptr [R12]
MOV RBP,qword ptr [R12 + 0x8]
MOV R15,RAX
ADD R14,RAX
SUB RBP,R8
JMP 0x001c39ae
MOV RSI,R8
MOV RDX,RBP
MOV RDI,R15
CALL 0x001506d0
MOV R8,qword ptr [RSP + 0x8]
MOV RDI,R8
CALL 0x00338a50
JMP 0x001c39d0
LEA RDI,[0x3de539]
CALL 0x00377380
(translation_unit "void FUN_001c3920(long *param_1,ulong param_2)\n\n{\n  void *pvVar1;\n  long lVar2;\n  ulong uVar3;\n  ulong uVar4;\n  void *__src;\n  \n  if (param_2 == 0) {\n    return;\n  }\n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  uVar3 = (long)pvVar1 - (long)__src;\n  if (param_2 <= (ulong)(param_1[2] - (long)pvVar1)) {\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }\n  if (~uVar3 < param_2) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00377380("vector::_M_default_append");\n  }\n  uVar4 = uVar3;\n  if (uVar3 <= param_2) {\n    uVar4 = param_2;\n  }\n  lVar2 = uVar4 + uVar3;\n  if (CARRY8(uVar4,uVar3)) {\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }\n  else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }\n  memset((void *)((long)pvVar1 + uVar3),0,param_2);\n  if (uVar4 == 0) {\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }\n  else {\n    memmove(pvVar1,__src,uVar4);\n  }\n  FUN_00338a50(__src);\nLAB_001c39d0:\n  *param_1 = (long)pvVar1;\n  param_1[2] = lVar2;\n  param_1[1] = param_2 + uVar3 + (long)pvVar1;\n  return;\n}\n\n" (function_definition "void FUN_001c3920(long *param_1,ulong param_2)\n\n{\n  void *pvVar1;\n  long lVar2;\n  ulong uVar3;\n  ulong uVar4;\n  void *__src;\n  \n  if (param_2 == 0) {\n    return;\n  }\n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  uVar3 = (long)pvVar1 - (long)__src;\n  if (param_2 <= (ulong)(param_1[2] - (long)pvVar1)) {\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }\n  if (~uVar3 < param_2) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00377380("vector::_M_default_append");\n  }\n  uVar4 = uVar3;\n  if (uVar3 <= param_2) {\n    uVar4 = param_2;\n  }\n  lVar2 = uVar4 + uVar3;\n  if (CARRY8(uVar4,uVar3)) {\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }\n  else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }\n  memset((void *)((long)pvVar1 + uVar3),0,param_2);\n  if (uVar4 == 0) {\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }\n  else {\n    memmove(pvVar1,__src,uVar4);\n  }\n  FUN_00338a50(__src);\nLAB_001c39d0:\n  *param_1 = (long)pvVar1;\n  param_1[2] = lVar2;\n  param_1[1] = param_2 + uVar3 + (long)pvVar1;\n  return;\n}" primitive_type (function_declarator "FUN_001c3920(long *param_1,ulong param_2)" identifier (parameter_list "(long *param_1,ulong param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) ))) (compound_statement "{\n  void *pvVar1;\n  long lVar2;\n  ulong uVar3;\n  ulong uVar4;\n  void *__src;\n  \n  if (param_2 == 0) {\n    return;\n  }\n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  uVar3 = (long)pvVar1 - (long)__src;\n  if (param_2 <= (ulong)(param_1[2] - (long)pvVar1)) {\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }\n  if (~uVar3 < param_2) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00377380("vector::_M_default_append");\n  }\n  uVar4 = uVar3;\n  if (uVar3 <= param_2) {\n    uVar4 = param_2;\n  }\n  lVar2 = uVar4 + uVar3;\n  if (CARRY8(uVar4,uVar3)) {\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }\n  else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }\n  memset((void *)((long)pvVar1 + uVar3),0,param_2);\n  if (uVar4 == 0) {\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }\n  else {\n    memmove(pvVar1,__src,uVar4);\n  }\n  FUN_00338a50(__src);\nLAB_001c39d0:\n  *param_1 = (long)pvVar1;\n  param_1[2] = lVar2;\n  param_1[1] = param_2 + uVar3 + (long)pvVar1;\n  return;\n}" { (declaration "void *pvVar1;" primitive_type (pointer_declarator "*pvVar1" * identifier) ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "void *__src;" primitive_type (pointer_declarator "*__src" * identifier) ;) (if_statement "if (param_2 == 0) {\n    return;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "pvVar1 = (void *)param_1[1];" (assignment_expression "pvVar1 = (void *)param_1[1]" identifier = (cast_expression "(void *)param_1[1]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ;) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" identifier = (cast_expression "(void *)*param_1" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "uVar3 = (long)pvVar1 - (long)__src;" (assignment_expression "uVar3 = (long)pvVar1 - (long)__src" identifier = (binary_expression "(long)pvVar1 - (long)__src" (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (param_2 <= (ulong)(param_1[2] - (long)pvVar1)) {\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }" if (parenthesized_expression "(param_2 <= (ulong)(param_1[2] - (long)pvVar1))" ( (binary_expression "param_2 <= (ulong)(param_1[2] - (long)pvVar1)" identifier <= (call_expression "(ulong)(param_1[2] - (long)pvVar1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[2] - (long)pvVar1)" ( (binary_expression "param_1[2] - (long)pvVar1" (subscript_expression "param_1[2]" identifier [ number_literal ]) - (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) )) (compound_statement "{\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }" { (expression_statement "pvVar1 = memset(pvVar1,0,param_2);" (assignment_expression "pvVar1 = memset(pvVar1,0,param_2)" identifier = (call_expression "memset(pvVar1,0,param_2)" identifier (argument_list "(pvVar1,0,param_2)" ( identifier , number_literal , identifier )))) ;) (expression_statement "param_1[1] = param_2 + (long)pvVar1;" (assignment_expression "param_1[1] = param_2 + (long)pvVar1" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "param_2 + (long)pvVar1" identifier + (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (return_statement "return;" return ;) })) (if_statement "if (~uVar3 < param_2) {\n                    /* WARNING: Subroutine does not return */\n    FUN_00377380("vector::_M_default_append");\n  }" if (parenthesized_expression "(~uVar3 < param_2)" ( (binary_expression "~uVar3 < param_2" (unary_expression "~uVar3" ~ identifier) < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_00377380("vector::_M_default_append");\n  }" { comment (expression_statement "FUN_00377380("vector::_M_default_append");" (call_expression "FUN_00377380("vector::_M_default_append")" identifier (argument_list "("vector::_M_default_append")" ( (string_literal ""vector::_M_default_append"" " string_content ") ))) ;) })) (expression_statement "uVar4 = uVar3;" (assignment_expression "uVar4 = uVar3" identifier = identifier) ;) (if_statement "if (uVar3 <= param_2) {\n    uVar4 = param_2;\n  }" if (parenthesized_expression "(uVar3 <= param_2)" ( (binary_expression "uVar3 <= param_2" identifier <= identifier) )) (compound_statement "{\n    uVar4 = param_2;\n  }" { (expression_statement "uVar4 = param_2;" (assignment_expression "uVar4 = param_2" identifier = identifier) ;) })) (expression_statement "lVar2 = uVar4 + uVar3;" (assignment_expression "lVar2 = uVar4 + uVar3" identifier = (binary_expression "uVar4 + uVar3" identifier + identifier)) ;) (if_statement "if (CARRY8(uVar4,uVar3)) {\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }\n  else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }" if (parenthesized_expression "(CARRY8(uVar4,uVar3))" ( (call_expression "CARRY8(uVar4,uVar3)" identifier (argument_list "(uVar4,uVar3)" ( identifier , identifier ))) )) (compound_statement "{\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }" { (expression_statement "lVar2 = -1;" (assignment_expression "lVar2 = -1" identifier = number_literal) ;) (labeled_statement "LAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);" statement_identifier : (expression_statement "pvVar1 = (void *)FUN_00337280(lVar2);" (assignment_expression "pvVar1 = (void *)FUN_00337280(lVar2)" identifier = (cast_expression "(void *)FUN_00337280(lVar2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00337280(lVar2)" identifier (argument_list "(lVar2)" ( identifier ))))) ;)) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" identifier = (cast_expression "(void *)*param_1" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "lVar2 = lVar2 + (long)pvVar1;" (assignment_expression "lVar2 = lVar2 + (long)pvVar1" identifier = (binary_expression "lVar2 + (long)pvVar1" identifier + (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "uVar4 = param_1[1] - (long)__src;" (assignment_expression "uVar4 = param_1[1] - (long)__src" identifier = (binary_expression "param_1[1] - (long)__src" (subscript_expression "param_1[1]" identifier [ number_literal ]) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }) (else_clause "else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }" else (compound_statement "{\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }" { (if_statement "if (lVar2 != 0) goto LAB_001c3a07;" if (parenthesized_expression "(lVar2 != 0)" ( (binary_expression "lVar2 != 0" identifier != number_literal) )) (goto_statement "goto LAB_001c3a07;" goto statement_identifier ;)) (expression_statement "lVar2 = 0;" (assignment_expression "lVar2 = 0" identifier = number_literal) ;) (expression_statement "pvVar1 = (void *)0x0;" (assignment_expression "pvVar1 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "uVar4 = uVar3;" (assignment_expression "uVar4 = uVar3" identifier = identifier) ;) }))) (expression_statement "memset((void *)((long)pvVar1 + uVar3),0,param_2);" (call_expression "memset((void *)((long)pvVar1 + uVar3),0,param_2)" identifier (argument_list "((void *)((long)pvVar1 + uVar3),0,param_2)" ( (cast_expression "(void *)((long)pvVar1 + uVar3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar1 + uVar3)" ( (binary_expression "(long)pvVar1 + uVar3" (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) , number_literal , identifier ))) ;) (if_statement "if (uVar4 == 0) {\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }\n  else {\n    memmove(pvVar1,__src,uVar4);\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }" { (if_statement "if (__src == (void *)0x0) goto LAB_001c39d0;" if (parenthesized_expression "(__src == (void *)0x0)" ( (binary_expression "__src == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_001c39d0;" goto statement_identifier ;)) }) (else_clause "else {\n    memmove(pvVar1,__src,uVar4);\n  }" else (compound_statement "{\n    memmove(pvVar1,__src,uVar4);\n  }" { (expression_statement "memmove(pvVar1,__src,uVar4);" (call_expression "memmove(pvVar1,__src,uVar4)" identifier (argument_list "(pvVar1,__src,uVar4)" ( identifier , identifier , identifier ))) ;) }))) (expression_statement "FUN_00338a50(__src);" (call_expression "FUN_00338a50(__src)" identifier (argument_list "(__src)" ( identifier ))) ;) (labeled_statement "LAB_001c39d0:\n  *param_1 = (long)pvVar1;" statement_identifier : (expression_statement "*param_1 = (long)pvVar1;" (assignment_expression "*param_1 = (long)pvVar1" (pointer_expression "*param_1" * identifier) = (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;)) (expression_statement "param_1[2] = lVar2;" (assignment_expression "param_1[2] = lVar2" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[1] = param_2 + uVar3 + (long)pvVar1;" (assignment_expression "param_1[1] = param_2 + uVar3 + (long)pvVar1" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "param_2 + uVar3 + (long)pvVar1" (binary_expression "param_2 + uVar3" identifier + identifier) + (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (return_statement "return;" return ;) })))
(translation_unit "/* DWARF original prototype: void\n   _M_default_append(vector<unsigned_char,_std::allocator<unsigned_char>_> * this, size_type __n) */\n\nvoid __thiscall\nstd::vector<unsigned_char,_std::allocator<unsigned_char>_>::_M_default_append\n          (vector<unsigned_char,_std::allocator<unsigned_char>_> *this,size_type __n)\n\n{\n  void *pvVar1;\n  ulong uVar2;\n  pointer puVar3;\n  ulong uVar4;\n  ulong uVar5;\n  pointer __src;\n  pointer puVar6;\n  \n  if (__n == 0) {\n    return;\n  }\n  puVar3 = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n           _M_finish;\n  __src = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_start\n  ;\n  uVar4 = (long)puVar3 - (long)__src;\n  if (__n <= (ulong)((long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)\n                           ._M_impl._M_end_of_storage - (long)puVar3)) {\n    pvVar1 = memset(puVar3,0,__n);\n    (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_finish =\n         (pointer)(__n + (long)pvVar1);\n    return;\n  }\n  if (~uVar4 < __n) {\n                    /* WARNING: Subroutine does not return */\n    __throw_length_error("vector::_M_default_append");\n  }\n  uVar5 = uVar4;\n  if (uVar4 <= __n) {\n    uVar5 = __n;\n  }\n  uVar2 = uVar5 + uVar4;\n  if (CARRY8(uVar5,uVar4)) {\n    uVar2 = 0xffffffffffffffff;\nLAB_001c3a07:\n    puVar3 = (pointer)operator_new(uVar2);\n    __src = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n            _M_start;\n    puVar6 = puVar3 + uVar2;\n    uVar5 = (long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n                  _M_finish - (long)__src;\n  }\n  else {\n    if (uVar2 != 0) goto LAB_001c3a07;\n    puVar6 = (pointer)0x0;\n    puVar3 = (pointer)0x0;\n    uVar5 = uVar4;\n  }\n  memset(puVar3 + uVar4,0,__n);\n  if (uVar5 == 0) {\n    if (__src == (pointer)0x0) goto LAB_001c39d0;\n  }\n  else {\n    memmove(puVar3,__src,uVar5);\n  }\n  operator_delete(__src);\nLAB_001c39d0:\n  (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_start =\n       puVar3;\n  (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n  _M_end_of_storage = puVar6;\n  (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_finish =\n       puVar3 + __n + uVar4;\n  return;\n}\n\n" comment (declaration "void __thiscall\nstd::vector<unsigned_char,_std::allocator<unsigned_char>_>::_M_default_append\n          (vector<unsigned_char,_std::allocator<unsigned_char>_> *this,size_type __n)\n\n{\n  void *pvVar1;" primitive_type (ms_call_modifier "__thiscall" __thiscall) (ERROR "std::vector<" identifier : : identifier <) identifier , (ERROR "_std::allocator<unsigned_char>_>::_M_default_append\n          (vector<unsigned_char,_std::allocator<unsigned_char>_> *this,size_type __n)\n\n{\n  void" identifier : : identifier < identifier > identifier > : : (function_declarator "_M_default_append\n          (vector<unsigned_char,_std::allocator<unsigned_char>_> *this,size_type __n)" identifier (parameter_list "(vector<unsigned_char,_std::allocator<unsigned_char>_> *this,size_type __n)" ( (parameter_declaration "vector<unsigned_char" type_identifier (ERROR "<" <) identifier) , (parameter_declaration "_std::allocator<unsigned_char>_> *this" type_identifier (ERROR "::allocator<unsigned_char>_>" : : identifier < identifier > identifier >) (pointer_declarator "*this" * identifier)) , (parameter_declaration "size_type __n" type_identifier identifier) ))) { primitive_type) (pointer_declarator "*pvVar1" * identifier) ;) (declaration "ulong uVar2;" type_identifier identifier ;) (declaration "pointer puVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "ulong uVar5;" type_identifier identifier ;) (declaration "pointer __src;" type_identifier identifier ;) (declaration "pointer puVar6;" type_identifier identifier ;) (if_statement "if (__n == 0) {\n    return;\n  }" if (parenthesized_expression "(__n == 0)" ( (binary_expression "__n == 0" identifier == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "puVar3 = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n           _M_finish;" (assignment_expression "puVar3 = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n           _M_finish" identifier = (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n           _M_finish" (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl" (parenthesized_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)" ( (ERROR "this->super__Vector_base<unsigned_char,_std::" (comma_expression "this->super__Vector_base<unsigned_char,_std" (binary_expression "this->super__Vector_base<unsigned_char" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) , identifier) : :) (binary_expression "allocator<unsigned_char>_>" (binary_expression "allocator<unsigned_char>_" (binary_expression "allocator<unsigned_char" identifier < identifier) > identifier) > identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "__src = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_start\n  ;" (assignment_expression "__src = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_start" identifier = (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_start" (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl" (parenthesized_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)" ( (ERROR "this->super__Vector_base<unsigned_char,_std::" (comma_expression "this->super__Vector_base<unsigned_char,_std" (binary_expression "this->super__Vector_base<unsigned_char" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) , identifier) : :) (binary_expression "allocator<unsigned_char>_>" (binary_expression "allocator<unsigned_char>_" (binary_expression "allocator<unsigned_char" identifier < identifier) > identifier) > identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "uVar4 = (long)puVar3 - (long)__src;" (assignment_expression "uVar4 = (long)puVar3 - (long)__src" identifier = (binary_expression "(long)puVar3 - (long)__src" (cast_expression "(long)puVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (__n <= (ulong)((long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)\n                           ._M_impl._M_end_of_storage - (long)puVar3)) {\n    pvVar1 = memset(puVar3,0,__n);\n    (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_finish =\n         (pointer)(__n + (long)pvVar1);\n    return;\n  }" if (parenthesized_expression "(__n <= (ulong)((long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)\n                           ._M_impl._M_end_of_storage - (long)puVar3))" ( (binary_expression "__n <= (ulong)((long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)\n                           ._M_impl._M_end_of_storage - (long)puVar3)" identifier <= (call_expression "(ulong)((long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)\n                           ._M_impl._M_end_of_storage - (long)puVar3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)\n                           ._M_impl._M_end_of_storage - (long)puVar3)" ( (binary_expression "(long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)\n                           ._M_impl._M_end_of_storage - (long)puVar3" (cast_expression "(long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)\n                           ._M_impl._M_end_of_storage" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)\n                           ._M_impl._M_end_of_storage" (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)\n                           ._M_impl" (parenthesized_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)" ( (ERROR "this->super__Vector_base<unsigned_char,_std::" (comma_expression "this->super__Vector_base<unsigned_char,_std" (binary_expression "this->super__Vector_base<unsigned_char" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) , identifier) : :) (binary_expression "allocator<unsigned_char>_>" (binary_expression "allocator<unsigned_char>_" (binary_expression "allocator<unsigned_char" identifier < identifier) > identifier) > identifier) )) . field_identifier) . field_identifier)) - (cast_expression "(long)puVar3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) )) (compound_statement "{\n    pvVar1 = memset(puVar3,0,__n);\n    (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_finish =\n         (pointer)(__n + (long)pvVar1);\n    return;\n  }" { (expression_statement "pvVar1 = memset(puVar3,0,__n);" (assignment_expression "pvVar1 = memset(puVar3,0,__n)" identifier = (call_expression "memset(puVar3,0,__n)" identifier (argument_list "(puVar3,0,__n)" ( identifier , number_literal , identifier )))) ;) (expression_statement "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_finish =\n         (pointer)(__n + (long)pvVar1);" (assignment_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_finish =\n         (pointer)(__n + (long)pvVar1)" (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_finish" (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl" (parenthesized_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)" ( (ERROR "this->super__Vector_base<unsigned_char,_std::" (comma_expression "this->super__Vector_base<unsigned_char,_std" (binary_expression "this->super__Vector_base<unsigned_char" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) , identifier) : :) (binary_expression "allocator<unsigned_char>_>" (binary_expression "allocator<unsigned_char>_" (binary_expression "allocator<unsigned_char" identifier < identifier) > identifier) > identifier) )) . field_identifier) . field_identifier) = (call_expression "(pointer)(__n + (long)pvVar1)" (parenthesized_expression "(pointer)" ( identifier )) (argument_list "(__n + (long)pvVar1)" ( (binary_expression "__n + (long)pvVar1" identifier + (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) ;) (return_statement "return;" return ;) })) (if_statement "if (~uVar4 < __n) {\n                    /* WARNING: Subroutine does not return */\n    __throw_length_error("vector::_M_default_append");\n  }" if (parenthesized_expression "(~uVar4 < __n)" ( (binary_expression "~uVar4 < __n" (unary_expression "~uVar4" ~ identifier) < identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    __throw_length_error("vector::_M_default_append");\n  }" { comment (expression_statement "__throw_length_error("vector::_M_default_append");" (call_expression "__throw_length_error("vector::_M_default_append")" identifier (argument_list "("vector::_M_default_append")" ( (string_literal ""vector::_M_default_append"" " string_content ") ))) ;) })) (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" identifier = identifier) ;) (if_statement "if (uVar4 <= __n) {\n    uVar5 = __n;\n  }" if (parenthesized_expression "(uVar4 <= __n)" ( (binary_expression "uVar4 <= __n" identifier <= identifier) )) (compound_statement "{\n    uVar5 = __n;\n  }" { (expression_statement "uVar5 = __n;" (assignment_expression "uVar5 = __n" identifier = identifier) ;) })) (expression_statement "uVar2 = uVar5 + uVar4;" (assignment_expression "uVar2 = uVar5 + uVar4" identifier = (binary_expression "uVar5 + uVar4" identifier + identifier)) ;) (if_statement "if (CARRY8(uVar5,uVar4)) {\n    uVar2 = 0xffffffffffffffff;\nLAB_001c3a07:\n    puVar3 = (pointer)operator_new(uVar2);\n    __src = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n            _M_start;\n    puVar6 = puVar3 + uVar2;\n    uVar5 = (long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n                  _M_finish - (long)__src;\n  }\n  else {\n    if (uVar2 != 0) goto LAB_001c3a07;\n    puVar6 = (pointer)0x0;\n    puVar3 = (pointer)0x0;\n    uVar5 = uVar4;\n  }" if (parenthesized_expression "(CARRY8(uVar5,uVar4))" ( (call_expression "CARRY8(uVar5,uVar4)" identifier (argument_list "(uVar5,uVar4)" ( identifier , identifier ))) )) (compound_statement "{\n    uVar2 = 0xffffffffffffffff;\nLAB_001c3a07:\n    puVar3 = (pointer)operator_new(uVar2);\n    __src = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n            _M_start;\n    puVar6 = puVar3 + uVar2;\n    uVar5 = (long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n                  _M_finish - (long)__src;\n  }" { (expression_statement "uVar2 = 0xffffffffffffffff;" (assignment_expression "uVar2 = 0xffffffffffffffff" identifier = number_literal) ;) (labeled_statement "LAB_001c3a07:\n    puVar3 = (pointer)operator_new(uVar2);" statement_identifier : (expression_statement "puVar3 = (pointer)operator_new(uVar2);" (assignment_expression "puVar3 = (pointer)operator_new(uVar2)" identifier = (cast_expression "(pointer)operator_new(uVar2)" ( (type_descriptor "pointer" type_identifier) ) (call_expression "operator_new(uVar2)" identifier (argument_list "(uVar2)" ( identifier ))))) ;)) (expression_statement "__src = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n            _M_start;" (assignment_expression "__src = (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n            _M_start" identifier = (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n            _M_start" (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl" (parenthesized_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)" ( (ERROR "this->super__Vector_base<unsigned_char,_std::" (comma_expression "this->super__Vector_base<unsigned_char,_std" (binary_expression "this->super__Vector_base<unsigned_char" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) , identifier) : :) (binary_expression "allocator<unsigned_char>_>" (binary_expression "allocator<unsigned_char>_" (binary_expression "allocator<unsigned_char" identifier < identifier) > identifier) > identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "puVar6 = puVar3 + uVar2;" (assignment_expression "puVar6 = puVar3 + uVar2" identifier = (binary_expression "puVar3 + uVar2" identifier + identifier)) ;) (expression_statement "uVar5 = (long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n                  _M_finish - (long)__src;" (assignment_expression "uVar5 = (long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n                  _M_finish - (long)__src" identifier = (binary_expression "(long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n                  _M_finish - (long)__src" (cast_expression "(long)(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n                  _M_finish" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n                  _M_finish" (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl" (parenthesized_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)" ( (ERROR "this->super__Vector_base<unsigned_char,_std::" (comma_expression "this->super__Vector_base<unsigned_char,_std" (binary_expression "this->super__Vector_base<unsigned_char" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) , identifier) : :) (binary_expression "allocator<unsigned_char>_>" (binary_expression "allocator<unsigned_char>_" (binary_expression "allocator<unsigned_char" identifier < identifier) > identifier) > identifier) )) . field_identifier) . field_identifier)) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }) (else_clause "else {\n    if (uVar2 != 0) goto LAB_001c3a07;\n    puVar6 = (pointer)0x0;\n    puVar3 = (pointer)0x0;\n    uVar5 = uVar4;\n  }" else (compound_statement "{\n    if (uVar2 != 0) goto LAB_001c3a07;\n    puVar6 = (pointer)0x0;\n    puVar3 = (pointer)0x0;\n    uVar5 = uVar4;\n  }" { (if_statement "if (uVar2 != 0) goto LAB_001c3a07;" if (parenthesized_expression "(uVar2 != 0)" ( (binary_expression "uVar2 != 0" identifier != number_literal) )) (goto_statement "goto LAB_001c3a07;" goto statement_identifier ;)) (expression_statement "puVar6 = (pointer)0x0;" (assignment_expression "puVar6 = (pointer)0x0" identifier = (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;) (expression_statement "puVar3 = (pointer)0x0;" (assignment_expression "puVar3 = (pointer)0x0" identifier = (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) ;) (expression_statement "uVar5 = uVar4;" (assignment_expression "uVar5 = uVar4" identifier = identifier) ;) }))) (expression_statement "memset(puVar3 + uVar4,0,__n);" (call_expression "memset(puVar3 + uVar4,0,__n)" identifier (argument_list "(puVar3 + uVar4,0,__n)" ( (binary_expression "puVar3 + uVar4" identifier + identifier) , number_literal , identifier ))) ;) (if_statement "if (uVar5 == 0) {\n    if (__src == (pointer)0x0) goto LAB_001c39d0;\n  }\n  else {\n    memmove(puVar3,__src,uVar5);\n  }" if (parenthesized_expression "(uVar5 == 0)" ( (binary_expression "uVar5 == 0" identifier == number_literal) )) (compound_statement "{\n    if (__src == (pointer)0x0) goto LAB_001c39d0;\n  }" { (if_statement "if (__src == (pointer)0x0) goto LAB_001c39d0;" if (parenthesized_expression "(__src == (pointer)0x0)" ( (binary_expression "__src == (pointer)0x0" identifier == (cast_expression "(pointer)0x0" ( (type_descriptor "pointer" type_identifier) ) number_literal)) )) (goto_statement "goto LAB_001c39d0;" goto statement_identifier ;)) }) (else_clause "else {\n    memmove(puVar3,__src,uVar5);\n  }" else (compound_statement "{\n    memmove(puVar3,__src,uVar5);\n  }" { (expression_statement "memmove(puVar3,__src,uVar5);" (call_expression "memmove(puVar3,__src,uVar5)" identifier (argument_list "(puVar3,__src,uVar5)" ( identifier , identifier , identifier ))) ;) }))) (expression_statement "operator_delete(__src);" (call_expression "operator_delete(__src)" identifier (argument_list "(__src)" ( identifier ))) ;) (labeled_statement "LAB_001c39d0:\n  (this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_start =\n       puVar3;" statement_identifier : (expression_statement "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_start =\n       puVar3;" (assignment_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_start =\n       puVar3" (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_start" (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl" (parenthesized_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)" ( (ERROR "this->super__Vector_base<unsigned_char,_std::" (comma_expression "this->super__Vector_base<unsigned_char,_std" (binary_expression "this->super__Vector_base<unsigned_char" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) , identifier) : :) (binary_expression "allocator<unsigned_char>_>" (binary_expression "allocator<unsigned_char>_" (binary_expression "allocator<unsigned_char" identifier < identifier) > identifier) > identifier) )) . field_identifier) . field_identifier) = identifier) ;)) (expression_statement "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n  _M_end_of_storage = puVar6;" (assignment_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n  _M_end_of_storage = puVar6" (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl.\n  _M_end_of_storage" (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl" (parenthesized_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)" ( (ERROR "this->super__Vector_base<unsigned_char,_std::" (comma_expression "this->super__Vector_base<unsigned_char,_std" (binary_expression "this->super__Vector_base<unsigned_char" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) , identifier) : :) (binary_expression "allocator<unsigned_char>_>" (binary_expression "allocator<unsigned_char>_" (binary_expression "allocator<unsigned_char" identifier < identifier) > identifier) > identifier) )) . field_identifier) . field_identifier) = identifier) ;) (expression_statement "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_finish =\n       puVar3 + __n + uVar4;" (assignment_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_finish =\n       puVar3 + __n + uVar4" (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl._M_finish" (field_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)._M_impl" (parenthesized_expression "(this->super__Vector_base<unsigned_char,_std::allocator<unsigned_char>_>)" ( (ERROR "this->super__Vector_base<unsigned_char,_std::" (comma_expression "this->super__Vector_base<unsigned_char,_std" (binary_expression "this->super__Vector_base<unsigned_char" (field_expression "this->super__Vector_base" identifier -> field_identifier) < identifier) , identifier) : :) (binary_expression "allocator<unsigned_char>_>" (binary_expression "allocator<unsigned_char>_" (binary_expression "allocator<unsigned_char" identifier < identifier) > identifier) > identifier) )) . field_identifier) . field_identifier) = (binary_expression "puVar3 + __n + uVar4" (binary_expression "puVar3 + __n" identifier + identifier) + identifier)) ;) (return_statement "return;" return ;) (ERROR "}" }))
(translation_unit "void FUN_001c3920(long *param_1,ulong param_2)\n\n{\n  void *pvVar1;\n  long lVar2;\n  ulong uVar3;\n  ulong uVar4;\n  void *__src;\n  \n  if (param_2 == 0) {\n    return;\n  }\n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  uVar3 = (long)pvVar1 - (long)__src;\n  if (param_2 <= (ulong)(param_1[2] - (long)pvVar1)) {\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }\n  if (~uVar3 < param_2) {\n                    \n    FUN_00377380("vector::_M_default_append");\n  }\n  uVar4 = uVar3;\n  if (uVar3 <= param_2) {\n    uVar4 = param_2;\n  }\n  lVar2 = uVar4 + uVar3;\n  if (CARRY8(uVar4,uVar3)) {\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }\n  else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }\n  memset((void *)((long)pvVar1 + uVar3),0,param_2);\n  if (uVar4 == 0) {\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }\n  else {\n    memmove(pvVar1,__src,uVar4);\n  }\n  FUN_00338a50(__src);\nLAB_001c39d0:\n  *param_1 = (long)pvVar1;\n  param_1[2] = lVar2;\n  param_1[1] = param_2 + uVar3 + (long)pvVar1;\n  return;\n}\n\n" (function_definition "void FUN_001c3920(long *param_1,ulong param_2)\n\n{\n  void *pvVar1;\n  long lVar2;\n  ulong uVar3;\n  ulong uVar4;\n  void *__src;\n  \n  if (param_2 == 0) {\n    return;\n  }\n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  uVar3 = (long)pvVar1 - (long)__src;\n  if (param_2 <= (ulong)(param_1[2] - (long)pvVar1)) {\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }\n  if (~uVar3 < param_2) {\n                    \n    FUN_00377380("vector::_M_default_append");\n  }\n  uVar4 = uVar3;\n  if (uVar3 <= param_2) {\n    uVar4 = param_2;\n  }\n  lVar2 = uVar4 + uVar3;\n  if (CARRY8(uVar4,uVar3)) {\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }\n  else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }\n  memset((void *)((long)pvVar1 + uVar3),0,param_2);\n  if (uVar4 == 0) {\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }\n  else {\n    memmove(pvVar1,__src,uVar4);\n  }\n  FUN_00338a50(__src);\nLAB_001c39d0:\n  *param_1 = (long)pvVar1;\n  param_1[2] = lVar2;\n  param_1[1] = param_2 + uVar3 + (long)pvVar1;\n  return;\n}" primitive_type (function_declarator "FUN_001c3920(long *param_1,ulong param_2)" identifier (parameter_list "(long *param_1,ulong param_2)" ( (parameter_declaration "long *param_1" (sized_type_specifier "long" long) (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) ))) (compound_statement "{\n  void *pvVar1;\n  long lVar2;\n  ulong uVar3;\n  ulong uVar4;\n  void *__src;\n  \n  if (param_2 == 0) {\n    return;\n  }\n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  uVar3 = (long)pvVar1 - (long)__src;\n  if (param_2 <= (ulong)(param_1[2] - (long)pvVar1)) {\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }\n  if (~uVar3 < param_2) {\n                    \n    FUN_00377380("vector::_M_default_append");\n  }\n  uVar4 = uVar3;\n  if (uVar3 <= param_2) {\n    uVar4 = param_2;\n  }\n  lVar2 = uVar4 + uVar3;\n  if (CARRY8(uVar4,uVar3)) {\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }\n  else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }\n  memset((void *)((long)pvVar1 + uVar3),0,param_2);\n  if (uVar4 == 0) {\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }\n  else {\n    memmove(pvVar1,__src,uVar4);\n  }\n  FUN_00338a50(__src);\nLAB_001c39d0:\n  *param_1 = (long)pvVar1;\n  param_1[2] = lVar2;\n  param_1[1] = param_2 + uVar3 + (long)pvVar1;\n  return;\n}" { (declaration "void *pvVar1;" primitive_type (pointer_declarator "*pvVar1" * identifier) ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar3;" type_identifier identifier ;) (declaration "ulong uVar4;" type_identifier identifier ;) (declaration "void *__src;" primitive_type (pointer_declarator "*__src" * identifier) ;) (if_statement "if (param_2 == 0) {\n    return;\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    return;\n  }" { (return_statement "return;" return ;) })) (expression_statement "pvVar1 = (void *)param_1[1];" (assignment_expression "pvVar1 = (void *)param_1[1]" identifier = (cast_expression "(void *)param_1[1]" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[1]" identifier [ number_literal ]))) ;) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" identifier = (cast_expression "(void *)*param_1" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "uVar3 = (long)pvVar1 - (long)__src;" (assignment_expression "uVar3 = (long)pvVar1 - (long)__src" identifier = (binary_expression "(long)pvVar1 - (long)__src" (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (if_statement "if (param_2 <= (ulong)(param_1[2] - (long)pvVar1)) {\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }" if (parenthesized_expression "(param_2 <= (ulong)(param_1[2] - (long)pvVar1))" ( (binary_expression "param_2 <= (ulong)(param_1[2] - (long)pvVar1)" identifier <= (call_expression "(ulong)(param_1[2] - (long)pvVar1)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(param_1[2] - (long)pvVar1)" ( (binary_expression "param_1[2] - (long)pvVar1" (subscript_expression "param_1[2]" identifier [ number_literal ]) - (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )))) )) (compound_statement "{\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }" { (expression_statement "pvVar1 = memset(pvVar1,0,param_2);" (assignment_expression "pvVar1 = memset(pvVar1,0,param_2)" identifier = (call_expression "memset(pvVar1,0,param_2)" identifier (argument_list "(pvVar1,0,param_2)" ( identifier , number_literal , identifier )))) ;) (expression_statement "param_1[1] = param_2 + (long)pvVar1;" (assignment_expression "param_1[1] = param_2 + (long)pvVar1" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "param_2 + (long)pvVar1" identifier + (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (return_statement "return;" return ;) })) (if_statement "if (~uVar3 < param_2) {\n                    \n    FUN_00377380("vector::_M_default_append");\n  }" if (parenthesized_expression "(~uVar3 < param_2)" ( (binary_expression "~uVar3 < param_2" (unary_expression "~uVar3" ~ identifier) < identifier) )) (compound_statement "{\n                    \n    FUN_00377380("vector::_M_default_append");\n  }" { (expression_statement "FUN_00377380("vector::_M_default_append");" (call_expression "FUN_00377380("vector::_M_default_append")" identifier (argument_list "("vector::_M_default_append")" ( (string_literal ""vector::_M_default_append"" " string_content ") ))) ;) })) (expression_statement "uVar4 = uVar3;" (assignment_expression "uVar4 = uVar3" identifier = identifier) ;) (if_statement "if (uVar3 <= param_2) {\n    uVar4 = param_2;\n  }" if (parenthesized_expression "(uVar3 <= param_2)" ( (binary_expression "uVar3 <= param_2" identifier <= identifier) )) (compound_statement "{\n    uVar4 = param_2;\n  }" { (expression_statement "uVar4 = param_2;" (assignment_expression "uVar4 = param_2" identifier = identifier) ;) })) (expression_statement "lVar2 = uVar4 + uVar3;" (assignment_expression "lVar2 = uVar4 + uVar3" identifier = (binary_expression "uVar4 + uVar3" identifier + identifier)) ;) (if_statement "if (CARRY8(uVar4,uVar3)) {\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }\n  else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }" if (parenthesized_expression "(CARRY8(uVar4,uVar3))" ( (call_expression "CARRY8(uVar4,uVar3)" identifier (argument_list "(uVar4,uVar3)" ( identifier , identifier ))) )) (compound_statement "{\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }" { (expression_statement "lVar2 = -1;" (assignment_expression "lVar2 = -1" identifier = number_literal) ;) (labeled_statement "LAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);" statement_identifier : (expression_statement "pvVar1 = (void *)FUN_00337280(lVar2);" (assignment_expression "pvVar1 = (void *)FUN_00337280(lVar2)" identifier = (cast_expression "(void *)FUN_00337280(lVar2)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00337280(lVar2)" identifier (argument_list "(lVar2)" ( identifier ))))) ;)) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" identifier = (cast_expression "(void *)*param_1" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_1" * identifier))) ;) (expression_statement "lVar2 = lVar2 + (long)pvVar1;" (assignment_expression "lVar2 = lVar2 + (long)pvVar1" identifier = (binary_expression "lVar2 + (long)pvVar1" identifier + (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (expression_statement "uVar4 = param_1[1] - (long)__src;" (assignment_expression "uVar4 = param_1[1] - (long)__src" identifier = (binary_expression "param_1[1] - (long)__src" (subscript_expression "param_1[1]" identifier [ number_literal ]) - (cast_expression "(long)__src" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) }) (else_clause "else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }" else (compound_statement "{\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }" { (if_statement "if (lVar2 != 0) goto LAB_001c3a07;" if (parenthesized_expression "(lVar2 != 0)" ( (binary_expression "lVar2 != 0" identifier != number_literal) )) (goto_statement "goto LAB_001c3a07;" goto statement_identifier ;)) (expression_statement "lVar2 = 0;" (assignment_expression "lVar2 = 0" identifier = number_literal) ;) (expression_statement "pvVar1 = (void *)0x0;" (assignment_expression "pvVar1 = (void *)0x0" identifier = (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "uVar4 = uVar3;" (assignment_expression "uVar4 = uVar3" identifier = identifier) ;) }))) (expression_statement "memset((void *)((long)pvVar1 + uVar3),0,param_2);" (call_expression "memset((void *)((long)pvVar1 + uVar3),0,param_2)" identifier (argument_list "((void *)((long)pvVar1 + uVar3),0,param_2)" ( (cast_expression "(void *)((long)pvVar1 + uVar3)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)pvVar1 + uVar3)" ( (binary_expression "(long)pvVar1 + uVar3" (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) , number_literal , identifier ))) ;) (if_statement "if (uVar4 == 0) {\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }\n  else {\n    memmove(pvVar1,__src,uVar4);\n  }" if (parenthesized_expression "(uVar4 == 0)" ( (binary_expression "uVar4 == 0" identifier == number_literal) )) (compound_statement "{\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }" { (if_statement "if (__src == (void *)0x0) goto LAB_001c39d0;" if (parenthesized_expression "(__src == (void *)0x0)" ( (binary_expression "__src == (void *)0x0" identifier == (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_001c39d0;" goto statement_identifier ;)) }) (else_clause "else {\n    memmove(pvVar1,__src,uVar4);\n  }" else (compound_statement "{\n    memmove(pvVar1,__src,uVar4);\n  }" { (expression_statement "memmove(pvVar1,__src,uVar4);" (call_expression "memmove(pvVar1,__src,uVar4)" identifier (argument_list "(pvVar1,__src,uVar4)" ( identifier , identifier , identifier ))) ;) }))) (expression_statement "FUN_00338a50(__src);" (call_expression "FUN_00338a50(__src)" identifier (argument_list "(__src)" ( identifier ))) ;) (labeled_statement "LAB_001c39d0:\n  *param_1 = (long)pvVar1;" statement_identifier : (expression_statement "*param_1 = (long)pvVar1;" (assignment_expression "*param_1 = (long)pvVar1" (pointer_expression "*param_1" * identifier) = (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;)) (expression_statement "param_1[2] = lVar2;" (assignment_expression "param_1[2] = lVar2" (subscript_expression "param_1[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "param_1[1] = param_2 + uVar3 + (long)pvVar1;" (assignment_expression "param_1[1] = param_2 + uVar3 + (long)pvVar1" (subscript_expression "param_1[1]" identifier [ number_literal ]) = (binary_expression "param_2 + uVar3 + (long)pvVar1" (binary_expression "param_2 + uVar3" identifier + identifier) + (cast_expression "(long)pvVar1" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))) ;) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , IDENT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression IDENT + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (return_statement return ;) })) (if_statement if (parenthesized_expression ( (binary_expression (unary_expression ~ IDENT) < IDENT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (call_expression IDENT (argument_list ( IDENT , IDENT ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;)) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (expression_statement (assignment_expression IDENT = (binary_expression (subscript_expression IDENT [ LIT ]) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) ))) , LIT , IDENT ))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) }) (else_clause else (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT ))) ;) }))) (expression_statement (call_expression IDENT (argument_list ( IDENT ))) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression (pointer_expression * IDENT) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ;)) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (binary_expression (binary_expression IDENT + IDENT) + (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT))) ;) (return_statement return ;) })))
(function_definition "void FUN_001c3920(long *param_1,ulong param_2)\n\n{\n  void *pvVar1;\n  long lVar2;\n  ulong uVar3;\n  ulong uVar4;\n  void *__src;\n  \n  if (param_2 == 0) {\n    return;\n  }\n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  uVar3 = (long)pvVar1 - (long)__src;\n  if (param_2 <= (ulong)(param_1[2] - (long)pvVar1)) {\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }\n  if (~uVar3 < param_2) {\n                    \n    FUN_00377380("vector::_M_default_append");\n  }\n  uVar4 = uVar3;\n  if (uVar3 <= param_2) {\n    uVar4 = param_2;\n  }\n  lVar2 = uVar4 + uVar3;\n  if (CARRY8(uVar4,uVar3)) {\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }\n  else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }\n  memset((void *)((long)pvVar1 + uVar3),0,param_2);\n  if (uVar4 == 0) {\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }\n  else {\n    memmove(pvVar1,__src,uVar4);\n  }\n  FUN_00338a50(__src);\nLAB_001c39d0:\n  *param_1 = (long)pvVar1;\n  param_1[2] = lVar2;\n  param_1[1] = param_2 + uVar3 + (long)pvVar1;\n  return;\n}" (primitive_type "void") (function_declarator "FUN_001c3920(long *param_1,ulong param_2)" (identifier "FUN_001c3920") (parameter_list "(long *param_1,ulong param_2)" (( "(") (parameter_declaration "long *param_1" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "ulong param_2" (type_identifier "ulong") (identifier "param_2")) () ")"))) (compound_statement "{\n  void *pvVar1;\n  long lVar2;\n  ulong uVar3;\n  ulong uVar4;\n  void *__src;\n  \n  if (param_2 == 0) {\n    return;\n  }\n  pvVar1 = (void *)param_1[1];\n  __src = (void *)*param_1;\n  uVar3 = (long)pvVar1 - (long)__src;\n  if (param_2 <= (ulong)(param_1[2] - (long)pvVar1)) {\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }\n  if (~uVar3 < param_2) {\n                    \n    FUN_00377380("vector::_M_default_append");\n  }\n  uVar4 = uVar3;\n  if (uVar3 <= param_2) {\n    uVar4 = param_2;\n  }\n  lVar2 = uVar4 + uVar3;\n  if (CARRY8(uVar4,uVar3)) {\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }\n  else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }\n  memset((void *)((long)pvVar1 + uVar3),0,param_2);\n  if (uVar4 == 0) {\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }\n  else {\n    memmove(pvVar1,__src,uVar4);\n  }\n  FUN_00338a50(__src);\nLAB_001c39d0:\n  *param_1 = (long)pvVar1;\n  param_1[2] = lVar2;\n  param_1[1] = param_2 + uVar3 + (long)pvVar1;\n  return;\n}" ({ "{") (declaration "void *pvVar1;" (primitive_type "void") (pointer_declarator "*pvVar1" (* "*") (identifier "pvVar1")) (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "ulong uVar3;" (type_identifier "ulong") (identifier "uVar3") (; ";")) (declaration "ulong uVar4;" (type_identifier "ulong") (identifier "uVar4") (; ";")) (declaration "void *__src;" (primitive_type "void") (pointer_declarator "*__src" (* "*") (identifier "__src")) (; ";")) (if_statement "if (param_2 == 0) {\n    return;\n  }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return;\n  }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (expression_statement "pvVar1 = (void *)param_1[1];" (assignment_expression "pvVar1 = (void *)param_1[1]" (identifier "pvVar1") (= "=") (cast_expression "(void *)param_1[1]" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" (identifier "__src") (= "=") (cast_expression "(void *)*param_1" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "uVar3 = (long)pvVar1 - (long)__src;" (assignment_expression "uVar3 = (long)pvVar1 - (long)__src" (identifier "uVar3") (= "=") (binary_expression "(long)pvVar1 - (long)__src" (cast_expression "(long)pvVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar1")) (- "-") (cast_expression "(long)__src" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__src")))) (; ";")) (if_statement "if (param_2 <= (ulong)(param_1[2] - (long)pvVar1)) {\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }" (if "if") (parenthesized_expression "(param_2 <= (ulong)(param_1[2] - (long)pvVar1))" (( "(") (binary_expression "param_2 <= (ulong)(param_1[2] - (long)pvVar1)" (identifier "param_2") (<= "<=") (call_expression "(ulong)(param_1[2] - (long)pvVar1)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(param_1[2] - (long)pvVar1)" (( "(") (binary_expression "param_1[2] - (long)pvVar1" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (- "-") (cast_expression "(long)pvVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar1"))) () ")")))) () ")")) (compound_statement "{\n    pvVar1 = memset(pvVar1,0,param_2);\n    param_1[1] = param_2 + (long)pvVar1;\n    return;\n  }" ({ "{") (expression_statement "pvVar1 = memset(pvVar1,0,param_2);" (assignment_expression "pvVar1 = memset(pvVar1,0,param_2)" (identifier "pvVar1") (= "=") (call_expression "memset(pvVar1,0,param_2)" (identifier "memset") (argument_list "(pvVar1,0,param_2)" (( "(") (identifier "pvVar1") (, ",") (number_literal "0") (, ",") (identifier "param_2") () ")")))) (; ";")) (expression_statement "param_1[1] = param_2 + (long)pvVar1;" (assignment_expression "param_1[1] = param_2 + (long)pvVar1" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "param_2 + (long)pvVar1" (identifier "param_2") (+ "+") (cast_expression "(long)pvVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar1")))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}"))) (if_statement "if (~uVar3 < param_2) {\n                    \n    FUN_00377380("vector::_M_default_append");\n  }" (if "if") (parenthesized_expression "(~uVar3 < param_2)" (( "(") (binary_expression "~uVar3 < param_2" (unary_expression "~uVar3" (~ "~") (identifier "uVar3")) (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n                    \n    FUN_00377380("vector::_M_default_append");\n  }" ({ "{") (expression_statement "FUN_00377380("vector::_M_default_append");" (call_expression "FUN_00377380("vector::_M_default_append")" (identifier "FUN_00377380") (argument_list "("vector::_M_default_append")" (( "(") (string_literal ""vector::_M_default_append"" (" """) (string_content "vector::_M_default_append") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar4 = uVar3;" (assignment_expression "uVar4 = uVar3" (identifier "uVar4") (= "=") (identifier "uVar3")) (; ";")) (if_statement "if (uVar3 <= param_2) {\n    uVar4 = param_2;\n  }" (if "if") (parenthesized_expression "(uVar3 <= param_2)" (( "(") (binary_expression "uVar3 <= param_2" (identifier "uVar3") (<= "<=") (identifier "param_2")) () ")")) (compound_statement "{\n    uVar4 = param_2;\n  }" ({ "{") (expression_statement "uVar4 = param_2;" (assignment_expression "uVar4 = param_2" (identifier "uVar4") (= "=") (identifier "param_2")) (; ";")) (} "}"))) (expression_statement "lVar2 = uVar4 + uVar3;" (assignment_expression "lVar2 = uVar4 + uVar3" (identifier "lVar2") (= "=") (binary_expression "uVar4 + uVar3" (identifier "uVar4") (+ "+") (identifier "uVar3"))) (; ";")) (if_statement "if (CARRY8(uVar4,uVar3)) {\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }\n  else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }" (if "if") (parenthesized_expression "(CARRY8(uVar4,uVar3))" (( "(") (call_expression "CARRY8(uVar4,uVar3)" (identifier "CARRY8") (argument_list "(uVar4,uVar3)" (( "(") (identifier "uVar4") (, ",") (identifier "uVar3") () ")"))) () ")")) (compound_statement "{\n    lVar2 = -1;\nLAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);\n    __src = (void *)*param_1;\n    lVar2 = lVar2 + (long)pvVar1;\n    uVar4 = param_1[1] - (long)__src;\n  }" ({ "{") (expression_statement "lVar2 = -1;" (assignment_expression "lVar2 = -1" (identifier "lVar2") (= "=") (number_literal "-1")) (; ";")) (labeled_statement "LAB_001c3a07:\n    pvVar1 = (void *)FUN_00337280(lVar2);" (statement_identifier "LAB_001c3a07") (: ":") (expression_statement "pvVar1 = (void *)FUN_00337280(lVar2);" (assignment_expression "pvVar1 = (void *)FUN_00337280(lVar2)" (identifier "pvVar1") (= "=") (cast_expression "(void *)FUN_00337280(lVar2)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00337280(lVar2)" (identifier "FUN_00337280") (argument_list "(lVar2)" (( "(") (identifier "lVar2") () ")"))))) (; ";"))) (expression_statement "__src = (void *)*param_1;" (assignment_expression "__src = (void *)*param_1" (identifier "__src") (= "=") (cast_expression "(void *)*param_1" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_1" (* "*") (identifier "param_1")))) (; ";")) (expression_statement "lVar2 = lVar2 + (long)pvVar1;" (assignment_expression "lVar2 = lVar2 + (long)pvVar1" (identifier "lVar2") (= "=") (binary_expression "lVar2 + (long)pvVar1" (identifier "lVar2") (+ "+") (cast_expression "(long)pvVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar1")))) (; ";")) (expression_statement "uVar4 = param_1[1] - (long)__src;" (assignment_expression "uVar4 = param_1[1] - (long)__src" (identifier "uVar4") (= "=") (binary_expression "param_1[1] - (long)__src" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (- "-") (cast_expression "(long)__src" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__src")))) (; ";")) (} "}")) (else_clause "else {\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }" (else "else") (compound_statement "{\n    if (lVar2 != 0) goto LAB_001c3a07;\n    lVar2 = 0;\n    pvVar1 = (void *)0x0;\n    uVar4 = uVar3;\n  }" ({ "{") (if_statement "if (lVar2 != 0) goto LAB_001c3a07;" (if "if") (parenthesized_expression "(lVar2 != 0)" (( "(") (binary_expression "lVar2 != 0" (identifier "lVar2") (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_001c3a07;" (goto "goto") (statement_identifier "LAB_001c3a07") (; ";"))) (expression_statement "lVar2 = 0;" (assignment_expression "lVar2 = 0" (identifier "lVar2") (= "=") (number_literal "0")) (; ";")) (expression_statement "pvVar1 = (void *)0x0;" (assignment_expression "pvVar1 = (void *)0x0" (identifier "pvVar1") (= "=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "uVar4 = uVar3;" (assignment_expression "uVar4 = uVar3" (identifier "uVar4") (= "=") (identifier "uVar3")) (; ";")) (} "}")))) (expression_statement "memset((void *)((long)pvVar1 + uVar3),0,param_2);" (call_expression "memset((void *)((long)pvVar1 + uVar3),0,param_2)" (identifier "memset") (argument_list "((void *)((long)pvVar1 + uVar3),0,param_2)" (( "(") (cast_expression "(void *)((long)pvVar1 + uVar3)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)pvVar1 + uVar3)" (( "(") (binary_expression "(long)pvVar1 + uVar3" (cast_expression "(long)pvVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar1")) (+ "+") (identifier "uVar3")) () ")"))) (, ",") (number_literal "0") (, ",") (identifier "param_2") () ")"))) (; ";")) (if_statement "if (uVar4 == 0) {\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }\n  else {\n    memmove(pvVar1,__src,uVar4);\n  }" (if "if") (parenthesized_expression "(uVar4 == 0)" (( "(") (binary_expression "uVar4 == 0" (identifier "uVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    if (__src == (void *)0x0) goto LAB_001c39d0;\n  }" ({ "{") (if_statement "if (__src == (void *)0x0) goto LAB_001c39d0;" (if "if") (parenthesized_expression "(__src == (void *)0x0)" (( "(") (binary_expression "__src == (void *)0x0" (identifier "__src") (== "==") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_001c39d0;" (goto "goto") (statement_identifier "LAB_001c39d0") (; ";"))) (} "}")) (else_clause "else {\n    memmove(pvVar1,__src,uVar4);\n  }" (else "else") (compound_statement "{\n    memmove(pvVar1,__src,uVar4);\n  }" ({ "{") (expression_statement "memmove(pvVar1,__src,uVar4);" (call_expression "memmove(pvVar1,__src,uVar4)" (identifier "memmove") (argument_list "(pvVar1,__src,uVar4)" (( "(") (identifier "pvVar1") (, ",") (identifier "__src") (, ",") (identifier "uVar4") () ")"))) (; ";")) (} "}")))) (expression_statement "FUN_00338a50(__src);" (call_expression "FUN_00338a50(__src)" (identifier "FUN_00338a50") (argument_list "(__src)" (( "(") (identifier "__src") () ")"))) (; ";")) (labeled_statement "LAB_001c39d0:\n  *param_1 = (long)pvVar1;" (statement_identifier "LAB_001c39d0") (: ":") (expression_statement "*param_1 = (long)pvVar1;" (assignment_expression "*param_1 = (long)pvVar1" (pointer_expression "*param_1" (* "*") (identifier "param_1")) (= "=") (cast_expression "(long)pvVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar1"))) (; ";"))) (expression_statement "param_1[2] = lVar2;" (assignment_expression "param_1[2] = lVar2" (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "lVar2")) (; ";")) (expression_statement "param_1[1] = param_2 + uVar3 + (long)pvVar1;" (assignment_expression "param_1[1] = param_2 + uVar3 + (long)pvVar1" (subscript_expression "param_1[1]" (identifier "param_1") ([ "[") (number_literal "1") (] "]")) (= "=") (binary_expression "param_2 + uVar3 + (long)pvVar1" (binary_expression "param_2 + uVar3" (identifier "param_2") (+ "+") (identifier "uVar3")) (+ "+") (cast_expression "(long)pvVar1" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "pvVar1")))) (; ";")) (return_statement "return;" (return "return") (; ";")) (} "}")))

/* DWARF original prototype: void
   _M_default_append(vector<unsigned_char,_std::allocator<unsigned_char>_> * this, size_type __n) */

void __thiscall
std::vector<var_3,_std::var_2<var_3>var_4>::_M_default_append
          (vector<var_3,_std::var_2<var_3>var_4> *this,size_type var_1)

{
  void *pvVar1;
  type_1 var_13;
  type_2 var_12;
  type_1 var_8;
  type_1 var_9;
  type_2 var_14;
  type_2 puVar6;
  
  if (var_1 == 0) {
    return;
  }
  var_12 = (this->super__Vector_base<var_3,_std::var_2<var_3>var_4>var_5)._M_impl.
           _M_finish;
  var_14 = (this->super__Vector_base<var_3,_std::var_2<var_3>var_4>var_5)._M_impl._M_start
  ;
  var_8 = (long)var_12 - (long)var_14;
  if (var_1 <= (type_1)((long)(this->super__Vector_base<var_3,_std::var_2<var_3>var_4>var_5)
                           ._M_impl._M_end_of_storage - (long)var_12)) {
    pvVar1 = var_6(var_12,0,var_1);
    (this->super__Vector_base<var_3,_std::var_2<var_3>var_4>var_5)._M_impl._M_finish =
         (type_2)(var_1 + (long)pvVar1);
    return;
  }
  if (~var_8 < var_1) {
                    /* WARNING: Subroutine does not return */
    var_7("vector::_M_default_append");
  }
  var_9 = var_8;
  if (var_8 <= var_1) {
    var_9 = var_1;
  }
  var_13 = var_9 + var_8;
  if (var_10(var_9,var_8)) {
    var_13 = 0xffffffffffffffff;
LAB_001c3a07:
    var_12 = (type_2)var_11(var_13);
    var_14 = (this->super__Vector_base<var_3,_std::var_2<var_3>var_4>var_5)._M_impl.
            _M_start;
    puVar6 = var_12 + var_13;
    var_9 = (long)(this->super__Vector_base<var_3,_std::var_2<var_3>var_4>var_5)._M_impl.
                  _M_finish - (long)var_14;
  }
  else {
    if (var_13 != 0) goto LAB_001c3a07;
    puVar6 = (type_2)0x0;
    var_12 = (type_2)0x0;
    var_9 = var_8;
  }
  var_6(var_12 + var_8,0,var_1);
  if (var_9 == 0) {
    if (var_14 == (type_2)0x0) goto LAB_001c39d0;
  }
  else {
    var_15(var_12,var_14,var_9);
  }
  var_16(var_14);
LAB_001c39d0:
  (this->super__Vector_base<var_3,_std::var_2<var_3>var_4>var_5)._M_impl._M_start =
       var_12;
  (this->super__Vector_base<var_3,_std::var_2<var_3>var_4>var_5)._M_impl.
  _M_end_of_storage = puVar6;
  (this->super__Vector_base<var_3,_std::var_2<var_3>var_4>var_5)._M_impl._M_finish =
       var_12 + var_1 + var_8;
  return;
}


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

void MASKED(long *param_1,ulong param_2)

{
  void *pvVar1;
  long lVar2;
  ulong uVar3;
  ulong uVar4;
  void *__src;
  
  if (param_2 == 0) {
    return;
  }
  pvVar1 = (void *)param_1[1];
  __src = (void *)*param_1;
  uVar3 = (long)pvVar1 - (long)__src;
  if (param_2 <= (ulong)(param_1[2] - (long)pvVar1)) {
    pvVar1 = memset(pvVar1,0,param_2);
    param_1[1] = param_2 + (long)pvVar1;
    return;
  }
  if (~uVar3 < param_2) {
                    /* WARNING: Subroutine does not return */
    FUN_00377380("vector::_M_default_append");
  }
  uVar4 = uVar3;
  if (uVar3 <= param_2) {
    uVar4 = param_2;
  }
  lVar2 = uVar4 + uVar3;
  if (CARRY8(uVar4,uVar3)) {
    lVar2 = -1;
LAB_001c3a07:
    pvVar1 = (void *)FUN_00337280(lVar2);
    __src = (void *)*param_1;
    lVar2 = lVar2 + (long)pvVar1;
    uVar4 = param_1[1] - (long)__src;
  }
  else {
    if (lVar2 != 0) goto LAB_001c3a07;
    lVar2 = 0;
    pvVar1 = (void *)0x0;
    uVar4 = uVar3;
  }
  memset((void *)((long)pvVar1 + uVar3),0,param_2);
  if (uVar4 == 0) {
    if (__src == (void *)0x0) goto LAB_001c39d0;
  }
  else {
    memmove(pvVar1,__src,uVar4);
  }
  FUN_00338a50(__src);
LAB_001c39d0:
  *param_1 = (long)pvVar1;
  param_1[2] = lVar2;
  param_1[1] = param_2 + uVar3 + (long)pvVar1;
  return;
}

