
void add_fdes(long param_1,long *param_2,uint *param_3)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  undefined8 uVar4;
  long lVar5;
  ulong uVar6;
  long lVar7;
  ulong local_40 [2];
  
  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);
  uVar4 = base_from_object(uVar2,param_1);
  if (*param_3 != 0) {
    lVar7 = 0;
    do {
      while (param_3[1] != 0) {
        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&
           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {
          uVar2 = get_cie_encoding(lVar5);
          uVar4 = base_from_object((char)uVar2,param_1);
          lVar7 = lVar5;
        }
        if (uVar2 == 0) {
          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;
          break;
        }
        read_encoded_value_with_base(uVar2 & 0xff,uVar4,param_3 + 2,local_40);
        uVar3 = size_of_encoded_value(uVar2 & 0xff);
        uVar6 = 0xffffffffffffffff;
        if (uVar3 < 8) {
          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;
        }
        if ((local_40[0] & uVar6) != 0) {
LAB_00369af7:
          lVar5 = *param_2;
          if (lVar5 != 0) {
            lVar1 = *(long *)(lVar5 + 8);
            *(long *)(lVar5 + 8) = lVar1 + 1;
            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;
          }
          break;
        }
        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);
        if (*param_3 == 0) {
          return;
        }
      }
      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);
    } while (*param_3 != 0);
  }
  return;
}



void FUN_00369aa0(long param_1,long *param_2,uint *param_3)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  undefined8 uVar4;
  long lVar5;
  ulong uVar6;
  long lVar7;
  ulong local_40 [2];
  
  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);
  uVar4 = FUN_00368eb0(uVar2,param_1);
  if (*param_3 != 0) {
    lVar7 = 0;
    do {
      while (param_3[1] != 0) {
        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&
           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {
          uVar2 = FUN_00369120(lVar5);
          uVar4 = FUN_00368eb0((char)uVar2,param_1);
          lVar7 = lVar5;
        }
        if (uVar2 == 0) {
          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;
          break;
        }
        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);
        uVar3 = FUN_00368e50(uVar2 & 0xff);
        uVar6 = 0xffffffffffffffff;
        if (uVar3 < 8) {
          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;
        }
        if ((local_40[0] & uVar6) != 0) {
LAB_00369af7:
          lVar5 = *param_2;
          if (lVar5 != 0) {
            lVar1 = *(long *)(lVar5 + 8);
            *(long *)(lVar5 + 8) = lVar1 + 1;
            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;
          }
          break;
        }
        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);
        if (*param_3 == 0) {
          return;
        }
      }
      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);
    } while (*param_3 != 0);
  }
  return;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
