
/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: View * find_or_make_view(File_read * this, off_t offset, off_t start,
   section_size_type size, bool aligned, bool cache) */

View * __thiscall
gold::File_read::find_or_make_view
          (File_read *this,off_t offset,off_t start,section_size_type size,bool aligned,bool cache)

{
  _Rb_tree_header *p_Var1;
  long lVar2;
  long lVar3;
  long lVar4;
  off_t oVar5;
  _Base_ptr p_Var6;
  pointer pcVar7;
  uint uVar8;
  View *pVVar9;
  uchar *__s;
  View *pVVar10;
  char *format;
  section_size_type size_00;
  ulong uVar11;
  View *pVVar12;
  uint uVar13;
  ulong uVar14;
  
  size_00 = this->size_;
  if (((long)size_00 < start) || (size_00 - start < size)) {
    pcVar7 = (this->name_)._M_dataplus._M_p;
    format = (char *)gettext(
                            "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"
                            );
                    /* WARNING: Subroutine does not return */
    gold_fatal(format,pcVar7,size,start);
  }
  uVar13 = 0;
  if (offset == 0) {
    pVVar10 = this->whole_file_view_;
  }
  else {
    if (parameters->target_ == (Target *)0x0) {
      uVar13 = 7;
      uVar8 = 8;
    }
    else {
      uVar8 = **(uint **)(parameters->target_ + 8) >> 3;
      uVar13 = uVar8 - 1;
    }
    uVar13 = uVar13 & (uint)offset;
    if (uVar13 != 0) {
      uVar13 = uVar8 - uVar13;
    }
    pVVar10 = this->whole_file_view_;
  }
  if (((pVVar10 == (View *)0x0) && (parameters->options_ != (General_options *)0x0)) &&
     ((parameters->options_->map_whole_files_).value != false)) {
    pVVar10 = make_view(this,0,size_00,0,cache);
    size_00 = this->size_;
    this->whole_file_view_ = pVVar10;
  }
  uVar8 = 0xffffffff;
  if (aligned) {
    uVar8 = uVar13;
  }
  uVar14 = start + offset;
  if (((long)size_00 < (long)uVar14) || (size_00 - uVar14 < size)) {
                    /* WARNING: Subroutine does not return */
    do_gold_unreachable("../../gold/fileread.cc",0x150,"find_view");
  }
  pVVar10 = this->whole_file_view_;
  if ((pVVar10 != (View *)0x0) && (0xfffffffd < uVar8 - 1)) {
LAB_0017b094:
    if (cache) {
      pVVar10->cache_ = true;
    }
    return pVVar10;
  }
  pVVar12 = (View *)(this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;
  p_Var1 = &(this->views_)._M_t._M_impl.super__Rb_tree_header;
  uVar11 = uVar14 & 0xffffffffffffe000;
  pVVar9 = (View *)p_Var1;
  if (pVVar12 != (View *)0x0) {
    do {
      while ((lVar2._0_1_ = pVVar12->cache_, lVar2._1_3_ = *(undefined3 *)&pVVar12->field_0x21,
             lVar2._4_4_ = pVVar12->data_ownership_, lVar2 <= (long)(uVar11 - 1) &&
             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0))))) {
        pVVar12 = *(View **)&pVVar12->lock_count_;
        if (pVVar12 == (View *)0x0) goto LAB_0017af56;
      }
      pVVar10 = (View *)pVVar12->data_;
      pVVar9 = pVVar12;
      pVVar12 = pVVar10;
    } while (pVVar10 != (View *)0x0);
LAB_0017af56:
    if (((View *)p_Var1 != pVVar9) &&
       (lVar3._0_1_ = pVVar9->cache_, lVar3._1_3_ = *(undefined3 *)&pVVar9->field_0x21,
       lVar3._4_4_ = pVVar9->data_ownership_, lVar3 <= (long)uVar11)) {
      do {
        pVVar10 = (View *)pVVar9[1].start_;
        if ((pVVar10->start_ <= (long)uVar14) &&
           ((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)
           ) {
          if ((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)) {
            pVVar10->accessed_ = true;
            goto LAB_0017b094;
          }
          if (pVVar12 == (View *)0x0) {
            pVVar12 = pVVar10;
          }
        }
        pVVar9 = (View *)std::_Rb_tree_increment((_Rb_tree_node_base *)pVVar9);
      } while (((View *)p_Var1 != pVVar9) &&
              (lVar4._0_1_ = pVVar9->cache_, lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,
              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11));
      if (pVVar12 != (View *)0x0) {
        if (!aligned) {
                    /* WARNING: Subroutine does not return */
          do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view");
        }
        uVar14 = (ulong)uVar13;
        __s = (uchar *)malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14);
        if (__s != (uchar *)0x0) {
          memset(__s,0,uVar14);
          memcpy(__s + uVar14,
                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)
                 ,(size_t)pVVar12->size_);
          oVar5 = pVVar12->start_;
          p_Var6 = (_Base_ptr)pVVar12->size_;
          pVVar10 = (View *)operator_new(0x30);
          pVVar10->start_ = oVar5;
          pVVar10->size_ = (section_size_type)p_Var6;
          pVVar10->data_ = __s;
          pVVar10->lock_count_ = 0;
          pVVar10->byteshift_ = uVar13;
          pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY;
          pVVar10->cache_ = cache;
          pVVar10->accessed_ = true;
          add_view(this,pVVar10);
          return pVVar10;
        }
                    /* WARNING: Subroutine does not return */
        gold_nomem();
      }
    }
  }
  if (!aligned) {
    uVar13 = 0;
  }
  pVVar10 = make_view(this,uVar14,size,uVar13,cache);
  return pVVar10;
}



long * FUN_0017ae70(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,
                   char param_6)

