
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 _Unwind_IteratePhdrCallback(ulong *param_1,ulong param_2,ulong *param_3)

{
  int *piVar1;
  char cVar2;
  int iVar3;
  ulong *puVar4;
  bool bVar5;
  int *piVar6;
  undefined1 uVar7;
  byte bVar8;
  uint uVar9;
  ulong *puVar10;
  undefined8 uVar11;
  ulong uVar12;
  undefined8 uVar13;
  int *piVar14;
  undefined8 *puVar15;
  char *pcVar16;
  int *piVar17;
  ulong uVar18;
  ulong uVar19;
  int *piVar20;
  ulong uVar21;
  ulong *puVar22;
  char *pcVar23;
  ulong *local_80;
  undefined8 local_78;
  ulong local_70;
  long local_68;
  ulong local_60;
  ulong local_58;
  undefined8 local_50;
  undefined8 local_48;
  
  puVar10 = frame_hdr_cache_head;
  piVar14 = (int *)param_1[2];
  uVar12 = *param_1;
  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {
    if (param_2 < 0x1a) {
      return 0xffffffff;
    }
  }
  else {
    if ((param_1[4] != adds_9336) || (subs_9337 != param_1[5])) {
      puVar15 = &DAT_0044c030;
      adds_9336 = param_1[4];
      subs_9337 = param_1[5];
      do {
        puVar15[-6] = 0;
        puVar15[-5] = 0;
        puVar15[-1] = puVar15;
        puVar15 = puVar15 + 6;
      } while (puVar15 != &seen_objects);
      puVar22 = (ulong *)0x0;
      _DAT_0044c178 = 0;
      frame_hdr_cache_head = &frame_hdr_cache;
      *(undefined4 *)(param_3 + 5) = 0;
      local_80 = (ulong *)0x0;
      goto LAB_0036942c;
    }
    if (frame_hdr_cache_head != (ulong *)0x0) {
      uVar18 = *frame_hdr_cache_head;
      uVar19 = frame_hdr_cache_head[1];
      local_80 = (ulong *)0x0;
      puVar22 = frame_hdr_cache_head;
      while( true ) {
        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {
          uVar12 = puVar22[2];
          piVar17 = (int *)puVar22[3];
          if (frame_hdr_cache_head != puVar22) {
            frame_hdr_cache_head = puVar22;
            local_80[5] = puVar22[5];
            puVar22[5] = (ulong)puVar10;
          }
          goto LAB_00369508;
        }
        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))
        break;
        uVar18 = *puVar4;
        uVar19 = puVar4[1];
        local_80 = puVar22;
        puVar22 = puVar4;
      }
      goto LAB_0036942c;
    }
  }
  local_80 = (ulong *)0x0;
  puVar22 = (ulong *)0x0;
LAB_0036942c:
  puVar10 = frame_hdr_cache_head;
  if ((ushort)param_1[3] == 0) {
    return 0;
  }
  uVar18 = 0;
  uVar19 = 0;
  bVar5 = false;
  piVar20 = (int *)0x0;
  piVar17 = (int *)0x0;
  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;
  do {
    iVar3 = *piVar14;
    piVar6 = piVar17;
    if (iVar3 == 1) {
      uVar21 = *(long *)(piVar14 + 4) + uVar12;
      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {
        bVar5 = true;
        uVar18 = *(long *)(piVar14 + 10) + uVar21;
        uVar19 = uVar21;
      }
    }
    else {
      piVar6 = piVar14;
      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {
        piVar20 = piVar14;
      }
    }
    piVar17 = piVar6;
    piVar14 = piVar14 + 0xe;
  } while (piVar14 != piVar1);
  if (!bVar5) {
    return 0;
  }
  if (0x2f < param_2) {
    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {
      frame_hdr_cache_head = puVar22;
      local_80[5] = puVar22[5];
      puVar22[5] = (ulong)puVar10;
      puVar10 = puVar22;
    }
    puVar10[2] = uVar12;
    puVar10[3] = (ulong)piVar17;
    puVar10[4] = (ulong)piVar20;
    *puVar10 = uVar19;
    puVar10[1] = uVar18;
  }
LAB_00369508:
  if (piVar17 == (int *)0x0) {
    return 0;
  }
  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);
  if (*pcVar16 != '\x01') {
    return 1;
  }
  cVar2 = pcVar16[1];
  uVar11 = base_from_cb_data(cVar2,param_3);
  uVar11 = read_encoded_value_with_base(cVar2,uVar11,pcVar16 + 4,&local_78);
  cVar2 = pcVar16[2];
  if ((cVar2 == -1) || (pcVar16[3] != ';')) {
    pcVar23 = (char *)*param_3;
  }
  else {
    uVar13 = base_from_cb_data(cVar2,param_3);
    piVar14 = (int *)read_encoded_value_with_base(cVar2,uVar13,uVar11,&local_70);
    if (local_70 == 0) {
      return 1;
    }
    pcVar23 = (char *)*param_3;
    uVar12 = (ulong)((uint)piVar14 & 3);
    if (((ulong)piVar14 & 3) == 0) {
      if (pcVar23 < pcVar16 + *piVar14) {
        return 1;
      }
      uVar18 = local_70 - 1;
      uVar19 = uVar18;
      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {
        do {
          if (uVar19 <= uVar12) {
LAB_003697f5:
                    /* WARNING: Subroutine does not return */
            abort();
          }
          uVar21 = uVar12 + uVar19 >> 1;
          iVar3 = piVar14[uVar21 * 2];
          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {
            if (uVar18 <= uVar12) goto LAB_003697f5;
            uVar21 = uVar12 + uVar18 >> 1;
            iVar3 = piVar14[uVar21 * 2];
            uVar19 = uVar18;
          }
          uVar12 = uVar18 + 1;
        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);
      }
      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];
      bVar8 = get_cie_encoding(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));
      uVar9 = size_of_encoded_value(bVar8);
      read_encoded_value_with_base(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);
      iVar3 = piVar14[uVar18 * 2];
      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {
        param_3[4] = (ulong)pcVar23;
      }
      param_3[3] = (ulong)(pcVar16 + iVar3);
      return 1;
    }
  }
  local_60 = param_3[1];
  local_68 = 0;
  local_48 = 4;
  local_58 = param_3[2];
  local_50 = local_78;
  uVar12 = linear_search_fdes(&local_68,local_78,pcVar23);
  param_3[4] = uVar12;
  if (uVar12 != 0) {
    uVar7 = get_cie_encoding((uVar12 + 4) - (long)*(int *)(uVar12 + 4));
    uVar11 = base_from_cb_data(uVar7,param_3);
    read_encoded_value_with_base(uVar7,uVar11,param_3[4] + 8,&local_70);
    param_3[3] = local_70;
  }
  return 1;
}



/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 FUN_003693f0(ulong *param_1,ulong param_2,ulong *param_3)

{
  int *piVar1;
  char cVar2;
  int iVar3;
  ulong *puVar4;
  bool bVar5;
  int *piVar6;
  undefined1 uVar7;
  byte bVar8;
  uint uVar9;
  ulong *puVar10;
  undefined8 uVar11;
  ulong uVar12;
  undefined8 uVar13;
  int *piVar14;
  undefined8 *puVar15;
  char *pcVar16;
  int *piVar17;
  ulong uVar18;
  ulong uVar19;
  int *piVar20;
  ulong uVar21;
  ulong *puVar22;
  char *pcVar23;
  ulong *local_80;
  undefined8 local_78;
  ulong local_70;
  long local_68;
  ulong local_60;
  ulong local_58;
  undefined8 local_50;
  undefined8 local_48;
  
  puVar10 = DAT_0044bff0;
  piVar14 = (int *)param_1[2];
  uVar12 = *param_1;
  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {
    if (param_2 < 0x1a) {
      return 0xffffffff;
    }
  }
  else {
    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {
      puVar15 = &DAT_0044c030;
      DAT_0043e830 = param_1[4];
      DAT_0044bfe8 = param_1[5];
      do {
        puVar15[-6] = 0;
        puVar15[-5] = 0;
        puVar15[-1] = puVar15;
        puVar15 = puVar15 + 6;
      } while (puVar15 != &DAT_0044c1b0);
      puVar22 = (ulong *)0x0;
      _DAT_0044c178 = 0;
      DAT_0044bff0 = &DAT_0044c000;
      *(undefined4 *)(param_3 + 5) = 0;
      local_80 = (ulong *)0x0;
      goto LAB_0036942c;
    }
    if (DAT_0044bff0 != (ulong *)0x0) {
      uVar18 = *DAT_0044bff0;
      uVar19 = DAT_0044bff0[1];
      local_80 = (ulong *)0x0;
      puVar22 = DAT_0044bff0;
      while( true ) {
        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {
          uVar12 = puVar22[2];
          piVar17 = (int *)puVar22[3];
          if (DAT_0044bff0 != puVar22) {
            DAT_0044bff0 = puVar22;
            local_80[5] = puVar22[5];
            puVar22[5] = (ulong)puVar10;
          }
          goto LAB_00369508;
        }
        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))
        break;
        uVar18 = *puVar4;
        uVar19 = puVar4[1];
        local_80 = puVar22;
        puVar22 = puVar4;
      }
      goto LAB_0036942c;
    }
  }
  local_80 = (ulong *)0x0;
  puVar22 = (ulong *)0x0;
LAB_0036942c:
  puVar10 = DAT_0044bff0;
  if ((ushort)param_1[3] == 0) {
    return 0;
  }
  uVar18 = 0;
  uVar19 = 0;
  bVar5 = false;
  piVar20 = (int *)0x0;
  piVar17 = (int *)0x0;
  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;
  do {
    iVar3 = *piVar14;
    piVar6 = piVar17;
    if (iVar3 == 1) {
      uVar21 = *(long *)(piVar14 + 4) + uVar12;
      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {
        bVar5 = true;
        uVar18 = *(long *)(piVar14 + 10) + uVar21;
        uVar19 = uVar21;
      }
    }
    else {
      piVar6 = piVar14;
      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {
        piVar20 = piVar14;
      }
    }
    piVar17 = piVar6;
    piVar14 = piVar14 + 0xe;
  } while (piVar14 != piVar1);
  if (!bVar5) {
    return 0;
  }
  if (0x2f < param_2) {
    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {
      DAT_0044bff0 = puVar22;
      local_80[5] = puVar22[5];
      puVar22[5] = (ulong)puVar10;
      puVar10 = puVar22;
    }
    puVar10[2] = uVar12;
    puVar10[3] = (ulong)piVar17;
    puVar10[4] = (ulong)piVar20;
    *puVar10 = uVar19;
    puVar10[1] = uVar18;
  }
LAB_00369508:
  if (piVar17 == (int *)0x0) {
    return 0;
  }
  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);
  if (*pcVar16 != '\x01') {
    return 1;
  }
  cVar2 = pcVar16[1];
  uVar11 = FUN_00368f00(cVar2,param_3);
  uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78);
  cVar2 = pcVar16[2];
  if ((cVar2 == -1) || (pcVar16[3] != ';')) {
    pcVar23 = (char *)*param_3;
  }
  else {
    uVar13 = FUN_00368f00(cVar2,param_3);
    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);
    if (local_70 == 0) {
      return 1;
    }
    pcVar23 = (char *)*param_3;
    uVar12 = (ulong)((uint)piVar14 & 3);
    if (((ulong)piVar14 & 3) == 0) {
      if (pcVar23 < pcVar16 + *piVar14) {
        return 1;
      }
      uVar18 = local_70 - 1;
      uVar19 = uVar18;
      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {
        do {
          if (uVar19 <= uVar12) {
LAB_003697f5:
                    /* WARNING: Subroutine does not return */
            abort();
          }
          uVar21 = uVar12 + uVar19 >> 1;
          iVar3 = piVar14[uVar21 * 2];
          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {
            if (uVar18 <= uVar12) goto LAB_003697f5;
            uVar21 = uVar12 + uVar18 >> 1;
            iVar3 = piVar14[uVar21 * 2];
            uVar19 = uVar18;
          }
          uVar12 = uVar18 + 1;
        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);
      }
      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];
      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));
      uVar9 = FUN_00368e50(bVar8);
      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);
      iVar3 = piVar14[uVar18 * 2];
      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {
        param_3[4] = (ulong)pcVar23;
      }
      param_3[3] = (ulong)(pcVar16 + iVar3);
      return 1;
    }
  }
  local_60 = param_3[1];
  local_68 = 0;
  local_48 = 4;
  local_58 = param_3[2];
  local_50 = local_78;
  uVar12 = FUN_00369260(&local_68,local_78,pcVar23);
  param_3[4] = uVar12;
  if (uVar12 != 0) {
    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));
    uVar11 = FUN_00368f00(uVar7,param_3);
    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);
    param_3[3] = local_70;
  }
  return 1;
}