MOV R12,RSI
MOV RSI,RDI
PUSH RBP
MOV RBP,RDI
PUSH RBX
MOV RBX,RDX
SUB RSP,0x28
MOVZX R8D,word ptr [RDI + 0x20]
SHR R8W,0x3
MOVZX R13D,R8B
MOV EDI,R13D
CALL 0x00368eb0
MOV EDX,dword ptr [RBX]
TEST EDX,EDX
JZ 0x00369bc8
MOV R14,RAX
LEA RAX,[RSP + 0x18]
XOR R15D,R15D
MOV qword ptr [RSP + 0x8],RAX
JMP 0x00369b22
CMP qword ptr [RBX + 0x8],0x0
JZ 0x00369b11
MOV RAX,qword ptr [R12]
TEST RAX,RAX
JZ 0x00369b11
MOV RDX,qword ptr [RAX + 0x8]
LEA RCX,[RDX + 0x1]
MOV qword ptr [RAX + 0x8],RCX
MOV qword ptr [RAX + RDX*0x8 + 0x10],RBX
MOV EAX,dword ptr [RBX]
LEA RBX,[RBX + RAX*0x1 + 0x4]
MOV EAX,dword ptr [RBX]
TEST EAX,EAX
JZ 0x00369bc8
MOVSXD RAX,dword ptr [RBX + 0x4]
TEST EAX,EAX
JZ 0x00369b11
TEST byte ptr [RBP + 0x20],0x4
JZ 0x00369b60
LEA RDX,[RBX + 0x4]
SUB RDX,RAX
CMP RDX,R15
JZ 0x00369b60
MOV RDI,RDX
MOV qword ptr [RSP],RDX
CALL 0x00369120
MOV RSI,RBP
MOVZX EDI,AL
MOV R13D,EAX
CALL 0x00368eb0
MOV RDX,qword ptr [RSP]
MOV R14,RAX
MOV R15,RDX
TEST R13D,R13D
JZ 0x00369af0
MOVZX R11D,R13B
MOV RCX,qword ptr [RSP + 0x8]
LEA RDX,[RBX + 0x8]
MOV RSI,R14
MOV EDI,R11D
MOV dword ptr [RSP],R11D
CALL 0x00368f50
MOV R11D,dword ptr [RSP]
MOV EDI,R11D
CALL 0x00368e50
MOV RDX,-0x1
CMP EAX,0x7
JA 0x00369bac
LEA ECX,[RAX*0x8]
MOV EDX,0x1
SHL RDX,CL
SUB RDX,0x1
TEST qword ptr [RSP + 0x18],RDX
JNZ 0x00369af7
MOV EAX,dword ptr [RBX]
LEA RBX,[RBX + RAX*0x1 + 0x4]
MOV EAX,dword ptr [RBX]
TEST EAX,EAX
JNZ 0x00369b22
ADD RSP,0x28
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
(translation_unit "void FUN_00369aa0(long param_1,long *param_2,uint *param_3)\n\n{\n  long lVar1;\n  uint uVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  ulong uVar6;\n  long lVar7;\n  ulong local_40 [2];\n  \n  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);\n  uVar4 = FUN_00368eb0(uVar2,param_1);\n  if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }\n  return;\n}\n\n" (function_definition "void FUN_00369aa0(long param_1,long *param_2,uint *param_3)\n\n{\n  long lVar1;\n  uint uVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  ulong uVar6;\n  long lVar7;\n  ulong local_40 [2];\n  \n  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);\n  uVar4 = FUN_00368eb0(uVar2,param_1);\n  if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00369aa0(long param_1,long *param_2,uint *param_3)" identifier (parameter_list "(long param_1,long *param_2,uint *param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  uint uVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  ulong uVar6;\n  long lVar7;\n  ulong local_40 [2];\n  \n  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);\n  uVar4 = FUN_00368eb0(uVar2,param_1);\n  if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);" (assignment_expression "uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3)" identifier = (call_expression "(uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "(*(ushort *)(param_1 + 0x20) >> 3)" ( (binary_expression "*(ushort *)(param_1 + 0x20) >> 3" (pointer_expression "*(ushort *)(param_1 + 0x20)" * (cast_expression "(ushort *)(param_1 + 0x20)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "uVar4 = FUN_00368eb0(uVar2,param_1);" (assignment_expression "uVar4 = FUN_00368eb0(uVar2,param_1)" identifier = (call_expression "FUN_00368eb0(uVar2,param_1)" identifier (argument_list "(uVar2,param_1)" ( identifier , identifier )))) ;) (if_statement "if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }" if (parenthesized_expression "(*param_3 != 0)" ( (binary_expression "*param_3 != 0" (pointer_expression "*param_3" * identifier) != number_literal) )) (compound_statement "{\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }" { (expression_statement "lVar7 = 0;" (assignment_expression "lVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);" do (compound_statement "{\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    }" { (while_statement "while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }" while (parenthesized_expression "(param_3[1] != 0)" ( (binary_expression "param_3[1] != 0" (subscript_expression "param_3[1]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }" { (if_statement "if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }" if (parenthesized_expression "(((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7))" ( (binary_expression "((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)" (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 4) != 0)" ( (binary_expression "(*(byte *)(param_1 + 0x20) & 4) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 4)" ( (binary_expression "*(byte *)(param_1 + 0x20) & 4" (pointer_expression "*(byte *)(param_1 + 0x20)" * (cast_expression "(byte *)(param_1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)" ( (comma_expression "lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7" (assignment_expression "lVar5 = (long)param_3 + (4 - (long)(int)param_3[1])" identifier = (binary_expression "(long)param_3 + (4 - (long)(int)param_3[1])" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(4 - (long)(int)param_3[1])" ( (binary_expression "4 - (long)(int)param_3[1]" number_literal - (cast_expression "(long)(int)param_3[1]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)param_3[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_3[1]" identifier [ number_literal ])))) )))) , (binary_expression "lVar5 != lVar7" identifier != identifier)) ))) )) (compound_statement "{\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }" { (expression_statement "uVar2 = FUN_00369120(lVar5);" (assignment_expression "uVar2 = FUN_00369120(lVar5)" identifier = (call_expression "FUN_00369120(lVar5)" identifier (argument_list "(lVar5)" ( identifier )))) ;) (expression_statement "uVar4 = FUN_00368eb0((char)uVar2,param_1);" (assignment_expression "uVar4 = FUN_00368eb0((char)uVar2,param_1)" identifier = (call_expression "FUN_00368eb0((char)uVar2,param_1)" identifier (argument_list "((char)uVar2,param_1)" ( (cast_expression "(char)uVar2" ( (type_descriptor "char" primitive_type) ) identifier) , identifier )))) ;) (expression_statement "lVar7 = lVar5;" (assignment_expression "lVar7 = lVar5" identifier = identifier) ;) })) (if_statement "if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }" { (if_statement "if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;" if (parenthesized_expression "(*(long *)(param_3 + 2) != 0)" ( (binary_expression "*(long *)(param_3 + 2) != 0" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) != number_literal) )) (goto_statement "goto LAB_00369af7;" goto statement_identifier ;)) (break_statement "break;" break ;) })) (expression_statement "FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);" (call_expression "FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40)" identifier (argument_list "(uVar2 & 0xff,uVar4,param_3 + 2,local_40)" ( (binary_expression "uVar2 & 0xff" identifier & number_literal) , identifier , (binary_expression "param_3 + 2" identifier + number_literal) , identifier ))) ;) (expression_statement "uVar3 = FUN_00368e50(uVar2 & 0xff);" (assignment_expression "uVar3 = FUN_00368e50(uVar2 & 0xff)" identifier = (call_expression "FUN_00368e50(uVar2 & 0xff)" identifier (argument_list "(uVar2 & 0xff)" ( (binary_expression "uVar2 & 0xff" identifier & number_literal) )))) ;) (expression_statement "uVar6 = 0xffffffffffffffff;" (assignment_expression "uVar6 = 0xffffffffffffffff" identifier = number_literal) ;) (if_statement "if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }" if (parenthesized_expression "(uVar3 < 8)" ( (binary_expression "uVar3 < 8" identifier < number_literal) )) (compound_statement "{\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }" { (expression_statement "uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;" (assignment_expression "uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1" identifier = (binary_expression "(1L << ((char)uVar3 * '\b' & 0x3fU)) - 1" (parenthesized_expression "(1L << ((char)uVar3 * '\b' & 0x3fU))" ( (binary_expression "1L << ((char)uVar3 * '\b' & 0x3fU)" number_literal << (parenthesized_expression "((char)uVar3 * '\b' & 0x3fU)" ( (binary_expression "(char)uVar3 * '\b' & 0x3fU" (binary_expression "(char)uVar3 * '\b'" (cast_expression "(char)uVar3" ( (type_descriptor "char" primitive_type) ) identifier) * (char_literal "'\b'" ' escape_sequence ')) & number_literal) ))) )) - number_literal)) ;) })) (if_statement "if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }" if (parenthesized_expression "((local_40[0] & uVar6) != 0)" ( (binary_expression "(local_40[0] & uVar6) != 0" (parenthesized_expression "(local_40[0] & uVar6)" ( (binary_expression "local_40[0] & uVar6" (subscript_expression "local_40[0]" identifier [ number_literal ]) & identifier) )) != number_literal) )) (compound_statement "{\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }" { (labeled_statement "LAB_00369af7:\n          lVar5 = *param_2;" statement_identifier : (expression_statement "lVar5 = *param_2;" (assignment_expression "lVar5 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;)) (if_statement "if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }" if (parenthesized_expression "(lVar5 != 0)" ( (binary_expression "lVar5 != 0" identifier != number_literal) )) (compound_statement "{\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }" { (expression_statement "lVar1 = *(long *)(lVar5 + 8);" (assignment_expression "lVar1 = *(long *)(lVar5 + 8)" identifier = (pointer_expression "*(long *)(lVar5 + 8)" * (cast_expression "(long *)(lVar5 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) ))))) ;) (expression_statement "*(long *)(lVar5 + 8) = lVar1 + 1;" (assignment_expression "*(long *)(lVar5 + 8) = lVar1 + 1" (pointer_expression "*(long *)(lVar5 + 8)" * (cast_expression "(long *)(lVar5 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) )))) = (binary_expression "lVar1 + 1" identifier + number_literal)) ;) (expression_statement "*(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;" (assignment_expression "*(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3" (pointer_expression "*(uint **)(lVar5 + 0x10 + lVar1 * 8)" * (cast_expression "(uint **)(lVar5 + 0x10 + lVar1 * 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar5 + 0x10 + lVar1 * 8)" ( (binary_expression "lVar5 + 0x10 + lVar1 * 8" (binary_expression "lVar5 + 0x10" identifier + number_literal) + (binary_expression "lVar1 * 8" identifier * number_literal)) )))) = identifier) ;) })) (break_statement "break;" break ;) })) (expression_statement "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);" (assignment_expression "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4)" identifier = (cast_expression "(uint *)((long)param_3 + (ulong)*param_3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + (ulong)*param_3 + 4)" ( (binary_expression "(long)param_3 + (ulong)*param_3 + 4" (binary_expression "(long)param_3 + (ulong)*param_3" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)*param_3" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) + number_literal) )))) ;) (if_statement "if (*param_3 == 0) {\n          return;\n        }" if (parenthesized_expression "(*param_3 == 0)" ( (binary_expression "*param_3 == 0" (pointer_expression "*param_3" * identifier) == number_literal) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);" (assignment_expression "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4)" identifier = (cast_expression "(uint *)((long)param_3 + (ulong)*param_3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + (ulong)*param_3 + 4)" ( (binary_expression "(long)param_3 + (ulong)*param_3 + 4" (binary_expression "(long)param_3 + (ulong)*param_3" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)*param_3" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) + number_literal) )))) ;) }) while (parenthesized_expression "(*param_3 != 0)" ( (binary_expression "*param_3 != 0" (pointer_expression "*param_3" * identifier) != number_literal) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void add_fdes(long param_1,long *param_2,uint *param_3)\n\n{\n  long lVar1;\n  uint uVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  ulong uVar6;\n  long lVar7;\n  ulong local_40 [2];\n  \n  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);\n  uVar4 = base_from_object(uVar2,param_1);\n  if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = get_cie_encoding(lVar5);\n          uVar4 = base_from_object((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        read_encoded_value_with_base(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = size_of_encoded_value(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }\n  return;\n}\n\n" (function_definition "void add_fdes(long param_1,long *param_2,uint *param_3)\n\n{\n  long lVar1;\n  uint uVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  ulong uVar6;\n  long lVar7;\n  ulong local_40 [2];\n  \n  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);\n  uVar4 = base_from_object(uVar2,param_1);\n  if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = get_cie_encoding(lVar5);\n          uVar4 = base_from_object((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        read_encoded_value_with_base(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = size_of_encoded_value(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }\n  return;\n}" primitive_type (function_declarator "add_fdes(long param_1,long *param_2,uint *param_3)" identifier (parameter_list "(long param_1,long *param_2,uint *param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  uint uVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  ulong uVar6;\n  long lVar7;\n  ulong local_40 [2];\n  \n  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);\n  uVar4 = base_from_object(uVar2,param_1);\n  if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = get_cie_encoding(lVar5);\n          uVar4 = base_from_object((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        read_encoded_value_with_base(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = size_of_encoded_value(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);" (assignment_expression "uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3)" identifier = (call_expression "(uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "(*(ushort *)(param_1 + 0x20) >> 3)" ( (binary_expression "*(ushort *)(param_1 + 0x20) >> 3" (pointer_expression "*(ushort *)(param_1 + 0x20)" * (cast_expression "(ushort *)(param_1 + 0x20)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "uVar4 = base_from_object(uVar2,param_1);" (assignment_expression "uVar4 = base_from_object(uVar2,param_1)" identifier = (call_expression "base_from_object(uVar2,param_1)" identifier (argument_list "(uVar2,param_1)" ( identifier , identifier )))) ;) (if_statement "if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = get_cie_encoding(lVar5);\n          uVar4 = base_from_object((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        read_encoded_value_with_base(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = size_of_encoded_value(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }" if (parenthesized_expression "(*param_3 != 0)" ( (binary_expression "*param_3 != 0" (pointer_expression "*param_3" * identifier) != number_literal) )) (compound_statement "{\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = get_cie_encoding(lVar5);\n          uVar4 = base_from_object((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        read_encoded_value_with_base(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = size_of_encoded_value(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }" { (expression_statement "lVar7 = 0;" (assignment_expression "lVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = get_cie_encoding(lVar5);\n          uVar4 = base_from_object((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        read_encoded_value_with_base(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = size_of_encoded_value(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);" do (compound_statement "{\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = get_cie_encoding(lVar5);\n          uVar4 = base_from_object((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        read_encoded_value_with_base(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = size_of_encoded_value(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    }" { (while_statement "while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = get_cie_encoding(lVar5);\n          uVar4 = base_from_object((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        read_encoded_value_with_base(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = size_of_encoded_value(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }" while (parenthesized_expression "(param_3[1] != 0)" ( (binary_expression "param_3[1] != 0" (subscript_expression "param_3[1]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = get_cie_encoding(lVar5);\n          uVar4 = base_from_object((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        read_encoded_value_with_base(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = size_of_encoded_value(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }" { (if_statement "if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = get_cie_encoding(lVar5);\n          uVar4 = base_from_object((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }" if (parenthesized_expression "(((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7))" ( (binary_expression "((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)" (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 4) != 0)" ( (binary_expression "(*(byte *)(param_1 + 0x20) & 4) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 4)" ( (binary_expression "*(byte *)(param_1 + 0x20) & 4" (pointer_expression "*(byte *)(param_1 + 0x20)" * (cast_expression "(byte *)(param_1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)" ( (comma_expression "lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7" (assignment_expression "lVar5 = (long)param_3 + (4 - (long)(int)param_3[1])" identifier = (binary_expression "(long)param_3 + (4 - (long)(int)param_3[1])" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(4 - (long)(int)param_3[1])" ( (binary_expression "4 - (long)(int)param_3[1]" number_literal - (cast_expression "(long)(int)param_3[1]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)param_3[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_3[1]" identifier [ number_literal ])))) )))) , (binary_expression "lVar5 != lVar7" identifier != identifier)) ))) )) (compound_statement "{\n          uVar2 = get_cie_encoding(lVar5);\n          uVar4 = base_from_object((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }" { (expression_statement "uVar2 = get_cie_encoding(lVar5);" (assignment_expression "uVar2 = get_cie_encoding(lVar5)" identifier = (call_expression "get_cie_encoding(lVar5)" identifier (argument_list "(lVar5)" ( identifier )))) ;) (expression_statement "uVar4 = base_from_object((char)uVar2,param_1);" (assignment_expression "uVar4 = base_from_object((char)uVar2,param_1)" identifier = (call_expression "base_from_object((char)uVar2,param_1)" identifier (argument_list "((char)uVar2,param_1)" ( (cast_expression "(char)uVar2" ( (type_descriptor "char" primitive_type) ) identifier) , identifier )))) ;) (expression_statement "lVar7 = lVar5;" (assignment_expression "lVar7 = lVar5" identifier = identifier) ;) })) (if_statement "if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }" { (if_statement "if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;" if (parenthesized_expression "(*(long *)(param_3 + 2) != 0)" ( (binary_expression "*(long *)(param_3 + 2) != 0" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) != number_literal) )) (goto_statement "goto LAB_00369af7;" goto statement_identifier ;)) (break_statement "break;" break ;) })) (expression_statement "read_encoded_value_with_base(uVar2 & 0xff,uVar4,param_3 + 2,local_40);" (call_expression "read_encoded_value_with_base(uVar2 & 0xff,uVar4,param_3 + 2,local_40)" identifier (argument_list "(uVar2 & 0xff,uVar4,param_3 + 2,local_40)" ( (binary_expression "uVar2 & 0xff" identifier & number_literal) , identifier , (binary_expression "param_3 + 2" identifier + number_literal) , identifier ))) ;) (expression_statement "uVar3 = size_of_encoded_value(uVar2 & 0xff);" (assignment_expression "uVar3 = size_of_encoded_value(uVar2 & 0xff)" identifier = (call_expression "size_of_encoded_value(uVar2 & 0xff)" identifier (argument_list "(uVar2 & 0xff)" ( (binary_expression "uVar2 & 0xff" identifier & number_literal) )))) ;) (expression_statement "uVar6 = 0xffffffffffffffff;" (assignment_expression "uVar6 = 0xffffffffffffffff" identifier = number_literal) ;) (if_statement "if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }" if (parenthesized_expression "(uVar3 < 8)" ( (binary_expression "uVar3 < 8" identifier < number_literal) )) (compound_statement "{\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }" { (expression_statement "uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;" (assignment_expression "uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1" identifier = (binary_expression "(1L << ((char)uVar3 * '\b' & 0x3fU)) - 1" (parenthesized_expression "(1L << ((char)uVar3 * '\b' & 0x3fU))" ( (binary_expression "1L << ((char)uVar3 * '\b' & 0x3fU)" number_literal << (parenthesized_expression "((char)uVar3 * '\b' & 0x3fU)" ( (binary_expression "(char)uVar3 * '\b' & 0x3fU" (binary_expression "(char)uVar3 * '\b'" (cast_expression "(char)uVar3" ( (type_descriptor "char" primitive_type) ) identifier) * (char_literal "'\b'" ' escape_sequence ')) & number_literal) ))) )) - number_literal)) ;) })) (if_statement "if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }" if (parenthesized_expression "((local_40[0] & uVar6) != 0)" ( (binary_expression "(local_40[0] & uVar6) != 0" (parenthesized_expression "(local_40[0] & uVar6)" ( (binary_expression "local_40[0] & uVar6" (subscript_expression "local_40[0]" identifier [ number_literal ]) & identifier) )) != number_literal) )) (compound_statement "{\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }" { (labeled_statement "LAB_00369af7:\n          lVar5 = *param_2;" statement_identifier : (expression_statement "lVar5 = *param_2;" (assignment_expression "lVar5 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;)) (if_statement "if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }" if (parenthesized_expression "(lVar5 != 0)" ( (binary_expression "lVar5 != 0" identifier != number_literal) )) (compound_statement "{\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }" { (expression_statement "lVar1 = *(long *)(lVar5 + 8);" (assignment_expression "lVar1 = *(long *)(lVar5 + 8)" identifier = (pointer_expression "*(long *)(lVar5 + 8)" * (cast_expression "(long *)(lVar5 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) ))))) ;) (expression_statement "*(long *)(lVar5 + 8) = lVar1 + 1;" (assignment_expression "*(long *)(lVar5 + 8) = lVar1 + 1" (pointer_expression "*(long *)(lVar5 + 8)" * (cast_expression "(long *)(lVar5 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) )))) = (binary_expression "lVar1 + 1" identifier + number_literal)) ;) (expression_statement "*(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;" (assignment_expression "*(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3" (pointer_expression "*(uint **)(lVar5 + 0x10 + lVar1 * 8)" * (cast_expression "(uint **)(lVar5 + 0x10 + lVar1 * 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar5 + 0x10 + lVar1 * 8)" ( (binary_expression "lVar5 + 0x10 + lVar1 * 8" (binary_expression "lVar5 + 0x10" identifier + number_literal) + (binary_expression "lVar1 * 8" identifier * number_literal)) )))) = identifier) ;) })) (break_statement "break;" break ;) })) (expression_statement "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);" (assignment_expression "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4)" identifier = (cast_expression "(uint *)((long)param_3 + (ulong)*param_3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + (ulong)*param_3 + 4)" ( (binary_expression "(long)param_3 + (ulong)*param_3 + 4" (binary_expression "(long)param_3 + (ulong)*param_3" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)*param_3" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) + number_literal) )))) ;) (if_statement "if (*param_3 == 0) {\n          return;\n        }" if (parenthesized_expression "(*param_3 == 0)" ( (binary_expression "*param_3 == 0" (pointer_expression "*param_3" * identifier) == number_literal) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);" (assignment_expression "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4)" identifier = (cast_expression "(uint *)((long)param_3 + (ulong)*param_3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + (ulong)*param_3 + 4)" ( (binary_expression "(long)param_3 + (ulong)*param_3 + 4" (binary_expression "(long)param_3 + (ulong)*param_3" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)*param_3" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) + number_literal) )))) ;) }) while (parenthesized_expression "(*param_3 != 0)" ( (binary_expression "*param_3 != 0" (pointer_expression "*param_3" * identifier) != number_literal) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit "void FUN_00369aa0(long param_1,long *param_2,uint *param_3)\n\n{\n  long lVar1;\n  uint uVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  ulong uVar6;\n  long lVar7;\n  ulong local_40 [2];\n  \n  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);\n  uVar4 = FUN_00368eb0(uVar2,param_1);\n  if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }\n  return;\n}\n\n" (function_definition "void FUN_00369aa0(long param_1,long *param_2,uint *param_3)\n\n{\n  long lVar1;\n  uint uVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  ulong uVar6;\n  long lVar7;\n  ulong local_40 [2];\n  \n  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);\n  uVar4 = FUN_00368eb0(uVar2,param_1);\n  if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }\n  return;\n}" primitive_type (function_declarator "FUN_00369aa0(long param_1,long *param_2,uint *param_3)" identifier (parameter_list "(long param_1,long *param_2,uint *param_3)" ( (parameter_declaration "long param_1" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long *param_2" (sized_type_specifier "long" long) (pointer_declarator "*param_2" * identifier)) , (parameter_declaration "uint *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  long lVar1;\n  uint uVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  ulong uVar6;\n  long lVar7;\n  ulong local_40 [2];\n  \n  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);\n  uVar4 = FUN_00368eb0(uVar2,param_1);\n  if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }\n  return;\n}" { (declaration "long lVar1;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar2;" type_identifier identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "undefined8 uVar4;" type_identifier identifier ;) (declaration "long lVar5;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar6;" type_identifier identifier ;) (declaration "long lVar7;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (expression_statement "uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);" (assignment_expression "uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3)" identifier = (call_expression "(uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" ( identifier )) (argument_list "(byte)" ( identifier ))) (argument_list "(*(ushort *)(param_1 + 0x20) >> 3)" ( (binary_expression "*(ushort *)(param_1 + 0x20) >> 3" (pointer_expression "*(ushort *)(param_1 + 0x20)" * (cast_expression "(ushort *)(param_1 + 0x20)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) >> number_literal) )))) ;) (expression_statement "uVar4 = FUN_00368eb0(uVar2,param_1);" (assignment_expression "uVar4 = FUN_00368eb0(uVar2,param_1)" identifier = (call_expression "FUN_00368eb0(uVar2,param_1)" identifier (argument_list "(uVar2,param_1)" ( identifier , identifier )))) ;) (if_statement "if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }" if (parenthesized_expression "(*param_3 != 0)" ( (binary_expression "*param_3 != 0" (pointer_expression "*param_3" * identifier) != number_literal) )) (compound_statement "{\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }" { (expression_statement "lVar7 = 0;" (assignment_expression "lVar7 = 0" identifier = number_literal) ;) (do_statement "do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);" do (compound_statement "{\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    }" { (while_statement "while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }" while (parenthesized_expression "(param_3[1] != 0)" ( (binary_expression "param_3[1] != 0" (subscript_expression "param_3[1]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }" { (if_statement "if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }" if (parenthesized_expression "(((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7))" ( (binary_expression "((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)" (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 4) != 0)" ( (binary_expression "(*(byte *)(param_1 + 0x20) & 4) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 4)" ( (binary_expression "*(byte *)(param_1 + 0x20) & 4" (pointer_expression "*(byte *)(param_1 + 0x20)" * (cast_expression "(byte *)(param_1 + 0x20)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_1 + 0x20)" ( (binary_expression "param_1 + 0x20" identifier + number_literal) )))) & number_literal) )) != number_literal) )) && (parenthesized_expression "(lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)" ( (comma_expression "lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7" (assignment_expression "lVar5 = (long)param_3 + (4 - (long)(int)param_3[1])" identifier = (binary_expression "(long)param_3 + (4 - (long)(int)param_3[1])" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (parenthesized_expression "(4 - (long)(int)param_3[1])" ( (binary_expression "4 - (long)(int)param_3[1]" number_literal - (cast_expression "(long)(int)param_3[1]" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (cast_expression "(int)param_3[1]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_3[1]" identifier [ number_literal ])))) )))) , (binary_expression "lVar5 != lVar7" identifier != identifier)) ))) )) (compound_statement "{\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }" { (expression_statement "uVar2 = FUN_00369120(lVar5);" (assignment_expression "uVar2 = FUN_00369120(lVar5)" identifier = (call_expression "FUN_00369120(lVar5)" identifier (argument_list "(lVar5)" ( identifier )))) ;) (expression_statement "uVar4 = FUN_00368eb0((char)uVar2,param_1);" (assignment_expression "uVar4 = FUN_00368eb0((char)uVar2,param_1)" identifier = (call_expression "FUN_00368eb0((char)uVar2,param_1)" identifier (argument_list "((char)uVar2,param_1)" ( (cast_expression "(char)uVar2" ( (type_descriptor "char" primitive_type) ) identifier) , identifier )))) ;) (expression_statement "lVar7 = lVar5;" (assignment_expression "lVar7 = lVar5" identifier = identifier) ;) })) (if_statement "if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }" if (parenthesized_expression "(uVar2 == 0)" ( (binary_expression "uVar2 == 0" identifier == number_literal) )) (compound_statement "{\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }" { (if_statement "if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;" if (parenthesized_expression "(*(long *)(param_3 + 2) != 0)" ( (binary_expression "*(long *)(param_3 + 2) != 0" (pointer_expression "*(long *)(param_3 + 2)" * (cast_expression "(long *)(param_3 + 2)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 2)" ( (binary_expression "param_3 + 2" identifier + number_literal) )))) != number_literal) )) (goto_statement "goto LAB_00369af7;" goto statement_identifier ;)) (break_statement "break;" break ;) })) (expression_statement "FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);" (call_expression "FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40)" identifier (argument_list "(uVar2 & 0xff,uVar4,param_3 + 2,local_40)" ( (binary_expression "uVar2 & 0xff" identifier & number_literal) , identifier , (binary_expression "param_3 + 2" identifier + number_literal) , identifier ))) ;) (expression_statement "uVar3 = FUN_00368e50(uVar2 & 0xff);" (assignment_expression "uVar3 = FUN_00368e50(uVar2 & 0xff)" identifier = (call_expression "FUN_00368e50(uVar2 & 0xff)" identifier (argument_list "(uVar2 & 0xff)" ( (binary_expression "uVar2 & 0xff" identifier & number_literal) )))) ;) (expression_statement "uVar6 = 0xffffffffffffffff;" (assignment_expression "uVar6 = 0xffffffffffffffff" identifier = number_literal) ;) (if_statement "if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }" if (parenthesized_expression "(uVar3 < 8)" ( (binary_expression "uVar3 < 8" identifier < number_literal) )) (compound_statement "{\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }" { (expression_statement "uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;" (assignment_expression "uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1" identifier = (binary_expression "(1L << ((char)uVar3 * '\b' & 0x3fU)) - 1" (parenthesized_expression "(1L << ((char)uVar3 * '\b' & 0x3fU))" ( (binary_expression "1L << ((char)uVar3 * '\b' & 0x3fU)" number_literal << (parenthesized_expression "((char)uVar3 * '\b' & 0x3fU)" ( (binary_expression "(char)uVar3 * '\b' & 0x3fU" (binary_expression "(char)uVar3 * '\b'" (cast_expression "(char)uVar3" ( (type_descriptor "char" primitive_type) ) identifier) * (char_literal "'\b'" ' escape_sequence ')) & number_literal) ))) )) - number_literal)) ;) })) (if_statement "if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }" if (parenthesized_expression "((local_40[0] & uVar6) != 0)" ( (binary_expression "(local_40[0] & uVar6) != 0" (parenthesized_expression "(local_40[0] & uVar6)" ( (binary_expression "local_40[0] & uVar6" (subscript_expression "local_40[0]" identifier [ number_literal ]) & identifier) )) != number_literal) )) (compound_statement "{\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }" { (labeled_statement "LAB_00369af7:\n          lVar5 = *param_2;" statement_identifier : (expression_statement "lVar5 = *param_2;" (assignment_expression "lVar5 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;)) (if_statement "if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }" if (parenthesized_expression "(lVar5 != 0)" ( (binary_expression "lVar5 != 0" identifier != number_literal) )) (compound_statement "{\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }" { (expression_statement "lVar1 = *(long *)(lVar5 + 8);" (assignment_expression "lVar1 = *(long *)(lVar5 + 8)" identifier = (pointer_expression "*(long *)(lVar5 + 8)" * (cast_expression "(long *)(lVar5 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) ))))) ;) (expression_statement "*(long *)(lVar5 + 8) = lVar1 + 1;" (assignment_expression "*(long *)(lVar5 + 8) = lVar1 + 1" (pointer_expression "*(long *)(lVar5 + 8)" * (cast_expression "(long *)(lVar5 + 8)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(lVar5 + 8)" ( (binary_expression "lVar5 + 8" identifier + number_literal) )))) = (binary_expression "lVar1 + 1" identifier + number_literal)) ;) (expression_statement "*(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;" (assignment_expression "*(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3" (pointer_expression "*(uint **)(lVar5 + 0x10 + lVar1 * 8)" * (cast_expression "(uint **)(lVar5 + 0x10 + lVar1 * 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(lVar5 + 0x10 + lVar1 * 8)" ( (binary_expression "lVar5 + 0x10 + lVar1 * 8" (binary_expression "lVar5 + 0x10" identifier + number_literal) + (binary_expression "lVar1 * 8" identifier * number_literal)) )))) = identifier) ;) })) (break_statement "break;" break ;) })) (expression_statement "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);" (assignment_expression "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4)" identifier = (cast_expression "(uint *)((long)param_3 + (ulong)*param_3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + (ulong)*param_3 + 4)" ( (binary_expression "(long)param_3 + (ulong)*param_3 + 4" (binary_expression "(long)param_3 + (ulong)*param_3" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)*param_3" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) + number_literal) )))) ;) (if_statement "if (*param_3 == 0) {\n          return;\n        }" if (parenthesized_expression "(*param_3 == 0)" ( (binary_expression "*param_3 == 0" (pointer_expression "*param_3" * identifier) == number_literal) )) (compound_statement "{\n          return;\n        }" { (return_statement "return;" return ;) })) })) (expression_statement "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);" (assignment_expression "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4)" identifier = (cast_expression "(uint *)((long)param_3 + (ulong)*param_3 + 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)param_3 + (ulong)*param_3 + 4)" ( (binary_expression "(long)param_3 + (ulong)*param_3 + 4" (binary_expression "(long)param_3 + (ulong)*param_3" (cast_expression "(long)param_3" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + (binary_expression "(ulong)*param_3" (parenthesized_expression "(ulong)" ( identifier )) * identifier)) + number_literal) )))) ;) }) while (parenthesized_expression "(*param_3 != 0)" ( (binary_expression "*param_3 != 0" (pointer_expression "*param_3" * identifier) != number_literal) )) ;) })) (return_statement "return;" return ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) (pointer_declarator * IDENT)) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (expression_statement (assignment_expression IDENT = (call_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) >> LIT) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) & LIT) )) != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])))) )))) , (binary_expression IDENT != IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE) ) IDENT) , IDENT )))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) )) (goto_statement goto statement_identifier ;)) (break_statement break ;) })) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT & LIT) , IDENT , (binary_expression IDENT + LIT) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT & LIT) )))) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (parenthesized_expression ( (binary_expression LIT << (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * (char_literal ' escape_sequence ')) & LIT) ))) )) - LIT)) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) & IDENT) )) != LIT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (abstract_pointer_declarator *))) ) (parenthesized_expression ( (binary_expression (binary_expression IDENT + LIT) + (binary_expression IDENT * LIT)) )))) = IDENT) ;) })) (break_statement break ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) + LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) == LIT) )) (compound_statement { (return_statement return ;) })) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + (binary_expression (parenthesized_expression ( IDENT )) * IDENT)) + LIT) )))) ;) }) while (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) ;) })) (return_statement return ;) })))
(function_definition "void FUN_00369aa0(long param_1,long *param_2,uint *param_3)\n\n{\n  long lVar1;\n  uint uVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  ulong uVar6;\n  long lVar7;\n  ulong local_40 [2];\n  \n  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);\n  uVar4 = FUN_00368eb0(uVar2,param_1);\n  if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }\n  return;\n}" (primitive_type "void") (function_declarator "FUN_00369aa0(long param_1,long *param_2,uint *param_3)" (identifier "FUN_00369aa0") (parameter_list "(long param_1,long *param_2,uint *param_3)" (( "(") (parameter_declaration "long param_1" (sized_type_specifier "long" (long "long")) (identifier "param_1")) (, ",") (parameter_declaration "long *param_2" (sized_type_specifier "long" (long "long")) (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) (, ",") (parameter_declaration "uint *param_3" (type_identifier "uint") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  long lVar1;\n  uint uVar2;\n  uint uVar3;\n  undefined8 uVar4;\n  long lVar5;\n  ulong uVar6;\n  long lVar7;\n  ulong local_40 [2];\n  \n  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);\n  uVar4 = FUN_00368eb0(uVar2,param_1);\n  if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }\n  return;\n}" ({ "{") (declaration "long lVar1;" (sized_type_specifier "long" (long "long")) (identifier "lVar1") (; ";")) (declaration "uint uVar2;" (type_identifier "uint") (identifier "uVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "undefined8 uVar4;" (type_identifier "undefined8") (identifier "uVar4") (; ";")) (declaration "long lVar5;" (sized_type_specifier "long" (long "long")) (identifier "lVar5") (; ";")) (declaration "ulong uVar6;" (type_identifier "ulong") (identifier "uVar6") (; ";")) (declaration "long lVar7;" (sized_type_specifier "long" (long "long")) (identifier "lVar7") (; ";")) (declaration "ulong local_40 [2];" (type_identifier "ulong") (array_declarator "local_40 [2]" (identifier "local_40") ([ "[") (number_literal "2") (] "]")) (; ";")) (expression_statement "uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);" (assignment_expression "uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3)" (identifier "uVar2") (= "=") (call_expression "(uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3)" (call_expression "(uint)(byte)" (parenthesized_expression "(uint)" (( "(") (identifier "uint") () ")")) (argument_list "(byte)" (( "(") (identifier "byte") () ")"))) (argument_list "(*(ushort *)(param_1 + 0x20) >> 3)" (( "(") (binary_expression "*(ushort *)(param_1 + 0x20) >> 3" (pointer_expression "*(ushort *)(param_1 + 0x20)" (* "*") (cast_expression "(ushort *)(param_1 + 0x20)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (>> ">>") (number_literal "3")) () ")")))) (; ";")) (expression_statement "uVar4 = FUN_00368eb0(uVar2,param_1);" (assignment_expression "uVar4 = FUN_00368eb0(uVar2,param_1)" (identifier "uVar4") (= "=") (call_expression "FUN_00368eb0(uVar2,param_1)" (identifier "FUN_00368eb0") (argument_list "(uVar2,param_1)" (( "(") (identifier "uVar2") (, ",") (identifier "param_1") () ")")))) (; ";")) (if_statement "if (*param_3 != 0) {\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }" (if "if") (parenthesized_expression "(*param_3 != 0)" (( "(") (binary_expression "*param_3 != 0" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    lVar7 = 0;\n    do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);\n  }" ({ "{") (expression_statement "lVar7 = 0;" (assignment_expression "lVar7 = 0" (identifier "lVar7") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    } while (*param_3 != 0);" (do "do") (compound_statement "{\n      while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }\n      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n    }" ({ "{") (while_statement "while (param_3[1] != 0) {\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }" (while "while") (parenthesized_expression "(param_3[1] != 0)" (( "(") (binary_expression "param_3[1] != 0" (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }\n        if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }\n        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);\n        uVar3 = FUN_00368e50(uVar2 & 0xff);\n        uVar6 = 0xffffffffffffffff;\n        if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }\n        if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }\n        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);\n        if (*param_3 == 0) {\n          return;\n        }\n      }" ({ "{") (if_statement "if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }" (if "if") (parenthesized_expression "(((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7))" (( "(") (binary_expression "((*(byte *)(param_1 + 0x20) & 4) != 0) &&\n           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)" (parenthesized_expression "((*(byte *)(param_1 + 0x20) & 4) != 0)" (( "(") (binary_expression "(*(byte *)(param_1 + 0x20) & 4) != 0" (parenthesized_expression "(*(byte *)(param_1 + 0x20) & 4)" (( "(") (binary_expression "*(byte *)(param_1 + 0x20) & 4" (pointer_expression "*(byte *)(param_1 + 0x20)" (* "*") (cast_expression "(byte *)(param_1 + 0x20)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_1 + 0x20)" (( "(") (binary_expression "param_1 + 0x20" (identifier "param_1") (+ "+") (number_literal "0x20")) () ")")))) (& "&") (number_literal "4")) () ")")) (!= "!=") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)" (( "(") (comma_expression "lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7" (assignment_expression "lVar5 = (long)param_3 + (4 - (long)(int)param_3[1])" (identifier "lVar5") (= "=") (binary_expression "(long)param_3 + (4 - (long)(int)param_3[1])" (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3")) (+ "+") (parenthesized_expression "(4 - (long)(int)param_3[1])" (( "(") (binary_expression "4 - (long)(int)param_3[1]" (number_literal "4") (- "-") (cast_expression "(long)(int)param_3[1]" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (cast_expression "(int)param_3[1]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]"))))) () ")")))) (, ",") (binary_expression "lVar5 != lVar7" (identifier "lVar5") (!= "!=") (identifier "lVar7"))) () ")"))) () ")")) (compound_statement "{\n          uVar2 = FUN_00369120(lVar5);\n          uVar4 = FUN_00368eb0((char)uVar2,param_1);\n          lVar7 = lVar5;\n        }" ({ "{") (expression_statement "uVar2 = FUN_00369120(lVar5);" (assignment_expression "uVar2 = FUN_00369120(lVar5)" (identifier "uVar2") (= "=") (call_expression "FUN_00369120(lVar5)" (identifier "FUN_00369120") (argument_list "(lVar5)" (( "(") (identifier "lVar5") () ")")))) (; ";")) (expression_statement "uVar4 = FUN_00368eb0((char)uVar2,param_1);" (assignment_expression "uVar4 = FUN_00368eb0((char)uVar2,param_1)" (identifier "uVar4") (= "=") (call_expression "FUN_00368eb0((char)uVar2,param_1)" (identifier "FUN_00368eb0") (argument_list "((char)uVar2,param_1)" (( "(") (cast_expression "(char)uVar2" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar2")) (, ",") (identifier "param_1") () ")")))) (; ";")) (expression_statement "lVar7 = lVar5;" (assignment_expression "lVar7 = lVar5" (identifier "lVar7") (= "=") (identifier "lVar5")) (; ";")) (} "}"))) (if_statement "if (uVar2 == 0) {\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }" (if "if") (parenthesized_expression "(uVar2 == 0)" (( "(") (binary_expression "uVar2 == 0" (identifier "uVar2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;\n          break;\n        }" ({ "{") (if_statement "if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;" (if "if") (parenthesized_expression "(*(long *)(param_3 + 2) != 0)" (( "(") (binary_expression "*(long *)(param_3 + 2) != 0" (pointer_expression "*(long *)(param_3 + 2)" (* "*") (cast_expression "(long *)(param_3 + 2)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 2)" (( "(") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) () ")")))) (!= "!=") (number_literal "0")) () ")")) (goto_statement "goto LAB_00369af7;" (goto "goto") (statement_identifier "LAB_00369af7") (; ";"))) (break_statement "break;" (break "break") (; ";")) (} "}"))) (expression_statement "FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);" (call_expression "FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40)" (identifier "FUN_00368f50") (argument_list "(uVar2 & 0xff,uVar4,param_3 + 2,local_40)" (( "(") (binary_expression "uVar2 & 0xff" (identifier "uVar2") (& "&") (number_literal "0xff")) (, ",") (identifier "uVar4") (, ",") (binary_expression "param_3 + 2" (identifier "param_3") (+ "+") (number_literal "2")) (, ",") (identifier "local_40") () ")"))) (; ";")) (expression_statement "uVar3 = FUN_00368e50(uVar2 & 0xff);" (assignment_expression "uVar3 = FUN_00368e50(uVar2 & 0xff)" (identifier "uVar3") (= "=") (call_expression "FUN_00368e50(uVar2 & 0xff)" (identifier "FUN_00368e50") (argument_list "(uVar2 & 0xff)" (( "(") (binary_expression "uVar2 & 0xff" (identifier "uVar2") (& "&") (number_literal "0xff")) () ")")))) (; ";")) (expression_statement "uVar6 = 0xffffffffffffffff;" (assignment_expression "uVar6 = 0xffffffffffffffff" (identifier "uVar6") (= "=") (number_literal "0xffffffffffffffff")) (; ";")) (if_statement "if (uVar3 < 8) {\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }" (if "if") (parenthesized_expression "(uVar3 < 8)" (( "(") (binary_expression "uVar3 < 8" (identifier "uVar3") (< "<") (number_literal "8")) () ")")) (compound_statement "{\n          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;\n        }" ({ "{") (expression_statement "uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;" (assignment_expression "uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1" (identifier "uVar6") (= "=") (binary_expression "(1L << ((char)uVar3 * '\b' & 0x3fU)) - 1" (parenthesized_expression "(1L << ((char)uVar3 * '\b' & 0x3fU))" (( "(") (binary_expression "1L << ((char)uVar3 * '\b' & 0x3fU)" (number_literal "1L") (<< "<<") (parenthesized_expression "((char)uVar3 * '\b' & 0x3fU)" (( "(") (binary_expression "(char)uVar3 * '\b' & 0x3fU" (binary_expression "(char)uVar3 * '\b'" (cast_expression "(char)uVar3" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "uVar3")) (* "*") (char_literal "'\b'" (' "'") (escape_sequence "\b") (' "'"))) (& "&") (number_literal "0x3fU")) () ")"))) () ")")) (- "-") (number_literal "1"))) (; ";")) (} "}"))) (if_statement "if ((local_40[0] & uVar6) != 0) {\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }" (if "if") (parenthesized_expression "((local_40[0] & uVar6) != 0)" (( "(") (binary_expression "(local_40[0] & uVar6) != 0" (parenthesized_expression "(local_40[0] & uVar6)" (( "(") (binary_expression "local_40[0] & uVar6" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (& "&") (identifier "uVar6")) () ")")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\nLAB_00369af7:\n          lVar5 = *param_2;\n          if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }\n          break;\n        }" ({ "{") (labeled_statement "LAB_00369af7:\n          lVar5 = *param_2;" (statement_identifier "LAB_00369af7") (: ":") (expression_statement "lVar5 = *param_2;" (assignment_expression "lVar5 = *param_2" (identifier "lVar5") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";"))) (if_statement "if (lVar5 != 0) {\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }" (if "if") (parenthesized_expression "(lVar5 != 0)" (( "(") (binary_expression "lVar5 != 0" (identifier "lVar5") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n            lVar1 = *(long *)(lVar5 + 8);\n            *(long *)(lVar5 + 8) = lVar1 + 1;\n            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;\n          }" ({ "{") (expression_statement "lVar1 = *(long *)(lVar5 + 8);" (assignment_expression "lVar1 = *(long *)(lVar5 + 8)" (identifier "lVar1") (= "=") (pointer_expression "*(long *)(lVar5 + 8)" (* "*") (cast_expression "(long *)(lVar5 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 8)" (( "(") (binary_expression "lVar5 + 8" (identifier "lVar5") (+ "+") (number_literal "8")) () ")"))))) (; ";")) (expression_statement "*(long *)(lVar5 + 8) = lVar1 + 1;" (assignment_expression "*(long *)(lVar5 + 8) = lVar1 + 1" (pointer_expression "*(long *)(lVar5 + 8)" (* "*") (cast_expression "(long *)(lVar5 + 8)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(lVar5 + 8)" (( "(") (binary_expression "lVar5 + 8" (identifier "lVar5") (+ "+") (number_literal "8")) () ")")))) (= "=") (binary_expression "lVar1 + 1" (identifier "lVar1") (+ "+") (number_literal "1"))) (; ";")) (expression_statement "*(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;" (assignment_expression "*(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3" (pointer_expression "*(uint **)(lVar5 + 0x10 + lVar1 * 8)" (* "*") (cast_expression "(uint **)(lVar5 + 0x10 + lVar1 * 8)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(lVar5 + 0x10 + lVar1 * 8)" (( "(") (binary_expression "lVar5 + 0x10 + lVar1 * 8" (binary_expression "lVar5 + 0x10" (identifier "lVar5") (+ "+") (number_literal "0x10")) (+ "+") (binary_expression "lVar1 * 8" (identifier "lVar1") (* "*") (number_literal "8"))) () ")")))) (= "=") (identifier "param_3")) (; ";")) (} "}"))) (break_statement "break;" (break "break") (; ";")) (} "}"))) (expression_statement "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);" (assignment_expression "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4)" (identifier "param_3") (= "=") (cast_expression "(uint *)((long)param_3 + (ulong)*param_3 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_3 + (ulong)*param_3 + 4)" (( "(") (binary_expression "(long)param_3 + (ulong)*param_3 + 4" (binary_expression "(long)param_3 + (ulong)*param_3" (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3")) (+ "+") (binary_expression "(ulong)*param_3" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (identifier "param_3"))) (+ "+") (number_literal "4")) () ")")))) (; ";")) (if_statement "if (*param_3 == 0) {\n          return;\n        }" (if "if") (parenthesized_expression "(*param_3 == 0)" (( "(") (binary_expression "*param_3 == 0" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          return;\n        }" ({ "{") (return_statement "return;" (return "return") (; ";")) (} "}"))) (} "}"))) (expression_statement "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);" (assignment_expression "param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4)" (identifier "param_3") (= "=") (cast_expression "(uint *)((long)param_3 + (ulong)*param_3 + 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)param_3 + (ulong)*param_3 + 4)" (( "(") (binary_expression "(long)param_3 + (ulong)*param_3 + 4" (binary_expression "(long)param_3 + (ulong)*param_3" (cast_expression "(long)param_3" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "param_3")) (+ "+") (binary_expression "(ulong)*param_3" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (identifier "param_3"))) (+ "+") (number_literal "4")) () ")")))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(*param_3 != 0)" (( "(") (binary_expression "*param_3 != 0" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (!= "!=") (number_literal "0")) () ")")) (; ";")) (} "}"))) (return_statement "return;" (return "return") (; ";")) (} "}")))