{
  long *plVar1;
  long lVar2;
  uint uVar3;
  long *plVar4;
  void *__s;
  undefined8 uVar5;
  long *plVar6;
  undefined8 uVar7;
  long lVar8;
  ulong uVar9;
  long *plVar10;
  uint uVar11;
  ulong uVar12;
  
  lVar8 = param_1[6];
  if ((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)) {
    uVar5 = *param_1;
    uVar7 = gettext(
                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"
                   );
                    /* WARNING: Subroutine does not return */
    FUN_001781e0(uVar7,uVar5,param_4,param_3);
  }
  uVar11 = 0;
  if (param_2 == 0) {
    lVar2 = param_1[0x16];
  }
  else {
    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {
      uVar11 = 7;
      uVar3 = 8;
    }
    else {
      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;
      uVar11 = uVar3 - 1;
    }
    uVar11 = uVar11 & (uint)param_2;
    if (uVar11 != 0) {
      uVar11 = uVar3 - uVar11;
    }
    lVar2 = param_1[0x16];
  }
  if (((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&
     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')) {
    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);
    lVar8 = param_1[6];
    param_1[0x16] = uVar5;
  }
  uVar3 = 0xffffffff;
  if (param_5 != '\0') {
    uVar3 = uVar11;
  }
  uVar12 = param_3 + param_2;
  if ((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");
  }
  plVar6 = (long *)param_1[0x16];
  if ((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)) {
LAB_0017b094:
    if (param_6 != '\0') {
      *(undefined1 *)(plVar6 + 4) = 1;
    }
    return plVar6;
  }
  plVar10 = (long *)param_1[0xd];
  plVar1 = param_1 + 0xc;
  uVar9 = uVar12 & 0xffffffffffffe000;
  plVar4 = plVar1;
  if (plVar10 != (long *)0x0) {
    do {
      while ((plVar10[4] <= (long)(uVar9 - 1) &&
             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {
        plVar10 = (long *)plVar10[3];
        if (plVar10 == (long *)0x0) goto LAB_0017af56;
      }
      plVar6 = (long *)plVar10[2];
      plVar4 = plVar10;
      plVar10 = plVar6;
    } while (plVar6 != (long *)0x0);
LAB_0017af56:
    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {
      do {
        plVar6 = (long *)plVar4[6];
        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {
          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {
            *(undefined1 *)(plVar6 + 5) = 1;
            goto LAB_0017b094;
          }
          if (plVar10 == (long *)0x0) {
            plVar10 = plVar6;
          }
        }
        plVar4 = (long *)thunk_FUN_002dc020(plVar4);
      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));
      if (plVar10 != (long *)0x0) {
        if (param_5 == '\0') {
                    /* WARNING: Subroutine does not return */
          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");
        }
        uVar12 = (ulong)uVar11;
        __s = malloc(plVar10[1] + uVar12);
        if (__s != (void *)0x0) {
          memset(__s,0,uVar12);
          memcpy((void *)((long)__s + uVar12),
                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);
          lVar8 = *plVar10;
          lVar2 = plVar10[1];
          plVar6 = (long *)FUN_002d9490(0x30);
          *plVar6 = lVar8;
          plVar6[1] = lVar2;
          plVar6[2] = (long)__s;
          *(undefined4 *)(plVar6 + 3) = 0;
          *(uint *)((long)plVar6 + 0x1c) = uVar11;
          *(undefined4 *)((long)plVar6 + 0x24) = 1;
          *(char *)(plVar6 + 4) = param_6;
          *(undefined1 *)(plVar6 + 5) = 1;
          FUN_0017aa60(param_1,plVar6);
          return plVar6;
        }
                    /* WARNING: Subroutine does not return */
        FUN_0017c600();
      }
    }
  }
  if (param_5 == '\0') {
    uVar11 = 0;
  }
  plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6);
  return plVar6;
}


PUSH R15
MOV R15,RCX
PUSH R14
PUSH R13
MOV R13,RDI
PUSH R12
MOV R12,RDX
PUSH RBP
PUSH RBX
SUB RSP,0x38
MOV RDX,qword ptr [RDI + 0x30]
MOV dword ptr [RSP + 0xc],R9D
CMP RDX,R12
JL 0x0017b189
MOV RAX,RDX
SUB RAX,R12
CMP RAX,RCX
JC 0x0017b189
MOV RBX,RSI
MOV R11D,R8D
XOR R14D,R14D
TEST RSI,RSI
JNZ 0x0017b0a8
CMP qword ptr [R13 + 0xb0],0x0
JZ 0x0017b0e3
TEST R11B,R11B
MOV ECX,0xffffffff
CMOVNZ ECX,R14D
ADD R12,RBX
CMP R12,RDX
JG 0x0017b171
SUB RDX,R12
CMP R15,RDX
JA 0x0017b171
MOV RBP,qword ptr [R13 + 0xb0]
TEST RBP,RBP
JZ 0x0017af04
LEA EAX,[RCX + -0x1]
CMP EAX,-0x3
JA 0x0017b094
MOV RDX,R12
MOV RBX,qword ptr [R13 + 0x68]
LEA RSI,[R13 + 0x60]
AND RDX,-0x2000
LEA RDI,[RDX + -0x1]
TEST RBX,RBX
JZ 0x0017b140
MOV RAX,RSI
JMP 0x0017af44
JNZ 0x0017af3b
MOV R8D,dword ptr [RBX + 0x28]
TEST R8D,R8D
JNZ 0x0017af4a
MOV RBX,qword ptr [RBX + 0x18]
TEST RBX,RBX
JZ 0x0017af56
CMP RDI,qword ptr [RBX + 0x20]
JGE 0x0017af30
MOV RAX,RBX
MOV RBX,qword ptr [RBX + 0x10]
TEST RBX,RBX
JNZ 0x0017af44
CMP RSI,RAX
JZ 0x0017b140
LEA RDI,[R15 + R12*0x1]
MOV qword ptr [RSP + 0x28],RDI
CMP RDX,qword ptr [RAX + 0x20]
JGE 0x0017af7e
JMP 0x0017b140
CMP RDX,qword ptr [RAX + 0x20]
JL 0x0017afe2
MOV RBP,qword ptr [RAX + 0x30]
MOV RDI,qword ptr [RBP]
CMP R12,RDI
JL 0x0017afaf
ADD RDI,qword ptr [RBP + 0x8]
CMP RDI,qword ptr [RSP + 0x28]
JL 0x0017afaf
CMP ECX,-0x1
JZ 0x0017b090
CMP ECX,dword ptr [RBP + 0x1c]
JZ 0x0017b090
TEST RBX,RBX
CMOVZ RBX,RBP
MOV RDI,RAX
MOV dword ptr [RSP + 0x24],R11D
MOV qword ptr [RSP + 0x18],RSI
MOV qword ptr [RSP + 0x10],RDX
MOV dword ptr [RSP + 0x20],ECX
CALL 0x002dc070
MOV RSI,qword ptr [RSP + 0x18]
MOV ECX,dword ptr [RSP + 0x20]
MOV RDX,qword ptr [RSP + 0x10]
MOV R11D,dword ptr [RSP + 0x24]
CMP RSI,RAX
JNZ 0x0017af78
TEST RBX,RBX
JZ 0x0017b140
TEST R11B,R11B
JZ 0x0017b1ac
MOV RDI,qword ptr [RBX + 0x8]
MOV EBP,R14D
ADD RDI,RBP
CALL 0x00147300
MOV R12,RAX
TEST RAX,RAX
JZ 0x0017b1c4
MOV RDX,RBP
XOR ESI,ESI
MOV RDI,RAX
CALL 0x00147100
MOV RDX,qword ptr [RBX + 0x8]
LEA RDI,[R12 + RBP*0x1]
MOV ESI,dword ptr [RBX + 0x1c]
ADD RSI,qword ptr [RBX + 0x10]
CALL 0x00147aa0
MOV R15,qword ptr [RBX]
MOV EDI,0x30
MOV RBX,qword ptr [RBX + 0x8]
CALL 0x002d9490
MOV RDI,R13
MOV RBP,RAX
MOV qword ptr [RAX],R15
MOV qword ptr [RAX + 0x8],RBX
MOV RSI,RBP
MOV qword ptr [RAX + 0x10],R12
MOV dword ptr [RAX + 0x18],0x0
MOV dword ptr [RAX + 0x1c],R14D
MOVZX EAX,byte ptr [RSP + 0xc]
MOV dword ptr [RBP + 0x24],0x1
MOV byte ptr [RBP + 0x20],AL
MOV byte ptr [RBP + 0x28],0x1
CALL 0x0017aa60
ADD RSP,0x38
MOV RAX,RBP
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV byte ptr [RBP + 0x28],0x1
CMP byte ptr [RSP + 0xc],0x0
JZ 0x0017b078
MOV byte ptr [RBP + 0x20],0x1
JMP 0x0017b078
MOV RAX,qword ptr [0x0043e6b0]
MOV RAX,qword ptr [RAX + 0x18]
TEST RAX,RAX
JZ 0x0017b130
MOV RAX,qword ptr [RAX + 0x8]
MOV EAX,dword ptr [RAX]
SHR EAX,0x3
LEA R9D,[RAX + -0x1]
AND R9D,EBX
SUB EAX,R9D
MOV R14D,R9D
TEST R9D,R9D
CMOVNZ R14D,EAX
CMP qword ptr [R13 + 0xb0],0x0
JNZ 0x0017aec8
MOV RAX,qword ptr [0x0043e6b0]
MOV RAX,qword ptr [RAX + 0x10]
TEST RAX,RAX
JZ 0x0017aec8
CMP byte ptr [RAX + 0x3819],0x0
JZ 0x0017aec8
MOVZX R8D,byte ptr [RSP + 0xc]
XOR ECX,ECX
XOR ESI,ESI
MOV RDI,R13
MOV dword ptr [RSP + 0x20],R11D
CALL 0x0017acb0
MOV RDX,qword ptr [R13 + 0x30]
MOV R11D,dword ptr [RSP + 0x20]
MOV qword ptr [R13 + 0xb0],RAX
JMP 0x0017aec8
MOV R9D,0x7
MOV EAX,0x8
JMP 0x0017b0c5
TEST R11B,R11B
MOV EAX,0x0
MOV RDX,R15
MOV RSI,R12
CMOVZ R14D,EAX
MOVZX R8D,byte ptr [RSP + 0xc]
ADD RSP,0x38
MOV RDI,R13
POP RBX
POP RBP
MOV ECX,R14D
POP R12
POP R13
POP R14
POP R15
JMP 0x0017acb0
LEA RDX,[0x372b28]
MOV ESI,0x150
LEA RDI,[0x372828]
CALL 0x0017c650
MOV RBX,qword ptr [R13]
LEA RDI,[0x372a30]
CALL 0x00147320
MOV RCX,R12
MOV RDX,R15
MOV RDI,RAX
MOV RSI,RBX
XOR EAX,EAX
CALL 0x001781e0
LEA RDX,[0x372af0]
MOV ESI,0x24c
LEA RDI,[0x372828]
CALL 0x0017c650
CALL 0x0017c600
(translation_unit "long * FUN_0017ae70(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)\n\n{\n  long *plVar1;\n  long lVar2;\n  uint uVar3;\n  long *plVar4;\n  void *__s;\n  undefined8 uVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  long lVar8;\n  ulong uVar9;\n  long *plVar10;\n  uint uVar11;\n  ulong uVar12;\n  \n  lVar8 = param_1[6];\n  if ((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)) {\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    /* WARNING: Subroutine does not return */\n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }\n  uVar11 = 0;\n  if (param_2 == 0) {\n    lVar2 = param_1[0x16];\n  }\n  else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }\n  if (((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')) {\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }\n  uVar3 = 0xffffffff;\n  if (param_5 != '\0') {\n    uVar3 = uVar11;\n  }\n  uVar12 = param_3 + param_2;\n  if ((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }\n  plVar6 = (long *)param_1[0x16];\n  if ((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)) {\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }\n  plVar10 = (long *)param_1[0xd];\n  plVar1 = param_1 + 0xc;\n  uVar9 = uVar12 & 0xffffffffffffe000;\n  plVar4 = plVar1;\n  if (plVar10 != (long *)0x0) {\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    /* WARNING: Subroutine does not return */\n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c600();\n      }\n    }\n  }\n  if (param_5 == '\0') {\n    uVar11 = 0;\n  }\n  plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6);\n  return plVar6;\n}\n\n" (function_definition "long * FUN_0017ae70(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)\n\n{\n  long *plVar1;\n  long lVar2;\n  uint uVar3;\n  long *plVar4;\n  void *__s;\n  undefined8 uVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  long lVar8;\n  ulong uVar9;\n  long *plVar10;\n  uint uVar11;\n  ulong uVar12;\n  \n  lVar8 = param_1[6];\n  if ((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)) {\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    /* WARNING: Subroutine does not return */\n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }\n  uVar11 = 0;\n  if (param_2 == 0) {\n    lVar2 = param_1[0x16];\n  }\n  else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }\n  if (((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')) {\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }\n  uVar3 = 0xffffffff;\n  if (param_5 != '\0') {\n    uVar3 = uVar11;\n  }\n  uVar12 = param_3 + param_2;\n  if ((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }\n  plVar6 = (long *)param_1[0x16];\n  if ((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)) {\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }\n  plVar10 = (long *)param_1[0xd];\n  plVar1 = param_1 + 0xc;\n  uVar9 = uVar12 & 0xffffffffffffe000;\n  plVar4 = plVar1;\n  if (plVar10 != (long *)0x0) {\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    /* WARNING: Subroutine does not return */\n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c600();\n      }\n    }\n  }\n  if (param_5 == '\0') {\n    uVar11 = 0;\n  }\n  plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6);\n  return plVar6;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_0017ae70(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)" * (function_declarator "FUN_0017ae70(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)" identifier (parameter_list "(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) , (parameter_declaration "char param_5" primitive_type identifier) , (parameter_declaration "char param_6" primitive_type identifier) )))) (compound_statement "{\n  long *plVar1;\n  long lVar2;\n  uint uVar3;\n  long *plVar4;\n  void *__s;\n  undefined8 uVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  long lVar8;\n  ulong uVar9;\n  long *plVar10;\n  uint uVar11;\n  ulong uVar12;\n  \n  lVar8 = param_1[6];\n  if ((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)) {\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    /* WARNING: Subroutine does not return */\n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }\n  uVar11 = 0;\n  if (param_2 == 0) {\n    lVar2 = param_1[0x16];\n  }\n  else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }\n  if (((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')) {\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }\n  uVar3 = 0xffffffff;\n  if (param_5 != '\0') {\n    uVar3 = uVar11;\n  }\n  uVar12 = param_3 + param_2;\n  if ((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }\n  plVar6 = (long *)param_1[0x16];\n  if ((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)) {\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }\n  plVar10 = (long *)param_1[0xd];\n  plVar1 = param_1 + 0xc;\n  uVar9 = uVar12 & 0xffffffffffffe000;\n  plVar4 = plVar1;\n  if (plVar10 != (long *)0x0) {\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    /* WARNING: Subroutine does not return */\n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c600();\n      }\n    }\n  }\n  if (param_5 == '\0') {\n    uVar11 = 0;\n  }\n  plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6);\n  return plVar6;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "void *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "long *plVar6;" (sized_type_specifier "long" long) (pointer_declarator "*plVar6" * identifier) ;) (declaration "undefined8 uVar7;" type_identifier identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar9;" type_identifier identifier ;) (declaration "long *plVar10;" (sized_type_specifier "long" long) (pointer_declarator "*plVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "ulong uVar12;" type_identifier identifier ;) (expression_statement "lVar8 = param_1[6];" (assignment_expression "lVar8 = param_1[6]" identifier = (subscript_expression "param_1[6]" identifier [ number_literal ])) ;) (if_statement "if ((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)) {\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    /* WARNING: Subroutine does not return */\n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }" if (parenthesized_expression "((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4))" ( (binary_expression "(lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)" (parenthesized_expression "(lVar8 < param_3)" ( (binary_expression "lVar8 < param_3" identifier < identifier) )) || (parenthesized_expression "((ulong)(lVar8 - param_3) < param_4)" ( (binary_expression "(ulong)(lVar8 - param_3) < param_4" (call_expression "(ulong)(lVar8 - param_3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(lVar8 - param_3)" ( (binary_expression "lVar8 - param_3" identifier - identifier) ))) < identifier) ))) )) (compound_statement "{\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    /* WARNING: Subroutine does not return */\n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }" { (expression_statement "uVar5 = *param_1;" (assignment_expression "uVar5 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );" (assignment_expression "uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   )" identifier = (call_expression "gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   )" identifier (argument_list "(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   )" ( (string_literal ""%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"" " string_content ") )))) ;) comment (expression_statement "FUN_001781e0(uVar7,uVar5,param_4,param_3);" (call_expression "FUN_001781e0(uVar7,uVar5,param_4,param_3)" identifier (argument_list "(uVar7,uVar5,param_4,param_3)" ( identifier , identifier , identifier , identifier ))) ;) })) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (if_statement "if (param_2 == 0) {\n    lVar2 = param_1[0x16];\n  }\n  else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    lVar2 = param_1[0x16];\n  }" { (expression_statement "lVar2 = param_1[0x16];" (assignment_expression "lVar2 = param_1[0x16]" identifier = (subscript_expression "param_1[0x16]" identifier [ number_literal ])) ;) }) (else_clause "else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }" else (compound_statement "{\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }" { (if_statement "if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }" if (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0)" ( (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x18)" * (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x18)" ( (binary_expression "PTR_DAT_0043e6b0 + 0x18" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      uVar11 = 7;\n      uVar3 = 8;\n    }" { (expression_statement "uVar11 = 7;" (assignment_expression "uVar11 = 7" identifier = number_literal) ;) (expression_statement "uVar3 = 8;" (assignment_expression "uVar3 = 8" identifier = number_literal) ;) }) (else_clause "else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }" else (compound_statement "{\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }" { (expression_statement "uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;" (assignment_expression "uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3" identifier = (binary_expression "**(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3" (pointer_expression "**(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8)" * (pointer_expression "*(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8)" * (cast_expression "(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8)" ( (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x18)" * (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x18)" ( (binary_expression "PTR_DAT_0043e6b0 + 0x18" identifier + number_literal) )))) + number_literal) ))))) >> number_literal)) ;) (expression_statement "uVar11 = uVar3 - 1;" (assignment_expression "uVar11 = uVar3 - 1" identifier = (binary_expression "uVar3 - 1" identifier - number_literal)) ;) }))) (expression_statement "uVar11 = uVar11 & (uint)param_2;" (assignment_expression "uVar11 = uVar11 & (uint)param_2" identifier = (binary_expression "uVar11 & (uint)param_2" identifier & (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }" if (parenthesized_expression "(uVar11 != 0)" ( (binary_expression "uVar11 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar11 = uVar3 - uVar11;\n    }" { (expression_statement "uVar11 = uVar3 - uVar11;" (assignment_expression "uVar11 = uVar3 - uVar11" identifier = (binary_expression "uVar3 - uVar11" identifier - identifier)) ;) })) (expression_statement "lVar2 = param_1[0x16];" (assignment_expression "lVar2 = param_1[0x16]" identifier = (subscript_expression "param_1[0x16]" identifier [ number_literal ])) ;) }))) (if_statement "if (((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')) {\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }" if (parenthesized_expression "(((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0'))" ( (binary_expression "((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')" (parenthesized_expression "((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0))" ( (binary_expression "(lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)" (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) && (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)" ( (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x10)" ( (binary_expression "PTR_DAT_0043e6b0 + 0x10" identifier + number_literal) )))) != number_literal) ))) )) && (parenthesized_expression "(*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')" ( (binary_expression "*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0'" (pointer_expression "*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819)" * (cast_expression "(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819)" ( (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x10)" ( (binary_expression "PTR_DAT_0043e6b0 + 0x10" identifier + number_literal) )))) + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }" { (expression_statement "uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);" (assignment_expression "uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6)" identifier = (call_expression "FUN_0017acb0(param_1,0,lVar8,0,param_6)" identifier (argument_list "(param_1,0,lVar8,0,param_6)" ( identifier , number_literal , identifier , number_literal , identifier )))) ;) (expression_statement "lVar8 = param_1[6];" (assignment_expression "lVar8 = param_1[6]" identifier = (subscript_expression "param_1[6]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x16] = uVar5;" (assignment_expression "param_1[0x16] = uVar5" (subscript_expression "param_1[0x16]" identifier [ number_literal ]) = identifier) ;) })) (expression_statement "uVar3 = 0xffffffff;" (assignment_expression "uVar3 = 0xffffffff" identifier = number_literal) ;) (if_statement "if (param_5 != '\0') {\n    uVar3 = uVar11;\n  }" if (parenthesized_expression "(param_5 != '\0')" ( (binary_expression "param_5 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar3 = uVar11;\n  }" { (expression_statement "uVar3 = uVar11;" (assignment_expression "uVar3 = uVar11" identifier = identifier) ;) })) (expression_statement "uVar12 = param_3 + param_2;" (assignment_expression "uVar12 = param_3 + param_2" identifier = (binary_expression "param_3 + param_2" identifier + identifier)) ;) (if_statement "if ((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)) {\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }" if (parenthesized_expression "((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4))" ( (binary_expression "(lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)" (parenthesized_expression "(lVar8 < (long)uVar12)" ( (binary_expression "lVar8 < (long)uVar12" identifier < (cast_expression "(long)uVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) || (parenthesized_expression "(lVar8 - uVar12 < param_4)" ( (binary_expression "lVar8 - uVar12 < param_4" (binary_expression "lVar8 - uVar12" identifier - identifier) < identifier) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }" { comment (expression_statement "FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");" (call_expression "FUN_0017c650("../../gold/fileread.cc",0x150,"find_view")" identifier (argument_list "("../../gold/fileread.cc",0x150,"find_view")" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""find_view"" " string_content ") ))) ;) })) (expression_statement "plVar6 = (long *)param_1[0x16];" (assignment_expression "plVar6 = (long *)param_1[0x16]" identifier = (cast_expression "(long *)param_1[0x16]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x16]" identifier [ number_literal ]))) ;) (if_statement "if ((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)) {\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }" if (parenthesized_expression "((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1))" ( (binary_expression "(plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)" (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(0xfffffffd < uVar3 - 1)" ( (binary_expression "0xfffffffd < uVar3 - 1" number_literal < (binary_expression "uVar3 - 1" identifier - number_literal)) ))) )) (compound_statement "{\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }" { (labeled_statement "LAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }" statement_identifier : (if_statement "if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }" if (parenthesized_expression "(param_6 != '\0')" ( (binary_expression "param_6 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }" { (expression_statement "*(undefined1 *)(plVar6 + 4) = 1;" (assignment_expression "*(undefined1 *)(plVar6 + 4) = 1" (pointer_expression "*(undefined1 *)(plVar6 + 4)" * (cast_expression "(undefined1 *)(plVar6 + 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar6 + 4)" ( (binary_expression "plVar6 + 4" identifier + number_literal) )))) = number_literal) ;) }))) (return_statement "return plVar6;" return identifier ;) })) (expression_statement "plVar10 = (long *)param_1[0xd];" (assignment_expression "plVar10 = (long *)param_1[0xd]" identifier = (cast_expression "(long *)param_1[0xd]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0xd]" identifier [ number_literal ]))) ;) (expression_statement "plVar1 = param_1 + 0xc;" (assignment_expression "plVar1 = param_1 + 0xc" identifier = (binary_expression "param_1 + 0xc" identifier + number_literal)) ;) (expression_statement "uVar9 = uVar12 & 0xffffffffffffe000;" (assignment_expression "uVar9 = uVar12 & 0xffffffffffffe000" identifier = (binary_expression "uVar12 & 0xffffffffffffe000" identifier & number_literal)) ;) (expression_statement "plVar4 = plVar1;" (assignment_expression "plVar4 = plVar1" identifier = identifier) ;) (if_statement "if (plVar10 != (long *)0x0) {\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    /* WARNING: Subroutine does not return */\n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c600();\n      }\n    }\n  }" if (parenthesized_expression "(plVar10 != (long *)0x0)" ( (binary_expression "plVar10 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    /* WARNING: Subroutine does not return */\n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c600();\n      }\n    }\n  }" { (do_statement "do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);" do (compound_statement "{\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    }" { (while_statement "while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }" while (parenthesized_expression "((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0)))))" ( (parenthesized_expression "(plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))" ( (binary_expression "plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0)))" (binary_expression "plVar10[4] <= (long)(uVar9 - 1)" (subscript_expression "plVar10[4]" identifier [ number_literal ]) <= (cast_expression "(long)(uVar9 - 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(uVar9 - 1)" ( (binary_expression "uVar9 - 1" identifier - number_literal) )))) && (parenthesized_expression "((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0)))" ( (parenthesized_expression "(uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))" ( (binary_expression "uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0)" (binary_expression "uVar9 - 1 != plVar10[4]" (binary_expression "uVar9 - 1" identifier - number_literal) != (subscript_expression "plVar10[4]" identifier [ number_literal ])) || (parenthesized_expression "((int)plVar10[5] == 0)" ( (binary_expression "(int)plVar10[5] == 0" (cast_expression "(int)plVar10[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar10[5]" identifier [ number_literal ])) == number_literal) ))) )) ))) )) )) (compound_statement "{\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }" { (expression_statement "plVar10 = (long *)plVar10[3];" (assignment_expression "plVar10 = (long *)plVar10[3]" identifier = (cast_expression "(long *)plVar10[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar10[3]" identifier [ number_literal ]))) ;) (if_statement "if (plVar10 == (long *)0x0) goto LAB_0017af56;" if (parenthesized_expression "(plVar10 == (long *)0x0)" ( (binary_expression "plVar10 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0017af56;" goto statement_identifier ;)) })) (expression_statement "plVar6 = (long *)plVar10[2];" (assignment_expression "plVar6 = (long *)plVar10[2]" identifier = (cast_expression "(long *)plVar10[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar10[2]" identifier [ number_literal ]))) ;) (expression_statement "plVar4 = plVar10;" (assignment_expression "plVar4 = plVar10" identifier = identifier) ;) (expression_statement "plVar10 = plVar6;" (assignment_expression "plVar10 = plVar6" identifier = identifier) ;) }) while (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (labeled_statement "LAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    /* WARNING: Subroutine does not return */\n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c600();\n      }\n    }" statement_identifier : (if_statement "if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    /* WARNING: Subroutine does not return */\n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c600();\n      }\n    }" if (parenthesized_expression "((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9))" ( (binary_expression "(plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)" (parenthesized_expression "(plVar1 != plVar4)" ( (binary_expression "plVar1 != plVar4" identifier != identifier) )) && (parenthesized_expression "(plVar4[4] <= (long)uVar9)" ( (binary_expression "plVar4[4] <= (long)uVar9" (subscript_expression "plVar4[4]" identifier [ number_literal ]) <= (cast_expression "(long)uVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) )) (compound_statement "{\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    /* WARNING: Subroutine does not return */\n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c600();\n      }\n    }" { (do_statement "do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));" do (compound_statement "{\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      }" { (expression_statement "plVar6 = (long *)plVar4[6];" (assignment_expression "plVar6 = (long *)plVar4[6]" identifier = (cast_expression "(long *)plVar4[6]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[6]" identifier [ number_literal ]))) ;) (if_statement "if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }" if (parenthesized_expression "((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1]))" ( (binary_expression "(*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])" (parenthesized_expression "(*plVar6 <= (long)uVar12)" ( (binary_expression "*plVar6 <= (long)uVar12" (pointer_expression "*plVar6" * identifier) <= (cast_expression "(long)uVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) && (parenthesized_expression "((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])" ( (binary_expression "(long)(param_4 + uVar12) <= *plVar6 + plVar6[1]" (cast_expression "(long)(param_4 + uVar12)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_4 + uVar12)" ( (binary_expression "param_4 + uVar12" identifier + identifier) ))) <= (binary_expression "*plVar6 + plVar6[1]" (pointer_expression "*plVar6" * identifier) + (subscript_expression "plVar6[1]" identifier [ number_literal ]))) ))) )) (compound_statement "{\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }" { (if_statement "if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }" if (parenthesized_expression "((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c)))" ( (binary_expression "(uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))" (parenthesized_expression "(uVar3 == 0xffffffff)" ( (binary_expression "uVar3 == 0xffffffff" identifier == number_literal) )) || (parenthesized_expression "(uVar3 == *(uint *)((long)plVar6 + 0x1c))" ( (binary_expression "uVar3 == *(uint *)((long)plVar6 + 0x1c)" identifier == (pointer_expression "*(uint *)((long)plVar6 + 0x1c)" * (cast_expression "(uint *)((long)plVar6 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar6 + 0x1c)" ( (binary_expression "(long)plVar6 + 0x1c" (cast_expression "(long)plVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ))) )) (compound_statement "{\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }" { (expression_statement "*(undefined1 *)(plVar6 + 5) = 1;" (assignment_expression "*(undefined1 *)(plVar6 + 5) = 1" (pointer_expression "*(undefined1 *)(plVar6 + 5)" * (cast_expression "(undefined1 *)(plVar6 + 5)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar6 + 5)" ( (binary_expression "plVar6 + 5" identifier + number_literal) )))) = number_literal) ;) (goto_statement "goto LAB_0017b094;" goto statement_identifier ;) })) (if_statement "if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }" if (parenthesized_expression "(plVar10 == (long *)0x0)" ( (binary_expression "plVar10 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            plVar10 = plVar6;\n          }" { (expression_statement "plVar10 = plVar6;" (assignment_expression "plVar10 = plVar6" identifier = identifier) ;) })) })) (expression_statement "plVar4 = (long *)thunk_FUN_002dc020(plVar4);" (assignment_expression "plVar4 = (long *)thunk_FUN_002dc020(plVar4)" identifier = (cast_expression "(long *)thunk_FUN_002dc020(plVar4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "thunk_FUN_002dc020(plVar4)" identifier (argument_list "(plVar4)" ( identifier ))))) ;) }) while (parenthesized_expression "((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9))" ( (binary_expression "(plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)" (parenthesized_expression "(plVar1 != plVar4)" ( (binary_expression "plVar1 != plVar4" identifier != identifier) )) && (parenthesized_expression "(plVar4[4] <= (long)uVar9)" ( (binary_expression "plVar4[4] <= (long)uVar9" (subscript_expression "plVar4[4]" identifier [ number_literal ]) <= (cast_expression "(long)uVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) )) ;) (if_statement "if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    /* WARNING: Subroutine does not return */\n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c600();\n      }" if (parenthesized_expression "(plVar10 != (long *)0x0)" ( (binary_expression "plVar10 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        if (param_5 == '\0') {\n                    /* WARNING: Subroutine does not return */\n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    /* WARNING: Subroutine does not return */\n        FUN_0017c600();\n      }" { (if_statement "if (param_5 == '\0') {\n                    /* WARNING: Subroutine does not return */\n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }" if (parenthesized_expression "(param_5 == '\0')" ( (binary_expression "param_5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }" { comment (expression_statement "FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");" (call_expression "FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view")" identifier (argument_list "("../../gold/fileread.cc",0x24c,"find_or_make_view")" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""find_or_make_view"" " string_content ") ))) ;) })) (expression_statement "uVar12 = (ulong)uVar11;" (assignment_expression "uVar12 = (ulong)uVar11" identifier = (cast_expression "(ulong)uVar11" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "__s = malloc(plVar10[1] + uVar12);" (assignment_expression "__s = malloc(plVar10[1] + uVar12)" identifier = (call_expression "malloc(plVar10[1] + uVar12)" identifier (argument_list "(plVar10[1] + uVar12)" ( (binary_expression "plVar10[1] + uVar12" (subscript_expression "plVar10[1]" identifier [ number_literal ]) + identifier) )))) ;) (if_statement "if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }" if (parenthesized_expression "(__s != (void *)0x0)" ( (binary_expression "__s != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }" { (expression_statement "memset(__s,0,uVar12);" (call_expression "memset(__s,0,uVar12)" identifier (argument_list "(__s,0,uVar12)" ( identifier , number_literal , identifier ))) ;) (expression_statement "memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);" (call_expression "memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1])" identifier (argument_list "((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1])" ( (cast_expression "(void *)((long)__s + uVar12)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__s + uVar12)" ( (binary_expression "(long)__s + uVar12" (cast_expression "(long)__s" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) , (cast_expression "(void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2])" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2])" ( (binary_expression "(ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]" (binary_expression "(ulong)*(uint *)((long)plVar10 + 0x1c)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)((long)plVar10 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar10 + 0x1c)" ( (binary_expression "(long)plVar10 + 0x1c" (cast_expression "(long)plVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) + (subscript_expression "plVar10[2]" identifier [ number_literal ])) ))) , (subscript_expression "plVar10[1]" identifier [ number_literal ]) ))) ;) (expression_statement "lVar8 = *plVar10;" (assignment_expression "lVar8 = *plVar10" identifier = (pointer_expression "*plVar10" * identifier)) ;) (expression_statement "lVar2 = plVar10[1];" (assignment_expression "lVar2 = plVar10[1]" identifier = (subscript_expression "plVar10[1]" identifier [ number_literal ])) ;) (expression_statement "plVar6 = (long *)FUN_002d9490(0x30);" (assignment_expression "plVar6 = (long *)FUN_002d9490(0x30)" identifier = (cast_expression "(long *)FUN_002d9490(0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002d9490(0x30)" identifier (argument_list "(0x30)" ( number_literal ))))) ;) (expression_statement "*plVar6 = lVar8;" (assignment_expression "*plVar6 = lVar8" (pointer_expression "*plVar6" * identifier) = identifier) ;) (expression_statement "plVar6[1] = lVar2;" (assignment_expression "plVar6[1] = lVar2" (subscript_expression "plVar6[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar6[2] = (long)__s;" (assignment_expression "plVar6[2] = (long)__s" (subscript_expression "plVar6[2]" identifier [ number_literal ]) = (cast_expression "(long)__s" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "*(undefined4 *)(plVar6 + 3) = 0;" (assignment_expression "*(undefined4 *)(plVar6 + 3) = 0" (pointer_expression "*(undefined4 *)(plVar6 + 3)" * (cast_expression "(undefined4 *)(plVar6 + 3)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar6 + 3)" ( (binary_expression "plVar6 + 3" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)((long)plVar6 + 0x1c) = uVar11;" (assignment_expression "*(uint *)((long)plVar6 + 0x1c) = uVar11" (pointer_expression "*(uint *)((long)plVar6 + 0x1c)" * (cast_expression "(uint *)((long)plVar6 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar6 + 0x1c)" ( (binary_expression "(long)plVar6 + 0x1c" (cast_expression "(long)plVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)((long)plVar6 + 0x24) = 1;" (assignment_expression "*(undefined4 *)((long)plVar6 + 0x24) = 1" (pointer_expression "*(undefined4 *)((long)plVar6 + 0x24)" * (cast_expression "(undefined4 *)((long)plVar6 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar6 + 0x24)" ( (binary_expression "(long)plVar6 + 0x24" (cast_expression "(long)plVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(char *)(plVar6 + 4) = param_6;" (assignment_expression "*(char *)(plVar6 + 4) = param_6" (pointer_expression "*(char *)(plVar6 + 4)" * (cast_expression "(char *)(plVar6 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar6 + 4)" ( (binary_expression "plVar6 + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 *)(plVar6 + 5) = 1;" (assignment_expression "*(undefined1 *)(plVar6 + 5) = 1" (pointer_expression "*(undefined1 *)(plVar6 + 5)" * (cast_expression "(undefined1 *)(plVar6 + 5)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar6 + 5)" ( (binary_expression "plVar6 + 5" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_0017aa60(param_1,plVar6);" (call_expression "FUN_0017aa60(param_1,plVar6)" identifier (argument_list "(param_1,plVar6)" ( identifier , identifier ))) ;) (return_statement "return plVar6;" return identifier ;) })) comment (expression_statement "FUN_0017c600();" (call_expression "FUN_0017c600()" identifier (argument_list "()" ( ))) ;) })) }))) })) (if_statement "if (param_5 == '\0') {\n    uVar11 = 0;\n  }" if (parenthesized_expression "(param_5 == '\0')" ( (binary_expression "param_5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar11 = 0;\n  }" { (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) })) (expression_statement "plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6);" (assignment_expression "plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6)" identifier = (cast_expression "(long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6)" identifier (argument_list "(param_1,uVar12,param_4,uVar11,param_6)" ( identifier , identifier , identifier , identifier , identifier ))))) ;) (return_statement "return plVar6;" return identifier ;) })))
(translation_unit "/* WARNING: Type propagation algorithm not settling */\n/* WARNING: Enum "DT": Some values do not have unique names */\n/* DWARF original prototype: View * find_or_make_view(File_read * this, off_t offset, off_t start,\n   section_size_type size, bool aligned, bool cache) */\n\nView * __thiscall\ngold::File_read::find_or_make_view\n          (File_read *this,off_t offset,off_t start,section_size_type size,bool aligned,bool cache)\n\n{\n  _Rb_tree_header *p_Var1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  off_t oVar5;\n  _Base_ptr p_Var6;\n  pointer pcVar7;\n  uint uVar8;\n  View *pVVar9;\n  uchar *__s;\n  View *pVVar10;\n  char *format;\n  section_size_type size_00;\n  ulong uVar11;\n  View *pVVar12;\n  uint uVar13;\n  ulong uVar14;\n  \n  size_00 = this->size_;\n  if (((long)size_00 < start) || (size_00 - start < size)) {\n    pcVar7 = (this->name_)._M_dataplus._M_p;\n    format = (char *)gettext(\n                            "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                            );\n                    /* WARNING: Subroutine does not return */\n    gold_fatal(format,pcVar7,size,start);\n  }\n  uVar13 = 0;\n  if (offset == 0) {\n    pVVar10 = this->whole_file_view_;\n  }\n  else {\n    if (parameters->target_ == (Target *)0x0) {\n      uVar13 = 7;\n      uVar8 = 8;\n    }\n    else {\n      uVar8 = **(uint **)(parameters->target_ + 8) >> 3;\n      uVar13 = uVar8 - 1;\n    }\n    uVar13 = uVar13 & (uint)offset;\n    if (uVar13 != 0) {\n      uVar13 = uVar8 - uVar13;\n    }\n    pVVar10 = this->whole_file_view_;\n  }\n  if (((pVVar10 == (View *)0x0) && (parameters->options_ != (General_options *)0x0)) &&\n     ((parameters->options_->map_whole_files_).value != false)) {\n    pVVar10 = make_view(this,0,size_00,0,cache);\n    size_00 = this->size_;\n    this->whole_file_view_ = pVVar10;\n  }\n  uVar8 = 0xffffffff;\n  if (aligned) {\n    uVar8 = uVar13;\n  }\n  uVar14 = start + offset;\n  if (((long)size_00 < (long)uVar14) || (size_00 - uVar14 < size)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/fileread.cc",0x150,"find_view");\n  }\n  pVVar10 = this->whole_file_view_;\n  if ((pVVar10 != (View *)0x0) && (0xfffffffd < uVar8 - 1)) {\nLAB_0017b094:\n    if (cache) {\n      pVVar10->cache_ = true;\n    }\n    return pVVar10;\n  }\n  pVVar12 = (View *)(this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;\n  p_Var1 = &(this->views_)._M_t._M_impl.super__Rb_tree_header;\n  uVar11 = uVar14 & 0xffffffffffffe000;\n  pVVar9 = (View *)p_Var1;\n  if (pVVar12 != (View *)0x0) {\n    do {\n      while ((lVar2._0_1_ = pVVar12->cache_, lVar2._1_3_ = *(undefined3 *)&pVVar12->field_0x21,\n             lVar2._4_4_ = pVVar12->data_ownership_, lVar2 <= (long)(uVar11 - 1) &&\n             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0))))) {\n        pVVar12 = *(View **)&pVVar12->lock_count_;\n        if (pVVar12 == (View *)0x0) goto LAB_0017af56;\n      }\n      pVVar10 = (View *)pVVar12->data_;\n      pVVar9 = pVVar12;\n      pVVar12 = pVVar10;\n    } while (pVVar10 != (View *)0x0);\nLAB_0017af56:\n    if (((View *)p_Var1 != pVVar9) &&\n       (lVar3._0_1_ = pVVar9->cache_, lVar3._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n       lVar3._4_4_ = pVVar9->data_ownership_, lVar3 <= (long)uVar11)) {\n      do {\n        pVVar10 = (View *)pVVar9[1].start_;\n        if ((pVVar10->start_ <= (long)uVar14) &&\n           ((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)\n           ) {\n          if ((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)) {\n            pVVar10->accessed_ = true;\n            goto LAB_0017b094;\n          }\n          if (pVVar12 == (View *)0x0) {\n            pVVar12 = pVVar10;\n          }\n        }\n        pVVar9 = (View *)std::_Rb_tree_increment((_Rb_tree_node_base *)pVVar9);\n      } while (((View *)p_Var1 != pVVar9) &&\n              (lVar4._0_1_ = pVVar9->cache_, lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11));\n      if (pVVar12 != (View *)0x0) {\n        if (!aligned) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar14 = (ulong)uVar13;\n        __s = (uchar *)malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14);\n        if (__s != (uchar *)0x0) {\n          memset(__s,0,uVar14);\n          memcpy(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_);\n          oVar5 = pVVar12->start_;\n          p_Var6 = (_Base_ptr)pVVar12->size_;\n          pVVar10 = (View *)operator_new(0x30);\n          pVVar10->start_ = oVar5;\n          pVVar10->size_ = (section_size_type)p_Var6;\n          pVVar10->data_ = __s;\n          pVVar10->lock_count_ = 0;\n          pVVar10->byteshift_ = uVar13;\n          pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY;\n          pVVar10->cache_ = cache;\n          pVVar10->accessed_ = true;\n          add_view(this,pVVar10);\n          return pVVar10;\n        }\n                    /* WARNING: Subroutine does not return */\n        gold_nomem();\n      }\n    }\n  }\n  if (!aligned) {\n    uVar13 = 0;\n  }\n  pVVar10 = make_view(this,uVar14,size,uVar13,cache);\n  return pVVar10;\n}\n\n" comment comment comment (ERROR "View * __thiscall\ngold::File_read::find_or_make_view\n          (File_read *this,off_t offset,off_t start,section_size_type size,bool aligned,bool cache)" (binary_expression "View * __thiscall\ngold::File_read::find_or_make_view\n          (File_read *this,off_t offset,off_t start,section_size_type size,bool aligned,bool cache)" identifier * (call_expression "__thiscall\ngold::File_read::find_or_make_view\n          (File_read *this,off_t offset,off_t start,section_size_type size,bool aligned,bool cache)" identifier (ERROR "gold::File_read::find_or_make_view" identifier : : identifier : : identifier) (argument_list "(File_read *this,off_t offset,off_t start,section_size_type size,bool aligned,bool cache)" ( (binary_expression "File_read *this" identifier * identifier) , (ERROR "off_t" identifier) identifier , identifier (ERROR "start" identifier) , identifier (ERROR "size" identifier) , (ERROR "bool" identifier) identifier , (ERROR "bool" identifier) identifier ))))) (compound_statement "{\n  _Rb_tree_header *p_Var1;\n  long lVar2;\n  long lVar3;\n  long lVar4;\n  off_t oVar5;\n  _Base_ptr p_Var6;\n  pointer pcVar7;\n  uint uVar8;\n  View *pVVar9;\n  uchar *__s;\n  View *pVVar10;\n  char *format;\n  section_size_type size_00;\n  ulong uVar11;\n  View *pVVar12;\n  uint uVar13;\n  ulong uVar14;\n  \n  size_00 = this->size_;\n  if (((long)size_00 < start) || (size_00 - start < size)) {\n    pcVar7 = (this->name_)._M_dataplus._M_p;\n    format = (char *)gettext(\n                            "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                            );\n                    /* WARNING: Subroutine does not return */\n    gold_fatal(format,pcVar7,size,start);\n  }\n  uVar13 = 0;\n  if (offset == 0) {\n    pVVar10 = this->whole_file_view_;\n  }\n  else {\n    if (parameters->target_ == (Target *)0x0) {\n      uVar13 = 7;\n      uVar8 = 8;\n    }\n    else {\n      uVar8 = **(uint **)(parameters->target_ + 8) >> 3;\n      uVar13 = uVar8 - 1;\n    }\n    uVar13 = uVar13 & (uint)offset;\n    if (uVar13 != 0) {\n      uVar13 = uVar8 - uVar13;\n    }\n    pVVar10 = this->whole_file_view_;\n  }\n  if (((pVVar10 == (View *)0x0) && (parameters->options_ != (General_options *)0x0)) &&\n     ((parameters->options_->map_whole_files_).value != false)) {\n    pVVar10 = make_view(this,0,size_00,0,cache);\n    size_00 = this->size_;\n    this->whole_file_view_ = pVVar10;\n  }\n  uVar8 = 0xffffffff;\n  if (aligned) {\n    uVar8 = uVar13;\n  }\n  uVar14 = start + offset;\n  if (((long)size_00 < (long)uVar14) || (size_00 - uVar14 < size)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/fileread.cc",0x150,"find_view");\n  }\n  pVVar10 = this->whole_file_view_;\n  if ((pVVar10 != (View *)0x0) && (0xfffffffd < uVar8 - 1)) {\nLAB_0017b094:\n    if (cache) {\n      pVVar10->cache_ = true;\n    }\n    return pVVar10;\n  }\n  pVVar12 = (View *)(this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;\n  p_Var1 = &(this->views_)._M_t._M_impl.super__Rb_tree_header;\n  uVar11 = uVar14 & 0xffffffffffffe000;\n  pVVar9 = (View *)p_Var1;\n  if (pVVar12 != (View *)0x0) {\n    do {\n      while ((lVar2._0_1_ = pVVar12->cache_, lVar2._1_3_ = *(undefined3 *)&pVVar12->field_0x21,\n             lVar2._4_4_ = pVVar12->data_ownership_, lVar2 <= (long)(uVar11 - 1) &&\n             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0))))) {\n        pVVar12 = *(View **)&pVVar12->lock_count_;\n        if (pVVar12 == (View *)0x0) goto LAB_0017af56;\n      }\n      pVVar10 = (View *)pVVar12->data_;\n      pVVar9 = pVVar12;\n      pVVar12 = pVVar10;\n    } while (pVVar10 != (View *)0x0);\nLAB_0017af56:\n    if (((View *)p_Var1 != pVVar9) &&\n       (lVar3._0_1_ = pVVar9->cache_, lVar3._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n       lVar3._4_4_ = pVVar9->data_ownership_, lVar3 <= (long)uVar11)) {\n      do {\n        pVVar10 = (View *)pVVar9[1].start_;\n        if ((pVVar10->start_ <= (long)uVar14) &&\n           ((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)\n           ) {\n          if ((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)) {\n            pVVar10->accessed_ = true;\n            goto LAB_0017b094;\n          }\n          if (pVVar12 == (View *)0x0) {\n            pVVar12 = pVVar10;\n          }\n        }\n        pVVar9 = (View *)std::_Rb_tree_increment((_Rb_tree_node_base *)pVVar9);\n      } while (((View *)p_Var1 != pVVar9) &&\n              (lVar4._0_1_ = pVVar9->cache_, lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11));\n      if (pVVar12 != (View *)0x0) {\n        if (!aligned) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar14 = (ulong)uVar13;\n        __s = (uchar *)malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14);\n        if (__s != (uchar *)0x0) {\n          memset(__s,0,uVar14);\n          memcpy(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_);\n          oVar5 = pVVar12->start_;\n          p_Var6 = (_Base_ptr)pVVar12->size_;\n          pVVar10 = (View *)operator_new(0x30);\n          pVVar10->start_ = oVar5;\n          pVVar10->size_ = (section_size_type)p_Var6;\n          pVVar10->data_ = __s;\n          pVVar10->lock_count_ = 0;\n          pVVar10->byteshift_ = uVar13;\n          pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY;\n          pVVar10->cache_ = cache;\n          pVVar10->accessed_ = true;\n          add_view(this,pVVar10);\n          return pVVar10;\n        }\n                    /* WARNING: Subroutine does not return */\n        gold_nomem();\n      }\n    }\n  }\n  if (!aligned) {\n    uVar13 = 0;\n  }\n  pVVar10 = make_view(this,uVar14,size,uVar13,cache);\n  return pVVar10;\n}" { (declaration "_Rb_tree_header *p_Var1;" type_identifier (pointer_declarator "*p_Var1" * identifier) ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar3;" (sized_type_specifier "long" long) identifier ;) (declaration "long lVar4;" (sized_type_specifier "long" long) identifier ;) (declaration "off_t oVar5;" type_identifier identifier ;) (declaration "_Base_ptr p_Var6;" type_identifier identifier ;) (declaration "pointer pcVar7;" type_identifier identifier ;) (declaration "uint uVar8;" type_identifier identifier ;) (declaration "View *pVVar9;" type_identifier (pointer_declarator "*pVVar9" * identifier) ;) (declaration "uchar *__s;" type_identifier (pointer_declarator "*__s" * identifier) ;) (declaration "View *pVVar10;" type_identifier (pointer_declarator "*pVVar10" * identifier) ;) (declaration "char *format;" primitive_type (pointer_declarator "*format" * identifier) ;) (declaration "section_size_type size_00;" type_identifier identifier ;) (declaration "ulong uVar11;" type_identifier identifier ;) (declaration "View *pVVar12;" type_identifier (pointer_declarator "*pVVar12" * identifier) ;) (declaration "uint uVar13;" type_identifier identifier ;) (declaration "ulong uVar14;" type_identifier identifier ;) (expression_statement "size_00 = this->size_;" (assignment_expression "size_00 = this->size_" identifier = (field_expression "this->size_" identifier -> field_identifier)) ;) (if_statement "if (((long)size_00 < start) || (size_00 - start < size)) {\n    pcVar7 = (this->name_)._M_dataplus._M_p;\n    format = (char *)gettext(\n                            "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                            );\n                    /* WARNING: Subroutine does not return */\n    gold_fatal(format,pcVar7,size,start);\n  }" if (parenthesized_expression "(((long)size_00 < start) || (size_00 - start < size))" ( (binary_expression "((long)size_00 < start) || (size_00 - start < size)" (parenthesized_expression "((long)size_00 < start)" ( (binary_expression "(long)size_00 < start" (cast_expression "(long)size_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < identifier) )) || (parenthesized_expression "(size_00 - start < size)" ( (binary_expression "size_00 - start < size" (binary_expression "size_00 - start" identifier - identifier) < identifier) ))) )) (compound_statement "{\n    pcVar7 = (this->name_)._M_dataplus._M_p;\n    format = (char *)gettext(\n                            "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                            );\n                    /* WARNING: Subroutine does not return */\n    gold_fatal(format,pcVar7,size,start);\n  }" { (expression_statement "pcVar7 = (this->name_)._M_dataplus._M_p;" (assignment_expression "pcVar7 = (this->name_)._M_dataplus._M_p" identifier = (field_expression "(this->name_)._M_dataplus._M_p" (field_expression "(this->name_)._M_dataplus" (parenthesized_expression "(this->name_)" ( (field_expression "this->name_" identifier -> field_identifier) )) . field_identifier) . field_identifier)) ;) (expression_statement "format = (char *)gettext(\n                            "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                            );" (assignment_expression "format = (char *)gettext(\n                            "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                            )" identifier = (cast_expression "(char *)gettext(\n                            "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                            )" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (call_expression "gettext(\n                            "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                            )" identifier (argument_list "(\n                            "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                            )" ( (string_literal ""%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"" " string_content ") ))))) ;) comment (expression_statement "gold_fatal(format,pcVar7,size,start);" (call_expression "gold_fatal(format,pcVar7,size,start)" identifier (argument_list "(format,pcVar7,size,start)" ( identifier , identifier , identifier , identifier ))) ;) })) (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) (if_statement "if (offset == 0) {\n    pVVar10 = this->whole_file_view_;\n  }\n  else {\n    if (parameters->target_ == (Target *)0x0) {\n      uVar13 = 7;\n      uVar8 = 8;\n    }\n    else {\n      uVar8 = **(uint **)(parameters->target_ + 8) >> 3;\n      uVar13 = uVar8 - 1;\n    }\n    uVar13 = uVar13 & (uint)offset;\n    if (uVar13 != 0) {\n      uVar13 = uVar8 - uVar13;\n    }\n    pVVar10 = this->whole_file_view_;\n  }" if (parenthesized_expression "(offset == 0)" ( (binary_expression "offset == 0" identifier == number_literal) )) (compound_statement "{\n    pVVar10 = this->whole_file_view_;\n  }" { (expression_statement "pVVar10 = this->whole_file_view_;" (assignment_expression "pVVar10 = this->whole_file_view_" identifier = (field_expression "this->whole_file_view_" identifier -> field_identifier)) ;) }) (else_clause "else {\n    if (parameters->target_ == (Target *)0x0) {\n      uVar13 = 7;\n      uVar8 = 8;\n    }\n    else {\n      uVar8 = **(uint **)(parameters->target_ + 8) >> 3;\n      uVar13 = uVar8 - 1;\n    }\n    uVar13 = uVar13 & (uint)offset;\n    if (uVar13 != 0) {\n      uVar13 = uVar8 - uVar13;\n    }\n    pVVar10 = this->whole_file_view_;\n  }" else (compound_statement "{\n    if (parameters->target_ == (Target *)0x0) {\n      uVar13 = 7;\n      uVar8 = 8;\n    }\n    else {\n      uVar8 = **(uint **)(parameters->target_ + 8) >> 3;\n      uVar13 = uVar8 - 1;\n    }\n    uVar13 = uVar13 & (uint)offset;\n    if (uVar13 != 0) {\n      uVar13 = uVar8 - uVar13;\n    }\n    pVVar10 = this->whole_file_view_;\n  }" { (if_statement "if (parameters->target_ == (Target *)0x0) {\n      uVar13 = 7;\n      uVar8 = 8;\n    }\n    else {\n      uVar8 = **(uint **)(parameters->target_ + 8) >> 3;\n      uVar13 = uVar8 - 1;\n    }" if (parenthesized_expression "(parameters->target_ == (Target *)0x0)" ( (binary_expression "parameters->target_ == (Target *)0x0" (field_expression "parameters->target_" identifier -> field_identifier) == (cast_expression "(Target *)0x0" ( (type_descriptor "Target *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n      uVar13 = 7;\n      uVar8 = 8;\n    }" { (expression_statement "uVar13 = 7;" (assignment_expression "uVar13 = 7" identifier = number_literal) ;) (expression_statement "uVar8 = 8;" (assignment_expression "uVar8 = 8" identifier = number_literal) ;) }) (else_clause "else {\n      uVar8 = **(uint **)(parameters->target_ + 8) >> 3;\n      uVar13 = uVar8 - 1;\n    }" else (compound_statement "{\n      uVar8 = **(uint **)(parameters->target_ + 8) >> 3;\n      uVar13 = uVar8 - 1;\n    }" { (expression_statement "uVar8 = **(uint **)(parameters->target_ + 8) >> 3;" (assignment_expression "uVar8 = **(uint **)(parameters->target_ + 8) >> 3" identifier = (binary_expression "**(uint **)(parameters->target_ + 8) >> 3" (pointer_expression "**(uint **)(parameters->target_ + 8)" * (pointer_expression "*(uint **)(parameters->target_ + 8)" * (cast_expression "(uint **)(parameters->target_ + 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(parameters->target_ + 8)" ( (binary_expression "parameters->target_ + 8" (field_expression "parameters->target_" identifier -> field_identifier) + number_literal) ))))) >> number_literal)) ;) (expression_statement "uVar13 = uVar8 - 1;" (assignment_expression "uVar13 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) }))) (expression_statement "uVar13 = uVar13 & (uint)offset;" (assignment_expression "uVar13 = uVar13 & (uint)offset" identifier = (binary_expression "uVar13 & (uint)offset" identifier & (cast_expression "(uint)offset" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (uVar13 != 0) {\n      uVar13 = uVar8 - uVar13;\n    }" if (parenthesized_expression "(uVar13 != 0)" ( (binary_expression "uVar13 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar13 = uVar8 - uVar13;\n    }" { (expression_statement "uVar13 = uVar8 - uVar13;" (assignment_expression "uVar13 = uVar8 - uVar13" identifier = (binary_expression "uVar8 - uVar13" identifier - identifier)) ;) })) (expression_statement "pVVar10 = this->whole_file_view_;" (assignment_expression "pVVar10 = this->whole_file_view_" identifier = (field_expression "this->whole_file_view_" identifier -> field_identifier)) ;) }))) (if_statement "if (((pVVar10 == (View *)0x0) && (parameters->options_ != (General_options *)0x0)) &&\n     ((parameters->options_->map_whole_files_).value != false)) {\n    pVVar10 = make_view(this,0,size_00,0,cache);\n    size_00 = this->size_;\n    this->whole_file_view_ = pVVar10;\n  }" if (parenthesized_expression "(((pVVar10 == (View *)0x0) && (parameters->options_ != (General_options *)0x0)) &&\n     ((parameters->options_->map_whole_files_).value != false))" ( (binary_expression "((pVVar10 == (View *)0x0) && (parameters->options_ != (General_options *)0x0)) &&\n     ((parameters->options_->map_whole_files_).value != false)" (parenthesized_expression "((pVVar10 == (View *)0x0) && (parameters->options_ != (General_options *)0x0))" ( (binary_expression "(pVVar10 == (View *)0x0) && (parameters->options_ != (General_options *)0x0)" (parenthesized_expression "(pVVar10 == (View *)0x0)" ( (binary_expression "pVVar10 == (View *)0x0" identifier == (cast_expression "(View *)0x0" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(parameters->options_ != (General_options *)0x0)" ( (binary_expression "parameters->options_ != (General_options *)0x0" (field_expression "parameters->options_" identifier -> field_identifier) != (cast_expression "(General_options *)0x0" ( (type_descriptor "General_options *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ))) )) && (parenthesized_expression "((parameters->options_->map_whole_files_).value != false)" ( (binary_expression "(parameters->options_->map_whole_files_).value != false" (field_expression "(parameters->options_->map_whole_files_).value" (parenthesized_expression "(parameters->options_->map_whole_files_)" ( (field_expression "parameters->options_->map_whole_files_" (field_expression "parameters->options_" identifier -> field_identifier) -> field_identifier) )) . field_identifier) != false) ))) )) (compound_statement "{\n    pVVar10 = make_view(this,0,size_00,0,cache);\n    size_00 = this->size_;\n    this->whole_file_view_ = pVVar10;\n  }" { (expression_statement "pVVar10 = make_view(this,0,size_00,0,cache);" (assignment_expression "pVVar10 = make_view(this,0,size_00,0,cache)" identifier = (call_expression "make_view(this,0,size_00,0,cache)" identifier (argument_list "(this,0,size_00,0,cache)" ( identifier , number_literal , identifier , number_literal , identifier )))) ;) (expression_statement "size_00 = this->size_;" (assignment_expression "size_00 = this->size_" identifier = (field_expression "this->size_" identifier -> field_identifier)) ;) (expression_statement "this->whole_file_view_ = pVVar10;" (assignment_expression "this->whole_file_view_ = pVVar10" (field_expression "this->whole_file_view_" identifier -> field_identifier) = identifier) ;) })) (expression_statement "uVar8 = 0xffffffff;" (assignment_expression "uVar8 = 0xffffffff" identifier = number_literal) ;) (if_statement "if (aligned) {\n    uVar8 = uVar13;\n  }" if (parenthesized_expression "(aligned)" ( identifier )) (compound_statement "{\n    uVar8 = uVar13;\n  }" { (expression_statement "uVar8 = uVar13;" (assignment_expression "uVar8 = uVar13" identifier = identifier) ;) })) (expression_statement "uVar14 = start + offset;" (assignment_expression "uVar14 = start + offset" identifier = (binary_expression "start + offset" identifier + identifier)) ;) (if_statement "if (((long)size_00 < (long)uVar14) || (size_00 - uVar14 < size)) {\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/fileread.cc",0x150,"find_view");\n  }" if (parenthesized_expression "(((long)size_00 < (long)uVar14) || (size_00 - uVar14 < size))" ( (binary_expression "((long)size_00 < (long)uVar14) || (size_00 - uVar14 < size)" (parenthesized_expression "((long)size_00 < (long)uVar14)" ( (binary_expression "(long)size_00 < (long)uVar14" (cast_expression "(long)size_00" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) < (cast_expression "(long)uVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) || (parenthesized_expression "(size_00 - uVar14 < size)" ( (binary_expression "size_00 - uVar14 < size" (binary_expression "size_00 - uVar14" identifier - identifier) < identifier) ))) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n    do_gold_unreachable("../../gold/fileread.cc",0x150,"find_view");\n  }" { comment (expression_statement "do_gold_unreachable("../../gold/fileread.cc",0x150,"find_view");" (call_expression "do_gold_unreachable("../../gold/fileread.cc",0x150,"find_view")" identifier (argument_list "("../../gold/fileread.cc",0x150,"find_view")" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""find_view"" " string_content ") ))) ;) })) (expression_statement "pVVar10 = this->whole_file_view_;" (assignment_expression "pVVar10 = this->whole_file_view_" identifier = (field_expression "this->whole_file_view_" identifier -> field_identifier)) ;) (if_statement "if ((pVVar10 != (View *)0x0) && (0xfffffffd < uVar8 - 1)) {\nLAB_0017b094:\n    if (cache) {\n      pVVar10->cache_ = true;\n    }\n    return pVVar10;\n  }" if (parenthesized_expression "((pVVar10 != (View *)0x0) && (0xfffffffd < uVar8 - 1))" ( (binary_expression "(pVVar10 != (View *)0x0) && (0xfffffffd < uVar8 - 1)" (parenthesized_expression "(pVVar10 != (View *)0x0)" ( (binary_expression "pVVar10 != (View *)0x0" identifier != (cast_expression "(View *)0x0" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(0xfffffffd < uVar8 - 1)" ( (binary_expression "0xfffffffd < uVar8 - 1" number_literal < (binary_expression "uVar8 - 1" identifier - number_literal)) ))) )) (compound_statement "{\nLAB_0017b094:\n    if (cache) {\n      pVVar10->cache_ = true;\n    }\n    return pVVar10;\n  }" { (labeled_statement "LAB_0017b094:\n    if (cache) {\n      pVVar10->cache_ = true;\n    }" statement_identifier : (if_statement "if (cache) {\n      pVVar10->cache_ = true;\n    }" if (parenthesized_expression "(cache)" ( identifier )) (compound_statement "{\n      pVVar10->cache_ = true;\n    }" { (expression_statement "pVVar10->cache_ = true;" (assignment_expression "pVVar10->cache_ = true" (field_expression "pVVar10->cache_" identifier -> field_identifier) = true) ;) }))) (return_statement "return pVVar10;" return identifier ;) })) (expression_statement "pVVar12 = (View *)(this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;" (assignment_expression "pVVar12 = (View *)(this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent" identifier = (cast_expression "(View *)(this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "(this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent" (field_expression "(this->views_)._M_t._M_impl.super__Rb_tree_header._M_header" (field_expression "(this->views_)._M_t._M_impl.super__Rb_tree_header" (field_expression "(this->views_)._M_t._M_impl" (field_expression "(this->views_)._M_t" (parenthesized_expression "(this->views_)" ( (field_expression "this->views_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier) . field_identifier) . field_identifier))) ;) (expression_statement "p_Var1 = &(this->views_)._M_t._M_impl.super__Rb_tree_header;" (assignment_expression "p_Var1 = &(this->views_)._M_t._M_impl.super__Rb_tree_header" identifier = (pointer_expression "&(this->views_)._M_t._M_impl.super__Rb_tree_header" & (field_expression "(this->views_)._M_t._M_impl.super__Rb_tree_header" (field_expression "(this->views_)._M_t._M_impl" (field_expression "(this->views_)._M_t" (parenthesized_expression "(this->views_)" ( (field_expression "this->views_" identifier -> field_identifier) )) . field_identifier) . field_identifier) . field_identifier))) ;) (expression_statement "uVar11 = uVar14 & 0xffffffffffffe000;" (assignment_expression "uVar11 = uVar14 & 0xffffffffffffe000" identifier = (binary_expression "uVar14 & 0xffffffffffffe000" identifier & number_literal)) ;) (expression_statement "pVVar9 = (View *)p_Var1;" (assignment_expression "pVVar9 = (View *)p_Var1" identifier = (cast_expression "(View *)p_Var1" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (pVVar12 != (View *)0x0) {\n    do {\n      while ((lVar2._0_1_ = pVVar12->cache_, lVar2._1_3_ = *(undefined3 *)&pVVar12->field_0x21,\n             lVar2._4_4_ = pVVar12->data_ownership_, lVar2 <= (long)(uVar11 - 1) &&\n             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0))))) {\n        pVVar12 = *(View **)&pVVar12->lock_count_;\n        if (pVVar12 == (View *)0x0) goto LAB_0017af56;\n      }\n      pVVar10 = (View *)pVVar12->data_;\n      pVVar9 = pVVar12;\n      pVVar12 = pVVar10;\n    } while (pVVar10 != (View *)0x0);\nLAB_0017af56:\n    if (((View *)p_Var1 != pVVar9) &&\n       (lVar3._0_1_ = pVVar9->cache_, lVar3._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n       lVar3._4_4_ = pVVar9->data_ownership_, lVar3 <= (long)uVar11)) {\n      do {\n        pVVar10 = (View *)pVVar9[1].start_;\n        if ((pVVar10->start_ <= (long)uVar14) &&\n           ((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)\n           ) {\n          if ((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)) {\n            pVVar10->accessed_ = true;\n            goto LAB_0017b094;\n          }\n          if (pVVar12 == (View *)0x0) {\n            pVVar12 = pVVar10;\n          }\n        }\n        pVVar9 = (View *)std::_Rb_tree_increment((_Rb_tree_node_base *)pVVar9);\n      } while (((View *)p_Var1 != pVVar9) &&\n              (lVar4._0_1_ = pVVar9->cache_, lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11));\n      if (pVVar12 != (View *)0x0) {\n        if (!aligned) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar14 = (ulong)uVar13;\n        __s = (uchar *)malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14);\n        if (__s != (uchar *)0x0) {\n          memset(__s,0,uVar14);\n          memcpy(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_);\n          oVar5 = pVVar12->start_;\n          p_Var6 = (_Base_ptr)pVVar12->size_;\n          pVVar10 = (View *)operator_new(0x30);\n          pVVar10->start_ = oVar5;\n          pVVar10->size_ = (section_size_type)p_Var6;\n          pVVar10->data_ = __s;\n          pVVar10->lock_count_ = 0;\n          pVVar10->byteshift_ = uVar13;\n          pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY;\n          pVVar10->cache_ = cache;\n          pVVar10->accessed_ = true;\n          add_view(this,pVVar10);\n          return pVVar10;\n        }\n                    /* WARNING: Subroutine does not return */\n        gold_nomem();\n      }\n    }\n  }" if (parenthesized_expression "(pVVar12 != (View *)0x0)" ( (binary_expression "pVVar12 != (View *)0x0" identifier != (cast_expression "(View *)0x0" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    do {\n      while ((lVar2._0_1_ = pVVar12->cache_, lVar2._1_3_ = *(undefined3 *)&pVVar12->field_0x21,\n             lVar2._4_4_ = pVVar12->data_ownership_, lVar2 <= (long)(uVar11 - 1) &&\n             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0))))) {\n        pVVar12 = *(View **)&pVVar12->lock_count_;\n        if (pVVar12 == (View *)0x0) goto LAB_0017af56;\n      }\n      pVVar10 = (View *)pVVar12->data_;\n      pVVar9 = pVVar12;\n      pVVar12 = pVVar10;\n    } while (pVVar10 != (View *)0x0);\nLAB_0017af56:\n    if (((View *)p_Var1 != pVVar9) &&\n       (lVar3._0_1_ = pVVar9->cache_, lVar3._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n       lVar3._4_4_ = pVVar9->data_ownership_, lVar3 <= (long)uVar11)) {\n      do {\n        pVVar10 = (View *)pVVar9[1].start_;\n        if ((pVVar10->start_ <= (long)uVar14) &&\n           ((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)\n           ) {\n          if ((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)) {\n            pVVar10->accessed_ = true;\n            goto LAB_0017b094;\n          }\n          if (pVVar12 == (View *)0x0) {\n            pVVar12 = pVVar10;\n          }\n        }\n        pVVar9 = (View *)std::_Rb_tree_increment((_Rb_tree_node_base *)pVVar9);\n      } while (((View *)p_Var1 != pVVar9) &&\n              (lVar4._0_1_ = pVVar9->cache_, lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11));\n      if (pVVar12 != (View *)0x0) {\n        if (!aligned) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar14 = (ulong)uVar13;\n        __s = (uchar *)malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14);\n        if (__s != (uchar *)0x0) {\n          memset(__s,0,uVar14);\n          memcpy(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_);\n          oVar5 = pVVar12->start_;\n          p_Var6 = (_Base_ptr)pVVar12->size_;\n          pVVar10 = (View *)operator_new(0x30);\n          pVVar10->start_ = oVar5;\n          pVVar10->size_ = (section_size_type)p_Var6;\n          pVVar10->data_ = __s;\n          pVVar10->lock_count_ = 0;\n          pVVar10->byteshift_ = uVar13;\n          pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY;\n          pVVar10->cache_ = cache;\n          pVVar10->accessed_ = true;\n          add_view(this,pVVar10);\n          return pVVar10;\n        }\n                    /* WARNING: Subroutine does not return */\n        gold_nomem();\n      }\n    }\n  }" { (do_statement "do {\n      while ((lVar2._0_1_ = pVVar12->cache_, lVar2._1_3_ = *(undefined3 *)&pVVar12->field_0x21,\n             lVar2._4_4_ = pVVar12->data_ownership_, lVar2 <= (long)(uVar11 - 1) &&\n             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0))))) {\n        pVVar12 = *(View **)&pVVar12->lock_count_;\n        if (pVVar12 == (View *)0x0) goto LAB_0017af56;\n      }\n      pVVar10 = (View *)pVVar12->data_;\n      pVVar9 = pVVar12;\n      pVVar12 = pVVar10;\n    } while (pVVar10 != (View *)0x0);" do (compound_statement "{\n      while ((lVar2._0_1_ = pVVar12->cache_, lVar2._1_3_ = *(undefined3 *)&pVVar12->field_0x21,\n             lVar2._4_4_ = pVVar12->data_ownership_, lVar2 <= (long)(uVar11 - 1) &&\n             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0))))) {\n        pVVar12 = *(View **)&pVVar12->lock_count_;\n        if (pVVar12 == (View *)0x0) goto LAB_0017af56;\n      }\n      pVVar10 = (View *)pVVar12->data_;\n      pVVar9 = pVVar12;\n      pVVar12 = pVVar10;\n    }" { (while_statement "while ((lVar2._0_1_ = pVVar12->cache_, lVar2._1_3_ = *(undefined3 *)&pVVar12->field_0x21,\n             lVar2._4_4_ = pVVar12->data_ownership_, lVar2 <= (long)(uVar11 - 1) &&\n             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0))))) {\n        pVVar12 = *(View **)&pVVar12->lock_count_;\n        if (pVVar12 == (View *)0x0) goto LAB_0017af56;\n      }" while (parenthesized_expression "((lVar2._0_1_ = pVVar12->cache_, lVar2._1_3_ = *(undefined3 *)&pVVar12->field_0x21,\n             lVar2._4_4_ = pVVar12->data_ownership_, lVar2 <= (long)(uVar11 - 1) &&\n             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0)))))" ( (parenthesized_expression "(lVar2._0_1_ = pVVar12->cache_, lVar2._1_3_ = *(undefined3 *)&pVVar12->field_0x21,\n             lVar2._4_4_ = pVVar12->data_ownership_, lVar2 <= (long)(uVar11 - 1) &&\n             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0))))" ( (comma_expression "lVar2._0_1_ = pVVar12->cache_, lVar2._1_3_ = *(undefined3 *)&pVVar12->field_0x21,\n             lVar2._4_4_ = pVVar12->data_ownership_, lVar2 <= (long)(uVar11 - 1) &&\n             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0)))" (assignment_expression "lVar2._0_1_ = pVVar12->cache_" (field_expression "lVar2._0_1_" identifier . field_identifier) = (field_expression "pVVar12->cache_" identifier -> field_identifier)) , (comma_expression "lVar2._1_3_ = *(undefined3 *)&pVVar12->field_0x21,\n             lVar2._4_4_ = pVVar12->data_ownership_, lVar2 <= (long)(uVar11 - 1) &&\n             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0)))" (assignment_expression "lVar2._1_3_ = *(undefined3 *)&pVVar12->field_0x21" (field_expression "lVar2._1_3_" identifier . field_identifier) = (pointer_expression "*(undefined3 *)&pVVar12->field_0x21" * (cast_expression "(undefined3 *)&pVVar12->field_0x21" ( (type_descriptor "undefined3 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pVVar12->field_0x21" & (field_expression "pVVar12->field_0x21" identifier -> field_identifier))))) , (comma_expression "lVar2._4_4_ = pVVar12->data_ownership_, lVar2 <= (long)(uVar11 - 1) &&\n             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0)))" (assignment_expression "lVar2._4_4_ = pVVar12->data_ownership_" (field_expression "lVar2._4_4_" identifier . field_identifier) = (field_expression "pVVar12->data_ownership_" identifier -> field_identifier)) , (binary_expression "lVar2 <= (long)(uVar11 - 1) &&\n             ((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0)))" (binary_expression "lVar2 <= (long)(uVar11 - 1)" identifier <= (cast_expression "(long)(uVar11 - 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(uVar11 - 1)" ( (binary_expression "uVar11 - 1" identifier - number_literal) )))) && (parenthesized_expression "((uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0)))" ( (parenthesized_expression "(uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0))" ( (binary_expression "uVar11 - 1 != lVar2 || (*(int *)&pVVar12->accessed_ == 0)" (binary_expression "uVar11 - 1 != lVar2" (binary_expression "uVar11 - 1" identifier - number_literal) != identifier) || (parenthesized_expression "(*(int *)&pVVar12->accessed_ == 0)" ( (binary_expression "*(int *)&pVVar12->accessed_ == 0" (pointer_expression "*(int *)&pVVar12->accessed_" * (cast_expression "(int *)&pVVar12->accessed_" ( (type_descriptor "int *" primitive_type (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pVVar12->accessed_" & (field_expression "pVVar12->accessed_" identifier -> field_identifier)))) == number_literal) ))) )) )))))) )) )) (compound_statement "{\n        pVVar12 = *(View **)&pVVar12->lock_count_;\n        if (pVVar12 == (View *)0x0) goto LAB_0017af56;\n      }" { (expression_statement "pVVar12 = *(View **)&pVVar12->lock_count_;" (assignment_expression "pVVar12 = *(View **)&pVVar12->lock_count_" identifier = (pointer_expression "*(View **)&pVVar12->lock_count_" * (cast_expression "(View **)&pVVar12->lock_count_" ( (type_descriptor "View **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (pointer_expression "&pVVar12->lock_count_" & (field_expression "pVVar12->lock_count_" identifier -> field_identifier))))) ;) (if_statement "if (pVVar12 == (View *)0x0) goto LAB_0017af56;" if (parenthesized_expression "(pVVar12 == (View *)0x0)" ( (binary_expression "pVVar12 == (View *)0x0" identifier == (cast_expression "(View *)0x0" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0017af56;" goto statement_identifier ;)) })) (expression_statement "pVVar10 = (View *)pVVar12->data_;" (assignment_expression "pVVar10 = (View *)pVVar12->data_" identifier = (cast_expression "(View *)pVVar12->data_" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pVVar12->data_" identifier -> field_identifier))) ;) (expression_statement "pVVar9 = pVVar12;" (assignment_expression "pVVar9 = pVVar12" identifier = identifier) ;) (expression_statement "pVVar12 = pVVar10;" (assignment_expression "pVVar12 = pVVar10" identifier = identifier) ;) }) while (parenthesized_expression "(pVVar10 != (View *)0x0)" ( (binary_expression "pVVar10 != (View *)0x0" identifier != (cast_expression "(View *)0x0" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (labeled_statement "LAB_0017af56:\n    if (((View *)p_Var1 != pVVar9) &&\n       (lVar3._0_1_ = pVVar9->cache_, lVar3._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n       lVar3._4_4_ = pVVar9->data_ownership_, lVar3 <= (long)uVar11)) {\n      do {\n        pVVar10 = (View *)pVVar9[1].start_;\n        if ((pVVar10->start_ <= (long)uVar14) &&\n           ((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)\n           ) {\n          if ((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)) {\n            pVVar10->accessed_ = true;\n            goto LAB_0017b094;\n          }\n          if (pVVar12 == (View *)0x0) {\n            pVVar12 = pVVar10;\n          }\n        }\n        pVVar9 = (View *)std::_Rb_tree_increment((_Rb_tree_node_base *)pVVar9);\n      } while (((View *)p_Var1 != pVVar9) &&\n              (lVar4._0_1_ = pVVar9->cache_, lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11));\n      if (pVVar12 != (View *)0x0) {\n        if (!aligned) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar14 = (ulong)uVar13;\n        __s = (uchar *)malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14);\n        if (__s != (uchar *)0x0) {\n          memset(__s,0,uVar14);\n          memcpy(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_);\n          oVar5 = pVVar12->start_;\n          p_Var6 = (_Base_ptr)pVVar12->size_;\n          pVVar10 = (View *)operator_new(0x30);\n          pVVar10->start_ = oVar5;\n          pVVar10->size_ = (section_size_type)p_Var6;\n          pVVar10->data_ = __s;\n          pVVar10->lock_count_ = 0;\n          pVVar10->byteshift_ = uVar13;\n          pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY;\n          pVVar10->cache_ = cache;\n          pVVar10->accessed_ = true;\n          add_view(this,pVVar10);\n          return pVVar10;\n        }\n                    /* WARNING: Subroutine does not return */\n        gold_nomem();\n      }\n    }" statement_identifier : (if_statement "if (((View *)p_Var1 != pVVar9) &&\n       (lVar3._0_1_ = pVVar9->cache_, lVar3._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n       lVar3._4_4_ = pVVar9->data_ownership_, lVar3 <= (long)uVar11)) {\n      do {\n        pVVar10 = (View *)pVVar9[1].start_;\n        if ((pVVar10->start_ <= (long)uVar14) &&\n           ((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)\n           ) {\n          if ((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)) {\n            pVVar10->accessed_ = true;\n            goto LAB_0017b094;\n          }\n          if (pVVar12 == (View *)0x0) {\n            pVVar12 = pVVar10;\n          }\n        }\n        pVVar9 = (View *)std::_Rb_tree_increment((_Rb_tree_node_base *)pVVar9);\n      } while (((View *)p_Var1 != pVVar9) &&\n              (lVar4._0_1_ = pVVar9->cache_, lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11));\n      if (pVVar12 != (View *)0x0) {\n        if (!aligned) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar14 = (ulong)uVar13;\n        __s = (uchar *)malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14);\n        if (__s != (uchar *)0x0) {\n          memset(__s,0,uVar14);\n          memcpy(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_);\n          oVar5 = pVVar12->start_;\n          p_Var6 = (_Base_ptr)pVVar12->size_;\n          pVVar10 = (View *)operator_new(0x30);\n          pVVar10->start_ = oVar5;\n          pVVar10->size_ = (section_size_type)p_Var6;\n          pVVar10->data_ = __s;\n          pVVar10->lock_count_ = 0;\n          pVVar10->byteshift_ = uVar13;\n          pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY;\n          pVVar10->cache_ = cache;\n          pVVar10->accessed_ = true;\n          add_view(this,pVVar10);\n          return pVVar10;\n        }\n                    /* WARNING: Subroutine does not return */\n        gold_nomem();\n      }\n    }" if (parenthesized_expression "(((View *)p_Var1 != pVVar9) &&\n       (lVar3._0_1_ = pVVar9->cache_, lVar3._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n       lVar3._4_4_ = pVVar9->data_ownership_, lVar3 <= (long)uVar11))" ( (binary_expression "((View *)p_Var1 != pVVar9) &&\n       (lVar3._0_1_ = pVVar9->cache_, lVar3._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n       lVar3._4_4_ = pVVar9->data_ownership_, lVar3 <= (long)uVar11)" (parenthesized_expression "((View *)p_Var1 != pVVar9)" ( (binary_expression "(View *)p_Var1 != pVVar9" (cast_expression "(View *)p_Var1" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) != identifier) )) && (parenthesized_expression "(lVar3._0_1_ = pVVar9->cache_, lVar3._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n       lVar3._4_4_ = pVVar9->data_ownership_, lVar3 <= (long)uVar11)" ( (comma_expression "lVar3._0_1_ = pVVar9->cache_, lVar3._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n       lVar3._4_4_ = pVVar9->data_ownership_, lVar3 <= (long)uVar11" (assignment_expression "lVar3._0_1_ = pVVar9->cache_" (field_expression "lVar3._0_1_" identifier . field_identifier) = (field_expression "pVVar9->cache_" identifier -> field_identifier)) , (comma_expression "lVar3._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n       lVar3._4_4_ = pVVar9->data_ownership_, lVar3 <= (long)uVar11" (assignment_expression "lVar3._1_3_ = *(undefined3 *)&pVVar9->field_0x21" (field_expression "lVar3._1_3_" identifier . field_identifier) = (pointer_expression "*(undefined3 *)&pVVar9->field_0x21" * (cast_expression "(undefined3 *)&pVVar9->field_0x21" ( (type_descriptor "undefined3 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pVVar9->field_0x21" & (field_expression "pVVar9->field_0x21" identifier -> field_identifier))))) , (comma_expression "lVar3._4_4_ = pVVar9->data_ownership_, lVar3 <= (long)uVar11" (assignment_expression "lVar3._4_4_ = pVVar9->data_ownership_" (field_expression "lVar3._4_4_" identifier . field_identifier) = (field_expression "pVVar9->data_ownership_" identifier -> field_identifier)) , (binary_expression "lVar3 <= (long)uVar11" identifier <= (cast_expression "(long)uVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))))) ))) )) (compound_statement "{\n      do {\n        pVVar10 = (View *)pVVar9[1].start_;\n        if ((pVVar10->start_ <= (long)uVar14) &&\n           ((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)\n           ) {\n          if ((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)) {\n            pVVar10->accessed_ = true;\n            goto LAB_0017b094;\n          }\n          if (pVVar12 == (View *)0x0) {\n            pVVar12 = pVVar10;\n          }\n        }\n        pVVar9 = (View *)std::_Rb_tree_increment((_Rb_tree_node_base *)pVVar9);\n      } while (((View *)p_Var1 != pVVar9) &&\n              (lVar4._0_1_ = pVVar9->cache_, lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11));\n      if (pVVar12 != (View *)0x0) {\n        if (!aligned) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar14 = (ulong)uVar13;\n        __s = (uchar *)malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14);\n        if (__s != (uchar *)0x0) {\n          memset(__s,0,uVar14);\n          memcpy(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_);\n          oVar5 = pVVar12->start_;\n          p_Var6 = (_Base_ptr)pVVar12->size_;\n          pVVar10 = (View *)operator_new(0x30);\n          pVVar10->start_ = oVar5;\n          pVVar10->size_ = (section_size_type)p_Var6;\n          pVVar10->data_ = __s;\n          pVVar10->lock_count_ = 0;\n          pVVar10->byteshift_ = uVar13;\n          pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY;\n          pVVar10->cache_ = cache;\n          pVVar10->accessed_ = true;\n          add_view(this,pVVar10);\n          return pVVar10;\n        }\n                    /* WARNING: Subroutine does not return */\n        gold_nomem();\n      }\n    }" { (do_statement "do {\n        pVVar10 = (View *)pVVar9[1].start_;\n        if ((pVVar10->start_ <= (long)uVar14) &&\n           ((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)\n           ) {\n          if ((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)) {\n            pVVar10->accessed_ = true;\n            goto LAB_0017b094;\n          }\n          if (pVVar12 == (View *)0x0) {\n            pVVar12 = pVVar10;\n          }\n        }\n        pVVar9 = (View *)std::_Rb_tree_increment((_Rb_tree_node_base *)pVVar9);\n      } while (((View *)p_Var1 != pVVar9) &&\n              (lVar4._0_1_ = pVVar9->cache_, lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11));" do (compound_statement "{\n        pVVar10 = (View *)pVVar9[1].start_;\n        if ((pVVar10->start_ <= (long)uVar14) &&\n           ((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)\n           ) {\n          if ((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)) {\n            pVVar10->accessed_ = true;\n            goto LAB_0017b094;\n          }\n          if (pVVar12 == (View *)0x0) {\n            pVVar12 = pVVar10;\n          }\n        }\n        pVVar9 = (View *)std::_Rb_tree_increment((_Rb_tree_node_base *)pVVar9);\n      }" { (expression_statement "pVVar10 = (View *)pVVar9[1].start_;" (assignment_expression "pVVar10 = (View *)pVVar9[1].start_" identifier = (cast_expression "(View *)pVVar9[1].start_" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) (field_expression "pVVar9[1].start_" (subscript_expression "pVVar9[1]" identifier [ number_literal ]) . field_identifier))) ;) (if_statement "if ((pVVar10->start_ <= (long)uVar14) &&\n           ((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)\n           ) {\n          if ((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)) {\n            pVVar10->accessed_ = true;\n            goto LAB_0017b094;\n          }\n          if (pVVar12 == (View *)0x0) {\n            pVVar12 = pVVar10;\n          }\n        }" if (parenthesized_expression "((pVVar10->start_ <= (long)uVar14) &&\n           ((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)\n           )" ( (binary_expression "(pVVar10->start_ <= (long)uVar14) &&\n           ((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)" (parenthesized_expression "(pVVar10->start_ <= (long)uVar14)" ( (binary_expression "pVVar10->start_ <= (long)uVar14" (field_expression "pVVar10->start_" identifier -> field_identifier) <= (cast_expression "(long)uVar14" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) && (parenthesized_expression "((long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_)" ( (binary_expression "(long)(size + uVar14) <= (long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_" (cast_expression "(long)(size + uVar14)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(size + uVar14)" ( (binary_expression "size + uVar14" identifier + identifier) ))) <= (binary_expression "(long)&((_Base_ptr)pVVar10->size_)->_M_color + pVVar10->start_" (cast_expression "(long)&((_Base_ptr)pVVar10->size_)->_M_color" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&((_Base_ptr)pVVar10->size_)->_M_color" & (field_expression "((_Base_ptr)pVVar10->size_)->_M_color" (parenthesized_expression "((_Base_ptr)pVVar10->size_)" ( (cast_expression "(_Base_ptr)pVVar10->size_" ( (type_descriptor "_Base_ptr" type_identifier) ) (field_expression "pVVar10->size_" identifier -> field_identifier)) )) -> field_identifier))) + (field_expression "pVVar10->start_" identifier -> field_identifier))) ))) )) (compound_statement "{\n          if ((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)) {\n            pVVar10->accessed_ = true;\n            goto LAB_0017b094;\n          }\n          if (pVVar12 == (View *)0x0) {\n            pVVar12 = pVVar10;\n          }\n        }" { (if_statement "if ((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)) {\n            pVVar10->accessed_ = true;\n            goto LAB_0017b094;\n          }" if (parenthesized_expression "((uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_))" ( (binary_expression "(uVar8 == 0xffffffff) || (uVar8 == pVVar10->byteshift_)" (parenthesized_expression "(uVar8 == 0xffffffff)" ( (binary_expression "uVar8 == 0xffffffff" identifier == number_literal) )) || (parenthesized_expression "(uVar8 == pVVar10->byteshift_)" ( (binary_expression "uVar8 == pVVar10->byteshift_" identifier == (field_expression "pVVar10->byteshift_" identifier -> field_identifier)) ))) )) (compound_statement "{\n            pVVar10->accessed_ = true;\n            goto LAB_0017b094;\n          }" { (expression_statement "pVVar10->accessed_ = true;" (assignment_expression "pVVar10->accessed_ = true" (field_expression "pVVar10->accessed_" identifier -> field_identifier) = true) ;) (goto_statement "goto LAB_0017b094;" goto statement_identifier ;) })) (if_statement "if (pVVar12 == (View *)0x0) {\n            pVVar12 = pVVar10;\n          }" if (parenthesized_expression "(pVVar12 == (View *)0x0)" ( (binary_expression "pVVar12 == (View *)0x0" identifier == (cast_expression "(View *)0x0" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            pVVar12 = pVVar10;\n          }" { (expression_statement "pVVar12 = pVVar10;" (assignment_expression "pVVar12 = pVVar10" identifier = identifier) ;) })) })) (ERROR "pVVar9 = (View *)std::" (assignment_expression "pVVar9 = (View *)std" identifier = (cast_expression "(View *)std" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier)) : :) (expression_statement "_Rb_tree_increment((_Rb_tree_node_base *)pVVar9);" (call_expression "_Rb_tree_increment((_Rb_tree_node_base *)pVVar9)" identifier (argument_list "((_Rb_tree_node_base *)pVVar9)" ( (cast_expression "(_Rb_tree_node_base *)pVVar9" ( (type_descriptor "_Rb_tree_node_base *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) ))) ;) }) while (parenthesized_expression "(((View *)p_Var1 != pVVar9) &&\n              (lVar4._0_1_ = pVVar9->cache_, lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11))" ( (binary_expression "((View *)p_Var1 != pVVar9) &&\n              (lVar4._0_1_ = pVVar9->cache_, lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11)" (parenthesized_expression "((View *)p_Var1 != pVVar9)" ( (binary_expression "(View *)p_Var1 != pVVar9" (cast_expression "(View *)p_Var1" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) != identifier) )) && (parenthesized_expression "(lVar4._0_1_ = pVVar9->cache_, lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11)" ( (comma_expression "lVar4._0_1_ = pVVar9->cache_, lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11" (assignment_expression "lVar4._0_1_ = pVVar9->cache_" (field_expression "lVar4._0_1_" identifier . field_identifier) = (field_expression "pVVar9->cache_" identifier -> field_identifier)) , (comma_expression "lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21,\n              lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11" (assignment_expression "lVar4._1_3_ = *(undefined3 *)&pVVar9->field_0x21" (field_expression "lVar4._1_3_" identifier . field_identifier) = (pointer_expression "*(undefined3 *)&pVVar9->field_0x21" * (cast_expression "(undefined3 *)&pVVar9->field_0x21" ( (type_descriptor "undefined3 *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&pVVar9->field_0x21" & (field_expression "pVVar9->field_0x21" identifier -> field_identifier))))) , (comma_expression "lVar4._4_4_ = pVVar9->data_ownership_, lVar4 <= (long)uVar11" (assignment_expression "lVar4._4_4_ = pVVar9->data_ownership_" (field_expression "lVar4._4_4_" identifier . field_identifier) = (field_expression "pVVar9->data_ownership_" identifier -> field_identifier)) , (binary_expression "lVar4 <= (long)uVar11" identifier <= (cast_expression "(long)uVar11" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier))))) ))) )) ;) (if_statement "if (pVVar12 != (View *)0x0) {\n        if (!aligned) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar14 = (ulong)uVar13;\n        __s = (uchar *)malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14);\n        if (__s != (uchar *)0x0) {\n          memset(__s,0,uVar14);\n          memcpy(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_);\n          oVar5 = pVVar12->start_;\n          p_Var6 = (_Base_ptr)pVVar12->size_;\n          pVVar10 = (View *)operator_new(0x30);\n          pVVar10->start_ = oVar5;\n          pVVar10->size_ = (section_size_type)p_Var6;\n          pVVar10->data_ = __s;\n          pVVar10->lock_count_ = 0;\n          pVVar10->byteshift_ = uVar13;\n          pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY;\n          pVVar10->cache_ = cache;\n          pVVar10->accessed_ = true;\n          add_view(this,pVVar10);\n          return pVVar10;\n        }\n                    /* WARNING: Subroutine does not return */\n        gold_nomem();\n      }" if (parenthesized_expression "(pVVar12 != (View *)0x0)" ( (binary_expression "pVVar12 != (View *)0x0" identifier != (cast_expression "(View *)0x0" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        if (!aligned) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar14 = (ulong)uVar13;\n        __s = (uchar *)malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14);\n        if (__s != (uchar *)0x0) {\n          memset(__s,0,uVar14);\n          memcpy(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_);\n          oVar5 = pVVar12->start_;\n          p_Var6 = (_Base_ptr)pVVar12->size_;\n          pVVar10 = (View *)operator_new(0x30);\n          pVVar10->start_ = oVar5;\n          pVVar10->size_ = (section_size_type)p_Var6;\n          pVVar10->data_ = __s;\n          pVVar10->lock_count_ = 0;\n          pVVar10->byteshift_ = uVar13;\n          pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY;\n          pVVar10->cache_ = cache;\n          pVVar10->accessed_ = true;\n          add_view(this,pVVar10);\n          return pVVar10;\n        }\n                    /* WARNING: Subroutine does not return */\n        gold_nomem();\n      }" { (if_statement "if (!aligned) {\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }" if (parenthesized_expression "(!aligned)" ( (unary_expression "!aligned" ! identifier) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }" { comment (expression_statement "do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view");" (call_expression "do_gold_unreachable("../../gold/fileread.cc",0x24c,"find_or_make_view")" identifier (argument_list "("../../gold/fileread.cc",0x24c,"find_or_make_view")" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""find_or_make_view"" " string_content ") ))) ;) })) (expression_statement "uVar14 = (ulong)uVar13;" (assignment_expression "uVar14 = (ulong)uVar13" identifier = (cast_expression "(ulong)uVar13" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "__s = (uchar *)malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14);" (assignment_expression "__s = (uchar *)malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14)" identifier = (cast_expression "(uchar *)malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14)" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "malloc((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14)" identifier (argument_list "((long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14)" ( (binary_expression "(long)&((_Base_ptr)pVVar12->size_)->_M_color + uVar14" (cast_expression "(long)&((_Base_ptr)pVVar12->size_)->_M_color" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&((_Base_ptr)pVVar12->size_)->_M_color" & (field_expression "((_Base_ptr)pVVar12->size_)->_M_color" (parenthesized_expression "((_Base_ptr)pVVar12->size_)" ( (cast_expression "(_Base_ptr)pVVar12->size_" ( (type_descriptor "_Base_ptr" type_identifier) ) (field_expression "pVVar12->size_" identifier -> field_identifier)) )) -> field_identifier))) + identifier) ))))) ;) (if_statement "if (__s != (uchar *)0x0) {\n          memset(__s,0,uVar14);\n          memcpy(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_);\n          oVar5 = pVVar12->start_;\n          p_Var6 = (_Base_ptr)pVVar12->size_;\n          pVVar10 = (View *)operator_new(0x30);\n          pVVar10->start_ = oVar5;\n          pVVar10->size_ = (section_size_type)p_Var6;\n          pVVar10->data_ = __s;\n          pVVar10->lock_count_ = 0;\n          pVVar10->byteshift_ = uVar13;\n          pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY;\n          pVVar10->cache_ = cache;\n          pVVar10->accessed_ = true;\n          add_view(this,pVVar10);\n          return pVVar10;\n        }" if (parenthesized_expression "(__s != (uchar *)0x0)" ( (binary_expression "__s != (uchar *)0x0" identifier != (cast_expression "(uchar *)0x0" ( (type_descriptor "uchar *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          memset(__s,0,uVar14);\n          memcpy(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_);\n          oVar5 = pVVar12->start_;\n          p_Var6 = (_Base_ptr)pVVar12->size_;\n          pVVar10 = (View *)operator_new(0x30);\n          pVVar10->start_ = oVar5;\n          pVVar10->size_ = (section_size_type)p_Var6;\n          pVVar10->data_ = __s;\n          pVVar10->lock_count_ = 0;\n          pVVar10->byteshift_ = uVar13;\n          pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY;\n          pVVar10->cache_ = cache;\n          pVVar10->accessed_ = true;\n          add_view(this,pVVar10);\n          return pVVar10;\n        }" { (expression_statement "memset(__s,0,uVar14);" (call_expression "memset(__s,0,uVar14)" identifier (argument_list "(__s,0,uVar14)" ( identifier , number_literal , identifier ))) ;) (expression_statement "memcpy(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_);" (call_expression "memcpy(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_)" identifier (argument_list "(__s + uVar14,\n                 (void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)\n                 ,(size_t)pVVar12->size_)" ( (binary_expression "__s + uVar14" identifier + identifier) , (cast_expression "(void *)((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_)" ( (binary_expression "(long)&((_Base_ptr)pVVar12->data_)->_M_color + (ulong)pVVar12->byteshift_" (cast_expression "(long)&((_Base_ptr)pVVar12->data_)->_M_color" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (pointer_expression "&((_Base_ptr)pVVar12->data_)->_M_color" & (field_expression "((_Base_ptr)pVVar12->data_)->_M_color" (parenthesized_expression "((_Base_ptr)pVVar12->data_)" ( (cast_expression "(_Base_ptr)pVVar12->data_" ( (type_descriptor "_Base_ptr" type_identifier) ) (field_expression "pVVar12->data_" identifier -> field_identifier)) )) -> field_identifier))) + (cast_expression "(ulong)pVVar12->byteshift_" ( (type_descriptor "ulong" type_identifier) ) (field_expression "pVVar12->byteshift_" identifier -> field_identifier))) ))) , (cast_expression "(size_t)pVVar12->size_" ( (type_descriptor "size_t" primitive_type) ) (field_expression "pVVar12->size_" identifier -> field_identifier)) ))) ;) (expression_statement "oVar5 = pVVar12->start_;" (assignment_expression "oVar5 = pVVar12->start_" identifier = (field_expression "pVVar12->start_" identifier -> field_identifier)) ;) (expression_statement "p_Var6 = (_Base_ptr)pVVar12->size_;" (assignment_expression "p_Var6 = (_Base_ptr)pVVar12->size_" identifier = (cast_expression "(_Base_ptr)pVVar12->size_" ( (type_descriptor "_Base_ptr" type_identifier) ) (field_expression "pVVar12->size_" identifier -> field_identifier))) ;) (expression_statement "pVVar10 = (View *)operator_new(0x30);" (assignment_expression "pVVar10 = (View *)operator_new(0x30)" identifier = (cast_expression "(View *)operator_new(0x30)" ( (type_descriptor "View *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "operator_new(0x30)" identifier (argument_list "(0x30)" ( number_literal ))))) ;) (expression_statement "pVVar10->start_ = oVar5;" (assignment_expression "pVVar10->start_ = oVar5" (field_expression "pVVar10->start_" identifier -> field_identifier) = identifier) ;) (expression_statement "pVVar10->size_ = (section_size_type)p_Var6;" (assignment_expression "pVVar10->size_ = (section_size_type)p_Var6" (field_expression "pVVar10->size_" identifier -> field_identifier) = (cast_expression "(section_size_type)p_Var6" ( (type_descriptor "section_size_type" type_identifier) ) identifier)) ;) (expression_statement "pVVar10->data_ = __s;" (assignment_expression "pVVar10->data_ = __s" (field_expression "pVVar10->data_" identifier -> field_identifier) = identifier) ;) (expression_statement "pVVar10->lock_count_ = 0;" (assignment_expression "pVVar10->lock_count_ = 0" (field_expression "pVVar10->lock_count_" identifier -> field_identifier) = number_literal) ;) (expression_statement "pVVar10->byteshift_ = uVar13;" (assignment_expression "pVVar10->byteshift_ = uVar13" (field_expression "pVVar10->byteshift_" identifier -> field_identifier) = identifier) ;) (expression_statement "pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY;" (assignment_expression "pVVar10->data_ownership_ = DATA_ALLOCATED_ARRAY" (field_expression "pVVar10->data_ownership_" identifier -> field_identifier) = identifier) ;) (expression_statement "pVVar10->cache_ = cache;" (assignment_expression "pVVar10->cache_ = cache" (field_expression "pVVar10->cache_" identifier -> field_identifier) = identifier) ;) (expression_statement "pVVar10->accessed_ = true;" (assignment_expression "pVVar10->accessed_ = true" (field_expression "pVVar10->accessed_" identifier -> field_identifier) = true) ;) (expression_statement "add_view(this,pVVar10);" (call_expression "add_view(this,pVVar10)" identifier (argument_list "(this,pVVar10)" ( identifier , identifier ))) ;) (return_statement "return pVVar10;" return identifier ;) })) comment (expression_statement "gold_nomem();" (call_expression "gold_nomem()" identifier (argument_list "()" ( ))) ;) })) }))) })) (if_statement "if (!aligned) {\n    uVar13 = 0;\n  }" if (parenthesized_expression "(!aligned)" ( (unary_expression "!aligned" ! identifier) )) (compound_statement "{\n    uVar13 = 0;\n  }" { (expression_statement "uVar13 = 0;" (assignment_expression "uVar13 = 0" identifier = number_literal) ;) })) (expression_statement "pVVar10 = make_view(this,uVar14,size,uVar13,cache);" (assignment_expression "pVVar10 = make_view(this,uVar14,size,uVar13,cache)" identifier = (call_expression "make_view(this,uVar14,size,uVar13,cache)" identifier (argument_list "(this,uVar14,size,uVar13,cache)" ( identifier , identifier , identifier , identifier , identifier )))) ;) (return_statement "return pVVar10;" return identifier ;) }))
(translation_unit "long * FUN_0017ae70(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)\n\n{\n  long *plVar1;\n  long lVar2;\n  uint uVar3;\n  long *plVar4;\n  void *__s;\n  undefined8 uVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  long lVar8;\n  ulong uVar9;\n  long *plVar10;\n  uint uVar11;\n  ulong uVar12;\n  \n  lVar8 = param_1[6];\n  if ((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)) {\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    \n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }\n  uVar11 = 0;\n  if (param_2 == 0) {\n    lVar2 = param_1[0x16];\n  }\n  else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }\n  if (((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')) {\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }\n  uVar3 = 0xffffffff;\n  if (param_5 != '\0') {\n    uVar3 = uVar11;\n  }\n  uVar12 = param_3 + param_2;\n  if ((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)) {\n                    \n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }\n  plVar6 = (long *)param_1[0x16];\n  if ((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)) {\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }\n  plVar10 = (long *)param_1[0xd];\n  plVar1 = param_1 + 0xc;\n  uVar9 = uVar12 & 0xffffffffffffe000;\n  plVar4 = plVar1;\n  if (plVar10 != (long *)0x0) {\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }\n  }\n  if (param_5 == '\0') {\n    uVar11 = 0;\n  }\n  plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6);\n  return plVar6;\n}\n\n" (function_definition "long * FUN_0017ae70(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)\n\n{\n  long *plVar1;\n  long lVar2;\n  uint uVar3;\n  long *plVar4;\n  void *__s;\n  undefined8 uVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  long lVar8;\n  ulong uVar9;\n  long *plVar10;\n  uint uVar11;\n  ulong uVar12;\n  \n  lVar8 = param_1[6];\n  if ((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)) {\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    \n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }\n  uVar11 = 0;\n  if (param_2 == 0) {\n    lVar2 = param_1[0x16];\n  }\n  else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }\n  if (((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')) {\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }\n  uVar3 = 0xffffffff;\n  if (param_5 != '\0') {\n    uVar3 = uVar11;\n  }\n  uVar12 = param_3 + param_2;\n  if ((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)) {\n                    \n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }\n  plVar6 = (long *)param_1[0x16];\n  if ((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)) {\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }\n  plVar10 = (long *)param_1[0xd];\n  plVar1 = param_1 + 0xc;\n  uVar9 = uVar12 & 0xffffffffffffe000;\n  plVar4 = plVar1;\n  if (plVar10 != (long *)0x0) {\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }\n  }\n  if (param_5 == '\0') {\n    uVar11 = 0;\n  }\n  plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6);\n  return plVar6;\n}" (sized_type_specifier "long" long) (pointer_declarator "* FUN_0017ae70(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)" * (function_declarator "FUN_0017ae70(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)" identifier (parameter_list "(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)" ( (parameter_declaration "undefined8 *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "long param_2" (sized_type_specifier "long" long) identifier) , (parameter_declaration "long param_3" (sized_type_specifier "long" long) identifier) , (parameter_declaration "ulong param_4" type_identifier identifier) , (parameter_declaration "char param_5" primitive_type identifier) , (parameter_declaration "char param_6" primitive_type identifier) )))) (compound_statement "{\n  long *plVar1;\n  long lVar2;\n  uint uVar3;\n  long *plVar4;\n  void *__s;\n  undefined8 uVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  long lVar8;\n  ulong uVar9;\n  long *plVar10;\n  uint uVar11;\n  ulong uVar12;\n  \n  lVar8 = param_1[6];\n  if ((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)) {\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    \n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }\n  uVar11 = 0;\n  if (param_2 == 0) {\n    lVar2 = param_1[0x16];\n  }\n  else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }\n  if (((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')) {\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }\n  uVar3 = 0xffffffff;\n  if (param_5 != '\0') {\n    uVar3 = uVar11;\n  }\n  uVar12 = param_3 + param_2;\n  if ((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)) {\n                    \n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }\n  plVar6 = (long *)param_1[0x16];\n  if ((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)) {\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }\n  plVar10 = (long *)param_1[0xd];\n  plVar1 = param_1 + 0xc;\n  uVar9 = uVar12 & 0xffffffffffffe000;\n  plVar4 = plVar1;\n  if (plVar10 != (long *)0x0) {\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }\n  }\n  if (param_5 == '\0') {\n    uVar11 = 0;\n  }\n  plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6);\n  return plVar6;\n}" { (declaration "long *plVar1;" (sized_type_specifier "long" long) (pointer_declarator "*plVar1" * identifier) ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "uint uVar3;" type_identifier identifier ;) (declaration "long *plVar4;" (sized_type_specifier "long" long) (pointer_declarator "*plVar4" * identifier) ;) (declaration "void *__s;" primitive_type (pointer_declarator "*__s" * identifier) ;) (declaration "undefined8 uVar5;" type_identifier identifier ;) (declaration "long *plVar6;" (sized_type_specifier "long" long) (pointer_declarator "*plVar6" * identifier) ;) (declaration "undefined8 uVar7;" type_identifier identifier ;) (declaration "long lVar8;" (sized_type_specifier "long" long) identifier ;) (declaration "ulong uVar9;" type_identifier identifier ;) (declaration "long *plVar10;" (sized_type_specifier "long" long) (pointer_declarator "*plVar10" * identifier) ;) (declaration "uint uVar11;" type_identifier identifier ;) (declaration "ulong uVar12;" type_identifier identifier ;) (expression_statement "lVar8 = param_1[6];" (assignment_expression "lVar8 = param_1[6]" identifier = (subscript_expression "param_1[6]" identifier [ number_literal ])) ;) (if_statement "if ((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)) {\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    \n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }" if (parenthesized_expression "((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4))" ( (binary_expression "(lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)" (parenthesized_expression "(lVar8 < param_3)" ( (binary_expression "lVar8 < param_3" identifier < identifier) )) || (parenthesized_expression "((ulong)(lVar8 - param_3) < param_4)" ( (binary_expression "(ulong)(lVar8 - param_3) < param_4" (call_expression "(ulong)(lVar8 - param_3)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(lVar8 - param_3)" ( (binary_expression "lVar8 - param_3" identifier - identifier) ))) < identifier) ))) )) (compound_statement "{\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    \n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }" { (expression_statement "uVar5 = *param_1;" (assignment_expression "uVar5 = *param_1" identifier = (pointer_expression "*param_1" * identifier)) ;) (expression_statement "uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );" (assignment_expression "uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   )" identifier = (call_expression "gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   )" identifier (argument_list "(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   )" ( (string_literal ""%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"" " string_content ") )))) ;) (expression_statement "FUN_001781e0(uVar7,uVar5,param_4,param_3);" (call_expression "FUN_001781e0(uVar7,uVar5,param_4,param_3)" identifier (argument_list "(uVar7,uVar5,param_4,param_3)" ( identifier , identifier , identifier , identifier ))) ;) })) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) (if_statement "if (param_2 == 0) {\n    lVar2 = param_1[0x16];\n  }\n  else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }" if (parenthesized_expression "(param_2 == 0)" ( (binary_expression "param_2 == 0" identifier == number_literal) )) (compound_statement "{\n    lVar2 = param_1[0x16];\n  }" { (expression_statement "lVar2 = param_1[0x16];" (assignment_expression "lVar2 = param_1[0x16]" identifier = (subscript_expression "param_1[0x16]" identifier [ number_literal ])) ;) }) (else_clause "else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }" else (compound_statement "{\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }" { (if_statement "if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }" if (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0)" ( (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x18)" * (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x18)" ( (binary_expression "PTR_DAT_0043e6b0 + 0x18" identifier + number_literal) )))) == number_literal) )) (compound_statement "{\n      uVar11 = 7;\n      uVar3 = 8;\n    }" { (expression_statement "uVar11 = 7;" (assignment_expression "uVar11 = 7" identifier = number_literal) ;) (expression_statement "uVar3 = 8;" (assignment_expression "uVar3 = 8" identifier = number_literal) ;) }) (else_clause "else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }" else (compound_statement "{\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }" { (expression_statement "uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;" (assignment_expression "uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3" identifier = (binary_expression "**(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3" (pointer_expression "**(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8)" * (pointer_expression "*(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8)" * (cast_expression "(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8)" ( (type_descriptor "uint **" type_identifier (abstract_pointer_declarator "**" * (abstract_pointer_declarator "*" *))) ) (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8)" ( (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x18)" * (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x18)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x18)" ( (binary_expression "PTR_DAT_0043e6b0 + 0x18" identifier + number_literal) )))) + number_literal) ))))) >> number_literal)) ;) (expression_statement "uVar11 = uVar3 - 1;" (assignment_expression "uVar11 = uVar3 - 1" identifier = (binary_expression "uVar3 - 1" identifier - number_literal)) ;) }))) (expression_statement "uVar11 = uVar11 & (uint)param_2;" (assignment_expression "uVar11 = uVar11 & (uint)param_2" identifier = (binary_expression "uVar11 & (uint)param_2" identifier & (cast_expression "(uint)param_2" ( (type_descriptor "uint" type_identifier) ) identifier))) ;) (if_statement "if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }" if (parenthesized_expression "(uVar11 != 0)" ( (binary_expression "uVar11 != 0" identifier != number_literal) )) (compound_statement "{\n      uVar11 = uVar3 - uVar11;\n    }" { (expression_statement "uVar11 = uVar3 - uVar11;" (assignment_expression "uVar11 = uVar3 - uVar11" identifier = (binary_expression "uVar3 - uVar11" identifier - identifier)) ;) })) (expression_statement "lVar2 = param_1[0x16];" (assignment_expression "lVar2 = param_1[0x16]" identifier = (subscript_expression "param_1[0x16]" identifier [ number_literal ])) ;) }))) (if_statement "if (((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')) {\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }" if (parenthesized_expression "(((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0'))" ( (binary_expression "((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')" (parenthesized_expression "((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0))" ( (binary_expression "(lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)" (parenthesized_expression "(lVar2 == 0)" ( (binary_expression "lVar2 == 0" identifier == number_literal) )) && (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)" ( (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x10)" ( (binary_expression "PTR_DAT_0043e6b0 + 0x10" identifier + number_literal) )))) != number_literal) ))) )) && (parenthesized_expression "(*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')" ( (binary_expression "*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0'" (pointer_expression "*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819)" * (cast_expression "(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819)" ( (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10)" * (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x10)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x10)" ( (binary_expression "PTR_DAT_0043e6b0 + 0x10" identifier + number_literal) )))) + number_literal) )))) != (char_literal "'\0'" ' escape_sequence ')) ))) )) (compound_statement "{\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }" { (expression_statement "uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);" (assignment_expression "uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6)" identifier = (call_expression "FUN_0017acb0(param_1,0,lVar8,0,param_6)" identifier (argument_list "(param_1,0,lVar8,0,param_6)" ( identifier , number_literal , identifier , number_literal , identifier )))) ;) (expression_statement "lVar8 = param_1[6];" (assignment_expression "lVar8 = param_1[6]" identifier = (subscript_expression "param_1[6]" identifier [ number_literal ])) ;) (expression_statement "param_1[0x16] = uVar5;" (assignment_expression "param_1[0x16] = uVar5" (subscript_expression "param_1[0x16]" identifier [ number_literal ]) = identifier) ;) })) (expression_statement "uVar3 = 0xffffffff;" (assignment_expression "uVar3 = 0xffffffff" identifier = number_literal) ;) (if_statement "if (param_5 != '\0') {\n    uVar3 = uVar11;\n  }" if (parenthesized_expression "(param_5 != '\0')" ( (binary_expression "param_5 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar3 = uVar11;\n  }" { (expression_statement "uVar3 = uVar11;" (assignment_expression "uVar3 = uVar11" identifier = identifier) ;) })) (expression_statement "uVar12 = param_3 + param_2;" (assignment_expression "uVar12 = param_3 + param_2" identifier = (binary_expression "param_3 + param_2" identifier + identifier)) ;) (if_statement "if ((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)) {\n                    \n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }" if (parenthesized_expression "((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4))" ( (binary_expression "(lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)" (parenthesized_expression "(lVar8 < (long)uVar12)" ( (binary_expression "lVar8 < (long)uVar12" identifier < (cast_expression "(long)uVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) || (parenthesized_expression "(lVar8 - uVar12 < param_4)" ( (binary_expression "lVar8 - uVar12 < param_4" (binary_expression "lVar8 - uVar12" identifier - identifier) < identifier) ))) )) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }" { (expression_statement "FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");" (call_expression "FUN_0017c650("../../gold/fileread.cc",0x150,"find_view")" identifier (argument_list "("../../gold/fileread.cc",0x150,"find_view")" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""find_view"" " string_content ") ))) ;) })) (expression_statement "plVar6 = (long *)param_1[0x16];" (assignment_expression "plVar6 = (long *)param_1[0x16]" identifier = (cast_expression "(long *)param_1[0x16]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0x16]" identifier [ number_literal ]))) ;) (if_statement "if ((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)) {\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }" if (parenthesized_expression "((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1))" ( (binary_expression "(plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)" (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) && (parenthesized_expression "(0xfffffffd < uVar3 - 1)" ( (binary_expression "0xfffffffd < uVar3 - 1" number_literal < (binary_expression "uVar3 - 1" identifier - number_literal)) ))) )) (compound_statement "{\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }" { (labeled_statement "LAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }" statement_identifier : (if_statement "if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }" if (parenthesized_expression "(param_6 != '\0')" ( (binary_expression "param_6 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }" { (expression_statement "*(undefined1 *)(plVar6 + 4) = 1;" (assignment_expression "*(undefined1 *)(plVar6 + 4) = 1" (pointer_expression "*(undefined1 *)(plVar6 + 4)" * (cast_expression "(undefined1 *)(plVar6 + 4)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar6 + 4)" ( (binary_expression "plVar6 + 4" identifier + number_literal) )))) = number_literal) ;) }))) (return_statement "return plVar6;" return identifier ;) })) (expression_statement "plVar10 = (long *)param_1[0xd];" (assignment_expression "plVar10 = (long *)param_1[0xd]" identifier = (cast_expression "(long *)param_1[0xd]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "param_1[0xd]" identifier [ number_literal ]))) ;) (expression_statement "plVar1 = param_1 + 0xc;" (assignment_expression "plVar1 = param_1 + 0xc" identifier = (binary_expression "param_1 + 0xc" identifier + number_literal)) ;) (expression_statement "uVar9 = uVar12 & 0xffffffffffffe000;" (assignment_expression "uVar9 = uVar12 & 0xffffffffffffe000" identifier = (binary_expression "uVar12 & 0xffffffffffffe000" identifier & number_literal)) ;) (expression_statement "plVar4 = plVar1;" (assignment_expression "plVar4 = plVar1" identifier = identifier) ;) (if_statement "if (plVar10 != (long *)0x0) {\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }\n  }" if (parenthesized_expression "(plVar10 != (long *)0x0)" ( (binary_expression "plVar10 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }\n  }" { (do_statement "do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);" do (compound_statement "{\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    }" { (while_statement "while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }" while (parenthesized_expression "((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0)))))" ( (parenthesized_expression "(plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))" ( (binary_expression "plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0)))" (binary_expression "plVar10[4] <= (long)(uVar9 - 1)" (subscript_expression "plVar10[4]" identifier [ number_literal ]) <= (cast_expression "(long)(uVar9 - 1)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(uVar9 - 1)" ( (binary_expression "uVar9 - 1" identifier - number_literal) )))) && (parenthesized_expression "((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0)))" ( (parenthesized_expression "(uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))" ( (binary_expression "uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0)" (binary_expression "uVar9 - 1 != plVar10[4]" (binary_expression "uVar9 - 1" identifier - number_literal) != (subscript_expression "plVar10[4]" identifier [ number_literal ])) || (parenthesized_expression "((int)plVar10[5] == 0)" ( (binary_expression "(int)plVar10[5] == 0" (cast_expression "(int)plVar10[5]" ( (type_descriptor "int" primitive_type) ) (subscript_expression "plVar10[5]" identifier [ number_literal ])) == number_literal) ))) )) ))) )) )) (compound_statement "{\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }" { (expression_statement "plVar10 = (long *)plVar10[3];" (assignment_expression "plVar10 = (long *)plVar10[3]" identifier = (cast_expression "(long *)plVar10[3]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar10[3]" identifier [ number_literal ]))) ;) (if_statement "if (plVar10 == (long *)0x0) goto LAB_0017af56;" if (parenthesized_expression "(plVar10 == (long *)0x0)" ( (binary_expression "plVar10 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (goto_statement "goto LAB_0017af56;" goto statement_identifier ;)) })) (expression_statement "plVar6 = (long *)plVar10[2];" (assignment_expression "plVar6 = (long *)plVar10[2]" identifier = (cast_expression "(long *)plVar10[2]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar10[2]" identifier [ number_literal ]))) ;) (expression_statement "plVar4 = plVar10;" (assignment_expression "plVar4 = plVar10" identifier = identifier) ;) (expression_statement "plVar10 = plVar6;" (assignment_expression "plVar10 = plVar6" identifier = identifier) ;) }) while (parenthesized_expression "(plVar6 != (long *)0x0)" ( (binary_expression "plVar6 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) ;) (labeled_statement "LAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }" statement_identifier : (if_statement "if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }" if (parenthesized_expression "((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9))" ( (binary_expression "(plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)" (parenthesized_expression "(plVar1 != plVar4)" ( (binary_expression "plVar1 != plVar4" identifier != identifier) )) && (parenthesized_expression "(plVar4[4] <= (long)uVar9)" ( (binary_expression "plVar4[4] <= (long)uVar9" (subscript_expression "plVar4[4]" identifier [ number_literal ]) <= (cast_expression "(long)uVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) )) (compound_statement "{\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }" { (do_statement "do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));" do (compound_statement "{\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      }" { (expression_statement "plVar6 = (long *)plVar4[6];" (assignment_expression "plVar6 = (long *)plVar4[6]" identifier = (cast_expression "(long *)plVar4[6]" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (subscript_expression "plVar4[6]" identifier [ number_literal ]))) ;) (if_statement "if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }" if (parenthesized_expression "((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1]))" ( (binary_expression "(*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])" (parenthesized_expression "(*plVar6 <= (long)uVar12)" ( (binary_expression "*plVar6 <= (long)uVar12" (pointer_expression "*plVar6" * identifier) <= (cast_expression "(long)uVar12" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) )) && (parenthesized_expression "((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])" ( (binary_expression "(long)(param_4 + uVar12) <= *plVar6 + plVar6[1]" (cast_expression "(long)(param_4 + uVar12)" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) (parenthesized_expression "(param_4 + uVar12)" ( (binary_expression "param_4 + uVar12" identifier + identifier) ))) <= (binary_expression "*plVar6 + plVar6[1]" (pointer_expression "*plVar6" * identifier) + (subscript_expression "plVar6[1]" identifier [ number_literal ]))) ))) )) (compound_statement "{\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }" { (if_statement "if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }" if (parenthesized_expression "((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c)))" ( (binary_expression "(uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))" (parenthesized_expression "(uVar3 == 0xffffffff)" ( (binary_expression "uVar3 == 0xffffffff" identifier == number_literal) )) || (parenthesized_expression "(uVar3 == *(uint *)((long)plVar6 + 0x1c))" ( (binary_expression "uVar3 == *(uint *)((long)plVar6 + 0x1c)" identifier == (pointer_expression "*(uint *)((long)plVar6 + 0x1c)" * (cast_expression "(uint *)((long)plVar6 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar6 + 0x1c)" ( (binary_expression "(long)plVar6 + 0x1c" (cast_expression "(long)plVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) ))))) ))) )) (compound_statement "{\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }" { (expression_statement "*(undefined1 *)(plVar6 + 5) = 1;" (assignment_expression "*(undefined1 *)(plVar6 + 5) = 1" (pointer_expression "*(undefined1 *)(plVar6 + 5)" * (cast_expression "(undefined1 *)(plVar6 + 5)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar6 + 5)" ( (binary_expression "plVar6 + 5" identifier + number_literal) )))) = number_literal) ;) (goto_statement "goto LAB_0017b094;" goto statement_identifier ;) })) (if_statement "if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }" if (parenthesized_expression "(plVar10 == (long *)0x0)" ( (binary_expression "plVar10 == (long *)0x0" identifier == (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n            plVar10 = plVar6;\n          }" { (expression_statement "plVar10 = plVar6;" (assignment_expression "plVar10 = plVar6" identifier = identifier) ;) })) })) (expression_statement "plVar4 = (long *)thunk_FUN_002dc020(plVar4);" (assignment_expression "plVar4 = (long *)thunk_FUN_002dc020(plVar4)" identifier = (cast_expression "(long *)thunk_FUN_002dc020(plVar4)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "thunk_FUN_002dc020(plVar4)" identifier (argument_list "(plVar4)" ( identifier ))))) ;) }) while (parenthesized_expression "((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9))" ( (binary_expression "(plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)" (parenthesized_expression "(plVar1 != plVar4)" ( (binary_expression "plVar1 != plVar4" identifier != identifier) )) && (parenthesized_expression "(plVar4[4] <= (long)uVar9)" ( (binary_expression "plVar4[4] <= (long)uVar9" (subscript_expression "plVar4[4]" identifier [ number_literal ]) <= (cast_expression "(long)uVar9" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ))) )) ;) (if_statement "if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }" if (parenthesized_expression "(plVar10 != (long *)0x0)" ( (binary_expression "plVar10 != (long *)0x0" identifier != (cast_expression "(long *)0x0" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }" { (if_statement "if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }" if (parenthesized_expression "(param_5 == '\0')" ( (binary_expression "param_5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }" { (expression_statement "FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");" (call_expression "FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view")" identifier (argument_list "("../../gold/fileread.cc",0x24c,"find_or_make_view")" ( (string_literal ""../../gold/fileread.cc"" " string_content ") , number_literal , (string_literal ""find_or_make_view"" " string_content ") ))) ;) })) (expression_statement "uVar12 = (ulong)uVar11;" (assignment_expression "uVar12 = (ulong)uVar11" identifier = (cast_expression "(ulong)uVar11" ( (type_descriptor "ulong" type_identifier) ) identifier)) ;) (expression_statement "__s = malloc(plVar10[1] + uVar12);" (assignment_expression "__s = malloc(plVar10[1] + uVar12)" identifier = (call_expression "malloc(plVar10[1] + uVar12)" identifier (argument_list "(plVar10[1] + uVar12)" ( (binary_expression "plVar10[1] + uVar12" (subscript_expression "plVar10[1]" identifier [ number_literal ]) + identifier) )))) ;) (if_statement "if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }" if (parenthesized_expression "(__s != (void *)0x0)" ( (binary_expression "__s != (void *)0x0" identifier != (cast_expression "(void *)0x0" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) )) (compound_statement "{\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }" { (expression_statement "memset(__s,0,uVar12);" (call_expression "memset(__s,0,uVar12)" identifier (argument_list "(__s,0,uVar12)" ( identifier , number_literal , identifier ))) ;) (expression_statement "memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);" (call_expression "memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1])" identifier (argument_list "((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1])" ( (cast_expression "(void *)((long)__s + uVar12)" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)__s + uVar12)" ( (binary_expression "(long)__s + uVar12" (cast_expression "(long)__s" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + identifier) ))) , (cast_expression "(void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2])" ( (type_descriptor "void *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2])" ( (binary_expression "(ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]" (binary_expression "(ulong)*(uint *)((long)plVar10 + 0x1c)" (parenthesized_expression "(ulong)" ( identifier )) * (cast_expression "(uint *)((long)plVar10 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar10 + 0x1c)" ( (binary_expression "(long)plVar10 + 0x1c" (cast_expression "(long)plVar10" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) + (subscript_expression "plVar10[2]" identifier [ number_literal ])) ))) , (subscript_expression "plVar10[1]" identifier [ number_literal ]) ))) ;) (expression_statement "lVar8 = *plVar10;" (assignment_expression "lVar8 = *plVar10" identifier = (pointer_expression "*plVar10" * identifier)) ;) (expression_statement "lVar2 = plVar10[1];" (assignment_expression "lVar2 = plVar10[1]" identifier = (subscript_expression "plVar10[1]" identifier [ number_literal ])) ;) (expression_statement "plVar6 = (long *)FUN_002d9490(0x30);" (assignment_expression "plVar6 = (long *)FUN_002d9490(0x30)" identifier = (cast_expression "(long *)FUN_002d9490(0x30)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_002d9490(0x30)" identifier (argument_list "(0x30)" ( number_literal ))))) ;) (expression_statement "*plVar6 = lVar8;" (assignment_expression "*plVar6 = lVar8" (pointer_expression "*plVar6" * identifier) = identifier) ;) (expression_statement "plVar6[1] = lVar2;" (assignment_expression "plVar6[1] = lVar2" (subscript_expression "plVar6[1]" identifier [ number_literal ]) = identifier) ;) (expression_statement "plVar6[2] = (long)__s;" (assignment_expression "plVar6[2] = (long)__s" (subscript_expression "plVar6[2]" identifier [ number_literal ]) = (cast_expression "(long)__s" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier)) ;) (expression_statement "*(undefined4 *)(plVar6 + 3) = 0;" (assignment_expression "*(undefined4 *)(plVar6 + 3) = 0" (pointer_expression "*(undefined4 *)(plVar6 + 3)" * (cast_expression "(undefined4 *)(plVar6 + 3)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar6 + 3)" ( (binary_expression "plVar6 + 3" identifier + number_literal) )))) = number_literal) ;) (expression_statement "*(uint *)((long)plVar6 + 0x1c) = uVar11;" (assignment_expression "*(uint *)((long)plVar6 + 0x1c) = uVar11" (pointer_expression "*(uint *)((long)plVar6 + 0x1c)" * (cast_expression "(uint *)((long)plVar6 + 0x1c)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar6 + 0x1c)" ( (binary_expression "(long)plVar6 + 0x1c" (cast_expression "(long)plVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = identifier) ;) (expression_statement "*(undefined4 *)((long)plVar6 + 0x24) = 1;" (assignment_expression "*(undefined4 *)((long)plVar6 + 0x24) = 1" (pointer_expression "*(undefined4 *)((long)plVar6 + 0x24)" * (cast_expression "(undefined4 *)((long)plVar6 + 0x24)" ( (type_descriptor "undefined4 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "((long)plVar6 + 0x24)" ( (binary_expression "(long)plVar6 + 0x24" (cast_expression "(long)plVar6" ( (type_descriptor "long" (sized_type_specifier "long" long)) ) identifier) + number_literal) )))) = number_literal) ;) (expression_statement "*(char *)(plVar6 + 4) = param_6;" (assignment_expression "*(char *)(plVar6 + 4) = param_6" (pointer_expression "*(char *)(plVar6 + 4)" * (cast_expression "(char *)(plVar6 + 4)" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar6 + 4)" ( (binary_expression "plVar6 + 4" identifier + number_literal) )))) = identifier) ;) (expression_statement "*(undefined1 *)(plVar6 + 5) = 1;" (assignment_expression "*(undefined1 *)(plVar6 + 5) = 1" (pointer_expression "*(undefined1 *)(plVar6 + 5)" * (cast_expression "(undefined1 *)(plVar6 + 5)" ( (type_descriptor "undefined1 *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(plVar6 + 5)" ( (binary_expression "plVar6 + 5" identifier + number_literal) )))) = number_literal) ;) (expression_statement "FUN_0017aa60(param_1,plVar6);" (call_expression "FUN_0017aa60(param_1,plVar6)" identifier (argument_list "(param_1,plVar6)" ( identifier , identifier ))) ;) (return_statement "return plVar6;" return identifier ;) })) (expression_statement "FUN_0017c600();" (call_expression "FUN_0017c600()" identifier (argument_list "()" ( ))) ;) })) }))) })) (if_statement "if (param_5 == '\0') {\n    uVar11 = 0;\n  }" if (parenthesized_expression "(param_5 == '\0')" ( (binary_expression "param_5 == '\0'" identifier == (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n    uVar11 = 0;\n  }" { (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" identifier = number_literal) ;) })) (expression_statement "plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6);" (assignment_expression "plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6)" identifier = (cast_expression "(long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (call_expression "FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6)" identifier (argument_list "(param_1,uVar12,param_4,uVar11,param_6)" ( identifier , identifier , identifier , identifier , identifier ))))) ;) (return_statement "return plVar6;" return identifier ;) })))
(translation_unit (function_definition (sized_type_specifier long) (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration (sized_type_specifier long) IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) || (parenthesized_expression ( (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression IDENT - IDENT) ))) < IDENT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (string_literal " string_content ") )))) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT ))) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) }) (else_clause else (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression (pointer_expression * (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator * (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) )))) + LIT) ))))) >> LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) }))) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & (cast_expression ( (type_descriptor TYPE) ) IDENT))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (binary_expression IDENT - IDENT)) ;) })) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) }))) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) != LIT) ))) )) && (parenthesized_expression ( (binary_expression (pointer_expression * (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) )))) + LIT) )))) != (char_literal ' escape_sequence ')) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , LIT , IDENT , LIT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (subscript_expression IDENT [ LIT ])) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )) || (parenthesized_expression ( (binary_expression (binary_expression IDENT - IDENT) < IDENT) ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) && (parenthesized_expression ( (binary_expression LIT < (binary_expression IDENT - LIT)) ))) )) (compound_statement { (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) }))) (return_statement return IDENT ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT & LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (subscript_expression IDENT [ LIT ]) <= (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT - LIT) )))) && (parenthesized_expression ( (parenthesized_expression ( (binary_expression (binary_expression (binary_expression IDENT - LIT) != (subscript_expression IDENT [ LIT ])) || (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (subscript_expression IDENT [ LIT ])) == LIT) ))) )) ))) )) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (goto_statement goto statement_identifier ;)) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != IDENT) )) && (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) <= (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) )) (compound_statement { (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (subscript_expression IDENT [ LIT ]))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) <= (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) )) && (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) (parenthesized_expression ( (binary_expression IDENT + IDENT) ))) <= (binary_expression (pointer_expression * IDENT) + (subscript_expression IDENT [ LIT ]))) ))) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) || (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) ))))) ))) )) (compound_statement { (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT ))))) ;) }) while (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != IDENT) )) && (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) <= (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT)) ))) )) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE) ) IDENT)) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (binary_expression (subscript_expression IDENT [ LIT ]) + IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( IDENT , LIT , IDENT ))) ;) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + IDENT) ))) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (binary_expression (parenthesized_expression ( IDENT )) * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) + (subscript_expression IDENT [ LIT ])) ))) , (subscript_expression IDENT [ LIT ]) ))) ;) (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 (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( LIT ))))) ;) (expression_statement (assignment_expression (pointer_expression * IDENT) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = IDENT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor (sized_type_specifier long)) ) 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 (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor (sized_type_specifier long)) ) IDENT) + LIT) )))) = LIT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = IDENT) ;) (expression_statement (assignment_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) )))) = LIT) ;) (expression_statement (call_expression IDENT (argument_list ( IDENT , IDENT ))) ;) (return_statement return IDENT ;) })) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) }))) })) (if_statement if (parenthesized_expression ( (binary_expression IDENT == (char_literal ' escape_sequence ')) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) })) (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , IDENT , IDENT ))))) ;) (return_statement return IDENT ;) })))
(function_definition "long * FUN_0017ae70(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)\n\n{\n  long *plVar1;\n  long lVar2;\n  uint uVar3;\n  long *plVar4;\n  void *__s;\n  undefined8 uVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  long lVar8;\n  ulong uVar9;\n  long *plVar10;\n  uint uVar11;\n  ulong uVar12;\n  \n  lVar8 = param_1[6];\n  if ((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)) {\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    \n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }\n  uVar11 = 0;\n  if (param_2 == 0) {\n    lVar2 = param_1[0x16];\n  }\n  else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }\n  if (((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')) {\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }\n  uVar3 = 0xffffffff;\n  if (param_5 != '\0') {\n    uVar3 = uVar11;\n  }\n  uVar12 = param_3 + param_2;\n  if ((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)) {\n                    \n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }\n  plVar6 = (long *)param_1[0x16];\n  if ((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)) {\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }\n  plVar10 = (long *)param_1[0xd];\n  plVar1 = param_1 + 0xc;\n  uVar9 = uVar12 & 0xffffffffffffe000;\n  plVar4 = plVar1;\n  if (plVar10 != (long *)0x0) {\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }\n  }\n  if (param_5 == '\0') {\n    uVar11 = 0;\n  }\n  plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6);\n  return plVar6;\n}" (sized_type_specifier "long" (long "long")) (pointer_declarator "* FUN_0017ae70(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)" (* "*") (function_declarator "FUN_0017ae70(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)" (identifier "FUN_0017ae70") (parameter_list "(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,\n                   char param_6)" (( "(") (parameter_declaration "undefined8 *param_1" (type_identifier "undefined8") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "long param_2" (sized_type_specifier "long" (long "long")) (identifier "param_2")) (, ",") (parameter_declaration "long param_3" (sized_type_specifier "long" (long "long")) (identifier "param_3")) (, ",") (parameter_declaration "ulong param_4" (type_identifier "ulong") (identifier "param_4")) (, ",") (parameter_declaration "char param_5" (primitive_type "char") (identifier "param_5")) (, ",") (parameter_declaration "char param_6" (primitive_type "char") (identifier "param_6")) () ")")))) (compound_statement "{\n  long *plVar1;\n  long lVar2;\n  uint uVar3;\n  long *plVar4;\n  void *__s;\n  undefined8 uVar5;\n  long *plVar6;\n  undefined8 uVar7;\n  long lVar8;\n  ulong uVar9;\n  long *plVar10;\n  uint uVar11;\n  ulong uVar12;\n  \n  lVar8 = param_1[6];\n  if ((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)) {\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    \n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }\n  uVar11 = 0;\n  if (param_2 == 0) {\n    lVar2 = param_1[0x16];\n  }\n  else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }\n  if (((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')) {\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }\n  uVar3 = 0xffffffff;\n  if (param_5 != '\0') {\n    uVar3 = uVar11;\n  }\n  uVar12 = param_3 + param_2;\n  if ((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)) {\n                    \n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }\n  plVar6 = (long *)param_1[0x16];\n  if ((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)) {\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }\n  plVar10 = (long *)param_1[0xd];\n  plVar1 = param_1 + 0xc;\n  uVar9 = uVar12 & 0xffffffffffffe000;\n  plVar4 = plVar1;\n  if (plVar10 != (long *)0x0) {\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }\n  }\n  if (param_5 == '\0') {\n    uVar11 = 0;\n  }\n  plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6);\n  return plVar6;\n}" ({ "{") (declaration "long *plVar1;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar1" (* "*") (identifier "plVar1")) (; ";")) (declaration "long lVar2;" (sized_type_specifier "long" (long "long")) (identifier "lVar2") (; ";")) (declaration "uint uVar3;" (type_identifier "uint") (identifier "uVar3") (; ";")) (declaration "long *plVar4;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar4" (* "*") (identifier "plVar4")) (; ";")) (declaration "void *__s;" (primitive_type "void") (pointer_declarator "*__s" (* "*") (identifier "__s")) (; ";")) (declaration "undefined8 uVar5;" (type_identifier "undefined8") (identifier "uVar5") (; ";")) (declaration "long *plVar6;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar6" (* "*") (identifier "plVar6")) (; ";")) (declaration "undefined8 uVar7;" (type_identifier "undefined8") (identifier "uVar7") (; ";")) (declaration "long lVar8;" (sized_type_specifier "long" (long "long")) (identifier "lVar8") (; ";")) (declaration "ulong uVar9;" (type_identifier "ulong") (identifier "uVar9") (; ";")) (declaration "long *plVar10;" (sized_type_specifier "long" (long "long")) (pointer_declarator "*plVar10" (* "*") (identifier "plVar10")) (; ";")) (declaration "uint uVar11;" (type_identifier "uint") (identifier "uVar11") (; ";")) (declaration "ulong uVar12;" (type_identifier "ulong") (identifier "uVar12") (; ";")) (expression_statement "lVar8 = param_1[6];" (assignment_expression "lVar8 = param_1[6]" (identifier "lVar8") (= "=") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) (; ";")) (if_statement "if ((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)) {\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    \n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }" (if "if") (parenthesized_expression "((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4))" (( "(") (binary_expression "(lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)" (parenthesized_expression "(lVar8 < param_3)" (( "(") (binary_expression "lVar8 < param_3" (identifier "lVar8") (< "<") (identifier "param_3")) () ")")) (|| "||") (parenthesized_expression "((ulong)(lVar8 - param_3) < param_4)" (( "(") (binary_expression "(ulong)(lVar8 - param_3) < param_4" (call_expression "(ulong)(lVar8 - param_3)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(lVar8 - param_3)" (( "(") (binary_expression "lVar8 - param_3" (identifier "lVar8") (- "-") (identifier "param_3")) () ")"))) (< "<") (identifier "param_4")) () ")"))) () ")")) (compound_statement "{\n    uVar5 = *param_1;\n    uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );\n                    \n    FUN_001781e0(uVar7,uVar5,param_4,param_3);\n  }" ({ "{") (expression_statement "uVar5 = *param_1;" (assignment_expression "uVar5 = *param_1" (identifier "uVar5") (= "=") (pointer_expression "*param_1" (* "*") (identifier "param_1"))) (; ";")) (expression_statement "uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   );" (assignment_expression "uVar7 = gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   )" (identifier "uVar7") (= "=") (call_expression "gettext(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   )" (identifier "gettext") (argument_list "(\n                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"\n                   )" (( "(") (string_literal ""%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"" (" """) (string_content "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt") (" """)) () ")")))) (; ";")) (expression_statement "FUN_001781e0(uVar7,uVar5,param_4,param_3);" (call_expression "FUN_001781e0(uVar7,uVar5,param_4,param_3)" (identifier "FUN_001781e0") (argument_list "(uVar7,uVar5,param_4,param_3)" (( "(") (identifier "uVar7") (, ",") (identifier "uVar5") (, ",") (identifier "param_4") (, ",") (identifier "param_3") () ")"))) (; ";")) (} "}"))) (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (if_statement "if (param_2 == 0) {\n    lVar2 = param_1[0x16];\n  }\n  else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }" (if "if") (parenthesized_expression "(param_2 == 0)" (( "(") (binary_expression "param_2 == 0" (identifier "param_2") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    lVar2 = param_1[0x16];\n  }" ({ "{") (expression_statement "lVar2 = param_1[0x16];" (assignment_expression "lVar2 = param_1[0x16]" (identifier "lVar2") (= "=") (subscript_expression "param_1[0x16]" (identifier "param_1") ([ "[") (number_literal "0x16") (] "]"))) (; ";")) (} "}")) (else_clause "else {\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }" (else "else") (compound_statement "{\n    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }\n    uVar11 = uVar11 & (uint)param_2;\n    if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }\n    lVar2 = param_1[0x16];\n  }" ({ "{") (if_statement "if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {\n      uVar11 = 7;\n      uVar3 = 8;\n    }\n    else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }" (if "if") (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0)" (( "(") (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x18)" (* "*") (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x18)" (( "(") (binary_expression "PTR_DAT_0043e6b0 + 0x18" (identifier "PTR_DAT_0043e6b0") (+ "+") (number_literal "0x18")) () ")")))) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      uVar11 = 7;\n      uVar3 = 8;\n    }" ({ "{") (expression_statement "uVar11 = 7;" (assignment_expression "uVar11 = 7" (identifier "uVar11") (= "=") (number_literal "7")) (; ";")) (expression_statement "uVar3 = 8;" (assignment_expression "uVar3 = 8" (identifier "uVar3") (= "=") (number_literal "8")) (; ";")) (} "}")) (else_clause "else {\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }" (else "else") (compound_statement "{\n      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;\n      uVar11 = uVar3 - 1;\n    }" ({ "{") (expression_statement "uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;" (assignment_expression "uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3" (identifier "uVar3") (= "=") (binary_expression "**(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3" (pointer_expression "**(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8)" (* "*") (pointer_expression "*(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8)" (* "*") (cast_expression "(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8)" (( "(") (type_descriptor "uint **" (type_identifier "uint") (abstract_pointer_declarator "**" (* "*") (abstract_pointer_declarator "*" (* "*")))) () ")") (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8)" (( "(") (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x18)" (* "*") (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x18)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x18)" (( "(") (binary_expression "PTR_DAT_0043e6b0 + 0x18" (identifier "PTR_DAT_0043e6b0") (+ "+") (number_literal "0x18")) () ")")))) (+ "+") (number_literal "8")) () ")"))))) (>> ">>") (number_literal "3"))) (; ";")) (expression_statement "uVar11 = uVar3 - 1;" (assignment_expression "uVar11 = uVar3 - 1" (identifier "uVar11") (= "=") (binary_expression "uVar3 - 1" (identifier "uVar3") (- "-") (number_literal "1"))) (; ";")) (} "}")))) (expression_statement "uVar11 = uVar11 & (uint)param_2;" (assignment_expression "uVar11 = uVar11 & (uint)param_2" (identifier "uVar11") (= "=") (binary_expression "uVar11 & (uint)param_2" (identifier "uVar11") (& "&") (cast_expression "(uint)param_2" (( "(") (type_descriptor "uint" (type_identifier "uint")) () ")") (identifier "param_2")))) (; ";")) (if_statement "if (uVar11 != 0) {\n      uVar11 = uVar3 - uVar11;\n    }" (if "if") (parenthesized_expression "(uVar11 != 0)" (( "(") (binary_expression "uVar11 != 0" (identifier "uVar11") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n      uVar11 = uVar3 - uVar11;\n    }" ({ "{") (expression_statement "uVar11 = uVar3 - uVar11;" (assignment_expression "uVar11 = uVar3 - uVar11" (identifier "uVar11") (= "=") (binary_expression "uVar3 - uVar11" (identifier "uVar3") (- "-") (identifier "uVar11"))) (; ";")) (} "}"))) (expression_statement "lVar2 = param_1[0x16];" (assignment_expression "lVar2 = param_1[0x16]" (identifier "lVar2") (= "=") (subscript_expression "param_1[0x16]" (identifier "param_1") ([ "[") (number_literal "0x16") (] "]"))) (; ";")) (} "}")))) (if_statement "if (((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')) {\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }" (if "if") (parenthesized_expression "(((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0'))" (( "(") (binary_expression "((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&\n     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')" (parenthesized_expression "((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0))" (( "(") (binary_expression "(lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)" (parenthesized_expression "(lVar2 == 0)" (( "(") (binary_expression "lVar2 == 0" (identifier "lVar2") (== "==") (number_literal "0")) () ")")) (&& "&&") (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)" (( "(") (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x10)" (( "(") (binary_expression "PTR_DAT_0043e6b0 + 0x10" (identifier "PTR_DAT_0043e6b0") (+ "+") (number_literal "0x10")) () ")")))) (!= "!=") (number_literal "0")) () ")"))) () ")")) (&& "&&") (parenthesized_expression "(*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')" (( "(") (binary_expression "*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0'" (pointer_expression "*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819)" (* "*") (cast_expression "(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819)" (( "(") (binary_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819" (pointer_expression "*(long *)(PTR_DAT_0043e6b0 + 0x10)" (* "*") (cast_expression "(long *)(PTR_DAT_0043e6b0 + 0x10)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(PTR_DAT_0043e6b0 + 0x10)" (( "(") (binary_expression "PTR_DAT_0043e6b0 + 0x10" (identifier "PTR_DAT_0043e6b0") (+ "+") (number_literal "0x10")) () ")")))) (+ "+") (number_literal "0x3819")) () ")")))) (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")"))) () ")")) (compound_statement "{\n    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);\n    lVar8 = param_1[6];\n    param_1[0x16] = uVar5;\n  }" ({ "{") (expression_statement "uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);" (assignment_expression "uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6)" (identifier "uVar5") (= "=") (call_expression "FUN_0017acb0(param_1,0,lVar8,0,param_6)" (identifier "FUN_0017acb0") (argument_list "(param_1,0,lVar8,0,param_6)" (( "(") (identifier "param_1") (, ",") (number_literal "0") (, ",") (identifier "lVar8") (, ",") (number_literal "0") (, ",") (identifier "param_6") () ")")))) (; ";")) (expression_statement "lVar8 = param_1[6];" (assignment_expression "lVar8 = param_1[6]" (identifier "lVar8") (= "=") (subscript_expression "param_1[6]" (identifier "param_1") ([ "[") (number_literal "6") (] "]"))) (; ";")) (expression_statement "param_1[0x16] = uVar5;" (assignment_expression "param_1[0x16] = uVar5" (subscript_expression "param_1[0x16]" (identifier "param_1") ([ "[") (number_literal "0x16") (] "]")) (= "=") (identifier "uVar5")) (; ";")) (} "}"))) (expression_statement "uVar3 = 0xffffffff;" (assignment_expression "uVar3 = 0xffffffff" (identifier "uVar3") (= "=") (number_literal "0xffffffff")) (; ";")) (if_statement "if (param_5 != '\0') {\n    uVar3 = uVar11;\n  }" (if "if") (parenthesized_expression "(param_5 != '\0')" (( "(") (binary_expression "param_5 != '\0'" (identifier "param_5") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    uVar3 = uVar11;\n  }" ({ "{") (expression_statement "uVar3 = uVar11;" (assignment_expression "uVar3 = uVar11" (identifier "uVar3") (= "=") (identifier "uVar11")) (; ";")) (} "}"))) (expression_statement "uVar12 = param_3 + param_2;" (assignment_expression "uVar12 = param_3 + param_2" (identifier "uVar12") (= "=") (binary_expression "param_3 + param_2" (identifier "param_3") (+ "+") (identifier "param_2"))) (; ";")) (if_statement "if ((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)) {\n                    \n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }" (if "if") (parenthesized_expression "((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4))" (( "(") (binary_expression "(lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)" (parenthesized_expression "(lVar8 < (long)uVar12)" (( "(") (binary_expression "lVar8 < (long)uVar12" (identifier "lVar8") (< "<") (cast_expression "(long)uVar12" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar12"))) () ")")) (|| "||") (parenthesized_expression "(lVar8 - uVar12 < param_4)" (( "(") (binary_expression "lVar8 - uVar12 < param_4" (binary_expression "lVar8 - uVar12" (identifier "lVar8") (- "-") (identifier "uVar12")) (< "<") (identifier "param_4")) () ")"))) () ")")) (compound_statement "{\n                    \n    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");\n  }" ({ "{") (expression_statement "FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");" (call_expression "FUN_0017c650("../../gold/fileread.cc",0x150,"find_view")" (identifier "FUN_0017c650") (argument_list "("../../gold/fileread.cc",0x150,"find_view")" (( "(") (string_literal ""../../gold/fileread.cc"" (" """) (string_content "../../gold/fileread.cc") (" """)) (, ",") (number_literal "0x150") (, ",") (string_literal ""find_view"" (" """) (string_content "find_view") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "plVar6 = (long *)param_1[0x16];" (assignment_expression "plVar6 = (long *)param_1[0x16]" (identifier "plVar6") (= "=") (cast_expression "(long *)param_1[0x16]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0x16]" (identifier "param_1") ([ "[") (number_literal "0x16") (] "]")))) (; ";")) (if_statement "if ((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)) {\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }" (if "if") (parenthesized_expression "((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1))" (( "(") (binary_expression "(plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)" (parenthesized_expression "(plVar6 != (long *)0x0)" (( "(") (binary_expression "plVar6 != (long *)0x0" (identifier "plVar6") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (&& "&&") (parenthesized_expression "(0xfffffffd < uVar3 - 1)" (( "(") (binary_expression "0xfffffffd < uVar3 - 1" (number_literal "0xfffffffd") (< "<") (binary_expression "uVar3 - 1" (identifier "uVar3") (- "-") (number_literal "1"))) () ")"))) () ")")) (compound_statement "{\nLAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }\n    return plVar6;\n  }" ({ "{") (labeled_statement "LAB_0017b094:\n    if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }" (statement_identifier "LAB_0017b094") (: ":") (if_statement "if (param_6 != '\0') {\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }" (if "if") (parenthesized_expression "(param_6 != '\0')" (( "(") (binary_expression "param_6 != '\0'" (identifier "param_6") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n      *(undefined1 *)(plVar6 + 4) = 1;\n    }" ({ "{") (expression_statement "*(undefined1 *)(plVar6 + 4) = 1;" (assignment_expression "*(undefined1 *)(plVar6 + 4) = 1" (pointer_expression "*(undefined1 *)(plVar6 + 4)" (* "*") (cast_expression "(undefined1 *)(plVar6 + 4)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar6 + 4)" (( "(") (binary_expression "plVar6 + 4" (identifier "plVar6") (+ "+") (number_literal "4")) () ")")))) (= "=") (number_literal "1")) (; ";")) (} "}")))) (return_statement "return plVar6;" (return "return") (identifier "plVar6") (; ";")) (} "}"))) (expression_statement "plVar10 = (long *)param_1[0xd];" (assignment_expression "plVar10 = (long *)param_1[0xd]" (identifier "plVar10") (= "=") (cast_expression "(long *)param_1[0xd]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "param_1[0xd]" (identifier "param_1") ([ "[") (number_literal "0xd") (] "]")))) (; ";")) (expression_statement "plVar1 = param_1 + 0xc;" (assignment_expression "plVar1 = param_1 + 0xc" (identifier "plVar1") (= "=") (binary_expression "param_1 + 0xc" (identifier "param_1") (+ "+") (number_literal "0xc"))) (; ";")) (expression_statement "uVar9 = uVar12 & 0xffffffffffffe000;" (assignment_expression "uVar9 = uVar12 & 0xffffffffffffe000" (identifier "uVar9") (= "=") (binary_expression "uVar12 & 0xffffffffffffe000" (identifier "uVar12") (& "&") (number_literal "0xffffffffffffe000"))) (; ";")) (expression_statement "plVar4 = plVar1;" (assignment_expression "plVar4 = plVar1" (identifier "plVar4") (= "=") (identifier "plVar1")) (; ";")) (if_statement "if (plVar10 != (long *)0x0) {\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }\n  }" (if "if") (parenthesized_expression "(plVar10 != (long *)0x0)" (( "(") (binary_expression "plVar10 != (long *)0x0" (identifier "plVar10") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n    do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);\nLAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }\n  }" ({ "{") (do_statement "do {\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    } while (plVar6 != (long *)0x0);" (do "do") (compound_statement "{\n      while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }\n      plVar6 = (long *)plVar10[2];\n      plVar4 = plVar10;\n      plVar10 = plVar6;\n    }" ({ "{") (while_statement "while ((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }" (while "while") (parenthesized_expression "((plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0)))))" (( "(") (parenthesized_expression "(plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))" (( "(") (binary_expression "plVar10[4] <= (long)(uVar9 - 1) &&\n             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0)))" (binary_expression "plVar10[4] <= (long)(uVar9 - 1)" (subscript_expression "plVar10[4]" (identifier "plVar10") ([ "[") (number_literal "4") (] "]")) (<= "<=") (cast_expression "(long)(uVar9 - 1)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(uVar9 - 1)" (( "(") (binary_expression "uVar9 - 1" (identifier "uVar9") (- "-") (number_literal "1")) () ")")))) (&& "&&") (parenthesized_expression "((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0)))" (( "(") (parenthesized_expression "(uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))" (( "(") (binary_expression "uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0)" (binary_expression "uVar9 - 1 != plVar10[4]" (binary_expression "uVar9 - 1" (identifier "uVar9") (- "-") (number_literal "1")) (!= "!=") (subscript_expression "plVar10[4]" (identifier "plVar10") ([ "[") (number_literal "4") (] "]"))) (|| "||") (parenthesized_expression "((int)plVar10[5] == 0)" (( "(") (binary_expression "(int)plVar10[5] == 0" (cast_expression "(int)plVar10[5]" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (subscript_expression "plVar10[5]" (identifier "plVar10") ([ "[") (number_literal "5") (] "]"))) (== "==") (number_literal "0")) () ")"))) () ")")) () ")"))) () ")")) () ")")) (compound_statement "{\n        plVar10 = (long *)plVar10[3];\n        if (plVar10 == (long *)0x0) goto LAB_0017af56;\n      }" ({ "{") (expression_statement "plVar10 = (long *)plVar10[3];" (assignment_expression "plVar10 = (long *)plVar10[3]" (identifier "plVar10") (= "=") (cast_expression "(long *)plVar10[3]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar10[3]" (identifier "plVar10") ([ "[") (number_literal "3") (] "]")))) (; ";")) (if_statement "if (plVar10 == (long *)0x0) goto LAB_0017af56;" (if "if") (parenthesized_expression "(plVar10 == (long *)0x0)" (( "(") (binary_expression "plVar10 == (long *)0x0" (identifier "plVar10") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (goto_statement "goto LAB_0017af56;" (goto "goto") (statement_identifier "LAB_0017af56") (; ";"))) (} "}"))) (expression_statement "plVar6 = (long *)plVar10[2];" (assignment_expression "plVar6 = (long *)plVar10[2]" (identifier "plVar6") (= "=") (cast_expression "(long *)plVar10[2]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar10[2]" (identifier "plVar10") ([ "[") (number_literal "2") (] "]")))) (; ";")) (expression_statement "plVar4 = plVar10;" (assignment_expression "plVar4 = plVar10" (identifier "plVar4") (= "=") (identifier "plVar10")) (; ";")) (expression_statement "plVar10 = plVar6;" (assignment_expression "plVar10 = plVar6" (identifier "plVar10") (= "=") (identifier "plVar6")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(plVar6 != (long *)0x0)" (( "(") (binary_expression "plVar6 != (long *)0x0" (identifier "plVar6") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (; ";")) (labeled_statement "LAB_0017af56:\n    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }" (statement_identifier "LAB_0017af56") (: ":") (if_statement "if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }" (if "if") (parenthesized_expression "((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9))" (( "(") (binary_expression "(plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)" (parenthesized_expression "(plVar1 != plVar4)" (( "(") (binary_expression "plVar1 != plVar4" (identifier "plVar1") (!= "!=") (identifier "plVar4")) () ")")) (&& "&&") (parenthesized_expression "(plVar4[4] <= (long)uVar9)" (( "(") (binary_expression "plVar4[4] <= (long)uVar9" (subscript_expression "plVar4[4]" (identifier "plVar4") ([ "[") (number_literal "4") (] "]")) (<= "<=") (cast_expression "(long)uVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar9"))) () ")"))) () ")")) (compound_statement "{\n      do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));\n      if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }\n    }" ({ "{") (do_statement "do {\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));" (do "do") (compound_statement "{\n        plVar6 = (long *)plVar4[6];\n        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }\n        plVar4 = (long *)thunk_FUN_002dc020(plVar4);\n      }" ({ "{") (expression_statement "plVar6 = (long *)plVar4[6];" (assignment_expression "plVar6 = (long *)plVar4[6]" (identifier "plVar6") (= "=") (cast_expression "(long *)plVar4[6]" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (subscript_expression "plVar4[6]" (identifier "plVar4") ([ "[") (number_literal "6") (] "]")))) (; ";")) (if_statement "if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }" (if "if") (parenthesized_expression "((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1]))" (( "(") (binary_expression "(*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])" (parenthesized_expression "(*plVar6 <= (long)uVar12)" (( "(") (binary_expression "*plVar6 <= (long)uVar12" (pointer_expression "*plVar6" (* "*") (identifier "plVar6")) (<= "<=") (cast_expression "(long)uVar12" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar12"))) () ")")) (&& "&&") (parenthesized_expression "((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])" (( "(") (binary_expression "(long)(param_4 + uVar12) <= *plVar6 + plVar6[1]" (cast_expression "(long)(param_4 + uVar12)" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (parenthesized_expression "(param_4 + uVar12)" (( "(") (binary_expression "param_4 + uVar12" (identifier "param_4") (+ "+") (identifier "uVar12")) () ")"))) (<= "<=") (binary_expression "*plVar6 + plVar6[1]" (pointer_expression "*plVar6" (* "*") (identifier "plVar6")) (+ "+") (subscript_expression "plVar6[1]" (identifier "plVar6") ([ "[") (number_literal "1") (] "]")))) () ")"))) () ")")) (compound_statement "{\n          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }\n          if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }\n        }" ({ "{") (if_statement "if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }" (if "if") (parenthesized_expression "((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c)))" (( "(") (binary_expression "(uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))" (parenthesized_expression "(uVar3 == 0xffffffff)" (( "(") (binary_expression "uVar3 == 0xffffffff" (identifier "uVar3") (== "==") (number_literal "0xffffffff")) () ")")) (|| "||") (parenthesized_expression "(uVar3 == *(uint *)((long)plVar6 + 0x1c))" (( "(") (binary_expression "uVar3 == *(uint *)((long)plVar6 + 0x1c)" (identifier "uVar3") (== "==") (pointer_expression "*(uint *)((long)plVar6 + 0x1c)" (* "*") (cast_expression "(uint *)((long)plVar6 + 0x1c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar6 + 0x1c)" (( "(") (binary_expression "(long)plVar6 + 0x1c" (cast_expression "(long)plVar6" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar6")) (+ "+") (number_literal "0x1c")) () ")"))))) () ")"))) () ")")) (compound_statement "{\n            *(undefined1 *)(plVar6 + 5) = 1;\n            goto LAB_0017b094;\n          }" ({ "{") (expression_statement "*(undefined1 *)(plVar6 + 5) = 1;" (assignment_expression "*(undefined1 *)(plVar6 + 5) = 1" (pointer_expression "*(undefined1 *)(plVar6 + 5)" (* "*") (cast_expression "(undefined1 *)(plVar6 + 5)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar6 + 5)" (( "(") (binary_expression "plVar6 + 5" (identifier "plVar6") (+ "+") (number_literal "5")) () ")")))) (= "=") (number_literal "1")) (; ";")) (goto_statement "goto LAB_0017b094;" (goto "goto") (statement_identifier "LAB_0017b094") (; ";")) (} "}"))) (if_statement "if (plVar10 == (long *)0x0) {\n            plVar10 = plVar6;\n          }" (if "if") (parenthesized_expression "(plVar10 == (long *)0x0)" (( "(") (binary_expression "plVar10 == (long *)0x0" (identifier "plVar10") (== "==") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n            plVar10 = plVar6;\n          }" ({ "{") (expression_statement "plVar10 = plVar6;" (assignment_expression "plVar10 = plVar6" (identifier "plVar10") (= "=") (identifier "plVar6")) (; ";")) (} "}"))) (} "}"))) (expression_statement "plVar4 = (long *)thunk_FUN_002dc020(plVar4);" (assignment_expression "plVar4 = (long *)thunk_FUN_002dc020(plVar4)" (identifier "plVar4") (= "=") (cast_expression "(long *)thunk_FUN_002dc020(plVar4)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "thunk_FUN_002dc020(plVar4)" (identifier "thunk_FUN_002dc020") (argument_list "(plVar4)" (( "(") (identifier "plVar4") () ")"))))) (; ";")) (} "}")) (while "while") (parenthesized_expression "((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9))" (( "(") (binary_expression "(plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)" (parenthesized_expression "(plVar1 != plVar4)" (( "(") (binary_expression "plVar1 != plVar4" (identifier "plVar1") (!= "!=") (identifier "plVar4")) () ")")) (&& "&&") (parenthesized_expression "(plVar4[4] <= (long)uVar9)" (( "(") (binary_expression "plVar4[4] <= (long)uVar9" (subscript_expression "plVar4[4]" (identifier "plVar4") ([ "[") (number_literal "4") (] "]")) (<= "<=") (cast_expression "(long)uVar9" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "uVar9"))) () ")"))) () ")")) (; ";")) (if_statement "if (plVar10 != (long *)0x0) {\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }" (if "if") (parenthesized_expression "(plVar10 != (long *)0x0)" (( "(") (binary_expression "plVar10 != (long *)0x0" (identifier "plVar10") (!= "!=") (cast_expression "(long *)0x0" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n        if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }\n        uVar12 = (ulong)uVar11;\n        __s = malloc(plVar10[1] + uVar12);\n        if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }\n                    \n        FUN_0017c600();\n      }" ({ "{") (if_statement "if (param_5 == '\0') {\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }" (if "if") (parenthesized_expression "(param_5 == '\0')" (( "(") (binary_expression "param_5 == '\0'" (identifier "param_5") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n                    \n          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");\n        }" ({ "{") (expression_statement "FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");" (call_expression "FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view")" (identifier "FUN_0017c650") (argument_list "("../../gold/fileread.cc",0x24c,"find_or_make_view")" (( "(") (string_literal ""../../gold/fileread.cc"" (" """) (string_content "../../gold/fileread.cc") (" """)) (, ",") (number_literal "0x24c") (, ",") (string_literal ""find_or_make_view"" (" """) (string_content "find_or_make_view") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "uVar12 = (ulong)uVar11;" (assignment_expression "uVar12 = (ulong)uVar11" (identifier "uVar12") (= "=") (cast_expression "(ulong)uVar11" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "uVar11"))) (; ";")) (expression_statement "__s = malloc(plVar10[1] + uVar12);" (assignment_expression "__s = malloc(plVar10[1] + uVar12)" (identifier "__s") (= "=") (call_expression "malloc(plVar10[1] + uVar12)" (identifier "malloc") (argument_list "(plVar10[1] + uVar12)" (( "(") (binary_expression "plVar10[1] + uVar12" (subscript_expression "plVar10[1]" (identifier "plVar10") ([ "[") (number_literal "1") (] "]")) (+ "+") (identifier "uVar12")) () ")")))) (; ";")) (if_statement "if (__s != (void *)0x0) {\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }" (if "if") (parenthesized_expression "(__s != (void *)0x0)" (( "(") (binary_expression "__s != (void *)0x0" (identifier "__s") (!= "!=") (cast_expression "(void *)0x0" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) () ")")) (compound_statement "{\n          memset(__s,0,uVar12);\n          memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);\n          lVar8 = *plVar10;\n          lVar2 = plVar10[1];\n          plVar6 = (long *)FUN_002d9490(0x30);\n          *plVar6 = lVar8;\n          plVar6[1] = lVar2;\n          plVar6[2] = (long)__s;\n          *(undefined4 *)(plVar6 + 3) = 0;\n          *(uint *)((long)plVar6 + 0x1c) = uVar11;\n          *(undefined4 *)((long)plVar6 + 0x24) = 1;\n          *(char *)(plVar6 + 4) = param_6;\n          *(undefined1 *)(plVar6 + 5) = 1;\n          FUN_0017aa60(param_1,plVar6);\n          return plVar6;\n        }" ({ "{") (expression_statement "memset(__s,0,uVar12);" (call_expression "memset(__s,0,uVar12)" (identifier "memset") (argument_list "(__s,0,uVar12)" (( "(") (identifier "__s") (, ",") (number_literal "0") (, ",") (identifier "uVar12") () ")"))) (; ";")) (expression_statement "memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);" (call_expression "memcpy((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1])" (identifier "memcpy") (argument_list "((void *)((long)__s + uVar12),\n                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1])" (( "(") (cast_expression "(void *)((long)__s + uVar12)" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)__s + uVar12)" (( "(") (binary_expression "(long)__s + uVar12" (cast_expression "(long)__s" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__s")) (+ "+") (identifier "uVar12")) () ")"))) (, ",") (cast_expression "(void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2])" (( "(") (type_descriptor "void *" (primitive_type "void") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2])" (( "(") (binary_expression "(ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]" (binary_expression "(ulong)*(uint *)((long)plVar10 + 0x1c)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (* "*") (cast_expression "(uint *)((long)plVar10 + 0x1c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar10 + 0x1c)" (( "(") (binary_expression "(long)plVar10 + 0x1c" (cast_expression "(long)plVar10" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar10")) (+ "+") (number_literal "0x1c")) () ")")))) (+ "+") (subscript_expression "plVar10[2]" (identifier "plVar10") ([ "[") (number_literal "2") (] "]"))) () ")"))) (, ",") (subscript_expression "plVar10[1]" (identifier "plVar10") ([ "[") (number_literal "1") (] "]")) () ")"))) (; ";")) (expression_statement "lVar8 = *plVar10;" (assignment_expression "lVar8 = *plVar10" (identifier "lVar8") (= "=") (pointer_expression "*plVar10" (* "*") (identifier "plVar10"))) (; ";")) (expression_statement "lVar2 = plVar10[1];" (assignment_expression "lVar2 = plVar10[1]" (identifier "lVar2") (= "=") (subscript_expression "plVar10[1]" (identifier "plVar10") ([ "[") (number_literal "1") (] "]"))) (; ";")) (expression_statement "plVar6 = (long *)FUN_002d9490(0x30);" (assignment_expression "plVar6 = (long *)FUN_002d9490(0x30)" (identifier "plVar6") (= "=") (cast_expression "(long *)FUN_002d9490(0x30)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_002d9490(0x30)" (identifier "FUN_002d9490") (argument_list "(0x30)" (( "(") (number_literal "0x30") () ")"))))) (; ";")) (expression_statement "*plVar6 = lVar8;" (assignment_expression "*plVar6 = lVar8" (pointer_expression "*plVar6" (* "*") (identifier "plVar6")) (= "=") (identifier "lVar8")) (; ";")) (expression_statement "plVar6[1] = lVar2;" (assignment_expression "plVar6[1] = lVar2" (subscript_expression "plVar6[1]" (identifier "plVar6") ([ "[") (number_literal "1") (] "]")) (= "=") (identifier "lVar2")) (; ";")) (expression_statement "plVar6[2] = (long)__s;" (assignment_expression "plVar6[2] = (long)__s" (subscript_expression "plVar6[2]" (identifier "plVar6") ([ "[") (number_literal "2") (] "]")) (= "=") (cast_expression "(long)__s" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "__s"))) (; ";")) (expression_statement "*(undefined4 *)(plVar6 + 3) = 0;" (assignment_expression "*(undefined4 *)(plVar6 + 3) = 0" (pointer_expression "*(undefined4 *)(plVar6 + 3)" (* "*") (cast_expression "(undefined4 *)(plVar6 + 3)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar6 + 3)" (( "(") (binary_expression "plVar6 + 3" (identifier "plVar6") (+ "+") (number_literal "3")) () ")")))) (= "=") (number_literal "0")) (; ";")) (expression_statement "*(uint *)((long)plVar6 + 0x1c) = uVar11;" (assignment_expression "*(uint *)((long)plVar6 + 0x1c) = uVar11" (pointer_expression "*(uint *)((long)plVar6 + 0x1c)" (* "*") (cast_expression "(uint *)((long)plVar6 + 0x1c)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar6 + 0x1c)" (( "(") (binary_expression "(long)plVar6 + 0x1c" (cast_expression "(long)plVar6" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar6")) (+ "+") (number_literal "0x1c")) () ")")))) (= "=") (identifier "uVar11")) (; ";")) (expression_statement "*(undefined4 *)((long)plVar6 + 0x24) = 1;" (assignment_expression "*(undefined4 *)((long)plVar6 + 0x24) = 1" (pointer_expression "*(undefined4 *)((long)plVar6 + 0x24)" (* "*") (cast_expression "(undefined4 *)((long)plVar6 + 0x24)" (( "(") (type_descriptor "undefined4 *" (type_identifier "undefined4") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "((long)plVar6 + 0x24)" (( "(") (binary_expression "(long)plVar6 + 0x24" (cast_expression "(long)plVar6" (( "(") (type_descriptor "long" (sized_type_specifier "long" (long "long"))) () ")") (identifier "plVar6")) (+ "+") (number_literal "0x24")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "*(char *)(plVar6 + 4) = param_6;" (assignment_expression "*(char *)(plVar6 + 4) = param_6" (pointer_expression "*(char *)(plVar6 + 4)" (* "*") (cast_expression "(char *)(plVar6 + 4)" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar6 + 4)" (( "(") (binary_expression "plVar6 + 4" (identifier "plVar6") (+ "+") (number_literal "4")) () ")")))) (= "=") (identifier "param_6")) (; ";")) (expression_statement "*(undefined1 *)(plVar6 + 5) = 1;" (assignment_expression "*(undefined1 *)(plVar6 + 5) = 1" (pointer_expression "*(undefined1 *)(plVar6 + 5)" (* "*") (cast_expression "(undefined1 *)(plVar6 + 5)" (( "(") (type_descriptor "undefined1 *" (type_identifier "undefined1") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(plVar6 + 5)" (( "(") (binary_expression "plVar6 + 5" (identifier "plVar6") (+ "+") (number_literal "5")) () ")")))) (= "=") (number_literal "1")) (; ";")) (expression_statement "FUN_0017aa60(param_1,plVar6);" (call_expression "FUN_0017aa60(param_1,plVar6)" (identifier "FUN_0017aa60") (argument_list "(param_1,plVar6)" (( "(") (identifier "param_1") (, ",") (identifier "plVar6") () ")"))) (; ";")) (return_statement "return plVar6;" (return "return") (identifier "plVar6") (; ";")) (} "}"))) (expression_statement "FUN_0017c600();" (call_expression "FUN_0017c600()" (identifier "FUN_0017c600") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (} "}")))) (} "}"))) (if_statement "if (param_5 == '\0') {\n    uVar11 = 0;\n  }" (if "if") (parenthesized_expression "(param_5 == '\0')" (( "(") (binary_expression "param_5 == '\0'" (identifier "param_5") (== "==") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (compound_statement "{\n    uVar11 = 0;\n  }" ({ "{") (expression_statement "uVar11 = 0;" (assignment_expression "uVar11 = 0" (identifier "uVar11") (= "=") (number_literal "0")) (; ";")) (} "}"))) (expression_statement "plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6);" (assignment_expression "plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6)" (identifier "plVar6") (= "=") (cast_expression "(long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6)" (identifier "FUN_0017acb0") (argument_list "(param_1,uVar12,param_4,uVar11,param_6)" (( "(") (identifier "param_1") (, ",") (identifier "uVar12") (, ",") (identifier "param_4") (, ",") (identifier "uVar11") (, ",") (identifier "param_6") () ")"))))) (; ";")) (return_statement "return plVar6;" (return "return") (identifier "plVar6") (; ";")) (} "}")))

/* WARNING: Type propagation algorithm not settling */
/* WARNING: Enum "DT": Some values do not have unique names */
/* DWARF original prototype: View * find_or_make_view(File_read * this, off_t offset, off_t start,
   section_size_type size, bool aligned, bool cache) */

type_6 * __thiscall
gold::File_read::find_or_make_view
          (File_read *this,type_2 var_6,type_2 var_1,type_8 var_3,bool aligned,bool cache)

{
  type_1 *p_Var1;
  long var_14;
  long var_17;
  long var_19;
  type_2 oVar5;
  type_3 p_Var6;
  type_4 pcVar7;
  type_5 var_7;
  type_6 *var_16;
  type_7 *var_21;
  type_6 *var_9;
  char *format;
  type_8 var_2;
  type_9 var_15;
  type_6 *var_13;
  type_5 var_8;
  type_9 var_11;
  
  var_2 = this->size_;
  if (((long)var_2 < var_1) || (var_2 - var_1 < var_3)) {
    pcVar7 = (this->name_)._M_dataplus._M_p;
    format = (char *)var_4(
                            "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"
                            );
                    /* WARNING: Subroutine does not return */
    var_5(format,pcVar7,var_3,var_1);
  }
  var_8 = 0;
  if (var_6 == 0) {
    var_9 = this->whole_file_view_;
  }
  else {
    if (parameters->target_ == (type_10 *)0x0) {
      var_8 = 7;
      var_7 = 8;
    }
    else {
      var_7 = **(type_5 **)(parameters->target_ + 8) >> 3;
      var_8 = var_7 - 1;
    }
    var_8 = var_8 & (type_5)var_6;
    if (var_8 != 0) {
      var_8 = var_7 - var_8;
    }
    var_9 = this->whole_file_view_;
  }
  if (((var_9 == (type_6 *)0x0) && (parameters->options_ != (type_11 *)0x0)) &&
     ((parameters->options_->map_whole_files_).value != false)) {
    var_9 = var_10(this,0,var_2,0,cache);
    var_2 = this->size_;
    this->whole_file_view_ = var_9;
  }
  var_7 = 0xffffffff;
  if (aligned) {
    var_7 = var_8;
  }
  var_11 = var_1 + var_6;
  if (((long)var_2 < (long)var_11) || (var_2 - var_11 < var_3)) {
                    /* WARNING: Subroutine does not return */
    var_12("../../gold/fileread.cc",0x150,"find_view");
  }
  var_9 = this->whole_file_view_;
  if ((var_9 != (type_6 *)0x0) && (0xfffffffd < var_7 - 1)) {
LAB_0017b094:
    if (cache) {
      var_9->cache_ = true;
    }
    return var_9;
  }
  var_13 = (type_6 *)(this->views_)._M_t._M_impl.super__Rb_tree_header._M_header._M_parent;
  p_Var1 = &(this->views_)._M_t._M_impl.super__Rb_tree_header;
  var_15 = var_11 & 0xffffffffffffe000;
  var_16 = (type_6 *)p_Var1;
  if (var_13 != (type_6 *)0x0) {
    do {
      while ((var_14._0_1_ = var_13->cache_, var_14._1_3_ = *(type_12 *)&var_13->field_0x21,
             var_14._4_4_ = var_13->data_ownership_, var_14 <= (long)(var_15 - 1) &&
             ((var_15 - 1 != var_14 || (*(int *)&var_13->accessed_ == 0))))) {
        var_13 = *(type_6 **)&var_13->lock_count_;
        if (var_13 == (type_6 *)0x0) goto LAB_0017af56;
      }
      var_9 = (type_6 *)var_13->data_;
      var_16 = var_13;
      var_13 = var_9;
    } while (var_9 != (type_6 *)0x0);
LAB_0017af56:
    if (((type_6 *)p_Var1 != var_16) &&
       (var_17._0_1_ = var_16->cache_, var_17._1_3_ = *(type_12 *)&var_16->field_0x21,
       var_17._4_4_ = var_16->data_ownership_, var_17 <= (long)var_15)) {
      do {
        var_9 = (type_6 *)var_16[1].start_;
        if ((var_9->start_ <= (long)var_11) &&
           ((long)(var_3 + var_11) <= (long)&((type_3)var_9->size_)->_M_color + var_9->start_)
           ) {
          if ((var_7 == 0xffffffff) || (var_7 == var_9->byteshift_)) {
            var_9->accessed_ = true;
            goto LAB_0017b094;
          }
          if (var_13 == (type_6 *)0x0) {
            var_13 = var_9;
          }
        }
        var_16 = (type_6 *)std::var_18((type_13 *)var_16);
      } while (((type_6 *)p_Var1 != var_16) &&
              (var_19._0_1_ = var_16->cache_, var_19._1_3_ = *(type_12 *)&var_16->field_0x21,
              var_19._4_4_ = var_16->data_ownership_, var_19 <= (long)var_15));
      if (var_13 != (type_6 *)0x0) {
        if (!aligned) {
                    /* WARNING: Subroutine does not return */
          var_12("../../gold/fileread.cc",0x24c,"find_or_make_view");
        }
        var_11 = (type_9)var_8;
        var_21 = (type_7 *)var_20((long)&((type_3)var_13->size_)->_M_color + var_11);
        if (var_21 != (type_7 *)0x0) {
          var_22(var_21,0,var_11);
          var_23(var_21 + var_11,
                 (void *)((long)&((type_3)var_13->data_)->_M_color + (type_9)var_13->byteshift_)
                 ,(size_t)var_13->size_);
          oVar5 = var_13->start_;
          p_Var6 = (type_3)var_13->size_;
          var_9 = (type_6 *)var_24(0x30);
          var_9->start_ = oVar5;
          var_9->size_ = (type_8)p_Var6;
          var_9->data_ = var_21;
          var_9->lock_count_ = 0;
          var_9->byteshift_ = var_8;
          var_9->data_ownership_ = DATA_ALLOCATED_ARRAY;
          var_9->cache_ = cache;
          var_9->accessed_ = true;
          var_25(this,var_9);
          return var_9;
        }
                    /* WARNING: Subroutine does not return */
        var_26();
      }
    }
  }
  if (!aligned) {
    var_8 = 0;
  }
  var_9 = var_10(this,var_11,var_3,var_8,cache);
  return var_9;
}


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

long * MASKED(undefined8 *param_1,long param_2,long param_3,ulong param_4,char param_5,
                   char param_6)

{
  long *plVar1;
  long lVar2;
  uint uVar3;
  long *plVar4;
  void *__s;
  undefined8 uVar5;
  long *plVar6;
  undefined8 uVar7;
  long lVar8;
  ulong uVar9;
  long *plVar10;
  uint uVar11;
  ulong uVar12;
  
  lVar8 = param_1[6];
  if ((lVar8 < param_3) || ((ulong)(lVar8 - param_3) < param_4)) {
    uVar5 = *param_1;
    uVar7 = gettext(
                   "%s: attempt to map %lld bytes at offset %lld exceeds size of file; the file may be corrupt"
                   );
                    /* WARNING: Subroutine does not return */
    FUN_001781e0(uVar7,uVar5,param_4,param_3);
  }
  uVar11 = 0;
  if (param_2 == 0) {
    lVar2 = param_1[0x16];
  }
  else {
    if (*(long *)(PTR_DAT_0043e6b0 + 0x18) == 0) {
      uVar11 = 7;
      uVar3 = 8;
    }
    else {
      uVar3 = **(uint **)(*(long *)(PTR_DAT_0043e6b0 + 0x18) + 8) >> 3;
      uVar11 = uVar3 - 1;
    }
    uVar11 = uVar11 & (uint)param_2;
    if (uVar11 != 0) {
      uVar11 = uVar3 - uVar11;
    }
    lVar2 = param_1[0x16];
  }
  if (((lVar2 == 0) && (*(long *)(PTR_DAT_0043e6b0 + 0x10) != 0)) &&
     (*(char *)(*(long *)(PTR_DAT_0043e6b0 + 0x10) + 0x3819) != '\0')) {
    uVar5 = FUN_0017acb0(param_1,0,lVar8,0,param_6);
    lVar8 = param_1[6];
    param_1[0x16] = uVar5;
  }
  uVar3 = 0xffffffff;
  if (param_5 != '\0') {
    uVar3 = uVar11;
  }
  uVar12 = param_3 + param_2;
  if ((lVar8 < (long)uVar12) || (lVar8 - uVar12 < param_4)) {
                    /* WARNING: Subroutine does not return */
    FUN_0017c650("../../gold/fileread.cc",0x150,"find_view");
  }
  plVar6 = (long *)param_1[0x16];
  if ((plVar6 != (long *)0x0) && (0xfffffffd < uVar3 - 1)) {
LAB_0017b094:
    if (param_6 != '\0') {
      *(undefined1 *)(plVar6 + 4) = 1;
    }
    return plVar6;
  }
  plVar10 = (long *)param_1[0xd];
  plVar1 = param_1 + 0xc;
  uVar9 = uVar12 & 0xffffffffffffe000;
  plVar4 = plVar1;
  if (plVar10 != (long *)0x0) {
    do {
      while ((plVar10[4] <= (long)(uVar9 - 1) &&
             ((uVar9 - 1 != plVar10[4] || ((int)plVar10[5] == 0))))) {
        plVar10 = (long *)plVar10[3];
        if (plVar10 == (long *)0x0) goto LAB_0017af56;
      }
      plVar6 = (long *)plVar10[2];
      plVar4 = plVar10;
      plVar10 = plVar6;
    } while (plVar6 != (long *)0x0);
LAB_0017af56:
    if ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9)) {
      do {
        plVar6 = (long *)plVar4[6];
        if ((*plVar6 <= (long)uVar12) && ((long)(param_4 + uVar12) <= *plVar6 + plVar6[1])) {
          if ((uVar3 == 0xffffffff) || (uVar3 == *(uint *)((long)plVar6 + 0x1c))) {
            *(undefined1 *)(plVar6 + 5) = 1;
            goto LAB_0017b094;
          }
          if (plVar10 == (long *)0x0) {
            plVar10 = plVar6;
          }
        }
        plVar4 = (long *)thunk_FUN_002dc020(plVar4);
      } while ((plVar1 != plVar4) && (plVar4[4] <= (long)uVar9));
      if (plVar10 != (long *)0x0) {
        if (param_5 == '\0') {
                    /* WARNING: Subroutine does not return */
          FUN_0017c650("../../gold/fileread.cc",0x24c,"find_or_make_view");
        }
        uVar12 = (ulong)uVar11;
        __s = malloc(plVar10[1] + uVar12);
        if (__s != (void *)0x0) {
          memset(__s,0,uVar12);
          memcpy((void *)((long)__s + uVar12),
                 (void *)((ulong)*(uint *)((long)plVar10 + 0x1c) + plVar10[2]),plVar10[1]);
          lVar8 = *plVar10;
          lVar2 = plVar10[1];
          plVar6 = (long *)FUN_002d9490(0x30);
          *plVar6 = lVar8;
          plVar6[1] = lVar2;
          plVar6[2] = (long)__s;
          *(undefined4 *)(plVar6 + 3) = 0;
          *(uint *)((long)plVar6 + 0x1c) = uVar11;
          *(undefined4 *)((long)plVar6 + 0x24) = 1;
          *(char *)(plVar6 + 4) = param_6;
          *(undefined1 *)(plVar6 + 5) = 1;
          FUN_0017aa60(param_1,plVar6);
          return plVar6;
        }
                    /* WARNING: Subroutine does not return */
        FUN_0017c600();
      }
    }
  }
  if (param_5 == '\0') {
    uVar11 = 0;
  }
  plVar6 = (long *)FUN_0017acb0(param_1,uVar12,param_4,uVar11,param_6);
  return plVar6;
}