PUSH R15
PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x58
MOV ECX,dword ptr [RDX + 0x28]
MOV RAX,qword ptr [RDI + 0x10]
MOV R10,qword ptr [RDI]
TEST ECX,ECX
JZ 0x00369416
CMP RSI,0x2f
JA 0x00369550
CMP RSI,0x19
JBE 0x00369538
MOV qword ptr [RSP + 0x8],0x0
XOR R12D,R12D
MOVZX ECX,word ptr [RDI + 0x18]
TEST CX,CX
JZ 0x003695f0
LEA RDI,[RCX*0x8]
XOR R13D,R13D
XOR R14D,R14D
XOR EBX,EBX
SUB RDI,RCX
XOR R8D,R8D
XOR EBP,EBP
MOV R15D,0x1
LEA RDI,[RAX + RDI*0x8]
JMP 0x0036947c
CMP ECX,0x6474e550
JZ 0x003695e0
CMP ECX,0x2
CMOVZ R8,RAX
ADD RAX,0x38
CMP RAX,RDI
JZ 0x003694b8
MOV ECX,dword ptr [RAX]
CMP ECX,0x1
JNZ 0x00369460
MOV R9,qword ptr [RAX + 0x10]
MOV RCX,qword ptr [RDX]
ADD R9,R10
CMP RCX,R9
JC 0x00369473
MOV R11,qword ptr [RAX + 0x28]
ADD R11,R9
CMP RCX,R11
CMOVC R13,R11
CMOVC R14,R9
CMOVC RBX,R15
ADD RAX,0x38
CMP RAX,RDI
JNZ 0x0036947c
NOP dword ptr [RAX]
TEST RBX,RBX
JZ 0x003695f0
CMP RSI,0x2f
JBE 0x00369508
MOV RAX,qword ptr [0x0044bff0]
TEST R12,R12
JZ 0x003694f5
MOV RBX,qword ptr [RSP + 0x8]
TEST RBX,RBX
JZ 0x003694f5
MOV RCX,qword ptr [R12 + 0x28]
MOV qword ptr [0x0044bff0],R12
MOV qword ptr [RBX + 0x28],RCX
MOV qword ptr [R12 + 0x28],RAX
MOV RAX,R12
MOV qword ptr [RAX + 0x10],R10
MOV qword ptr [RAX + 0x18],RBP
MOV qword ptr [RAX + 0x20],R8
MOV qword ptr [RAX],R14
MOV qword ptr [RAX + 0x8],R13
TEST RBP,RBP
JZ 0x003695f0
MOV RBX,qword ptr [RBP + 0x10]
ADD RBX,R10
CMP byte ptr [RBX],0x1
JZ 0x00369680
ADD RSP,0x58
MOV EAX,0x1
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
ADD RSP,0x58
MOV EAX,0xffffffff
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RCX,qword ptr [RDI + 0x20]
CMP RCX,qword ptr [0x0043e830]
MOV R8,qword ptr [RDI + 0x28]
JZ 0x00369608
MOV qword ptr [0x0043e830],RCX
LEA RCX,[0x44c030]
MOV qword ptr [0x0044bfe8],R8
LEA R8,[RCX + 0x180]
NOP dword ptr [RAX]
MOV qword ptr [RCX + -0x30],0x0
MOV qword ptr [RCX + -0x28],0x0
MOV qword ptr [RCX + -0x8],RCX
ADD RCX,0x30
CMP R8,RCX
JNZ 0x00369588
LEA RBX,[0x44c000]
XOR R12D,R12D
MOV qword ptr [0x0044c178],0x0
MOV qword ptr [0x0044bff0],RBX
MOV dword ptr [RDX + 0x28],0x0
MOV qword ptr [RSP + 0x8],0x0
JMP 0x0036942c
MOV RBP,RAX
JMP 0x00369473
ADD RSP,0x58
XOR EAX,EAX
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
CMP qword ptr [0x0044bfe8],R8
JNZ 0x00369565
MOV R11,qword ptr [0x0044bff0]
TEST R11,R11
JZ 0x00369420
MOV R12,R11
MOV R9,qword ptr [RDX]
XOR EBX,EBX
MOV RCX,qword ptr [R12]
MOV R8,qword ptr [R12 + 0x8]
CMP R9,RCX
JC 0x00369649
NOP dword ptr [RAX + RAX*0x1]
CMP R9,R8
JC 0x00369878
OR RCX,R8
JZ 0x00369750
MOV RCX,qword ptr [R12 + 0x28]
TEST RCX,RCX
JZ 0x00369750
MOV RBX,R12
MOV R12,RCX
MOV RCX,qword ptr [R12]
MOV R8,qword ptr [R12 + 0x8]
CMP R9,RCX
JC 0x00369649
JMP 0x00369640
MOVZX R12D,byte ptr [RBX + 0x1]
MOV RSI,RDX
MOV RBP,RDX
MOV EDI,R12D
CALL 0x00368f00
MOV EDI,R12D
LEA RCX,[RSP + 0x10]
LEA RDX,[RBX + 0x4]
MOV RSI,RAX
CALL 0x00368f50
MOVZX EDI,byte ptr [RBX + 0x2]
MOV R13,RAX
CMP DIL,0xff
JZ 0x003696be
CMP byte ptr [RBX + 0x3],0x3b
JZ 0x0036975a
MOV RDX,qword ptr [RBP]
MOV RAX,qword ptr [RBP + 0x8]
MOV RSI,qword ptr [RSP + 0x10]
LEA RDI,[RSP + 0x20]
MOV qword ptr [RSP + 0x20],0x0
MOV qword ptr [RSP + 0x40],0x4
MOV qword ptr [RSP + 0x28],RAX
MOV RAX,qword ptr [RBP + 0x10]
MOV qword ptr [RSP + 0x38],RSI
MOV qword ptr [RSP + 0x30],RAX
CALL 0x00369260
MOV qword ptr [RBP + 0x20],RAX
TEST RAX,RAX
JZ 0x00369521
LEA RDI,[RAX + 0x4]
MOVSXD RAX,dword ptr [RAX + 0x4]
SUB RDI,RAX
CALL 0x00369120
MOV RSI,RBP
MOVZX EBX,AL
MOV EDI,EBX
CALL 0x00368f00
MOV RSI,qword ptr [RBP + 0x20]
LEA RCX,[RSP + 0x18]
MOV EDI,EBX
LEA RDX,[RSI + 0x8]
MOV RSI,RAX
CALL 0x00368f50
MOV RAX,qword ptr [RSP + 0x18]
MOV qword ptr [RBP + 0x18],RAX
JMP 0x00369521
MOV qword ptr [RSP + 0x8],RBX
JMP 0x0036942c
MOVZX R12D,DIL
MOV RSI,RBP
MOV EDI,R12D
CALL 0x00368f00
MOV EDI,R12D
LEA RCX,[RSP + 0x18]
MOV RDX,R13
MOV RSI,RAX
CALL 0x00368f50
MOV RDI,qword ptr [RSP + 0x18]
TEST RDI,RDI
JZ 0x00369521
MOV RSI,RAX
MOV RDX,qword ptr [RBP]
AND ESI,0x3
JNZ 0x003696c2
MOVSXD RCX,dword ptr [RAX]
ADD RCX,RBX
CMP RCX,RDX
JA 0x00369521
SUB RDI,0x1
MOVSXD RCX,dword ptr [RAX + RDI*0x8]
ADD RCX,RBX
CMP RCX,RDX
JBE 0x003698a5
CMP RSI,RDI
JNC 0x003697f5
LEA RCX,[RSI + RDI*0x1]
SHR RCX,0x1
MOVSXD R8,dword ptr [RAX + RCX*0x8]
ADD R8,RBX
CMP R8,RDX
JBE 0x00369806
CMP RSI,RCX
JNC 0x003697f5
LEA R8,[RSI + RCX*0x1]
SHR R8,0x1
MOVSXD RDI,dword ptr [RAX + R8*0x8]
ADD RDI,RBX
CMP RDI,RDX
JBE 0x00369800
MOV RCX,R8
CMP RSI,RCX
JC 0x003697da
CALL 0x001471a0
MOV RDI,RCX
MOV RCX,R8
LEA RSI,[RCX + 0x1]
MOVSXD R8,dword ptr [RAX + RSI*0x8]
ADD R8,RBX
CMP R8,RDX
JBE 0x003697bd
LEA R14,[RAX + RCX*0x8]
MOVSXD R12,dword ptr [R14 + 0x4]
ADD R12,RBX
MOVSXD RAX,dword ptr [R12 + 0x4]
LEA RDI,[R12 + 0x4]
SUB RDI,RAX
CALL 0x00369120
MOVZX EDI,AL
MOV R13D,EAX
CALL 0x00368e50
MOV EDI,R13D
LEA RCX,[RSP + 0x20]
XOR ESI,ESI
MOV EAX,EAX
AND EDI,0xf
LEA RDX,[R12 + RAX*0x1 + 0x8]
CALL 0x00368f50
MOVSXD R10,dword ptr [R14]
MOV RAX,qword ptr [RSP + 0x20]
ADD R10,RBX
ADD RAX,R10
CMP qword ptr [RBP],RAX
JNC 0x0036986f
MOV qword ptr [RBP + 0x20],R12
MOV qword ptr [RBP + 0x18],R10
JMP 0x00369521
MOV R10,qword ptr [R12 + 0x10]
MOV RBP,qword ptr [R12 + 0x18]
CMP R11,R12
JZ 0x00369508
MOV RAX,qword ptr [R12 + 0x28]
MOV qword ptr [0x0044bff0],R12
MOV qword ptr [RBX + 0x28],RAX
MOV qword ptr [R12 + 0x28],R11
JMP 0x00369508
MOV RCX,RDI
JMP 0x00369816
(translation_unit "/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */\n\nundefined8 FUN_003693f0(ulong *param_1,ulong param_2,ulong *param_3)\n\n{\n  int *piVar1;\n  char cVar2;\n  int iVar3;\n  ulong *puVar4;\n  bool bVar5;\n  int *piVar6;\n  undefined1 uVar7;\n  byte bVar8;\n  uint uVar9;\n  ulong *puVar10;\n  undefined8 uVar11;\n  ulong uVar12;\n  undefined8 uVar13;\n  int *piVar14;\n  undefined8 *puVar15;\n  char *pcVar16;\n  int *piVar17;\n  ulong uVar18;\n  ulong uVar19;\n  int *piVar20;\n  ulong uVar21;\n  ulong *puVar22;\n  char *pcVar23;\n  ulong *local_80;\n  undefined8 local_78;\n  ulong local_70;\n  long local_68;\n  ulong local_60;\n  ulong local_58;\n  undefined8 local_50;\n  undefined8 local_48;\n  \n  puVar10 = DAT_0044bff0;\n  piVar14 = (int *)param_1[2];\n  uVar12 = *param_1;\n  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }\n  local_80 = (ulong *)0x0;\n  puVar22 = (ulong *)0x0;\nLAB_0036942c:\n  puVar10 = DAT_0044bff0;\n  if ((ushort)param_1[3] == 0) {\n    return 0;\n  }\n  uVar18 = 0;\n  uVar19 = 0;\n  bVar5 = false;\n  piVar20 = (int *)0x0;\n  piVar17 = (int *)0x0;\n  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;\n  do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);\n  if (!bVar5) {\n    return 0;\n  }\n  if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }\nLAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }\n  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);\n  if (*pcVar16 != '\x01') {\n    return 1;\n  }\n  cVar2 = pcVar16[1];\n  uVar11 = FUN_00368f00(cVar2,param_3);\n  uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78);\n  cVar2 = pcVar16[2];\n  if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }\n  local_60 = param_3[1];\n  local_68 = 0;\n  local_48 = 4;\n  local_58 = param_3[2];\n  local_50 = local_78;\n  uVar12 = FUN_00369260(&local_68,local_78,pcVar23);\n  param_3[4] = uVar12;\n  if (uVar12 != 0) {\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }\n  return 1;\n}\n\n" comment (function_definition "undefined8 FUN_003693f0(ulong *param_1,ulong param_2,ulong *param_3)\n\n{\n  int *piVar1;\n  char cVar2;\n  int iVar3;\n  ulong *puVar4;\n  bool bVar5;\n  int *piVar6;\n  undefined1 uVar7;\n  byte bVar8;\n  uint uVar9;\n  ulong *puVar10;\n  undefined8 uVar11;\n  ulong uVar12;\n  undefined8 uVar13;\n  int *piVar14;\n  undefined8 *puVar15;\n  char *pcVar16;\n  int *piVar17;\n  ulong uVar18;\n  ulong uVar19;\n  int *piVar20;\n  ulong uVar21;\n  ulong *puVar22;\n  char *pcVar23;\n  ulong *local_80;\n  undefined8 local_78;\n  ulong local_70;\n  long local_68;\n  ulong local_60;\n  ulong local_58;\n  undefined8 local_50;\n  undefined8 local_48;\n  \n  puVar10 = DAT_0044bff0;\n  piVar14 = (int *)param_1[2];\n  uVar12 = *param_1;\n  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }\n  local_80 = (ulong *)0x0;\n  puVar22 = (ulong *)0x0;\nLAB_0036942c:\n  puVar10 = DAT_0044bff0;\n  if ((ushort)param_1[3] == 0) {\n    return 0;\n  }\n  uVar18 = 0;\n  uVar19 = 0;\n  bVar5 = false;\n  piVar20 = (int *)0x0;\n  piVar17 = (int *)0x0;\n  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;\n  do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);\n  if (!bVar5) {\n    return 0;\n  }\n  if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }\nLAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }\n  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);\n  if (*pcVar16 != '\x01') {\n    return 1;\n  }\n  cVar2 = pcVar16[1];\n  uVar11 = FUN_00368f00(cVar2,param_3);\n  uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78);\n  cVar2 = pcVar16[2];\n  if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }\n  local_60 = param_3[1];\n  local_68 = 0;\n  local_48 = 4;\n  local_58 = param_3[2];\n  local_50 = local_78;\n  uVar12 = FUN_00369260(&local_68,local_78,pcVar23);\n  param_3[4] = uVar12;\n  if (uVar12 != 0) {\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }\n  return 1;\n}" type_identifier (function_declarator "FUN_003693f0(ulong *param_1,ulong param_2,ulong *param_3)" identifier (parameter_list "(ulong *param_1,ulong param_2,ulong *param_3)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) , (parameter_declaration "ulong *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  int *piVar1;\n  char cVar2;\n  int iVar3;\n  ulong *puVar4;\n  bool bVar5;\n  int *piVar6;\n  undefined1 uVar7;\n  byte bVar8;\n  uint uVar9;\n  ulong *puVar10;\n  undefined8 uVar11;\n  ulong uVar12;\n  undefined8 uVar13;\n  int *piVar14;\n  undefined8 *puVar15;\n  char *pcVar16;\n  int *piVar17;\n  ulong uVar18;\n  ulong uVar19;\n  int *piVar20;\n  ulong uVar21;\n  ulong *puVar22;\n  char *pcVar23;\n  ulong *local_80;\n  undefined8 local_78;\n  ulong local_70;\n  long local_68;\n  ulong local_60;\n  ulong local_58;\n  undefined8 local_50;\n  undefined8 local_48;\n  \n  puVar10 = DAT_0044bff0;\n  piVar14 = (int *)param_1[2];\n  uVar12 = *param_1;\n  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }\n  local_80 = (ulong *)0x0;\n  puVar22 = (ulong *)0x0;\nLAB_0036942c:\n  puVar10 = DAT_0044bff0;\n  if ((ushort)param_1[3] == 0) {\n    return 0;\n  }\n  uVar18 = 0;\n  uVar19 = 0;\n  bVar5 = false;\n  piVar20 = (int *)0x0;\n  piVar17 = (int *)0x0;\n  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;\n  do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);\n  if (!bVar5) {\n    return 0;\n  }\n  if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }\nLAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }\n  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);\n  if (*pcVar16 != '\x01') {\n    return 1;\n  }\n  cVar2 = pcVar16[1];\n  uVar11 = FUN_00368f00(cVar2,param_3);\n  uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78);\n  cVar2 = pcVar16[2];\n  if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }\n  local_60 = param_3[1];\n  local_68 = 0;\n  local_48 = 4;\n  local_58 = param_3[2];\n  local_50 = local_78;\n  uVar12 = FUN_00369260(&local_68,local_78,pcVar23);\n  param_3[4] = uVar12;\n  if (uVar12 != 0) {\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }\n  return 1;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "ulong *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "undefined1 uVar7;" type_identifier identifier ;) (declaration "byte bVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "ulong *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "undefined8 uVar11;" type_identifier identifier ;) (declaration "ulong uVar12;" type_identifier identifier ;) (declaration "undefined8 uVar13;" type_identifier identifier ;) (declaration "int *piVar14;" primitive_type (pointer_declarator "*piVar14" * identifier) ;) (declaration "undefined8 *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "char *pcVar16;" primitive_type (pointer_declarator "*pcVar16" * identifier) ;) (declaration "int *piVar17;" primitive_type (pointer_declarator "*piVar17" * identifier) ;) (declaration "ulong uVar18;" type_identifier identifier ;) (declaration "ulong uVar19;" type_identifier identifier ;) (declaration "int *piVar20;" primitive_type (pointer_declarator "*piVar20" * identifier) ;) (declaration "ulong uVar21;" type_identifier identifier ;) (declaration "ulong *puVar22;" type_identifier (pointer_declarator "*puVar22" * identifier) ;) (declaration "char *pcVar23;" primitive_type (pointer_declarator "*pcVar23" * identifier) ;) (declaration "ulong *local_80;" type_identifier (pointer_declarator "*local_80" * identifier) ;) (declaration "undefined8 local_78;" type_identifier identifier ;) (declaration "ulong local_70;" type_identifier identifier ;) (declaration "long local_68;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_60;" type_identifier identifier ;) (declaration "ulong local_58;" type_identifier identifier ;) (declaration "undefined8 local_50;" type_identifier identifier ;) (declaration "undefined8 local_48;" type_identifier identifier ;) (expression_statement "puVar10 = DAT_0044bff0;" (assignment_expression "puVar10 = DAT_0044bff0" identifier = identifier) ;) (expression_statement "piVar14 = (int *)param_1[2];" (assignment_expression "piVar14 = (int *)param_1[2]" identifier = (cast_expression "(int *)param_1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) ;) (expression_statement "uVar12 = *param_1;" (assignment_expression "uVar12 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }" if (parenthesized_expression "(((int)param_3[5] == 0) || (param_2 < 0x30))" ( (binary_expression "((int)param_3[5] == 0) || (param_2 < 0x30)" (parenthesized_expression "((int)param_3[5] == 0)" ( (binary_expression "(int)param_3[5] == 0" (cast_expression "(int)param_3[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_3[5]" identifier [ number_literal ])) == number_literal) )) || (parenthesized_expression "(param_2 < 0x30)" ( (binary_expression "param_2 < 0x30" identifier < number_literal) ))) )) (compound_statement "{\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }" { (if_statement "if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(param_2 < 0x1a)" ( (binary_expression "param_2 < 0x1a" identifier < number_literal) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) }) (else_clause "else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }" else (compound_statement "{\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }" { (if_statement "if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }" if (parenthesized_expression "((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5]))" ( (binary_expression "(param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])" (parenthesized_expression "(param_1[4] != DAT_0043e830)" ( (binary_expression "param_1[4] != DAT_0043e830" (subscript_expression "param_1[4]" identifier [ number_literal ]) != identifier) )) || (parenthesized_expression "(DAT_0044bfe8 != param_1[5])" ( (binary_expression "DAT_0044bfe8 != param_1[5]" identifier != (subscript_expression "param_1[5]" identifier [ number_literal ])) ))) )) (compound_statement "{\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }" { (expression_statement "puVar15 = &DAT_0044c030;" (assignment_expression "puVar15 = &DAT_0044c030" identifier = (pointer_expression "&DAT_0044c030" & identifier)) ;) (expression_statement "DAT_0043e830 = param_1[4];" (assignment_expression "DAT_0043e830 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "DAT_0044bfe8 = param_1[5];" (assignment_expression "DAT_0044bfe8 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (do_statement "do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);" do (compound_statement "{\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      }" { (expression_statement "puVar15[-6] = 0;" (assignment_expression "puVar15[-6] = 0" (subscript_expression "puVar15[-6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar15[-5] = 0;" (assignment_expression "puVar15[-5] = 0" (subscript_expression "puVar15[-5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar15[-1] = puVar15;" (assignment_expression "puVar15[-1] = puVar15" (subscript_expression "puVar15[-1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar15 = puVar15 + 6;" (assignment_expression "puVar15 = puVar15 + 6" identifier = (binary_expression "puVar15 + 6" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar15 != &DAT_0044c1b0)" ( (binary_expression "puVar15 != &DAT_0044c1b0" identifier != (pointer_expression "&DAT_0044c1b0" & identifier)) )) ;) (expression_statement "puVar22 = (ulong *)0x0;" (assignment_expression "puVar22 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "_DAT_0044c178 = 0;" (assignment_expression "_DAT_0044c178 = 0" identifier = number_literal) ;) (expression_statement "DAT_0044bff0 = &DAT_0044c000;" (assignment_expression "DAT_0044bff0 = &DAT_0044c000" identifier = (pointer_expression "&DAT_0044c000" & identifier)) ;) (expression_statement "*(undefined4 *)(param_3 + 5) = 0;" (assignment_expression "*(undefined4 *)(param_3 + 5) = 0" (pointer_expression "*(undefined4 *)(param_3 + 5)" * (cast_expression "(undefined4 *)(param_3 + 5)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 5)" ( (binary_expression "param_3 + 5" identifier + number_literal) )))) = number_literal) ;) (expression_statement "local_80 = (ulong *)0x0;" (assignment_expression "local_80 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_0036942c;" goto statement_identifier ;) })) (if_statement "if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }" if (parenthesized_expression "(DAT_0044bff0 != (ulong *)0x0)" ( (binary_expression "DAT_0044bff0 != (ulong *)0x0" identifier != (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }" { (expression_statement "uVar18 = *DAT_0044bff0;" (assignment_expression "uVar18 = *DAT_0044bff0" identifier = (pointer_expression "*DAT_0044bff0" * identifier)) ;) (expression_statement "uVar19 = DAT_0044bff0[1];" (assignment_expression "uVar19 = DAT_0044bff0[1]" identifier = (subscript_expression "DAT_0044bff0[1]" identifier [ number_literal ])) ;) (expression_statement "local_80 = (ulong *)0x0;" (assignment_expression "local_80 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "puVar22 = DAT_0044bff0;" (assignment_expression "puVar22 = DAT_0044bff0" identifier = identifier) ;) (while_statement "while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }" { (if_statement "if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }" if (parenthesized_expression "((uVar18 <= *param_3) && (*param_3 < uVar19))" ( (binary_expression "(uVar18 <= *param_3) && (*param_3 < uVar19)" (parenthesized_expression "(uVar18 <= *param_3)" ( (binary_expression "uVar18 <= *param_3" identifier <= (pointer_expression "*param_3" * identifier)) )) && (parenthesized_expression "(*param_3 < uVar19)" ( (binary_expression "*param_3 < uVar19" (pointer_expression "*param_3" * identifier) < identifier) ))) )) (compound_statement "{\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }" { (expression_statement "uVar12 = puVar22[2];" (assignment_expression "uVar12 = puVar22[2]" identifier = (subscript_expression "puVar22[2]" identifier [ number_literal ])) ;) (expression_statement "piVar17 = (int *)puVar22[3];" (assignment_expression "piVar17 = (int *)puVar22[3]" identifier = (cast_expression "(int *)puVar22[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar22[3]" identifier [ number_literal ]))) ;) (if_statement "if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }" if (parenthesized_expression "(DAT_0044bff0 != puVar22)" ( (binary_expression "DAT_0044bff0 != puVar22" identifier != identifier) )) (compound_statement "{\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }" { (expression_statement "DAT_0044bff0 = puVar22;" (assignment_expression "DAT_0044bff0 = puVar22" identifier = identifier) ;) (expression_statement "local_80[5] = puVar22[5];" (assignment_expression "local_80[5] = puVar22[5]" (subscript_expression "local_80[5]" identifier [ number_literal ]) = (subscript_expression "puVar22[5]" identifier [ number_literal ])) ;) (expression_statement "puVar22[5] = (ulong)puVar10;" (assignment_expression "puVar22[5] = (ulong)puVar10" (subscript_expression "puVar22[5]" identifier [ number_literal ]) = (cast_expression "(ulong)puVar10" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) })) (goto_statement "goto LAB_00369508;" goto statement_identifier ;) })) (if_statement "if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;" if (parenthesized_expression "((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))" ( (binary_expression "(uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0)" (parenthesized_expression "(uVar18 == 0 && uVar19 == 0)" ( (binary_expression "uVar18 == 0 && uVar19 == 0" (binary_expression "uVar18 == 0" identifier == number_literal) && (binary_expression "uVar19 == 0" identifier == number_literal)) )) || (parenthesized_expression "(puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0)" ( (comma_expression "puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0" (assignment_expression "puVar4 = (ulong *)puVar22[5]" identifier = (cast_expression "(ulong *)puVar22[5]" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar22[5]" identifier [ number_literal ]))) , (binary_expression "puVar4 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (break_statement "break;" break ;)) (expression_statement "uVar18 = *puVar4;" (assignment_expression "uVar18 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "uVar19 = puVar4[1];" (assignment_expression "uVar19 = puVar4[1]" identifier = (subscript_expression "puVar4[1]" identifier [ number_literal ])) ;) (expression_statement "local_80 = puVar22;" (assignment_expression "local_80 = puVar22" identifier = identifier) ;) (expression_statement "puVar22 = puVar4;" (assignment_expression "puVar22 = puVar4" identifier = identifier) ;) })) (goto_statement "goto LAB_0036942c;" goto statement_identifier ;) })) }))) (expression_statement "local_80 = (ulong *)0x0;" (assignment_expression "local_80 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "puVar22 = (ulong *)0x0;" (assignment_expression "puVar22 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (labeled_statement "LAB_0036942c:\n  puVar10 = DAT_0044bff0;" statement_identifier : (expression_statement "puVar10 = DAT_0044bff0;" (assignment_expression "puVar10 = DAT_0044bff0" identifier = identifier) ;)) (if_statement "if ((ushort)param_1[3] == 0) {\n    return 0;\n  }" if (parenthesized_expression "((ushort)param_1[3] == 0)" ( (binary_expression "(ushort)param_1[3] == 0" (cast_expression "(ushort)param_1[3]" ( (type_descriptor "ushort" type_identifier) ) (subscript_expression "param_1[3]" identifier [ number_literal ])) == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar18 = 0;" (assignment_expression "uVar18 = 0" identifier = number_literal) ;) (expression_statement "uVar19 = 0;" (assignment_expression "uVar19 = 0" identifier = number_literal) ;) (expression_statement "bVar5 = false;" (assignment_expression "bVar5 = false" identifier = false) ;) (expression_statement "piVar20 = (int *)0x0;" (assignment_expression "piVar20 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "piVar17 = (int *)0x0;" (assignment_expression "piVar17 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;" (assignment_expression "piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe" identifier = (binary_expression "piVar14 + (ulong)(ushort)param_1[3] * 0xe" identifier + (binary_expression "(ulong)(ushort)param_1[3] * 0xe" (cast_expression "(ulong)(ushort)param_1[3]" ( (type_descriptor "ulong" type_identifier) ) (cast_expression "(ushort)param_1[3]" ( (type_descriptor "ushort" type_identifier) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) * number_literal))) ;) (do_statement "do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);" do (compound_statement "{\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  }" { (expression_statement "iVar3 = *piVar14;" (assignment_expression "iVar3 = *piVar14" identifier = (pointer_expression "*piVar14" * identifier)) ;) (expression_statement "piVar6 = piVar17;" (assignment_expression "piVar6 = piVar17" identifier = identifier) ;) (if_statement "if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }" if (parenthesized_expression "(iVar3 == 1)" ( (binary_expression "iVar3 == 1" identifier == number_literal) )) (compound_statement "{\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }" { (expression_statement "uVar21 = *(long *)(piVar14 + 4) + uVar12;" (assignment_expression "uVar21 = *(long *)(piVar14 + 4) + uVar12" identifier = (binary_expression "*(long *)(piVar14 + 4) + uVar12" (pointer_expression "*(long *)(piVar14 + 4)" * (cast_expression "(long *)(piVar14 + 4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar14 + 4)" ( (binary_expression "piVar14 + 4" identifier + number_literal) )))) + identifier)) ;) (if_statement "if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }" if (parenthesized_expression "((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21))" ( (binary_expression "(uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)" (parenthesized_expression "(uVar21 <= *param_3)" ( (binary_expression "uVar21 <= *param_3" identifier <= (pointer_expression "*param_3" * identifier)) )) && (parenthesized_expression "(*param_3 < *(long *)(piVar14 + 10) + uVar21)" ( (binary_expression "*param_3 < *(long *)(piVar14 + 10) + uVar21" (pointer_expression "*param_3" * identifier) < (binary_expression "*(long *)(piVar14 + 10) + uVar21" (pointer_expression "*(long *)(piVar14 + 10)" * (cast_expression "(long *)(piVar14 + 10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar14 + 10)" ( (binary_expression "piVar14 + 10" identifier + number_literal) )))) + identifier)) ))) )) (compound_statement "{\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }" { (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" identifier = true) ;) (expression_statement "uVar18 = *(long *)(piVar14 + 10) + uVar21;" (assignment_expression "uVar18 = *(long *)(piVar14 + 10) + uVar21" identifier = (binary_expression "*(long *)(piVar14 + 10) + uVar21" (pointer_expression "*(long *)(piVar14 + 10)" * (cast_expression "(long *)(piVar14 + 10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar14 + 10)" ( (binary_expression "piVar14 + 10" identifier + number_literal) )))) + identifier)) ;) (expression_statement "uVar19 = uVar21;" (assignment_expression "uVar19 = uVar21" identifier = identifier) ;) })) }) (else_clause "else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }" else (compound_statement "{\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }" { (expression_statement "piVar6 = piVar14;" (assignment_expression "piVar6 = piVar14" identifier = identifier) ;) (if_statement "if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }" if (parenthesized_expression "((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2))" ( (binary_expression "(iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)" (parenthesized_expression "(iVar3 != 0x6474e550)" ( (binary_expression "iVar3 != 0x6474e550" identifier != number_literal) )) && (parenthesized_expression "(piVar6 = piVar17, iVar3 == 2)" ( (comma_expression "piVar6 = piVar17, iVar3 == 2" (assignment_expression "piVar6 = piVar17" identifier = identifier) , (binary_expression "iVar3 == 2" identifier == number_literal)) ))) )) (compound_statement "{\n        piVar20 = piVar14;\n      }" { (expression_statement "piVar20 = piVar14;" (assignment_expression "piVar20 = piVar14" identifier = identifier) ;) })) }))) (expression_statement "piVar17 = piVar6;" (assignment_expression "piVar17 = piVar6" identifier = identifier) ;) (expression_statement "piVar14 = piVar14 + 0xe;" (assignment_expression "piVar14 = piVar14 + 0xe" identifier = (binary_expression "piVar14 + 0xe" identifier + number_literal)) ;) }) while (parenthesized_expression "(piVar14 != piVar1)" ( (binary_expression "piVar14 != piVar1" identifier != identifier) )) ;) (if_statement "if (!bVar5) {\n    return 0;\n  }" if (parenthesized_expression "(!bVar5)" ( (unary_expression "!bVar5" ! identifier) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }" if (parenthesized_expression "(0x2f < param_2)" ( (binary_expression "0x2f < param_2" number_literal < identifier) )) (compound_statement "{\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }" { (if_statement "if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }" if (parenthesized_expression "((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0))" ( (binary_expression "(puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)" (parenthesized_expression "(puVar22 != (ulong *)0x0)" ( (binary_expression "puVar22 != (ulong *)0x0" identifier != (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(local_80 != (ulong *)0x0)" ( (binary_expression "local_80 != (ulong *)0x0" identifier != (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }" { (expression_statement "DAT_0044bff0 = puVar22;" (assignment_expression "DAT_0044bff0 = puVar22" identifier = identifier) ;) (expression_statement "local_80[5] = puVar22[5];" (assignment_expression "local_80[5] = puVar22[5]" (subscript_expression "local_80[5]" identifier [ number_literal ]) = (subscript_expression "puVar22[5]" identifier [ number_literal ])) ;) (expression_statement "puVar22[5] = (ulong)puVar10;" (assignment_expression "puVar22[5] = (ulong)puVar10" (subscript_expression "puVar22[5]" identifier [ number_literal ]) = (cast_expression "(ulong)puVar10" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "puVar10 = puVar22;" (assignment_expression "puVar10 = puVar22" identifier = identifier) ;) })) (expression_statement "puVar10[2] = uVar12;" (assignment_expression "puVar10[2] = uVar12" (subscript_expression "puVar10[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar10[3] = (ulong)piVar17;" (assignment_expression "puVar10[3] = (ulong)piVar17" (subscript_expression "puVar10[3]" identifier [ number_literal ]) = (cast_expression "(ulong)piVar17" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "puVar10[4] = (ulong)piVar20;" (assignment_expression "puVar10[4] = (ulong)piVar20" (subscript_expression "puVar10[4]" identifier [ number_literal ]) = (cast_expression "(ulong)piVar20" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "*puVar10 = uVar19;" (assignment_expression "*puVar10 = uVar19" (pointer_expression "*puVar10" * identifier) = identifier) ;) (expression_statement "puVar10[1] = uVar18;" (assignment_expression "puVar10[1] = uVar18" (subscript_expression "puVar10[1]" identifier [ number_literal ]) = identifier) ;) })) (labeled_statement "LAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }" statement_identifier : (if_statement "if (piVar17 == (int *)0x0) {\n    return 0;\n  }" if (parenthesized_expression "(piVar17 == (int *)0x0)" ( (binary_expression "piVar17 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) }))) (expression_statement "pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);" (assignment_expression "pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12)" identifier = (cast_expression "(char *)(*(long *)(piVar17 + 4) + uVar12)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(piVar17 + 4) + uVar12)" ( (binary_expression "*(long *)(piVar17 + 4) + uVar12" (pointer_expression "*(long *)(piVar17 + 4)" * (cast_expression "(long *)(piVar17 + 4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar17 + 4)" ( (binary_expression "piVar17 + 4" identifier + number_literal) )))) + identifier) )))) ;) (if_statement "if (*pcVar16 != '\x01') {\n    return 1;\n  }" if (parenthesized_expression "(*pcVar16 != '\x01')" ( (binary_expression "*pcVar16 != '\x01'" (pointer_expression "*pcVar16" * identifier) != (char_literal "'\x01'" ' escape_sequence ')) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "cVar2 = pcVar16[1];" (assignment_expression "cVar2 = pcVar16[1]" identifier = (subscript_expression "pcVar16[1]" identifier [ number_literal ])) ;) (expression_statement "uVar11 = FUN_00368f00(cVar2,param_3);" (assignment_expression "uVar11 = FUN_00368f00(cVar2,param_3)" identifier = (call_expression "FUN_00368f00(cVar2,param_3)" identifier (argument_list "(cVar2,param_3)" ( identifier , identifier )))) ;) (expression_statement "uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78);" (assignment_expression "uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78)" identifier = (call_expression "FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78)" identifier (argument_list "(cVar2,uVar11,pcVar16 + 4,&local_78)" ( identifier , identifier , (binary_expression "pcVar16 + 4" identifier + number_literal) , (pointer_expression "&local_78" & identifier) )))) ;) (expression_statement "cVar2 = pcVar16[2];" (assignment_expression "cVar2 = pcVar16[2]" identifier = (subscript_expression "pcVar16[2]" identifier [ number_literal ])) ;) (if_statement "if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }" if (parenthesized_expression "((cVar2 == -1) || (pcVar16[3] != ';'))" ( (binary_expression "(cVar2 == -1) || (pcVar16[3] != ';')" (parenthesized_expression "(cVar2 == -1)" ( (binary_expression "cVar2 == -1" identifier == number_literal) )) || (parenthesized_expression "(pcVar16[3] != ';')" ( (binary_expression "pcVar16[3] != ';'" (subscript_expression "pcVar16[3]" identifier [ number_literal ]) != (char_literal "';'" ' character ')) ))) )) (compound_statement "{\n    pcVar23 = (char *)*param_3;\n  }" { (expression_statement "pcVar23 = (char *)*param_3;" (assignment_expression "pcVar23 = (char *)*param_3" identifier = (cast_expression "(char *)*param_3" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_3" * identifier))) ;) }) (else_clause "else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }" else (compound_statement "{\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }" { (expression_statement "uVar13 = FUN_00368f00(cVar2,param_3);" (assignment_expression "uVar13 = FUN_00368f00(cVar2,param_3)" identifier = (call_expression "FUN_00368f00(cVar2,param_3)" identifier (argument_list "(cVar2,param_3)" ( identifier , identifier )))) ;) (expression_statement "piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);" (assignment_expression "piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70)" identifier = (cast_expression "(int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00368f50(cVar2,uVar13,uVar11,&local_70)" identifier (argument_list "(cVar2,uVar13,uVar11,&local_70)" ( identifier , identifier , identifier , (pointer_expression "&local_70" & identifier) ))))) ;) (if_statement "if (local_70 == 0) {\n      return 1;\n    }" if (parenthesized_expression "(local_70 == 0)" ( (binary_expression "local_70 == 0" identifier == number_literal) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "pcVar23 = (char *)*param_3;" (assignment_expression "pcVar23 = (char *)*param_3" identifier = (cast_expression "(char *)*param_3" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_3" * identifier))) ;) (expression_statement "uVar12 = (ulong)((uint)piVar14 & 3);" (assignment_expression "uVar12 = (ulong)((uint)piVar14 & 3)" identifier = (call_expression "(ulong)((uint)piVar14 & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)piVar14 & 3)" ( (binary_expression "(uint)piVar14 & 3" (cast_expression "(uint)piVar14" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) ;) (if_statement "if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }" if (parenthesized_expression "(((ulong)piVar14 & 3) == 0)" ( (binary_expression "((ulong)piVar14 & 3) == 0" (parenthesized_expression "((ulong)piVar14 & 3)" ( (binary_expression "(ulong)piVar14 & 3" (cast_expression "(ulong)piVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }" { (if_statement "if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }" if (parenthesized_expression "(pcVar23 < pcVar16 + *piVar14)" ( (binary_expression "pcVar23 < pcVar16 + *piVar14" identifier < (binary_expression "pcVar16 + *piVar14" identifier + (pointer_expression "*piVar14" * identifier))) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar18 = local_70 - 1;" (assignment_expression "uVar18 = local_70 - 1" identifier = (binary_expression "local_70 - 1" identifier - number_literal)) ;) (expression_statement "uVar19 = uVar18;" (assignment_expression "uVar19 = uVar18" identifier = identifier) ;) (if_statement "if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }" if (parenthesized_expression "(pcVar23 < pcVar16 + piVar14[uVar18 * 2])" ( (binary_expression "pcVar23 < pcVar16 + piVar14[uVar18 * 2]" identifier < (binary_expression "pcVar16 + piVar14[uVar18 * 2]" identifier + (subscript_expression "piVar14[uVar18 * 2]" identifier [ (binary_expression "uVar18 * 2" identifier * number_literal) ]))) )) (compound_statement "{\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }" { (do_statement "do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);" do (compound_statement "{\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        }" { (if_statement "if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }" if (parenthesized_expression "(uVar19 <= uVar12)" ( (binary_expression "uVar19 <= uVar12" identifier <= identifier) )) (compound_statement "{\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }" { (labeled_statement "LAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();" statement_identifier : comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;)) })) (expression_statement "uVar21 = uVar12 + uVar19 >> 1;" (assignment_expression "uVar21 = uVar12 + uVar19 >> 1" identifier = (binary_expression "uVar12 + uVar19 >> 1" (binary_expression "uVar12 + uVar19" identifier + identifier) >> number_literal)) ;) (expression_statement "iVar3 = piVar14[uVar21 * 2];" (assignment_expression "iVar3 = piVar14[uVar21 * 2]" identifier = (subscript_expression "piVar14[uVar21 * 2]" identifier [ (binary_expression "uVar21 * 2" identifier * number_literal) ])) ;) (while_statement "while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }" while (parenthesized_expression "(uVar18 = uVar21, pcVar23 < pcVar16 + iVar3)" ( (comma_expression "uVar18 = uVar21, pcVar23 < pcVar16 + iVar3" (assignment_expression "uVar18 = uVar21" identifier = identifier) , (binary_expression "pcVar23 < pcVar16 + iVar3" identifier < (binary_expression "pcVar16 + iVar3" identifier + identifier))) )) (compound_statement "{\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }" { (if_statement "if (uVar18 <= uVar12) goto LAB_003697f5;" if (parenthesized_expression "(uVar18 <= uVar12)" ( (binary_expression "uVar18 <= uVar12" identifier <= identifier) )) (goto_statement "goto LAB_003697f5;" goto statement_identifier ;)) (expression_statement "uVar21 = uVar12 + uVar18 >> 1;" (assignment_expression "uVar21 = uVar12 + uVar18 >> 1" identifier = (binary_expression "uVar12 + uVar18 >> 1" (binary_expression "uVar12 + uVar18" identifier + identifier) >> number_literal)) ;) (expression_statement "iVar3 = piVar14[uVar21 * 2];" (assignment_expression "iVar3 = piVar14[uVar21 * 2]" identifier = (subscript_expression "piVar14[uVar21 * 2]" identifier [ (binary_expression "uVar21 * 2" identifier * number_literal) ])) ;) (expression_statement "uVar19 = uVar18;" (assignment_expression "uVar19 = uVar18" identifier = identifier) ;) })) (expression_statement "uVar12 = uVar18 + 1;" (assignment_expression "uVar12 = uVar18 + 1" identifier = (binary_expression "uVar18 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pcVar16 + piVar14[uVar12 * 2] <= pcVar23)" ( (binary_expression "pcVar16 + piVar14[uVar12 * 2] <= pcVar23" (binary_expression "pcVar16 + piVar14[uVar12 * 2]" identifier + (subscript_expression "piVar14[uVar12 * 2]" identifier [ (binary_expression "uVar12 * 2" identifier * number_literal) ])) <= identifier) )) ;) })) (expression_statement "pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];" (assignment_expression "pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1]" identifier = (binary_expression "pcVar16 + (piVar14 + uVar18 * 2)[1]" identifier + (subscript_expression "(piVar14 + uVar18 * 2)[1]" (parenthesized_expression "(piVar14 + uVar18 * 2)" ( (binary_expression "piVar14 + uVar18 * 2" identifier + (binary_expression "uVar18 * 2" identifier * number_literal)) )) [ number_literal ]))) ;) (expression_statement "bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));" (assignment_expression "bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)))" identifier = (call_expression "FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)))" identifier (argument_list "(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)))" ( (binary_expression "pcVar23 + (4 - (long)*(int *)(pcVar23 + 4))" identifier + (parenthesized_expression "(4 - (long)*(int *)(pcVar23 + 4))" ( (binary_expression "4 - (long)*(int *)(pcVar23 + 4)" number_literal - (cast_expression "(long)*(int *)(pcVar23 + 4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(pcVar23 + 4)" * (cast_expression "(int *)(pcVar23 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar23 + 4)" ( (binary_expression "pcVar23 + 4" identifier + number_literal) )))))) ))) )))) ;) (expression_statement "uVar9 = FUN_00368e50(bVar8);" (assignment_expression "uVar9 = FUN_00368e50(bVar8)" identifier = (call_expression "FUN_00368e50(bVar8)" identifier (argument_list "(bVar8)" ( identifier )))) ;) (expression_statement "FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);" (call_expression "FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68)" identifier (argument_list "(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68)" ( (binary_expression "bVar8 & 0xf" identifier & number_literal) , number_literal , (binary_expression "pcVar23 + (ulong)uVar9 + 8" (binary_expression "pcVar23 + (ulong)uVar9" identifier + (cast_expression "(ulong)uVar9" ( (type_descriptor "ulong" type_identifier) ) identifier)) + number_literal) , (pointer_expression "&local_68" & identifier) ))) ;) (expression_statement "iVar3 = piVar14[uVar18 * 2];" (assignment_expression "iVar3 = piVar14[uVar18 * 2]" identifier = (subscript_expression "piVar14[uVar18 * 2]" identifier [ (binary_expression "uVar18 * 2" identifier * number_literal) ])) ;) (if_statement "if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }" if (parenthesized_expression "((char *)*param_3 < pcVar16 + iVar3 + local_68)" ( (binary_expression "(char *)*param_3 < pcVar16 + iVar3 + local_68" (cast_expression "(char *)*param_3" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_3" * identifier)) < (binary_expression "pcVar16 + iVar3 + local_68" (binary_expression "pcVar16 + iVar3" identifier + identifier) + identifier)) )) (compound_statement "{\n        param_3[4] = (ulong)pcVar23;\n      }" { (expression_statement "param_3[4] = (ulong)pcVar23;" (assignment_expression "param_3[4] = (ulong)pcVar23" (subscript_expression "param_3[4]" identifier [ number_literal ]) = (cast_expression "(ulong)pcVar23" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) })) (expression_statement "param_3[3] = (ulong)(pcVar16 + iVar3);" (assignment_expression "param_3[3] = (ulong)(pcVar16 + iVar3)" (subscript_expression "param_3[3]" identifier [ number_literal ]) = (call_expression "(ulong)(pcVar16 + iVar3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(pcVar16 + iVar3)" ( (binary_expression "pcVar16 + iVar3" identifier + identifier) )))) ;) (return_statement "return 1;" return number_literal ;) })) }))) (expression_statement "local_60 = param_3[1];" (assignment_expression "local_60 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (expression_statement "local_68 = 0;" (assignment_expression "local_68 = 0" identifier = number_literal) ;) (expression_statement "local_48 = 4;" (assignment_expression "local_48 = 4" identifier = number_literal) ;) (expression_statement "local_58 = param_3[2];" (assignment_expression "local_58 = param_3[2]" identifier = (subscript_expression "param_3[2]" identifier [ number_literal ])) ;) (expression_statement "local_50 = local_78;" (assignment_expression "local_50 = local_78" identifier = identifier) ;) (expression_statement "uVar12 = FUN_00369260(&local_68,local_78,pcVar23);" (assignment_expression "uVar12 = FUN_00369260(&local_68,local_78,pcVar23)" identifier = (call_expression "FUN_00369260(&local_68,local_78,pcVar23)" identifier (argument_list "(&local_68,local_78,pcVar23)" ( (pointer_expression "&local_68" & identifier) , identifier , identifier )))) ;) (expression_statement "param_3[4] = uVar12;" (assignment_expression "param_3[4] = uVar12" (subscript_expression "param_3[4]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar12 != 0) {\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }" if (parenthesized_expression "(uVar12 != 0)" ( (binary_expression "uVar12 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }" { (expression_statement "uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));" (assignment_expression "uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4))" identifier = (call_expression "FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4))" identifier (argument_list "((uVar12 + 4) - (long)*(int *)(uVar12 + 4))" ( (binary_expression "(uVar12 + 4) - (long)*(int *)(uVar12 + 4)" (parenthesized_expression "(uVar12 + 4)" ( (binary_expression "uVar12 + 4" identifier + number_literal) )) - (cast_expression "(long)*(int *)(uVar12 + 4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(uVar12 + 4)" * (cast_expression "(int *)(uVar12 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar12 + 4)" ( (binary_expression "uVar12 + 4" identifier + number_literal) )))))) )))) ;) (expression_statement "uVar11 = FUN_00368f00(uVar7,param_3);" (assignment_expression "uVar11 = FUN_00368f00(uVar7,param_3)" identifier = (call_expression "FUN_00368f00(uVar7,param_3)" identifier (argument_list "(uVar7,param_3)" ( identifier , identifier )))) ;) (expression_statement "FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);" (call_expression "FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70)" identifier (argument_list "(uVar7,uVar11,param_3[4] + 8,&local_70)" ( identifier , identifier , (binary_expression "param_3[4] + 8" (subscript_expression "param_3[4]" identifier [ number_literal ]) + number_literal) , (pointer_expression "&local_70" & identifier) ))) ;) (expression_statement "param_3[3] = local_70;" (assignment_expression "param_3[3] = local_70" (subscript_expression "param_3[3]" identifier [ number_literal ]) = identifier) ;) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */\n\nundefined8 _Unwind_IteratePhdrCallback(ulong *param_1,ulong param_2,ulong *param_3)\n\n{\n  int *piVar1;\n  char cVar2;\n  int iVar3;\n  ulong *puVar4;\n  bool bVar5;\n  int *piVar6;\n  undefined1 uVar7;\n  byte bVar8;\n  uint uVar9;\n  ulong *puVar10;\n  undefined8 uVar11;\n  ulong uVar12;\n  undefined8 uVar13;\n  int *piVar14;\n  undefined8 *puVar15;\n  char *pcVar16;\n  int *piVar17;\n  ulong uVar18;\n  ulong uVar19;\n  int *piVar20;\n  ulong uVar21;\n  ulong *puVar22;\n  char *pcVar23;\n  ulong *local_80;\n  undefined8 local_78;\n  ulong local_70;\n  long local_68;\n  ulong local_60;\n  ulong local_58;\n  undefined8 local_50;\n  undefined8 local_48;\n  \n  puVar10 = frame_hdr_cache_head;\n  piVar14 = (int *)param_1[2];\n  uVar12 = *param_1;\n  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != adds_9336) || (subs_9337 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      adds_9336 = param_1[4];\n      subs_9337 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &seen_objects);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      frame_hdr_cache_head = &frame_hdr_cache;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (frame_hdr_cache_head != (ulong *)0x0) {\n      uVar18 = *frame_hdr_cache_head;\n      uVar19 = frame_hdr_cache_head[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = frame_hdr_cache_head;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (frame_hdr_cache_head != puVar22) {\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }\n  local_80 = (ulong *)0x0;\n  puVar22 = (ulong *)0x0;\nLAB_0036942c:\n  puVar10 = frame_hdr_cache_head;\n  if ((ushort)param_1[3] == 0) {\n    return 0;\n  }\n  uVar18 = 0;\n  uVar19 = 0;\n  bVar5 = false;\n  piVar20 = (int *)0x0;\n  piVar17 = (int *)0x0;\n  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;\n  do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);\n  if (!bVar5) {\n    return 0;\n  }\n  if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      frame_hdr_cache_head = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }\nLAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }\n  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);\n  if (*pcVar16 != '\x01') {\n    return 1;\n  }\n  cVar2 = pcVar16[1];\n  uVar11 = base_from_cb_data(cVar2,param_3);\n  uVar11 = read_encoded_value_with_base(cVar2,uVar11,pcVar16 + 4,&local_78);\n  cVar2 = pcVar16[2];\n  if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = base_from_cb_data(cVar2,param_3);\n    piVar14 = (int *)read_encoded_value_with_base(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = get_cie_encoding(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = size_of_encoded_value(bVar8);\n      read_encoded_value_with_base(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }\n  local_60 = param_3[1];\n  local_68 = 0;\n  local_48 = 4;\n  local_58 = param_3[2];\n  local_50 = local_78;\n  uVar12 = linear_search_fdes(&local_68,local_78,pcVar23);\n  param_3[4] = uVar12;\n  if (uVar12 != 0) {\n    uVar7 = get_cie_encoding((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = base_from_cb_data(uVar7,param_3);\n    read_encoded_value_with_base(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }\n  return 1;\n}\n\n" comment (function_definition "undefined8 _Unwind_IteratePhdrCallback(ulong *param_1,ulong param_2,ulong *param_3)\n\n{\n  int *piVar1;\n  char cVar2;\n  int iVar3;\n  ulong *puVar4;\n  bool bVar5;\n  int *piVar6;\n  undefined1 uVar7;\n  byte bVar8;\n  uint uVar9;\n  ulong *puVar10;\n  undefined8 uVar11;\n  ulong uVar12;\n  undefined8 uVar13;\n  int *piVar14;\n  undefined8 *puVar15;\n  char *pcVar16;\n  int *piVar17;\n  ulong uVar18;\n  ulong uVar19;\n  int *piVar20;\n  ulong uVar21;\n  ulong *puVar22;\n  char *pcVar23;\n  ulong *local_80;\n  undefined8 local_78;\n  ulong local_70;\n  long local_68;\n  ulong local_60;\n  ulong local_58;\n  undefined8 local_50;\n  undefined8 local_48;\n  \n  puVar10 = frame_hdr_cache_head;\n  piVar14 = (int *)param_1[2];\n  uVar12 = *param_1;\n  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != adds_9336) || (subs_9337 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      adds_9336 = param_1[4];\n      subs_9337 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &seen_objects);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      frame_hdr_cache_head = &frame_hdr_cache;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (frame_hdr_cache_head != (ulong *)0x0) {\n      uVar18 = *frame_hdr_cache_head;\n      uVar19 = frame_hdr_cache_head[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = frame_hdr_cache_head;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (frame_hdr_cache_head != puVar22) {\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }\n  local_80 = (ulong *)0x0;\n  puVar22 = (ulong *)0x0;\nLAB_0036942c:\n  puVar10 = frame_hdr_cache_head;\n  if ((ushort)param_1[3] == 0) {\n    return 0;\n  }\n  uVar18 = 0;\n  uVar19 = 0;\n  bVar5 = false;\n  piVar20 = (int *)0x0;\n  piVar17 = (int *)0x0;\n  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;\n  do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);\n  if (!bVar5) {\n    return 0;\n  }\n  if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      frame_hdr_cache_head = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }\nLAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }\n  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);\n  if (*pcVar16 != '\x01') {\n    return 1;\n  }\n  cVar2 = pcVar16[1];\n  uVar11 = base_from_cb_data(cVar2,param_3);\n  uVar11 = read_encoded_value_with_base(cVar2,uVar11,pcVar16 + 4,&local_78);\n  cVar2 = pcVar16[2];\n  if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = base_from_cb_data(cVar2,param_3);\n    piVar14 = (int *)read_encoded_value_with_base(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = get_cie_encoding(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = size_of_encoded_value(bVar8);\n      read_encoded_value_with_base(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }\n  local_60 = param_3[1];\n  local_68 = 0;\n  local_48 = 4;\n  local_58 = param_3[2];\n  local_50 = local_78;\n  uVar12 = linear_search_fdes(&local_68,local_78,pcVar23);\n  param_3[4] = uVar12;\n  if (uVar12 != 0) {\n    uVar7 = get_cie_encoding((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = base_from_cb_data(uVar7,param_3);\n    read_encoded_value_with_base(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }\n  return 1;\n}" type_identifier (function_declarator "_Unwind_IteratePhdrCallback(ulong *param_1,ulong param_2,ulong *param_3)" identifier (parameter_list "(ulong *param_1,ulong param_2,ulong *param_3)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) , (parameter_declaration "ulong *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  int *piVar1;\n  char cVar2;\n  int iVar3;\n  ulong *puVar4;\n  bool bVar5;\n  int *piVar6;\n  undefined1 uVar7;\n  byte bVar8;\n  uint uVar9;\n  ulong *puVar10;\n  undefined8 uVar11;\n  ulong uVar12;\n  undefined8 uVar13;\n  int *piVar14;\n  undefined8 *puVar15;\n  char *pcVar16;\n  int *piVar17;\n  ulong uVar18;\n  ulong uVar19;\n  int *piVar20;\n  ulong uVar21;\n  ulong *puVar22;\n  char *pcVar23;\n  ulong *local_80;\n  undefined8 local_78;\n  ulong local_70;\n  long local_68;\n  ulong local_60;\n  ulong local_58;\n  undefined8 local_50;\n  undefined8 local_48;\n  \n  puVar10 = frame_hdr_cache_head;\n  piVar14 = (int *)param_1[2];\n  uVar12 = *param_1;\n  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != adds_9336) || (subs_9337 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      adds_9336 = param_1[4];\n      subs_9337 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &seen_objects);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      frame_hdr_cache_head = &frame_hdr_cache;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (frame_hdr_cache_head != (ulong *)0x0) {\n      uVar18 = *frame_hdr_cache_head;\n      uVar19 = frame_hdr_cache_head[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = frame_hdr_cache_head;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (frame_hdr_cache_head != puVar22) {\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }\n  local_80 = (ulong *)0x0;\n  puVar22 = (ulong *)0x0;\nLAB_0036942c:\n  puVar10 = frame_hdr_cache_head;\n  if ((ushort)param_1[3] == 0) {\n    return 0;\n  }\n  uVar18 = 0;\n  uVar19 = 0;\n  bVar5 = false;\n  piVar20 = (int *)0x0;\n  piVar17 = (int *)0x0;\n  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;\n  do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);\n  if (!bVar5) {\n    return 0;\n  }\n  if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      frame_hdr_cache_head = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }\nLAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }\n  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);\n  if (*pcVar16 != '\x01') {\n    return 1;\n  }\n  cVar2 = pcVar16[1];\n  uVar11 = base_from_cb_data(cVar2,param_3);\n  uVar11 = read_encoded_value_with_base(cVar2,uVar11,pcVar16 + 4,&local_78);\n  cVar2 = pcVar16[2];\n  if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = base_from_cb_data(cVar2,param_3);\n    piVar14 = (int *)read_encoded_value_with_base(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = get_cie_encoding(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = size_of_encoded_value(bVar8);\n      read_encoded_value_with_base(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }\n  local_60 = param_3[1];\n  local_68 = 0;\n  local_48 = 4;\n  local_58 = param_3[2];\n  local_50 = local_78;\n  uVar12 = linear_search_fdes(&local_68,local_78,pcVar23);\n  param_3[4] = uVar12;\n  if (uVar12 != 0) {\n    uVar7 = get_cie_encoding((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = base_from_cb_data(uVar7,param_3);\n    read_encoded_value_with_base(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }\n  return 1;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "ulong *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "undefined1 uVar7;" type_identifier identifier ;) (declaration "byte bVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "ulong *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "undefined8 uVar11;" type_identifier identifier ;) (declaration "ulong uVar12;" type_identifier identifier ;) (declaration "undefined8 uVar13;" type_identifier identifier ;) (declaration "int *piVar14;" primitive_type (pointer_declarator "*piVar14" * identifier) ;) (declaration "undefined8 *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "char *pcVar16;" primitive_type (pointer_declarator "*pcVar16" * identifier) ;) (declaration "int *piVar17;" primitive_type (pointer_declarator "*piVar17" * identifier) ;) (declaration "ulong uVar18;" type_identifier identifier ;) (declaration "ulong uVar19;" type_identifier identifier ;) (declaration "int *piVar20;" primitive_type (pointer_declarator "*piVar20" * identifier) ;) (declaration "ulong uVar21;" type_identifier identifier ;) (declaration "ulong *puVar22;" type_identifier (pointer_declarator "*puVar22" * identifier) ;) (declaration "char *pcVar23;" primitive_type (pointer_declarator "*pcVar23" * identifier) ;) (declaration "ulong *local_80;" type_identifier (pointer_declarator "*local_80" * identifier) ;) (declaration "undefined8 local_78;" type_identifier identifier ;) (declaration "ulong local_70;" type_identifier identifier ;) (declaration "long local_68;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_60;" type_identifier identifier ;) (declaration "ulong local_58;" type_identifier identifier ;) (declaration "undefined8 local_50;" type_identifier identifier ;) (declaration "undefined8 local_48;" type_identifier identifier ;) (expression_statement "puVar10 = frame_hdr_cache_head;" (assignment_expression "puVar10 = frame_hdr_cache_head" identifier = identifier) ;) (expression_statement "piVar14 = (int *)param_1[2];" (assignment_expression "piVar14 = (int *)param_1[2]" identifier = (cast_expression "(int *)param_1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) ;) (expression_statement "uVar12 = *param_1;" (assignment_expression "uVar12 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != adds_9336) || (subs_9337 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      adds_9336 = param_1[4];\n      subs_9337 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &seen_objects);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      frame_hdr_cache_head = &frame_hdr_cache;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (frame_hdr_cache_head != (ulong *)0x0) {\n      uVar18 = *frame_hdr_cache_head;\n      uVar19 = frame_hdr_cache_head[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = frame_hdr_cache_head;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (frame_hdr_cache_head != puVar22) {\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }" if (parenthesized_expression "(((int)param_3[5] == 0) || (param_2 < 0x30))" ( (binary_expression "((int)param_3[5] == 0) || (param_2 < 0x30)" (parenthesized_expression "((int)param_3[5] == 0)" ( (binary_expression "(int)param_3[5] == 0" (cast_expression "(int)param_3[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_3[5]" identifier [ number_literal ])) == number_literal) )) || (parenthesized_expression "(param_2 < 0x30)" ( (binary_expression "param_2 < 0x30" identifier < number_literal) ))) )) (compound_statement "{\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }" { (if_statement "if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(param_2 < 0x1a)" ( (binary_expression "param_2 < 0x1a" identifier < number_literal) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) }) (else_clause "else {\n    if ((param_1[4] != adds_9336) || (subs_9337 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      adds_9336 = param_1[4];\n      subs_9337 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &seen_objects);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      frame_hdr_cache_head = &frame_hdr_cache;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (frame_hdr_cache_head != (ulong *)0x0) {\n      uVar18 = *frame_hdr_cache_head;\n      uVar19 = frame_hdr_cache_head[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = frame_hdr_cache_head;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (frame_hdr_cache_head != puVar22) {\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }" else (compound_statement "{\n    if ((param_1[4] != adds_9336) || (subs_9337 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      adds_9336 = param_1[4];\n      subs_9337 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &seen_objects);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      frame_hdr_cache_head = &frame_hdr_cache;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (frame_hdr_cache_head != (ulong *)0x0) {\n      uVar18 = *frame_hdr_cache_head;\n      uVar19 = frame_hdr_cache_head[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = frame_hdr_cache_head;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (frame_hdr_cache_head != puVar22) {\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }" { (if_statement "if ((param_1[4] != adds_9336) || (subs_9337 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      adds_9336 = param_1[4];\n      subs_9337 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &seen_objects);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      frame_hdr_cache_head = &frame_hdr_cache;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }" if (parenthesized_expression "((param_1[4] != adds_9336) || (subs_9337 != param_1[5]))" ( (binary_expression "(param_1[4] != adds_9336) || (subs_9337 != param_1[5])" (parenthesized_expression "(param_1[4] != adds_9336)" ( (binary_expression "param_1[4] != adds_9336" (subscript_expression "param_1[4]" identifier [ number_literal ]) != identifier) )) || (parenthesized_expression "(subs_9337 != param_1[5])" ( (binary_expression "subs_9337 != param_1[5]" identifier != (subscript_expression "param_1[5]" identifier [ number_literal ])) ))) )) (compound_statement "{\n      puVar15 = &DAT_0044c030;\n      adds_9336 = param_1[4];\n      subs_9337 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &seen_objects);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      frame_hdr_cache_head = &frame_hdr_cache;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }" { (expression_statement "puVar15 = &DAT_0044c030;" (assignment_expression "puVar15 = &DAT_0044c030" identifier = (pointer_expression "&DAT_0044c030" & identifier)) ;) (expression_statement "adds_9336 = param_1[4];" (assignment_expression "adds_9336 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "subs_9337 = param_1[5];" (assignment_expression "subs_9337 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (do_statement "do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &seen_objects);" do (compound_statement "{\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      }" { (expression_statement "puVar15[-6] = 0;" (assignment_expression "puVar15[-6] = 0" (subscript_expression "puVar15[-6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar15[-5] = 0;" (assignment_expression "puVar15[-5] = 0" (subscript_expression "puVar15[-5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar15[-1] = puVar15;" (assignment_expression "puVar15[-1] = puVar15" (subscript_expression "puVar15[-1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar15 = puVar15 + 6;" (assignment_expression "puVar15 = puVar15 + 6" identifier = (binary_expression "puVar15 + 6" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar15 != &seen_objects)" ( (binary_expression "puVar15 != &seen_objects" identifier != (pointer_expression "&seen_objects" & identifier)) )) ;) (expression_statement "puVar22 = (ulong *)0x0;" (assignment_expression "puVar22 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "_DAT_0044c178 = 0;" (assignment_expression "_DAT_0044c178 = 0" identifier = number_literal) ;) (expression_statement "frame_hdr_cache_head = &frame_hdr_cache;" (assignment_expression "frame_hdr_cache_head = &frame_hdr_cache" identifier = (pointer_expression "&frame_hdr_cache" & identifier)) ;) (expression_statement "*(undefined4 *)(param_3 + 5) = 0;" (assignment_expression "*(undefined4 *)(param_3 + 5) = 0" (pointer_expression "*(undefined4 *)(param_3 + 5)" * (cast_expression "(undefined4 *)(param_3 + 5)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 5)" ( (binary_expression "param_3 + 5" identifier + number_literal) )))) = number_literal) ;) (expression_statement "local_80 = (ulong *)0x0;" (assignment_expression "local_80 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_0036942c;" goto statement_identifier ;) })) (if_statement "if (frame_hdr_cache_head != (ulong *)0x0) {\n      uVar18 = *frame_hdr_cache_head;\n      uVar19 = frame_hdr_cache_head[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = frame_hdr_cache_head;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (frame_hdr_cache_head != puVar22) {\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }" if (parenthesized_expression "(frame_hdr_cache_head != (ulong *)0x0)" ( (binary_expression "frame_hdr_cache_head != (ulong *)0x0" identifier != (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      uVar18 = *frame_hdr_cache_head;\n      uVar19 = frame_hdr_cache_head[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = frame_hdr_cache_head;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (frame_hdr_cache_head != puVar22) {\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }" { (expression_statement "uVar18 = *frame_hdr_cache_head;" (assignment_expression "uVar18 = *frame_hdr_cache_head" identifier = (pointer_expression "*frame_hdr_cache_head" * identifier)) ;) (expression_statement "uVar19 = frame_hdr_cache_head[1];" (assignment_expression "uVar19 = frame_hdr_cache_head[1]" identifier = (subscript_expression "frame_hdr_cache_head[1]" identifier [ number_literal ])) ;) (expression_statement "local_80 = (ulong *)0x0;" (assignment_expression "local_80 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "puVar22 = frame_hdr_cache_head;" (assignment_expression "puVar22 = frame_hdr_cache_head" identifier = identifier) ;) (while_statement "while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (frame_hdr_cache_head != puVar22) {\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (frame_hdr_cache_head != puVar22) {\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }" { (if_statement "if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (frame_hdr_cache_head != puVar22) {\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }" if (parenthesized_expression "((uVar18 <= *param_3) && (*param_3 < uVar19))" ( (binary_expression "(uVar18 <= *param_3) && (*param_3 < uVar19)" (parenthesized_expression "(uVar18 <= *param_3)" ( (binary_expression "uVar18 <= *param_3" identifier <= (pointer_expression "*param_3" * identifier)) )) && (parenthesized_expression "(*param_3 < uVar19)" ( (binary_expression "*param_3 < uVar19" (pointer_expression "*param_3" * identifier) < identifier) ))) )) (compound_statement "{\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (frame_hdr_cache_head != puVar22) {\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }" { (expression_statement "uVar12 = puVar22[2];" (assignment_expression "uVar12 = puVar22[2]" identifier = (subscript_expression "puVar22[2]" identifier [ number_literal ])) ;) (expression_statement "piVar17 = (int *)puVar22[3];" (assignment_expression "piVar17 = (int *)puVar22[3]" identifier = (cast_expression "(int *)puVar22[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar22[3]" identifier [ number_literal ]))) ;) (if_statement "if (frame_hdr_cache_head != puVar22) {\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }" if (parenthesized_expression "(frame_hdr_cache_head != puVar22)" ( (binary_expression "frame_hdr_cache_head != puVar22" identifier != identifier) )) (compound_statement "{\n            frame_hdr_cache_head = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }" { (expression_statement "frame_hdr_cache_head = puVar22;" (assignment_expression "frame_hdr_cache_head = puVar22" identifier = identifier) ;) (expression_statement "local_80[5] = puVar22[5];" (assignment_expression "local_80[5] = puVar22[5]" (subscript_expression "local_80[5]" identifier [ number_literal ]) = (subscript_expression "puVar22[5]" identifier [ number_literal ])) ;) (expression_statement "puVar22[5] = (ulong)puVar10;" (assignment_expression "puVar22[5] = (ulong)puVar10" (subscript_expression "puVar22[5]" identifier [ number_literal ]) = (cast_expression "(ulong)puVar10" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) })) (goto_statement "goto LAB_00369508;" goto statement_identifier ;) })) (if_statement "if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;" if (parenthesized_expression "((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))" ( (binary_expression "(uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0)" (parenthesized_expression "(uVar18 == 0 && uVar19 == 0)" ( (binary_expression "uVar18 == 0 && uVar19 == 0" (binary_expression "uVar18 == 0" identifier == number_literal) && (binary_expression "uVar19 == 0" identifier == number_literal)) )) || (parenthesized_expression "(puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0)" ( (comma_expression "puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0" (assignment_expression "puVar4 = (ulong *)puVar22[5]" identifier = (cast_expression "(ulong *)puVar22[5]" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar22[5]" identifier [ number_literal ]))) , (binary_expression "puVar4 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (break_statement "break;" break ;)) (expression_statement "uVar18 = *puVar4;" (assignment_expression "uVar18 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "uVar19 = puVar4[1];" (assignment_expression "uVar19 = puVar4[1]" identifier = (subscript_expression "puVar4[1]" identifier [ number_literal ])) ;) (expression_statement "local_80 = puVar22;" (assignment_expression "local_80 = puVar22" identifier = identifier) ;) (expression_statement "puVar22 = puVar4;" (assignment_expression "puVar22 = puVar4" identifier = identifier) ;) })) (goto_statement "goto LAB_0036942c;" goto statement_identifier ;) })) }))) (expression_statement "local_80 = (ulong *)0x0;" (assignment_expression "local_80 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "puVar22 = (ulong *)0x0;" (assignment_expression "puVar22 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (labeled_statement "LAB_0036942c:\n  puVar10 = frame_hdr_cache_head;" statement_identifier : (expression_statement "puVar10 = frame_hdr_cache_head;" (assignment_expression "puVar10 = frame_hdr_cache_head" identifier = identifier) ;)) (if_statement "if ((ushort)param_1[3] == 0) {\n    return 0;\n  }" if (parenthesized_expression "((ushort)param_1[3] == 0)" ( (binary_expression "(ushort)param_1[3] == 0" (cast_expression "(ushort)param_1[3]" ( (type_descriptor "ushort" type_identifier) ) (subscript_expression "param_1[3]" identifier [ number_literal ])) == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar18 = 0;" (assignment_expression "uVar18 = 0" identifier = number_literal) ;) (expression_statement "uVar19 = 0;" (assignment_expression "uVar19 = 0" identifier = number_literal) ;) (expression_statement "bVar5 = false;" (assignment_expression "bVar5 = false" identifier = false) ;) (expression_statement "piVar20 = (int *)0x0;" (assignment_expression "piVar20 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "piVar17 = (int *)0x0;" (assignment_expression "piVar17 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;" (assignment_expression "piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe" identifier = (binary_expression "piVar14 + (ulong)(ushort)param_1[3] * 0xe" identifier + (binary_expression "(ulong)(ushort)param_1[3] * 0xe" (cast_expression "(ulong)(ushort)param_1[3]" ( (type_descriptor "ulong" type_identifier) ) (cast_expression "(ushort)param_1[3]" ( (type_descriptor "ushort" type_identifier) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) * number_literal))) ;) (do_statement "do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);" do (compound_statement "{\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  }" { (expression_statement "iVar3 = *piVar14;" (assignment_expression "iVar3 = *piVar14" identifier = (pointer_expression "*piVar14" * identifier)) ;) (expression_statement "piVar6 = piVar17;" (assignment_expression "piVar6 = piVar17" identifier = identifier) ;) (if_statement "if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }" if (parenthesized_expression "(iVar3 == 1)" ( (binary_expression "iVar3 == 1" identifier == number_literal) )) (compound_statement "{\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }" { (expression_statement "uVar21 = *(long *)(piVar14 + 4) + uVar12;" (assignment_expression "uVar21 = *(long *)(piVar14 + 4) + uVar12" identifier = (binary_expression "*(long *)(piVar14 + 4) + uVar12" (pointer_expression "*(long *)(piVar14 + 4)" * (cast_expression "(long *)(piVar14 + 4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar14 + 4)" ( (binary_expression "piVar14 + 4" identifier + number_literal) )))) + identifier)) ;) (if_statement "if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }" if (parenthesized_expression "((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21))" ( (binary_expression "(uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)" (parenthesized_expression "(uVar21 <= *param_3)" ( (binary_expression "uVar21 <= *param_3" identifier <= (pointer_expression "*param_3" * identifier)) )) && (parenthesized_expression "(*param_3 < *(long *)(piVar14 + 10) + uVar21)" ( (binary_expression "*param_3 < *(long *)(piVar14 + 10) + uVar21" (pointer_expression "*param_3" * identifier) < (binary_expression "*(long *)(piVar14 + 10) + uVar21" (pointer_expression "*(long *)(piVar14 + 10)" * (cast_expression "(long *)(piVar14 + 10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar14 + 10)" ( (binary_expression "piVar14 + 10" identifier + number_literal) )))) + identifier)) ))) )) (compound_statement "{\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }" { (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" identifier = true) ;) (expression_statement "uVar18 = *(long *)(piVar14 + 10) + uVar21;" (assignment_expression "uVar18 = *(long *)(piVar14 + 10) + uVar21" identifier = (binary_expression "*(long *)(piVar14 + 10) + uVar21" (pointer_expression "*(long *)(piVar14 + 10)" * (cast_expression "(long *)(piVar14 + 10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar14 + 10)" ( (binary_expression "piVar14 + 10" identifier + number_literal) )))) + identifier)) ;) (expression_statement "uVar19 = uVar21;" (assignment_expression "uVar19 = uVar21" identifier = identifier) ;) })) }) (else_clause "else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }" else (compound_statement "{\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }" { (expression_statement "piVar6 = piVar14;" (assignment_expression "piVar6 = piVar14" identifier = identifier) ;) (if_statement "if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }" if (parenthesized_expression "((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2))" ( (binary_expression "(iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)" (parenthesized_expression "(iVar3 != 0x6474e550)" ( (binary_expression "iVar3 != 0x6474e550" identifier != number_literal) )) && (parenthesized_expression "(piVar6 = piVar17, iVar3 == 2)" ( (comma_expression "piVar6 = piVar17, iVar3 == 2" (assignment_expression "piVar6 = piVar17" identifier = identifier) , (binary_expression "iVar3 == 2" identifier == number_literal)) ))) )) (compound_statement "{\n        piVar20 = piVar14;\n      }" { (expression_statement "piVar20 = piVar14;" (assignment_expression "piVar20 = piVar14" identifier = identifier) ;) })) }))) (expression_statement "piVar17 = piVar6;" (assignment_expression "piVar17 = piVar6" identifier = identifier) ;) (expression_statement "piVar14 = piVar14 + 0xe;" (assignment_expression "piVar14 = piVar14 + 0xe" identifier = (binary_expression "piVar14 + 0xe" identifier + number_literal)) ;) }) while (parenthesized_expression "(piVar14 != piVar1)" ( (binary_expression "piVar14 != piVar1" identifier != identifier) )) ;) (if_statement "if (!bVar5) {\n    return 0;\n  }" if (parenthesized_expression "(!bVar5)" ( (unary_expression "!bVar5" ! identifier) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      frame_hdr_cache_head = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }" if (parenthesized_expression "(0x2f < param_2)" ( (binary_expression "0x2f < param_2" number_literal < identifier) )) (compound_statement "{\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      frame_hdr_cache_head = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }" { (if_statement "if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      frame_hdr_cache_head = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }" if (parenthesized_expression "((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0))" ( (binary_expression "(puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)" (parenthesized_expression "(puVar22 != (ulong *)0x0)" ( (binary_expression "puVar22 != (ulong *)0x0" identifier != (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(local_80 != (ulong *)0x0)" ( (binary_expression "local_80 != (ulong *)0x0" identifier != (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n      frame_hdr_cache_head = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }" { (expression_statement "frame_hdr_cache_head = puVar22;" (assignment_expression "frame_hdr_cache_head = puVar22" identifier = identifier) ;) (expression_statement "local_80[5] = puVar22[5];" (assignment_expression "local_80[5] = puVar22[5]" (subscript_expression "local_80[5]" identifier [ number_literal ]) = (subscript_expression "puVar22[5]" identifier [ number_literal ])) ;) (expression_statement "puVar22[5] = (ulong)puVar10;" (assignment_expression "puVar22[5] = (ulong)puVar10" (subscript_expression "puVar22[5]" identifier [ number_literal ]) = (cast_expression "(ulong)puVar10" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "puVar10 = puVar22;" (assignment_expression "puVar10 = puVar22" identifier = identifier) ;) })) (expression_statement "puVar10[2] = uVar12;" (assignment_expression "puVar10[2] = uVar12" (subscript_expression "puVar10[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar10[3] = (ulong)piVar17;" (assignment_expression "puVar10[3] = (ulong)piVar17" (subscript_expression "puVar10[3]" identifier [ number_literal ]) = (cast_expression "(ulong)piVar17" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "puVar10[4] = (ulong)piVar20;" (assignment_expression "puVar10[4] = (ulong)piVar20" (subscript_expression "puVar10[4]" identifier [ number_literal ]) = (cast_expression "(ulong)piVar20" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "*puVar10 = uVar19;" (assignment_expression "*puVar10 = uVar19" (pointer_expression "*puVar10" * identifier) = identifier) ;) (expression_statement "puVar10[1] = uVar18;" (assignment_expression "puVar10[1] = uVar18" (subscript_expression "puVar10[1]" identifier [ number_literal ]) = identifier) ;) })) (labeled_statement "LAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }" statement_identifier : (if_statement "if (piVar17 == (int *)0x0) {\n    return 0;\n  }" if (parenthesized_expression "(piVar17 == (int *)0x0)" ( (binary_expression "piVar17 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) }))) (expression_statement "pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);" (assignment_expression "pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12)" identifier = (cast_expression "(char *)(*(long *)(piVar17 + 4) + uVar12)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(piVar17 + 4) + uVar12)" ( (binary_expression "*(long *)(piVar17 + 4) + uVar12" (pointer_expression "*(long *)(piVar17 + 4)" * (cast_expression "(long *)(piVar17 + 4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar17 + 4)" ( (binary_expression "piVar17 + 4" identifier + number_literal) )))) + identifier) )))) ;) (if_statement "if (*pcVar16 != '\x01') {\n    return 1;\n  }" if (parenthesized_expression "(*pcVar16 != '\x01')" ( (binary_expression "*pcVar16 != '\x01'" (pointer_expression "*pcVar16" * identifier) != (char_literal "'\x01'" ' escape_sequence ')) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "cVar2 = pcVar16[1];" (assignment_expression "cVar2 = pcVar16[1]" identifier = (subscript_expression "pcVar16[1]" identifier [ number_literal ])) ;) (expression_statement "uVar11 = base_from_cb_data(cVar2,param_3);" (assignment_expression "uVar11 = base_from_cb_data(cVar2,param_3)" identifier = (call_expression "base_from_cb_data(cVar2,param_3)" identifier (argument_list "(cVar2,param_3)" ( identifier , identifier )))) ;) (expression_statement "uVar11 = read_encoded_value_with_base(cVar2,uVar11,pcVar16 + 4,&local_78);" (assignment_expression "uVar11 = read_encoded_value_with_base(cVar2,uVar11,pcVar16 + 4,&local_78)" identifier = (call_expression "read_encoded_value_with_base(cVar2,uVar11,pcVar16 + 4,&local_78)" identifier (argument_list "(cVar2,uVar11,pcVar16 + 4,&local_78)" ( identifier , identifier , (binary_expression "pcVar16 + 4" identifier + number_literal) , (pointer_expression "&local_78" & identifier) )))) ;) (expression_statement "cVar2 = pcVar16[2];" (assignment_expression "cVar2 = pcVar16[2]" identifier = (subscript_expression "pcVar16[2]" identifier [ number_literal ])) ;) (if_statement "if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = base_from_cb_data(cVar2,param_3);\n    piVar14 = (int *)read_encoded_value_with_base(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = get_cie_encoding(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = size_of_encoded_value(bVar8);\n      read_encoded_value_with_base(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }" if (parenthesized_expression "((cVar2 == -1) || (pcVar16[3] != ';'))" ( (binary_expression "(cVar2 == -1) || (pcVar16[3] != ';')" (parenthesized_expression "(cVar2 == -1)" ( (binary_expression "cVar2 == -1" identifier == number_literal) )) || (parenthesized_expression "(pcVar16[3] != ';')" ( (binary_expression "pcVar16[3] != ';'" (subscript_expression "pcVar16[3]" identifier [ number_literal ]) != (char_literal "';'" ' character ')) ))) )) (compound_statement "{\n    pcVar23 = (char *)*param_3;\n  }" { (expression_statement "pcVar23 = (char *)*param_3;" (assignment_expression "pcVar23 = (char *)*param_3" identifier = (cast_expression "(char *)*param_3" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_3" * identifier))) ;) }) (else_clause "else {\n    uVar13 = base_from_cb_data(cVar2,param_3);\n    piVar14 = (int *)read_encoded_value_with_base(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = get_cie_encoding(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = size_of_encoded_value(bVar8);\n      read_encoded_value_with_base(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }" else (compound_statement "{\n    uVar13 = base_from_cb_data(cVar2,param_3);\n    piVar14 = (int *)read_encoded_value_with_base(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = get_cie_encoding(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = size_of_encoded_value(bVar8);\n      read_encoded_value_with_base(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }" { (expression_statement "uVar13 = base_from_cb_data(cVar2,param_3);" (assignment_expression "uVar13 = base_from_cb_data(cVar2,param_3)" identifier = (call_expression "base_from_cb_data(cVar2,param_3)" identifier (argument_list "(cVar2,param_3)" ( identifier , identifier )))) ;) (expression_statement "piVar14 = (int *)read_encoded_value_with_base(cVar2,uVar13,uVar11,&local_70);" (assignment_expression "piVar14 = (int *)read_encoded_value_with_base(cVar2,uVar13,uVar11,&local_70)" identifier = (cast_expression "(int *)read_encoded_value_with_base(cVar2,uVar13,uVar11,&local_70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "read_encoded_value_with_base(cVar2,uVar13,uVar11,&local_70)" identifier (argument_list "(cVar2,uVar13,uVar11,&local_70)" ( identifier , identifier , identifier , (pointer_expression "&local_70" & identifier) ))))) ;) (if_statement "if (local_70 == 0) {\n      return 1;\n    }" if (parenthesized_expression "(local_70 == 0)" ( (binary_expression "local_70 == 0" identifier == number_literal) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "pcVar23 = (char *)*param_3;" (assignment_expression "pcVar23 = (char *)*param_3" identifier = (cast_expression "(char *)*param_3" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_3" * identifier))) ;) (expression_statement "uVar12 = (ulong)((uint)piVar14 & 3);" (assignment_expression "uVar12 = (ulong)((uint)piVar14 & 3)" identifier = (call_expression "(ulong)((uint)piVar14 & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)piVar14 & 3)" ( (binary_expression "(uint)piVar14 & 3" (cast_expression "(uint)piVar14" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) ;) (if_statement "if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = get_cie_encoding(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = size_of_encoded_value(bVar8);\n      read_encoded_value_with_base(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }" if (parenthesized_expression "(((ulong)piVar14 & 3) == 0)" ( (binary_expression "((ulong)piVar14 & 3) == 0" (parenthesized_expression "((ulong)piVar14 & 3)" ( (binary_expression "(ulong)piVar14 & 3" (cast_expression "(ulong)piVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = get_cie_encoding(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = size_of_encoded_value(bVar8);\n      read_encoded_value_with_base(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }" { (if_statement "if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }" if (parenthesized_expression "(pcVar23 < pcVar16 + *piVar14)" ( (binary_expression "pcVar23 < pcVar16 + *piVar14" identifier < (binary_expression "pcVar16 + *piVar14" identifier + (pointer_expression "*piVar14" * identifier))) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar18 = local_70 - 1;" (assignment_expression "uVar18 = local_70 - 1" identifier = (binary_expression "local_70 - 1" identifier - number_literal)) ;) (expression_statement "uVar19 = uVar18;" (assignment_expression "uVar19 = uVar18" identifier = identifier) ;) (if_statement "if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }" if (parenthesized_expression "(pcVar23 < pcVar16 + piVar14[uVar18 * 2])" ( (binary_expression "pcVar23 < pcVar16 + piVar14[uVar18 * 2]" identifier < (binary_expression "pcVar16 + piVar14[uVar18 * 2]" identifier + (subscript_expression "piVar14[uVar18 * 2]" identifier [ (binary_expression "uVar18 * 2" identifier * number_literal) ]))) )) (compound_statement "{\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }" { (do_statement "do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);" do (compound_statement "{\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        }" { (if_statement "if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }" if (parenthesized_expression "(uVar19 <= uVar12)" ( (binary_expression "uVar19 <= uVar12" identifier <= identifier) )) (compound_statement "{\nLAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();\n          }" { (labeled_statement "LAB_003697f5:\n                    /* WARNING: Subroutine does not return */\n            abort();" statement_identifier : comment (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;)) })) (expression_statement "uVar21 = uVar12 + uVar19 >> 1;" (assignment_expression "uVar21 = uVar12 + uVar19 >> 1" identifier = (binary_expression "uVar12 + uVar19 >> 1" (binary_expression "uVar12 + uVar19" identifier + identifier) >> number_literal)) ;) (expression_statement "iVar3 = piVar14[uVar21 * 2];" (assignment_expression "iVar3 = piVar14[uVar21 * 2]" identifier = (subscript_expression "piVar14[uVar21 * 2]" identifier [ (binary_expression "uVar21 * 2" identifier * number_literal) ])) ;) (while_statement "while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }" while (parenthesized_expression "(uVar18 = uVar21, pcVar23 < pcVar16 + iVar3)" ( (comma_expression "uVar18 = uVar21, pcVar23 < pcVar16 + iVar3" (assignment_expression "uVar18 = uVar21" identifier = identifier) , (binary_expression "pcVar23 < pcVar16 + iVar3" identifier < (binary_expression "pcVar16 + iVar3" identifier + identifier))) )) (compound_statement "{\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }" { (if_statement "if (uVar18 <= uVar12) goto LAB_003697f5;" if (parenthesized_expression "(uVar18 <= uVar12)" ( (binary_expression "uVar18 <= uVar12" identifier <= identifier) )) (goto_statement "goto LAB_003697f5;" goto statement_identifier ;)) (expression_statement "uVar21 = uVar12 + uVar18 >> 1;" (assignment_expression "uVar21 = uVar12 + uVar18 >> 1" identifier = (binary_expression "uVar12 + uVar18 >> 1" (binary_expression "uVar12 + uVar18" identifier + identifier) >> number_literal)) ;) (expression_statement "iVar3 = piVar14[uVar21 * 2];" (assignment_expression "iVar3 = piVar14[uVar21 * 2]" identifier = (subscript_expression "piVar14[uVar21 * 2]" identifier [ (binary_expression "uVar21 * 2" identifier * number_literal) ])) ;) (expression_statement "uVar19 = uVar18;" (assignment_expression "uVar19 = uVar18" identifier = identifier) ;) })) (expression_statement "uVar12 = uVar18 + 1;" (assignment_expression "uVar12 = uVar18 + 1" identifier = (binary_expression "uVar18 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pcVar16 + piVar14[uVar12 * 2] <= pcVar23)" ( (binary_expression "pcVar16 + piVar14[uVar12 * 2] <= pcVar23" (binary_expression "pcVar16 + piVar14[uVar12 * 2]" identifier + (subscript_expression "piVar14[uVar12 * 2]" identifier [ (binary_expression "uVar12 * 2" identifier * number_literal) ])) <= identifier) )) ;) })) (expression_statement "pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];" (assignment_expression "pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1]" identifier = (binary_expression "pcVar16 + (piVar14 + uVar18 * 2)[1]" identifier + (subscript_expression "(piVar14 + uVar18 * 2)[1]" (parenthesized_expression "(piVar14 + uVar18 * 2)" ( (binary_expression "piVar14 + uVar18 * 2" identifier + (binary_expression "uVar18 * 2" identifier * number_literal)) )) [ number_literal ]))) ;) (expression_statement "bVar8 = get_cie_encoding(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));" (assignment_expression "bVar8 = get_cie_encoding(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)))" identifier = (call_expression "get_cie_encoding(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)))" identifier (argument_list "(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)))" ( (binary_expression "pcVar23 + (4 - (long)*(int *)(pcVar23 + 4))" identifier + (parenthesized_expression "(4 - (long)*(int *)(pcVar23 + 4))" ( (binary_expression "4 - (long)*(int *)(pcVar23 + 4)" number_literal - (cast_expression "(long)*(int *)(pcVar23 + 4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(pcVar23 + 4)" * (cast_expression "(int *)(pcVar23 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar23 + 4)" ( (binary_expression "pcVar23 + 4" identifier + number_literal) )))))) ))) )))) ;) (expression_statement "uVar9 = size_of_encoded_value(bVar8);" (assignment_expression "uVar9 = size_of_encoded_value(bVar8)" identifier = (call_expression "size_of_encoded_value(bVar8)" identifier (argument_list "(bVar8)" ( identifier )))) ;) (expression_statement "read_encoded_value_with_base(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);" (call_expression "read_encoded_value_with_base(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68)" identifier (argument_list "(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68)" ( (binary_expression "bVar8 & 0xf" identifier & number_literal) , number_literal , (binary_expression "pcVar23 + (ulong)uVar9 + 8" (binary_expression "pcVar23 + (ulong)uVar9" identifier + (cast_expression "(ulong)uVar9" ( (type_descriptor "ulong" type_identifier) ) identifier)) + number_literal) , (pointer_expression "&local_68" & identifier) ))) ;) (expression_statement "iVar3 = piVar14[uVar18 * 2];" (assignment_expression "iVar3 = piVar14[uVar18 * 2]" identifier = (subscript_expression "piVar14[uVar18 * 2]" identifier [ (binary_expression "uVar18 * 2" identifier * number_literal) ])) ;) (if_statement "if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }" if (parenthesized_expression "((char *)*param_3 < pcVar16 + iVar3 + local_68)" ( (binary_expression "(char *)*param_3 < pcVar16 + iVar3 + local_68" (cast_expression "(char *)*param_3" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_3" * identifier)) < (binary_expression "pcVar16 + iVar3 + local_68" (binary_expression "pcVar16 + iVar3" identifier + identifier) + identifier)) )) (compound_statement "{\n        param_3[4] = (ulong)pcVar23;\n      }" { (expression_statement "param_3[4] = (ulong)pcVar23;" (assignment_expression "param_3[4] = (ulong)pcVar23" (subscript_expression "param_3[4]" identifier [ number_literal ]) = (cast_expression "(ulong)pcVar23" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) })) (expression_statement "param_3[3] = (ulong)(pcVar16 + iVar3);" (assignment_expression "param_3[3] = (ulong)(pcVar16 + iVar3)" (subscript_expression "param_3[3]" identifier [ number_literal ]) = (call_expression "(ulong)(pcVar16 + iVar3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(pcVar16 + iVar3)" ( (binary_expression "pcVar16 + iVar3" identifier + identifier) )))) ;) (return_statement "return 1;" return number_literal ;) })) }))) (expression_statement "local_60 = param_3[1];" (assignment_expression "local_60 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (expression_statement "local_68 = 0;" (assignment_expression "local_68 = 0" identifier = number_literal) ;) (expression_statement "local_48 = 4;" (assignment_expression "local_48 = 4" identifier = number_literal) ;) (expression_statement "local_58 = param_3[2];" (assignment_expression "local_58 = param_3[2]" identifier = (subscript_expression "param_3[2]" identifier [ number_literal ])) ;) (expression_statement "local_50 = local_78;" (assignment_expression "local_50 = local_78" identifier = identifier) ;) (expression_statement "uVar12 = linear_search_fdes(&local_68,local_78,pcVar23);" (assignment_expression "uVar12 = linear_search_fdes(&local_68,local_78,pcVar23)" identifier = (call_expression "linear_search_fdes(&local_68,local_78,pcVar23)" identifier (argument_list "(&local_68,local_78,pcVar23)" ( (pointer_expression "&local_68" & identifier) , identifier , identifier )))) ;) (expression_statement "param_3[4] = uVar12;" (assignment_expression "param_3[4] = uVar12" (subscript_expression "param_3[4]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar12 != 0) {\n    uVar7 = get_cie_encoding((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = base_from_cb_data(uVar7,param_3);\n    read_encoded_value_with_base(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }" if (parenthesized_expression "(uVar12 != 0)" ( (binary_expression "uVar12 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar7 = get_cie_encoding((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = base_from_cb_data(uVar7,param_3);\n    read_encoded_value_with_base(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }" { (expression_statement "uVar7 = get_cie_encoding((uVar12 + 4) - (long)*(int *)(uVar12 + 4));" (assignment_expression "uVar7 = get_cie_encoding((uVar12 + 4) - (long)*(int *)(uVar12 + 4))" identifier = (call_expression "get_cie_encoding((uVar12 + 4) - (long)*(int *)(uVar12 + 4))" identifier (argument_list "((uVar12 + 4) - (long)*(int *)(uVar12 + 4))" ( (binary_expression "(uVar12 + 4) - (long)*(int *)(uVar12 + 4)" (parenthesized_expression "(uVar12 + 4)" ( (binary_expression "uVar12 + 4" identifier + number_literal) )) - (cast_expression "(long)*(int *)(uVar12 + 4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(uVar12 + 4)" * (cast_expression "(int *)(uVar12 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar12 + 4)" ( (binary_expression "uVar12 + 4" identifier + number_literal) )))))) )))) ;) (expression_statement "uVar11 = base_from_cb_data(uVar7,param_3);" (assignment_expression "uVar11 = base_from_cb_data(uVar7,param_3)" identifier = (call_expression "base_from_cb_data(uVar7,param_3)" identifier (argument_list "(uVar7,param_3)" ( identifier , identifier )))) ;) (expression_statement "read_encoded_value_with_base(uVar7,uVar11,param_3[4] + 8,&local_70);" (call_expression "read_encoded_value_with_base(uVar7,uVar11,param_3[4] + 8,&local_70)" identifier (argument_list "(uVar7,uVar11,param_3[4] + 8,&local_70)" ( identifier , identifier , (binary_expression "param_3[4] + 8" (subscript_expression "param_3[4]" identifier [ number_literal ]) + number_literal) , (pointer_expression "&local_70" & identifier) ))) ;) (expression_statement "param_3[3] = local_70;" (assignment_expression "param_3[3] = local_70" (subscript_expression "param_3[3]" identifier [ number_literal ]) = identifier) ;) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit "undefined8 FUN_003693f0(ulong *param_1,ulong param_2,ulong *param_3)\n\n{\n  int *piVar1;\n  char cVar2;\n  int iVar3;\n  ulong *puVar4;\n  bool bVar5;\n  int *piVar6;\n  undefined1 uVar7;\n  byte bVar8;\n  uint uVar9;\n  ulong *puVar10;\n  undefined8 uVar11;\n  ulong uVar12;\n  undefined8 uVar13;\n  int *piVar14;\n  undefined8 *puVar15;\n  char *pcVar16;\n  int *piVar17;\n  ulong uVar18;\n  ulong uVar19;\n  int *piVar20;\n  ulong uVar21;\n  ulong *puVar22;\n  char *pcVar23;\n  ulong *local_80;\n  undefined8 local_78;\n  ulong local_70;\n  long local_68;\n  ulong local_60;\n  ulong local_58;\n  undefined8 local_50;\n  undefined8 local_48;\n  \n  puVar10 = DAT_0044bff0;\n  piVar14 = (int *)param_1[2];\n  uVar12 = *param_1;\n  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }\n  local_80 = (ulong *)0x0;\n  puVar22 = (ulong *)0x0;\nLAB_0036942c:\n  puVar10 = DAT_0044bff0;\n  if ((ushort)param_1[3] == 0) {\n    return 0;\n  }\n  uVar18 = 0;\n  uVar19 = 0;\n  bVar5 = false;\n  piVar20 = (int *)0x0;\n  piVar17 = (int *)0x0;\n  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;\n  do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);\n  if (!bVar5) {\n    return 0;\n  }\n  if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }\nLAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }\n  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);\n  if (*pcVar16 != '\x01') {\n    return 1;\n  }\n  cVar2 = pcVar16[1];\n  uVar11 = FUN_00368f00(cVar2,param_3);\n  uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78);\n  cVar2 = pcVar16[2];\n  if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }\n  local_60 = param_3[1];\n  local_68 = 0;\n  local_48 = 4;\n  local_58 = param_3[2];\n  local_50 = local_78;\n  uVar12 = FUN_00369260(&local_68,local_78,pcVar23);\n  param_3[4] = uVar12;\n  if (uVar12 != 0) {\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }\n  return 1;\n}\n\n" (function_definition "undefined8 FUN_003693f0(ulong *param_1,ulong param_2,ulong *param_3)\n\n{\n  int *piVar1;\n  char cVar2;\n  int iVar3;\n  ulong *puVar4;\n  bool bVar5;\n  int *piVar6;\n  undefined1 uVar7;\n  byte bVar8;\n  uint uVar9;\n  ulong *puVar10;\n  undefined8 uVar11;\n  ulong uVar12;\n  undefined8 uVar13;\n  int *piVar14;\n  undefined8 *puVar15;\n  char *pcVar16;\n  int *piVar17;\n  ulong uVar18;\n  ulong uVar19;\n  int *piVar20;\n  ulong uVar21;\n  ulong *puVar22;\n  char *pcVar23;\n  ulong *local_80;\n  undefined8 local_78;\n  ulong local_70;\n  long local_68;\n  ulong local_60;\n  ulong local_58;\n  undefined8 local_50;\n  undefined8 local_48;\n  \n  puVar10 = DAT_0044bff0;\n  piVar14 = (int *)param_1[2];\n  uVar12 = *param_1;\n  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }\n  local_80 = (ulong *)0x0;\n  puVar22 = (ulong *)0x0;\nLAB_0036942c:\n  puVar10 = DAT_0044bff0;\n  if ((ushort)param_1[3] == 0) {\n    return 0;\n  }\n  uVar18 = 0;\n  uVar19 = 0;\n  bVar5 = false;\n  piVar20 = (int *)0x0;\n  piVar17 = (int *)0x0;\n  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;\n  do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);\n  if (!bVar5) {\n    return 0;\n  }\n  if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }\nLAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }\n  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);\n  if (*pcVar16 != '\x01') {\n    return 1;\n  }\n  cVar2 = pcVar16[1];\n  uVar11 = FUN_00368f00(cVar2,param_3);\n  uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78);\n  cVar2 = pcVar16[2];\n  if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }\n  local_60 = param_3[1];\n  local_68 = 0;\n  local_48 = 4;\n  local_58 = param_3[2];\n  local_50 = local_78;\n  uVar12 = FUN_00369260(&local_68,local_78,pcVar23);\n  param_3[4] = uVar12;\n  if (uVar12 != 0) {\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }\n  return 1;\n}" type_identifier (function_declarator "FUN_003693f0(ulong *param_1,ulong param_2,ulong *param_3)" identifier (parameter_list "(ulong *param_1,ulong param_2,ulong *param_3)" ( (parameter_declaration "ulong *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "ulong param_2" type_identifier identifier) , (parameter_declaration "ulong *param_3" type_identifier (pointer_declarator "*param_3" * identifier)) ))) (compound_statement "{\n  int *piVar1;\n  char cVar2;\n  int iVar3;\n  ulong *puVar4;\n  bool bVar5;\n  int *piVar6;\n  undefined1 uVar7;\n  byte bVar8;\n  uint uVar9;\n  ulong *puVar10;\n  undefined8 uVar11;\n  ulong uVar12;\n  undefined8 uVar13;\n  int *piVar14;\n  undefined8 *puVar15;\n  char *pcVar16;\n  int *piVar17;\n  ulong uVar18;\n  ulong uVar19;\n  int *piVar20;\n  ulong uVar21;\n  ulong *puVar22;\n  char *pcVar23;\n  ulong *local_80;\n  undefined8 local_78;\n  ulong local_70;\n  long local_68;\n  ulong local_60;\n  ulong local_58;\n  undefined8 local_50;\n  undefined8 local_48;\n  \n  puVar10 = DAT_0044bff0;\n  piVar14 = (int *)param_1[2];\n  uVar12 = *param_1;\n  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }\n  local_80 = (ulong *)0x0;\n  puVar22 = (ulong *)0x0;\nLAB_0036942c:\n  puVar10 = DAT_0044bff0;\n  if ((ushort)param_1[3] == 0) {\n    return 0;\n  }\n  uVar18 = 0;\n  uVar19 = 0;\n  bVar5 = false;\n  piVar20 = (int *)0x0;\n  piVar17 = (int *)0x0;\n  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;\n  do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);\n  if (!bVar5) {\n    return 0;\n  }\n  if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }\nLAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }\n  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);\n  if (*pcVar16 != '\x01') {\n    return 1;\n  }\n  cVar2 = pcVar16[1];\n  uVar11 = FUN_00368f00(cVar2,param_3);\n  uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78);\n  cVar2 = pcVar16[2];\n  if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }\n  local_60 = param_3[1];\n  local_68 = 0;\n  local_48 = 4;\n  local_58 = param_3[2];\n  local_50 = local_78;\n  uVar12 = FUN_00369260(&local_68,local_78,pcVar23);\n  param_3[4] = uVar12;\n  if (uVar12 != 0) {\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }\n  return 1;\n}" { (declaration "int *piVar1;" primitive_type (pointer_declarator "*piVar1" * identifier) ;) (declaration "char cVar2;" primitive_type identifier ;) (declaration "int iVar3;" primitive_type identifier ;) (declaration "ulong *puVar4;" type_identifier (pointer_declarator "*puVar4" * identifier) ;) (declaration "bool bVar5;" primitive_type identifier ;) (declaration "int *piVar6;" primitive_type (pointer_declarator "*piVar6" * identifier) ;) (declaration "undefined1 uVar7;" type_identifier identifier ;) (declaration "byte bVar8;" type_identifier identifier ;) (declaration "uint uVar9;" type_identifier identifier ;) (declaration "ulong *puVar10;" type_identifier (pointer_declarator "*puVar10" * identifier) ;) (declaration "undefined8 uVar11;" type_identifier identifier ;) (declaration "ulong uVar12;" type_identifier identifier ;) (declaration "undefined8 uVar13;" type_identifier identifier ;) (declaration "int *piVar14;" primitive_type (pointer_declarator "*piVar14" * identifier) ;) (declaration "undefined8 *puVar15;" type_identifier (pointer_declarator "*puVar15" * identifier) ;) (declaration "char *pcVar16;" primitive_type (pointer_declarator "*pcVar16" * identifier) ;) (declaration "int *piVar17;" primitive_type (pointer_declarator "*piVar17" * identifier) ;) (declaration "ulong uVar18;" type_identifier identifier ;) (declaration "ulong uVar19;" type_identifier identifier ;) (declaration "int *piVar20;" primitive_type (pointer_declarator "*piVar20" * identifier) ;) (declaration "ulong uVar21;" type_identifier identifier ;) (declaration "ulong *puVar22;" type_identifier (pointer_declarator "*puVar22" * identifier) ;) (declaration "char *pcVar23;" primitive_type (pointer_declarator "*pcVar23" * identifier) ;) (declaration "ulong *local_80;" type_identifier (pointer_declarator "*local_80" * identifier) ;) (declaration "undefined8 local_78;" type_identifier identifier ;) (declaration "ulong local_70;" type_identifier identifier ;) (declaration "long local_68;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong local_60;" type_identifier identifier ;) (declaration "ulong local_58;" type_identifier identifier ;) (declaration "undefined8 local_50;" type_identifier identifier ;) (declaration "undefined8 local_48;" type_identifier identifier ;) (expression_statement "puVar10 = DAT_0044bff0;" (assignment_expression "puVar10 = DAT_0044bff0" identifier = identifier) ;) (expression_statement "piVar14 = (int *)param_1[2];" (assignment_expression "piVar14 = (int *)param_1[2]" identifier = (cast_expression "(int *)param_1[2]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[2]" identifier [ number_literal ]))) ;) (expression_statement "uVar12 = *param_1;" (assignment_expression "uVar12 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (if_statement "if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }" if (parenthesized_expression "(((int)param_3[5] == 0) || (param_2 < 0x30))" ( (binary_expression "((int)param_3[5] == 0) || (param_2 < 0x30)" (parenthesized_expression "((int)param_3[5] == 0)" ( (binary_expression "(int)param_3[5] == 0" (cast_expression "(int)param_3[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "param_3[5]" identifier [ number_literal ])) == number_literal) )) || (parenthesized_expression "(param_2 < 0x30)" ( (binary_expression "param_2 < 0x30" identifier < number_literal) ))) )) (compound_statement "{\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }" { (if_statement "if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }" if (parenthesized_expression "(param_2 < 0x1a)" ( (binary_expression "param_2 < 0x1a" identifier < number_literal) )) (compound_statement "{\n      return 0xffffffff;\n    }" { (return_statement "return 0xffffffff;" return number_literal ;) })) }) (else_clause "else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }" else (compound_statement "{\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }" { (if_statement "if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }" if (parenthesized_expression "((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5]))" ( (binary_expression "(param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])" (parenthesized_expression "(param_1[4] != DAT_0043e830)" ( (binary_expression "param_1[4] != DAT_0043e830" (subscript_expression "param_1[4]" identifier [ number_literal ]) != identifier) )) || (parenthesized_expression "(DAT_0044bfe8 != param_1[5])" ( (binary_expression "DAT_0044bfe8 != param_1[5]" identifier != (subscript_expression "param_1[5]" identifier [ number_literal ])) ))) )) (compound_statement "{\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }" { (expression_statement "puVar15 = &DAT_0044c030;" (assignment_expression "puVar15 = &DAT_0044c030" identifier = (pointer_expression "&DAT_0044c030" & identifier)) ;) (expression_statement "DAT_0043e830 = param_1[4];" (assignment_expression "DAT_0043e830 = param_1[4]" identifier = (subscript_expression "param_1[4]" identifier [ number_literal ])) ;) (expression_statement "DAT_0044bfe8 = param_1[5];" (assignment_expression "DAT_0044bfe8 = param_1[5]" identifier = (subscript_expression "param_1[5]" identifier [ number_literal ])) ;) (do_statement "do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);" do (compound_statement "{\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      }" { (expression_statement "puVar15[-6] = 0;" (assignment_expression "puVar15[-6] = 0" (subscript_expression "puVar15[-6]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar15[-5] = 0;" (assignment_expression "puVar15[-5] = 0" (subscript_expression "puVar15[-5]" identifier [ number_literal ]) = number_literal) ;) (expression_statement "puVar15[-1] = puVar15;" (assignment_expression "puVar15[-1] = puVar15" (subscript_expression "puVar15[-1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar15 = puVar15 + 6;" (assignment_expression "puVar15 = puVar15 + 6" identifier = (binary_expression "puVar15 + 6" identifier + number_literal)) ;) }) while (parenthesized_expression "(puVar15 != &DAT_0044c1b0)" ( (binary_expression "puVar15 != &DAT_0044c1b0" identifier != (pointer_expression "&DAT_0044c1b0" & identifier)) )) ;) (expression_statement "puVar22 = (ulong *)0x0;" (assignment_expression "puVar22 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "_DAT_0044c178 = 0;" (assignment_expression "_DAT_0044c178 = 0" identifier = number_literal) ;) (expression_statement "DAT_0044bff0 = &DAT_0044c000;" (assignment_expression "DAT_0044bff0 = &DAT_0044c000" identifier = (pointer_expression "&DAT_0044c000" & identifier)) ;) (expression_statement "*(undefined4 *)(param_3 + 5) = 0;" (assignment_expression "*(undefined4 *)(param_3 + 5) = 0" (pointer_expression "*(undefined4 *)(param_3 + 5)" * (cast_expression "(undefined4 *)(param_3 + 5)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(param_3 + 5)" ( (binary_expression "param_3 + 5" identifier + number_literal) )))) = number_literal) ;) (expression_statement "local_80 = (ulong *)0x0;" (assignment_expression "local_80 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_0036942c;" goto statement_identifier ;) })) (if_statement "if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }" if (parenthesized_expression "(DAT_0044bff0 != (ulong *)0x0)" ( (binary_expression "DAT_0044bff0 != (ulong *)0x0" identifier != (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }" { (expression_statement "uVar18 = *DAT_0044bff0;" (assignment_expression "uVar18 = *DAT_0044bff0" identifier = (pointer_expression "*DAT_0044bff0" * identifier)) ;) (expression_statement "uVar19 = DAT_0044bff0[1];" (assignment_expression "uVar19 = DAT_0044bff0[1]" identifier = (subscript_expression "DAT_0044bff0[1]" identifier [ number_literal ])) ;) (expression_statement "local_80 = (ulong *)0x0;" (assignment_expression "local_80 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "puVar22 = DAT_0044bff0;" (assignment_expression "puVar22 = DAT_0044bff0" identifier = identifier) ;) (while_statement "while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }" { (if_statement "if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }" if (parenthesized_expression "((uVar18 <= *param_3) && (*param_3 < uVar19))" ( (binary_expression "(uVar18 <= *param_3) && (*param_3 < uVar19)" (parenthesized_expression "(uVar18 <= *param_3)" ( (binary_expression "uVar18 <= *param_3" identifier <= (pointer_expression "*param_3" * identifier)) )) && (parenthesized_expression "(*param_3 < uVar19)" ( (binary_expression "*param_3 < uVar19" (pointer_expression "*param_3" * identifier) < identifier) ))) )) (compound_statement "{\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }" { (expression_statement "uVar12 = puVar22[2];" (assignment_expression "uVar12 = puVar22[2]" identifier = (subscript_expression "puVar22[2]" identifier [ number_literal ])) ;) (expression_statement "piVar17 = (int *)puVar22[3];" (assignment_expression "piVar17 = (int *)puVar22[3]" identifier = (cast_expression "(int *)puVar22[3]" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar22[3]" identifier [ number_literal ]))) ;) (if_statement "if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }" if (parenthesized_expression "(DAT_0044bff0 != puVar22)" ( (binary_expression "DAT_0044bff0 != puVar22" identifier != identifier) )) (compound_statement "{\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }" { (expression_statement "DAT_0044bff0 = puVar22;" (assignment_expression "DAT_0044bff0 = puVar22" identifier = identifier) ;) (expression_statement "local_80[5] = puVar22[5];" (assignment_expression "local_80[5] = puVar22[5]" (subscript_expression "local_80[5]" identifier [ number_literal ]) = (subscript_expression "puVar22[5]" identifier [ number_literal ])) ;) (expression_statement "puVar22[5] = (ulong)puVar10;" (assignment_expression "puVar22[5] = (ulong)puVar10" (subscript_expression "puVar22[5]" identifier [ number_literal ]) = (cast_expression "(ulong)puVar10" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) })) (goto_statement "goto LAB_00369508;" goto statement_identifier ;) })) (if_statement "if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;" if (parenthesized_expression "((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))" ( (binary_expression "(uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0)" (parenthesized_expression "(uVar18 == 0 && uVar19 == 0)" ( (binary_expression "uVar18 == 0 && uVar19 == 0" (binary_expression "uVar18 == 0" identifier == number_literal) && (binary_expression "uVar19 == 0" identifier == number_literal)) )) || (parenthesized_expression "(puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0)" ( (comma_expression "puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0" (assignment_expression "puVar4 = (ulong *)puVar22[5]" identifier = (cast_expression "(ulong *)puVar22[5]" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) (subscript_expression "puVar22[5]" identifier [ number_literal ]))) , (binary_expression "puVar4 == (ulong *)0x0" identifier == (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal))) ))) )) (break_statement "break;" break ;)) (expression_statement "uVar18 = *puVar4;" (assignment_expression "uVar18 = *puVar4" identifier = (pointer_expression "*puVar4" * identifier)) ;) (expression_statement "uVar19 = puVar4[1];" (assignment_expression "uVar19 = puVar4[1]" identifier = (subscript_expression "puVar4[1]" identifier [ number_literal ])) ;) (expression_statement "local_80 = puVar22;" (assignment_expression "local_80 = puVar22" identifier = identifier) ;) (expression_statement "puVar22 = puVar4;" (assignment_expression "puVar22 = puVar4" identifier = identifier) ;) })) (goto_statement "goto LAB_0036942c;" goto statement_identifier ;) })) }))) (expression_statement "local_80 = (ulong *)0x0;" (assignment_expression "local_80 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "puVar22 = (ulong *)0x0;" (assignment_expression "puVar22 = (ulong *)0x0" identifier = (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (labeled_statement "LAB_0036942c:\n  puVar10 = DAT_0044bff0;" statement_identifier : (expression_statement "puVar10 = DAT_0044bff0;" (assignment_expression "puVar10 = DAT_0044bff0" identifier = identifier) ;)) (if_statement "if ((ushort)param_1[3] == 0) {\n    return 0;\n  }" if (parenthesized_expression "((ushort)param_1[3] == 0)" ( (binary_expression "(ushort)param_1[3] == 0" (cast_expression "(ushort)param_1[3]" ( (type_descriptor "ushort" type_identifier) ) (subscript_expression "param_1[3]" identifier [ number_literal ])) == number_literal) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "uVar18 = 0;" (assignment_expression "uVar18 = 0" identifier = number_literal) ;) (expression_statement "uVar19 = 0;" (assignment_expression "uVar19 = 0" identifier = number_literal) ;) (expression_statement "bVar5 = false;" (assignment_expression "bVar5 = false" identifier = false) ;) (expression_statement "piVar20 = (int *)0x0;" (assignment_expression "piVar20 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "piVar17 = (int *)0x0;" (assignment_expression "piVar17 = (int *)0x0" identifier = (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (expression_statement "piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;" (assignment_expression "piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe" identifier = (binary_expression "piVar14 + (ulong)(ushort)param_1[3] * 0xe" identifier + (binary_expression "(ulong)(ushort)param_1[3] * 0xe" (cast_expression "(ulong)(ushort)param_1[3]" ( (type_descriptor "ulong" type_identifier) ) (cast_expression "(ushort)param_1[3]" ( (type_descriptor "ushort" type_identifier) ) (subscript_expression "param_1[3]" identifier [ number_literal ]))) * number_literal))) ;) (do_statement "do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);" do (compound_statement "{\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  }" { (expression_statement "iVar3 = *piVar14;" (assignment_expression "iVar3 = *piVar14" identifier = (pointer_expression "*piVar14" * identifier)) ;) (expression_statement "piVar6 = piVar17;" (assignment_expression "piVar6 = piVar17" identifier = identifier) ;) (if_statement "if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }" if (parenthesized_expression "(iVar3 == 1)" ( (binary_expression "iVar3 == 1" identifier == number_literal) )) (compound_statement "{\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }" { (expression_statement "uVar21 = *(long *)(piVar14 + 4) + uVar12;" (assignment_expression "uVar21 = *(long *)(piVar14 + 4) + uVar12" identifier = (binary_expression "*(long *)(piVar14 + 4) + uVar12" (pointer_expression "*(long *)(piVar14 + 4)" * (cast_expression "(long *)(piVar14 + 4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar14 + 4)" ( (binary_expression "piVar14 + 4" identifier + number_literal) )))) + identifier)) ;) (if_statement "if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }" if (parenthesized_expression "((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21))" ( (binary_expression "(uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)" (parenthesized_expression "(uVar21 <= *param_3)" ( (binary_expression "uVar21 <= *param_3" identifier <= (pointer_expression "*param_3" * identifier)) )) && (parenthesized_expression "(*param_3 < *(long *)(piVar14 + 10) + uVar21)" ( (binary_expression "*param_3 < *(long *)(piVar14 + 10) + uVar21" (pointer_expression "*param_3" * identifier) < (binary_expression "*(long *)(piVar14 + 10) + uVar21" (pointer_expression "*(long *)(piVar14 + 10)" * (cast_expression "(long *)(piVar14 + 10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar14 + 10)" ( (binary_expression "piVar14 + 10" identifier + number_literal) )))) + identifier)) ))) )) (compound_statement "{\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }" { (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" identifier = true) ;) (expression_statement "uVar18 = *(long *)(piVar14 + 10) + uVar21;" (assignment_expression "uVar18 = *(long *)(piVar14 + 10) + uVar21" identifier = (binary_expression "*(long *)(piVar14 + 10) + uVar21" (pointer_expression "*(long *)(piVar14 + 10)" * (cast_expression "(long *)(piVar14 + 10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar14 + 10)" ( (binary_expression "piVar14 + 10" identifier + number_literal) )))) + identifier)) ;) (expression_statement "uVar19 = uVar21;" (assignment_expression "uVar19 = uVar21" identifier = identifier) ;) })) }) (else_clause "else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }" else (compound_statement "{\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }" { (expression_statement "piVar6 = piVar14;" (assignment_expression "piVar6 = piVar14" identifier = identifier) ;) (if_statement "if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }" if (parenthesized_expression "((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2))" ( (binary_expression "(iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)" (parenthesized_expression "(iVar3 != 0x6474e550)" ( (binary_expression "iVar3 != 0x6474e550" identifier != number_literal) )) && (parenthesized_expression "(piVar6 = piVar17, iVar3 == 2)" ( (comma_expression "piVar6 = piVar17, iVar3 == 2" (assignment_expression "piVar6 = piVar17" identifier = identifier) , (binary_expression "iVar3 == 2" identifier == number_literal)) ))) )) (compound_statement "{\n        piVar20 = piVar14;\n      }" { (expression_statement "piVar20 = piVar14;" (assignment_expression "piVar20 = piVar14" identifier = identifier) ;) })) }))) (expression_statement "piVar17 = piVar6;" (assignment_expression "piVar17 = piVar6" identifier = identifier) ;) (expression_statement "piVar14 = piVar14 + 0xe;" (assignment_expression "piVar14 = piVar14 + 0xe" identifier = (binary_expression "piVar14 + 0xe" identifier + number_literal)) ;) }) while (parenthesized_expression "(piVar14 != piVar1)" ( (binary_expression "piVar14 != piVar1" identifier != identifier) )) ;) (if_statement "if (!bVar5) {\n    return 0;\n  }" if (parenthesized_expression "(!bVar5)" ( (unary_expression "!bVar5" ! identifier) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) })) (if_statement "if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }" if (parenthesized_expression "(0x2f < param_2)" ( (binary_expression "0x2f < param_2" number_literal < identifier) )) (compound_statement "{\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }" { (if_statement "if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }" if (parenthesized_expression "((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0))" ( (binary_expression "(puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)" (parenthesized_expression "(puVar22 != (ulong *)0x0)" ( (binary_expression "puVar22 != (ulong *)0x0" identifier != (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(local_80 != (ulong *)0x0)" ( (binary_expression "local_80 != (ulong *)0x0" identifier != (cast_expression "(ulong *)0x0" ( (type_descriptor "ulong *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) (compound_statement "{\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }" { (expression_statement "DAT_0044bff0 = puVar22;" (assignment_expression "DAT_0044bff0 = puVar22" identifier = identifier) ;) (expression_statement "local_80[5] = puVar22[5];" (assignment_expression "local_80[5] = puVar22[5]" (subscript_expression "local_80[5]" identifier [ number_literal ]) = (subscript_expression "puVar22[5]" identifier [ number_literal ])) ;) (expression_statement "puVar22[5] = (ulong)puVar10;" (assignment_expression "puVar22[5] = (ulong)puVar10" (subscript_expression "puVar22[5]" identifier [ number_literal ]) = (cast_expression "(ulong)puVar10" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "puVar10 = puVar22;" (assignment_expression "puVar10 = puVar22" identifier = identifier) ;) })) (expression_statement "puVar10[2] = uVar12;" (assignment_expression "puVar10[2] = uVar12" (subscript_expression "puVar10[2]" identifier [ number_literal ]) = identifier) ;) (expression_statement "puVar10[3] = (ulong)piVar17;" (assignment_expression "puVar10[3] = (ulong)piVar17" (subscript_expression "puVar10[3]" identifier [ number_literal ]) = (cast_expression "(ulong)piVar17" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "puVar10[4] = (ulong)piVar20;" (assignment_expression "puVar10[4] = (ulong)piVar20" (subscript_expression "puVar10[4]" identifier [ number_literal ]) = (cast_expression "(ulong)piVar20" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "*puVar10 = uVar19;" (assignment_expression "*puVar10 = uVar19" (pointer_expression "*puVar10" * identifier) = identifier) ;) (expression_statement "puVar10[1] = uVar18;" (assignment_expression "puVar10[1] = uVar18" (subscript_expression "puVar10[1]" identifier [ number_literal ]) = identifier) ;) })) (labeled_statement "LAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }" statement_identifier : (if_statement "if (piVar17 == (int *)0x0) {\n    return 0;\n  }" if (parenthesized_expression "(piVar17 == (int *)0x0)" ( (binary_expression "piVar17 == (int *)0x0" identifier == (cast_expression "(int *)0x0" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    return 0;\n  }" { (return_statement "return 0;" return number_literal ;) }))) (expression_statement "pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);" (assignment_expression "pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12)" identifier = (cast_expression "(char *)(*(long *)(piVar17 + 4) + uVar12)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(piVar17 + 4) + uVar12)" ( (binary_expression "*(long *)(piVar17 + 4) + uVar12" (pointer_expression "*(long *)(piVar17 + 4)" * (cast_expression "(long *)(piVar17 + 4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(piVar17 + 4)" ( (binary_expression "piVar17 + 4" identifier + number_literal) )))) + identifier) )))) ;) (if_statement "if (*pcVar16 != '\x01') {\n    return 1;\n  }" if (parenthesized_expression "(*pcVar16 != '\x01')" ( (binary_expression "*pcVar16 != '\x01'" (pointer_expression "*pcVar16" * identifier) != (char_literal "'\x01'" ' escape_sequence ')) )) (compound_statement "{\n    return 1;\n  }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "cVar2 = pcVar16[1];" (assignment_expression "cVar2 = pcVar16[1]" identifier = (subscript_expression "pcVar16[1]" identifier [ number_literal ])) ;) (expression_statement "uVar11 = FUN_00368f00(cVar2,param_3);" (assignment_expression "uVar11 = FUN_00368f00(cVar2,param_3)" identifier = (call_expression "FUN_00368f00(cVar2,param_3)" identifier (argument_list "(cVar2,param_3)" ( identifier , identifier )))) ;) (expression_statement "uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78);" (assignment_expression "uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78)" identifier = (call_expression "FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78)" identifier (argument_list "(cVar2,uVar11,pcVar16 + 4,&local_78)" ( identifier , identifier , (binary_expression "pcVar16 + 4" identifier + number_literal) , (pointer_expression "&local_78" & identifier) )))) ;) (expression_statement "cVar2 = pcVar16[2];" (assignment_expression "cVar2 = pcVar16[2]" identifier = (subscript_expression "pcVar16[2]" identifier [ number_literal ])) ;) (if_statement "if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }" if (parenthesized_expression "((cVar2 == -1) || (pcVar16[3] != ';'))" ( (binary_expression "(cVar2 == -1) || (pcVar16[3] != ';')" (parenthesized_expression "(cVar2 == -1)" ( (binary_expression "cVar2 == -1" identifier == number_literal) )) || (parenthesized_expression "(pcVar16[3] != ';')" ( (binary_expression "pcVar16[3] != ';'" (subscript_expression "pcVar16[3]" identifier [ number_literal ]) != (char_literal "';'" ' character ')) ))) )) (compound_statement "{\n    pcVar23 = (char *)*param_3;\n  }" { (expression_statement "pcVar23 = (char *)*param_3;" (assignment_expression "pcVar23 = (char *)*param_3" identifier = (cast_expression "(char *)*param_3" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_3" * identifier))) ;) }) (else_clause "else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }" else (compound_statement "{\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }" { (expression_statement "uVar13 = FUN_00368f00(cVar2,param_3);" (assignment_expression "uVar13 = FUN_00368f00(cVar2,param_3)" identifier = (call_expression "FUN_00368f00(cVar2,param_3)" identifier (argument_list "(cVar2,param_3)" ( identifier , identifier )))) ;) (expression_statement "piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);" (assignment_expression "piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70)" identifier = (cast_expression "(int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_00368f50(cVar2,uVar13,uVar11,&local_70)" identifier (argument_list "(cVar2,uVar13,uVar11,&local_70)" ( identifier , identifier , identifier , (pointer_expression "&local_70" & identifier) ))))) ;) (if_statement "if (local_70 == 0) {\n      return 1;\n    }" if (parenthesized_expression "(local_70 == 0)" ( (binary_expression "local_70 == 0" identifier == number_literal) )) (compound_statement "{\n      return 1;\n    }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "pcVar23 = (char *)*param_3;" (assignment_expression "pcVar23 = (char *)*param_3" identifier = (cast_expression "(char *)*param_3" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_3" * identifier))) ;) (expression_statement "uVar12 = (ulong)((uint)piVar14 & 3);" (assignment_expression "uVar12 = (ulong)((uint)piVar14 & 3)" identifier = (call_expression "(ulong)((uint)piVar14 & 3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((uint)piVar14 & 3)" ( (binary_expression "(uint)piVar14 & 3" (cast_expression "(uint)piVar14" ( (type_descriptor "uint" type_identifier) ) identifier) & number_literal) )))) ;) (if_statement "if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }" if (parenthesized_expression "(((ulong)piVar14 & 3) == 0)" ( (binary_expression "((ulong)piVar14 & 3) == 0" (parenthesized_expression "((ulong)piVar14 & 3)" ( (binary_expression "(ulong)piVar14 & 3" (cast_expression "(ulong)piVar14" ( (type_descriptor "ulong" type_identifier) ) identifier) & number_literal) )) == number_literal) )) (compound_statement "{\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }" { (if_statement "if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }" if (parenthesized_expression "(pcVar23 < pcVar16 + *piVar14)" ( (binary_expression "pcVar23 < pcVar16 + *piVar14" identifier < (binary_expression "pcVar16 + *piVar14" identifier + (pointer_expression "*piVar14" * identifier))) )) (compound_statement "{\n        return 1;\n      }" { (return_statement "return 1;" return number_literal ;) })) (expression_statement "uVar18 = local_70 - 1;" (assignment_expression "uVar18 = local_70 - 1" identifier = (binary_expression "local_70 - 1" identifier - number_literal)) ;) (expression_statement "uVar19 = uVar18;" (assignment_expression "uVar19 = uVar18" identifier = identifier) ;) (if_statement "if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }" if (parenthesized_expression "(pcVar23 < pcVar16 + piVar14[uVar18 * 2])" ( (binary_expression "pcVar23 < pcVar16 + piVar14[uVar18 * 2]" identifier < (binary_expression "pcVar16 + piVar14[uVar18 * 2]" identifier + (subscript_expression "piVar14[uVar18 * 2]" identifier [ (binary_expression "uVar18 * 2" identifier * number_literal) ]))) )) (compound_statement "{\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }" { (do_statement "do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);" do (compound_statement "{\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        }" { (if_statement "if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }" if (parenthesized_expression "(uVar19 <= uVar12)" ( (binary_expression "uVar19 <= uVar12" identifier <= identifier) )) (compound_statement "{\nLAB_003697f5:\n                    \n            abort();\n          }" { (labeled_statement "LAB_003697f5:\n                    \n            abort();" statement_identifier : (expression_statement "abort();" (call_expression "abort()" identifier (argument_list "()" ( ))) ;)) })) (expression_statement "uVar21 = uVar12 + uVar19 >> 1;" (assignment_expression "uVar21 = uVar12 + uVar19 >> 1" identifier = (binary_expression "uVar12 + uVar19 >> 1" (binary_expression "uVar12 + uVar19" identifier + identifier) >> number_literal)) ;) (expression_statement "iVar3 = piVar14[uVar21 * 2];" (assignment_expression "iVar3 = piVar14[uVar21 * 2]" identifier = (subscript_expression "piVar14[uVar21 * 2]" identifier [ (binary_expression "uVar21 * 2" identifier * number_literal) ])) ;) (while_statement "while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }" while (parenthesized_expression "(uVar18 = uVar21, pcVar23 < pcVar16 + iVar3)" ( (comma_expression "uVar18 = uVar21, pcVar23 < pcVar16 + iVar3" (assignment_expression "uVar18 = uVar21" identifier = identifier) , (binary_expression "pcVar23 < pcVar16 + iVar3" identifier < (binary_expression "pcVar16 + iVar3" identifier + identifier))) )) (compound_statement "{\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }" { (if_statement "if (uVar18 <= uVar12) goto LAB_003697f5;" if (parenthesized_expression "(uVar18 <= uVar12)" ( (binary_expression "uVar18 <= uVar12" identifier <= identifier) )) (goto_statement "goto LAB_003697f5;" goto statement_identifier ;)) (expression_statement "uVar21 = uVar12 + uVar18 >> 1;" (assignment_expression "uVar21 = uVar12 + uVar18 >> 1" identifier = (binary_expression "uVar12 + uVar18 >> 1" (binary_expression "uVar12 + uVar18" identifier + identifier) >> number_literal)) ;) (expression_statement "iVar3 = piVar14[uVar21 * 2];" (assignment_expression "iVar3 = piVar14[uVar21 * 2]" identifier = (subscript_expression "piVar14[uVar21 * 2]" identifier [ (binary_expression "uVar21 * 2" identifier * number_literal) ])) ;) (expression_statement "uVar19 = uVar18;" (assignment_expression "uVar19 = uVar18" identifier = identifier) ;) })) (expression_statement "uVar12 = uVar18 + 1;" (assignment_expression "uVar12 = uVar18 + 1" identifier = (binary_expression "uVar18 + 1" identifier + number_literal)) ;) }) while (parenthesized_expression "(pcVar16 + piVar14[uVar12 * 2] <= pcVar23)" ( (binary_expression "pcVar16 + piVar14[uVar12 * 2] <= pcVar23" (binary_expression "pcVar16 + piVar14[uVar12 * 2]" identifier + (subscript_expression "piVar14[uVar12 * 2]" identifier [ (binary_expression "uVar12 * 2" identifier * number_literal) ])) <= identifier) )) ;) })) (expression_statement "pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];" (assignment_expression "pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1]" identifier = (binary_expression "pcVar16 + (piVar14 + uVar18 * 2)[1]" identifier + (subscript_expression "(piVar14 + uVar18 * 2)[1]" (parenthesized_expression "(piVar14 + uVar18 * 2)" ( (binary_expression "piVar14 + uVar18 * 2" identifier + (binary_expression "uVar18 * 2" identifier * number_literal)) )) [ number_literal ]))) ;) (expression_statement "bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));" (assignment_expression "bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)))" identifier = (call_expression "FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)))" identifier (argument_list "(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)))" ( (binary_expression "pcVar23 + (4 - (long)*(int *)(pcVar23 + 4))" identifier + (parenthesized_expression "(4 - (long)*(int *)(pcVar23 + 4))" ( (binary_expression "4 - (long)*(int *)(pcVar23 + 4)" number_literal - (cast_expression "(long)*(int *)(pcVar23 + 4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(pcVar23 + 4)" * (cast_expression "(int *)(pcVar23 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(pcVar23 + 4)" ( (binary_expression "pcVar23 + 4" identifier + number_literal) )))))) ))) )))) ;) (expression_statement "uVar9 = FUN_00368e50(bVar8);" (assignment_expression "uVar9 = FUN_00368e50(bVar8)" identifier = (call_expression "FUN_00368e50(bVar8)" identifier (argument_list "(bVar8)" ( identifier )))) ;) (expression_statement "FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);" (call_expression "FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68)" identifier (argument_list "(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68)" ( (binary_expression "bVar8 & 0xf" identifier & number_literal) , number_literal , (binary_expression "pcVar23 + (ulong)uVar9 + 8" (binary_expression "pcVar23 + (ulong)uVar9" identifier + (cast_expression "(ulong)uVar9" ( (type_descriptor "ulong" type_identifier) ) identifier)) + number_literal) , (pointer_expression "&local_68" & identifier) ))) ;) (expression_statement "iVar3 = piVar14[uVar18 * 2];" (assignment_expression "iVar3 = piVar14[uVar18 * 2]" identifier = (subscript_expression "piVar14[uVar18 * 2]" identifier [ (binary_expression "uVar18 * 2" identifier * number_literal) ])) ;) (if_statement "if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }" if (parenthesized_expression "((char *)*param_3 < pcVar16 + iVar3 + local_68)" ( (binary_expression "(char *)*param_3 < pcVar16 + iVar3 + local_68" (cast_expression "(char *)*param_3" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "*param_3" * identifier)) < (binary_expression "pcVar16 + iVar3 + local_68" (binary_expression "pcVar16 + iVar3" identifier + identifier) + identifier)) )) (compound_statement "{\n        param_3[4] = (ulong)pcVar23;\n      }" { (expression_statement "param_3[4] = (ulong)pcVar23;" (assignment_expression "param_3[4] = (ulong)pcVar23" (subscript_expression "param_3[4]" identifier [ number_literal ]) = (cast_expression "(ulong)pcVar23" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) })) (expression_statement "param_3[3] = (ulong)(pcVar16 + iVar3);" (assignment_expression "param_3[3] = (ulong)(pcVar16 + iVar3)" (subscript_expression "param_3[3]" identifier [ number_literal ]) = (call_expression "(ulong)(pcVar16 + iVar3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(pcVar16 + iVar3)" ( (binary_expression "pcVar16 + iVar3" identifier + identifier) )))) ;) (return_statement "return 1;" return number_literal ;) })) }))) (expression_statement "local_60 = param_3[1];" (assignment_expression "local_60 = param_3[1]" identifier = (subscript_expression "param_3[1]" identifier [ number_literal ])) ;) (expression_statement "local_68 = 0;" (assignment_expression "local_68 = 0" identifier = number_literal) ;) (expression_statement "local_48 = 4;" (assignment_expression "local_48 = 4" identifier = number_literal) ;) (expression_statement "local_58 = param_3[2];" (assignment_expression "local_58 = param_3[2]" identifier = (subscript_expression "param_3[2]" identifier [ number_literal ])) ;) (expression_statement "local_50 = local_78;" (assignment_expression "local_50 = local_78" identifier = identifier) ;) (expression_statement "uVar12 = FUN_00369260(&local_68,local_78,pcVar23);" (assignment_expression "uVar12 = FUN_00369260(&local_68,local_78,pcVar23)" identifier = (call_expression "FUN_00369260(&local_68,local_78,pcVar23)" identifier (argument_list "(&local_68,local_78,pcVar23)" ( (pointer_expression "&local_68" & identifier) , identifier , identifier )))) ;) (expression_statement "param_3[4] = uVar12;" (assignment_expression "param_3[4] = uVar12" (subscript_expression "param_3[4]" identifier [ number_literal ]) = identifier) ;) (if_statement "if (uVar12 != 0) {\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }" if (parenthesized_expression "(uVar12 != 0)" ( (binary_expression "uVar12 != 0" identifier != number_literal) )) (compound_statement "{\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }" { (expression_statement "uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));" (assignment_expression "uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4))" identifier = (call_expression "FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4))" identifier (argument_list "((uVar12 + 4) - (long)*(int *)(uVar12 + 4))" ( (binary_expression "(uVar12 + 4) - (long)*(int *)(uVar12 + 4)" (parenthesized_expression "(uVar12 + 4)" ( (binary_expression "uVar12 + 4" identifier + number_literal) )) - (cast_expression "(long)*(int *)(uVar12 + 4)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "*(int *)(uVar12 + 4)" * (cast_expression "(int *)(uVar12 + 4)" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(uVar12 + 4)" ( (binary_expression "uVar12 + 4" identifier + number_literal) )))))) )))) ;) (expression_statement "uVar11 = FUN_00368f00(uVar7,param_3);" (assignment_expression "uVar11 = FUN_00368f00(uVar7,param_3)" identifier = (call_expression "FUN_00368f00(uVar7,param_3)" identifier (argument_list "(uVar7,param_3)" ( identifier , identifier )))) ;) (expression_statement "FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);" (call_expression "FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70)" identifier (argument_list "(uVar7,uVar11,param_3[4] + 8,&local_70)" ( identifier , identifier , (binary_expression "param_3[4] + 8" (subscript_expression "param_3[4]" identifier [ number_literal ]) + number_literal) , (pointer_expression "&local_70" & identifier) ))) ;) (expression_statement "param_3[3] = local_70;" (assignment_expression "param_3[3] = local_70" (subscript_expression "param_3[3]" identifier [ number_literal ]) = identifier) ;) })) (return_statement "return 1;" return number_literal ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == LIT) )) || (parenthesized_expression ( (binary_expression IDENT < LIT) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (return_statement return LIT ;) })) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != IDENT) )) || (parenthesized_expression ( (binary_expression IDENT != (subscript_expression IDENT [ LIT ])) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (pointer_expression & IDENT)) )) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression & IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= (pointer_expression * IDENT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != IDENT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) })) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression IDENT == LIT) && (binary_expression IDENT == LIT)) )) || (parenthesized_expression ( (comma_expression (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) , (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT))) ))) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (goto_statement goto statement_identifier ;) })) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = IDENT) ;)) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ]))) * LIT))) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT <= (pointer_expression * IDENT)) )) && (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) < (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT == LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) }))) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != IDENT) )) ;) (if_statement if (parenthesized_expression ( (unary_expression ! IDENT) )) (compound_statement { (return_statement return LIT ;) })) (if_statement if (parenthesized_expression ( (binary_expression LIT < IDENT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (return_statement return LIT ;) }))) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) + IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != (char_literal ' escape_sequence ')) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression IDENT + LIT) , (pointer_expression & IDENT) )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != (char_literal ' character ')) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , (pointer_expression & IDENT) ))))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT))) ;) (expression_statement (assignment_expression IDENT = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) & LIT) )) == LIT) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + (pointer_expression * IDENT))) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < (binary_expression IDENT + (subscript_expression IDENT [ (binary_expression IDENT * LIT) ]))) )) (compound_statement { (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (call_expression IDENT (argument_list ( ))) ;)) })) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression IDENT * LIT) ])) ;) (while_statement while (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression IDENT < (binary_expression IDENT + IDENT))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT <= IDENT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + IDENT) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression IDENT * LIT) ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) }) while (parenthesized_expression ( (binary_expression (binary_expression IDENT + (subscript_expression IDENT [ (binary_expression IDENT * LIT) ])) <= IDENT) )) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + (subscript_expression (parenthesized_expression ( (binary_expression IDENT + (binary_expression IDENT * LIT)) )) [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression IDENT + (parenthesized_expression ( (binary_expression LIT - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) ))) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( (binary_expression IDENT & LIT) , LIT , (binary_expression (binary_expression IDENT + (cast_expression ( (type_descriptor TYPE) ) IDENT)) + LIT) , (pointer_expression & IDENT) ))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ (binary_expression IDENT * LIT) ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (pointer_expression * IDENT)) < (binary_expression (binary_expression IDENT + IDENT) + IDENT)) )) (compound_statement { (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) })) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT + IDENT) )))) ;) (return_statement return LIT ;) })) }))) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , IDENT , IDENT )))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (parenthesized_expression ( (binary_expression IDENT + LIT) )) - (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))))) )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , (binary_expression (subscript_expression IDENT [ LIT ]) + LIT) , (pointer_expression & IDENT) ))) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })) (return_statement return LIT ;) })))
(function_definition "undefined8 FUN_003693f0(ulong *param_1,ulong param_2,ulong *param_3)\n\n{\n  int *piVar1;\n  char cVar2;\n  int iVar3;\n  ulong *puVar4;\n  bool bVar5;\n  int *piVar6;\n  undefined1 uVar7;\n  byte bVar8;\n  uint uVar9;\n  ulong *puVar10;\n  undefined8 uVar11;\n  ulong uVar12;\n  undefined8 uVar13;\n  int *piVar14;\n  undefined8 *puVar15;\n  char *pcVar16;\n  int *piVar17;\n  ulong uVar18;\n  ulong uVar19;\n  int *piVar20;\n  ulong uVar21;\n  ulong *puVar22;\n  char *pcVar23;\n  ulong *local_80;\n  undefined8 local_78;\n  ulong local_70;\n  long local_68;\n  ulong local_60;\n  ulong local_58;\n  undefined8 local_50;\n  undefined8 local_48;\n  \n  puVar10 = DAT_0044bff0;\n  piVar14 = (int *)param_1[2];\n  uVar12 = *param_1;\n  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }\n  local_80 = (ulong *)0x0;\n  puVar22 = (ulong *)0x0;\nLAB_0036942c:\n  puVar10 = DAT_0044bff0;\n  if ((ushort)param_1[3] == 0) {\n    return 0;\n  }\n  uVar18 = 0;\n  uVar19 = 0;\n  bVar5 = false;\n  piVar20 = (int *)0x0;\n  piVar17 = (int *)0x0;\n  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;\n  do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);\n  if (!bVar5) {\n    return 0;\n  }\n  if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }\nLAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }\n  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);\n  if (*pcVar16 != '\x01') {\n    return 1;\n  }\n  cVar2 = pcVar16[1];\n  uVar11 = FUN_00368f00(cVar2,param_3);\n  uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78);\n  cVar2 = pcVar16[2];\n  if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }\n  local_60 = param_3[1];\n  local_68 = 0;\n  local_48 = 4;\n  local_58 = param_3[2];\n  local_50 = local_78;\n  uVar12 = FUN_00369260(&local_68,local_78,pcVar23);\n  param_3[4] = uVar12;\n  if (uVar12 != 0) {\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }\n  return 1;\n}" (type_identifier "undefined8") (function_declarator "FUN_003693f0(ulong *param_1,ulong param_2,ulong *param_3)" (identifier "FUN_003693f0") (parameter_list "(ulong *param_1,ulong param_2,ulong *param_3)" (( "(") (parameter_declaration "ulong *param_1" (type_identifier "ulong") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "ulong param_2" (type_identifier "ulong") (identifier "param_2")) (, ",") (parameter_declaration "ulong *param_3" (type_identifier "ulong") (pointer_declarator "*param_3" (* "*") (identifier "param_3"))) () ")"))) (compound_statement "{\n  int *piVar1;\n  char cVar2;\n  int iVar3;\n  ulong *puVar4;\n  bool bVar5;\n  int *piVar6;\n  undefined1 uVar7;\n  byte bVar8;\n  uint uVar9;\n  ulong *puVar10;\n  undefined8 uVar11;\n  ulong uVar12;\n  undefined8 uVar13;\n  int *piVar14;\n  undefined8 *puVar15;\n  char *pcVar16;\n  int *piVar17;\n  ulong uVar18;\n  ulong uVar19;\n  int *piVar20;\n  ulong uVar21;\n  ulong *puVar22;\n  char *pcVar23;\n  ulong *local_80;\n  undefined8 local_78;\n  ulong local_70;\n  long local_68;\n  ulong local_60;\n  ulong local_58;\n  undefined8 local_50;\n  undefined8 local_48;\n  \n  puVar10 = DAT_0044bff0;\n  piVar14 = (int *)param_1[2];\n  uVar12 = *param_1;\n  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }\n  local_80 = (ulong *)0x0;\n  puVar22 = (ulong *)0x0;\nLAB_0036942c:\n  puVar10 = DAT_0044bff0;\n  if ((ushort)param_1[3] == 0) {\n    return 0;\n  }\n  uVar18 = 0;\n  uVar19 = 0;\n  bVar5 = false;\n  piVar20 = (int *)0x0;\n  piVar17 = (int *)0x0;\n  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;\n  do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);\n  if (!bVar5) {\n    return 0;\n  }\n  if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }\nLAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }\n  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);\n  if (*pcVar16 != '\x01') {\n    return 1;\n  }\n  cVar2 = pcVar16[1];\n  uVar11 = FUN_00368f00(cVar2,param_3);\n  uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78);\n  cVar2 = pcVar16[2];\n  if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }\n  local_60 = param_3[1];\n  local_68 = 0;\n  local_48 = 4;\n  local_58 = param_3[2];\n  local_50 = local_78;\n  uVar12 = FUN_00369260(&local_68,local_78,pcVar23);\n  param_3[4] = uVar12;\n  if (uVar12 != 0) {\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }\n  return 1;\n}" ({ "{") (declaration "int *piVar1;" (primitive_type "int") (pointer_declarator "*piVar1" (* "*") (identifier "piVar1")) (; ";")) (declaration "char cVar2;" (primitive_type "char") (identifier "cVar2") (; ";")) (declaration "int iVar3;" (primitive_type "int") (identifier "iVar3") (; ";")) (declaration "ulong *puVar4;" (type_identifier "ulong") (pointer_declarator "*puVar4" (* "*") (identifier "puVar4")) (; ";")) (declaration "bool bVar5;" (primitive_type "bool") (identifier "bVar5") (; ";")) (declaration "int *piVar6;" (primitive_type "int") (pointer_declarator "*piVar6" (* "*") (identifier "piVar6")) (; ";")) (declaration "undefined1 uVar7;" (type_identifier "undefined1") (identifier "uVar7") (; ";")) (declaration "byte bVar8;" (type_identifier "byte") (identifier "bVar8") (; ";")) (declaration "uint uVar9;" (type_identifier "uint") (identifier "uVar9") (; ";")) (declaration "ulong *puVar10;" (type_identifier "ulong") (pointer_declarator "*puVar10" (* "*") (identifier "puVar10")) (; ";")) (declaration "undefined8 uVar11;" (type_identifier "undefined8") (identifier "uVar11") (; ";")) (declaration "ulong uVar12;" (type_identifier "ulong") (identifier "uVar12") (; ";")) (declaration "undefined8 uVar13;" (type_identifier "undefined8") (identifier "uVar13") (; ";")) (declaration "int *piVar14;" (primitive_type "int") (pointer_declarator "*piVar14" (* "*") (identifier "piVar14")) (; ";")) (declaration "undefined8 *puVar15;" (type_identifier "undefined8") (pointer_declarator "*puVar15" (* "*") (identifier "puVar15")) (; ";")) (declaration "char *pcVar16;" (primitive_type "char") (pointer_declarator "*pcVar16" (* "*") (identifier "pcVar16")) (; ";")) (declaration "int *piVar17;" (primitive_type "int") (pointer_declarator "*piVar17" (* "*") (identifier "piVar17")) (; ";")) (declaration "ulong uVar18;" (type_identifier "ulong") (identifier "uVar18") (; ";")) (declaration "ulong uVar19;" (type_identifier "ulong") (identifier "uVar19") (; ";")) (declaration "int *piVar20;" (primitive_type "int") (pointer_declarator "*piVar20" (* "*") (identifier "piVar20")) (; ";")) (declaration "ulong uVar21;" (type_identifier "ulong") (identifier "uVar21") (; ";")) (declaration "ulong *puVar22;" (type_identifier "ulong") (pointer_declarator "*puVar22" (* "*") (identifier "puVar22")) (; ";")) (declaration "char *pcVar23;" (primitive_type "char") (pointer_declarator "*pcVar23" (* "*") (identifier "pcVar23")) (; ";")) (declaration "ulong *local_80;" (type_identifier "ulong") (pointer_declarator "*local_80" (* "*") (identifier "local_80")) (; ";")) (declaration "undefined8 local_78;" (type_identifier "undefined8") (identifier "local_78") (; ";")) (declaration "ulong local_70;" (type_identifier "ulong") (identifier "local_70") (; ";")) (declaration "long local_68;" (sized_type_specifier "long" (long "long")) (identifier "local_68") (; ";")) (declaration "ulong local_60;" (type_identifier "ulong") (identifier "local_60") (; ";")) (declaration "ulong local_58;" (type_identifier "ulong") (identifier "local_58") (; ";")) (declaration "undefined8 local_50;" (type_identifier "undefined8") (identifier "local_50") (; ";")) (declaration "undefined8 local_48;" (type_identifier "undefined8") (identifier "local_48") (; ";")) (expression_statement "puVar10 = DAT_0044bff0;" (assignment_expression "puVar10 = DAT_0044bff0" (identifier "puVar10") (= "=") (identifier "DAT_0044bff0")) (; ";")) (expression_statement "piVar14 = (int *)param_1[2];" (assignment_expression "piVar14 = (int *)param_1[2]" (identifier "piVar14") (= "=") (cast_expression "(int *)param_1[2]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[2]" (identifier "param_1") ([ "[") (number_literal "2") (] "]")))) (; ";")) (expression_statement "uVar12 = *param_1;" (assignment_expression "uVar12 = *param_1" (identifier "uVar12") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (if_statement "if (((int)param_3[5] == 0) || (param_2 < 0x30)) {\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }\n  else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }" (if "if") (parenthesized_expression "(((int)param_3[5] == 0) || (param_2 < 0x30))" (( "(") (binary_expression "((int)param_3[5] == 0) || (param_2 < 0x30)" (parenthesized_expression "((int)param_3[5] == 0)" (( "(") (binary_expression "(int)param_3[5] == 0" (cast_expression "(int)param_3[5]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "param_3[5]" (identifier "param_3") ([ "[") (number_literal "5") (] "]"))) (== "==") (number_literal "0")) () ")")) (|| "||") (parenthesized_expression "(param_2 < 0x30)" (( "(") (binary_expression "param_2 < 0x30" (identifier "param_2") (< "<") (number_literal "0x30")) () ")"))) () ")")) (compound_statement "{\n    if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }\n  }" ({ "{") (if_statement "if (param_2 < 0x1a) {\n      return 0xffffffff;\n    }" (if "if") (parenthesized_expression "(param_2 < 0x1a)" (( "(") (binary_expression "param_2 < 0x1a" (identifier "param_2") (< "<") (number_literal "0x1a")) () ")")) (compound_statement "{\n      return 0xffffffff;\n    }" ({ "{") (return_statement "return 0xffffffff;" (return "return") (number_literal "0xffffffff") (; ";")) (} "}"))) (} "}")) (else_clause "else {\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }" (else "else") (compound_statement "{\n    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }\n    if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }\n  }" ({ "{") (if_statement "if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }" (if "if") (parenthesized_expression "((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5]))" (( "(") (binary_expression "(param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])" (parenthesized_expression "(param_1[4] != DAT_0043e830)" (( "(") (binary_expression "param_1[4] != DAT_0043e830" (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]")) (!= "!=") (identifier "DAT_0043e830")) () ")")) (|| "||") (parenthesized_expression "(DAT_0044bfe8 != param_1[5])" (( "(") (binary_expression "DAT_0044bfe8 != param_1[5]" (identifier "DAT_0044bfe8") (!= "!=") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) () ")"))) () ")")) (compound_statement "{\n      puVar15 = &DAT_0044c030;\n      DAT_0043e830 = param_1[4];\n      DAT_0044bfe8 = param_1[5];\n      do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);\n      puVar22 = (ulong *)0x0;\n      _DAT_0044c178 = 0;\n      DAT_0044bff0 = &DAT_0044c000;\n      *(undefined4 *)(param_3 + 5) = 0;\n      local_80 = (ulong *)0x0;\n      goto LAB_0036942c;\n    }" ({ "{") (expression_statement "puVar15 = &DAT_0044c030;" (assignment_expression "puVar15 = &DAT_0044c030" (identifier "puVar15") (= "=") (pointer_expression "&DAT_0044c030" (& "&") (identifier "DAT_0044c030"))) (; ";")) (expression_statement "DAT_0043e830 = param_1[4];" (assignment_expression "DAT_0043e830 = param_1[4]" (identifier "DAT_0043e830") (= "=") (subscript_expression "param_1[4]" (identifier "param_1") ([ "[") (number_literal "4") (] "]"))) (; ";")) (expression_statement "DAT_0044bfe8 = param_1[5];" (assignment_expression "DAT_0044bfe8 = param_1[5]" (identifier "DAT_0044bfe8") (= "=") (subscript_expression "param_1[5]" (identifier "param_1") ([ "[") (number_literal "5") (] "]"))) (; ";")) (do_statement "do {\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      } while (puVar15 != &DAT_0044c1b0);" (do "do") (compound_statement "{\n        puVar15[-6] = 0;\n        puVar15[-5] = 0;\n        puVar15[-1] = puVar15;\n        puVar15 = puVar15 + 6;\n      }" ({ "{") (expression_statement "puVar15[-6] = 0;" (assignment_expression "puVar15[-6] = 0" (subscript_expression "puVar15[-6]" (identifier "puVar15") ([ "[") (number_literal "-6") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar15[-5] = 0;" (assignment_expression "puVar15[-5] = 0" (subscript_expression "puVar15[-5]" (identifier "puVar15") ([ "[") (number_literal "-5") (] "]")) (= "=") (number_literal "0")) (; ";")) (expression_statement "puVar15[-1] = puVar15;" (assignment_expression "puVar15[-1] = puVar15" (subscript_expression "puVar15[-1]" (identifier "puVar15") ([ "[") (number_literal "-1") (] "]")) (= "=") (identifier "puVar15")) (; ";")) (expression_statement "puVar15 = puVar15 + 6;" (assignment_expression "puVar15 = puVar15 + 6" (identifier "puVar15") (= "=") (binary_expression "puVar15 + 6" (identifier "puVar15") (+ "+") (number_literal "6"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(puVar15 != &DAT_0044c1b0)" (( "(") (binary_expression "puVar15 != &DAT_0044c1b0" (identifier "puVar15") (!= "!=") (pointer_expression "&DAT_0044c1b0" (& "&") (identifier "DAT_0044c1b0"))) () ")")) (; ";")) (expression_statement "puVar22 = (ulong *)0x0;" (assignment_expression "puVar22 = (ulong *)0x0" (identifier "puVar22") (= "=") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "_DAT_0044c178 = 0;" (assignment_expression "_DAT_0044c178 = 0" (identifier "_DAT_0044c178") (= "=") (number_literal "0")) (; ";")) (expression_statement "DAT_0044bff0 = &DAT_0044c000;" (assignment_expression "DAT_0044bff0 = &DAT_0044c000" (identifier "DAT_0044bff0") (= "=") (pointer_expression "&DAT_0044c000" (& "&") (identifier "DAT_0044c000"))) (; ";")) (expression_statement "*(undefined4 *)(param_3 + 5) = 0;" (assignment_expression "*(undefined4 *)(param_3 + 5) = 0" (pointer_expression "*(undefined4 *)(param_3 + 5)" (* "*") (cast_expression "(undefined4 *)(param_3 + 5)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(param_3 + 5)" (( "(") (binary_expression "param_3 + 5" (identifier "param_3") (+ "+") (number_literal "5")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_80 = (ulong *)0x0;" (assignment_expression "local_80 = (ulong *)0x0" (identifier "local_80") (= "=") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (goto_statement "goto LAB_0036942c;" (goto "goto") (statement_identifier "LAB_0036942c") (; ";")) (} "}"))) (if_statement "if (DAT_0044bff0 != (ulong *)0x0) {\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }" (if "if") (parenthesized_expression "(DAT_0044bff0 != (ulong *)0x0)" (( "(") (binary_expression "DAT_0044bff0 != (ulong *)0x0" (identifier "DAT_0044bff0") (!= "!=") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n      uVar18 = *DAT_0044bff0;\n      uVar19 = DAT_0044bff0[1];\n      local_80 = (ulong *)0x0;\n      puVar22 = DAT_0044bff0;\n      while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }\n      goto LAB_0036942c;\n    }" ({ "{") (expression_statement "uVar18 = *DAT_0044bff0;" (assignment_expression "uVar18 = *DAT_0044bff0" (identifier "uVar18") (= "=") (pointer_expression "*DAT_0044bff0" (* "*") (identifier "DAT_0044bff0"))) (; ";")) (expression_statement "uVar19 = DAT_0044bff0[1];" (assignment_expression "uVar19 = DAT_0044bff0[1]" (identifier "uVar19") (= "=") (subscript_expression "DAT_0044bff0[1]" (identifier "DAT_0044bff0") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "local_80 = (ulong *)0x0;" (assignment_expression "local_80 = (ulong *)0x0" (identifier "local_80") (= "=") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "puVar22 = DAT_0044bff0;" (assignment_expression "puVar22 = DAT_0044bff0" (identifier "puVar22") (= "=") (identifier "DAT_0044bff0")) (; ";")) (while_statement "while( true ) {\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }\n        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;\n        uVar18 = *puVar4;\n        uVar19 = puVar4[1];\n        local_80 = puVar22;\n        puVar22 = puVar4;\n      }" ({ "{") (if_statement "if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }" (if "if") (parenthesized_expression "((uVar18 <= *param_3) && (*param_3 < uVar19))" (( "(") (binary_expression "(uVar18 <= *param_3) && (*param_3 < uVar19)" (parenthesized_expression "(uVar18 <= *param_3)" (( "(") (binary_expression "uVar18 <= *param_3" (identifier "uVar18") (<= "<=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) () ")")) (&& "&&") (parenthesized_expression "(*param_3 < uVar19)" (( "(") (binary_expression "*param_3 < uVar19" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (< "<") (identifier "uVar19")) () ")"))) () ")")) (compound_statement "{\n          uVar12 = puVar22[2];\n          piVar17 = (int *)puVar22[3];\n          if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }\n          goto LAB_00369508;\n        }" ({ "{") (expression_statement "uVar12 = puVar22[2];" (assignment_expression "uVar12 = puVar22[2]" (identifier "uVar12") (= "=") (subscript_expression "puVar22[2]" (identifier "puVar22") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "piVar17 = (int *)puVar22[3];" (assignment_expression "piVar17 = (int *)puVar22[3]" (identifier "piVar17") (= "=") (cast_expression "(int *)puVar22[3]" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar22[3]" (identifier "puVar22") ([ "[") (number_literal "3") (] "]")))) (; ";")) (if_statement "if (DAT_0044bff0 != puVar22) {\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }" (if "if") (parenthesized_expression "(DAT_0044bff0 != puVar22)" (( "(") (binary_expression "DAT_0044bff0 != puVar22" (identifier "DAT_0044bff0") (!= "!=") (identifier "puVar22")) () ")")) (compound_statement "{\n            DAT_0044bff0 = puVar22;\n            local_80[5] = puVar22[5];\n            puVar22[5] = (ulong)puVar10;\n          }" ({ "{") (expression_statement "DAT_0044bff0 = puVar22;" (assignment_expression "DAT_0044bff0 = puVar22" (identifier "DAT_0044bff0") (= "=") (identifier "puVar22")) (; ";")) (expression_statement "local_80[5] = puVar22[5];" (assignment_expression "local_80[5] = puVar22[5]" (subscript_expression "local_80[5]" (identifier "local_80") ([ "[") (number_literal "5") (] "]")) (= "=") (subscript_expression "puVar22[5]" (identifier "puVar22") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "puVar22[5] = (ulong)puVar10;" (assignment_expression "puVar22[5] = (ulong)puVar10" (subscript_expression "puVar22[5]" (identifier "puVar22") ([ "[") (number_literal "5") (] "]")) (= "=") (cast_expression "(ulong)puVar10" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "puVar10"))) (; ";")) (} "}"))) (goto_statement "goto LAB_00369508;" (goto "goto") (statement_identifier "LAB_00369508") (; ";")) (} "}"))) (if_statement "if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))\n        break;" (if "if") (parenthesized_expression "((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))" (( "(") (binary_expression "(uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0)" (parenthesized_expression "(uVar18 == 0 && uVar19 == 0)" (( "(") (binary_expression "uVar18 == 0 && uVar19 == 0" (binary_expression "uVar18 == 0" (identifier "uVar18") (== "==") (number_literal "0")) (&& "&&") (binary_expression "uVar19 == 0" (identifier "uVar19") (== "==") (number_literal "0"))) () ")")) (|| "||") (parenthesized_expression "(puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0)" (( "(") (comma_expression "puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0" (assignment_expression "puVar4 = (ulong *)puVar22[5]" (identifier "puVar4") (= "=") (cast_expression "(ulong *)puVar22[5]" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "puVar22[5]" (identifier "puVar22") ([ "[") (number_literal "5") (] "]")))) (, ",") (binary_expression "puVar4 == (ulong *)0x0" (identifier "puVar4") (== "==") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0")))) () ")"))) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar18 = *puVar4;" (assignment_expression "uVar18 = *puVar4" (identifier "uVar18") (= "=") (pointer_expression "*puVar4" (* "*") (identifier "puVar4"))) (; ";")) (expression_statement "uVar19 = puVar4[1];" (assignment_expression "uVar19 = puVar4[1]" (identifier "uVar19") (= "=") (subscript_expression "puVar4[1]" (identifier "puVar4") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "local_80 = puVar22;" (assignment_expression "local_80 = puVar22" (identifier "local_80") (= "=") (identifier "puVar22")) (; ";")) (expression_statement "puVar22 = puVar4;" (assignment_expression "puVar22 = puVar4" (identifier "puVar22") (= "=") (identifier "puVar4")) (; ";")) (} "}"))) (goto_statement "goto LAB_0036942c;" (goto "goto") (statement_identifier "LAB_0036942c") (; ";")) (} "}"))) (} "}")))) (expression_statement "local_80 = (ulong *)0x0;" (assignment_expression "local_80 = (ulong *)0x0" (identifier "local_80") (= "=") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "puVar22 = (ulong *)0x0;" (assignment_expression "puVar22 = (ulong *)0x0" (identifier "puVar22") (= "=") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (labeled_statement "LAB_0036942c:\n  puVar10 = DAT_0044bff0;" (statement_identifier "LAB_0036942c") (: ":") (expression_statement "puVar10 = DAT_0044bff0;" (assignment_expression "puVar10 = DAT_0044bff0" (identifier "puVar10") (= "=") (identifier "DAT_0044bff0")) (; ";"))) (if_statement "if ((ushort)param_1[3] == 0) {\n    return 0;\n  }" (if "if") (parenthesized_expression "((ushort)param_1[3] == 0)" (( "(") (binary_expression "(ushort)param_1[3] == 0" (cast_expression "(ushort)param_1[3]" (( "(") (type_descriptor "ushort" (type_identifier "ushort")) () ")") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]"))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "uVar18 = 0;" (assignment_expression "uVar18 = 0" (identifier "uVar18") (= "=") (number_literal "0")) (; ";")) (expression_statement "uVar19 = 0;" (assignment_expression "uVar19 = 0" (identifier "uVar19") (= "=") (number_literal "0")) (; ";")) (expression_statement "bVar5 = false;" (assignment_expression "bVar5 = false" (identifier "bVar5") (= "=") (false "false")) (; ";")) (expression_statement "piVar20 = (int *)0x0;" (assignment_expression "piVar20 = (int *)0x0" (identifier "piVar20") (= "=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "piVar17 = (int *)0x0;" (assignment_expression "piVar17 = (int *)0x0" (identifier "piVar17") (= "=") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;" (assignment_expression "piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe" (identifier "piVar1") (= "=") (binary_expression "piVar14 + (ulong)(ushort)param_1[3] * 0xe" (identifier "piVar14") (+ "+") (binary_expression "(ulong)(ushort)param_1[3] * 0xe" (cast_expression "(ulong)(ushort)param_1[3]" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (cast_expression "(ushort)param_1[3]" (( "(") (type_descriptor "ushort" (type_identifier "ushort")) () ")") (subscript_expression "param_1[3]" (identifier "param_1") ([ "[") (number_literal "3") (] "]")))) (* "*") (number_literal "0xe")))) (; ";")) (do_statement "do {\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  } while (piVar14 != piVar1);" (do "do") (compound_statement "{\n    iVar3 = *piVar14;\n    piVar6 = piVar17;\n    if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }\n    piVar17 = piVar6;\n    piVar14 = piVar14 + 0xe;\n  }" ({ "{") (expression_statement "iVar3 = *piVar14;" (assignment_expression "iVar3 = *piVar14" (identifier "iVar3") (= "=") (pointer_expression "*piVar14" (* "*") (identifier "piVar14"))) (; ";")) (expression_statement "piVar6 = piVar17;" (assignment_expression "piVar6 = piVar17" (identifier "piVar6") (= "=") (identifier "piVar17")) (; ";")) (if_statement "if (iVar3 == 1) {\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }\n    else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }" (if "if") (parenthesized_expression "(iVar3 == 1)" (( "(") (binary_expression "iVar3 == 1" (identifier "iVar3") (== "==") (number_literal "1")) () ")")) (compound_statement "{\n      uVar21 = *(long *)(piVar14 + 4) + uVar12;\n      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }\n    }" ({ "{") (expression_statement "uVar21 = *(long *)(piVar14 + 4) + uVar12;" (assignment_expression "uVar21 = *(long *)(piVar14 + 4) + uVar12" (identifier "uVar21") (= "=") (binary_expression "*(long *)(piVar14 + 4) + uVar12" (pointer_expression "*(long *)(piVar14 + 4)" (* "*") (cast_expression "(long *)(piVar14 + 4)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar14 + 4)" (( "(") (binary_expression "piVar14 + 4" (identifier "piVar14") (+ "+") (number_literal "4")) () ")")))) (+ "+") (identifier "uVar12"))) (; ";")) (if_statement "if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }" (if "if") (parenthesized_expression "((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21))" (( "(") (binary_expression "(uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)" (parenthesized_expression "(uVar21 <= *param_3)" (( "(") (binary_expression "uVar21 <= *param_3" (identifier "uVar21") (<= "<=") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) () ")")) (&& "&&") (parenthesized_expression "(*param_3 < *(long *)(piVar14 + 10) + uVar21)" (( "(") (binary_expression "*param_3 < *(long *)(piVar14 + 10) + uVar21" (pointer_expression "*param_3" (* "*") (identifier "param_3")) (< "<") (binary_expression "*(long *)(piVar14 + 10) + uVar21" (pointer_expression "*(long *)(piVar14 + 10)" (* "*") (cast_expression "(long *)(piVar14 + 10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar14 + 10)" (( "(") (binary_expression "piVar14 + 10" (identifier "piVar14") (+ "+") (number_literal "10")) () ")")))) (+ "+") (identifier "uVar21"))) () ")"))) () ")")) (compound_statement "{\n        bVar5 = true;\n        uVar18 = *(long *)(piVar14 + 10) + uVar21;\n        uVar19 = uVar21;\n      }" ({ "{") (expression_statement "bVar5 = true;" (assignment_expression "bVar5 = true" (identifier "bVar5") (= "=") (true "true")) (; ";")) (expression_statement "uVar18 = *(long *)(piVar14 + 10) + uVar21;" (assignment_expression "uVar18 = *(long *)(piVar14 + 10) + uVar21" (identifier "uVar18") (= "=") (binary_expression "*(long *)(piVar14 + 10) + uVar21" (pointer_expression "*(long *)(piVar14 + 10)" (* "*") (cast_expression "(long *)(piVar14 + 10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar14 + 10)" (( "(") (binary_expression "piVar14 + 10" (identifier "piVar14") (+ "+") (number_literal "10")) () ")")))) (+ "+") (identifier "uVar21"))) (; ";")) (expression_statement "uVar19 = uVar21;" (assignment_expression "uVar19 = uVar21" (identifier "uVar19") (= "=") (identifier "uVar21")) (; ";")) (} "}"))) (} "}")) (else_clause "else {\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }" (else "else") (compound_statement "{\n      piVar6 = piVar14;\n      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }\n    }" ({ "{") (expression_statement "piVar6 = piVar14;" (assignment_expression "piVar6 = piVar14" (identifier "piVar6") (= "=") (identifier "piVar14")) (; ";")) (if_statement "if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {\n        piVar20 = piVar14;\n      }" (if "if") (parenthesized_expression "((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2))" (( "(") (binary_expression "(iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)" (parenthesized_expression "(iVar3 != 0x6474e550)" (( "(") (binary_expression "iVar3 != 0x6474e550" (identifier "iVar3") (!= "!=") (number_literal "0x6474e550")) () ")")) (&& "&&") (parenthesized_expression "(piVar6 = piVar17, iVar3 == 2)" (( "(") (comma_expression "piVar6 = piVar17, iVar3 == 2" (assignment_expression "piVar6 = piVar17" (identifier "piVar6") (= "=") (identifier "piVar17")) (, ",") (binary_expression "iVar3 == 2" (identifier "iVar3") (== "==") (number_literal "2"))) () ")"))) () ")")) (compound_statement "{\n        piVar20 = piVar14;\n      }" ({ "{") (expression_statement "piVar20 = piVar14;" (assignment_expression "piVar20 = piVar14" (identifier "piVar20") (= "=") (identifier "piVar14")) (; ";")) (} "}"))) (} "}")))) (expression_statement "piVar17 = piVar6;" (assignment_expression "piVar17 = piVar6" (identifier "piVar17") (= "=") (identifier "piVar6")) (; ";")) (expression_statement "piVar14 = piVar14 + 0xe;" (assignment_expression "piVar14 = piVar14 + 0xe" (identifier "piVar14") (= "=") (binary_expression "piVar14 + 0xe" (identifier "piVar14") (+ "+") (number_literal "0xe"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(piVar14 != piVar1)" (( "(") (binary_expression "piVar14 != piVar1" (identifier "piVar14") (!= "!=") (identifier "piVar1")) () ")")) (; ";")) (if_statement "if (!bVar5) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(!bVar5)" (( "(") (unary_expression "!bVar5" (! "!") (identifier "bVar5")) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (if_statement "if (0x2f < param_2) {\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }" (if "if") (parenthesized_expression "(0x2f < param_2)" (( "(") (binary_expression "0x2f < param_2" (number_literal "0x2f") (< "<") (identifier "param_2")) () ")")) (compound_statement "{\n    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }\n    puVar10[2] = uVar12;\n    puVar10[3] = (ulong)piVar17;\n    puVar10[4] = (ulong)piVar20;\n    *puVar10 = uVar19;\n    puVar10[1] = uVar18;\n  }" ({ "{") (if_statement "if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }" (if "if") (parenthesized_expression "((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0))" (( "(") (binary_expression "(puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)" (parenthesized_expression "(puVar22 != (ulong *)0x0)" (( "(") (binary_expression "puVar22 != (ulong *)0x0" (identifier "puVar22") (!= "!=") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(local_80 != (ulong *)0x0)" (( "(") (binary_expression "local_80 != (ulong *)0x0" (identifier "local_80") (!= "!=") (cast_expression "(ulong *)0x0" (( "(") (type_descriptor "ulong *" (type_identifier "ulong") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")"))) () ")")) (compound_statement "{\n      DAT_0044bff0 = puVar22;\n      local_80[5] = puVar22[5];\n      puVar22[5] = (ulong)puVar10;\n      puVar10 = puVar22;\n    }" ({ "{") (expression_statement "DAT_0044bff0 = puVar22;" (assignment_expression "DAT_0044bff0 = puVar22" (identifier "DAT_0044bff0") (= "=") (identifier "puVar22")) (; ";")) (expression_statement "local_80[5] = puVar22[5];" (assignment_expression "local_80[5] = puVar22[5]" (subscript_expression "local_80[5]" (identifier "local_80") ([ "[") (number_literal "5") (] "]")) (= "=") (subscript_expression "puVar22[5]" (identifier "puVar22") ([ "[") (number_literal "5") (] "]"))) (; ";")) (expression_statement "puVar22[5] = (ulong)puVar10;" (assignment_expression "puVar22[5] = (ulong)puVar10" (subscript_expression "puVar22[5]" (identifier "puVar22") ([ "[") (number_literal "5") (] "]")) (= "=") (cast_expression "(ulong)puVar10" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "puVar10"))) (; ";")) (expression_statement "puVar10 = puVar22;" (assignment_expression "puVar10 = puVar22" (identifier "puVar10") (= "=") (identifier "puVar22")) (; ";")) (} "}"))) (expression_statement "puVar10[2] = uVar12;" (assignment_expression "puVar10[2] = uVar12" (subscript_expression "puVar10[2]" (identifier "puVar10") ([ "[") (number_literal "2") (] "]")) (= "=") (identifier "uVar12")) (; ";")) (expression_statement "puVar10[3] = (ulong)piVar17;" (assignment_expression "puVar10[3] = (ulong)piVar17" (subscript_expression "puVar10[3]" (identifier "puVar10") ([ "[") (number_literal "3") (] "]")) (= "=") (cast_expression "(ulong)piVar17" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "piVar17"))) (; ";")) (expression_statement "puVar10[4] = (ulong)piVar20;" (assignment_expression "puVar10[4] = (ulong)piVar20" (subscript_expression "puVar10[4]" (identifier "puVar10") ([ "[") (number_literal "4") (] "]")) (= "=") (cast_expression "(ulong)piVar20" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "piVar20"))) (; ";")) (expression_statement "*puVar10 = uVar19;" (assignment_expression "*puVar10 = uVar19" (pointer_expression "*puVar10" (* "*") (identifier "puVar10")) (= "=") (identifier "uVar19")) (; ";")) (expression_statement "puVar10[1] = uVar18;" (assignment_expression "puVar10[1] = uVar18" (subscript_expression "puVar10[1]" (identifier "puVar10") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "uVar18")) (; ";")) (} "}"))) (labeled_statement "LAB_00369508:\n  if (piVar17 == (int *)0x0) {\n    return 0;\n  }" (statement_identifier "LAB_00369508") (: ":") (if_statement "if (piVar17 == (int *)0x0) {\n    return 0;\n  }" (if "if") (parenthesized_expression "(piVar17 == (int *)0x0)" (( "(") (binary_expression "piVar17 == (int *)0x0" (identifier "piVar17") (== "==") (cast_expression "(int *)0x0" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    return 0;\n  }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}")))) (expression_statement "pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);" (assignment_expression "pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12)" (identifier "pcVar16") (= "=") (cast_expression "(char *)(*(long *)(piVar17 + 4) + uVar12)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(piVar17 + 4) + uVar12)" (( "(") (binary_expression "*(long *)(piVar17 + 4) + uVar12" (pointer_expression "*(long *)(piVar17 + 4)" (* "*") (cast_expression "(long *)(piVar17 + 4)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(piVar17 + 4)" (( "(") (binary_expression "piVar17 + 4" (identifier "piVar17") (+ "+") (number_literal "4")) () ")")))) (+ "+") (identifier "uVar12")) () ")")))) (; ";")) (if_statement "if (*pcVar16 != '\x01') {\n    return 1;\n  }" (if "if") (parenthesized_expression "(*pcVar16 != '\x01')" (( "(") (binary_expression "*pcVar16 != '\x01'" (pointer_expression "*pcVar16" (* "*") (identifier "pcVar16")) (!= "!=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) () ")")) (compound_statement "{\n    return 1;\n  }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "cVar2 = pcVar16[1];" (assignment_expression "cVar2 = pcVar16[1]" (identifier "cVar2") (= "=") (subscript_expression "pcVar16[1]" (identifier "pcVar16") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "uVar11 = FUN_00368f00(cVar2,param_3);" (assignment_expression "uVar11 = FUN_00368f00(cVar2,param_3)" (identifier "uVar11") (= "=") (call_expression "FUN_00368f00(cVar2,param_3)" (identifier "FUN_00368f00") (argument_list "(cVar2,param_3)" (( "(") (identifier "cVar2") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78);" (assignment_expression "uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78)" (identifier "uVar11") (= "=") (call_expression "FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78)" (identifier "FUN_00368f50") (argument_list "(cVar2,uVar11,pcVar16 + 4,&local_78)" (( "(") (identifier "cVar2") (, ",") (identifier "uVar11") (, ",") (binary_expression "pcVar16 + 4" (identifier "pcVar16") (+ "+") (number_literal "4")) (, ",") (pointer_expression "&local_78" (& "&") (identifier "local_78")) () ")")))) (; ";")) (expression_statement "cVar2 = pcVar16[2];" (assignment_expression "cVar2 = pcVar16[2]" (identifier "cVar2") (= "=") (subscript_expression "pcVar16[2]" (identifier "pcVar16") ([ "[") (number_literal "2") (] "]"))) (; ";")) (if_statement "if ((cVar2 == -1) || (pcVar16[3] != ';')) {\n    pcVar23 = (char *)*param_3;\n  }\n  else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }" (if "if") (parenthesized_expression "((cVar2 == -1) || (pcVar16[3] != ';'))" (( "(") (binary_expression "(cVar2 == -1) || (pcVar16[3] != ';')" (parenthesized_expression "(cVar2 == -1)" (( "(") (binary_expression "cVar2 == -1" (identifier "cVar2") (== "==") (number_literal "-1")) () ")")) (|| "||") (parenthesized_expression "(pcVar16[3] != ';')" (( "(") (binary_expression "pcVar16[3] != ';'" (subscript_expression "pcVar16[3]" (identifier "pcVar16") ([ "[") (number_literal "3") (] "]")) (!= "!=") (char_literal "';'" (' "'") (character ";") (' "'"))) () ")"))) () ")")) (compound_statement "{\n    pcVar23 = (char *)*param_3;\n  }" ({ "{") (expression_statement "pcVar23 = (char *)*param_3;" (assignment_expression "pcVar23 = (char *)*param_3" (identifier "pcVar23") (= "=") (cast_expression "(char *)*param_3" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_3" (* "*") (identifier "param_3")))) (; ";")) (} "}")) (else_clause "else {\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }" (else "else") (compound_statement "{\n    uVar13 = FUN_00368f00(cVar2,param_3);\n    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);\n    if (local_70 == 0) {\n      return 1;\n    }\n    pcVar23 = (char *)*param_3;\n    uVar12 = (ulong)((uint)piVar14 & 3);\n    if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }\n  }" ({ "{") (expression_statement "uVar13 = FUN_00368f00(cVar2,param_3);" (assignment_expression "uVar13 = FUN_00368f00(cVar2,param_3)" (identifier "uVar13") (= "=") (call_expression "FUN_00368f00(cVar2,param_3)" (identifier "FUN_00368f00") (argument_list "(cVar2,param_3)" (( "(") (identifier "cVar2") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);" (assignment_expression "piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70)" (identifier "piVar14") (= "=") (cast_expression "(int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_00368f50(cVar2,uVar13,uVar11,&local_70)" (identifier "FUN_00368f50") (argument_list "(cVar2,uVar13,uVar11,&local_70)" (( "(") (identifier "cVar2") (, ",") (identifier "uVar13") (, ",") (identifier "uVar11") (, ",") (pointer_expression "&local_70" (& "&") (identifier "local_70")) () ")"))))) (; ";")) (if_statement "if (local_70 == 0) {\n      return 1;\n    }" (if "if") (parenthesized_expression "(local_70 == 0)" (( "(") (binary_expression "local_70 == 0" (identifier "local_70") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 1;\n    }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "pcVar23 = (char *)*param_3;" (assignment_expression "pcVar23 = (char *)*param_3" (identifier "pcVar23") (= "=") (cast_expression "(char *)*param_3" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_3" (* "*") (identifier "param_3")))) (; ";")) (expression_statement "uVar12 = (ulong)((uint)piVar14 & 3);" (assignment_expression "uVar12 = (ulong)((uint)piVar14 & 3)" (identifier "uVar12") (= "=") (call_expression "(ulong)((uint)piVar14 & 3)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((uint)piVar14 & 3)" (( "(") (binary_expression "(uint)piVar14 & 3" (cast_expression "(uint)piVar14" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "piVar14")) (& "&") (number_literal "3")) () ")")))) (; ";")) (if_statement "if (((ulong)piVar14 & 3) == 0) {\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }" (if "if") (parenthesized_expression "(((ulong)piVar14 & 3) == 0)" (( "(") (binary_expression "((ulong)piVar14 & 3) == 0" (parenthesized_expression "((ulong)piVar14 & 3)" (( "(") (binary_expression "(ulong)piVar14 & 3" (cast_expression "(ulong)piVar14" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "piVar14")) (& "&") (number_literal "3")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }\n      uVar18 = local_70 - 1;\n      uVar19 = uVar18;\n      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }\n      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];\n      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));\n      uVar9 = FUN_00368e50(bVar8);\n      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);\n      iVar3 = piVar14[uVar18 * 2];\n      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }\n      param_3[3] = (ulong)(pcVar16 + iVar3);\n      return 1;\n    }" ({ "{") (if_statement "if (pcVar23 < pcVar16 + *piVar14) {\n        return 1;\n      }" (if "if") (parenthesized_expression "(pcVar23 < pcVar16 + *piVar14)" (( "(") (binary_expression "pcVar23 < pcVar16 + *piVar14" (identifier "pcVar23") (< "<") (binary_expression "pcVar16 + *piVar14" (identifier "pcVar16") (+ "+") (pointer_expression "*piVar14" (* "*") (identifier "piVar14")))) () ")")) (compound_statement "{\n        return 1;\n      }" ({ "{") (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (expression_statement "uVar18 = local_70 - 1;" (assignment_expression "uVar18 = local_70 - 1" (identifier "uVar18") (= "=") (binary_expression "local_70 - 1" (identifier "local_70") (- "-") (number_literal "1"))) (; ";")) (expression_statement "uVar19 = uVar18;" (assignment_expression "uVar19 = uVar18" (identifier "uVar19") (= "=") (identifier "uVar18")) (; ";")) (if_statement "if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }" (if "if") (parenthesized_expression "(pcVar23 < pcVar16 + piVar14[uVar18 * 2])" (( "(") (binary_expression "pcVar23 < pcVar16 + piVar14[uVar18 * 2]" (identifier "pcVar23") (< "<") (binary_expression "pcVar16 + piVar14[uVar18 * 2]" (identifier "pcVar16") (+ "+") (subscript_expression "piVar14[uVar18 * 2]" (identifier "piVar14") ([ "[") (binary_expression "uVar18 * 2" (identifier "uVar18") (* "*") (number_literal "2")) (] "]")))) () ")")) (compound_statement "{\n        do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);\n      }" ({ "{") (do_statement "do {\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);" (do "do") (compound_statement "{\n          if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }\n          uVar21 = uVar12 + uVar19 >> 1;\n          iVar3 = piVar14[uVar21 * 2];\n          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }\n          uVar12 = uVar18 + 1;\n        }" ({ "{") (if_statement "if (uVar19 <= uVar12) {\nLAB_003697f5:\n                    \n            abort();\n          }" (if "if") (parenthesized_expression "(uVar19 <= uVar12)" (( "(") (binary_expression "uVar19 <= uVar12" (identifier "uVar19") (<= "<=") (identifier "uVar12")) () ")")) (compound_statement "{\nLAB_003697f5:\n                    \n            abort();\n          }" ({ "{") (labeled_statement "LAB_003697f5:\n                    \n            abort();" (statement_identifier "LAB_003697f5") (: ":") (expression_statement "abort();" (call_expression "abort()" (identifier "abort") (argument_list "()" (( "(") () ")"))) (; ";"))) (} "}"))) (expression_statement "uVar21 = uVar12 + uVar19 >> 1;" (assignment_expression "uVar21 = uVar12 + uVar19 >> 1" (identifier "uVar21") (= "=") (binary_expression "uVar12 + uVar19 >> 1" (binary_expression "uVar12 + uVar19" (identifier "uVar12") (+ "+") (identifier "uVar19")) (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "iVar3 = piVar14[uVar21 * 2];" (assignment_expression "iVar3 = piVar14[uVar21 * 2]" (identifier "iVar3") (= "=") (subscript_expression "piVar14[uVar21 * 2]" (identifier "piVar14") ([ "[") (binary_expression "uVar21 * 2" (identifier "uVar21") (* "*") (number_literal "2")) (] "]"))) (; ";")) (while_statement "while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }" (while "while") (parenthesized_expression "(uVar18 = uVar21, pcVar23 < pcVar16 + iVar3)" (( "(") (comma_expression "uVar18 = uVar21, pcVar23 < pcVar16 + iVar3" (assignment_expression "uVar18 = uVar21" (identifier "uVar18") (= "=") (identifier "uVar21")) (, ",") (binary_expression "pcVar23 < pcVar16 + iVar3" (identifier "pcVar23") (< "<") (binary_expression "pcVar16 + iVar3" (identifier "pcVar16") (+ "+") (identifier "iVar3")))) () ")")) (compound_statement "{\n            if (uVar18 <= uVar12) goto LAB_003697f5;\n            uVar21 = uVar12 + uVar18 >> 1;\n            iVar3 = piVar14[uVar21 * 2];\n            uVar19 = uVar18;\n          }" ({ "{") (if_statement "if (uVar18 <= uVar12) goto LAB_003697f5;" (if "if") (parenthesized_expression "(uVar18 <= uVar12)" (( "(") (binary_expression "uVar18 <= uVar12" (identifier "uVar18") (<= "<=") (identifier "uVar12")) () ")")) (goto_statement "goto LAB_003697f5;" (goto "goto") (statement_identifier "LAB_003697f5") (; ";"))) (expression_statement "uVar21 = uVar12 + uVar18 >> 1;" (assignment_expression "uVar21 = uVar12 + uVar18 >> 1" (identifier "uVar21") (= "=") (binary_expression "uVar12 + uVar18 >> 1" (binary_expression "uVar12 + uVar18" (identifier "uVar12") (+ "+") (identifier "uVar18")) (>> ">>") (number_literal "1"))) (; ";")) (expression_statement "iVar3 = piVar14[uVar21 * 2];" (assignment_expression "iVar3 = piVar14[uVar21 * 2]" (identifier "iVar3") (= "=") (subscript_expression "piVar14[uVar21 * 2]" (identifier "piVar14") ([ "[") (binary_expression "uVar21 * 2" (identifier "uVar21") (* "*") (number_literal "2")) (] "]"))) (; ";")) (expression_statement "uVar19 = uVar18;" (assignment_expression "uVar19 = uVar18" (identifier "uVar19") (= "=") (identifier "uVar18")) (; ";")) (} "}"))) (expression_statement "uVar12 = uVar18 + 1;" (assignment_expression "uVar12 = uVar18 + 1" (identifier "uVar12") (= "=") (binary_expression "uVar18 + 1" (identifier "uVar18") (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(pcVar16 + piVar14[uVar12 * 2] <= pcVar23)" (( "(") (binary_expression "pcVar16 + piVar14[uVar12 * 2] <= pcVar23" (binary_expression "pcVar16 + piVar14[uVar12 * 2]" (identifier "pcVar16") (+ "+") (subscript_expression "piVar14[uVar12 * 2]" (identifier "piVar14") ([ "[") (binary_expression "uVar12 * 2" (identifier "uVar12") (* "*") (number_literal "2")) (] "]"))) (<= "<=") (identifier "pcVar23")) () ")")) (; ";")) (} "}"))) (expression_statement "pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];" (assignment_expression "pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1]" (identifier "pcVar23") (= "=") (binary_expression "pcVar16 + (piVar14 + uVar18 * 2)[1]" (identifier "pcVar16") (+ "+") (subscript_expression "(piVar14 + uVar18 * 2)[1]" (parenthesized_expression "(piVar14 + uVar18 * 2)" (( "(") (binary_expression "piVar14 + uVar18 * 2" (identifier "piVar14") (+ "+") (binary_expression "uVar18 * 2" (identifier "uVar18") (* "*") (number_literal "2"))) () ")")) ([ "[") (number_literal "1") (] "]")))) (; ";")) (expression_statement "bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));" (assignment_expression "bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)))" (identifier "bVar8") (= "=") (call_expression "FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)))" (identifier "FUN_00369120") (argument_list "(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)))" (( "(") (binary_expression "pcVar23 + (4 - (long)*(int *)(pcVar23 + 4))" (identifier "pcVar23") (+ "+") (parenthesized_expression "(4 - (long)*(int *)(pcVar23 + 4))" (( "(") (binary_expression "4 - (long)*(int *)(pcVar23 + 4)" (number_literal "4") (- "-") (cast_expression "(long)*(int *)(pcVar23 + 4)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(pcVar23 + 4)" (* "*") (cast_expression "(int *)(pcVar23 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(pcVar23 + 4)" (( "(") (binary_expression "pcVar23 + 4" (identifier "pcVar23") (+ "+") (number_literal "4")) () ")")))))) () ")"))) () ")")))) (; ";")) (expression_statement "uVar9 = FUN_00368e50(bVar8);" (assignment_expression "uVar9 = FUN_00368e50(bVar8)" (identifier "uVar9") (= "=") (call_expression "FUN_00368e50(bVar8)" (identifier "FUN_00368e50") (argument_list "(bVar8)" (( "(") (identifier "bVar8") () ")")))) (; ";")) (expression_statement "FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);" (call_expression "FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68)" (identifier "FUN_00368f50") (argument_list "(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68)" (( "(") (binary_expression "bVar8 & 0xf" (identifier "bVar8") (& "&") (number_literal "0xf")) (, ",") (number_literal "0") (, ",") (binary_expression "pcVar23 + (ulong)uVar9 + 8" (binary_expression "pcVar23 + (ulong)uVar9" (identifier "pcVar23") (+ "+") (cast_expression "(ulong)uVar9" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar9"))) (+ "+") (number_literal "8")) (, ",") (pointer_expression "&local_68" (& "&") (identifier "local_68")) () ")"))) (; ";")) (expression_statement "iVar3 = piVar14[uVar18 * 2];" (assignment_expression "iVar3 = piVar14[uVar18 * 2]" (identifier "iVar3") (= "=") (subscript_expression "piVar14[uVar18 * 2]" (identifier "piVar14") ([ "[") (binary_expression "uVar18 * 2" (identifier "uVar18") (* "*") (number_literal "2")) (] "]"))) (; ";")) (if_statement "if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {\n        param_3[4] = (ulong)pcVar23;\n      }" (if "if") (parenthesized_expression "((char *)*param_3 < pcVar16 + iVar3 + local_68)" (( "(") (binary_expression "(char *)*param_3 < pcVar16 + iVar3 + local_68" (cast_expression "(char *)*param_3" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (pointer_expression "*param_3" (* "*") (identifier "param_3"))) (< "<") (binary_expression "pcVar16 + iVar3 + local_68" (binary_expression "pcVar16 + iVar3" (identifier "pcVar16") (+ "+") (identifier "iVar3")) (+ "+") (identifier "local_68"))) () ")")) (compound_statement "{\n        param_3[4] = (ulong)pcVar23;\n      }" ({ "{") (expression_statement "param_3[4] = (ulong)pcVar23;" (assignment_expression "param_3[4] = (ulong)pcVar23" (subscript_expression "param_3[4]" (identifier "param_3") ([ "[") (number_literal "4") (] "]")) (= "=") (cast_expression "(ulong)pcVar23" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "pcVar23"))) (; ";")) (} "}"))) (expression_statement "param_3[3] = (ulong)(pcVar16 + iVar3);" (assignment_expression "param_3[3] = (ulong)(pcVar16 + iVar3)" (subscript_expression "param_3[3]" (identifier "param_3") ([ "[") (number_literal "3") (] "]")) (= "=") (call_expression "(ulong)(pcVar16 + iVar3)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(pcVar16 + iVar3)" (( "(") (binary_expression "pcVar16 + iVar3" (identifier "pcVar16") (+ "+") (identifier "iVar3")) () ")")))) (; ";")) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}"))) (} "}")))) (expression_statement "local_60 = param_3[1];" (assignment_expression "local_60 = param_3[1]" (identifier "local_60") (= "=") (subscript_expression "param_3[1]" (identifier "param_3") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "local_68 = 0;" (assignment_expression "local_68 = 0" (identifier "local_68") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_48 = 4;" (assignment_expression "local_48 = 4" (identifier "local_48") (= "=") (number_literal "4")) (; ";")) (expression_statement "local_58 = param_3[2];" (assignment_expression "local_58 = param_3[2]" (identifier "local_58") (= "=") (subscript_expression "param_3[2]" (identifier "param_3") ([ "[") (number_literal "2") (] "]"))) (; ";")) (expression_statement "local_50 = local_78;" (assignment_expression "local_50 = local_78" (identifier "local_50") (= "=") (identifier "local_78")) (; ";")) (expression_statement "uVar12 = FUN_00369260(&local_68,local_78,pcVar23);" (assignment_expression "uVar12 = FUN_00369260(&local_68,local_78,pcVar23)" (identifier "uVar12") (= "=") (call_expression "FUN_00369260(&local_68,local_78,pcVar23)" (identifier "FUN_00369260") (argument_list "(&local_68,local_78,pcVar23)" (( "(") (pointer_expression "&local_68" (& "&") (identifier "local_68")) (, ",") (identifier "local_78") (, ",") (identifier "pcVar23") () ")")))) (; ";")) (expression_statement "param_3[4] = uVar12;" (assignment_expression "param_3[4] = uVar12" (subscript_expression "param_3[4]" (identifier "param_3") ([ "[") (number_literal "4") (] "]")) (= "=") (identifier "uVar12")) (; ";")) (if_statement "if (uVar12 != 0) {\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }" (if "if") (parenthesized_expression "(uVar12 != 0)" (( "(") (binary_expression "uVar12 != 0" (identifier "uVar12") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));\n    uVar11 = FUN_00368f00(uVar7,param_3);\n    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);\n    param_3[3] = local_70;\n  }" ({ "{") (expression_statement "uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));" (assignment_expression "uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4))" (identifier "uVar7") (= "=") (call_expression "FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4))" (identifier "FUN_00369120") (argument_list "((uVar12 + 4) - (long)*(int *)(uVar12 + 4))" (( "(") (binary_expression "(uVar12 + 4) - (long)*(int *)(uVar12 + 4)" (parenthesized_expression "(uVar12 + 4)" (( "(") (binary_expression "uVar12 + 4" (identifier "uVar12") (+ "+") (number_literal "4")) () ")")) (- "-") (cast_expression "(long)*(int *)(uVar12 + 4)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (pointer_expression "*(int *)(uVar12 + 4)" (* "*") (cast_expression "(int *)(uVar12 + 4)" (( "(") (type_descriptor "int *" (primitive_type "int") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(uVar12 + 4)" (( "(") (binary_expression "uVar12 + 4" (identifier "uVar12") (+ "+") (number_literal "4")) () ")")))))) () ")")))) (; ";")) (expression_statement "uVar11 = FUN_00368f00(uVar7,param_3);" (assignment_expression "uVar11 = FUN_00368f00(uVar7,param_3)" (identifier "uVar11") (= "=") (call_expression "FUN_00368f00(uVar7,param_3)" (identifier "FUN_00368f00") (argument_list "(uVar7,param_3)" (( "(") (identifier "uVar7") (, ",") (identifier "param_3") () ")")))) (; ";")) (expression_statement "FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);" (call_expression "FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70)" (identifier "FUN_00368f50") (argument_list "(uVar7,uVar11,param_3[4] + 8,&local_70)" (( "(") (identifier "uVar7") (, ",") (identifier "uVar11") (, ",") (binary_expression "param_3[4] + 8" (subscript_expression "param_3[4]" (identifier "param_3") ([ "[") (number_literal "4") (] "]")) (+ "+") (number_literal "8")) (, ",") (pointer_expression "&local_70" (& "&") (identifier "local_70")) () ")"))) (; ";")) (expression_statement "param_3[3] = local_70;" (assignment_expression "param_3[3] = local_70" (subscript_expression "param_3[3]" (identifier "param_3") ([ "[") (number_literal "3") (] "]")) (= "=") (identifier "local_70")) (; ";")) (} "}"))) (return_statement "return 1;" (return "return") (number_literal "1") (; ";")) (} "}")))

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

type_1 function_1(type_2 *param_1,type_2 var_1,type_2 *var_5)

{
  int *var_15;
  char var_21;
  int var_12;
  type_2 *var_10;
  bool bVar5;
  int *piVar6;
  type_3 uVar7;
  type_4 var_27;
  type_5 uVar9;
  type_2 *puVar10;
  type_1 uVar11;
  type_2 var_13;
  type_1 uVar13;
  int *var_11;
  type_1 *var_4;
  char *var_20;
  int *var_17;
  type_2 var_7;
  type_2 var_8;
  int *piVar20;
  type_2 var_14;
  type_2 *var_9;
  char *var_23;
  type_2 *var_16;
  type_1 local_78;
  type_2 var_22;
  long var_28;
  type_2 local_60;
  type_2 local_58;
  type_1 local_50;
  type_1 local_48;
  
  puVar10 = var_6;
  var_11 = (int *)param_1[2];
  var_13 = *param_1;
  if (((int)var_5[5] == 0) || (var_1 < 0x30)) {
    if (var_1 < 0x1a) {
      return 0xffffffff;
    }
  }
  else {
    if ((param_1[4] != var_2) || (var_3 != param_1[5])) {
      var_4 = &DAT_0044c030;
      var_2 = param_1[4];
      var_3 = param_1[5];
      do {
        var_4[-6] = 0;
        var_4[-5] = 0;
        var_4[-1] = var_4;
        var_4 = var_4 + 6;
      } while (var_4 != &seen_objects);
      var_9 = (type_2 *)0x0;
      _DAT_0044c178 = 0;
      var_6 = &frame_hdr_cache;
      *(type_6 *)(var_5 + 5) = 0;
      var_16 = (type_2 *)0x0;
      goto LAB_0036942c;
    }
    if (var_6 != (type_2 *)0x0) {
      var_7 = *var_6;
      var_8 = var_6[1];
      var_16 = (type_2 *)0x0;
      var_9 = var_6;
      while( true ) {
        if ((var_7 <= *var_5) && (*var_5 < var_8)) {
          var_13 = var_9[2];
          var_17 = (int *)var_9[3];
          if (var_6 != var_9) {
            var_6 = var_9;
            var_16[5] = var_9[5];
            var_9[5] = (type_2)puVar10;
          }
          goto LAB_00369508;
        }
        if ((var_7 == 0 && var_8 == 0) || (var_10 = (type_2 *)var_9[5], var_10 == (type_2 *)0x0))
        break;
        var_7 = *var_10;
        var_8 = var_10[1];
        var_16 = var_9;
        var_9 = var_10;
      }
      goto LAB_0036942c;
    }
  }
  var_16 = (type_2 *)0x0;
  var_9 = (type_2 *)0x0;
LAB_0036942c:
  puVar10 = var_6;
  if ((type_7)param_1[3] == 0) {
    return 0;
  }
  var_7 = 0;
  var_8 = 0;
  bVar5 = false;
  piVar20 = (int *)0x0;
  var_17 = (int *)0x0;
  var_15 = var_11 + (type_2)(type_7)param_1[3] * 0xe;
  do {
    var_12 = *var_11;
    piVar6 = var_17;
    if (var_12 == 1) {
      var_14 = *(long *)(var_11 + 4) + var_13;
      if ((var_14 <= *var_5) && (*var_5 < *(long *)(var_11 + 10) + var_14)) {
        bVar5 = true;
        var_7 = *(long *)(var_11 + 10) + var_14;
        var_8 = var_14;
      }
    }
    else {
      piVar6 = var_11;
      if ((var_12 != 0x6474e550) && (piVar6 = var_17, var_12 == 2)) {
        piVar20 = var_11;
      }
    }
    var_17 = piVar6;
    var_11 = var_11 + 0xe;
  } while (var_11 != var_15);
  if (!bVar5) {
    return 0;
  }
  if (0x2f < var_1) {
    if ((var_9 != (type_2 *)0x0) && (var_16 != (type_2 *)0x0)) {
      var_6 = var_9;
      var_16[5] = var_9[5];
      var_9[5] = (type_2)puVar10;
      puVar10 = var_9;
    }
    puVar10[2] = var_13;
    puVar10[3] = (type_2)var_17;
    puVar10[4] = (type_2)piVar20;
    *puVar10 = var_8;
    puVar10[1] = var_7;
  }
LAB_00369508:
  if (var_17 == (int *)0x0) {
    return 0;
  }
  var_20 = (char *)(*(long *)(var_17 + 4) + var_13);
  if (*var_20 != '\x01') {
    return 1;
  }
  var_21 = var_20[1];
  uVar11 = var_18(var_21,var_5);
  uVar11 = var_19(var_21,uVar11,var_20 + 4,&local_78);
  var_21 = var_20[2];
  if ((var_21 == -1) || (var_20[3] != ';')) {
    var_23 = (char *)*var_5;
  }
  else {
    uVar13 = var_18(var_21,var_5);
    var_11 = (int *)var_19(var_21,uVar13,uVar11,&var_22);
    if (var_22 == 0) {
      return 1;
    }
    var_23 = (char *)*var_5;
    var_13 = (type_2)((type_5)var_11 & 3);
    if (((type_2)var_11 & 3) == 0) {
      if (var_23 < var_20 + *var_11) {
        return 1;
      }
      var_7 = var_22 - 1;
      var_8 = var_7;
      if (var_23 < var_20 + var_11[var_7 * 2]) {
        do {
          if (var_8 <= var_13) {
LAB_003697f5:
                    /* WARNING: Subroutine does not return */
            var_24();
          }
          var_14 = var_13 + var_8 >> 1;
          var_12 = var_11[var_14 * 2];
          while (var_7 = var_14, var_23 < var_20 + var_12) {
            if (var_7 <= var_13) goto LAB_003697f5;
            var_14 = var_13 + var_7 >> 1;
            var_12 = var_11[var_14 * 2];
            var_8 = var_7;
          }
          var_13 = var_7 + 1;
        } while (var_20 + var_11[var_13 * 2] <= var_23);
      }
      var_23 = var_20 + (var_11 + var_7 * 2)[1];
      var_27 = var_25(var_23 + (4 - (long)*(int *)(var_23 + 4)));
      uVar9 = var_26(var_27);
      var_19(var_27 & 0xf,0,var_23 + (type_2)uVar9 + 8,&var_28);
      var_12 = var_11[var_7 * 2];
      if ((char *)*var_5 < var_20 + var_12 + var_28) {
        var_5[4] = (type_2)var_23;
      }
      var_5[3] = (type_2)(var_20 + var_12);
      return 1;
    }
  }
  local_60 = var_5[1];
  var_28 = 0;
  local_48 = 4;
  local_58 = var_5[2];
  local_50 = local_78;
  var_13 = var_29(&var_28,local_78,var_23);
  var_5[4] = var_13;
  if (var_13 != 0) {
    uVar7 = var_25((var_13 + 4) - (long)*(int *)(var_13 + 4));
    uVar11 = var_18(uVar7,var_5);
    var_19(uVar7,uVar11,var_5[4] + 8,&var_22);
    var_5[3] = var_22;
  }
  return 1;
}


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

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 MASKED(ulong *param_1,ulong param_2,ulong *param_3)

{
  int *piVar1;
  char cVar2;
  int iVar3;
  ulong *puVar4;
  bool bVar5;
  int *piVar6;
  undefined1 uVar7;
  byte bVar8;
  uint uVar9;
  ulong *puVar10;
  undefined8 uVar11;
  ulong uVar12;
  undefined8 uVar13;
  int *piVar14;
  undefined8 *puVar15;
  char *pcVar16;
  int *piVar17;
  ulong uVar18;
  ulong uVar19;
  int *piVar20;
  ulong uVar21;
  ulong *puVar22;
  char *pcVar23;
  ulong *local_80;
  undefined8 local_78;
  ulong local_70;
  long local_68;
  ulong local_60;
  ulong local_58;
  undefined8 local_50;
  undefined8 local_48;
  
  puVar10 = DAT_0044bff0;
  piVar14 = (int *)param_1[2];
  uVar12 = *param_1;
  if (((int)param_3[5] == 0) || (param_2 < 0x30)) {
    if (param_2 < 0x1a) {
      return 0xffffffff;
    }
  }
  else {
    if ((param_1[4] != DAT_0043e830) || (DAT_0044bfe8 != param_1[5])) {
      puVar15 = &DAT_0044c030;
      DAT_0043e830 = param_1[4];
      DAT_0044bfe8 = param_1[5];
      do {
        puVar15[-6] = 0;
        puVar15[-5] = 0;
        puVar15[-1] = puVar15;
        puVar15 = puVar15 + 6;
      } while (puVar15 != &DAT_0044c1b0);
      puVar22 = (ulong *)0x0;
      _DAT_0044c178 = 0;
      DAT_0044bff0 = &DAT_0044c000;
      *(undefined4 *)(param_3 + 5) = 0;
      local_80 = (ulong *)0x0;
      goto LAB_0036942c;
    }
    if (DAT_0044bff0 != (ulong *)0x0) {
      uVar18 = *DAT_0044bff0;
      uVar19 = DAT_0044bff0[1];
      local_80 = (ulong *)0x0;
      puVar22 = DAT_0044bff0;
      while( true ) {
        if ((uVar18 <= *param_3) && (*param_3 < uVar19)) {
          uVar12 = puVar22[2];
          piVar17 = (int *)puVar22[3];
          if (DAT_0044bff0 != puVar22) {
            DAT_0044bff0 = puVar22;
            local_80[5] = puVar22[5];
            puVar22[5] = (ulong)puVar10;
          }
          goto LAB_00369508;
        }
        if ((uVar18 == 0 && uVar19 == 0) || (puVar4 = (ulong *)puVar22[5], puVar4 == (ulong *)0x0))
        break;
        uVar18 = *puVar4;
        uVar19 = puVar4[1];
        local_80 = puVar22;
        puVar22 = puVar4;
      }
      goto LAB_0036942c;
    }
  }
  local_80 = (ulong *)0x0;
  puVar22 = (ulong *)0x0;
LAB_0036942c:
  puVar10 = DAT_0044bff0;
  if ((ushort)param_1[3] == 0) {
    return 0;
  }
  uVar18 = 0;
  uVar19 = 0;
  bVar5 = false;
  piVar20 = (int *)0x0;
  piVar17 = (int *)0x0;
  piVar1 = piVar14 + (ulong)(ushort)param_1[3] * 0xe;
  do {
    iVar3 = *piVar14;
    piVar6 = piVar17;
    if (iVar3 == 1) {
      uVar21 = *(long *)(piVar14 + 4) + uVar12;
      if ((uVar21 <= *param_3) && (*param_3 < *(long *)(piVar14 + 10) + uVar21)) {
        bVar5 = true;
        uVar18 = *(long *)(piVar14 + 10) + uVar21;
        uVar19 = uVar21;
      }
    }
    else {
      piVar6 = piVar14;
      if ((iVar3 != 0x6474e550) && (piVar6 = piVar17, iVar3 == 2)) {
        piVar20 = piVar14;
      }
    }
    piVar17 = piVar6;
    piVar14 = piVar14 + 0xe;
  } while (piVar14 != piVar1);
  if (!bVar5) {
    return 0;
  }
  if (0x2f < param_2) {
    if ((puVar22 != (ulong *)0x0) && (local_80 != (ulong *)0x0)) {
      DAT_0044bff0 = puVar22;
      local_80[5] = puVar22[5];
      puVar22[5] = (ulong)puVar10;
      puVar10 = puVar22;
    }
    puVar10[2] = uVar12;
    puVar10[3] = (ulong)piVar17;
    puVar10[4] = (ulong)piVar20;
    *puVar10 = uVar19;
    puVar10[1] = uVar18;
  }
LAB_00369508:
  if (piVar17 == (int *)0x0) {
    return 0;
  }
  pcVar16 = (char *)(*(long *)(piVar17 + 4) + uVar12);
  if (*pcVar16 != '\x01') {
    return 1;
  }
  cVar2 = pcVar16[1];
  uVar11 = FUN_00368f00(cVar2,param_3);
  uVar11 = FUN_00368f50(cVar2,uVar11,pcVar16 + 4,&local_78);
  cVar2 = pcVar16[2];
  if ((cVar2 == -1) || (pcVar16[3] != ';')) {
    pcVar23 = (char *)*param_3;
  }
  else {
    uVar13 = FUN_00368f00(cVar2,param_3);
    piVar14 = (int *)FUN_00368f50(cVar2,uVar13,uVar11,&local_70);
    if (local_70 == 0) {
      return 1;
    }
    pcVar23 = (char *)*param_3;
    uVar12 = (ulong)((uint)piVar14 & 3);
    if (((ulong)piVar14 & 3) == 0) {
      if (pcVar23 < pcVar16 + *piVar14) {
        return 1;
      }
      uVar18 = local_70 - 1;
      uVar19 = uVar18;
      if (pcVar23 < pcVar16 + piVar14[uVar18 * 2]) {
        do {
          if (uVar19 <= uVar12) {
LAB_003697f5:
                    /* WARNING: Subroutine does not return */
            abort();
          }
          uVar21 = uVar12 + uVar19 >> 1;
          iVar3 = piVar14[uVar21 * 2];
          while (uVar18 = uVar21, pcVar23 < pcVar16 + iVar3) {
            if (uVar18 <= uVar12) goto LAB_003697f5;
            uVar21 = uVar12 + uVar18 >> 1;
            iVar3 = piVar14[uVar21 * 2];
            uVar19 = uVar18;
          }
          uVar12 = uVar18 + 1;
        } while (pcVar16 + piVar14[uVar12 * 2] <= pcVar23);
      }
      pcVar23 = pcVar16 + (piVar14 + uVar18 * 2)[1];
      bVar8 = FUN_00369120(pcVar23 + (4 - (long)*(int *)(pcVar23 + 4)));
      uVar9 = FUN_00368e50(bVar8);
      FUN_00368f50(bVar8 & 0xf,0,pcVar23 + (ulong)uVar9 + 8,&local_68);
      iVar3 = piVar14[uVar18 * 2];
      if ((char *)*param_3 < pcVar16 + iVar3 + local_68) {
        param_3[4] = (ulong)pcVar23;
      }
      param_3[3] = (ulong)(pcVar16 + iVar3);
      return 1;
    }
  }
  local_60 = param_3[1];
  local_68 = 0;
  local_48 = 4;
  local_58 = param_3[2];
  local_50 = local_78;
  uVar12 = FUN_00369260(&local_68,local_78,pcVar23);
  param_3[4] = uVar12;
  if (uVar12 != 0) {
    uVar7 = FUN_00369120((uVar12 + 4) - (long)*(int *)(uVar12 + 4));
    uVar11 = FUN_00368f00(uVar7,param_3);
    FUN_00368f50(uVar7,uVar11,param_3[4] + 8,&local_70);
    param_3[3] = local_70;
  }
  return 1;
}