void function_1(long var_1,long *param_2,type_1 *var_7)

{
  long var_12;
  type_1 var_6;
  type_1 var_10;
  type_2 uVar4;
  long var_3;
  type_3 var_11;
  long var_4;
  type_3 local_40 [2];
  
  var_6 = (type_1)(type_5)(*(type_4 *)(var_1 + 0x20) >> 3);
  uVar4 = var_2(var_6,var_1);
  if (*var_7 != 0) {
    var_4 = 0;
    do {
      while (var_7[1] != 0) {
        if (((*(type_5 *)(var_1 + 0x20) & 4) != 0) &&
           (var_3 = (long)var_7 + (4 - (long)(int)var_7[1]), var_3 != var_4)) {
          var_6 = var_5(var_3);
          uVar4 = var_2((char)var_6,var_1);
          var_4 = var_3;
        }
        if (var_6 == 0) {
          if (*(long *)(var_7 + 2) != 0) goto LAB_00369af7;
          break;
        }
        var_8(var_6 & 0xff,uVar4,var_7 + 2,local_40);
        var_10 = var_9(var_6 & 0xff);
        var_11 = 0xffffffffffffffff;
        if (var_10 < 8) {
          var_11 = (1L << ((char)var_10 * '\b' & 0x3fU)) - 1;
        }
        if ((local_40[0] & var_11) != 0) {
LAB_00369af7:
          var_3 = *param_2;
          if (var_3 != 0) {
            var_12 = *(long *)(var_3 + 8);
            *(long *)(var_3 + 8) = var_12 + 1;
            *(type_1 **)(var_3 + 0x10 + var_12 * 8) = var_7;
          }
          break;
        }
        var_7 = (type_1 *)((long)var_7 + (type_3)*var_7 + 4);
        if (*var_7 == 0) {
          return;
        }
      }
      var_7 = (type_1 *)((long)var_7 + (type_3)*var_7 + 4);
    } while (*var_7 != 0);
  }
  return;
}


(translation_unit (function_definition type: (primitive_type) declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (sized_type_specifier) declarator: (identifier)) (parameter_declaration type: (sized_type_specifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))))) body: (compound_statement (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (identifier))) arguments: (argument_list (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (do_statement body: (compound_statement (while_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (parenthesized_expression (binary_expression left: (number_literal) right: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (subscript_expression argument: (identifier) index: (number_literal)))))))) right: (binary_expression left: (identifier) right: (identifier)))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (number_literal))) consequence: (goto_statement label: (statement_identifier))) (break_statement))) (expression_statement (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)) (identifier) (binary_expression left: (identifier) right: (number_literal)) (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (binary_expression left: (identifier) right: (number_literal)))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (parenthesized_expression (binary_expression left: (number_literal) right: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (primitive_type)) value: (identifier)) right: (char_literal (escape_sequence))) right: (number_literal))))) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (identifier))) right: (number_literal))) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (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: (binary_expression left: (identifier) right: (number_literal)) right: (binary_expression left: (identifier) right: (number_literal)))))) right: (identifier))))) (break_statement))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier))) right: (number_literal)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (return_statement))))) (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (binary_expression left: (cast_expression type: (type_descriptor type: (sized_type_specifier)) value: (identifier)) right: (binary_expression left: (parenthesized_expression (identifier)) right: (identifier))) right: (number_literal))))))) condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))))) (return_statement))))

void MASKED(long param_1,long *param_2,uint *param_3)

{
  long lVar1;
  uint uVar2;
  uint uVar3;
  undefined8 uVar4;
  long lVar5;
  ulong uVar6;
  long lVar7;
  ulong local_40 [2];
  
  uVar2 = (uint)(byte)(*(ushort *)(param_1 + 0x20) >> 3);
  uVar4 = FUN_00368eb0(uVar2,param_1);
  if (*param_3 != 0) {
    lVar7 = 0;
    do {
      while (param_3[1] != 0) {
        if (((*(byte *)(param_1 + 0x20) & 4) != 0) &&
           (lVar5 = (long)param_3 + (4 - (long)(int)param_3[1]), lVar5 != lVar7)) {
          uVar2 = FUN_00369120(lVar5);
          uVar4 = FUN_00368eb0((char)uVar2,param_1);
          lVar7 = lVar5;
        }
        if (uVar2 == 0) {
          if (*(long *)(param_3 + 2) != 0) goto LAB_00369af7;
          break;
        }
        FUN_00368f50(uVar2 & 0xff,uVar4,param_3 + 2,local_40);
        uVar3 = FUN_00368e50(uVar2 & 0xff);
        uVar6 = 0xffffffffffffffff;
        if (uVar3 < 8) {
          uVar6 = (1L << ((char)uVar3 * '\b' & 0x3fU)) - 1;
        }
        if ((local_40[0] & uVar6) != 0) {
LAB_00369af7:
          lVar5 = *param_2;
          if (lVar5 != 0) {
            lVar1 = *(long *)(lVar5 + 8);
            *(long *)(lVar5 + 8) = lVar1 + 1;
            *(uint **)(lVar5 + 0x10 + lVar1 * 8) = param_3;
          }
          break;
        }
        param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);
        if (*param_3 == 0) {
          return;
        }
      }
      param_3 = (uint *)((long)param_3 + (ulong)*param_3 + 4);
    } while (*param_3 != 0);
  }
  return;
}

