### EXPORT FUNC 180001000 (105 bytes) name=FUN_180001000

undefined8 * FUN_180001000(undefined8 *param_1,uint param_2)

{
  *param_1 = CAccumulator::vftable;
  if ((LPVOID)param_1[1] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[1]);
    param_1[1] = 0;
  }
  param_1[2] = 0;
  if ((LPVOID)param_1[3] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[3]);
    param_1[3] = 0;
  }
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180001070 (77 bytes) name=FUN_180001070

void FUN_180001070(undefined8 *param_1)

{
  *param_1 = CAccumulator::vftable;
  if ((LPVOID)param_1[1] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[1]);
    param_1[1] = 0;
  }
  param_1[2] = 0;
  if ((LPVOID)param_1[3] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[3]);
    param_1[3] = 0;
  }
  return;
}


==================================================================

### EXPORT FUNC 1800010c0 (221 bytes) name=FUN_1800010c0

undefined8 FUN_1800010c0(longlong param_1,uint param_2,uint param_3)

{
  undefined1 auVar1 [16];
  size_t sVar2;
  LPVOID pvVar3;
  
  *(undefined4 *)(param_1 + 0x2c) = 0;
  if (*(LPVOID *)(param_1 + 8) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 8));
    *(undefined8 *)(param_1 + 8) = 0;
  }
  *(undefined8 *)(param_1 + 0x10) = 0;
  if (*(LPVOID *)(param_1 + 0x18) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x18));
    *(undefined8 *)(param_1 + 0x18) = 0;
  }
  if (((param_2 != 0) && (param_3 < 0x41)) && ((param_3 & param_3 - 1) == 0)) {
    *(undefined4 *)(param_1 + 0x20) = 0;
    *(uint *)(param_1 + 0x24) = param_2;
    *(uint *)(param_1 + 0x28) = param_3;
    auVar1 = ZEXT816(4) * ZEXT416(param_2 >> 1);
    sVar2 = auVar1._0_8_;
    if (auVar1._8_8_ != 0) {
      sVar2 = 0xffffffffffffffff;
    }
    pvVar3 = thunk_FUN_18001eb74(sVar2);
    *(LPVOID *)(param_1 + 8) = pvVar3;
    *(LPVOID *)(param_1 + 0x10) = pvVar3;
    if (pvVar3 != (LPVOID)0x0) {
      *(LPVOID *)(param_1 + 0x10) = pvVar3;
      if (2 < param_3) {
        sVar2 = SUB168(ZEXT816(4) * ZEXT416(param_2),0);
        if (SUB168(ZEXT816(4) * ZEXT416(param_2),8) != 0) {
          sVar2 = 0xffffffffffffffff;
        }
        pvVar3 = thunk_FUN_18001eb74(sVar2);
        *(LPVOID *)(param_1 + 0x18) = pvVar3;
        if (pvVar3 == (LPVOID)0x0) {
          return 0;
        }
      }
      *(undefined4 *)(param_1 + 0x2c) = 1;
      return 1;
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 1800011a0 (489 bytes) name=FUN_1800011a0

undefined8 FUN_1800011a0(longlong param_1,ushort *param_2)

{
  ushort uVar1;
  int iVar2;
  uint *puVar3;
  undefined2 *puVar4;
  ushort *puVar5;
  sbyte sVar6;
  uint uVar7;
  int iVar8;
  
  if (*(int *)(param_1 + 0x2c) == 0) {
    return 0;
  }
  *(int *)(param_1 + 0x20) = *(int *)(param_1 + 0x20) + 1;
  iVar8 = *(int *)(param_1 + 0x28);
  iVar2 = *(int *)(param_1 + 0x20);
  if (iVar8 != 1) {
    if (iVar8 != 2) {
      puVar3 = *(uint **)(param_1 + 0x18);
      if (iVar2 == 1) {
        for (uVar7 = *(uint *)(param_1 + 0x24) >> 2; uVar7 != 0; uVar7 = uVar7 - 1) {
          *puVar3 = (uint)*param_2;
          puVar3[1] = (uint)param_2[1];
          puVar3[2] = (uint)param_2[2];
          puVar3[3] = (uint)param_2[3];
          puVar3 = puVar3 + 4;
          param_2 = param_2 + 4;
        }
      }
      else if (iVar2 == iVar8) {
        if (iVar8 == 4) {
          sVar6 = 2;
        }
        else if (iVar8 == 8) {
          sVar6 = 3;
        }
        else if (iVar8 == 0x10) {
          sVar6 = 4;
        }
        else if (iVar8 == 0x20) {
          sVar6 = 5;
        }
        else {
          sVar6 = 0;
          if (iVar8 == 0x40) {
            sVar6 = 6;
          }
        }
        puVar4 = *(undefined2 **)(param_1 + 0x10);
        for (iVar8 = *(int *)(param_1 + 0x24); iVar8 != 0; iVar8 = iVar8 + -1) {
          uVar1 = *param_2;
          param_2 = param_2 + 1;
          uVar7 = *puVar3;
          *puVar4 = (short)(uVar1 + uVar7 >> sVar6);
          *puVar3 = uVar1 + uVar7;
          puVar3 = puVar3 + 1;
          puVar4 = puVar4 + 1;
        }
      }
      else {
        for (uVar7 = *(uint *)(param_1 + 0x24) >> 2; uVar7 != 0; uVar7 = uVar7 - 1) {
          *puVar3 = *puVar3 + (uint)*param_2;
          puVar3[1] = puVar3[1] + (uint)param_2[1];
          puVar3[2] = puVar3[2] + (uint)param_2[2];
          puVar3[3] = puVar3[3] + (uint)param_2[3];
          puVar3 = puVar3 + 4;
          param_2 = param_2 + 4;
        }
      }
      goto LAB_180001367;
    }
    if (iVar2 != 1) {
      puVar5 = *(ushort **)(param_1 + 0x10);
      for (uVar7 = *(uint *)(param_1 + 0x24) >> 2; uVar7 != 0; uVar7 = uVar7 - 1) {
        *puVar5 = (ushort)((int)((uint)*param_2 + (uint)*puVar5) >> 1);
        puVar5[1] = (ushort)((int)((uint)param_2[1] + (uint)puVar5[1]) >> 1);
        puVar5[2] = (ushort)((int)((uint)param_2[2] + (uint)puVar5[2]) >> 1);
        puVar5[3] = (ushort)((int)((uint)param_2[3] + (uint)puVar5[3]) >> 1);
        puVar5 = puVar5 + 4;
        param_2 = param_2 + 4;
      }
      goto LAB_180001367;
    }
  }
  memcpy(*(void **)(param_1 + 0x10),param_2,(ulonglong)*(uint *)(param_1 + 0x24) * 2);
LAB_180001367:
  if (*(int *)(param_1 + 0x20) != *(int *)(param_1 + 0x28)) {
    return 0;
  }
  *(undefined4 *)(param_1 + 0x20) = 0;
  return 1;
}


==================================================================

### EXPORT FUNC 180001390 (6 bytes) name=FUN_180001390

undefined8 FUN_180001390(void)

{
  return 1;
}


==================================================================

### EXPORT FUNC 1800013a0 (27 bytes) name=FUN_1800013a0

undefined8 FUN_1800013a0(longlong param_1)

{
  InitializeCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x10));
  return 1;
}


==================================================================

### EXPORT FUNC 1800013c0 (33 bytes) name=FUN_1800013c0

bool FUN_1800013c0(undefined8 *param_1)

{
  return *(int *)*param_1 == -0x3fffffe9;
}


==================================================================

### EXPORT FUNC 1800013f0 (71 bytes) name=FUN_1800013f0

CSyncObject * FUN_1800013f0(CSyncObject *param_1,uint param_2)

{
  *(undefined ***)param_1 = CCriticalSection::vftable;
  DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x10));
  CSyncObject::~CSyncObject(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180001440 (43 bytes) name=FUN_180001440

void FUN_180001440(CSyncObject *param_1)

{
  *(undefined ***)param_1 = CCriticalSection::vftable;
  DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x10));
  CSyncObject::~CSyncObject(param_1);
  return;
}


==================================================================

### EXPORT FUNC 180001470 (27 bytes) name=FUN_180001470

undefined8 FUN_180001470(longlong param_1)

{
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x10));
  return 1;
}


==================================================================

### EXPORT FUNC 1800014a0 (33 bytes) name=FUN_1800014a0

bool FUN_1800014a0(undefined8 *param_1)

{
  return *(int *)*param_1 == -0x3fffffe9;
}


==================================================================

### EXPORT FUNC 1800014d0 (5 bytes) name=thunk_FUN_180001470

undefined8 thunk_FUN_180001470(longlong param_1)

{
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x10));
  return 1;
}


==================================================================

### EXPORT FUNC 1800014e0 (24 bytes) name=FUN_1800014e0

undefined8 FUN_1800014e0(longlong param_1)

{
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x10));
  return 1;
}


==================================================================

### EXPORT FUNC 180001500 (260 bytes) name=FUN_180001500

undefined8 * FUN_180001500(undefined8 *param_1)

{
  undefined8 *puVar1;
  LSTATUS LVar2;
  undefined8 uVar3;
  undefined8 *local_res8;
  DWORD local_res10 [2];
  HKEY local_res18;
  
  *param_1 = CBmp2Avi::vftable;
  puVar1 = param_1 + 1;
  local_res8 = puVar1;
  FUN_18001ec00(puVar1);
  *puVar1 = CCriticalSection::vftable;
  uVar3 = FUN_1800013a0((longlong)puVar1);
  if ((int)uVar3 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed6c();
  }
  *(undefined4 *)(param_1 + 8) = 0;
  *(undefined4 *)((longlong)param_1 + 0x44) = 0;
  *(undefined4 *)(param_1 + 0xc) = 0;
  *(undefined4 *)((longlong)param_1 + 100) = 0;
  param_1[9] = 0;
  param_1[0xb] = 0;
  param_1[10] = 0;
  LVar2 = RegCreateKeyExW((HKEY)0xffffffff80000001,L"Software\\GNU\\Xvid",0,(LPWSTR)0x0,0,0xf003f,
                          (LPSECURITY_ATTRIBUTES)0x0,&local_res18,local_res10);
  if (LVar2 == 0) {
    local_res8 = (undefined8 *)((ulonglong)local_res8 & 0xffffffff00000000);
    RegSetValueExW(local_res18,L"display_status",0,4,(BYTE *)&local_res8,4);
    RegCloseKey(local_res18);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180001610 (24 bytes) name=Unwind@180001610

void Unwind_180001610(undefined8 param_1,longlong param_2)

{
  CSyncObject::~CSyncObject(*(CSyncObject **)(param_2 + 0x70));
  return;
}


==================================================================

### EXPORT FUNC 180001630 (217 bytes) name=FUN_180001630

undefined8 * FUN_180001630(undefined8 *param_1,uint param_2)

{
  *param_1 = CBmp2Avi::vftable;
  if (*(int *)((longlong)param_1 + 0x44) != 0) {
    FUN_180001470((longlong)(param_1 + 1));
    *(undefined4 *)(param_1 + 8) = 0;
    *(undefined4 *)((longlong)param_1 + 0x44) = 0;
    if (param_1[10] != 0) {
      AVIStreamRelease();
      param_1[10] = 0;
    }
    if (param_1[9] != 0) {
      AVIStreamRelease();
      param_1[9] = 0;
    }
    if (param_1[0xb] != 0) {
      AVIFileRelease();
      param_1[0xb] = 0;
    }
    AVIFileExit();
    (**(code **)(param_1[1] + 0x28))(param_1 + 1);
  }
  param_1[1] = CCriticalSection::vftable;
  DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 3));
  CSyncObject::~CSyncObject((CSyncObject *)(param_1 + 1));
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180001710 (28 bytes) name=Unwind@180001710

void Unwind_180001710(undefined8 param_1,longlong param_2)

{
  FUN_180001440((CSyncObject *)(*(longlong *)(param_2 + 0x40) + 8));
  return;
}


==================================================================

### EXPORT FUNC 180001730 (1311 bytes) name=FUN_180001730

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
FUN_180001730(longlong param_1,undefined8 param_2,uint param_3,undefined4 param_4,void *param_5)

{
  short sVar1;
  int yBottom;
  int iVar2;
  longlong lVar3;
  undefined8 uVar4;
  ulonglong uVar5;
  ulonglong uVar6;
  char *pcVar7;
  char *pcVar8;
  undefined1 uVar9;
  undefined1 auStackY_508 [32];
  uint local_4d8;
  undefined4 local_4d0;
  undefined4 uStack_4cc;
  ulonglong local_4c8;
  undefined8 local_4c0;
  undefined8 local_4b8;
  undefined8 local_4b0;
  undefined8 local_4a8;
  undefined8 local_4a0;
  void *local_498;
  undefined1 local_490 [14];
  short sStack_482;
  undefined8 local_458;
  undefined4 local_444;
  uint local_440;
  int local_430;
  tagRECT local_424;
  short asStack_40c [66];
  undefined1 local_388 [4];
  undefined4 local_384;
  undefined4 local_380;
  WCHAR local_370 [276];
  CHAR local_148 [256];
  ulonglong local_48;
  
  local_48 = DAT_18006cea0 ^ (ulonglong)auStackY_508;
  *(undefined4 *)(param_1 + 0x60) = param_4;
  if (param_3 == 0) {
    param_3 = 1;
  }
  local_498 = param_5;
  FUN_180001470(param_1 + 8);
  AVIFileInit();
  iVar2 = AVIFileOpenW(param_1 + 0x58,param_2,0x1001,0);
  if (iVar2 == 0) {
    FUN_1800357d0(&local_458,0,0xcc);
    iVar2 = *(int *)((longlong)param_5 + 4);
    yBottom = *(int *)((longlong)param_5 + 8);
    uVar6 = 0;
    local_458._0_4_ = 0x73646976;
    local_444 = 1;
    local_430 = iVar2 * yBottom;
    local_458._4_4_ = 0;
    uVar5 = uVar6;
    do {
      sVar1 = *(short *)((longlong)L"Magnity Thermal Video" + uVar5);
      *(short *)((longlong)asStack_40c + uVar5) = sVar1;
      uVar5 = uVar5 + 2;
    } while (sVar1 != 0);
    local_440 = param_3;
    SetRect(&local_424,0,0,iVar2,yBottom);
    iVar2 = AVIFileCreateStreamW(*(undefined8 *)(param_1 + 0x58),param_1 + 0x48,&local_458);
    if (iVar2 == 0) {
      local_4d8 = 0;
      iVar2 = ICInfo(0x63646976,0,local_388);
      while (iVar2 != 0) {
        lVar3 = ICOpen(local_384,local_380);
        if (lVar3 == 0) {
          ICClose(0);
          local_4d8 = (uint)uVar6;
        }
        else {
          uVar9 = 1;
          ICSendMessage(lVar3,0x5000,0,0);
          ICGetInfo(lVar3,local_388,0x238);
          FUN_180032a60(local_148,local_370,0x100);
          lVar3 = 8;
          pcVar7 = local_148;
          pcVar8 = "x264vfw";
          do {
            if (lVar3 == 0) break;
            lVar3 = lVar3 + -1;
            uVar9 = *pcVar7 == *pcVar8;
            pcVar7 = pcVar7 + 1;
            pcVar8 = pcVar8 + 1;
          } while ((bool)uVar9);
          if ((bool)uVar9) {
            ICClose();
            goto LAB_180001a3e;
          }
          ICClose();
        }
        local_4d8 = local_4d8 + 1;
        uVar6 = (ulonglong)local_4d8;
        iVar2 = ICInfo(0x63646976,uVar6,local_388);
      }
      local_384 = 0;
      local_380 = 0x20424944;
LAB_180001a3e:
      local_4c8 = (ulonglong)param_3;
      _local_4d0 = CONCAT44(local_380,local_384);
      local_4c0 = 0x400000000;
      local_4b8 = 0;
      local_4b0 = 0;
      local_4a8 = 0;
      local_4a0 = 0;
      iVar2 = AVIMakeCompressedStream(param_1 + 0x50,*(undefined8 *)(param_1 + 0x48),&local_4d0,0);
      if (iVar2 == 0) {
        memcpy(local_490,local_498,0x2c);
        if (sStack_482 == 8) {
          sStack_482 = 0x18;
        }
        iVar2 = AVIStreamSetFormat(*(undefined8 *)(param_1 + 0x50),0,local_490,0x28);
        if (iVar2 == 0) {
          *(undefined4 *)(param_1 + 0x40) = 0;
          *(undefined4 *)(param_1 + 0x44) = 1;
          (**(code **)(*(longlong *)(param_1 + 8) + 0x28))();
          uVar4 = 1;
        }
        else {
          FUN_180001470(param_1 + 8);
          *(undefined4 *)(param_1 + 0x40) = 0;
          *(undefined4 *)(param_1 + 0x44) = 0;
          if (*(longlong *)(param_1 + 0x50) != 0) {
            AVIStreamRelease();
            *(undefined8 *)(param_1 + 0x50) = 0;
          }
          if (*(longlong *)(param_1 + 0x48) != 0) {
            AVIStreamRelease();
            *(undefined8 *)(param_1 + 0x48) = 0;
          }
          if (*(longlong *)(param_1 + 0x58) != 0) {
            AVIFileRelease();
            *(undefined8 *)(param_1 + 0x58) = 0;
          }
          AVIFileExit();
          (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
          (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
          uVar4 = 0;
        }
      }
      else {
        FUN_180001470(param_1 + 8);
        *(undefined4 *)(param_1 + 0x40) = 0;
        *(undefined4 *)(param_1 + 0x44) = 0;
        if (*(longlong *)(param_1 + 0x50) != 0) {
          AVIStreamRelease();
          *(undefined8 *)(param_1 + 0x50) = 0;
        }
        if (*(longlong *)(param_1 + 0x48) != 0) {
          AVIStreamRelease();
          *(undefined8 *)(param_1 + 0x48) = 0;
        }
        if (*(longlong *)(param_1 + 0x58) != 0) {
          AVIFileRelease();
          *(undefined8 *)(param_1 + 0x58) = 0;
        }
        AVIFileExit();
        (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
        (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
        uVar4 = 0;
      }
    }
    else {
      FUN_180001470(param_1 + 8);
      *(undefined4 *)(param_1 + 0x40) = 0;
      *(undefined4 *)(param_1 + 0x44) = 0;
      if (*(longlong *)(param_1 + 0x50) != 0) {
        AVIStreamRelease();
        *(undefined8 *)(param_1 + 0x50) = 0;
      }
      if (*(longlong *)(param_1 + 0x48) != 0) {
        AVIStreamRelease();
        *(undefined8 *)(param_1 + 0x48) = 0;
      }
      if (*(longlong *)(param_1 + 0x58) != 0) {
        AVIFileRelease();
        *(undefined8 *)(param_1 + 0x58) = 0;
      }
      AVIFileExit();
      (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
      (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
      uVar4 = 0;
    }
  }
  else {
    if (*(longlong *)(param_1 + 0x58) != 0) {
      FUN_180001470(param_1 + 8);
      *(undefined4 *)(param_1 + 0x40) = 0;
      *(undefined4 *)(param_1 + 0x44) = 0;
      if (*(longlong *)(param_1 + 0x50) != 0) {
        AVIStreamRelease();
        *(undefined8 *)(param_1 + 0x50) = 0;
      }
      if (*(longlong *)(param_1 + 0x48) != 0) {
        AVIStreamRelease();
        *(undefined8 *)(param_1 + 0x48) = 0;
      }
      if (*(longlong *)(param_1 + 0x58) != 0) {
        AVIFileRelease();
        *(undefined8 *)(param_1 + 0x58) = 0;
      }
      AVIFileExit();
      (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
    }
    (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
    uVar4 = 0;
  }
  return uVar4;
}


==================================================================

### EXPORT FUNC 180001c50 (121 bytes) name=FUN_180001c50

void FUN_180001c50(longlong param_1)

{
  FUN_180001470(param_1 + 8);
  *(undefined4 *)(param_1 + 0x40) = 0;
  *(undefined4 *)(param_1 + 0x44) = 0;
  if (*(longlong *)(param_1 + 0x50) != 0) {
    AVIStreamRelease();
    *(undefined8 *)(param_1 + 0x50) = 0;
  }
  if (*(longlong *)(param_1 + 0x48) != 0) {
    AVIStreamRelease();
    *(undefined8 *)(param_1 + 0x48) = 0;
  }
  if (*(longlong *)(param_1 + 0x58) != 0) {
    AVIFileRelease();
    *(undefined8 *)(param_1 + 0x58) = 0;
  }
  AVIFileExit();
                    /* WARNING: Could not recover jumptable at 0x000180001cc5. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
  return;
}


==================================================================

### EXPORT FUNC 180001cd0 (329 bytes) name=FUN_180001cd0

bool FUN_180001cd0(longlong param_1,byte *param_2,int param_3,longlong param_4)

{
  byte *pbVar1;
  uint uVar2;
  byte *pbVar3;
  ulonglong uVar4;
  uint uVar5;
  int iVar6;
  byte *pbVar7;
  bool bVar8;
  
  *(int *)(param_1 + 100) = *(int *)(param_1 + 100) + 1;
  if (*(uint *)(param_1 + 100) < *(uint *)(param_1 + 0x60)) {
    return true;
  }
  *(undefined4 *)(param_1 + 100) = 0;
  FUN_180001470(param_1 + 8);
  if (*(int *)(param_1 + 0x44) == 0) {
    (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
    bVar8 = false;
  }
  else {
    pbVar3 = param_2;
    pbVar7 = (byte *)0x0;
    if (*(short *)(param_4 + 0xe) == 8) {
      param_3 = param_3 * 3;
      pbVar3 = thunk_FUN_18001eb74((longlong)param_3);
      uVar2 = *(int *)(param_4 + 8) * *(int *)(param_4 + 4);
      uVar5 = (int)uVar2 >> 0x1f;
      pbVar1 = pbVar3;
      for (iVar6 = (uVar2 ^ uVar5) - uVar5; pbVar7 = pbVar3, iVar6 != 0; iVar6 = iVar6 + -1) {
        uVar4 = (ulonglong)*param_2;
        param_2 = param_2 + 1;
        *pbVar1 = *(byte *)(param_4 + 0x28 + uVar4 * 4);
        pbVar1[1] = *(byte *)(param_4 + 0x29 + uVar4 * 4);
        pbVar1[2] = *(byte *)(param_4 + 0x2a + uVar4 * 4);
        pbVar1 = pbVar1 + 3;
      }
    }
    iVar6 = 1;
    if (*(longlong *)(param_1 + 0x50) != 0) {
      iVar6 = AVIStreamWrite(*(longlong *)(param_1 + 0x50),*(undefined4 *)(param_1 + 0x40),1,pbVar3,
                             param_3,0x10,0,0);
      *(int *)(param_1 + 0x40) = *(int *)(param_1 + 0x40) + 1;
    }
    if (pbVar7 != (byte *)0x0) {
      thunk_FUN_180034a70(pbVar7);
    }
    (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
    bVar8 = iVar6 == 0;
  }
  return bVar8;
}


==================================================================

### EXPORT FUNC 180001e20 (3 bytes) name=FUN_180001e20

void FUN_180001e20(void)

{
  return;
}


==================================================================

### EXPORT FUNC 180001e30 (5 bytes) name=thunk_FUN_180034a70

void thunk_FUN_180034a70(LPVOID param_1)

{
  BOOL BVar1;
  DWORD DVar2;
  DWORD *pDVar3;
  
  if (param_1 != (LPVOID)0x0) {
    BVar1 = HeapFree(DAT_180072ed8,0,param_1);
    if (BVar1 == 0) {
      pDVar3 = FUN_180035b40();
      DVar2 = GetLastError();
      DVar2 = FUN_180035af0(DVar2);
      *pDVar3 = DVar2;
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180001e40 (148 bytes) name=FUN_180001e40

int FUN_180001e40(longlong param_1,int param_2)

{
  int iVar1;
  int iVar2;
  
  if (*(int *)(param_1 + 0x47950) != 0) {
    iVar2 = param_2 + 150000;
    iVar1 = (int)(iVar2 + (iVar2 >> 0x1f & 0xfffU)) >> 0xc;
    if (iVar1 < 0) {
      iVar1 = 0;
    }
    else if (0x285 < iVar1) {
      iVar1 = 0x285;
    }
    iVar2 = (iVar2 + iVar1 * -0x1000) * ((&DAT_180099004)[iVar1] - (&DAT_180099000)[iVar1]);
    iVar1 = ((int)(iVar2 + (iVar2 >> 0x1f & 0xfffU)) >> 0xc) + (&DAT_180099000)[iVar1];
    if (iVar1 < 0) {
      iVar1 = 0;
    }
    return iVar1 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
  }
  iVar1 = param_2 - *(int *)(param_1 + 0x47948) >> ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f)
  ;
  if (iVar1 < 0) {
    iVar1 = 0;
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 180001ee0 (463 bytes) name=MAG_NewChannel

undefined8 MAG_NewChannel(uint param_1)

{
  ulonglong *puVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  ulonglong uVar5;
  
                    /* 0x1ee0  47  MAG_NewChannel */
  uVar5 = (ulonglong)param_1;
  if (0x80 < param_1) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  if (((((&DAT_180073758)[uVar5 * 0x95] == 0) &&
       (puVar1 = &DAT_180073750 + uVar5 * 0x95, (&DAT_180073750)[uVar5 * 0x95] == 0)) &&
      ((&DAT_180073760)[uVar5 * 0x95] == 0)) && ((&DAT_180073768)[uVar5 * 0x95] == 0)) {
    FUN_1800357d0(puVar1,0,0x4a8);
    puVar2 = FUN_18001eb74(0x47958);
    puVar4 = (undefined8 *)0x0;
    puVar3 = puVar4;
    if (puVar2 != (undefined8 *)0x0) {
      puVar3 = FUN_18000b6f0(puVar2);
    }
    *puVar1 = (ulonglong)puVar3;
    puVar2 = FUN_18001eb74(0x2dc0);
    puVar3 = puVar4;
    if (puVar2 != (undefined8 *)0x0) {
      puVar3 = FUN_18001c220(puVar2);
    }
    (&DAT_180073758)[uVar5 * 0x95] = puVar3;
    puVar2 = FUN_18001eb74(0x68);
    puVar3 = puVar4;
    if (puVar2 != (undefined8 *)0x0) {
      puVar3 = FUN_180001500(puVar2);
    }
    (&DAT_180073760)[uVar5 * 0x95] = puVar3;
    puVar3 = FUN_18001eb74(0x4f0);
    if (puVar3 != (undefined8 *)0x0) {
      puVar4 = FUN_18001ae70(puVar3);
    }
    (&DAT_180073768)[uVar5 * 0x95] = puVar4;
    if (((*puVar1 == 0) || ((&DAT_180073758)[uVar5 * 0x95] == 0)) ||
       ((&DAT_180073760)[uVar5 * 0x95] == 0)) {
      if (puVar4 != (undefined8 *)0x0) {
        (**(code **)*puVar4)(puVar4,1);
        (&DAT_180073768)[uVar5 * 0x95] = 0;
      }
    }
    else if (puVar4 != (undefined8 *)0x0) {
      *(uint *)((&DAT_180073758)[uVar5 * 0x95] + 0x28) = param_1;
      return 1;
    }
    puVar3 = (undefined8 *)(&DAT_180073760)[uVar5 * 0x95];
    if (puVar3 != (undefined8 *)0x0) {
      (**(code **)*puVar3)(puVar3,1);
      (&DAT_180073760)[uVar5 * 0x95] = 0;
    }
    puVar3 = (undefined8 *)*puVar1;
    if (puVar3 != (undefined8 *)0x0) {
      (**(code **)*puVar3)(puVar3,1);
      *puVar1 = 0;
    }
    puVar3 = (undefined8 *)(&DAT_180073758)[uVar5 * 0x95];
    if (puVar3 != (undefined8 *)0x0) {
      (**(code **)*puVar3)(puVar3,1);
      (&DAT_180073758)[uVar5 * 0x95] = 0;
    }
    SetLastError(0xe4ae0002);
  }
  else {
    SetLastError(0xe4ae000a);
  }
  return 0;
}


==================================================================

### EXPORT FUNC 1800020b0 (324 bytes) name=MAG_DelChannel

void MAG_DelChannel(uint param_1)

{
  undefined8 *puVar1;
  ulonglong uVar2;
  
                    /* 0x20b0  3  MAG_DelChannel */
  if (param_1 < 0x81) {
    uVar2 = (ulonglong)param_1;
    if ((((&DAT_180073758)[uVar2 * 0x95] != 0) && ((&DAT_180073750)[uVar2 * 0x95] != 0)) &&
       ((&DAT_180073768)[uVar2 * 0x95] != 0)) {
      MAG_Free(param_1);
    }
    if ((((&DAT_180073758)[uVar2 * 0x95] == 0) || ((&DAT_180073750)[uVar2 * 0x95] == 0)) ||
       (((&DAT_180073760)[uVar2 * 0x95] == 0 || ((&DAT_180073768)[uVar2 * 0x95] == 0)))) {
      SetLastError(0xe4ae0001);
    }
    else {
      EnterCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar2 * 0x95] + 0x238));
    }
    puVar1 = (undefined8 *)(&DAT_180073768)[uVar2 * 0x95];
    if (puVar1 != (undefined8 *)0x0) {
      (**(code **)*puVar1)(puVar1,1);
      (&DAT_180073768)[uVar2 * 0x95] = 0;
    }
    puVar1 = (undefined8 *)(&DAT_180073760)[uVar2 * 0x95];
    if (puVar1 != (undefined8 *)0x0) {
      (**(code **)*puVar1)(puVar1,1);
      (&DAT_180073760)[uVar2 * 0x95] = 0;
    }
    puVar1 = (undefined8 *)(&DAT_180073750)[uVar2 * 0x95];
    if (puVar1 != (undefined8 *)0x0) {
      (**(code **)*puVar1)(puVar1,1);
      (&DAT_180073750)[uVar2 * 0x95] = 0;
    }
    puVar1 = (undefined8 *)(&DAT_180073758)[uVar2 * 0x95];
    if (puVar1 != (undefined8 *)0x0) {
      (**(code **)*puVar1)(puVar1,1);
      (&DAT_180073758)[uVar2 * 0x95] = 0;
    }
    if ((((&DAT_180073758)[uVar2 * 0x95] != 0) && ((&DAT_180073750)[uVar2 * 0x95] != 0)) &&
       (((&DAT_180073760)[uVar2 * 0x95] != 0 && ((&DAT_180073768)[uVar2 * 0x95] != 0)))) {
                    /* WARNING: Could not recover jumptable at 0x0001800021d3. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar2 * 0x95] + 0x238));
      return;
    }
    SetLastError(0xe4ae0001);
  }
  return;
}


==================================================================

### EXPORT FUNC 180002200 (87 bytes) name=MAG_IsChannelAvailable

undefined8 MAG_IsChannelAvailable(uint param_1)

{
  ulonglong uVar1;
  
                    /* 0x2200  31  MAG_IsChannelAvailable */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
    return 1;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180002260 (87 bytes) name=MAG_IsInitialized

undefined4 MAG_IsInitialized(uint param_1)

{
  ulonglong uVar1;
  
                    /* 0x2260  32  MAG_IsInitialized */
  if (param_1 < 0x81) {
    uVar1 = (ulonglong)param_1;
    if (((((&DAT_180073758)[uVar1 * 0x95] != 0) && ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
        ((&DAT_180073760)[uVar1 * 0x95] != 0)) && ((&DAT_180073768)[uVar1 * 0x95] != 0)) {
      return *(undefined4 *)((&DAT_180073758)[uVar1 * 0x95] + 0x10);
    }
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 1800022c0 (296 bytes) name=MAG_Initialize

undefined8 MAG_Initialize(uint param_1,HWND param_2)

{
  longlong lVar1;
  BOOL BVar2;
  undefined8 uVar3;
  ulonglong uVar4;
  longlong lVar5;
  HWND pHVar6;
  
                    /* 0x22c0  30  MAG_Initialize */
  if (0x80 < param_1) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  uVar4 = (ulonglong)param_1;
  lVar5 = uVar4 * 0x4a8;
  lVar1 = (&DAT_180073758)[uVar4 * 0x95];
  if ((((lVar1 != 0) && ((&DAT_180073750)[uVar4 * 0x95] != 0)) &&
      ((&DAT_180073760)[uVar4 * 0x95] != 0)) && ((&DAT_180073768)[uVar4 * 0x95] != 0)) {
    if (*(int *)(lVar1 + 0x10) != 0) {
      SetLastError(0xe4ae000a);
      return 0;
    }
    *(undefined4 *)(&DAT_18007377c + lVar5) = 0;
    *(undefined4 *)(&DAT_180073778 + lVar5) = 0;
    *(undefined8 *)(&DAT_180073788 + lVar5) = 0;
    *(undefined8 *)(&DAT_180073790 + lVar5) = 0;
    if (*(int *)(lVar1 + 0x10) != 0) {
      FUN_18001c590(lVar1);
    }
    lVar1 = (&DAT_180073758)[uVar4 * 0x95];
    if (*(int *)(lVar1 + 0x10) == 0) {
      BVar2 = IsWindow(param_2);
      *(undefined4 *)(lVar1 + 0x10) = 1;
      uVar3 = 1;
      pHVar6 = (HWND)0x0;
      if (BVar2 != 0) {
        pHVar6 = param_2;
      }
      *(HWND *)(lVar1 + 0x20) = pHVar6;
    }
    else {
      SetLastError(0xe4ae000a);
      uVar3 = 0;
    }
    return uVar3;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 1800023f0 (410 bytes) name=MAG_Free

void MAG_Free(uint param_1)

{
  int *piVar1;
  ulonglong uVar2;
  longlong lVar3;
  uint uVar4;
  
                    /* 0x23f0  8  MAG_Free */
  if (0x80 < param_1) {
                    /* WARNING: Could not recover jumptable at 0x000180002405. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    SetLastError(0xe4ae0001);
    return;
  }
  uVar2 = (ulonglong)param_1;
  lVar3 = uVar2 * 0x4a8;
  if (((((&DAT_180073758)[uVar2 * 0x95] == 0) || ((&DAT_180073750)[uVar2 * 0x95] == 0)) ||
      ((&DAT_180073760)[uVar2 * 0x95] == 0)) || ((&DAT_180073768)[uVar2 * 0x95] == 0)) {
    SetLastError(0xe4ae0001);
  }
  else {
    if (*(int *)(&DAT_180073778 + lVar3) != 0) {
      MAG_StopProcessImage(param_1);
    }
    uVar4 = 0;
    if (*(LPVOID *)(&DAT_180073788 + lVar3) != (LPVOID)0x0) {
      thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar3));
      *(undefined8 *)(&DAT_180073788 + lVar3) = 0;
    }
    if (*(int *)((&DAT_180073758)[uVar2 * 0x95] + 0x18) != 0) {
      FUN_18001d520((&DAT_180073758)[uVar2 * 0x95]);
    }
    lVar3 = (&DAT_180073758)[uVar2 * 0x95];
    if (*(int *)(lVar3 + 0x14) != 0) {
      if (*(int *)(lVar3 + 0x18) != 0) {
        FUN_18001d520(lVar3);
      }
      FUN_180001470(lVar3 + 0x80);
      if (*(int *)(lVar3 + 0x2cf0) != 0) {
        piVar1 = (int *)(lVar3 + 0x13c);
        do {
          if (*piVar1 != 0) {
            *piVar1 = 0;
          }
          uVar4 = uVar4 + 1;
          piVar1 = piVar1 + 0x16;
        } while (uVar4 < *(uint *)(lVar3 + 0x2cf0));
      }
      (**(code **)(*(longlong *)(lVar3 + 0x80) + 0x28))(lVar3 + 0x80);
      if (*(HWND *)(lVar3 + 0x20) != (HWND)0x0) {
        PostMessageW(*(HWND *)(lVar3 + 0x20),0x111,0x83e9,0);
      }
      if (*(longlong *)(lVar3 + 0x38) != 0) {
        usb_release_interface(*(longlong *)(lVar3 + 0x38),0);
        usb_close(*(undefined8 *)(lVar3 + 0x38));
        *(undefined8 *)(lVar3 + 0x38) = 0;
      }
      *(undefined8 *)(lVar3 + 0x30) = 0;
      *(undefined4 *)(lVar3 + 0x14) = 0;
    }
    if (*(int *)((&DAT_180073758)[uVar2 * 0x95] + 0x10) != 0) {
      FUN_18001c590((&DAT_180073758)[uVar2 * 0x95]);
      return;
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180002590 (88 bytes) name=MAG_EnumCameras

undefined8 MAG_EnumCameras(uint param_1)

{
  ulonglong uVar1;
  undefined8 uVar2;
  
                    /* 0x2590  5  MAG_EnumCameras */
  if (param_1 < 0x81) {
    uVar1 = (ulonglong)param_1;
    if (((((&DAT_180073758)[uVar1 * 0x95] != 0) && ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
        ((&DAT_180073760)[uVar1 * 0x95] != 0)) && ((&DAT_180073768)[uVar1 * 0x95] != 0)) {
      uVar2 = FUN_18001c900((&DAT_180073758)[uVar1 * 0x95]);
      return uVar2;
    }
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 1800025f0 (87 bytes) name=MAG_IsLinked

undefined4 MAG_IsLinked(uint param_1)

{
  ulonglong uVar1;
  
                    /* 0x25f0  33  MAG_IsLinked */
  if (param_1 < 0x81) {
    uVar1 = (ulonglong)param_1;
    if (((((&DAT_180073758)[uVar1 * 0x95] != 0) && ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
        ((&DAT_180073760)[uVar1 * 0x95] != 0)) && ((&DAT_180073768)[uVar1 * 0x95] != 0)) {
      return *(undefined4 *)((&DAT_180073758)[uVar1 * 0x95] + 0x14);
    }
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180002650 (308 bytes) name=MAG_LinkCamera

undefined8 MAG_LinkCamera(uint param_1,uint param_2)

{
  longlong lVar1;
  uint *puVar2;
  undefined8 uVar3;
  DWORD DVar4;
  uint uVar5;
  ulonglong uVar6;
  
                    /* 0x2650  35  MAG_LinkCamera */
  uVar6 = (ulonglong)param_1;
  if (param_1 < 0x81) {
    lVar1 = (&DAT_180073758)[uVar6 * 0x95];
    if ((((lVar1 != 0) && ((&DAT_180073750)[uVar6 * 0x95] != 0)) &&
        ((&DAT_180073760)[uVar6 * 0x95] != 0)) && ((&DAT_180073768)[uVar6 * 0x95] != 0)) {
      if (*(int *)(lVar1 + 0x14) != 0) {
        DVar4 = 0xe4ae000a;
        goto LAB_18000276c;
      }
      uVar5 = param_2;
      if (param_2 < 0x100) {
LAB_1800026ca:
        if (*(int *)(lVar1 + 0x10) == 0) {
          DVar4 = 0xe4ae0004;
          goto LAB_180002706;
        }
        FUN_18001cce0(lVar1,uVar5);
      }
      else {
        uVar5 = 0;
        if (*(uint *)(lVar1 + 0x2cf0) != 0) {
          puVar2 = (uint *)(lVar1 + 0xf8);
          do {
            if (*puVar2 == param_2) goto LAB_1800026ca;
            uVar5 = uVar5 + 1;
            puVar2 = puVar2 + 0x16;
          } while (uVar5 < *(uint *)(lVar1 + 0x2cf0));
        }
        DVar4 = 0xe4ae0001;
LAB_180002706:
        SetLastError(DVar4);
      }
      if (*(int *)((&DAT_180073758)[uVar6 * 0x95] + 0x14) != 0) {
        uVar3 = FUN_180008bd0(param_1);
        if ((int)uVar3 == 0) {
          FUN_18001c840((&DAT_180073758)[uVar6 * 0x95]);
          return 0;
        }
        return 1;
      }
      DVar4 = 0xe4ae0007;
      goto LAB_18000276c;
    }
  }
  DVar4 = 0xe4ae0001;
LAB_18000276c:
  SetLastError(DVar4);
  return 0;
}


==================================================================

### EXPORT FUNC 180002790 (325 bytes) name=MAG_DisLinkCamera

void MAG_DisLinkCamera(uint param_1)

{
  longlong lVar1;
  int *piVar2;
  uint uVar3;
  ulonglong uVar4;
  
                    /* 0x2790  4  MAG_DisLinkCamera */
  if (0x80 < param_1) {
                    /* WARNING: Could not recover jumptable at 0x0001800027a5. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    SetLastError(0xe4ae0001);
    return;
  }
  uVar4 = (ulonglong)param_1;
  if (((((&DAT_180073758)[uVar4 * 0x95] != 0) && ((&DAT_180073750)[uVar4 * 0x95] != 0)) &&
      ((&DAT_180073760)[uVar4 * 0x95] != 0)) && ((&DAT_180073768)[uVar4 * 0x95] != 0)) {
    if (*(int *)(&DAT_180073778 + uVar4 * 0x4a8) != 0) {
      MAG_StopProcessImage(param_1);
    }
    lVar1 = (&DAT_180073758)[uVar4 * 0x95];
    if (*(int *)(lVar1 + 0x18) != 0) {
      FUN_18001d520(lVar1);
    }
    FUN_180001470(lVar1 + 0x80);
    uVar3 = 0;
    if (*(int *)(lVar1 + 0x2cf0) != 0) {
      piVar2 = (int *)(lVar1 + 0x13c);
      do {
        if (*piVar2 != 0) {
          *piVar2 = 0;
        }
        uVar3 = uVar3 + 1;
        piVar2 = piVar2 + 0x16;
      } while (uVar3 < *(uint *)(lVar1 + 0x2cf0));
    }
    (**(code **)(*(longlong *)(lVar1 + 0x80) + 0x28))(lVar1 + 0x80);
    if (*(HWND *)(lVar1 + 0x20) != (HWND)0x0) {
      PostMessageW(*(HWND *)(lVar1 + 0x20),0x111,0x83e9,0);
    }
    if (*(longlong *)(lVar1 + 0x38) != 0) {
      usb_release_interface(*(longlong *)(lVar1 + 0x38),0);
      usb_close(*(undefined8 *)(lVar1 + 0x38));
      *(undefined8 *)(lVar1 + 0x38) = 0;
    }
    *(undefined8 *)(lVar1 + 0x30) = 0;
    *(undefined4 *)(lVar1 + 0x14) = 0;
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x0001800028ce. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  SetLastError(0xe4ae0001);
  return;
}


==================================================================

### EXPORT FUNC 1800028e0 (92 bytes) name=MAG_GetCamInfo

void MAG_GetCamInfo(uint param_1,void *param_2,uint param_3)

{
  ulonglong uVar1;
  
                    /* 0x28e0  10  MAG_GetCamInfo */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     ((((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)) &&
      (0x47 < param_3)))) {
    memcpy(param_2,&DAT_1800737b8 + uVar1 * 0x12a,0x48);
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x000180002935. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  SetLastError(0xe4ae0001);
  return;
}


==================================================================

### EXPORT FUNC 180002940 (632 bytes) name=MAG_GetCamInfoEx

void MAG_GetCamInfoEx(uint param_1,ulonglong *param_2,uint param_3)

{
  undefined8 *puVar1;
  undefined4 uVar2;
  longlong lVar3;
  ulonglong uVar4;
  longlong lVar5;
  
                    /* 0x2940  11  MAG_GetCamInfoEx */
  if (0x80 < param_1) {
                    /* WARNING: Could not recover jumptable at 0x00018000295b. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    SetLastError(0xe4ae0001);
    return;
  }
  uVar4 = (ulonglong)param_1;
  lVar5 = uVar4 * 0x4a8;
  if (((((&DAT_180073758)[uVar4 * 0x95] != 0) && ((&DAT_180073750)[uVar4 * 0x95] != 0)) &&
      ((&DAT_180073760)[uVar4 * 0x95] != 0)) &&
     (((&DAT_180073768)[uVar4 * 0x95] != 0 && (0x187 < param_3)))) {
    FUN_1800357d0(param_2,0,0x188);
    memcpy(param_2,&DAT_1800737b8 + uVar4 * 0x12a,0x48);
    *(undefined4 *)(param_2 + 9) = (&DAT_1800737b0)[uVar4 * 0x12a];
    *(undefined4 *)((longlong)param_2 + 0x4c) = *(undefined4 *)(&DAT_180073800 + lVar5);
    *(undefined4 *)(param_2 + 10) = *(undefined4 *)(&DAT_180073804 + lVar5);
    *(undefined4 *)((longlong)param_2 + 0x54) = *(undefined4 *)(&DAT_180073808 + lVar5);
    *(undefined4 *)(param_2 + 0xb) = *(undefined4 *)(&DAT_18007380c + lVar5);
    lVar3 = (&DAT_180073750)[uVar4 * 0x95];
    if ((*(uint *)(lVar3 + 0x98) < *(uint *)(lVar3 + 0x41884)) &&
       (puVar1 = (undefined8 *)((ulonglong)*(uint *)(lVar3 + 0x98) * 0x21c + 0x41888 + lVar3),
       puVar1 != (undefined8 *)0x0)) {
      *(undefined8 *)((longlong)param_2 + 0x5c) = *puVar1;
      *(undefined8 *)((longlong)param_2 + 100) = puVar1[1];
      *(undefined8 *)((longlong)param_2 + 0x6c) = puVar1[2];
      *(undefined8 *)((longlong)param_2 + 0x74) = puVar1[3];
      *(undefined4 *)((longlong)param_2 + 0x7c) = *(undefined4 *)(puVar1 + 4);
      *(undefined4 *)(param_2 + 0x10) = *(undefined4 *)(puVar1 + 0x41);
      *(undefined4 *)((longlong)param_2 + 0x84) = *(undefined4 *)((longlong)puVar1 + 0x20c);
    }
    param_2[0x16] = *(ulonglong *)(&DAT_180073810 + lVar5);
    param_2[0x17] = *(ulonglong *)(&DAT_180073818 + lVar5);
    param_2[0x18] = *(ulonglong *)(&DAT_180073820 + lVar5);
    *(undefined4 *)(param_2 + 0x19) = *(undefined4 *)(&DAT_180073828 + lVar5);
    uVar2 = *(undefined4 *)(&DAT_180073780 + lVar5);
    *(undefined4 *)(param_2 + 0x1a) = 0;
    *(undefined4 *)((longlong)param_2 + 0xcc) = uVar2;
    *(undefined4 *)((longlong)param_2 + 0xd4) =
         *(undefined4 *)((&DAT_180073750)[uVar4 * 0x95] + 0xd4);
    *(undefined4 *)(param_2 + 0x1b) = *(undefined4 *)((&DAT_180073750)[uVar4 * 0x95] + 0xd8);
    *(undefined4 *)((longlong)param_2 + 0xdc) =
         *(undefined4 *)((&DAT_180073750)[uVar4 * 0x95] + 0xf4);
    *(undefined4 *)(param_2 + 0x1c) = *(undefined4 *)((&DAT_180073750)[uVar4 * 0x95] + 0xf8);
    *(undefined4 *)((longlong)param_2 + 0xe4) =
         *(undefined4 *)((&DAT_180073750)[uVar4 * 0x95] + 0xd0);
    *(undefined4 *)(param_2 + 0x1d) = *(undefined4 *)((&DAT_180073750)[uVar4 * 0x95] + 0x10);
    *(undefined4 *)((longlong)param_2 + 0xec) =
         *(undefined4 *)((&DAT_180073750)[uVar4 * 0x95] + 0x14);
    *(undefined4 *)(param_2 + 0x1e) = *(undefined4 *)((&DAT_180073750)[uVar4 * 0x95] + 0x18);
    *(undefined4 *)((longlong)param_2 + 0xf4) =
         *(undefined4 *)((&DAT_180073750)[uVar4 * 0x95] + 0x1c);
    *(undefined4 *)(param_2 + 0x1f) = *(undefined4 *)((&DAT_180073750)[uVar4 * 0x95] + 0x20);
    *(undefined4 *)((longlong)param_2 + 0xfc) =
         *(undefined4 *)((&DAT_180073750)[uVar4 * 0x95] + 0x24);
    *(undefined4 *)(param_2 + 0x20) = *(undefined4 *)((&DAT_180073750)[uVar4 * 0x95] + 0x48);
    *(undefined4 *)((longlong)param_2 + 0x104) =
         *(undefined4 *)((&DAT_180073750)[uVar4 * 0x95] + 0x4c);
    *(undefined4 *)(param_2 + 0x25) = *(undefined4 *)(&DAT_180073bac + lVar5);
    *(undefined4 *)((longlong)param_2 + 300) = *(undefined4 *)(&DAT_180073bb0 + lVar5);
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x000180002bb1. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  SetLastError(0xe4ae0001);
  return;
}


==================================================================

### EXPORT FUNC 180002bc0 (161 bytes) name=MAG_GetTerminalList

ulonglong MAG_GetTerminalList(void *param_1,uint param_2)

{
  uint uVar1;
  ulonglong uVar2;
  ulonglong _Size;
  
                    /* 0x2bc0  29  MAG_GetTerminalList */
  if ((((DAT_180073758 != 0) && (DAT_180073750 != 0)) && (DAT_180073760 != 0)) &&
     (DAT_180073768 != 0)) {
    if (*(int *)(DAT_180073758 + 0x10) == 0) {
      SetLastError(0xe4ae0004);
      return 0;
    }
    uVar1 = *(uint *)(DAT_180073758 + 0x2cf0);
    if (((param_1 != (void *)0x0) && (uVar1 != 0)) && (param_2 != 0)) {
      uVar2 = (ulonglong)uVar1 * 0x58;
      _Size = (ulonglong)param_2;
      if (uVar2 < param_2) {
        _Size = uVar2;
      }
      memcpy(param_1,(void *)(DAT_180073758 + 0xf0),_Size);
    }
    return (ulonglong)uVar1;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180002c70 (86 bytes) name=MAG_IsProcessingImage

undefined4 MAG_IsProcessingImage(uint param_1)

{
  ulonglong uVar1;
  
                    /* 0x2c70  34  MAG_IsProcessingImage */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
    return *(undefined4 *)(&DAT_180073778 + uVar1 * 0x4a8);
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180002cd0 (112 bytes) name=MAG_StartProcessImage

undefined8
MAG_StartProcessImage(uint param_1,uint *param_2,longlong param_3,int param_4,undefined8 param_5)

{
  undefined8 uVar1;
  ulonglong uVar2;
  
                    /* 0x2cd0  62  MAG_StartProcessImage */
  uVar2 = (ulonglong)param_1;
  if ((((param_1 < 0x81) && ((&DAT_180073758)[uVar2 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar2 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar2 * 0x95] != 0 && ((&DAT_180073768)[uVar2 * 0x95] != 0)))) {
    *(undefined8 *)(&DAT_180073770 + uVar2 * 0x4a8) = param_5;
    uVar1 = FUN_180009b50(param_1,param_2,param_3,param_4);
    return uVar1;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180002d40 (514 bytes) name=MAG_StopProcessImage

void MAG_StopProcessImage(uint param_1)

{
  longlong lVar1;
  longlong *plVar2;
  ulonglong uVar3;
  longlong lVar4;
  
                    /* 0x2d40  63  MAG_StopProcessImage */
  if (0x80 < param_1) {
                    /* WARNING: Could not recover jumptable at 0x000180002d55. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    SetLastError(0xe4ae0001);
    return;
  }
  uVar3 = (ulonglong)param_1;
  lVar4 = uVar3 * 0x4a8;
  if (((((&DAT_180073758)[uVar3 * 0x95] != 0) && ((&DAT_180073750)[uVar3 * 0x95] != 0)) &&
      ((&DAT_180073760)[uVar3 * 0x95] != 0)) && ((&DAT_180073768)[uVar3 * 0x95] != 0)) {
    if ((*(int *)((&DAT_180073768)[uVar3 * 0x95] + 0x48) != 0) ||
       (*(int *)((&DAT_180073768)[uVar3 * 0x95] + 0x44) != 0)) {
      lVar1 = (&DAT_180073768)[uVar3 * 0x95];
      FUN_180001470(lVar1 + 8);
      if (*(int *)(lVar1 + 0x48) != 0) {
        *(undefined4 *)(lVar1 + 0x4d8) = 0;
        SetEvent(*(HANDLE *)(lVar1 + 0x4e8));
        if (*(longlong *)(lVar1 + 0x4e0) != 0) {
          WaitForSingleObject(*(HANDLE *)(*(longlong *)(lVar1 + 0x4e0) + 0x58),0xffffffff);
          plVar2 = *(longlong **)(lVar1 + 0x4e0);
          if (plVar2 != (longlong *)0x0) {
            (**(code **)(*plVar2 + 8))(plVar2,1);
          }
          *(undefined8 *)(lVar1 + 0x4e0) = 0;
        }
        CloseHandle(*(HANDLE *)(lVar1 + 0x4e8));
        *(undefined4 *)(lVar1 + 0x48) = 0;
      }
      if (*(int *)(lVar1 + 0x44) != 0) {
        *(undefined4 *)(lVar1 + 0x44) = 0;
      }
      (**(code **)(*(longlong *)(lVar1 + 0x50) + 0x98))(lVar1 + 0x50);
      *(undefined4 *)(lVar1 + 0x40) = 0;
      (**(code **)(*(longlong *)(lVar1 + 8) + 0x28))(lVar1 + 8);
    }
    lVar1 = (&DAT_180073760)[uVar3 * 0x95];
    if (*(int *)(lVar1 + 0x44) != 0) {
      FUN_180001470(lVar1 + 8);
      *(undefined4 *)(lVar1 + 0x40) = 0;
      *(undefined4 *)(lVar1 + 0x44) = 0;
      if (*(longlong *)(lVar1 + 0x50) != 0) {
        AVIStreamRelease();
        *(undefined8 *)(lVar1 + 0x50) = 0;
      }
      if (*(longlong *)(lVar1 + 0x48) != 0) {
        AVIStreamRelease();
        *(undefined8 *)(lVar1 + 0x48) = 0;
      }
      if (*(longlong *)(lVar1 + 0x58) != 0) {
        AVIFileRelease();
        *(undefined8 *)(lVar1 + 0x58) = 0;
      }
      AVIFileExit();
      (**(code **)(*(longlong *)(lVar1 + 8) + 0x28))(lVar1 + 8);
    }
    if (*(int *)((&DAT_180073758)[uVar3 * 0x95] + 0x18) != 0) {
      FUN_18001d520((&DAT_180073758)[uVar3 * 0x95]);
    }
    lVar1 = (&DAT_180073750)[uVar3 * 0x95];
    *(undefined4 *)(&DAT_180073778 + lVar4) = 0;
    *(undefined4 *)(&DAT_18007377c + lVar4) = 0;
    *(undefined8 *)(&DAT_180073790 + lVar4) = 0;
    FUN_18000c2b0(lVar1);
    if (*(LPVOID *)(&DAT_180073788 + lVar4) != (LPVOID)0x0) {
      thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar4));
      *(undefined8 *)(&DAT_180073788 + lVar4) = 0;
    }
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x000180002f3b. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  SetLastError(0xe4ae0001);
  return;
}


==================================================================

### EXPORT FUNC 180002f50 (155 bytes) name=FUN_180002f50

undefined8 FUN_180002f50(uint param_1)

{
  undefined8 uVar1;
  ulonglong uVar2;
  uint local_res10 [6];
  
  uVar2 = (ulonglong)param_1;
  if (*(int *)((&DAT_180073758)[uVar2 * 0x95] + 0x14) == 0) {
    SetLastError(0xe4ae0005);
    return 0;
  }
  local_res10[0] = 0x6bb6b672;
  local_res10[1] = 0;
  uVar1 = FUN_18001c670((&DAT_180073758)[uVar2 * 0x95],local_res10,8);
  if ((int)uVar1 == 0) {
    return uVar1;
  }
  *(undefined4 *)((&DAT_180073750)[uVar2 * 0x95] + 0x58) =
       *(undefined4 *)((&DAT_180073750)[uVar2 * 0x95] + 0x60);
  *(undefined4 *)((&DAT_180073750)[uVar2 * 0x95] + 0x54) =
       *(undefined4 *)((&DAT_180073750)[uVar2 * 0x95] + 0x5c);
  *(undefined4 *)(&DAT_180073bec + uVar2 * 0x4a8) = 0;
  return 1;
}


==================================================================

### EXPORT FUNC 180002ff0 (230 bytes) name=MAG_TriggerFFC

bool MAG_TriggerFFC(uint param_1)

{
  longlong lVar1;
  undefined8 uVar2;
  ulonglong uVar3;
  bool bVar4;
  uint local_res10 [2];
  
                    /* 0x2ff0  64  MAG_TriggerFFC */
  if (param_1 < 0x81) {
    uVar3 = (ulonglong)param_1;
    lVar1 = (&DAT_180073758)[uVar3 * 0x95];
    if ((((lVar1 != 0) && ((&DAT_180073750)[uVar3 * 0x95] != 0)) &&
        ((&DAT_180073760)[uVar3 * 0x95] != 0)) && ((&DAT_180073768)[uVar3 * 0x95] != 0)) {
      if (*(int *)(lVar1 + 0x14) == 0) {
        SetLastError(0xe4ae0005);
        return false;
      }
      local_res10[0] = 0x6bb6b672;
      local_res10[1] = 0;
      uVar2 = FUN_18001c670(lVar1,local_res10,8);
      bVar4 = (int)uVar2 != 0;
      if (bVar4) {
        *(undefined4 *)((&DAT_180073750)[uVar3 * 0x95] + 0x58) =
             *(undefined4 *)((&DAT_180073750)[uVar3 * 0x95] + 0x60);
        *(undefined4 *)((&DAT_180073750)[uVar3 * 0x95] + 0x54) =
             *(undefined4 *)((&DAT_180073750)[uVar3 * 0x95] + 0x5c);
        *(undefined4 *)(&DAT_180073bec + uVar3 * 0x4a8) = 0;
      }
      return bVar4;
    }
  }
  SetLastError(0xe4ae0001);
  return false;
}


==================================================================

### EXPORT FUNC 1800030e0 (90 bytes) name=MAG_SetColorPalette

void MAG_SetColorPalette(uint param_1,int param_2)

{
  longlong lVar1;
  ulonglong uVar2;
  
                    /* 0x30e0  53  MAG_SetColorPalette */
  if ((((param_1 < 0x81) && (uVar2 = (ulonglong)param_1, (&DAT_180073758)[uVar2 * 0x95] != 0)) &&
      (lVar1 = (&DAT_180073750)[uVar2 * 0x95], lVar1 != 0)) &&
     (((&DAT_180073760)[uVar2 * 0x95] != 0 && ((&DAT_180073768)[uVar2 * 0x95] != 0)))) {
    if ((param_2 < 0) || (0xb < param_2)) {
      param_2 = 0;
    }
    *(int *)(&DAT_180073780 + uVar2 * 0x4a8) = param_2;
    FUN_18000d5f0(lVar1,param_2);
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x000180003133. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  SetLastError(0xe4ae0001);
  return;
}


==================================================================

### EXPORT FUNC 180003140 (23 bytes) name=MAG_SetSubsectionEnlargePara

void MAG_SetSubsectionEnlargePara(uint param_1,int param_2,int param_3,byte param_4,byte param_5)

{
                    /* 0x3140  61  MAG_SetSubsectionEnlargePara */
  MAG_SetFixedEnlargePara(param_1,param_2,param_3,param_4,param_5);
  return;
}


==================================================================

### EXPORT FUNC 180003160 (300 bytes) name=MAG_SetFixedEnlargePara

undefined8 MAG_SetFixedEnlargePara(uint param_1,int param_2,int param_3,byte param_4,byte param_5)

{
  undefined8 uVar1;
  ulonglong uVar2;
  
                    /* 0x3160  58  MAG_SetFixedEnlargePara */
  if (((((param_1 < 0x81) && (uVar2 = (ulonglong)param_1, (&DAT_180073758)[uVar2 * 0x95] != 0)) &&
       ((&DAT_180073750)[uVar2 * 0x95] != 0)) &&
      (((&DAT_180073760)[uVar2 * 0x95] != 0 && ((&DAT_180073768)[uVar2 * 0x95] != 0)))) &&
     ((param_2 < param_3 && (param_4 < param_5)))) {
    EnterCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar2 * 0x95] + 0x238));
    *(int *)((&DAT_180073750)[uVar2 * 0x95] + 0x14) = param_2;
    *(int *)((&DAT_180073750)[uVar2 * 0x95] + 0x18) = param_3;
    *(uint *)((&DAT_180073750)[uVar2 * 0x95] + 0x1c) = (uint)param_4;
    *(uint *)((&DAT_180073750)[uVar2 * 0x95] + 0x20) = (uint)param_5;
    *(undefined4 *)((&DAT_180073750)[uVar2 * 0x95] + 0x10) = 1;
    *(undefined4 *)((&DAT_180073750)[uVar2 * 0x95] + 0x28) = 0;
    if ((*(int *)((&DAT_180073750)[uVar2 * 0x95] + 0x234) != 0) &&
       (*(int *)((&DAT_180073758)[uVar2 * 0x95] + 0x14) == 0)) {
      FUN_18000d110((&DAT_180073750)[uVar2 * 0x95]);
    }
    LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar2 * 0x95] + 0x238));
    uVar1 = 1;
  }
  else {
    SetLastError(0xe4ae0001);
    uVar1 = 0;
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180003290 (312 bytes) name=MAG_SetAutoEnlargePara

void MAG_SetAutoEnlargePara(uint param_1,uint param_2,int param_3,int param_4)

{
  ulonglong uVar1;
  int iVar2;
  int iVar3;
  
                    /* 0x3290  52  MAG_SetAutoEnlargePara */
  if (param_1 < 0x81) {
    uVar1 = (ulonglong)param_1;
    if (((((&DAT_180073758)[uVar1 * 0x95] == 0) || ((&DAT_180073750)[uVar1 * 0x95] == 0)) ||
        ((&DAT_180073760)[uVar1 * 0x95] == 0)) || ((&DAT_180073768)[uVar1 * 0x95] == 0)) {
      SetLastError(0xe4ae0001);
    }
    else {
      if (param_2 < 2) {
        param_2 = 2;
      }
      iVar2 = 100;
      if ((param_3 < 0x65) && (iVar2 = param_3, param_3 < -100)) {
        iVar2 = -100;
      }
      iVar3 = 100;
      if ((param_4 < 0x65) && (iVar3 = param_4, param_4 < -100)) {
        iVar3 = -100;
      }
      EnterCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar1 * 0x95] + 0x238));
      *(uint *)((&DAT_180073750)[uVar1 * 0x95] + 0x24) = param_2;
      *(int *)((&DAT_180073750)[uVar1 * 0x95] + 0x48) = iVar2;
      *(int *)((&DAT_180073750)[uVar1 * 0x95] + 0x4c) = iVar3;
      *(undefined4 *)((&DAT_180073750)[uVar1 * 0x95] + 0x10) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar1 * 0x95] + 0x28) = 0;
      if ((*(int *)((&DAT_180073750)[uVar1 * 0x95] + 0x234) != 0) &&
         (*(int *)((&DAT_180073758)[uVar1 * 0x95] + 0x14) == 0)) {
        FUN_18000d110((&DAT_180073750)[uVar1 * 0x95]);
      }
      LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar1 * 0x95] + 0x238));
    }
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x0001800032b6. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  SetLastError(0xe4ae0001);
  return;
}


==================================================================

### EXPORT FUNC 1800033d0 (27 bytes) name=MAG_SetIsothermalPara

void MAG_SetIsothermalPara(uint param_1,int param_2,int param_3)

{
                    /* 0x33d0  59  MAG_SetIsothermalPara */
  MAG_SetIsothermalParaEx(param_1,param_2,param_3,0,0xff,0);
  return;
}


==================================================================

### EXPORT FUNC 1800033f0 (310 bytes) name=MAG_SetIsothermalParaEx

void MAG_SetIsothermalParaEx
               (uint param_1,int param_2,int param_3,undefined1 param_4,undefined1 param_5,
               undefined1 param_6)

{
  ulonglong uVar1;
  
                    /* 0x33f0  60  MAG_SetIsothermalParaEx */
  if (0x80 < param_1) {
                    /* WARNING: Could not recover jumptable at 0x000180003424. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    SetLastError(0xe4ae0001);
    return;
  }
  uVar1 = (ulonglong)param_1;
  if (((((&DAT_180073758)[uVar1 * 0x95] == 0) || ((&DAT_180073750)[uVar1 * 0x95] == 0)) ||
      ((&DAT_180073760)[uVar1 * 0x95] == 0)) || ((&DAT_180073768)[uVar1 * 0x95] == 0)) {
    SetLastError(0xe4ae0001);
  }
  else {
    EnterCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar1 * 0x95] + 0x238));
    *(undefined4 *)((&DAT_180073750)[uVar1 * 0x95] + 0x10) = 0;
    *(int *)((&DAT_180073750)[uVar1 * 0x95] + 0x14) = param_2;
    *(int *)((&DAT_180073750)[uVar1 * 0x95] + 0x18) = param_3;
    *(uint *)((&DAT_180073750)[uVar1 * 0x95] + 0x28) = (uint)(param_2 <= param_3);
    *(undefined1 *)((&DAT_180073750)[uVar1 * 0x95] + 0x2c) = param_6;
    *(undefined1 *)((&DAT_180073750)[uVar1 * 0x95] + 0x2d) = param_5;
    *(undefined1 *)((&DAT_180073750)[uVar1 * 0x95] + 0x2e) = param_4;
    *(undefined1 *)((&DAT_180073750)[uVar1 * 0x95] + 0x2f) = 0;
    if ((*(int *)((&DAT_180073750)[uVar1 * 0x95] + 0x234) != 0) &&
       (*(int *)((&DAT_180073758)[uVar1 * 0x95] + 0x14) == 0)) {
      FUN_18000d110((&DAT_180073750)[uVar1 * 0x95]);
    }
    LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar1 * 0x95] + 0x238));
  }
  return;
}


==================================================================

### EXPORT FUNC 180003530 (502 bytes) name=MAG_SetEnhancedROI

void MAG_SetEnhancedROI(uint param_1,uint param_2,uint param_3,uint param_4,uint param_5,
                       uint param_6)

{
  ulonglong uVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  
                    /* 0x3530  56  MAG_SetEnhancedROI */
  if (0x80 < param_1) {
                    /* WARNING: Could not recover jumptable at 0x000180003556. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    SetLastError(0xe4ae0001);
    return;
  }
  uVar1 = (ulonglong)param_1;
  if (((((&DAT_180073758)[uVar1 * 0x95] != 0) && ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073760)[uVar1 * 0x95] != 0)) && ((&DAT_180073768)[uVar1 * 0x95] != 0)) {
    if (*(int *)((&DAT_180073758)[uVar1 * 0x95] + 0x14) == 0) {
                    /* WARNING: Could not recover jumptable at 0x0001800035c7. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      SetLastError(0xe4ae0005);
      return;
    }
    if (((param_5 < param_3) || ((uint)(&DAT_1800737b8)[uVar1 * 0x12a] <= param_5)) ||
       ((param_6 < param_4 || (*(uint *)(&DAT_1800737bc + uVar1 * 0x4a8) <= param_6)))) {
      SetLastError(0xe4ae0001);
    }
    else {
      if (0x1000 < param_2) {
        param_2 = 0x1000;
      }
      iVar3 = *(uint *)(&DAT_1800737bc + uVar1 * 0x4a8) * (&DAT_1800737b8)[uVar1 * 0x12a];
      uVar4 = ((param_5 - param_3) + 1) * ((param_6 - param_4) + 1);
      if ((iVar3 * 4) / 5 < (int)uVar4) {
        uVar2 = 0;
      }
      else {
        uVar2 = (iVar3 * param_2) / uVar4;
      }
      uVar4 = (0x7fffffff - iVar3) / (int)uVar4;
      if ((int)uVar4 < (int)uVar2) {
        uVar2 = uVar4;
      }
      EnterCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar1 * 0x95] + 0x238));
      *(uint *)((&DAT_180073750)[uVar1 * 0x95] + 0x34) = param_3;
      *(uint *)((&DAT_180073750)[uVar1 * 0x95] + 0x38) = param_5;
      *(uint *)((&DAT_180073750)[uVar1 * 0x95] + 0x3c) = param_4;
      *(uint *)((&DAT_180073750)[uVar1 * 0x95] + 0x40) = param_6;
      *(uint *)((&DAT_180073750)[uVar1 * 0x95] + 0x44) = uVar2;
      if ((*(int *)((&DAT_180073750)[uVar1 * 0x95] + 0x234) != 0) &&
         (*(int *)((&DAT_180073758)[uVar1 * 0x95] + 0x14) == 0)) {
        FUN_18000d110((&DAT_180073750)[uVar1 * 0x95]);
      }
      LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar1 * 0x95] + 0x238));
    }
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x00018000371f. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  SetLastError(0xe4ae0001);
  return;
}


==================================================================

### EXPORT FUNC 180003730 (723 bytes) name=MAG_GetApproximateGray2TemperatureLUT

undefined8 MAG_GetApproximateGray2TemperatureLUT(uint param_1,longlong param_2,uint param_3)

{
  byte bVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  longlong lVar7;
  longlong lVar8;
  ulonglong uVar9;
  int iVar10;
  uint uVar11;
  ulonglong uVar12;
  int *piVar13;
  int iVar14;
  ulonglong uVar15;
  byte *pbVar16;
  int iVar17;
  
                    /* 0x3730  9  MAG_GetApproximateGray2TemperatureLUT */
  if (0x80 < param_1) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  uVar9 = (ulonglong)param_1;
  if (((((&DAT_180073758)[uVar9 * 0x95] != 0) &&
       (lVar7 = (&DAT_180073750)[uVar9 * 0x95], lVar7 != 0)) &&
      ((&DAT_180073760)[uVar9 * 0x95] != 0)) && ((&DAT_180073768)[uVar9 * 0x95] != 0)) {
    if ((param_2 == 0) || (lVar8 = 0x400, param_3 < 0x400)) {
      SetLastError(0xe4ae0001);
    }
    else if (*(int *)(lVar7 + 0x234) != 0) {
      EnterCriticalSection((LPCRITICAL_SECTION)(lVar7 + 0x238));
      lVar7 = (&DAT_180073750)[uVar9 * 0x95];
      iVar2 = *(int *)(lVar7 + 0x44ccc);
      iVar3 = *(int *)(lVar7 + 0x44cd0);
      if (*(int *)(lVar7 + 0x10) == 0) {
        uVar11 = 0;
        pbVar16 = (byte *)(lVar7 + 0x454ec);
        iVar14 = 0;
        do {
          bVar1 = *pbVar16;
          uVar15 = (ulonglong)(int)uVar11;
          if (uVar15 <= bVar1) {
            piVar13 = (int *)(param_2 + uVar15 * 4);
            for (lVar7 = (bVar1 - uVar15) + 1; lVar7 != 0; lVar7 = lVar7 + -1) {
              *piVar13 = iVar14 / 0x3ff + iVar3;
              piVar13 = piVar13 + 1;
            }
          }
          iVar14 = iVar14 + (iVar2 - iVar3);
          pbVar16 = pbVar16 + 1;
          lVar8 = lVar8 + -1;
          uVar11 = bVar1 + 1;
        } while (lVar8 != 0);
        if ((uVar11 < 0x100) && (uVar15 = (ulonglong)(int)uVar11, uVar15 < 0x100)) {
          piVar13 = (int *)(param_2 + uVar15 * 4);
          for (lVar7 = 0x100 - uVar15; lVar7 != 0; lVar7 = lVar7 + -1) {
            *piVar13 = iVar2;
            piVar13 = piVar13 + 1;
          }
        }
      }
      else {
        iVar14 = *(int *)(lVar7 + 0x18);
        iVar4 = *(int *)(lVar7 + 0x14);
        iVar5 = *(int *)(lVar7 + 0x1c);
        iVar6 = *(int *)(lVar7 + 0x20);
        uVar12 = 0;
        iVar17 = -iVar6;
        uVar15 = uVar12;
        do {
          iVar10 = (int)uVar12;
          if (iVar10 < iVar5) {
            if (iVar3 < iVar4) {
              *(int *)(param_2 + uVar15 * 4) = ((iVar4 - iVar3) * iVar10) / iVar5 + iVar3;
            }
            else {
              *(int *)(param_2 + uVar15 * 4) = iVar4;
            }
          }
          else if ((longlong)iVar6 < (longlong)uVar15) {
            if (iVar14 < iVar2) {
              *(int *)(param_2 + uVar15 * 4) = ((iVar2 - iVar14) * iVar17) / (0xff - iVar6) + iVar14
              ;
            }
            else {
              *(int *)(param_2 + uVar15 * 4) = iVar14;
            }
          }
          else {
            *(int *)(param_2 + uVar15 * 4) =
                 ((iVar17 + (iVar6 - iVar5)) * (iVar14 - iVar4)) / (iVar6 - iVar5) + iVar4;
          }
          uVar12 = (ulonglong)(iVar10 + 1U);
          iVar17 = iVar17 + 1;
          uVar15 = uVar15 + 1;
        } while ((int)(iVar10 + 1U) < 0x100);
      }
      LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar9 * 0x95] + 0x238));
      return 1;
    }
    return 0;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180003a10 (118 bytes) name=MAG_GetFilteredRaw

undefined8 MAG_GetFilteredRaw(uint param_1)

{
  longlong lVar1;
  ulonglong uVar2;
  
                    /* 0x3a10  14  MAG_GetFilteredRaw */
  if ((((param_1 < 0x81) && (uVar2 = (ulonglong)param_1, (&DAT_180073758)[uVar2 * 0x95] != 0)) &&
      (lVar1 = (&DAT_180073750)[uVar2 * 0x95], lVar1 != 0)) &&
     (((&DAT_180073760)[uVar2 * 0x95] != 0 && ((&DAT_180073768)[uVar2 * 0x95] != 0)))) {
    if (*(int *)(lVar1 + 0x234) != 0) {
      return *(undefined8 *)(lVar1 + 0x270);
    }
    SetLastError(0xe4ae0006);
    return 0;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180003a90 (149 bytes) name=MAG_GetOutputBMPdata

undefined8 MAG_GetOutputBMPdata(uint param_1,undefined8 *param_2,longlong *param_3)

{
  longlong lVar1;
  ulonglong uVar2;
  
                    /* 0x3a90  19  MAG_GetOutputBMPdata */
  if ((((param_1 < 0x81) && (uVar2 = (ulonglong)param_1, (&DAT_180073758)[uVar2 * 0x95] != 0)) &&
      (lVar1 = (&DAT_180073750)[uVar2 * 0x95], lVar1 != 0)) &&
     ((((&DAT_180073760)[uVar2 * 0x95] != 0 && ((&DAT_180073768)[uVar2 * 0x95] != 0)) &&
      ((param_2 != (undefined8 *)0x0 && (param_3 != (longlong *)0x0)))))) {
    if (*(int *)(lVar1 + 0x234) != 0) {
      *param_2 = *(undefined8 *)(lVar1 + 0x220);
      *param_3 = (&DAT_180073750)[uVar2 * 0x95] + 0xaf0;
      return 1;
    }
    SetLastError(0xe4ae0006);
    return 0;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180003b30 (315 bytes) name=MAG_GetOutputBMPdata_copy

undefined8 MAG_GetOutputBMPdata_copy(uint param_1,void *param_2,uint param_3)

{
  longlong lVar1;
  uint uVar2;
  undefined8 uVar3;
  uint uVar4;
  ulonglong uVar5;
  
                    /* 0x3b30  21  MAG_GetOutputBMPdata_copy */
  if (0x80 < param_1) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  uVar5 = (ulonglong)param_1;
  if (((((&DAT_180073758)[uVar5 * 0x95] != 0) &&
       (lVar1 = (&DAT_180073750)[uVar5 * 0x95], lVar1 != 0)) &&
      ((&DAT_180073760)[uVar5 * 0x95] != 0)) && ((&DAT_180073768)[uVar5 * 0x95] != 0)) {
    if (*(int *)(lVar1 + 0x234) == 0) {
      SetLastError(0xe4ae0006);
      return 0;
    }
    uVar2 = *(int *)(lVar1 + 0xaf8) * *(int *)(lVar1 + 0xaf4);
    uVar4 = (int)uVar2 >> 0x1f;
    uVar4 = (uVar2 ^ uVar4) - uVar4;
    if ((param_2 == (void *)0x0) || (param_3 < uVar4 + 0x428)) {
      SetLastError(0xe4ae0001);
      uVar3 = 0;
    }
    else {
      memcpy(param_2,(void *)(lVar1 + 0xaf0),0x428);
      memcpy((void *)((longlong)param_2 + 0x428),*(void **)((&DAT_180073750)[uVar5 * 0x95] + 0x220),
             (ulonglong)uVar4);
      uVar3 = 1;
    }
    return uVar3;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180003c70 (362 bytes) name=MAG_GetOutputBMPdataRGB24

undefined8 MAG_GetOutputBMPdataRGB24(uint param_1,undefined1 *param_2,uint param_3,int param_4)

{
  longlong lVar1;
  uint uVar2;
  ulonglong uVar3;
  uint uVar4;
  ulonglong uVar5;
  byte *pbVar6;
  
                    /* 0x3c70  20  MAG_GetOutputBMPdataRGB24 */
  if ((((param_1 < 0x81) && (uVar5 = (ulonglong)param_1, (&DAT_180073758)[uVar5 * 0x95] != 0)) &&
      (lVar1 = (&DAT_180073750)[uVar5 * 0x95], lVar1 != 0)) &&
     (((&DAT_180073760)[uVar5 * 0x95] != 0 && ((&DAT_180073768)[uVar5 * 0x95] != 0)))) {
    if (*(int *)(lVar1 + 0x234) == 0) {
      SetLastError(0xe4ae0006);
      return 0;
    }
    pbVar6 = *(byte **)(lVar1 + 0x220);
    uVar2 = *(int *)(lVar1 + 0xaf8) * *(int *)(lVar1 + 0xaf4);
    uVar4 = (int)uVar2 >> 0x1f;
    uVar4 = (uVar2 ^ uVar4) - uVar4;
    if ((param_2 != (undefined1 *)0x0) && (uVar4 * 3 <= param_3)) {
      if (param_4 == 0) {
        if (uVar4 != 0) {
          uVar5 = (ulonglong)uVar4;
          do {
            uVar3 = (ulonglong)*pbVar6;
            pbVar6 = pbVar6 + 1;
            uVar5 = uVar5 - 1;
            *param_2 = *(undefined1 *)(lVar1 + 0xb1a + uVar3 * 4);
            param_2[1] = *(undefined1 *)(lVar1 + 0xb19 + uVar3 * 4);
            param_2[2] = *(undefined1 *)(lVar1 + 0xb18 + uVar3 * 4);
            param_2 = param_2 + 3;
          } while (uVar5 != 0);
        }
      }
      else if (uVar4 != 0) {
        uVar5 = (ulonglong)uVar4;
        do {
          uVar3 = (ulonglong)*pbVar6;
          pbVar6 = pbVar6 + 1;
          uVar5 = uVar5 - 1;
          *param_2 = *(undefined1 *)(lVar1 + 0xb18 + uVar3 * 4);
          param_2[1] = *(undefined1 *)(lVar1 + 0xb19 + uVar3 * 4);
          param_2[2] = *(undefined1 *)(lVar1 + 0xb1a + uVar3 * 4);
          param_2 = param_2 + 3;
        } while (uVar5 != 0);
        return 1;
      }
      return 1;
    }
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180003de0 (149 bytes) name=MAG_GetOutputColorBardata

undefined8 MAG_GetOutputColorBardata(uint param_1,undefined8 *param_2,longlong *param_3)

{
  longlong lVar1;
  ulonglong uVar2;
  
                    /* 0x3de0  22  MAG_GetOutputColorBardata */
  if ((((param_1 < 0x81) && (uVar2 = (ulonglong)param_1, (&DAT_180073758)[uVar2 * 0x95] != 0)) &&
      (lVar1 = (&DAT_180073750)[uVar2 * 0x95], lVar1 != 0)) &&
     ((((&DAT_180073760)[uVar2 * 0x95] != 0 && ((&DAT_180073768)[uVar2 * 0x95] != 0)) &&
      ((param_2 != (undefined8 *)0x0 && (param_3 != (longlong *)0x0)))))) {
    if (*(int *)(lVar1 + 0x234) != 0) {
      *param_2 = *(undefined8 *)(lVar1 + 0x2b0);
      *param_3 = (&DAT_180073750)[uVar2 * 0x95] + 0xf18;
      return 1;
    }
    SetLastError(0xe4ae0006);
    return 0;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180003e80 (315 bytes) name=MAG_GetOutputColorBardata_copy

undefined8 MAG_GetOutputColorBardata_copy(uint param_1,void *param_2,uint param_3)

{
  longlong lVar1;
  uint uVar2;
  undefined8 uVar3;
  uint uVar4;
  ulonglong uVar5;
  
                    /* 0x3e80  23  MAG_GetOutputColorBardata_copy */
  if (0x80 < param_1) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  uVar5 = (ulonglong)param_1;
  if (((((&DAT_180073758)[uVar5 * 0x95] != 0) &&
       (lVar1 = (&DAT_180073750)[uVar5 * 0x95], lVar1 != 0)) &&
      ((&DAT_180073760)[uVar5 * 0x95] != 0)) && ((&DAT_180073768)[uVar5 * 0x95] != 0)) {
    if (*(int *)(lVar1 + 0x234) == 0) {
      SetLastError(0xe4ae0006);
      return 0;
    }
    uVar2 = *(int *)(lVar1 + 0xf20) * *(int *)(lVar1 + 0xf1c);
    uVar4 = (int)uVar2 >> 0x1f;
    uVar4 = (uVar2 ^ uVar4) - uVar4;
    if ((param_2 == (void *)0x0) || (param_3 < uVar4 + 0x428)) {
      SetLastError(0xe4ae0001);
      uVar3 = 0;
    }
    else {
      memcpy(param_2,(void *)(lVar1 + 0xf18),0x428);
      memcpy((void *)((longlong)param_2 + 0x428),*(void **)((&DAT_180073750)[uVar5 * 0x95] + 0x2b0),
             (ulonglong)uVar4);
      uVar3 = 1;
    }
    return uVar3;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180003fc0 (97 bytes) name=MAG_GetTemperatureData

undefined8 MAG_GetTemperatureData(uint param_1,int *param_2,ulonglong param_3,int param_4)

{
  ulonglong uVar1;
  undefined8 uVar2;
  
                    /* 0x3fc0  26  MAG_GetTemperatureData */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
    uVar2 = FUN_180017670((&DAT_180073750)[uVar1 * 0x95],param_2,param_3,param_4);
    return uVar2;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180004030 (431 bytes) name=MAG_GetTemperatureData_Raw

undefined8 MAG_GetTemperatureData_Raw(uint param_1,int *param_2,ulonglong param_3,int param_4)

{
  ushort uVar1;
  ushort uVar2;
  ushort uVar3;
  longlong lVar4;
  int iVar5;
  int iVar6;
  DWORD dwErrCode;
  ulonglong uVar7;
  ushort *puVar8;
  ulonglong uVar9;
  uint uVar10;
  ulonglong uVar11;
  
                    /* 0x4030  27  MAG_GetTemperatureData_Raw */
  if ((((param_1 < 0x81) && (uVar9 = (ulonglong)param_1, (&DAT_180073758)[uVar9 * 0x95] != 0)) &&
      (lVar4 = (&DAT_180073750)[uVar9 * 0x95], lVar4 != 0)) &&
     ((((&DAT_180073760)[uVar9 * 0x95] != 0 && ((&DAT_180073768)[uVar9 * 0x95] != 0)) &&
      ((param_2 != (int *)0x0 && (4 < (uint)param_3)))))) {
    if (*(int *)(lVar4 + 0x234) != 0) {
      puVar8 = *(ushort **)(lVar4 + 0x270);
      iVar5 = *(int *)(lVar4 + 0x44cb4);
      uVar1 = puVar8[*(uint *)(lVar4 + 0x44cc4)];
      uVar2 = puVar8[*(uint *)(lVar4 + 0x44cc0)];
      iVar6 = *(int *)(lVar4 + 0x44cb0);
      if (param_4 != 0) {
        iVar5 = FUN_180015b90(lVar4,iVar5,*(float *)(lVar4 + 0xd4));
        iVar6 = FUN_180015b90(lVar4,iVar6,*(float *)(lVar4 + 0xd4));
      }
      uVar11 = param_3 >> 2 & 0x3fffffff;
      uVar7 = (ulonglong)
              (uint)(*(int *)(&DAT_1800737bc + uVar9 * 0x4a8) * (&DAT_1800737b8)[uVar9 * 0x12a]);
      if ((uint)uVar11 <
          (uint)(*(int *)(&DAT_1800737bc + uVar9 * 0x4a8) * (&DAT_1800737b8)[uVar9 * 0x12a])) {
        uVar7 = uVar11;
      }
      uVar10 = (uint)uVar7;
      if ((uint)uVar1 < (uint)uVar2) {
        while (uVar10 != 0) {
          uVar3 = *puVar8;
          puVar8 = puVar8 + 1;
          uVar10 = (int)uVar7 - 1;
          uVar7 = (ulonglong)uVar10;
          *param_2 = (int)((ulonglong)
                           ((longlong)(int)((uint)uVar3 - (uint)uVar1) *
                           (((longlong)(iVar6 - iVar5) << 0x20) /
                           (longlong)(int)((uint)uVar2 - (uint)uVar1))) >> 0x20) + iVar5;
          param_2 = param_2 + 1;
        }
      }
      else if (uVar10 != 0) {
        for (; uVar7 != 0; uVar7 = uVar7 - 1) {
          *param_2 = iVar5;
          param_2 = param_2 + 1;
        }
      }
      return 1;
    }
    dwErrCode = 0xe4ae0005;
  }
  else {
    dwErrCode = 0xe4ae0001;
  }
  SetLastError(dwErrCode);
  return 0;
}


==================================================================

### EXPORT FUNC 1800041e0 (139 bytes) name=MAG_GetFixPara

undefined4 MAG_GetFixPara(uint param_1,void *param_2)

{
  ulonglong uVar1;
  
                    /* 0x41e0  15  MAG_GetFixPara */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     ((((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)) &&
      (param_2 != (void *)0x0)))) {
    memcpy(param_2,(void *)((&DAT_180073750)[uVar1 * 0x95] + 0xd0),0x2c);
    return *(undefined4 *)((&DAT_180073750)[uVar1 * 0x95] + 0xcc);
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180004270 (231 bytes) name=MAG_SetFixPara

ulonglong MAG_SetFixPara(uint param_1,void *param_2,undefined4 param_3)

{
  ulonglong uVar1;
  ulonglong uVar2;
  
                    /* 0x4270  57  MAG_SetFixPara */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     ((((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)) &&
      (param_2 != (void *)0x0)))) {
    EnterCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar1 * 0x95] + 0x238));
    *(undefined4 *)((&DAT_180073750)[uVar1 * 0x95] + 0xcc) = param_3;
    memcpy((void *)((&DAT_180073750)[uVar1 * 0x95] + 0xd0),param_2,0x2c);
    uVar2 = FUN_180014fe0((&DAT_180073750)[uVar1 * 0x95],
                          (float *)((&DAT_180073750)[uVar1 * 0x95] + 0xd0));
    LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar1 * 0x95] + 0x238));
  }
  else {
    SetLastError(0xe4ae0001);
    uVar2 = 0;
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 180004360 (74 bytes) name=MAG_SetEXLevel

void MAG_SetEXLevel(uint param_1,int param_2,int param_3,int param_4)

{
  ulonglong uVar1;
  
                    /* 0x4360  55  MAG_SetEXLevel */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
    FUN_1800183f0((&DAT_180073750)[uVar1 * 0x95],param_2,param_3,param_4);
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x0001800043a3. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  SetLastError(0xe4ae0001);
  return;
}


==================================================================

### EXPORT FUNC 1800043b0 (90 bytes) name=MAG_GetEXLevel

undefined4 MAG_GetEXLevel(uint param_1)

{
  ulonglong uVar1;
  
                    /* 0x43b0  12  MAG_GetEXLevel */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
    return *(undefined4 *)((&DAT_180073750)[uVar1 * 0x95] + 0x41fe8);
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180004410 (144 bytes) name=MAG_SetDetailEnhancement

void MAG_SetDetailEnhancement(uint param_1,int param_2,undefined4 param_3)

{
  ulonglong uVar1;
  
                    /* 0x4410  54  MAG_SetDetailEnhancement */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
    if ((param_2 < 0) || (0x20 < param_2)) {
      param_2 = 0;
    }
    *(undefined4 *)((&DAT_180073750)[uVar1 * 0x95] + 0x84) = param_3;
    *(int *)((&DAT_180073750)[uVar1 * 0x95] + 0x30) = param_2;
    if ((*(int *)((&DAT_180073750)[uVar1 * 0x95] + 0x234) != 0) &&
       (*(int *)((&DAT_180073758)[uVar1 * 0x95] + 0x14) == 0)) {
      FUN_18000d110((&DAT_180073750)[uVar1 * 0x95]);
      return;
    }
  }
  else {
    SetLastError(0xe4ae0001);
  }
  return;
}


==================================================================

### EXPORT FUNC 1800044a0 (155 bytes) name=MAG_FixTemperature

int MAG_FixTemperature(uint param_1,int param_2,float param_3,uint param_4,uint param_5)

{
  longlong lVar1;
  int iVar2;
  ulonglong uVar3;
  
                    /* 0x44a0  7  MAG_FixTemperature */
  if ((((param_1 < 0x81) && (uVar3 = (ulonglong)param_1, (&DAT_180073758)[uVar3 * 0x95] != 0)) &&
      (lVar1 = (&DAT_180073750)[uVar3 * 0x95], lVar1 != 0)) &&
     ((((&DAT_180073760)[uVar3 * 0x95] != 0 && ((&DAT_180073768)[uVar3 * 0x95] != 0)) &&
      ((param_4 < *(uint *)(&DAT_180073798 + uVar3 * 0x4a8) &&
       (param_5 < *(uint *)(&DAT_18007379c + uVar3 * 0x4a8))))))) {
    if (*(int *)(lVar1 + 0x234) == 0) {
      SetLastError(0xe4ae0006);
      return param_2;
    }
    iVar2 = FUN_180015b90(lVar1,param_2,param_3);
    return iVar2;
  }
  SetLastError(0xe4ae0001);
  return param_2;
}


==================================================================

### EXPORT FUNC 180004540 (91 bytes) name=MAG_GetFrameStatisticalData

longlong MAG_GetFrameStatisticalData(uint param_1)

{
  ulonglong uVar1;
  
                    /* 0x4540  16  MAG_GetFrameStatisticalData */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
    return (&DAT_180073750)[uVar1 * 0x95] + 0x44c98;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 1800045a0 (114 bytes) name=MAG_GetTemperatureProbe

int MAG_GetTemperatureProbe(uint param_1,int param_2,int param_3,int param_4)

{
  int iVar1;
  ulonglong uVar2;
  
                    /* 0x45a0  28  MAG_GetTemperatureProbe */
  if ((((param_1 < 0x81) && (uVar2 = (ulonglong)param_1, (&DAT_180073758)[uVar2 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar2 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar2 * 0x95] != 0 && ((&DAT_180073768)[uVar2 * 0x95] != 0)))) {
    iVar1 = FUN_180014e70((&DAT_180073750)[uVar2 * 0x95],
                          *(int *)(&DAT_180073798 + uVar2 * 0x4a8) * param_3 + param_2,param_4);
    return iVar1;
  }
  SetLastError(0xe4ae0001);
  return -0x80000000;
}


==================================================================

### EXPORT FUNC 180004620 (141 bytes) name=MAG_GetLineTemperatureInfo

ulonglong MAG_GetLineTemperatureInfo
                    (uint param_1,uint *param_2,ulonglong param_3,int *param_4,uint param_5,
                    uint param_6,uint param_7,uint param_8)

{
  ulonglong uVar1;
  
                    /* 0x4620  17  MAG_GetLineTemperatureInfo */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
    uVar1 = FUN_1800144c0((&DAT_180073750)[uVar1 * 0x95],param_2,param_3,param_4,param_5,param_6,
                          param_7,param_8);
    return uVar1;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 1800046b0 (115 bytes) name=MAG_GetLineTemperatureInfo2

undefined8
MAG_GetLineTemperatureInfo2
          (uint param_1,uint param_2,uint param_3,uint param_4,uint param_5,int *param_6)

{
  ulonglong uVar1;
  undefined8 uVar2;
  
                    /* 0x46b0  18  MAG_GetLineTemperatureInfo2 */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
    uVar2 = FUN_180014880((&DAT_180073750)[uVar1 * 0x95],param_2,param_3,param_4,param_5,param_6);
    return uVar2;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180004730 (156 bytes) name=MAG_GetRectTemperatureInfo

undefined8
MAG_GetRectTemperatureInfo
          (uint param_1,uint param_2,uint param_3,uint param_4,uint param_5,int *param_6)

{
  longlong lVar1;
  ulonglong uVar2;
  undefined8 uVar3;
  
                    /* 0x4730  24  MAG_GetRectTemperatureInfo */
  if (param_1 < 0x81) {
    uVar2 = (ulonglong)param_1;
    if (((((&DAT_180073758)[uVar2 * 0x95] != 0) &&
         (lVar1 = (&DAT_180073750)[uVar2 * 0x95], lVar1 != 0)) &&
        ((&DAT_180073760)[uVar2 * 0x95] != 0)) && ((&DAT_180073768)[uVar2 * 0x95] != 0)) {
      if (*(int *)(lVar1 + 0x234) != 0) {
        uVar3 = FUN_180013220(lVar1,param_2,param_3,param_4,param_5,param_6);
        return uVar3;
      }
      if (*(int *)((&DAT_180073758)[uVar2 * 0x95] + 0x14) != 0) {
        return 0;
      }
      SetLastError(0xe4ae0006);
      return 0;
    }
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 1800047d0 (1674 bytes) name=MAG_EstimateUnderArmTempFromForeheadRect

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

int MAG_EstimateUnderArmTempFromForeheadRect
              (uint param_1,uint param_2,uint param_3,ulonglong param_4,uint param_5)

{
  bool bVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  undefined8 uVar6;
  longlong lVar7;
  int *piVar8;
  int iVar9;
  char *pcVar10;
  char *pcVar11;
  ulonglong uVar12;
  bool bVar13;
  undefined1 uVar14;
  float fVar15;
  float fVar16;
  undefined1 auStackY_d8 [32];
  int local_98;
  int local_90 [6];
  char local_78 [31];
  undefined1 local_59;
  ulonglong local_58;
  
                    /* 0x47d0  6  MAG_EstimateUnderArmTempFromForeheadRect */
  local_58 = DAT_18006cea0 ^ (ulonglong)auStackY_d8;
  bVar13 = param_3 != 0x3c42f5;
  uVar12 = (ulonglong)param_1;
  iVar9 = (int)param_4;
  bVar1 = false;
  local_98 = 0;
  uVar3 = param_2;
  if (bVar13) {
    uVar3 = 0;
  }
  if (param_1 < 0x81) {
    if (((((&DAT_180073758)[uVar12 * 0x95] == 0) || ((&DAT_180073750)[uVar12 * 0x95] == 0)) ||
        ((&DAT_180073760)[uVar12 * 0x95] == 0)) || ((&DAT_180073768)[uVar12 * 0x95] == 0)) {
      SetLastError(0xe4ae0001);
      goto LAB_180004871;
    }
  }
  else {
    SetLastError(0xe4ae0001);
LAB_180004871:
    bVar1 = true;
    local_98 = 1;
    if (bVar13) {
      return 0;
    }
    param_4 = param_4 & 0xffffffff;
    uVar12 = 0;
  }
  local_90[1] = 0;
  local_90[2] = 0;
  local_90[3] = 0;
  local_90[4] = 0;
  local_90[0] = 0;
  uVar14 = 0;
  iVar4 = local_98;
  iVar2 = local_98;
  iVar5 = local_98;
  if (!bVar1) {
    if (*(int *)((&DAT_180073750)[uVar12 * 0x95] + 0x234) == 0) {
      SetLastError(0xe4ae0006);
      return -5;
    }
    if (bVar13) {
      uVar6 = FUN_180013220((&DAT_180073750)[uVar12 * 0x95],param_2,param_3,(uint)param_4,param_5,
                            local_90);
      if ((int)uVar6 == 0) {
        SetLastError(0xe4ae0001);
        return -1;
      }
      iVar2 = FUN_180014e70((&DAT_180073750)[uVar12 * 0x95],local_90[4],3);
      uVar3 = FUN_180015b90((&DAT_180073750)[uVar12 * 0x95],iVar2,
                            *(float *)((&DAT_180073750)[uVar12 * 0x95] + 0xd4));
    }
    lVar7 = (&DAT_180073750)[uVar12 * 0x95];
    iVar4 = FUN_180015b90(lVar7,*(int *)(lVar7 + 0x44cb8),*(float *)(lVar7 + 0xd4));
    uVar14 = 1;
    iVar2 = FUN_180014e70((&DAT_180073750)[uVar12 * 0x95],
                          *(uint *)((&DAT_180073750)[uVar12 * 0x95] + 0x44cc4),7);
    lVar7 = (&DAT_180073750)[uVar12 * 0x95];
    param_4 = (ulonglong)*(uint *)(lVar7 + 0x44cc4);
    iVar5 = FUN_180015b90(lVar7,iVar2,*(float *)(lVar7 + 0xd4));
    iVar2 = *(int *)(&DAT_180073800 + uVar12 * 0x4a8);
  }
  FUN_180032bb0(local_78,&DAT_180058f9c,(ulonglong)(uint)(&DAT_1800737b0)[uVar12 * 0x12a],param_4);
  lVar7 = 4;
  local_59 = 0;
  pcVar10 = local_78;
  pcVar11 = "621";
  do {
    if (lVar7 == 0) break;
    lVar7 = lVar7 + -1;
    uVar14 = *pcVar10 == *pcVar11;
    pcVar10 = pcVar10 + 1;
    pcVar11 = pcVar11 + 1;
  } while ((bool)uVar14);
  if ((bool)uVar14) {
    iVar2 = iVar2 + -12000;
  }
  else {
    lVar7 = 4;
    pcVar10 = local_78;
    pcVar11 = "620";
    do {
      if (lVar7 == 0) break;
      lVar7 = lVar7 + -1;
      uVar14 = *pcVar10 == *pcVar11;
      pcVar10 = pcVar10 + 1;
      pcVar11 = pcVar11 + 1;
    } while ((bool)uVar14);
    if (!(bool)uVar14) {
      lVar7 = 4;
      pcVar10 = local_78;
      pcVar11 = "321";
      do {
        if (lVar7 == 0) break;
        lVar7 = lVar7 + -1;
        uVar14 = *pcVar10 == *pcVar11;
        pcVar10 = pcVar10 + 1;
        pcVar11 = pcVar11 + 1;
      } while ((bool)uVar14);
      if (!(bool)uVar14) {
        lVar7 = 4;
        pcVar10 = local_78;
        pcVar11 = "210";
        do {
          if (lVar7 == 0) break;
          lVar7 = lVar7 + -1;
          uVar14 = *pcVar10 == *pcVar11;
          pcVar10 = pcVar10 + 1;
          pcVar11 = pcVar11 + 1;
        } while ((bool)uVar14);
        if (!(bool)uVar14) {
          lVar7 = 4;
          pcVar10 = local_78;
          pcVar11 = "150";
          do {
            if (lVar7 == 0) break;
            lVar7 = lVar7 + -1;
            uVar14 = *pcVar10 == *pcVar11;
            pcVar10 = pcVar10 + 1;
            pcVar11 = pcVar11 + 1;
          } while ((bool)uVar14);
          if (!(bool)uVar14) {
            lVar7 = 4;
            pcVar10 = local_78;
            pcVar11 = "143";
            do {
              if (lVar7 == 0) break;
              lVar7 = lVar7 + -1;
              uVar14 = *pcVar10 == *pcVar11;
              pcVar10 = pcVar10 + 1;
              pcVar11 = pcVar11 + 1;
            } while ((bool)uVar14);
            if (!(bool)uVar14) {
              lVar7 = 4;
              pcVar10 = local_78;
              pcVar11 = "170";
              do {
                if (lVar7 == 0) break;
                lVar7 = lVar7 + -1;
                uVar14 = *pcVar10 == *pcVar11;
                pcVar10 = pcVar10 + 1;
                pcVar11 = pcVar11 + 1;
              } while ((bool)uVar14);
              if (!(bool)uVar14) {
                lVar7 = 4;
                pcVar10 = local_78;
                pcVar11 = "120";
                do {
                  if (lVar7 == 0) break;
                  lVar7 = lVar7 + -1;
                  uVar14 = *pcVar10 == *pcVar11;
                  pcVar10 = pcVar10 + 1;
                  pcVar11 = pcVar11 + 1;
                } while ((bool)uVar14);
                if (!(bool)uVar14) {
                  lVar7 = 4;
                  pcVar10 = local_78;
                  pcVar11 = "340";
                  do {
                    if (lVar7 == 0) break;
                    lVar7 = lVar7 + -1;
                    uVar14 = *pcVar10 == *pcVar11;
                    pcVar10 = pcVar10 + 1;
                    pcVar11 = pcVar11 + 1;
                  } while ((bool)uVar14);
                  if (!(bool)uVar14) {
                    lVar7 = 4;
                    pcVar10 = local_78;
                    pcVar11 = "320";
                    do {
                      if (lVar7 == 0) break;
                      lVar7 = lVar7 + -1;
                      uVar14 = *pcVar10 == *pcVar11;
                      pcVar10 = pcVar10 + 1;
                      pcVar11 = pcVar11 + 1;
                    } while ((bool)uVar14);
                    if (!(bool)uVar14) {
                      lVar7 = 4;
                      pcVar10 = local_78;
                      pcVar11 = "211";
                      do {
                        if (lVar7 == 0) break;
                        lVar7 = lVar7 + -1;
                        uVar14 = *pcVar10 == *pcVar11;
                        pcVar10 = pcVar10 + 1;
                        pcVar11 = pcVar11 + 1;
                      } while ((bool)uVar14);
                      if (!(bool)uVar14) {
                        lVar7 = 4;
                        pcVar10 = local_78;
                        pcVar11 = "140";
                        do {
                          if (lVar7 == 0) break;
                          lVar7 = lVar7 + -1;
                          uVar14 = *pcVar10 == *pcVar11;
                          pcVar10 = pcVar10 + 1;
                          pcVar11 = pcVar11 + 1;
                        } while ((bool)uVar14);
                        if (!(bool)uVar14) {
                          lVar7 = 4;
                          pcVar10 = local_78;
                          pcVar11 = "130";
                          do {
                            if (lVar7 == 0) break;
                            lVar7 = lVar7 + -1;
                            uVar14 = *pcVar10 == *pcVar11;
                            pcVar10 = pcVar10 + 1;
                            pcVar11 = pcVar11 + 1;
                          } while ((bool)uVar14);
                          if (!(bool)uVar14) {
                            lVar7 = 4;
                            pcVar10 = local_78;
                            pcVar11 = "160";
                            do {
                              if (lVar7 == 0) break;
                              lVar7 = lVar7 + -1;
                              uVar14 = *pcVar10 == *pcVar11;
                              pcVar10 = pcVar10 + 1;
                              pcVar11 = pcVar11 + 1;
                            } while ((bool)uVar14);
                            if (!(bool)uVar14) {
                              lVar7 = 4;
                              pcVar10 = local_78;
                              pcVar11 = "100";
                              do {
                                if (lVar7 == 0) break;
                                lVar7 = lVar7 + -1;
                                uVar14 = *pcVar10 == *pcVar11;
                                pcVar10 = pcVar10 + 1;
                                pcVar11 = pcVar11 + 1;
                              } while ((bool)uVar14);
                              if (!(bool)uVar14) {
                                lVar7 = 4;
                                pcVar10 = local_78;
                                pcVar11 = "330";
                                do {
                                  if (lVar7 == 0) break;
                                  lVar7 = lVar7 + -1;
                                  uVar14 = *pcVar10 == *pcVar11;
                                  pcVar10 = pcVar10 + 1;
                                  pcVar11 = pcVar11 + 1;
                                } while ((bool)uVar14);
                                if ((bool)uVar14) {
                                  iVar2 = iVar2 + -6000;
                                }
                                else if ((uint)(&DAT_1800737b8)[uVar12 * 0x12a] < 0x280) {
                                  iVar2 = iVar2 + -8000;
                                }
                                else {
                                  iVar2 = iVar2 + -10000;
                                }
                                goto LAB_180004bbd;
                              }
                            }
                          }
                        }
                      }
                    }
                  }
                  iVar2 = iVar2 + -8000;
                  goto LAB_180004bbd;
                }
              }
            }
          }
        }
      }
    }
    iVar2 = iVar2 + -10000;
  }
LAB_180004bbd:
  if ((iVar5 <= iVar2) && (iVar5 = iVar2, iVar4 < iVar2)) {
    iVar5 = iVar4;
  }
  iVar2 = 15000;
  if ((14999 < iVar5) && (iVar2 = iVar5, 40000 < iVar5)) {
    iVar2 = 40000;
  }
  if ((!bVar13) && (iVar9 != 0)) {
    piVar8 = (int *)CONCAT44(param_5,iVar9);
    if (local_98 == 0) {
      *piVar8 = iVar2;
    }
    else {
      iVar2 = *piVar8;
    }
  }
  iVar9 = uVar3 - 500;
  if ((uVar3 - 0x6784 < 0x3e81) && ((30999 < iVar9 || (4999 < iVar9 - iVar2)))) {
    if (iVar9 < 30000) {
      fVar16 = (float)((int)((uVar3 - 0x5014) * 0x7c) / 1000 + 34000);
    }
    else if (iVar9 < 0x89e4) {
      fVar16 = (float)iVar9;
      fVar16 = ((fVar16 * _DAT_18005eabc * fVar16 * fVar16 - fVar16 * _DAT_18005eab8 * fVar16) +
               fVar16 * _DAT_18005eab4) - _DAT_18005eab0;
    }
    else {
      fVar16 = (float)(int)(uVar3 - 0x8bd8) * _DAT_18005eaac + _DAT_18005eaa8;
    }
    if (iVar2 < 25000) {
      fVar15 = (float)(25000 - iVar2) * _DAT_18005eaa4;
    }
    else {
      fVar15 = (float)(25000 - iVar2) * DAT_18005e728;
    }
    fVar16 = fVar16 + fVar15;
    if (fVar16 <= _DAT_18005eaa0) {
      if (fVar16 <= _DAT_18005ea94) {
        if (fVar16 <= _DAT_18005ea8c) {
          if (fVar16 <= _DAT_18005ea84) {
            if (fVar16 <= _DAT_18005ea7c) {
              if (fVar16 <= _DAT_18005ea74) {
                if (fVar16 <= _DAT_18005ea6c) {
                  if (fVar16 <= _DAT_18005ea64) {
                    if (fVar16 <= _DAT_18005ea5c) {
                      if (DAT_18005ea98 < fVar16) {
                        fVar16 = fVar16 + (0.0 - DAT_18005e9e8);
                      }
                    }
                    else {
                      fVar16 = fVar16 + (0.0 - DAT_18005ea9c);
                    }
                  }
                  else {
                    fVar16 = fVar16 + (0.0 - _DAT_18005ea60);
                  }
                }
                else {
                  fVar16 = fVar16 + (0.0 - _DAT_18005ea68);
                }
              }
              else {
                fVar16 = fVar16 + (0.0 - _DAT_18005ea70);
              }
            }
            else {
              fVar16 = fVar16 + (0.0 - _DAT_18005ea78);
            }
          }
          else {
            fVar16 = fVar16 + (0.0 - _DAT_18005ea80);
          }
        }
        else {
          fVar16 = fVar16 + (0.0 - _DAT_18005ea88);
        }
      }
      else {
        fVar16 = fVar16 + (0.0 - _DAT_18005ea90);
      }
    }
    else {
      fVar16 = fVar16 + (0.0 - _DAT_18005e820);
    }
    fVar16 = fVar16 + (0.0 - DAT_18005ea9c);
    if (fVar16 < DAT_18005ea98) {
      fVar16 = (fVar16 - DAT_18005ea98) * DAT_18005e704 + DAT_18005ea98;
    }
    iVar9 = (int)fVar16;
  }
  return iVar9;
}


==================================================================

### EXPORT FUNC 180004e60 (559 bytes) name=MAG_ConvertIrCorr2VisCorr

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

undefined8
MAG_ConvertIrCorr2VisCorr
          (uint param_1,int param_2,int param_3,float param_4,int *param_5,int *param_6)

{
  ulonglong uVar1;
  longlong lVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  
                    /* 0x4e60  1  MAG_ConvertIrCorr2VisCorr */
  if (param_1 < 0x81) {
    uVar1 = (ulonglong)param_1;
    lVar2 = uVar1 * 0x4a8;
    if (((((&DAT_180073758)[uVar1 * 0x95] != 0) && ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
        ((&DAT_180073760)[uVar1 * 0x95] != 0)) && ((&DAT_180073768)[uVar1 * 0x95] != 0)) {
      if (*(int *)((&DAT_180073758)[uVar1 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
        return 0;
      }
      if (((param_5 != (int *)0x0) && (param_6 != (int *)0x0)) && (0.0 <= param_4)) {
        if (((*(uint *)(&DAT_180073bac + lVar2) != 0) && (*(uint *)(&DAT_180073bb0 + lVar2) != 0))
           && ((DAT_18005e9e0 <= *(float *)(&DAT_180073bbc + lVar2) &&
               (*(float *)(&DAT_180073bbc + lVar2) <= _DAT_18005e9ec)))) {
          fVar4 = (float)param_2 - (float)(uint)(&DAT_1800737b8)[uVar1 * 0x12a] * DAT_18005e704;
          fVar5 = (float)param_3 - (float)*(uint *)(&DAT_1800737bc + lVar2) * DAT_18005e704;
          if (0.0 < param_4) {
            fVar3 = *(float *)(&DAT_180073bd0 + lVar2);
            if (DAT_18005e9e4 < fVar3) {
              if (param_4 < DAT_18005e9e4) {
                param_4 = DAT_18005e9e4;
              }
              fVar3 = (param_4 - fVar3) / (fVar3 * param_4);
              fVar4 = fVar4 + fVar3 * *(float *)(&DAT_180073bd4 + lVar2);
              fVar5 = fVar5 + fVar3 * *(float *)(&DAT_180073bd8 + lVar2);
            }
          }
          fVar5 = fVar5 / *(float *)(&DAT_180073bbc + lVar2);
          fVar4 = fVar4 / *(float *)(&DAT_180073bbc + lVar2);
          fVar3 = ((fVar5 - *(float *)(&DAT_180073bc8 + lVar2) * fVar4) -
                  (float)*(int *)(&DAT_180073bb8 + lVar2)) +
                  (float)(*(uint *)(&DAT_180073bb0 + lVar2) >> 1) + DAT_18005ea58;
          *param_5 = (int)(((*(float *)(&DAT_180073bc8 + lVar2) * fVar5 + fVar4) -
                           (float)*(int *)(&DAT_180073bb4 + lVar2)) +
                           (float)(*(uint *)(&DAT_180073bac + lVar2) >> 1) + DAT_18005ea58);
          *param_6 = (int)fVar3;
          return 1;
        }
        SetLastError(0xe4ae000b);
        return 0;
      }
    }
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180005090 (566 bytes) name=MAG_ConvertVisCorr2IrCorr

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

undefined8
MAG_ConvertVisCorr2IrCorr
          (uint param_1,int param_2,int param_3,float param_4,int *param_5,int *param_6)

{
  ulonglong uVar1;
  longlong lVar2;
  float fVar3;
  float fVar4;
  float fVar5;
  
                    /* 0x5090  2  MAG_ConvertVisCorr2IrCorr */
  if (param_1 < 0x81) {
    uVar1 = (ulonglong)param_1;
    lVar2 = uVar1 * 0x4a8;
    if (((((&DAT_180073758)[uVar1 * 0x95] != 0) && ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
        ((&DAT_180073760)[uVar1 * 0x95] != 0)) && ((&DAT_180073768)[uVar1 * 0x95] != 0)) {
      if (*(int *)((&DAT_180073758)[uVar1 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
        return 0;
      }
      if (((*(uint *)(&DAT_180073bac + lVar2) == 0) || (*(uint *)(&DAT_180073bb0 + lVar2) == 0)) ||
         ((*(float *)(&DAT_180073bbc + lVar2) < DAT_18005e9e0 ||
          (_DAT_18005e9ec < *(float *)(&DAT_180073bbc + lVar2))))) {
        SetLastError(0xe4ae000b);
        return 0;
      }
      if (((param_5 != (int *)0x0) && (param_6 != (int *)0x0)) && (0.0 <= param_4)) {
        fVar4 = ((float)param_2 - (float)*(uint *)(&DAT_180073bac + lVar2) * DAT_18005e704) +
                (float)*(int *)(&DAT_180073bb4 + lVar2);
        fVar3 = ((float)param_3 - (float)*(uint *)(&DAT_180073bb0 + lVar2) * DAT_18005e704) +
                (float)*(int *)(&DAT_180073bb8 + lVar2);
        fVar5 = (*(float *)(&DAT_180073bc8 + lVar2) * fVar4 + fVar3) *
                *(float *)(&DAT_180073bbc + lVar2);
        fVar3 = (fVar4 - *(float *)(&DAT_180073bc8 + lVar2) * fVar3) *
                *(float *)(&DAT_180073bbc + lVar2);
        if (0.0 < param_4) {
          fVar4 = *(float *)(&DAT_180073bd0 + lVar2);
          if (DAT_18005e9e4 < fVar4) {
            if (param_4 < DAT_18005e9e4) {
              param_4 = DAT_18005e9e4;
            }
            fVar4 = (param_4 - fVar4) / (fVar4 * param_4);
            fVar3 = fVar3 + (0.0 - fVar4 * *(float *)(&DAT_180073bd4 + lVar2));
            fVar5 = fVar5 + (0.0 - fVar4 * *(float *)(&DAT_180073bd8 + lVar2));
          }
        }
        fVar4 = (float)(*(uint *)(&DAT_1800737bc + lVar2) >> 1) + fVar5 + DAT_18005ea58;
        *param_5 = (int)((float)((uint)(&DAT_1800737b8)[uVar1 * 0x12a] >> 1) + fVar3 + DAT_18005ea58
                        );
        *param_6 = (int)fVar4;
        return 1;
      }
    }
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 1800052d0 (115 bytes) name=MAG_GetEllipseTemperatureInfo

undefined8
MAG_GetEllipseTemperatureInfo
          (uint param_1,uint param_2,uint param_3,uint param_4,uint param_5,int *param_6)

{
  ulonglong uVar1;
  undefined8 uVar2;
  
                    /* 0x52d0  13  MAG_GetEllipseTemperatureInfo */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
    uVar2 = FUN_180013510((&DAT_180073750)[uVar1 * 0x95],param_2,param_3,param_4,param_5,param_6);
    return uVar2;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180005350 (97 bytes) name=MAG_GetRgnTemperatureInfo

undefined8 MAG_GetRgnTemperatureInfo(uint param_1,uint *param_2,uint param_3,int *param_4)

{
  ulonglong uVar1;
  undefined8 uVar2;
  
                    /* 0x5350  25  MAG_GetRgnTemperatureInfo */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
    uVar2 = FUN_180014c50((&DAT_180073750)[uVar1 * 0x95],param_2,param_3,param_4);
    return uVar2;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 1800053c0 (88 bytes) name=MAG_SaveBMP

undefined8 MAG_SaveBMP(uint param_1,int param_2,short *param_3)

{
  ulonglong uVar1;
  undefined8 uVar2;
  
                    /* 0x53c0  48  MAG_SaveBMP */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
    uVar2 = FUN_180012b30((&DAT_180073750)[uVar1 * 0x95],param_2,param_3);
    return uVar2;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180005420 (83 bytes) name=MAG_LockFrame

void MAG_LockFrame(uint param_1)

{
  ulonglong uVar1;
  
                    /* 0x5420  46  MAG_LockFrame */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
                    /* WARNING: Could not recover jumptable at 0x000180005460. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    EnterCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar1 * 0x95] + 0x238));
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x00018000546c. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  SetLastError(0xe4ae0001);
  return;
}


==================================================================

### EXPORT FUNC 180005480 (83 bytes) name=MAG_UnLockFrame

void MAG_UnLockFrame(uint param_1)

{
  ulonglong uVar1;
  
                    /* 0x5480  65  MAG_UnLockFrame */
  if ((((param_1 < 0x81) && (uVar1 = (ulonglong)param_1, (&DAT_180073758)[uVar1 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar1 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar1 * 0x95] != 0 && ((&DAT_180073768)[uVar1 * 0x95] != 0)))) {
                    /* WARNING: Could not recover jumptable at 0x0001800054c0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar1 * 0x95] + 0x238));
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x0001800054cc. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  SetLastError(0xe4ae0001);
  return;
}


==================================================================

### EXPORT FUNC 1800054e0 (940 bytes) name=MAG_SaveDDT

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

bool MAG_SaveDDT(uint param_1,short *param_2)

{
  int *piVar1;
  short sVar2;
  ulonglong uVar3;
  int iVar4;
  undefined **ppuVar5;
  longlong lVar6;
  HMODULE pHVar7;
  longlong *plVar8;
  undefined8 *puVar9;
  longlong *plVar10;
  int iVar11;
  short *psVar12;
  short *psVar13;
  void *pvVar14;
  ulonglong uVar15;
  undefined1 uVar16;
  undefined1 auStackY_438 [32];
  void *local_3f8;
  longlong local_3f0;
  longlong local_3e8;
  longlong *local_3e0;
  longlong local_3d8 [2];
  CDialog local_3c8 [912];
  ulonglong local_38;
  
                    /* 0x54e0  49  MAG_SaveDDT */
  local_38 = DAT_18006cea0 ^ (ulonglong)auStackY_438;
  uVar15 = (ulonglong)param_1;
  if (0x80 < param_1) {
    SetLastError(0xe4ae0001);
    return false;
  }
  if (((((&DAT_180073758)[uVar15 * 0x95] == 0) || ((&DAT_180073750)[uVar15 * 0x95] == 0)) ||
      ((&DAT_180073760)[uVar15 * 0x95] == 0)) || ((&DAT_180073768)[uVar15 * 0x95] == 0)) {
    SetLastError(0xe4ae0001);
    return false;
  }
  if (*(int *)((&DAT_180073750)[uVar15 * 0x95] + 0x234) == 0) {
    SetLastError(0xe4ae0006);
    return false;
  }
  ppuVar5 = FUN_18001fcc0();
  if (ppuVar5 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar6 = (**(code **)(*ppuVar5 + 0x18))(ppuVar5);
  pvVar14 = (void *)(lVar6 + 0x18);
  iVar11 = 0;
  local_3f8 = pvVar14;
  if (param_2 != (short *)0x0) {
    if (((ulonglong)param_2 & 0xffffffffffff0000) == 0) {
      pHVar7 = (HMODULE)FUN_18001fcac();
      if (pHVar7 != (HMODULE)0x0) {
        FUN_18000af50((longlong *)&local_3f8,pHVar7,(uint)param_2 & 0xffff);
        pvVar14 = local_3f8;
      }
      goto LAB_180005623;
    }
    lVar6 = -1;
    psVar12 = param_2;
    do {
      if (lVar6 == 0) break;
      lVar6 = lVar6 + -1;
      sVar2 = *psVar12;
      psVar12 = psVar12 + 1;
    } while (sVar2 != 0);
    iVar11 = ~(uint)lVar6 - 1;
  }
  FUN_18000b480((longlong *)&local_3f8,param_2,iVar11);
  pvVar14 = local_3f8;
LAB_180005623:
  if (*(int *)((longlong)pvVar14 + -0x10) == 0) {
    FUN_18001f670(local_3c8,0,&DAT_18006e870,(short *)0x0,6,
                  u_Magnity_Device_Dependent_Tempera_18006e880,(CWnd *)0x0,0);
    lVar6 = FUN_18001f450(local_3c8);
    if (lVar6 != 1) {
      SetLastError(0xe4ae0003);
      FUN_18001f5c8((CWnd *)local_3c8);
      LOCK();
      piVar1 = (int *)((longlong)pvVar14 + -8);
      iVar11 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
      if (iVar11 + -1 < 1) {
        (**(code **)(**(longlong **)((longlong)pvVar14 + -0x18) + 8))();
      }
      return false;
    }
    plVar8 = FUN_18001f980((longlong)local_3c8,local_3d8);
    FUN_18000b390((longlong *)&local_3f8,plVar8);
    LOCK();
    piVar1 = (int *)(local_3d8[0] + -8);
    iVar11 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    uVar16 = iVar11 == 1;
    if (iVar11 + -1 < 1) {
      (**(code **)(**(longlong **)(local_3d8[0] + -0x18) + 8))();
    }
    plVar8 = FUN_18000a7c0((longlong *)&local_3f8,&local_3e8,4);
    plVar8 = FUN_18000a950(plVar8,&local_3f0,1);
    lVar6 = 2;
    psVar12 = (short *)*plVar8;
    psVar13 = &DAT_180058fe0;
    do {
      if (lVar6 == 0) break;
      lVar6 = lVar6 + -1;
      uVar16 = *psVar12 == *psVar13;
      psVar12 = psVar12 + 1;
      psVar13 = psVar13 + 1;
    } while ((bool)uVar16);
    LOCK();
    piVar1 = (int *)(local_3f0 + -8);
    iVar11 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar11 + -1 < 1) {
      (**(code **)(**(longlong **)(local_3f0 + -0x18) + 8))();
    }
    LOCK();
    piVar1 = (int *)(local_3e8 + -8);
    iVar11 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar11 + -1 < 1) {
      (**(code **)(**(longlong **)(local_3e8 + -0x18) + 8))();
    }
    if (!(bool)uVar16) {
      FUN_18000a600((longlong *)&local_3f8,".ddt");
    }
    FUN_18001f5c8((CWnd *)local_3c8);
    pvVar14 = local_3f8;
  }
  EnterCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar15 * 0x95] + 0x238));
  plVar8 = (longlong *)((longlong)pvVar14 + -0x18);
  puVar9 = (undefined8 *)(**(code **)(**(longlong **)((longlong)pvVar14 + -0x18) + 0x20))();
  if ((*(int *)((longlong)pvVar14 + -8) < 0) || (puVar9 != (undefined8 *)*plVar8)) {
    plVar10 = (longlong *)(**(code **)*puVar9)(puVar9,*(undefined4 *)((longlong)pvVar14 + -0x10),2);
    if (plVar10 == (longlong *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000ad70();
    }
    *(undefined4 *)(plVar10 + 1) = *(undefined4 *)((longlong)pvVar14 + -0x10);
    uVar3 = (longlong)(*(int *)((longlong)pvVar14 + -0x10) + 1) * 2;
    FUN_180032c60((ulonglong *)(plVar10 + 3),uVar3,pvVar14,uVar3);
  }
  else {
    LOCK();
    *(int *)((longlong)pvVar14 + -8) = *(int *)((longlong)pvVar14 + -8) + 1;
    UNLOCK();
    plVar10 = plVar8;
  }
  local_3e0 = plVar10 + 3;
  iVar4 = FUN_1800081d0(param_1,(void *)0x0,(longlong *)&local_3e0);
  LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar15 * 0x95] + 0x238));
  LOCK();
  piVar1 = (int *)((longlong)pvVar14 + -8);
  iVar11 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar11 + -1 < 1) {
    (**(code **)(*(longlong *)*plVar8 + 8))((longlong *)*plVar8,plVar8);
  }
  return 0 < iVar4;
}


==================================================================

### EXPORT FUNC 180005890 (246 bytes) name=MAG_SaveDDT2Buffer

int MAG_SaveDDT2Buffer(uint param_1,void *param_2,ulonglong param_3)

{
  longlong lVar1;
  int iVar2;
  longlong *plVar3;
  DWORD dwErrCode;
  ulonglong uVar4;
  longlong local_res20;
  
                    /* 0x5890  50  MAG_SaveDDT2Buffer */
  uVar4 = (ulonglong)param_1;
  if ((((param_1 < 0x81) && ((&DAT_180073758)[uVar4 * 0x95] != 0)) &&
      (lVar1 = (&DAT_180073750)[uVar4 * 0x95], lVar1 != 0)) &&
     ((((&DAT_180073760)[uVar4 * 0x95] != 0 && ((&DAT_180073768)[uVar4 * 0x95] != 0)) &&
      ((param_2 != (void *)0x0 &&
       ((ulonglong)
        (uint)(*(int *)(&DAT_18007379c + uVar4 * 0x4a8) * *(int *)(&DAT_180073798 + uVar4 * 0x4a8))
        * 2 + 0x40c <= (param_3 & 0xffffffff))))))) {
    if (*(int *)(lVar1 + 0x234) != 0) {
      EnterCriticalSection((LPCRITICAL_SECTION)(lVar1 + 0x238));
      plVar3 = FUN_18000b610(&local_res20,(short *)&DAT_18005911c);
      iVar2 = FUN_1800081d0(param_1,param_2,plVar3);
      LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar4 * 0x95] + 0x238));
      if (iVar2 < 1) {
        return 0;
      }
      return iVar2;
    }
    dwErrCode = 0xe4ae0006;
  }
  else {
    dwErrCode = 0xe4ae0001;
  }
  SetLastError(dwErrCode);
  return 0;
}


==================================================================

### EXPORT FUNC 180005990 (675 bytes) name=MAG_LoadDDT

ulonglong MAG_LoadDDT(uint param_1,undefined8 param_2,LPCWSTR param_3,undefined *param_4,
                     undefined8 param_5)

{
  DWORD DVar1;
  undefined8 uVar2;
  __uint64 _Var3;
  LPVOID pvVar4;
  ulonglong uVar5;
  longlong lVar6;
  size_t sVar7;
  longlong local_188 [4];
  undefined8 local_168 [3];
  undefined8 local_150;
  int local_148;
  DWORD local_144 [35];
  int local_b8;
  int local_b4 [39];
  
                    /* 0x5990  37  MAG_LoadDDT */
  local_150 = 0xfffffffffffffffe;
  uVar5 = (ulonglong)param_1;
  if (0x80 < param_1) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  lVar6 = uVar5 * 0x4a8;
  if (((((&DAT_180073758)[uVar5 * 0x95] == 0) || ((&DAT_180073750)[uVar5 * 0x95] == 0)) ||
      ((&DAT_180073760)[uVar5 * 0x95] == 0)) || ((&DAT_180073768)[uVar5 * 0x95] == 0)) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  if (*(int *)((&DAT_180073758)[uVar5 * 0x95] + 0x14) != 0) {
    SetLastError(0xe4ae0003);
    return 0;
  }
  FUN_180020138(local_188);
  uVar2 = FUN_180020a6c((longlong)local_188,param_3,0x30,0);
  if ((int)uVar2 == 0) {
    SetLastError(0xe4ae0009);
    FUN_1800203a4((CFile *)local_188);
    return 0;
  }
  _Var3 = CFile::GetLength((CFile *)local_188);
  sVar7 = _Var3 & 0xffffffff;
  if (0x600374 < (uint)_Var3) {
    sVar7 = 0x600374;
  }
  if (*(LPVOID *)(&DAT_180073788 + lVar6) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar6));
    *(undefined8 *)(&DAT_180073788 + lVar6) = 0;
  }
  pvVar4 = thunk_FUN_18001eb74(sVar7);
  *(LPVOID *)(&DAT_180073788 + lVar6) = pvVar4;
  if (pvVar4 == (LPVOID)0x0) {
    CFile::Close((CFile *)local_188);
    SetLastError(0xe4ae0002);
    FUN_1800203a4((CFile *)local_188);
    return 0;
  }
  FUN_18001ef2c(local_168);
  _Var3 = CFile::GetLength((CFile *)local_188);
  CFile::Seek((CFile *)local_188,_Var3 - 0x98,0);
  local_b8 = 0;
  FUN_1800357d0((ulonglong *)local_b4,0,0x94);
  FUN_18001fd6c((longlong)local_188,&local_b8,0x98);
  if (local_b8 == 0x5bb5b57b) {
    CFile::Seek((CFile *)local_188,(longlong)local_b4[0],0);
    local_148 = 0;
    FUN_1800357d0((ulonglong *)local_144,0,0x84);
    FUN_18001fd6c((longlong)local_188,&local_148,0x88);
    if (local_148 == 0x5bb5b55b) goto LAB_180005bac;
  }
  (**(code **)(local_188[0] + 0x50))(local_188,0,0);
  local_144[0] = (DWORD)sVar7;
LAB_180005bac:
  DVar1 = FUN_18001fd6c((longlong)local_188,*(LPVOID *)(&DAT_180073788 + lVar6),local_144[0]);
  FUN_18001ef94();
  CFile::Close((CFile *)local_188);
  uVar5 = MAG_LoadBufferedDDT(param_1,param_2,*(void **)(&DAT_180073788 + lVar6),(ulonglong)DVar1,
                              param_4,param_5);
  FUN_1800203a4((CFile *)local_188);
  return uVar5 & 0xffffffff;
}


==================================================================

### EXPORT FUNC 180005c50 (24 bytes) name=Unwind@180005c50

void Unwind_180005c50(undefined8 param_1,longlong param_2)

{
  FUN_1800203a4((CFile *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 180005c70 (24 bytes) name=Unwind@180005c70

void Unwind_180005c70(void)

{
  thunk_FUN_18001ef94();
  return;
}


==================================================================

### EXPORT FUNC 180005c90 (57 bytes) name=Catch@180005c90

undefined * Catch_180005c90(undefined8 param_1,longlong param_2)

{
  *(undefined8 *)(param_2 + 0x58) = *(undefined8 *)(param_2 + 0x60);
  CFile::Close((CFile *)(param_2 + 0x30));
  SetLastError(0xe4ae0009);
  return &DAT_180005c04;
}


==================================================================

### EXPORT FUNC 180005cd0 (1660 bytes) name=MAG_LoadBufferedDDT

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
MAG_LoadBufferedDDT(uint param_1,ulonglong param_2,void *param_3,ulonglong param_4,
                   undefined *param_5,undefined8 param_6)

{
  uint uVar1;
  longlong lVar2;
  int iVar3;
  DWORD dwErrCode;
  uint *in_RDX;
  ulonglong uVar4;
  ulonglong uVar5;
  longlong lVar6;
  undefined8 uVar7;
  undefined1 auStackY_428 [32];
  uint local_3f8;
  uint local_3f4;
  uint local_3f0;
  uint local_3ec;
  uint local_3e8;
  uint local_3e4;
  undefined4 local_3e0;
  undefined4 local_3dc;
  undefined4 local_3d8;
  undefined4 local_3d4;
  int local_3c8;
  int iStack_3c4;
  uint local_3c0;
  uint uStack_3bc;
  uint local_3b8;
  undefined4 local_3b4;
  int local_3b0;
  undefined4 local_3ac;
  undefined4 local_3a8;
  undefined4 local_3a4;
  undefined4 local_3a0;
  undefined4 local_39c;
  char local_398 [32];
  char local_378 [32];
  undefined8 local_358;
  undefined4 local_350;
  undefined4 local_34c;
  undefined8 local_348;
  undefined8 local_340;
  CHAR local_338 [556];
  undefined4 local_10c;
  undefined4 local_104;
  undefined4 local_100;
  undefined4 local_fc;
  uint local_f8;
  undefined4 local_f4;
  undefined4 local_f0;
  undefined4 local_ec;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined4 local_d8;
  undefined4 local_d4;
  undefined4 local_74;
  undefined4 local_70;
  int local_6c;
  undefined4 local_68;
  int local_64;
  int local_60;
  int local_5c;
  int local_58;
  ulonglong local_48;
  
                    /* 0x5cd0  36  MAG_LoadBufferedDDT */
  local_48 = DAT_18006cea0 ^ (ulonglong)auStackY_428;
  uVar4 = param_4 & 0xffffffff;
  uVar5 = (ulonglong)param_1;
  if (param_1 < 0x81) {
    lVar6 = uVar5 * 0x4a8;
    if (((((((&DAT_180073758)[uVar5 * 0x95] != 0) && ((&DAT_180073750)[uVar5 * 0x95] != 0)) &&
          ((&DAT_180073760)[uVar5 * 0x95] != 0)) &&
         (((&DAT_180073768)[uVar5 * 0x95] != 0 && (in_RDX != (uint *)0x0)))) && ((*in_RDX & 3) == 0)
        ) && ((((in_RDX[2] & 3) == 0 && ((in_RDX[4] & 3) == 0)) && (*in_RDX <= in_RDX[2])))) {
      if (((((in_RDX[1] <= in_RDX[3]) && (in_RDX[1] != 0)) && (in_RDX[3] != 0)) &&
          ((in_RDX[5] != 0 && (param_3 != (void *)0x0)))) && (0x374 < (uint)param_4)) {
        if (*(int *)((&DAT_180073758)[uVar5 * 0x95] + 0x14) == 0) {
          *(undefined8 *)(&DAT_180073770 + lVar6) = param_6;
          memcpy(&local_3c8,param_3,0x374);
          if (local_3c8 == 0x374) {
            if ((local_3c0 != *in_RDX) || (uStack_3bc != in_RDX[1])) {
              *in_RDX = local_3c0;
              in_RDX[2] = local_3c0;
              in_RDX[4] = 0x10;
              in_RDX[1] = uStack_3bc;
              in_RDX[3] = uStack_3bc;
              in_RDX[5] = uStack_3bc;
            }
            *(uint *)(&DAT_180073798 + lVar6) = *in_RDX;
            *(uint *)(&DAT_18007379c + lVar6) = in_RDX[1];
            *(uint *)(&DAT_1800737a0 + lVar6) = in_RDX[2];
            *(uint *)(&DAT_1800737a4 + lVar6) = in_RDX[3];
            *(uint *)(&DAT_1800737a8 + lVar6) = in_RDX[4];
            *(uint *)(&DAT_1800737ac + lVar6) = in_RDX[5];
            if ((((iStack_3c4 == 0x10003) || (iStack_3c4 == 0x10002)) || (iStack_3c4 == 0x10000)) ||
               (iStack_3c4 == 0x10001)) {
              if ((DAT_180073744 != 0) && (local_58 != DAT_180073744)) {
                dwErrCode = 0xe4ae000c;
                goto LAB_180006322;
              }
              if ((ulonglong)(uStack_3bc * local_3c0) * 2 + 0x374 <= uVar4) {
                *(int *)(&DAT_1800737b4 + lVar6) = local_58;
                (&DAT_1800737b0)[uVar5 * 0x12a] = local_350;
                FUN_1800357d0((ulonglong *)(&DAT_1800737b8 + uVar5 * 0x12a),0,0x48);
                (&DAT_1800737b8)[uVar5 * 0x12a] = *in_RDX;
                *(uint *)(&DAT_1800737bc + lVar6) = in_RDX[1];
                *(uint *)(&DAT_1800737f8 + lVar6) = in_RDX[2];
                uVar1 = in_RDX[3];
                *(undefined4 *)(&DAT_1800737f0 + lVar6) = 1;
                *(uint *)(&DAT_1800737fc + lVar6) = uVar1;
                *(undefined4 *)(&DAT_1800737f4 + lVar6) = 1;
                *(undefined4 *)(&DAT_1800737c0 + lVar6) = local_3a0;
                *(undefined4 *)(&DAT_1800737c4 + lVar6) = local_39c;
                strncpy(&DAT_1800737c8 + lVar6,local_378,0x20);
                (&DAT_1800737e7)[lVar6] = 0;
                strncpy(&DAT_1800737e8 + lVar6,local_398,8);
                *(undefined8 *)(&DAT_180073818 + lVar6) = local_348;
                *(int *)(&DAT_180073800 + lVar6) = local_3b0;
                *(undefined8 *)(&DAT_180073820 + lVar6) = local_340;
                *(undefined4 *)(&DAT_180073828 + lVar6) = local_34c;
                *(undefined4 *)(&DAT_180073804 + lVar6) = local_3ac;
                uVar7 = 0x374;
                *(undefined4 *)(&DAT_180073808 + lVar6) = local_3a8;
                (&DAT_1800737ef)[lVar6] = 0;
                *(undefined4 *)(&DAT_18007380c + lVar6) = local_3a4;
                *(undefined8 *)(&DAT_180073810 + lVar6) = local_358;
                memcpy((void *)(lVar6 + 0x18007382c),&local_3c8,0x374);
                local_3f4 = in_RDX[1];
                local_3f8 = *in_RDX;
                local_3f0 = in_RDX[2];
                local_3ec = in_RDX[3];
                local_3e8 = in_RDX[4];
                local_3e4 = in_RDX[5];
                local_3e0 = 4;
                local_3dc = 1;
                *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 8) = 0;
                local_3d8 = 1;
                *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xc) = 0;
                local_3d4 = 5;
                *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x70) = 1;
                *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x8c) = 1;
                *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x6c) = 1;
                if (0x10001 < iStack_3c4) {
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x24) = local_dc;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x48) = local_d8;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x4c) = local_d4;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x10) = local_f0;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x14) = local_ec;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x18) = local_e8;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x1c) = local_e4;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x20) = local_e0;
                  lVar2 = (&DAT_180073750)[uVar5 * 0x95];
                  *(undefined4 *)(&DAT_180073780 + lVar6) = local_10c;
                  FUN_18000d5f0(lVar2,local_10c);
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xd4) = local_104;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xd8) = local_100;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xf4) = local_fc;
                  param_2 = (ulonglong)local_f8;
                  *(uint *)((&DAT_180073750)[uVar5 * 0x95] + 0xf8) = local_f8;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xd0) = local_f4;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xdc) = 0x3ecccccd;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xe0) = 0x41a00000;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xe4) = 0;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xe8) = 0;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xec) = 0;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xf0) = 0;
                }
                FUN_180014fe0((&DAT_180073750)[uVar5 * 0x95],
                              (float *)((&DAT_180073750)[uVar5 * 0x95] + 0xd0));
                iVar3 = FUN_18000bce0((&DAT_180073750)[uVar5 * 0x95],&local_3f8);
                if (iVar3 != 0) {
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 100) = local_68;
                  FUN_180015500((&DAT_180073750)[uVar5 * 0x95],local_64);
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xa4) = local_74;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0xa8) = local_70;
                  *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x5c) = local_3ac;
                  *(int *)((&DAT_180073750)[uVar5 * 0x95] + 0x60) = local_3b0;
                  if ((local_60 == 0) || (local_5c == 0)) {
                    *(undefined4 *)((&DAT_180073750)[uVar5 * 0x95] + 0x54) = local_3ac;
                    local_5c = local_3b0;
                  }
                  else {
                    *(int *)((&DAT_180073750)[uVar5 * 0x95] + 0x54) = local_60;
                  }
                  *(int *)((&DAT_180073750)[uVar5 * 0x95] + 0x58) = local_5c;
                  FUN_180018a20((&DAT_180073750)[uVar5 * 0x95],local_338,uVar7,param_4);
                  uVar7 = FUN_180018d50((&DAT_180073750)[uVar5 * 0x95],local_6c,local_3b8,local_3b4)
                  ;
                  if ((int)uVar7 != 0) {
                    FUN_18000ca30((&DAT_180073750)[uVar5 * 0x95],param_2,1,1,1);
                    if (param_5 != (undefined *)0x0) {
                      (*(code *)param_5)(uVar5,local_3b0,0,0);
                    }
                    return 1;
                  }
                }
                goto LAB_180005dc9;
              }
            }
            goto LAB_18000631d;
          }
        }
LAB_180005dc9:
        dwErrCode = 0xe4ae0003;
        goto LAB_180006322;
      }
    }
  }
LAB_18000631d:
  dwErrCode = 0xe4ae0001;
LAB_180006322:
  SetLastError(dwErrCode);
  return 0;
}


==================================================================

### EXPORT FUNC 180006350 (877 bytes) name=MAG_LocalStorageAviStart

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined4 MAG_LocalStorageAviStart(uint param_1,short *param_2,uint param_3)

{
  int *piVar1;
  short sVar2;
  undefined4 uVar3;
  undefined **ppuVar4;
  longlong lVar5;
  HMODULE pHVar6;
  longlong lVar7;
  longlong *plVar8;
  int iVar9;
  ulonglong uVar10;
  longlong lVar11;
  short *psVar12;
  short *psVar13;
  ulonglong uVar14;
  undefined1 uVar15;
  undefined1 auStackY_438 [32];
  longlong local_3f8;
  longlong local_3f0;
  longlong local_3e8;
  longlong local_3e0;
  CDialog local_3d8 [912];
  ulonglong local_48;
  
                    /* 0x6350  39  MAG_LocalStorageAviStart */
  local_48 = DAT_18006cea0 ^ (ulonglong)auStackY_438;
  uVar14 = (ulonglong)param_3;
  if (0x80 < param_1) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  uVar10 = (ulonglong)param_1;
  lVar11 = uVar10 * 0x4a8;
  if (((((&DAT_180073758)[uVar10 * 0x95] == 0) || ((&DAT_180073750)[uVar10 * 0x95] == 0)) ||
      ((&DAT_180073760)[uVar10 * 0x95] == 0)) || ((&DAT_180073768)[uVar10 * 0x95] == 0)) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  if (*(int *)(&DAT_180073778 + lVar11) == 0) {
    SetLastError(0xe4ae0006);
    return 0;
  }
  if (*(int *)((&DAT_180073760)[uVar10 * 0x95] + 0x44) != 0) {
    SetLastError(0xe4ae000a);
    return 0;
  }
  ppuVar4 = FUN_18001fcc0();
  if (ppuVar4 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar5 = (**(code **)(*ppuVar4 + 0x18))();
  lVar5 = lVar5 + 0x18;
  local_3f8 = lVar5;
  if (param_2 == (short *)0x0) {
    iVar9 = 0;
  }
  else {
    if (((ulonglong)param_2 & 0xffffffffffff0000) == 0) {
      pHVar6 = (HMODULE)FUN_18001fcac();
      if (pHVar6 != (HMODULE)0x0) {
        FUN_18000af50(&local_3f8,pHVar6,(uint)param_2 & 0xffff);
        lVar5 = local_3f8;
      }
      goto LAB_1800064a6;
    }
    lVar5 = -1;
    psVar12 = param_2;
    do {
      if (lVar5 == 0) break;
      lVar5 = lVar5 + -1;
      sVar2 = *psVar12;
      psVar12 = psVar12 + 1;
    } while (sVar2 != 0);
    iVar9 = ~(uint)lVar5 - 1;
  }
  FUN_18000b480(&local_3f8,param_2,iVar9);
  lVar5 = local_3f8;
LAB_1800064a6:
  if (*(int *)(lVar5 + -0x10) == 0) {
    FUN_18001f670(local_3d8,0,&DAT_180059048,(short *)0x0,6,
                  L"AVI Files(*.avi)|*.avi|All Files(*.*)|*.*||",(CWnd *)0x0,0);
    lVar7 = FUN_18001f450(local_3d8);
    if (lVar7 != 1) {
      SetLastError(0xe4ae0003);
      FUN_18001f5c8((CWnd *)local_3d8);
      LOCK();
      piVar1 = (int *)(lVar5 + -8);
      iVar9 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
      if (iVar9 + -1 < 1) {
        (**(code **)(**(longlong **)(lVar5 + -0x18) + 8))();
      }
      return 0;
    }
    plVar8 = FUN_18001f980((longlong)local_3d8,&local_3e0);
    FUN_18000b390(&local_3f8,plVar8);
    LOCK();
    piVar1 = (int *)(local_3e0 + -8);
    iVar9 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    uVar15 = iVar9 == 1;
    if (iVar9 + -1 < 1) {
      (**(code **)(**(longlong **)(local_3e0 + -0x18) + 8))();
    }
    plVar8 = FUN_18000a7c0(&local_3f8,&local_3e8,4);
    plVar8 = FUN_18000a950(plVar8,&local_3f0,1);
    lVar5 = 2;
    psVar12 = (short *)*plVar8;
    psVar13 = &DAT_180058fe0;
    do {
      if (lVar5 == 0) break;
      lVar5 = lVar5 + -1;
      uVar15 = *psVar12 == *psVar13;
      psVar12 = psVar12 + 1;
      psVar13 = psVar13 + 1;
    } while ((bool)uVar15);
    LOCK();
    piVar1 = (int *)(local_3f0 + -8);
    iVar9 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar9 + -1 < 1) {
      (**(code **)(**(longlong **)(local_3f0 + -0x18) + 8))();
    }
    LOCK();
    piVar1 = (int *)(local_3e8 + -8);
    iVar9 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar9 + -1 < 1) {
      (**(code **)(**(longlong **)(local_3e8 + -0x18) + 8))();
    }
    if (!(bool)uVar15) {
      FUN_18000a600(&local_3f8,".avi");
    }
    FUN_18001f5c8((CWnd *)local_3d8);
    lVar5 = local_3f8;
  }
  if (param_3 == 0) {
    uVar14 = 1;
  }
  if ((*(int *)(&DAT_18007377c + lVar11) == 2) &&
     ((void *)((&DAT_180073750)[uVar10 * 0x95] + 0x6c8) != (void *)0x0)) {
    FUN_180001730((&DAT_180073760)[uVar10 * 0x95],lVar5,
                  (uint)(*(uint *)(&DAT_1800737f4 + lVar11) / uVar14),(int)uVar14,
                  (void *)((&DAT_180073750)[uVar10 * 0x95] + 0x6c8));
  }
  uVar3 = *(undefined4 *)((&DAT_180073760)[uVar10 * 0x95] + 0x44);
  LOCK();
  piVar1 = (int *)(lVar5 + -8);
  iVar9 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar9 + -1 < 1) {
    (**(code **)(**(longlong **)(lVar5 + -0x18) + 8))();
  }
  return uVar3;
}


==================================================================

### EXPORT FUNC 1800066c0 (242 bytes) name=MAG_LocalStorageAviStop

void MAG_LocalStorageAviStop(uint param_1)

{
  longlong lVar1;
  ulonglong uVar2;
  
                    /* 0x66c0  40  MAG_LocalStorageAviStop */
  if (0x80 < param_1) {
                    /* WARNING: Could not recover jumptable at 0x0001800066d5. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    SetLastError(0xe4ae0001);
    return;
  }
  uVar2 = (ulonglong)param_1;
  if (((((&DAT_180073758)[uVar2 * 0x95] == 0) || ((&DAT_180073750)[uVar2 * 0x95] == 0)) ||
      (lVar1 = (&DAT_180073760)[uVar2 * 0x95], lVar1 == 0)) || ((&DAT_180073768)[uVar2 * 0x95] == 0)
     ) {
    SetLastError(0xe4ae0001);
  }
  else if (*(int *)(lVar1 + 0x44) != 0) {
    FUN_180001470(lVar1 + 8);
    *(undefined4 *)(lVar1 + 0x40) = 0;
    *(undefined4 *)(lVar1 + 0x44) = 0;
    if (*(longlong *)(lVar1 + 0x50) != 0) {
      AVIStreamRelease();
      *(undefined8 *)(lVar1 + 0x50) = 0;
    }
    if (*(longlong *)(lVar1 + 0x48) != 0) {
      AVIStreamRelease();
      *(undefined8 *)(lVar1 + 0x48) = 0;
    }
    if (*(longlong *)(lVar1 + 0x58) != 0) {
      AVIFileRelease();
      *(undefined8 *)(lVar1 + 0x58) = 0;
    }
    AVIFileExit();
                    /* WARNING: Could not recover jumptable at 0x000180006799. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    (**(code **)(*(longlong *)(lVar1 + 8) + 0x28))(lVar1 + 8);
    return;
  }
  return;
}


==================================================================

### EXPORT FUNC 1800067c0 (1384 bytes) name=MAG_LocalStorageMgsRecord

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined4 MAG_LocalStorageMgsRecord(uint param_1,short *param_2,uint param_3)

{
  int *piVar1;
  void *_Src;
  undefined4 uVar2;
  int iVar3;
  longlong lVar4;
  longlong *plVar5;
  ulonglong uVar6;
  longlong lVar7;
  uint uVar8;
  short *psVar9;
  ulonglong uVar10;
  short *psVar11;
  undefined1 uVar12;
  undefined1 auStackY_858 [32];
  short *local_818;
  longlong local_810;
  longlong local_808;
  longlong local_800;
  undefined4 local_7f8;
  undefined4 local_7f4;
  __time64_t local_7f0;
  char local_7e8 [32];
  char local_7c8 [32];
  undefined4 local_7a8;
  int local_7a4;
  undefined4 local_7a0;
  int local_79c;
  int local_798;
  undefined4 local_794;
  undefined4 local_790;
  uint local_78c;
  undefined4 local_788;
  undefined4 local_784;
  undefined4 local_780;
  undefined4 local_77c;
  undefined4 local_778;
  undefined4 local_774;
  undefined4 local_770;
  undefined4 local_740;
  undefined4 local_73c;
  undefined4 local_738;
  undefined4 local_734;
  undefined4 local_730;
  undefined4 local_72c;
  undefined4 local_728;
  undefined4 local_724;
  undefined4 local_720;
  undefined1 local_718 [84];
  undefined1 local_6c4 [748];
  CDialog local_3d8 [912];
  ulonglong local_48;
  
                    /* 0x67c0  43  MAG_LocalStorageMgsRecord */
  local_48 = DAT_18006cea0 ^ (ulonglong)auStackY_858;
  if (0x80 < param_1) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  uVar6 = (ulonglong)param_1;
  lVar7 = uVar6 * 0x4a8;
  if (((((&DAT_180073758)[uVar6 * 0x95] == 0) || ((&DAT_180073750)[uVar6 * 0x95] == 0)) ||
      ((&DAT_180073760)[uVar6 * 0x95] == 0)) || ((&DAT_180073768)[uVar6 * 0x95] == 0)) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  if ((*(int *)(&DAT_180073778 + lVar7) == 0) || (((&DAT_18007377c)[lVar7] & 2) == 0)) {
    SetLastError(0xe4ae0006);
    return 0;
  }
  if ((*(int *)((&DAT_180073768)[uVar6 * 0x95] + 0x48) != 0) ||
     (*(int *)((&DAT_180073768)[uVar6 * 0x95] + 0x44) != 0)) {
    SetLastError(0xe4ae000a);
    return 0;
  }
  FUN_18000b610((longlong *)&local_818,param_2);
  if (*(int *)(local_818 + -8) == 0) {
    FUN_18001f670(local_3d8,0,&DAT_1800590b8,(short *)0x0,6,
                  L"MGS Files(*.mgs)|*.mgs|All Files(*.*)|*.*||",(CWnd *)0x0,0);
    lVar4 = FUN_18001f450(local_3d8);
    if (lVar4 != 1) {
      SetLastError(0xe4ae0003);
      FUN_18001f5c8((CWnd *)local_3d8);
      goto LAB_180006c75;
    }
    plVar5 = FUN_18001f980((longlong)local_3d8,&local_800);
    FUN_18000b390((longlong *)&local_818,plVar5);
    LOCK();
    piVar1 = (int *)(local_800 + -8);
    iVar3 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    uVar12 = iVar3 == 1;
    if (iVar3 + -1 < 1) {
      (**(code **)(**(longlong **)(local_800 + -0x18) + 8))();
    }
    plVar5 = FUN_18000a7c0((longlong *)&local_818,&local_808,4);
    plVar5 = FUN_18000a950(plVar5,&local_810,1);
    lVar4 = 2;
    psVar9 = (short *)*plVar5;
    psVar11 = &DAT_180058fe0;
    do {
      if (lVar4 == 0) break;
      lVar4 = lVar4 + -1;
      uVar12 = *psVar9 == *psVar11;
      psVar9 = psVar9 + 1;
      psVar11 = psVar11 + 1;
    } while ((bool)uVar12);
    LOCK();
    piVar1 = (int *)(local_810 + -8);
    iVar3 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar3 + -1 < 1) {
      (**(code **)(**(longlong **)(local_810 + -0x18) + 8))();
    }
    LOCK();
    piVar1 = (int *)(local_808 + -8);
    iVar3 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar3 + -1 < 1) {
      (**(code **)(**(longlong **)(local_808 + -0x18) + 8))();
    }
    if (!(bool)uVar12) {
      FUN_18000a600((longlong *)&local_818,".mgs");
    }
    FUN_18001f5c8((CWnd *)local_3d8);
  }
  *(undefined4 *)(&DAT_180073ba4 + lVar7) = 0;
  if (param_3 == 0) {
    param_3 = 1;
  }
  *(uint *)(&DAT_180073ba8 + lVar7) = param_3;
  uVar10 = (ulonglong)((float)*(uint *)(&DAT_1800737f4 + lVar7) / (float)param_3 + DAT_18005e704);
  uVar8 = (uint)uVar10;
  if (*(int *)(&DAT_18007377c + lVar7) == 6) {
    uVar8 = (uint)(uVar10 >> 4) & 0xfffffff;
  }
  if (uVar8 == 0) {
    uVar8 = 1;
  }
  FUN_1800357d0((ulonglong *)&local_7f8,0,0x418);
  local_7f8 = 0x418;
  local_7f4 = 0x10100;
  if (*(int *)((&DAT_180073750)[uVar6 * 0x95] + 0x47950) != 0) {
    local_7f4 = 0x10200;
  }
  local_7f0 = _time64((__time64_t *)0x0);
  strcpy_s(local_7e8,0x20,&DAT_1800737e8 + lVar7);
  strcpy_s(local_7c8,0x20,&DAT_1800737c8 + lVar7);
  local_79c = (&DAT_1800737b8)[uVar6 * 0x12a];
  lVar4 = (&DAT_180073750)[uVar6 * 0x95];
  local_7a8 = local_7f8;
  local_798 = *(int *)(&DAT_1800737bc + lVar7);
  local_7a0 = 0;
  local_7a4 = local_79c * local_798 * 2 + 0x40;
  if (*(int *)(lVar4 + 0x47950) == 0) {
    local_778 = 0;
  }
  else {
    local_778 = *(undefined4 *)(lVar4 + 0x47954);
  }
  local_794 = *(undefined4 *)(lVar4 + 0x47944);
  local_790 = *(undefined4 *)(lVar4 + 0x47948);
  local_788 = *(undefined4 *)(&DAT_1800737c0 + lVar7);
  local_784 = *(undefined4 *)(&DAT_1800737c4 + lVar7);
  local_780 = *(undefined4 *)(lVar4 + 100);
  local_77c = *(undefined4 *)(lVar4 + 0x68);
  local_774 = *(undefined4 *)(lVar4 + 0xa4);
  local_740 = *(undefined4 *)(&DAT_180073780 + lVar7);
  local_770 = *(undefined4 *)(lVar4 + 0xa8);
  local_73c = *(undefined4 *)(lVar4 + 0x10);
  local_738 = *(undefined4 *)(lVar4 + 0x14);
  local_734 = *(undefined4 *)(lVar4 + 0x18);
  local_730 = *(undefined4 *)(lVar4 + 0x1c);
  local_72c = *(undefined4 *)(lVar4 + 0x20);
  local_728 = *(undefined4 *)(lVar4 + 0x24);
  local_724 = *(undefined4 *)(lVar4 + 0x48);
  local_720 = *(undefined4 *)(lVar4 + 0x4c);
  local_78c = uVar8;
  memcpy(local_718,(void *)(lVar4 + 0xd0),0x2c);
  if ((*(uint *)(lVar4 + 0x98) < *(uint *)(lVar4 + 0x41884)) &&
     (_Src = (void *)((ulonglong)*(uint *)(lVar4 + 0x98) * 0x21c + 0x41888 + lVar4),
     _Src != (void *)0x0)) {
    memcpy(local_6c4,_Src,0x21c);
  }
  iVar3 = FUN_18001b3a0((&DAT_180073768)[uVar6 * 0x95],local_818,(longlong)&local_7f8);
  if (iVar3 != 0) {
    uVar2 = *(undefined4 *)((&DAT_180073768)[uVar6 * 0x95] + 0x44);
    LOCK();
    piVar1 = (int *)(local_818 + -4);
    iVar3 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (0 < iVar3 + -1) {
      return uVar2;
    }
    (**(code **)(**(longlong **)(local_818 + -0xc) + 8))();
    return uVar2;
  }
  SetLastError(0xe4ae0009);
LAB_180006c75:
  LOCK();
  piVar1 = (int *)(local_818 + -4);
  iVar3 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar3 + -1 < 1) {
    (**(code **)(**(longlong **)(local_818 + -0xc) + 8))();
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180006d30 (1340 bytes) name=MAG_LocalStorageMgsPlay

undefined4
MAG_LocalStorageMgsPlay(uint param_1,short *param_2,undefined8 param_3,undefined8 param_4)

{
  ulonglong *puVar1;
  uint uVar2;
  longlong lVar3;
  longlong lVar4;
  int iVar5;
  undefined4 uVar6;
  longlong *plVar7;
  LPVOID pvVar8;
  longlong lVar9;
  ulonglong uVar10;
  undefined8 uVar11;
  ulonglong uVar12;
  longlong local_48;
  uint local_40;
  undefined4 local_3c;
  undefined4 local_38;
  uint local_34;
  undefined4 local_30;
  uint local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined4 local_20;
  undefined4 local_1c;
  
                    /* 0x6d30  41  MAG_LocalStorageMgsPlay */
  uVar10 = (ulonglong)param_1;
  if (0x80 < param_1) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  lVar9 = uVar10 * 0x4a8;
  if (((((&DAT_180073758)[uVar10 * 0x95] == 0) || ((&DAT_180073750)[uVar10 * 0x95] == 0)) ||
      ((&DAT_180073760)[uVar10 * 0x95] == 0)) ||
     (((&DAT_180073768)[uVar10 * 0x95] == 0 || (param_2 == (short *)0x0)))) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  if (((*(int *)(&DAT_180073778 + lVar9) != 0) ||
      (*(int *)((&DAT_180073758)[uVar10 * 0x95] + 0x14) != 0)) ||
     ((*(int *)((&DAT_180073768)[uVar10 * 0x95] + 0x48) != 0 ||
      (*(int *)((&DAT_180073768)[uVar10 * 0x95] + 0x44) != 0)))) {
    SetLastError(0xe4ae000a);
    return 0;
  }
  *(undefined8 *)(&DAT_180073790 + lVar9) = param_3;
  *(undefined8 *)(&DAT_180073770 + lVar9) = param_4;
  *(undefined4 *)(&DAT_18007377c + lVar9) = 2;
  *(undefined4 *)(&DAT_180073ba0 + lVar9) = 0xffffffff;
  plVar7 = FUN_18000b610(&local_48,param_2);
  iVar5 = FUN_18001b870((&DAT_180073768)[uVar10 * 0x95],plVar7);
  if (iVar5 == 0) {
    SetLastError(0xe4ae0009);
    return 0;
  }
  lVar3 = (&DAT_180073768)[uVar10 * 0x95];
  uVar2 = *(uint *)(lVar3 + 0xcc);
  if ((((0x4f < (int)uVar2) && ((int)uVar2 < 0x501)) && (0x3b < *(int *)(lVar3 + 0xd0))) &&
     ((*(int *)(lVar3 + 0xd0) < 0x401 && ((uVar2 & 3) == 0)))) {
    puVar1 = (ulonglong *)(&DAT_1800737b8 + uVar10 * 0x12a);
    FUN_1800357d0(puVar1,0,0x48);
    *(undefined4 *)(&DAT_1800737c0 + lVar9) = *(undefined4 *)(lVar3 + 0xe0);
    *(undefined4 *)(&DAT_1800737c4 + lVar9) = *(undefined4 *)(lVar3 + 0xe4);
    *(undefined8 *)(&DAT_1800737c8 + lVar9) = *(undefined8 *)(lVar3 + 0xa0);
    *(undefined8 *)(&DAT_1800737d0 + lVar9) = *(undefined8 *)(lVar3 + 0xa8);
    *(undefined8 *)(&DAT_1800737d8 + lVar9) = *(undefined8 *)(lVar3 + 0xb0);
    *(undefined8 *)(&DAT_1800737e0 + lVar9) = *(undefined8 *)(lVar3 + 0xb8);
    (&DAT_1800737e7)[lVar9] = 0;
    *(undefined8 *)(&DAT_1800737e8 + lVar9) = *(undefined8 *)(lVar3 + 0x80);
    (&DAT_1800737ef)[lVar9] = 0;
    local_40 = *(uint *)(lVar3 + 0xcc);
    uVar12 = (ulonglong)local_40;
    *(uint *)puVar1 = local_40;
    uVar2 = *(uint *)(lVar3 + 0xd0);
    *(uint *)(&DAT_1800737bc + lVar9) = uVar2;
    if ((local_40 < 0x51) && (uVar2 < 0x3d)) {
      *(uint *)(&DAT_1800737f8 + lVar9) = local_40 * 4;
      *(uint *)(&DAT_1800737fc + lVar9) = uVar2 << 2;
    }
    else if ((local_40 < 0x140) && (uVar2 < 0xf0)) {
      *(uint *)(&DAT_1800737f8 + lVar9) = local_40 * 2;
      *(uint *)(&DAT_1800737fc + lVar9) = uVar2 * 2;
    }
    else {
      *(uint *)(&DAT_1800737f8 + lVar9) = local_40;
      *(uint *)(&DAT_1800737fc + lVar9) = uVar2;
    }
    uVar6 = *(undefined4 *)(lVar3 + 0xdc);
    local_34 = *(uint *)(&DAT_1800737fc + lVar9);
    local_38 = *(undefined4 *)(&DAT_1800737f8 + lVar9);
    *(uint *)(&DAT_1800737a4 + lVar9) = local_34;
    local_2c = local_34 >> 1;
    *(undefined4 *)(&DAT_1800737f0 + lVar9) = uVar6;
    *(undefined4 *)(&DAT_1800737f4 + lVar9) = uVar6;
    local_3c = *(undefined4 *)(&DAT_1800737bc + lVar9);
    *(undefined4 *)(&DAT_1800737a0 + lVar9) = local_38;
    lVar4 = (&DAT_180073750)[uVar10 * 0x95];
    *(uint *)(&DAT_180073798 + lVar9) = local_40;
    *(undefined4 *)(&DAT_18007379c + lVar9) = local_3c;
    local_30 = 0x10;
    local_28 = 4;
    local_24 = 1;
    local_20 = 1;
    local_1c = 5;
    iVar5 = FUN_18000bce0(lVar4,&local_40);
    if (iVar5 == 0) {
      FUN_18001b2e0((&DAT_180073768)[uVar10 * 0x95]);
      SetLastError(0xe4ae0003);
      uVar6 = 0;
    }
    else {
      *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 100) = *(undefined4 *)(lVar3 + 0xe8);
      FUN_180015500((&DAT_180073750)[uVar10 * 0x95],*(int *)(lVar3 + 0xec));
      *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 0xa4) = *(undefined4 *)(lVar3 + 0xf4);
      *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 0xa8) = *(undefined4 *)(lVar3 + 0xf8);
      uVar11 = 0x2c;
      memcpy((void *)((&DAT_180073750)[uVar10 * 0x95] + 0xd0),(void *)(lVar3 + 0x150),0x2c);
      FUN_180018a20((&DAT_180073750)[uVar10 * 0x95],(LPCSTR)(lVar3 + 0x1a4),uVar11,uVar12);
      FUN_180018d50((&DAT_180073750)[uVar10 * 0x95],*(int *)(lVar3 + 0xf0),*(uint *)(lVar3 + 0xd4),
                    *(undefined4 *)(lVar3 + 0xd8));
      uVar6 = *(undefined4 *)(lVar3 + 0x128);
      lVar4 = (&DAT_180073750)[uVar10 * 0x95];
      *(undefined4 *)(&DAT_180073780 + lVar9) = uVar6;
      FUN_18000d5f0(lVar4,uVar6);
      if (*(int *)(lVar3 + 300) == 0) {
        *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 0x10) = 0;
        if (*(int *)(lVar3 + 0x140) == 0) {
          *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 0x24) = 5;
          *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 0x48) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 0x4c) = 0;
        }
        else {
          *(int *)((&DAT_180073750)[uVar10 * 0x95] + 0x24) = *(int *)(lVar3 + 0x140);
          *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 0x48) = *(undefined4 *)(lVar3 + 0x144);
          *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 0x4c) = *(undefined4 *)(lVar3 + 0x148);
        }
      }
      else {
        *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 0x10) = 1;
        *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 0x14) = *(undefined4 *)(lVar3 + 0x130);
        *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 0x18) = *(undefined4 *)(lVar3 + 0x134);
        *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 0x1c) = *(undefined4 *)(lVar3 + 0x138);
        *(undefined4 *)((&DAT_180073750)[uVar10 * 0x95] + 0x20) = *(undefined4 *)(lVar3 + 0x13c);
      }
      uVar2 = *(int *)(&DAT_1800737bc + lVar9) * (int)*puVar1 * 2;
      if (*(LPVOID *)(&DAT_180073788 + lVar9) != (LPVOID)0x0) {
        thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar9));
        *(undefined8 *)(&DAT_180073788 + lVar9) = 0;
      }
      pvVar8 = thunk_FUN_18001eb74((ulonglong)uVar2 + 0x4c);
      *(LPVOID *)(&DAT_180073788 + lVar9) = pvVar8;
      if (pvVar8 == (LPVOID)0x0) {
        FUN_18001b2e0((&DAT_180073768)[uVar10 * 0x95]);
        SetLastError(0xe4ae0002);
        uVar6 = 0;
      }
      else {
        uVar11 = FUN_18001bc90((void *)(&DAT_180073768)[uVar10 * 0x95],param_1,(ulonglong)uVar2,
                               (longlong)pvVar8);
        if ((int)uVar11 == 0) {
          FUN_18001b2e0((&DAT_180073768)[uVar10 * 0x95]);
          if (*(LPVOID *)(&DAT_180073788 + lVar9) != (LPVOID)0x0) {
            thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar9));
            *(undefined8 *)(&DAT_180073788 + lVar9) = 0;
          }
          SetLastError(0xe4ae0003);
          uVar6 = 0;
        }
        else {
          lVar3 = (&DAT_180073768)[uVar10 * 0x95];
          *(undefined4 *)(&DAT_180073778 + lVar9) = 1;
          uVar6 = *(undefined4 *)(lVar3 + 200);
        }
      }
    }
    return uVar6;
  }
  FUN_18001b2e0(lVar3);
  SetLastError(0xe4ae0009);
  return 0;
}


==================================================================

### EXPORT FUNC 180007270 (118 bytes) name=MAG_LocalStorageMgsSeekFrame

undefined4 MAG_LocalStorageMgsSeekFrame(uint param_1,int param_2)

{
  undefined4 uVar1;
  ulonglong uVar2;
  
                    /* 0x7270  44  MAG_LocalStorageMgsSeekFrame */
  if ((((param_1 < 0x81) && (uVar2 = (ulonglong)param_1, (&DAT_180073758)[uVar2 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar2 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar2 * 0x95] != 0 && ((&DAT_180073768)[uVar2 * 0x95] != 0)))) {
    if (*(int *)((&DAT_180073768)[uVar2 * 0x95] + 0x48) == 0) {
      SetLastError(0xe4ae0006);
      return 0;
    }
    uVar1 = FUN_18001bff0((&DAT_180073768)[uVar2 * 0x95],param_2);
    return uVar1;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 1800072f0 (169 bytes) name=MAG_LocalStorageMgsPopFrame

BOOL MAG_LocalStorageMgsPopFrame(uint param_1)

{
  longlong lVar1;
  BOOL BVar2;
  ulonglong uVar3;
  
                    /* 0x72f0  42  MAG_LocalStorageMgsPopFrame */
  if ((((param_1 < 0x81) && (uVar3 = (ulonglong)param_1, (&DAT_180073758)[uVar3 * 0x95] != 0)) &&
      ((&DAT_180073750)[uVar3 * 0x95] != 0)) &&
     (((&DAT_180073760)[uVar3 * 0x95] != 0 && ((&DAT_180073768)[uVar3 * 0x95] != 0)))) {
    if (*(int *)((&DAT_180073768)[uVar3 * 0x95] + 0x48) == 0) {
      SetLastError(0xe4ae0006);
      return 0;
    }
    lVar1 = (&DAT_180073768)[uVar3 * 0x95];
    if ((*(int *)(lVar1 + 0x48) != 0) && (*(int *)(lVar1 + 0x40) < *(int *)(lVar1 + 200))) {
      if (*(int *)(lVar1 + 0x4bc) != 0) {
        *(undefined4 *)(lVar1 + 0x4c0) = 1;
      }
                    /* WARNING: Could not recover jumptable at 0x000180007380. Too many branches */
                    /* WARNING: Treating indirect jump as call */
      BVar2 = SetEvent(*(HANDLE *)(lVar1 + 0x4e8));
      return BVar2;
    }
  }
  else {
    SetLastError(0xe4ae0001);
  }
  return 0;
}


==================================================================

### EXPORT FUNC 1800073a0 (382 bytes) name=MAG_LocalStorageMgsStop

void MAG_LocalStorageMgsStop(uint param_1)

{
  longlong lVar1;
  longlong *plVar2;
  ulonglong uVar3;
  
                    /* 0x73a0  45  MAG_LocalStorageMgsStop */
  if (0x80 < param_1) {
                    /* WARNING: Could not recover jumptable at 0x0001800073b5. Too many branches */
                    /* WARNING: Treating indirect jump as call */
    SetLastError(0xe4ae0001);
    return;
  }
  uVar3 = (ulonglong)param_1;
  if (((((&DAT_180073758)[uVar3 * 0x95] == 0) || ((&DAT_180073750)[uVar3 * 0x95] == 0)) ||
      ((&DAT_180073760)[uVar3 * 0x95] == 0)) || ((&DAT_180073768)[uVar3 * 0x95] == 0)) {
    SetLastError(0xe4ae0001);
  }
  else {
    if (*(int *)((&DAT_180073768)[uVar3 * 0x95] + 0x48) != 0) {
      lVar1 = (&DAT_180073768)[uVar3 * 0x95];
      FUN_180001470(lVar1 + 8);
      if (*(int *)(lVar1 + 0x48) != 0) {
        *(undefined4 *)(lVar1 + 0x4d8) = 0;
        SetEvent(*(HANDLE *)(lVar1 + 0x4e8));
        if (*(longlong *)(lVar1 + 0x4e0) != 0) {
          WaitForSingleObject(*(HANDLE *)(*(longlong *)(lVar1 + 0x4e0) + 0x58),0xffffffff);
          plVar2 = *(longlong **)(lVar1 + 0x4e0);
          if (plVar2 != (longlong *)0x0) {
            (**(code **)(*plVar2 + 8))(plVar2,1);
          }
          *(undefined8 *)(lVar1 + 0x4e0) = 0;
        }
        CloseHandle(*(HANDLE *)(lVar1 + 0x4e8));
        *(undefined4 *)(lVar1 + 0x48) = 0;
      }
      if (*(int *)(lVar1 + 0x44) != 0) {
        *(undefined4 *)(lVar1 + 0x44) = 0;
      }
      (**(code **)(*(longlong *)(lVar1 + 0x50) + 0x98))(lVar1 + 0x50);
      *(undefined4 *)(lVar1 + 0x40) = 0;
      (**(code **)(*(longlong *)(lVar1 + 8) + 0x28))(lVar1 + 8);
      *(undefined4 *)(&DAT_180073778 + uVar3 * 0x4a8) = 0;
      return;
    }
    if (*(int *)((&DAT_180073768)[uVar3 * 0x95] + 0x44) != 0) {
      FUN_18001b2e0((&DAT_180073768)[uVar3 * 0x95]);
      return;
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180007520 (940 bytes) name=MAG_SaveFIR

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

bool MAG_SaveFIR(uint param_1,short *param_2)

{
  int *piVar1;
  short sVar2;
  ulonglong uVar3;
  int iVar4;
  undefined **ppuVar5;
  longlong lVar6;
  HMODULE pHVar7;
  longlong *plVar8;
  undefined8 *puVar9;
  longlong *plVar10;
  int iVar11;
  short *psVar12;
  short *psVar13;
  void *pvVar14;
  ulonglong uVar15;
  undefined1 uVar16;
  undefined1 auStackY_438 [32];
  void *local_3f8;
  longlong local_3f0;
  longlong local_3e8;
  longlong *local_3e0;
  longlong local_3d8 [2];
  CDialog local_3c8 [912];
  ulonglong local_38;
  
                    /* 0x7520  51  MAG_SaveFIR */
  local_38 = DAT_18006cea0 ^ (ulonglong)auStackY_438;
  uVar15 = (ulonglong)param_1;
  if (0x80 < param_1) {
    SetLastError(0xe4ae0001);
    return false;
  }
  if (((((&DAT_180073758)[uVar15 * 0x95] == 0) || ((&DAT_180073750)[uVar15 * 0x95] == 0)) ||
      ((&DAT_180073760)[uVar15 * 0x95] == 0)) || ((&DAT_180073768)[uVar15 * 0x95] == 0)) {
    SetLastError(0xe4ae0001);
    return false;
  }
  if (*(int *)((&DAT_180073750)[uVar15 * 0x95] + 0x234) == 0) {
    SetLastError(0xe4ae0006);
    return false;
  }
  ppuVar5 = FUN_18001fcc0();
  if (ppuVar5 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar6 = (**(code **)(*ppuVar5 + 0x18))(ppuVar5);
  pvVar14 = (void *)(lVar6 + 0x18);
  iVar11 = 0;
  local_3f8 = pvVar14;
  if (param_2 != (short *)0x0) {
    if (((ulonglong)param_2 & 0xffffffffffff0000) == 0) {
      pHVar7 = (HMODULE)FUN_18001fcac();
      if (pHVar7 != (HMODULE)0x0) {
        FUN_18000af50((longlong *)&local_3f8,pHVar7,(uint)param_2 & 0xffff);
        pvVar14 = local_3f8;
      }
      goto LAB_180007663;
    }
    lVar6 = -1;
    psVar12 = param_2;
    do {
      if (lVar6 == 0) break;
      lVar6 = lVar6 + -1;
      sVar2 = *psVar12;
      psVar12 = psVar12 + 1;
    } while (sVar2 != 0);
    iVar11 = ~(uint)lVar6 - 1;
  }
  FUN_18000b480((longlong *)&local_3f8,param_2,iVar11);
  pvVar14 = local_3f8;
LAB_180007663:
  if (*(int *)((longlong)pvVar14 + -0x10) == 0) {
    FUN_18001f670(local_3c8,0,&DAT_18006e948,(short *)0x0,6,
                  u_FIR_Files___fir____fir_All_Files_18006e950,(CWnd *)0x0,0);
    lVar6 = FUN_18001f450(local_3c8);
    if (lVar6 != 1) {
      SetLastError(0xe4ae0003);
      FUN_18001f5c8((CWnd *)local_3c8);
      LOCK();
      piVar1 = (int *)((longlong)pvVar14 + -8);
      iVar11 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
      if (iVar11 + -1 < 1) {
        (**(code **)(**(longlong **)((longlong)pvVar14 + -0x18) + 8))();
      }
      return false;
    }
    plVar8 = FUN_18001f980((longlong)local_3c8,local_3d8);
    FUN_18000b390((longlong *)&local_3f8,plVar8);
    LOCK();
    piVar1 = (int *)(local_3d8[0] + -8);
    iVar11 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    uVar16 = iVar11 == 1;
    if (iVar11 + -1 < 1) {
      (**(code **)(**(longlong **)(local_3d8[0] + -0x18) + 8))();
    }
    plVar8 = FUN_18000a7c0((longlong *)&local_3f8,&local_3e8,4);
    plVar8 = FUN_18000a950(plVar8,&local_3f0,1);
    lVar6 = 2;
    psVar12 = (short *)*plVar8;
    psVar13 = &DAT_180058fe0;
    do {
      if (lVar6 == 0) break;
      lVar6 = lVar6 + -1;
      uVar16 = *psVar12 == *psVar13;
      psVar12 = psVar12 + 1;
      psVar13 = psVar13 + 1;
    } while ((bool)uVar16);
    LOCK();
    piVar1 = (int *)(local_3f0 + -8);
    iVar11 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar11 + -1 < 1) {
      (**(code **)(**(longlong **)(local_3f0 + -0x18) + 8))();
    }
    LOCK();
    piVar1 = (int *)(local_3e8 + -8);
    iVar11 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar11 + -1 < 1) {
      (**(code **)(**(longlong **)(local_3e8 + -0x18) + 8))();
    }
    if (!(bool)uVar16) {
      FUN_18000a600((longlong *)&local_3f8,".fir");
    }
    FUN_18001f5c8((CWnd *)local_3c8);
    pvVar14 = local_3f8;
  }
  EnterCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar15 * 0x95] + 0x238));
  plVar8 = (longlong *)((longlong)pvVar14 + -0x18);
  puVar9 = (undefined8 *)(**(code **)(**(longlong **)((longlong)pvVar14 + -0x18) + 0x20))();
  if ((*(int *)((longlong)pvVar14 + -8) < 0) || (puVar9 != (undefined8 *)*plVar8)) {
    plVar10 = (longlong *)(**(code **)*puVar9)(puVar9,*(undefined4 *)((longlong)pvVar14 + -0x10),2);
    if (plVar10 == (longlong *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000ad70();
    }
    *(undefined4 *)(plVar10 + 1) = *(undefined4 *)((longlong)pvVar14 + -0x10);
    uVar3 = (longlong)(*(int *)((longlong)pvVar14 + -0x10) + 1) * 2;
    FUN_180032c60((ulonglong *)(plVar10 + 3),uVar3,pvVar14,uVar3);
  }
  else {
    LOCK();
    *(int *)((longlong)pvVar14 + -8) = *(int *)((longlong)pvVar14 + -8) + 1;
    UNLOCK();
    plVar10 = plVar8;
  }
  local_3e0 = plVar10 + 3;
  iVar4 = FUN_180008740(param_1,0,(longlong *)&local_3e0);
  LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar15 * 0x95] + 0x238));
  LOCK();
  piVar1 = (int *)((longlong)pvVar14 + -8);
  iVar11 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar11 + -1 < 1) {
    (**(code **)(*(longlong *)*plVar8 + 8))((longlong *)*plVar8,plVar8);
  }
  return 0 < iVar4;
}


==================================================================

### EXPORT FUNC 1800078d0 (2145 bytes) name=MAG_LoadFIR

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
MAG_LoadFIR(uint param_1,uint *param_2,LPCWSTR param_3,undefined *param_4,undefined8 param_5)

{
  void *_Src;
  int iVar1;
  undefined8 uVar2;
  __uint64 _Var3;
  LPVOID pvVar4;
  __time64_t _Var5;
  uint uVar6;
  uint uVar7;
  size_t sVar8;
  ulonglong uVar9;
  ulonglong uVar10;
  longlong lVar11;
  uint uVar12;
  ulonglong uVar13;
  undefined4 uVar14;
  undefined4 uVar15;
  undefined1 auStackY_138 [32];
  CFile local_100 [32];
  uint local_e0;
  uint local_dc;
  uint local_d8;
  uint local_d4;
  uint local_d0;
  uint local_cc;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined4 local_c0;
  undefined4 local_bc;
  code *local_b8;
  size_t local_b0;
  undefined8 local_a0 [2];
  undefined8 local_90;
  undefined1 local_88 [4];
  undefined4 local_84;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78;
  undefined4 local_74;
  ulonglong local_70;
  ulonglong local_48;
  
                    /* 0x78d0  38  MAG_LoadFIR */
  local_90 = 0xfffffffffffffffe;
  local_48 = DAT_18006cea0 ^ (ulonglong)auStackY_138;
  uVar13 = (ulonglong)param_1;
  local_b8 = (code *)param_4;
  if (param_1 < 0x81) {
    lVar11 = uVar13 * 0x4a8;
    if (((((&DAT_180073758)[uVar13 * 0x95] != 0) && ((&DAT_180073750)[uVar13 * 0x95] != 0)) &&
        ((&DAT_180073760)[uVar13 * 0x95] != 0)) && ((&DAT_180073768)[uVar13 * 0x95] != 0)) {
      if (*(int *)((&DAT_180073758)[uVar13 * 0x95] + 0x14) != 0) {
        SetLastError(0xe4ae0003);
        return 0;
      }
      if (((param_2 != (uint *)0x0) && ((*param_2 & 3) == 0)) &&
         (((param_2[2] & 3) == 0 && (((param_2[4] & 3) == 0 && (*param_2 <= param_2[2])))))) {
        if ((param_2[1] <= param_2[3]) &&
           (((param_2[1] != 0 && (param_2[3] != 0)) && (param_2[5] != 0)))) {
          FUN_180020138((undefined8 *)local_100);
          uVar2 = FUN_180020a6c((longlong)local_100,param_3,0x30,0);
          if ((int)uVar2 == 0) {
            SetLastError(0xe4ae0009);
            FUN_1800203a4(local_100);
            return 0;
          }
          _Var3 = CFile::GetLength(local_100);
          sVar8 = _Var3 & 0xffffffff;
          if (0x600040 < (uint)_Var3) {
            sVar8 = 0x600040;
          }
          if (*(LPVOID *)(&DAT_180073788 + lVar11) != (LPVOID)0x0) {
            thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar11));
            *(undefined8 *)(&DAT_180073788 + lVar11) = 0;
          }
          uVar9 = 0;
          local_b0 = sVar8;
          pvVar4 = thunk_FUN_18001eb74(sVar8);
          *(LPVOID *)(&DAT_180073788 + lVar11) = pvVar4;
          if (pvVar4 == (LPVOID)0x0) {
            CFile::Close(local_100);
            SetLastError(0xe4ae0002);
            FUN_1800203a4(local_100);
            return 0;
          }
          FUN_18001ef2c(local_a0);
          FUN_18001fd6c((longlong)local_100,*(LPVOID *)(&DAT_180073788 + lVar11),(DWORD)sVar8);
          FUN_18001ef94();
          CFile::Close(local_100);
          _Src = *(void **)(&DAT_180073788 + lVar11);
          *(undefined8 *)(&DAT_180073770 + lVar11) = param_5;
          memcpy(local_88,_Src,0x40);
          uVar6 = (uint)local_70 & 0xffff;
          uVar10 = local_70 >> 0x10 & 0xffff;
          uVar12 = (uint)uVar10;
          if (local_b0 < (longlong)(int)(uVar12 * uVar6) * 2 + 0x40U) {
            SetLastError(0xe4ae0009);
            FUN_1800203a4(local_100);
            return 0;
          }
          if ((uVar6 != *param_2) || (uVar12 != param_2[1])) {
            *param_2 = uVar6;
            param_2[1] = uVar12;
            param_2[2] = uVar6;
            param_2[3] = uVar12;
            param_2[4] = 0x10;
            param_2[5] = uVar12;
          }
          *(uint *)(&DAT_180073798 + lVar11) = *param_2;
          *(uint *)(&DAT_18007379c + lVar11) = param_2[1];
          *(uint *)(&DAT_1800737a0 + lVar11) = param_2[2];
          *(uint *)(&DAT_1800737a4 + lVar11) = param_2[3];
          *(uint *)(&DAT_1800737a8 + lVar11) = param_2[4];
          *(uint *)(&DAT_1800737ac + lVar11) = param_2[5];
          (&DAT_1800737b0)[uVar13 * 0x12a] = 0;
          *(undefined4 *)(&DAT_1800737b4 + lVar11) = 0;
          FUN_1800357d0((ulonglong *)(&DAT_1800737b8 + uVar13 * 0x12a),0,0x48);
          (&DAT_1800737b8)[uVar13 * 0x12a] = *param_2;
          *(uint *)(&DAT_1800737bc + lVar11) = param_2[1];
          *(uint *)(&DAT_1800737f8 + lVar11) = param_2[2];
          *(uint *)(&DAT_1800737fc + lVar11) = param_2[3];
          *(undefined4 *)(&DAT_1800737f0 + lVar11) = 1;
          *(undefined4 *)(&DAT_1800737f4 + lVar11) = 1;
          *(undefined4 *)(&DAT_1800737c0 + lVar11) = 0;
          *(undefined4 *)(&DAT_1800737c4 + lVar11) = 0;
          FUN_180032bb0(&DAT_1800737c8 + lVar11,(byte *)"FIR-%d*%d",(ulonglong)uVar6,uVar10);
          strncpy(&DAT_1800737e8 + lVar11,"FIR",8);
          *(undefined4 *)(&DAT_180073800 + lVar11) = 20000;
          *(undefined4 *)(&DAT_180073804 + lVar11) = 0x5014;
          *(undefined4 *)(&DAT_180073808 + lVar11) = 0;
          *(undefined4 *)(&DAT_18007380c + lVar11) = 0;
          _Var5 = _time64((__time64_t *)0x0);
          *(__time64_t *)(&DAT_180073810 + lVar11) = _Var5;
          *(undefined8 *)(&DAT_180073818 + lVar11) = 0;
          *(undefined8 *)(&DAT_180073820 + lVar11) = 0;
          *(undefined4 *)(&DAT_180073828 + lVar11) = 0;
          local_e0 = *param_2;
          local_dc = param_2[1];
          local_d8 = param_2[2];
          local_d4 = param_2[3];
          local_d0 = param_2[4];
          local_cc = param_2[5];
          local_c8 = 4;
          local_c4 = 1;
          local_c0 = 1;
          local_bc = 5;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 8) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xc) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x70) = 1;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x8c) = 1;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x6c) = 1;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x24) = 5;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x48) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x4c) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x10) = 0;
          *(undefined4 *)(&DAT_180073780 + lVar11) = 2;
          FUN_18000d5f0((&DAT_180073750)[uVar13 * 0x95],2);
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xd4) = local_80;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xd8) = local_78;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xf8) = local_84;
          uVar15 = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xd0) = local_7c;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xdc) = local_74;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xe0) = 0x41a00000;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xe4) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xe8) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xec) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xf0) = 0;
          FUN_180014fe0((&DAT_180073750)[uVar13 * 0x95],
                        (float *)((&DAT_180073750)[uVar13 * 0x95] + 0xd0));
          iVar1 = FUN_18000bce0((&DAT_180073750)[uVar13 * 0x95],&local_e0);
          if (iVar1 == 0) {
            SetLastError(0xe4ae0003);
            FUN_1800203a4(local_100);
            return 0;
          }
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 100) = 0;
          lVar11 = (&DAT_180073750)[uVar13 * 0x95];
          EnterCriticalSection((LPCRITICAL_SECTION)(lVar11 + 0x238));
          memcpy(&DAT_180099000,&DAT_18005cde0,0xa1c);
          uVar10 = uVar9;
          do {
            uVar7 = (&DAT_180099004)[uVar10] - (&DAT_180099000)[uVar10];
            (&DAT_180099a20)[uVar10] = ((uVar7 >> 1) + 0x1000000) / uVar7;
            uVar7 = (&DAT_180099008)[uVar10] - (&DAT_180099004)[uVar10];
            (&DAT_180099a24)[uVar10] = ((uVar7 >> 1) + 0x1000000) / uVar7;
            uVar10 = uVar10 + 2;
          } while ((longlong)uVar10 < 0x286);
          DAT_180073748 = (undefined4)(0x7fffffff / (longlong)DAT_18009a434);
          *(undefined4 *)(lVar11 + 0x68) = 7;
          LeaveCriticalSection((LPCRITICAL_SECTION)(lVar11 + 0x238));
          lVar11 = uVar13 * 0x4a8;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xa4) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0xa8) = 0;
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x5c) =
               *(undefined4 *)(&DAT_180073804 + lVar11);
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x60) =
               *(undefined4 *)(&DAT_180073800 + lVar11);
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x54) =
               *(undefined4 *)(&DAT_180073804 + lVar11);
          *(undefined4 *)((&DAT_180073750)[uVar13 * 0x95] + 0x58) =
               *(undefined4 *)(&DAT_180073800 + lVar11);
          uVar2 = FUN_180018d50((&DAT_180073750)[uVar13 * 0x95],4,8,0xffff3cb0);
          if ((int)uVar2 != 0) {
            uVar10 = uVar9;
            uVar14 = local_7c;
            if (0 < (int)(uVar12 * uVar6)) {
              do {
                iVar1 = FUN_180001e40((&DAT_180073750)[(longlong)(int)param_1 * 0x95],
                                      *(short *)((longlong)_Src + uVar9 * 2 + 0x40) * 10);
                *(short *)((longlong)_Src + uVar9 * 2 + 0x40) = (short)iVar1;
                uVar7 = (int)uVar10 + 1;
                uVar9 = uVar9 + 1;
                uVar10 = (ulonglong)uVar7;
              } while ((int)uVar7 < (int)(uVar12 * uVar6));
            }
            FUN_18000ca30((&DAT_180073750)[uVar13 * 0x95],CONCAT44(uVar15,uVar14),1,1,1);
            if (local_b8 != (code *)0x0) {
              (*local_b8)(param_1,*(undefined4 *)(&DAT_180073800 + uVar13 * 0x4a8),0,0);
            }
            FUN_1800203a4(local_100);
            return 1;
          }
          SetLastError(0xe4ae0003);
          FUN_1800203a4(local_100);
          return 0;
        }
      }
      SetLastError(0xe4ae0001);
      return 0;
    }
    SetLastError(0xe4ae0001);
  }
  else {
    SetLastError(0xe4ae0001);
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180008150 (24 bytes) name=Unwind@180008150

void Unwind_180008150(undefined8 param_1,longlong param_2)

{
  FUN_1800203a4((CFile *)(param_2 + 0x38));
  return;
}


==================================================================

### EXPORT FUNC 180008170 (27 bytes) name=Unwind@180008170

void Unwind_180008170(void)

{
  thunk_FUN_18001ef94();
  return;
}


==================================================================

### EXPORT FUNC 180008190 (63 bytes) name=Catch@180008190

undefined * Catch_180008190(undefined8 param_1,longlong param_2)

{
  *(undefined8 *)(param_2 + 0xa0) = *(undefined8 *)(param_2 + 0x90);
  CFile::Close((CFile *)(param_2 + 0x38));
  SetLastError(0xe4ae0009);
  return &DAT_1800080f2;
}


==================================================================

### EXPORT FUNC 1800081d0 (1173 bytes) name=FUN_1800081d0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

int FUN_1800081d0(uint param_1,void *param_2,longlong *param_3)

{
  int *piVar1;
  void *_Src;
  longlong lVar2;
  undefined8 uVar3;
  int iVar4;
  int iVar5;
  ulonglong uVar6;
  longlong lVar7;
  undefined1 auStack_428 [32];
  CFile local_408 [32];
  longlong *local_3e8;
  undefined8 local_3d8;
  undefined8 local_3d0 [3];
  undefined4 local_3b8;
  int local_3b4;
  int local_3b0;
  int local_3ac;
  undefined4 local_3a8;
  undefined4 local_3a4;
  undefined4 local_3a0;
  undefined4 local_39c;
  undefined4 local_398;
  undefined4 local_394;
  undefined4 local_390;
  undefined4 local_38c;
  undefined8 local_388;
  undefined1 local_369;
  undefined8 local_368;
  undefined8 local_360;
  undefined8 local_358;
  ulonglong local_350;
  undefined8 local_348;
  undefined4 local_340;
  undefined4 local_33c;
  undefined8 local_338;
  undefined8 local_330;
  undefined1 local_328 [556];
  undefined4 local_fc;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_f0;
  undefined4 local_ec;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined4 local_d8;
  undefined4 local_d4;
  undefined4 local_d0;
  undefined4 local_cc;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined4 local_64;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined4 local_4c;
  undefined4 local_48;
  ulonglong local_38;
  
  local_3d8 = 0xfffffffffffffffe;
  local_38 = DAT_18006cea0 ^ (ulonglong)auStack_428;
  uVar6 = (ulonglong)param_1;
  lVar7 = uVar6 * 0x4a8;
  lVar2 = (&DAT_180073750)[uVar6 * 0x95];
  local_3e8 = param_3;
  if (*(int *)(lVar2 + 0x234) == 0) {
    SetLastError(0xe4ae0006);
    lVar2 = *param_3;
    LOCK();
    piVar1 = (int *)(lVar2 + -8);
    iVar5 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar5 + -1 < 1) {
      (**(code **)(**(longlong **)(lVar2 + -0x18) + 8))();
    }
    iVar5 = -1;
  }
  else {
    FUN_1800357d0((ulonglong *)&local_3b8,0,0x374);
    local_3b8 = 0x374;
    local_3b4 = (*(int *)(lVar2 + 0x47950) != 0) + 0x10002;
    local_48 = *(undefined4 *)(&DAT_1800737b4 + lVar7);
    local_340 = (&DAT_1800737b0)[uVar6 * 0x12a];
    local_348 = *(undefined8 *)(&DAT_180073810 + lVar7);
    local_3b0 = *(int *)(&DAT_180073798 + lVar7);
    local_3ac = *(int *)(&DAT_18007379c + lVar7);
    if (*(int *)(lVar2 + 0x47950) == 0) {
      local_5c = 0;
    }
    else {
      local_5c = *(undefined4 *)(lVar2 + 0x47954);
    }
    local_3a8 = *(undefined4 *)(lVar2 + 0x47944);
    local_3a4 = *(undefined4 *)(lVar2 + 0x47948);
    local_58 = *(undefined4 *)(lVar2 + 100);
    local_54 = *(undefined4 *)(lVar2 + 0x68);
    local_64 = *(undefined4 *)(lVar2 + 0xa4);
    local_60 = *(undefined4 *)(lVar2 + 0xa8);
    local_3a0 = *(undefined4 *)(&DAT_180073800 + lVar7);
    local_39c = *(undefined4 *)(&DAT_180073804 + lVar7);
    local_398 = *(undefined4 *)(&DAT_180073808 + lVar7);
    local_394 = *(undefined4 *)(&DAT_18007380c + lVar7);
    local_50 = *(undefined4 *)(lVar2 + 0x54);
    local_4c = *(undefined4 *)(lVar2 + 0x58);
    local_390 = *(undefined4 *)(&DAT_1800737c0 + lVar7);
    local_38c = *(undefined4 *)(&DAT_1800737c4 + lVar7);
    local_388 = *(undefined8 *)(&DAT_1800737e8 + lVar7);
    local_369 = 0;
    local_368 = *(undefined8 *)(&DAT_1800737c8 + lVar7);
    local_360 = *(undefined8 *)(&DAT_1800737d0 + lVar7);
    local_358 = *(undefined8 *)(&DAT_1800737d8 + lVar7);
    local_350 = *(ulonglong *)(&DAT_1800737e0 + lVar7) & 0xffffffffffffff;
    local_33c = *(undefined4 *)(&DAT_180073828 + lVar7);
    local_338 = *(undefined8 *)(&DAT_180073818 + lVar7);
    local_330 = *(undefined8 *)(&DAT_180073820 + lVar7);
    if ((*(uint *)(lVar2 + 0x98) < *(uint *)(lVar2 + 0x41884)) &&
       (_Src = (void *)((ulonglong)*(uint *)(lVar2 + 0x98) * 0x21c + 0x41888 + lVar2),
       _Src != (void *)0x0)) {
      memcpy(local_328,_Src,0x21c);
    }
    local_fc = *(undefined4 *)(&DAT_180073780 + lVar7);
    local_f8 = 0;
    local_f4 = *(undefined4 *)(lVar2 + 0xd4);
    local_f0 = *(undefined4 *)(lVar2 + 0xd8);
    local_ec = *(undefined4 *)(lVar2 + 0xf4);
    local_e8 = *(undefined4 *)(lVar2 + 0xf8);
    local_e4 = *(undefined4 *)(lVar2 + 0xd0);
    local_e0 = *(undefined4 *)(lVar2 + 0x10);
    local_dc = *(undefined4 *)(lVar2 + 0x14);
    local_d8 = *(undefined4 *)(lVar2 + 0x18);
    local_d4 = *(undefined4 *)(lVar2 + 0x1c);
    local_d0 = *(undefined4 *)(lVar2 + 0x20);
    local_cc = *(undefined4 *)(lVar2 + 0x24);
    local_c8 = *(undefined4 *)(lVar2 + 0x48);
    local_c4 = *(undefined4 *)(lVar2 + 0x4c);
    if (param_2 == (void *)0x0) {
      FUN_180020138((undefined8 *)local_408);
      uVar3 = FUN_180020a6c((longlong)local_408,(LPCWSTR)*param_3,0x1021,0);
      if ((int)uVar3 == 0) {
        SetLastError(0xe4ae0009);
        FUN_1800203a4(local_408);
        lVar2 = *param_3;
        LOCK();
        piVar1 = (int *)(lVar2 + -8);
        iVar5 = *piVar1;
        *piVar1 = *piVar1 + -1;
        UNLOCK();
        if (iVar5 + -1 < 1) {
          (**(code **)(**(longlong **)(lVar2 + -0x18) + 8))();
        }
        return 0;
      }
      FUN_18001ef2c(local_3d0);
      CFile::Write(local_408,&local_3b8,0x374);
      CFile::Write(local_408,*(void **)((&DAT_180073750)[uVar6 * 0x95] + 0x270),
                   local_3ac * local_3b0 * 2);
      FUN_18001ef94();
      CFile::Close(local_408);
      FUN_1800203a4(local_408);
      iVar4 = local_3ac;
      iVar5 = local_3b0;
    }
    else {
      memcpy(param_2,&local_3b8,0x374);
      iVar4 = local_3ac;
      iVar5 = local_3b0;
      memcpy((void *)((longlong)param_2 + 0x374),*(void **)((&DAT_180073750)[uVar6 * 0x95] + 0x270),
             (ulonglong)(uint)(local_3ac * local_3b0) * 2);
    }
    iVar5 = iVar4 * iVar5 * 2 + 0x374;
    lVar2 = *param_3;
    LOCK();
    piVar1 = (int *)(lVar2 + -8);
    iVar4 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar4 + -1 < 1) {
      (**(code **)(**(longlong **)(lVar2 + -0x18) + 8))();
    }
  }
  return iVar5;
}


==================================================================

### EXPORT FUNC 180008690 (24 bytes) name=Unwind@180008690

void Unwind_180008690(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0(*(longlong **)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 1800086b0 (24 bytes) name=Unwind@1800086b0

void Unwind_1800086b0(undefined8 param_1,longlong param_2)

{
  FUN_1800203a4((CFile *)(param_2 + 0x20));
  return;
}


==================================================================

### EXPORT FUNC 1800086d0 (24 bytes) name=Unwind@1800086d0

void Unwind_1800086d0(void)

{
  thunk_FUN_18001ef94();
  return;
}


==================================================================

### EXPORT FUNC 1800086f0 (67 bytes) name=Catch@1800086f0

undefined * Catch_1800086f0(undefined8 param_1,longlong param_2)

{
  longlong *plVar1;
  
  plVar1 = *(longlong **)(param_2 + 0x48);
  *(longlong **)(param_2 + 0x60) = plVar1;
  CFile::Close((CFile *)(param_2 + 0x20));
  FUN_18001ec74(plVar1);
  SetLastError(0xe4ae0009);
  return &DAT_180008646;
}


==================================================================

### EXPORT FUNC 180008740 (956 bytes) name=FUN_180008740

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

int FUN_180008740(uint param_1,undefined8 param_2,longlong *param_3)

{
  float fVar1;
  int iVar2;
  longlong lVar3;
  undefined1 auVar4 [16];
  uint uVar5;
  int iVar6;
  size_t sVar7;
  int *piVar8;
  undefined8 uVar9;
  undefined2 uVar10;
  uint uVar11;
  int *piVar12;
  ulonglong uVar13;
  ushort *puVar14;
  undefined1 auStack_108 [32];
  int *local_e8;
  uint local_e0;
  CFile local_d8 [32];
  longlong *local_b8;
  undefined8 local_b0;
  undefined8 local_a0 [3];
  undefined4 local_88;
  undefined4 local_84;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78;
  undefined4 local_74;
  undefined2 local_70;
  undefined2 local_6e;
  ulonglong local_48;
  
  local_b0 = 0xfffffffffffffffe;
  local_48 = DAT_18006cea0 ^ (ulonglong)auStack_108;
  uVar13 = (ulonglong)param_1;
  lVar3 = (&DAT_180073750)[uVar13 * 0x95];
  local_b8 = param_3;
  if (*(int *)(lVar3 + 0x234) == 0) {
    SetLastError(0xe4ae0006);
    lVar3 = *param_3;
    LOCK();
    piVar8 = (int *)(lVar3 + -8);
    iVar6 = *piVar8;
    *piVar8 = *piVar8 + -1;
    UNLOCK();
    if (iVar6 + -1 < 1) {
      (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
    }
    iVar6 = -1;
  }
  else {
    iVar6 = (&DAT_1800737b8)[uVar13 * 0x12a];
    iVar2 = *(int *)(&DAT_1800737bc + uVar13 * 0x4a8);
    FUN_1800357d0((ulonglong *)&local_88,0,0x40);
    local_88 = 0x524946;
    local_84 = *(undefined4 *)(lVar3 + 0xf8);
    local_80 = *(undefined4 *)(lVar3 + 0xd4);
    local_7c = *(undefined4 *)(lVar3 + 0xd0);
    local_78 = *(undefined4 *)(lVar3 + 0xd8);
    local_74 = *(undefined4 *)(lVar3 + 0xdc);
    local_70 = (undefined2)iVar6;
    local_6e = (undefined2)iVar2;
    uVar11 = iVar2 * iVar6;
    auVar4._8_8_ = 0;
    auVar4._0_8_ = (longlong)(int)uVar11;
    sVar7 = SUB168(ZEXT816(4) * auVar4,0);
    if (SUB168(ZEXT816(4) * auVar4,8) != 0) {
      sVar7 = 0xffffffffffffffff;
    }
    local_e0 = uVar11;
    piVar8 = thunk_FUN_18001eb74(sVar7);
    local_e8 = piVar8;
    if (piVar8 == (int *)0x0) {
      SetLastError(0xe4ae0002);
      lVar3 = *param_3;
      LOCK();
      piVar8 = (int *)(lVar3 + -8);
      iVar6 = *piVar8;
      *piVar8 = *piVar8 + -1;
      UNLOCK();
      if (iVar6 + -1 < 1) {
        (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
      }
      iVar6 = -2;
    }
    else {
      lVar3 = (&DAT_180073750)[uVar13 * 0x95];
      if (*(int *)(lVar3 + 0x234) == 0) {
        SetLastError(0xe4ae0005);
        thunk_FUN_180034a70(local_e8);
        lVar3 = *param_3;
        LOCK();
        piVar8 = (int *)(lVar3 + -8);
        iVar6 = *piVar8;
        *piVar8 = *piVar8 + -1;
        UNLOCK();
        if (iVar6 + -1 < 1) {
          (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
        }
        iVar6 = -3;
      }
      else {
        uVar5 = *(uint *)(lVar3 + 0x47938);
        if ((uVar11 & 0x3fffffff) < *(uint *)(lVar3 + 0x47938)) {
          uVar5 = uVar11 & 0x3fffffff;
        }
        puVar14 = *(ushort **)(lVar3 + 0x270);
        fVar1 = *(float *)(lVar3 + 0xd4);
        uVar11 = 0;
        if (uVar5 != 0) {
          do {
            iVar6 = FUN_180016290(lVar3,(uint)*puVar14,uVar11,1);
            puVar14 = puVar14 + 1;
            if (*(int *)(lVar3 + 0x78) != 0) {
              iVar6 = FUN_180015b90(lVar3,iVar6,fVar1);
            }
            *piVar8 = iVar6;
            piVar8 = piVar8 + 1;
            uVar11 = uVar11 + 1;
          } while (uVar11 < uVar5);
        }
        uVar11 = local_e0;
        uVar13 = (ulonglong)local_e0;
        piVar8 = local_e8;
        piVar12 = local_e8;
        if (0 < (int)local_e0) {
          do {
            iVar6 = *piVar12 / 10;
            if (iVar6 < 0x8bb8) {
              uVar10 = (undefined2)iVar6;
              if (iVar6 < -8000) {
                uVar10 = 0xe0c0;
              }
            }
            else {
              uVar10 = 0x7fff;
            }
            *(undefined2 *)piVar8 = uVar10;
            uVar13 = uVar13 - 1;
            piVar8 = (int *)((longlong)piVar8 + 2);
            piVar12 = piVar12 + 1;
          } while (uVar13 != 0);
        }
        FUN_180020138((undefined8 *)local_d8);
        uVar9 = FUN_180020a6c((longlong)local_d8,(LPCWSTR)*param_3,0x1021,0);
        if ((int)uVar9 == 0) {
          thunk_FUN_180034a70(local_e8);
          SetLastError(0xe4ae0009);
          FUN_1800203a4(local_d8);
          lVar3 = *param_3;
          LOCK();
          piVar8 = (int *)(lVar3 + -8);
          iVar6 = *piVar8;
          *piVar8 = *piVar8 + -1;
          UNLOCK();
          if (iVar6 + -1 < 1) {
            (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
          }
          iVar6 = 0;
        }
        else {
          FUN_18001ef2c(local_a0);
          CFile::Write(local_d8,&local_88,0x40);
          piVar8 = local_e8;
          CFile::Write(local_d8,local_e8,uVar11 * 2);
          FUN_18001ef94();
          CFile::Close(local_d8);
          FUN_1800203a4(local_d8);
          thunk_FUN_180034a70(piVar8);
          iVar6 = uVar11 * 2 + 0x40;
          lVar3 = *param_3;
          LOCK();
          piVar8 = (int *)(lVar3 + -8);
          iVar2 = *piVar8;
          *piVar8 = *piVar8 + -1;
          UNLOCK();
          if (iVar2 + -1 < 1) {
            (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
          }
        }
      }
    }
  }
  return iVar6;
}


==================================================================

### EXPORT FUNC 180008b20 (24 bytes) name=Unwind@180008b20

void Unwind_180008b20(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0(*(longlong **)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 180008b40 (24 bytes) name=Unwind@180008b40

void Unwind_180008b40(undefined8 param_1,longlong param_2)

{
  FUN_1800203a4((CFile *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 180008b60 (24 bytes) name=Unwind@180008b60

void Unwind_180008b60(void)

{
  thunk_FUN_18001ef94();
  return;
}


==================================================================

### EXPORT FUNC 180008b80 (76 bytes) name=Catch@180008b80

undefined * Catch_180008b80(undefined8 param_1,longlong param_2)

{
  longlong *plVar1;
  
  plVar1 = *(longlong **)(param_2 + 0x60);
  *(longlong **)(param_2 + 0x70) = plVar1;
  CFile::Close((CFile *)(param_2 + 0x30));
  FUN_18001ec74(plVar1);
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x20));
  SetLastError(0xe4ae0009);
  return &DAT_180008a93;
}


==================================================================

### EXPORT FUNC 180008bd0 (3886 bytes) name=FUN_180008bd0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 FUN_180008bd0(uint param_1)

{
  int *piVar1;
  ulonglong *puVar2;
  char cVar3;
  longlong *plVar4;
  undefined8 uVar5;
  undefined **ppuVar6;
  undefined8 *puVar7;
  int iVar8;
  uint uVar9;
  longlong lVar10;
  ulonglong *_Source;
  ulonglong uVar11;
  longlong lVar12;
  uint uVar13;
  char *pcVar14;
  ulonglong uVar15;
  longlong lVar16;
  undefined1 auStack_d8 [32];
  ulonglong *local_b8;
  uint local_b0;
  uint local_ac;
  uint local_a0;
  uint local_9c;
  undefined4 local_98;
  undefined8 local_78;
  undefined8 local_70 [5];
  undefined4 local_48;
  float local_44;
  char local_40;
  char local_3f;
  char local_3e;
  char local_3d;
  char local_3c;
  char local_3b;
  char local_3a;
  char local_39;
  ulonglong local_38;
  
  local_78 = 0xfffffffffffffffe;
  local_38 = DAT_18006cea0 ^ (ulonglong)auStack_d8;
  lVar16 = (longlong)(int)param_1;
  uVar11 = (ulonglong)param_1;
  lVar12 = uVar11 * 0x4a8;
  if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
    SetLastError(0xe4ae0005);
LAB_180008c52:
    if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
      SetLastError(0xe4ae0005);
    }
    else {
      uVar5 = FUN_18001d6e0((&DAT_180073758)[uVar11 * 0x95],(undefined8 *)&local_b0,local_70,1000);
      if ((int)uVar5 != 0) goto LAB_180008c98;
    }
    SetLastError(0xe4ae0008);
    uVar5 = 0;
  }
  else {
    uVar5 = FUN_18001d6e0((&DAT_180073758)[uVar11 * 0x95],(undefined8 *)&local_b0,local_70,500);
    if ((int)uVar5 == 0) goto LAB_180008c52;
LAB_180008c98:
    uVar9 = local_b0;
    uVar13 = local_ac >> 0x18;
    if ((((((uVar13 == 0) || (uVar13 == 1)) && (local_b0 != 0x9898f19)) &&
         ((local_b0 != 0x9898f1a && (local_b0 != 0x9898f1c)))) &&
        ((local_b0 != 0x9898f1f && ((local_b0 != 0x9898f20 && (local_b0 != 0x9898f21)))))) &&
       (local_b0 != 0x9898f2b)) {
      SetLastError(0xe4ae000b);
      uVar5 = 0;
    }
    else {
      FUN_1800357d0((ulonglong *)(&DAT_1800737b8 + uVar11 * 0x12a),0,0x48);
      *(undefined4 *)(&DAT_180073bac + lVar12) = 0;
      *(undefined4 *)(&DAT_180073bb0 + lVar12) = 0;
      FUN_1800357d0((ulonglong *)(&DAT_180073bb4 + lVar12),0,0x38);
      FUN_1800357d0((ulonglong *)((&DAT_180073750)[uVar11 * 0x95] + 8),0,200);
      (&DAT_1800737b0)[uVar11 * 0x12a] = uVar9;
      *(undefined4 *)(&DAT_1800737b4 + lVar12) = 0;
      *(undefined4 *)(&DAT_1800737c0 + lVar12) = 0;
      *(undefined4 *)(&DAT_1800737c4 + lVar12) = 0;
      ppuVar6 = FUN_18001fcc0();
      if (ppuVar6 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_18000b170(-0x7fffbffb);
      }
      puVar7 = (undefined8 *)(**(code **)(*ppuVar6 + 0x18))(ppuVar6);
      _Source = puVar7 + 3;
      local_b8 = _Source;
      switch(uVar13) {
      case 0:
        lVar10 = -1;
        pcVar14 = "C1";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_1800590e0 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_1800590e0,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      case 1:
        lVar10 = -1;
        pcVar14 = "M3";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_180059100 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_180059100,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      case 2:
        lVar10 = -1;
        pcVar14 = "M3Pro";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_180059104 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_180059104,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      case 3:
        lVar10 = -1;
        pcVar14 = "160Core";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_1800590f8 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_1800590f8,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      case 4:
        lVar10 = -1;
        pcVar14 = "M6";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_18005910c - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_18005910c,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      case 5:
        lVar10 = -1;
        pcVar14 = "C1Pro";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_1800590e4 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_1800590e4,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      case 6:
        lVar10 = -1;
        pcVar14 = "C1ProLt";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_1800590f0 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_1800590f0,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
        break;
      default:
        lVar10 = -1;
        pcVar14 = "Mx";
        do {
          if (lVar10 == 0) break;
          lVar10 = lVar10 + -1;
          cVar3 = *pcVar14;
          pcVar14 = pcVar14 + 1;
        } while (cVar3 != '\0');
        iVar8 = ~(uint)lVar10 - 1;
        if (iVar8 == 0) {
          plVar4 = (longlong *)*puVar7;
          if (*(int *)(puVar7 + 1) != 0) {
            if (*(int *)(puVar7 + 2) < 0) {
              if (*(int *)((longlong)puVar7 + 0xc) < 0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7ff8ffa9);
              }
              *(undefined4 *)(puVar7 + 1) = 0;
              *(char *)_Source = '\0';
            }
            else {
              LOCK();
              piVar1 = (int *)(puVar7 + 2);
              iVar8 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar8 + -1 < 1) {
                (**(code **)(*(longlong *)*puVar7 + 8))();
              }
              lVar10 = (**(code **)(*plVar4 + 0x18))(plVar4);
              _Source = (ulonglong *)(lVar10 + 0x18);
              uVar9 = local_b0;
              local_b8 = _Source;
            }
          }
        }
        else {
          uVar13 = *(uint *)(puVar7 + 1);
          uVar15 = (longlong)&DAT_180059110 - (longlong)_Source;
          if ((int)(*(int *)((longlong)puVar7 + 0xc) - iVar8 | 1U - *(int *)(puVar7 + 2)) < 0) {
            FUN_18000ab60((longlong *)&local_b8,iVar8);
          }
          _Source = local_b8;
          if (uVar13 < uVar15) {
            FUN_180032c60(local_b8,(longlong)iVar8,&DAT_180059110,(longlong)iVar8);
          }
          else {
            memmove_s(local_b8,(longlong)iVar8,(void *)(uVar15 + (longlong)local_b8),(longlong)iVar8
                     );
          }
          if ((iVar8 < 0) || (*(int *)((longlong)_Source + -0xc) < iVar8)) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7ff8ffa9);
          }
          *(int *)(_Source + -2) = iVar8;
          *(undefined1 *)((longlong)iVar8 + (longlong)_Source) = 0;
        }
      }
      strncpy(&DAT_1800737e8 + lVar12,(char *)_Source,8);
      (&DAT_1800737ef)[lVar12] = 0;
      FUN_180032bb0(&DAT_1800737c8 + lVar12,(byte *)"%s-%u",_Source,(ulonglong)uVar9);
      (&DAT_1800737e7)[lVar12] = 0;
      (&DAT_1800737b8)[uVar11 * 0x12a] = local_a0;
      *(uint *)(&DAT_1800737bc + lVar12) = local_9c;
      *(uint *)(&DAT_1800737f8 + lVar12) = local_a0;
      *(uint *)(&DAT_1800737fc + lVar12) = local_9c;
      if ((local_a0 < 0x51) && (local_9c < 0x51)) {
        *(uint *)(&DAT_1800737f8 + lVar12) = local_a0 * 4;
        *(uint *)(&DAT_1800737fc + lVar12) = local_9c * 4;
      }
      if ((local_a0 < 0xa1) && (local_9c < 0xa1)) {
        *(int *)(&DAT_1800737f8 + lVar12) = *(int *)(&DAT_1800737f8 + lVar12) * 2;
        *(int *)(&DAT_1800737fc + lVar12) = *(int *)(&DAT_1800737fc + lVar12) * 2;
      }
      *(undefined4 *)(&DAT_1800737f0 + lVar12) = local_98;
      *(undefined4 *)(&DAT_1800737f4 + lVar12) = local_98;
      *(undefined4 *)(&DAT_180073780 + lVar12) = 2;
      FUN_18000d5f0((&DAT_180073750)[uVar11 * 0x95],2);
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 100) = 1;
      lVar12 = (&DAT_180073750)[uVar11 * 0x95];
      EnterCriticalSection((LPCRITICAL_SECTION)(lVar12 + 0x238));
      memcpy(&DAT_180099000,&DAT_18005cde0,0xa1c);
      lVar10 = 0;
      do {
        uVar9 = *(int *)((longlong)&DAT_180099004 + lVar10) -
                *(int *)((longlong)&DAT_180099000 + lVar10);
        *(uint *)((longlong)&DAT_180099a20 + lVar10) = ((uVar9 >> 1) + 0x1000000) / uVar9;
        uVar9 = *(int *)((longlong)&DAT_180099008 + lVar10) -
                *(int *)((longlong)&DAT_180099004 + lVar10);
        *(uint *)((longlong)&DAT_180099a24 + lVar10) = ((uVar9 >> 1) + 0x1000000) / uVar9;
        lVar10 = lVar10 + 8;
      } while (lVar10 < 0xa18);
      DAT_180073748 = (undefined4)(0x7fffffff / (longlong)DAT_18009a434);
      *(undefined4 *)(lVar12 + 0x68) = 7;
      LeaveCriticalSection((LPCRITICAL_SECTION)(lVar12 + 0x238));
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x50) = 200;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 8) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x10) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x14) = 20000;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x18) = 100000;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x1c) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x20) = 0xff;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x24) = 5;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x70) = 1;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x8c) = 1;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x6c) = 1;
      if (local_44 == _DAT_180057598) {
        *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xa4) = 0;
        *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xa8) = 0;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xac) = local_40 * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xb0) = local_3f * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xb4) = local_3e * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xb8) = local_3d * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xbc) = local_3c * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xc0) = local_3b * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 0xc4) = local_3a * 0x32;
        *(int *)((&DAT_180073750)[lVar16 * 0x95] + 200) = local_39 * 0x32;
      }
      else {
        *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xa4) = local_48;
        *(float *)((&DAT_180073750)[uVar11 * 0x95] + 0xa8) = local_44;
        lVar12 = (&DAT_180073750)[uVar11 * 0x95];
        *(undefined4 *)(lVar12 + 0xac) = 0;
        *(undefined4 *)(lVar12 + 0xb0) = 0;
        *(undefined4 *)(lVar12 + 0xb4) = 0;
        *(undefined4 *)(lVar12 + 0xb8) = 0;
        *(undefined4 *)(lVar12 + 0xbc) = 0;
        *(undefined4 *)(lVar12 + 0xc0) = 0;
        *(undefined4 *)(lVar12 + 0xc4) = 0;
        *(undefined4 *)(lVar12 + 200) = 0;
      }
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xcc) = 2;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xd0) = 0x41200000;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xd4) = 0x3f800000;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xd8) = 0x41a00000;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xdc) = 0x3ecccccd;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xe0) = 0x41a00000;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xe4) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xe8) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xec) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xf0) = 0;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xf4) = 0x3f7fa57f;
      *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0xf8) = 0x3f800000;
      LOCK();
      puVar2 = _Source + -1;
      uVar11 = *puVar2;
      *(int *)puVar2 = (int)*puVar2 + -1;
      UNLOCK();
      if ((int)uVar11 + -1 < 1) {
        (**(code **)(*(longlong *)_Source[-3] + 8))();
      }
      uVar5 = 1;
    }
  }
  return uVar5;
}


==================================================================

### EXPORT FUNC 180009b30 (24 bytes) name=Unwind@180009b30

void Unwind_180009b30(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x20));
  return;
}


==================================================================

### EXPORT FUNC 180009b50 (875 bytes) name=FUN_180009b50

undefined8 FUN_180009b50(uint param_1,uint *param_2,longlong param_3,int param_4)

{
  LPCWSTR pWVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  LPVOID pvVar5;
  ulonglong uVar6;
  undefined8 uVar7;
  longlong lVar8;
  ulonglong uVar9;
  LPCWSTR local_res10;
  uint local_50;
  uint local_4c;
  uint local_48;
  uint local_44;
  uint local_40;
  uint local_3c;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  
  uVar9 = (ulonglong)param_1;
  if (((param_2 != (uint *)0x0) && (param_3 != 0)) && (param_4 == 2)) {
    lVar8 = uVar9 * 0x4a8;
    uVar2 = *param_2;
    if ((((uVar2 == (&DAT_1800737b8)[uVar9 * 0x12a]) &&
         (uVar3 = param_2[1], uVar3 == *(uint *)(&DAT_1800737bc + lVar8))) &&
        (((uVar2 & 3) == 0 && (((param_2[2] & 3) == 0 && ((param_2[4] & 3) == 0)))))) &&
       ((uVar2 <= param_2[2] &&
        ((((uVar3 <= param_2[3] && (uVar3 != 0)) && (param_2[3] != 0)) && (param_2[5] != 0)))))) {
      if (*(int *)(&DAT_180073778 + lVar8) != 0) {
        SetLastError(0xe4ae000a);
        return 0;
      }
      if (*(int *)((&DAT_180073758)[uVar9 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
        return 0;
      }
      *(undefined4 *)(&DAT_18007377c + lVar8) = 2;
      *(undefined4 *)(&DAT_180073bf4 + lVar8) = 0;
      *(undefined4 *)(&DAT_180073bf0 + lVar8) = 0;
      *(uint *)(&DAT_180073798 + lVar8) = *param_2;
      *(uint *)(&DAT_18007379c + lVar8) = param_2[1];
      *(uint *)(&DAT_1800737a0 + lVar8) = param_2[2];
      *(uint *)(&DAT_1800737a4 + lVar8) = param_2[3];
      *(uint *)(&DAT_1800737a8 + lVar8) = param_2[4];
      *(uint *)(&DAT_1800737ac + lVar8) = param_2[5];
      uVar2 = *param_2 * param_2[1] * 2;
      if (*(LPVOID *)(&DAT_180073788 + lVar8) != (LPVOID)0x0) {
        thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar8));
        *(undefined8 *)(&DAT_180073788 + lVar8) = 0;
      }
      pvVar5 = thunk_FUN_18001eb74((ulonglong)uVar2 + 0x98);
      *(LPVOID *)(&DAT_180073788 + lVar8) = pvVar5;
      if (pvVar5 == (LPVOID)0x0) {
        SetLastError(0xe4ae0002);
        return 0;
      }
      local_50 = *param_2;
      local_4c = param_2[1];
      local_48 = param_2[2];
      local_44 = param_2[3];
      local_40 = param_2[4];
      local_3c = param_2[5];
      local_38 = 4;
      local_34 = 1;
      local_30 = 1;
      local_2c = 5;
      uVar6 = FUN_18001e4c0((&DAT_180073758)[uVar9 * 0x95]);
      if ((int)uVar6 == 0) {
        SetLastError(0xe4ae0008);
        return 0;
      }
      iVar4 = FUN_18000bce0((&DAT_180073750)[uVar9 * 0x95],&local_50);
      if (iVar4 == 0) {
        if (*(LPVOID *)(&DAT_180073788 + lVar8) != (LPVOID)0x0) {
          thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar8));
          *(undefined8 *)(&DAT_180073788 + lVar8) = 0;
        }
        SetLastError(0xe4ae0003);
        return 0;
      }
      FUN_18001e3c0((&DAT_180073758)[uVar9 * 0x95],(longlong *)&local_res10);
      iVar4 = FUN_18000f130((&DAT_180073750)[uVar9 * 0x95],local_res10);
      if (iVar4 == 0) {
        SetLastError(0xe4ae0009);
        LOCK();
        pWVar1 = local_res10 + -4;
        iVar4 = *(int *)pWVar1;
        *(int *)pWVar1 = *(int *)pWVar1 + -1;
        UNLOCK();
        if (iVar4 + -1 < 1) {
          (**(code **)(**(longlong **)(local_res10 + -0xc) + 8))();
        }
        return 0;
      }
      FUN_180002f50(param_1);
      if (*(int *)((longlong)(&DAT_180073758)[uVar9 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        uVar7 = FUN_18001d2d0((void *)(&DAT_180073758)[uVar9 * 0x95],uVar2,
                              *(longlong *)(&DAT_180073788 + lVar8));
        if ((int)uVar7 != 0) {
          *(longlong *)(&DAT_180073790 + lVar8) = param_3;
          *(undefined4 *)(&DAT_180073bec + lVar8) = 0xffffffff;
          *(undefined4 *)(&DAT_180073778 + lVar8) = 1;
          LOCK();
          pWVar1 = local_res10 + -4;
          iVar4 = *(int *)pWVar1;
          *(int *)pWVar1 = *(int *)pWVar1 + -1;
          UNLOCK();
          if (iVar4 + -1 < 1) {
            (**(code **)(**(longlong **)(local_res10 + -0xc) + 8))();
          }
          return 1;
        }
      }
      if (*(LPVOID *)(&DAT_180073788 + lVar8) != (LPVOID)0x0) {
        thunk_FUN_180034a70(*(LPVOID *)(&DAT_180073788 + lVar8));
        *(undefined8 *)(&DAT_180073788 + lVar8) = 0;
      }
      SetLastError(0xe4ae0008);
      LOCK();
      pWVar1 = local_res10 + -4;
      iVar4 = *(int *)pWVar1;
      *(int *)pWVar1 = *(int *)pWVar1 + -1;
      UNLOCK();
      if (iVar4 + -1 < 1) {
        (**(code **)(**(longlong **)(local_res10 + -0xc) + 8))();
      }
      return 0;
    }
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 180009ec0 (27 bytes) name=Unwind@180009ec0

void Unwind_180009ec0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x88));
  return;
}


==================================================================

### EXPORT FUNC 180009ee0 (1300 bytes) name=FUN_180009ee0

void FUN_180009ee0(uint param_1,longlong param_2)

{
  char cVar1;
  longlong lVar2;
  bool bVar3;
  uint uVar4;
  DWORD DVar5;
  int iVar6;
  __time64_t _Var7;
  ulonglong uVar8;
  byte *pbVar9;
  undefined7 extraout_var;
  uint uVar10;
  ulonglong uVar11;
  longlong lVar12;
  uint uVar13;
  int iVar14;
  undefined8 in_XMM1_Qa;
  uint local_res10 [2];
  undefined8 local_68;
  undefined8 local_60;
  undefined8 local_58;
  __time64_t local_50;
  undefined8 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined8 local_30;
  
  uVar11 = (ulonglong)param_1;
  lVar12 = uVar11 * 0x4a8;
  if (*(int *)(&DAT_180073778 + lVar12) == 0) {
    return;
  }
  if ((*(uint *)(param_2 + 0xc) & 3) != 0) {
    if (*(int *)(param_2 + 0x14) != (&DAT_1800737b8)[uVar11 * 0x12a]) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737bc + lVar12)) {
      return;
    }
  }
  if ((*(uint *)(param_2 + 0xc) & 4) != 0) {
    if (*(int *)(param_2 + 0x14) != *(int *)(&DAT_1800737f8 + lVar12)) {
      return;
    }
    if (*(int *)(param_2 + 0x18) != *(int *)(&DAT_1800737fc + lVar12)) {
      return;
    }
  }
  _Var7 = _time64((__time64_t *)0x0);
  *(int *)(&DAT_180073bf0 + lVar12) = *(int *)(&DAT_180073bf0 + lVar12) + 1;
  lVar2 = (&DAT_180073758)[uVar11 * 0x95];
  *(__time64_t *)(&DAT_180073810 + lVar12) = _Var7;
  *(undefined8 *)(&DAT_180073818 + lVar12) = 0;
  *(undefined8 *)(&DAT_180073820 + lVar12) = 0;
  *(undefined4 *)(&DAT_180073828 + lVar12) = 0;
  cVar1 = *(char *)(lVar2 + 0x2d47);
  if ((cVar1 == '\x01') || (cVar1 == '\x02')) {
    if (*(uint *)(&DAT_180073bf0 + lVar12) < 0x14) {
      return;
    }
  }
  else if ((cVar1 == '\x04') && (*(uint *)(&DAT_180073bf0 + lVar12) < 8)) {
    return;
  }
  *(int *)(param_2 + 0x28) = *(int *)(param_2 + 0x28) + (int)*(short *)(lVar2 + 0x2d86);
  *(int *)(param_2 + 0x2c) = *(int *)(param_2 + 0x2c) + (int)*(short *)(lVar2 + 0x2d86);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x60) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)((&DAT_180073750)[uVar11 * 0x95] + 0x5c) = *(undefined4 *)(param_2 + 0x2c);
  iVar6 = *(int *)(&DAT_180073bec + lVar12);
  *(undefined4 *)(&DAT_180073800 + lVar12) = *(undefined4 *)(param_2 + 0x28);
  *(undefined4 *)(&DAT_180073804 + lVar12) = *(undefined4 *)(param_2 + 0x2c);
  if (iVar6 < 0) {
    FUN_180002f50(param_1);
    return;
  }
  uVar10 = iVar6 + 1;
  *(uint *)(&DAT_180073bec + lVar12) = uVar10;
  uVar13 = *(uint *)(lVar2 + 0x2d88);
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,
                  *(int *)(lVar2 + 0x2d8c) + uVar13 + *(int *)(lVar2 + 0x2d78));
    return;
  }
  uVar4 = *(int *)(lVar2 + 0x2d78) + uVar13;
  if (uVar10 <= uVar4) {
    if (uVar10 == uVar4) {
      if (*(int *)((&DAT_180073758)[uVar11 * 0x95] + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        local_res10[0] = 0x6bb6b672;
        local_res10[1] = 1;
        FUN_18001c670((&DAT_180073758)[uVar11 * 0x95],local_res10,8);
      }
    }
    FUN_18000c620((&DAT_180073750)[uVar11 * 0x95],(ushort *)(param_2 + 0x4c),
                  (uint)(*(int *)(&DAT_180073bec + lVar12) == *(int *)(lVar2 + 0x2d88) + 1));
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],*(int *)(&DAT_180073bec + lVar12) + -1,
                  *(int *)(lVar2 + 0x2d8c) + *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d88));
    return;
  }
  uVar13 = *(int *)(lVar2 + 0x2d78) + *(int *)(lVar2 + 0x2d8c) + uVar13;
  if (uVar10 <= uVar13) {
    FUN_18000c760((&DAT_180073750)[uVar11 * 0x95],iVar6,uVar13);
    return;
  }
  iVar14 = 0;
  switch(cVar1) {
  case '\0':
  case '\x03':
  case '\x05':
  case '\x06':
    if ((*(int *)(&DAT_180073bf4 + lVar12) == 0) && (iVar14 = 0, uVar10 == 0x4b)) {
      *(undefined4 *)(&DAT_180073bf4 + lVar12) = 1;
      iVar14 = iVar6 + -0x49;
    }
    iVar6 = 0x1e;
    break;
  case '\x01':
  case '\x02':
  case '\x04':
    if ((*(uint *)(&DAT_180073bf4 + lVar12) < 5) && (iVar14 = 0, uVar10 == 0x82 - uVar13)) {
      iVar14 = 1;
      *(uint *)(&DAT_180073bf4 + lVar12) = *(uint *)(&DAT_180073bf4 + lVar12) + 1;
    }
    iVar6 = 100;
    break;
  default:
    iVar6 = 100;
    goto LAB_18000a1d2;
  }
  if (iVar14 == 0) {
LAB_18000a1d2:
    if ((uVar10 < uVar13 + *(int *)(lVar2 + 0x2d90)) &&
       ((uVar10 < iVar6 + uVar13 ||
        (uVar13 = *(int *)((&DAT_180073750)[uVar11 * 0x95] + 0x54) - *(int *)(param_2 + 0x2c),
        uVar10 = (int)uVar13 >> 0x1f, (uVar13 ^ uVar10) - uVar10 <= *(uint *)(lVar2 + 0x2d94)))))
    goto LAB_18000a20a;
  }
  FUN_180002f50(param_1);
LAB_18000a20a:
  uVar8 = FUN_18000ca30((&DAT_180073750)[uVar11 * 0x95],in_XMM1_Qa,0,1,0);
  if ((uVar8 & 1) != 0) {
    if ((*(int *)((&DAT_180073768)[uVar11 * 0x95] + 0x44) != 0) &&
       (*(int *)(&DAT_180073ba4 + lVar12) = *(int *)(&DAT_180073ba4 + lVar12) + 1,
       *(int *)(&DAT_180073ba8 + lVar12) <= *(int *)(&DAT_180073ba4 + lVar12))) {
      *(undefined4 *)(&DAT_180073ba4 + lVar12) = 0;
      local_50 = 0;
      local_48 = 0;
      local_40 = 0;
      local_38 = 0;
      local_30 = 0;
      local_68 = 0x1010000000040;
      local_60 = *(undefined8 *)(&DAT_180073800 + lVar12);
      local_58 = *(undefined8 *)(&DAT_180073808 + lVar12);
      local_50 = _time64((__time64_t *)0x0);
      DVar5 = GetTickCount();
      local_48 = CONCAT44(*(undefined4 *)(param_2 + 0x38),DVar5);
      FUN_18001b1b0((&DAT_180073768)[uVar11 * 0x95],(longlong)&local_68,0x40,
                    *(longlong *)((&DAT_180073750)[uVar11 * 0x95] + 0x270),
                    *(int *)(param_2 + 0x18) * *(int *)(param_2 + 0x14) * 2);
    }
    if (*(int *)((&DAT_180073760)[uVar11 * 0x95] + 0x44) != 0) {
      pbVar9 = (byte *)FUN_1800110a0((&DAT_180073750)[uVar11 * 0x95]);
      lVar2 = (&DAT_180073750)[uVar11 * 0x95];
      if (((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) &&
         (iVar6 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) *
                  *(int *)(lVar2 + 0x6cc), iVar6 = iVar6 + (iVar6 >> 0x1f & 7U),
         uVar13 = iVar6 >> 0x1f,
         bVar3 = FUN_180001cd0((&DAT_180073760)[uVar11 * 0x95],pbVar9,(iVar6 >> 3 ^ uVar13) - uVar13
                               ,lVar2 + 0x6c8), (int)CONCAT71(extraout_var,bVar3) == 0)) {
        FUN_180001c50((&DAT_180073760)[uVar11 * 0x95]);
      }
    }
    if (*(code **)(&DAT_180073790 + lVar12) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar12))
                (param_1,*(undefined4 *)(param_2 + 0x28),*(undefined4 *)(param_2 + 0x38),
                 *(undefined4 *)(param_2 + 0x44),2,*(undefined8 *)(&DAT_180073770 + lVar12));
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18000a410 (496 bytes) name=FUN_18000a410

void FUN_18000a410(uint param_1,undefined8 param_2,longlong param_3)

{
  undefined4 uVar1;
  longlong lVar2;
  bool bVar3;
  int iVar4;
  undefined8 uVar5;
  undefined7 extraout_var;
  uint uVar6;
  ulonglong uVar7;
  longlong lVar8;
  byte *pbVar9;
  
  uVar1 = *(undefined4 *)(param_3 + 8);
  uVar7 = (ulonglong)param_1;
  lVar8 = uVar7 * 0x4a8;
  *(undefined4 *)(&DAT_180073800 + lVar8) = uVar1;
  *(undefined4 *)(&DAT_180073804 + lVar8) = *(undefined4 *)(param_3 + 0xc);
  *(undefined4 *)(&DAT_180073808 + lVar8) = *(undefined4 *)(param_3 + 0x10);
  *(undefined4 *)(&DAT_18007380c + lVar8) = *(undefined4 *)(param_3 + 0x14);
  *(undefined8 *)(&DAT_180073810 + lVar8) = *(undefined8 *)(param_3 + 0x18);
  *(undefined8 *)(&DAT_180073818 + lVar8) = *(undefined8 *)(param_3 + 0x28);
  *(undefined8 *)(&DAT_180073820 + lVar8) = *(undefined8 *)(param_3 + 0x30);
  *(undefined4 *)(&DAT_180073828 + lVar8) = *(undefined4 *)(param_3 + 0x38);
  *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x60) = uVar1;
  *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x5c) = *(undefined4 *)(&DAT_180073804 + lVar8);
  if (*(int *)(&DAT_180073ba0 + lVar8) < *(int *)(param_3 + 0x24)) {
    EnterCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar7 * 0x95] + 0x238));
    *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x58) =
         *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x60);
    *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x54) =
         *(undefined4 *)((&DAT_180073750)[uVar7 * 0x95] + 0x5c);
    LeaveCriticalSection((LPCRITICAL_SECTION)((&DAT_180073750)[uVar7 * 0x95] + 0x238));
  }
  lVar2 = (&DAT_180073750)[uVar7 * 0x95];
  pbVar9 = (byte *)0x0;
  *(undefined4 *)(&DAT_180073ba0 + lVar8) = *(undefined4 *)(param_3 + 0x24);
  uVar5 = FUN_18000ca30(lVar2,param_2,1,1,0);
  if ((int)uVar5 != 0) {
    if (*(int *)((&DAT_180073760)[uVar7 * 0x95] + 0x44) != 0) {
      lVar2 = (&DAT_180073750)[uVar7 * 0x95];
      if ((*(int *)(lVar2 + 0x228) != 0) && (*(int *)(lVar2 + 0x234) != 0)) {
        if (*(int *)(lVar2 + 0x4203c) == 0) {
          FUN_180010e80(lVar2);
        }
        pbVar9 = *(byte **)(lVar2 + 0x2a0);
      }
      lVar2 = (&DAT_180073750)[uVar7 * 0x95];
      if ((pbVar9 != (byte *)0x0) && (lVar2 + 0x6c8 != 0)) {
        iVar4 = (uint)*(ushort *)(lVar2 + 0x6d6) * *(int *)(lVar2 + 0x6d0) * *(int *)(lVar2 + 0x6cc)
        ;
        iVar4 = iVar4 + (iVar4 >> 0x1f & 7U);
        uVar6 = iVar4 >> 0x1f;
        bVar3 = FUN_180001cd0((&DAT_180073760)[uVar7 * 0x95],pbVar9,(iVar4 >> 3 ^ uVar6) - uVar6,
                              lVar2 + 0x6c8);
        if ((int)CONCAT71(extraout_var,bVar3) == 0) {
          FUN_180001c50((&DAT_180073760)[uVar7 * 0x95]);
        }
      }
    }
    if (*(code **)(&DAT_180073790 + lVar8) != (code *)0x0) {
      (**(code **)(&DAT_180073790 + lVar8))
                (param_1,*(undefined4 *)(param_3 + 8),*(undefined4 *)(param_3 + 0x24),0,2,
                 *(undefined8 *)(&DAT_180073770 + lVar8));
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18000a600 (372 bytes) name=FUN_18000a600

longlong * FUN_18000a600(longlong *param_1,LPCSTR param_2)

{
  int *piVar1;
  int iVar2;
  uint uVar3;
  longlong *plVar4;
  undefined **ppuVar5;
  longlong lVar6;
  HMODULE pHVar7;
  void *pvVar8;
  ulonglong uVar9;
  int iVar10;
  void *pvVar11;
  void *local_res8;
  
  if (*(longlong **)(*param_1 + -0x18) != (longlong *)0x0) {
    plVar4 = (longlong *)(**(code **)(**(longlong **)(*param_1 + -0x18) + 0x20))();
    if (plVar4 != (longlong *)0x0) goto LAB_18000a651;
  }
  ppuVar5 = FUN_18001fcc0();
  plVar4 = (longlong *)(**(code **)(*ppuVar5 + 0x20))(ppuVar5);
LAB_18000a651:
  if (plVar4 == (longlong *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar6 = (**(code **)(*plVar4 + 0x18))(plVar4);
  pvVar8 = (void *)(lVar6 + 0x18);
  local_res8 = pvVar8;
  if ((param_2 == (LPCSTR)0x0) || (((ulonglong)param_2 & 0xffffffffffff0000) != 0)) {
    FUN_18000ad80((longlong *)&local_res8,param_2);
    pvVar8 = local_res8;
  }
  else {
    pHVar7 = (HMODULE)FUN_18001fcac();
    if (pHVar7 != (HMODULE)0x0) {
      FUN_18000af50((longlong *)&local_res8,pHVar7,(uint)param_2 & 0xffff);
      pvVar8 = local_res8;
    }
  }
  iVar2 = *(int *)((longlong)pvVar8 + -0x10);
  lVar6 = *param_1;
  uVar9 = (longlong)pvVar8 - lVar6 >> 1;
  uVar3 = *(uint *)(lVar6 + -0x10);
  iVar10 = uVar3 + iVar2;
  if ((int)(*(int *)(lVar6 + -0xc) - iVar10 | 1U - *(int *)(lVar6 + -8)) < 0) {
    FUN_18000b190(param_1,iVar10);
  }
  pvVar11 = pvVar8;
  if (uVar9 <= uVar3) {
    pvVar11 = (void *)(*param_1 + uVar9 * 2);
  }
  uVar9 = (longlong)iVar2 * 2;
  FUN_180032c60((ulonglong *)(*param_1 + (ulonglong)uVar3 * 2),uVar9,pvVar11,uVar9);
  if ((-1 < iVar10) && (iVar10 <= *(int *)(*param_1 + -0xc))) {
    *(int *)(*param_1 + -0x10) = iVar10;
    *(undefined2 *)(*param_1 + (longlong)iVar10 * 2) = 0;
    LOCK();
    piVar1 = (int *)((longlong)pvVar8 + -8);
    iVar2 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar2 + -1 < 1) {
      (**(code **)(**(longlong **)((longlong)pvVar8 + -0x18) + 8))();
    }
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8ffa9);
}


==================================================================

### EXPORT FUNC 18000a780 (24 bytes) name=Unwind@18000a780

void Unwind_18000a780(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x60));
  return;
}


==================================================================

### EXPORT FUNC 18000a7a0 (24 bytes) name=Unwind@18000a7a0

void Unwind_18000a7a0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x60));
  return;
}


==================================================================

### EXPORT FUNC 18000a7c0 (395 bytes) name=FUN_18000a7c0

longlong * FUN_18000a7c0(longlong *param_1,longlong *param_2,int param_3)

{
  int iVar1;
  void *pvVar2;
  ulonglong uVar3;
  undefined8 *puVar4;
  longlong lVar5;
  undefined **ppuVar6;
  
  pvVar2 = (void *)*param_1;
  iVar1 = *(int *)((longlong)pvVar2 + -0x10);
  if (param_3 < 0) {
    param_3 = 0;
  }
  if (iVar1 <= param_3) {
    puVar4 = (undefined8 *)(**(code **)(**(longlong **)((longlong)pvVar2 + -0x18) + 0x20))();
    if ((-1 < *(int *)((longlong)pvVar2 + -8)) &&
       (puVar4 == *(undefined8 **)((longlong)pvVar2 + -0x18))) {
      LOCK();
      *(int *)((longlong)pvVar2 + -8) = *(int *)((longlong)pvVar2 + -8) + 1;
      UNLOCK();
      *param_2 = (longlong)pvVar2;
      return param_2;
    }
    lVar5 = (**(code **)*puVar4)(puVar4,*(undefined4 *)((longlong)pvVar2 + -0x10),2);
    if (lVar5 == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000ad70();
    }
    *(undefined4 *)(lVar5 + 8) = *(undefined4 *)((longlong)pvVar2 + -0x10);
    uVar3 = (longlong)(*(int *)((longlong)pvVar2 + -0x10) + 1) * 2;
    FUN_180032c60((ulonglong *)(lVar5 + 0x18),uVar3,pvVar2,uVar3);
    *param_2 = lVar5 + 0x18;
    return param_2;
  }
  if (*(longlong **)((longlong)pvVar2 + -0x18) != (longlong *)0x0) {
    puVar4 = (undefined8 *)(**(code **)(**(longlong **)((longlong)pvVar2 + -0x18) + 0x20))();
    if (puVar4 != (undefined8 *)0x0) goto LAB_18000a8b1;
  }
  ppuVar6 = FUN_18001fcc0();
  puVar4 = (undefined8 *)(**(code **)(*ppuVar6 + 0x20))(ppuVar6);
LAB_18000a8b1:
  pvVar2 = (void *)(*param_1 + ((longlong)iVar1 - (longlong)param_3) * 2);
  if (puVar4 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  if ((pvVar2 == (void *)0x0) && (param_3 != 0)) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7ff8ffa9);
  }
  lVar5 = (**(code **)*puVar4)(puVar4,param_3,2);
  if (lVar5 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000ad70();
  }
  *param_2 = lVar5 + 0x18;
  if ((-1 < param_3) && (param_3 <= *(int *)(lVar5 + 0xc))) {
    *(int *)(lVar5 + 8) = param_3;
    uVar3 = (longlong)param_3 * 2;
    *(undefined2 *)(uVar3 + *param_2) = 0;
    FUN_180032c60((ulonglong *)*param_2,uVar3,pvVar2,uVar3);
    return param_2;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8ffa9);
}


==================================================================

### EXPORT FUNC 18000a950 (347 bytes) name=FUN_18000a950

longlong * FUN_18000a950(undefined8 *param_1,longlong *param_2,int param_3)

{
  void *pvVar1;
  ulonglong uVar2;
  undefined8 *puVar3;
  longlong *plVar4;
  undefined **ppuVar5;
  longlong lVar6;
  
  pvVar1 = (void *)*param_1;
  if (param_3 < 0) {
    param_3 = 0;
  }
  if (*(int *)((longlong)pvVar1 + -0x10) <= param_3) {
    plVar4 = (longlong *)((longlong)pvVar1 + -0x18);
    puVar3 = (undefined8 *)(**(code **)(**(longlong **)((longlong)pvVar1 + -0x18) + 0x20))();
    if ((*(int *)((longlong)pvVar1 + -8) < 0) || (puVar3 != (undefined8 *)*plVar4)) {
      plVar4 = (longlong *)(**(code **)*puVar3)(puVar3,*(undefined4 *)((longlong)pvVar1 + -0x10),2);
      if (plVar4 == (longlong *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_18000ad70();
      }
      *(undefined4 *)(plVar4 + 1) = *(undefined4 *)((longlong)pvVar1 + -0x10);
      uVar2 = (longlong)(*(int *)((longlong)pvVar1 + -0x10) + 1) * 2;
      FUN_180032c60((ulonglong *)(plVar4 + 3),uVar2,pvVar1,uVar2);
    }
    else {
      LOCK();
      *(int *)((longlong)pvVar1 + -8) = *(int *)((longlong)pvVar1 + -8) + 1;
      UNLOCK();
    }
    *param_2 = (longlong)(plVar4 + 3);
    return param_2;
  }
  if (*(longlong **)((longlong)pvVar1 + -0x18) != (longlong *)0x0) {
    puVar3 = (undefined8 *)(**(code **)(**(longlong **)((longlong)pvVar1 + -0x18) + 0x20))();
    if (puVar3 != (undefined8 *)0x0) goto LAB_18000aa22;
  }
  ppuVar5 = FUN_18001fcc0();
  puVar3 = (undefined8 *)(**(code **)(*ppuVar5 + 0x20))(ppuVar5);
LAB_18000aa22:
  pvVar1 = (void *)*param_1;
  if (puVar3 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  if ((pvVar1 == (void *)0x0) && (param_3 != 0)) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7ff8ffa9);
  }
  lVar6 = (**(code **)*puVar3)(puVar3,param_3,2);
  if (lVar6 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000ad70();
  }
  *param_2 = lVar6 + 0x18;
  if ((-1 < param_3) && (param_3 <= *(int *)(lVar6 + 0xc))) {
    *(int *)(lVar6 + 8) = param_3;
    uVar2 = (longlong)param_3 * 2;
    *(undefined2 *)(uVar2 + *param_2) = 0;
    FUN_180032c60((ulonglong *)*param_2,uVar2,pvVar1,uVar2);
    return param_2;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8ffa9);
}


==================================================================

### EXPORT FUNC 18000aab0 (175 bytes) name=FUN_18000aab0

void FUN_18000aab0(longlong *param_1,void *param_2,int param_3)

{
  uint uVar1;
  longlong lVar2;
  int iVar3;
  ulonglong uVar4;
  
  lVar2 = *param_1;
  uVar1 = *(uint *)(lVar2 + -0x10);
  uVar4 = (longlong)param_2 - lVar2 >> 1;
  iVar3 = uVar1 + param_3;
  if ((int)(1U - *(int *)(lVar2 + -8) | *(int *)(lVar2 + -0xc) - iVar3) < 0) {
    FUN_18000b190(param_1,iVar3);
  }
  if (uVar4 <= uVar1) {
    param_2 = (void *)(*param_1 + uVar4 * 2);
  }
  FUN_180032c60((ulonglong *)(*param_1 + (ulonglong)uVar1 * 2),(longlong)param_3 * 2,param_2,
                (longlong)param_3 * 2);
  if ((-1 < iVar3) && (iVar3 <= *(int *)(*param_1 + -0xc))) {
    *(int *)(*param_1 + -0x10) = iVar3;
    *(undefined2 *)(*param_1 + (longlong)iVar3 * 2) = 0;
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8ffa9);
}


==================================================================

### EXPORT FUNC 18000ab60 (95 bytes) name=FUN_18000ab60

void FUN_18000ab60(longlong *param_1,int param_2)

{
  int iVar1;
  longlong lVar2;
  int iVar3;
  
  lVar2 = *param_1;
  if (param_2 < *(int *)(lVar2 + -0x10)) {
    param_2 = *(int *)(lVar2 + -0x10);
  }
  if (1 < *(int *)(lVar2 + -8)) {
    FUN_18000abc0(param_1,param_2);
    return;
  }
  iVar1 = *(int *)(lVar2 + -0xc);
  if (iVar1 < param_2) {
    if (0x400 < iVar1) {
      iVar3 = iVar1 + 0x400;
      if (iVar1 + 0x400 < param_2) {
        iVar3 = param_2;
      }
      FUN_18000ac70(param_1,iVar3);
      return;
    }
    iVar3 = iVar1 * 2;
    if (iVar1 * 2 < param_2) {
      iVar3 = param_2;
    }
    FUN_18000ac70(param_1,iVar3);
  }
  return;
}


==================================================================

### EXPORT FUNC 18000abc0 (170 bytes) name=FUN_18000abc0

void FUN_18000abc0(undefined8 *param_1,int param_2)

{
  int *piVar1;
  int iVar2;
  void *pvVar3;
  undefined8 *puVar4;
  longlong lVar5;
  
  pvVar3 = (void *)*param_1;
  iVar2 = *(int *)((longlong)pvVar3 + -0x10);
  puVar4 = (undefined8 *)(**(code **)(**(longlong **)((longlong)pvVar3 + -0x18) + 0x20))();
  lVar5 = (**(code **)*puVar4)(puVar4,param_2,1);
  if (lVar5 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000ad70();
  }
  if (iVar2 < param_2) {
    param_2 = iVar2;
  }
  FUN_180032c60((ulonglong *)(lVar5 + 0x18),(longlong)(param_2 + 1),pvVar3,(longlong)(param_2 + 1));
  *(int *)(lVar5 + 8) = iVar2;
  LOCK();
  piVar1 = (int *)((longlong)pvVar3 + -8);
  iVar2 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)((longlong)pvVar3 + -0x18) + 8))
              (*(longlong **)((longlong)pvVar3 + -0x18),(longlong)pvVar3 + -0x18);
  }
  *param_1 = (ulonglong *)(lVar5 + 0x18);
  return;
}


==================================================================

### EXPORT FUNC 18000ac70 (74 bytes) name=FUN_18000ac70

void FUN_18000ac70(longlong *param_1,int param_2)

{
  longlong lVar1;
  
  if ((*(int *)(*param_1 + -0xc) < param_2) && (0 < param_2)) {
    lVar1 = (**(code **)(**(longlong **)(*param_1 + -0x18) + 0x10))();
    if (lVar1 == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000ad70();
    }
    *param_1 = lVar1 + 0x18;
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000ad70();
}


==================================================================

### EXPORT FUNC 18000acc0 (160 bytes) name=FUN_18000acc0

longlong * FUN_18000acc0(longlong *param_1,void *param_2,int param_3,undefined8 *param_4)

{
  ulonglong uVar1;
  longlong lVar2;
  
  if (param_4 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  if ((param_2 == (void *)0x0) && (param_3 != 0)) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7ff8ffa9);
  }
  lVar2 = (**(code **)*param_4)(param_4,param_3,2);
  if (lVar2 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000ad70();
  }
  *param_1 = lVar2 + 0x18;
  if ((-1 < param_3) && (param_3 <= *(int *)(lVar2 + 0xc))) {
    *(int *)(lVar2 + 8) = param_3;
    uVar1 = (longlong)param_3 * 2;
    *(undefined2 *)(uVar1 + *param_1) = 0;
    FUN_180032c60((ulonglong *)*param_1,uVar1,param_2,uVar1);
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8ffa9);
}


==================================================================

### EXPORT FUNC 18000ad70 (14 bytes) name=FUN_18000ad70

void FUN_18000ad70(void)

{
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8fff2);
}


==================================================================

### EXPORT FUNC 18000ad80 (314 bytes) name=FUN_18000ad80

longlong * FUN_18000ad80(longlong *param_1,LPCSTR param_2)

{
  int *piVar1;
  LPWSTR lpWideCharStr;
  longlong *plVar2;
  UINT UVar3;
  int iVar4;
  longlong lVar5;
  
  if (param_2 != (LPCSTR)0x0) {
    UVar3 = (*(code *)PTR__AtlGetThreadACPThunk_18006e7b0)();
    iVar4 = MultiByteToWideChar(UVar3,0,param_2,-1,(LPWSTR)0x0,0);
    iVar4 = iVar4 + -1;
    if (0 < iVar4) {
      if ((int)(1U - *(int *)(*param_1 + -8) | *(int *)(*param_1 + -0xc) - iVar4) < 0) {
        FUN_18000b190(param_1,iVar4);
      }
      lpWideCharStr = (LPWSTR)*param_1;
      UVar3 = (*(code *)PTR__AtlGetThreadACPThunk_18006e7b0)();
      MultiByteToWideChar(UVar3,0,param_2,-1,lpWideCharStr,iVar4);
      if (iVar4 <= *(int *)(*param_1 + -0xc)) {
        *(int *)(*param_1 + -0x10) = iVar4;
        *(undefined2 *)(*param_1 + (longlong)iVar4 * 2) = 0;
        return param_1;
      }
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7ff8ffa9);
    }
  }
  lVar5 = *param_1;
  plVar2 = *(longlong **)(lVar5 + -0x18);
  if (*(int *)(lVar5 + -0x10) != 0) {
    if (*(int *)(lVar5 + -8) < 0) {
      if (*(int *)(lVar5 + -0xc) < 0) {
                    /* WARNING: Subroutine does not return */
        FUN_18000b170(-0x7ff8ffa9);
      }
      *(undefined4 *)(lVar5 + -0x10) = 0;
      *(undefined2 *)*param_1 = 0;
    }
    else {
      LOCK();
      piVar1 = (int *)(lVar5 + -8);
      iVar4 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
      if (iVar4 + -1 < 1) {
        (**(code **)(**(longlong **)(lVar5 + -0x18) + 8))();
      }
      lVar5 = (**(code **)(*plVar2 + 0x18))(plVar2);
      *param_1 = lVar5 + 0x18;
    }
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18000aec0 (129 bytes) name=FUN_18000aec0

void FUN_18000aec0(longlong *param_1)

{
  int *piVar1;
  int iVar2;
  longlong *plVar3;
  longlong lVar4;
  
  lVar4 = *param_1;
  plVar3 = *(longlong **)(lVar4 + -0x18);
  if (*(int *)(lVar4 + -0x10) != 0) {
    if (*(int *)(lVar4 + -8) < 0) {
      if (*(int *)(lVar4 + -0xc) < 0) {
                    /* WARNING: Subroutine does not return */
        FUN_18000b170(-0x7ff8ffa9);
      }
      *(undefined4 *)(lVar4 + -0x10) = 0;
      *(undefined2 *)*param_1 = 0;
      return;
    }
    LOCK();
    piVar1 = (int *)(lVar4 + -8);
    iVar2 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar2 + -1 < 1) {
      (**(code **)(**(longlong **)(lVar4 + -0x18) + 8))();
    }
    lVar4 = (**(code **)(*plVar3 + 0x18))(plVar3);
    *param_1 = lVar4 + 0x18;
  }
  return;
}


==================================================================

### EXPORT FUNC 18000af50 (379 bytes) name=FUN_18000af50

undefined8 FUN_18000af50(longlong *param_1,HMODULE param_2,uint param_3)

{
  ushort uVar1;
  ushort uVar2;
  DWORD DVar3;
  int iVar4;
  HRSRC hResInfo;
  HGLOBAL hResData;
  ushort *puVar5;
  undefined8 uVar6;
  longlong lVar7;
  uint uVar8;
  ushort *puVar9;
  
  hResInfo = FindResourceW(param_2,(LPCWSTR)(ulonglong)(ushort)((short)(param_3 >> 4) + 1),
                           (LPCWSTR)0x6);
  if (((hResInfo != (HRSRC)0x0) &&
      (hResData = LoadResource(param_2,hResInfo), hResData != (HGLOBAL)0x0)) &&
     (puVar5 = LockResource(hResData), puVar5 != (ushort *)0x0)) {
    DVar3 = SizeofResource(param_2,hResInfo);
    puVar9 = (ushort *)((ulonglong)DVar3 + (longlong)puVar5);
    for (uVar8 = param_3 & 0xf; uVar8 != 0; uVar8 = uVar8 - 1) {
      if (puVar9 <= puVar5) {
        return 0;
      }
      puVar5 = puVar5 + (ulonglong)*puVar5 + 1;
    }
    if ((puVar5 < puVar9) && (uVar2 = *puVar5, uVar2 != 0)) {
      if ((int)(1U - *(int *)(*param_1 + -8) | *(int *)(*param_1 + -0xc) - (uint)uVar2) < 0) {
        FUN_18000b190(param_1,(uint)uVar2);
      }
      uVar8 = (uint)*puVar5;
      if (*puVar5 == 0xffffffff) {
        lVar7 = -1;
        puVar9 = puVar5 + 1;
        do {
          if (lVar7 == 0) break;
          lVar7 = lVar7 + -1;
          uVar1 = *puVar9;
          puVar9 = puVar9 + 1;
        } while (uVar1 != 0);
        uVar8 = ~(uint)lVar7;
      }
      uVar6 = FUN_180032c60((ulonglong *)*param_1,(ulonglong)uVar2 * 2,puVar5 + 1,
                            (longlong)(int)uVar8 * 2);
      iVar4 = (int)uVar6;
      if (iVar4 != 0) {
        if (iVar4 == 0xc) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed6c();
        }
        if ((iVar4 == 0x16) || (iVar4 == 0x22)) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
        if (iVar4 != 0x50) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
      }
      if (*(int *)(*param_1 + -0xc) < (int)(uint)uVar2) {
                    /* WARNING: Subroutine does not return */
        FUN_18000b170(-0x7ff8ffa9);
      }
      *(uint *)(*param_1 + -0x10) = (uint)uVar2;
      *(undefined2 *)((ulonglong)uVar2 * 2 + *param_1) = 0;
      return 1;
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 18000b0d0 (156 bytes) name=FUN_18000b0d0

ushort * FUN_18000b0d0(HMODULE param_1,HRSRC param_2,uint param_3)

{
  DWORD DVar1;
  HGLOBAL hResData;
  ushort *puVar2;
  uint uVar3;
  ushort *puVar4;
  
  hResData = LoadResource(param_1,param_2);
  if (hResData == (HGLOBAL)0x0) {
    return (ushort *)0x0;
  }
  puVar2 = LockResource(hResData);
  if (puVar2 != (ushort *)0x0) {
    DVar1 = SizeofResource(param_1,param_2);
    puVar4 = (ushort *)((ulonglong)DVar1 + (longlong)puVar2);
    for (uVar3 = param_3 & 0xf; uVar3 != 0; uVar3 = uVar3 - 1) {
      if (puVar4 <= puVar2) {
        return (ushort *)0x0;
      }
      puVar2 = puVar2 + (ulonglong)*puVar2 + 1;
    }
    if (puVar2 < puVar4) {
      if (*puVar2 == 0) {
        return (ushort *)0x0;
      }
      return puVar2;
    }
  }
  return (ushort *)0x0;
}


==================================================================

### EXPORT FUNC 18000b170 (23 bytes) name=FUN_18000b170

void FUN_18000b170(int param_1)

{
  code *pcVar1;
  
  if (param_1 == -0x7ff8fff2) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed6c();
  }
  FUN_180020c68(param_1);
  pcVar1 = (code *)swi(3);
  (*pcVar1)();
  return;
}


==================================================================

### EXPORT FUNC 18000b190 (95 bytes) name=FUN_18000b190

void FUN_18000b190(longlong *param_1,int param_2)

{
  int iVar1;
  longlong lVar2;
  int iVar3;
  
  lVar2 = *param_1;
  if (param_2 < *(int *)(lVar2 + -0x10)) {
    param_2 = *(int *)(lVar2 + -0x10);
  }
  if (1 < *(int *)(lVar2 + -8)) {
    FUN_18000b1f0(param_1,param_2);
    return;
  }
  iVar1 = *(int *)(lVar2 + -0xc);
  if (iVar1 < param_2) {
    if (0x400 < iVar1) {
      iVar3 = iVar1 + 0x400;
      if (iVar1 + 0x400 < param_2) {
        iVar3 = param_2;
      }
      FUN_18000b2a0(param_1,iVar3);
      return;
    }
    iVar3 = iVar1 * 2;
    if (iVar1 * 2 < param_2) {
      iVar3 = param_2;
    }
    FUN_18000b2a0(param_1,iVar3);
  }
  return;
}


==================================================================

### EXPORT FUNC 18000b1f0 (173 bytes) name=FUN_18000b1f0

void FUN_18000b1f0(undefined8 *param_1,int param_2)

{
  int *piVar1;
  int iVar2;
  void *pvVar3;
  ulonglong uVar4;
  undefined8 *puVar5;
  longlong lVar6;
  
  pvVar3 = (void *)*param_1;
  iVar2 = *(int *)((longlong)pvVar3 + -0x10);
  puVar5 = (undefined8 *)(**(code **)(**(longlong **)((longlong)pvVar3 + -0x18) + 0x20))();
  lVar6 = (**(code **)*puVar5)(puVar5,param_2,2);
  if (lVar6 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000ad70();
  }
  if (iVar2 < param_2) {
    param_2 = iVar2;
  }
  uVar4 = (longlong)(param_2 + 1) * 2;
  FUN_180032c60((ulonglong *)(lVar6 + 0x18),uVar4,pvVar3,uVar4);
  *(int *)(lVar6 + 8) = iVar2;
  LOCK();
  piVar1 = (int *)((longlong)pvVar3 + -8);
  iVar2 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)((longlong)pvVar3 + -0x18) + 8))
              (*(longlong **)((longlong)pvVar3 + -0x18),(longlong)pvVar3 + -0x18);
  }
  *param_1 = (ulonglong *)(lVar6 + 0x18);
  return;
}


==================================================================

### EXPORT FUNC 18000b2a0 (74 bytes) name=FUN_18000b2a0

void FUN_18000b2a0(longlong *param_1,int param_2)

{
  longlong lVar1;
  
  if ((*(int *)(*param_1 + -0xc) < param_2) && (0 < param_2)) {
    lVar1 = (**(code **)(**(longlong **)(*param_1 + -0x18) + 0x10))();
    if (lVar1 == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000ad70();
    }
    *param_1 = lVar1 + 0x18;
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000ad70();
}


==================================================================

### EXPORT FUNC 18000b2f0 (5 bytes) name=thunk_FUN_18001ef94

void thunk_FUN_18001ef94(void)

{
  undefined8 *puVar1;
  longlong *plVar2;
  DWORD dwErrCode;
  void *pvVar3;
  
  dwErrCode = GetLastError();
  pvVar3 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar3 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  SetLastError(dwErrCode);
  puVar1 = *(undefined8 **)((longlong)pvVar3 + 0x20);
  if (puVar1 != (undefined8 *)0x0) {
    plVar2 = (longlong *)puVar1[1];
    if ((plVar2 != (longlong *)0x0) && (0 < (int)plVar2[1])) {
      (**(code **)(*plVar2 + 8))(plVar2,1);
    }
    *(undefined8 *)((longlong)pvVar3 + 0x20) = *puVar1;
  }
  return;
}


==================================================================

### EXPORT FUNC 18000b300 (133 bytes) name=FUN_18000b300

longlong * FUN_18000b300(longlong *param_1)

{
  ulonglong uVar1;
  undefined8 *puVar2;
  longlong *plVar3;
  
  puVar2 = (undefined8 *)(**(code **)(*(longlong *)*param_1 + 0x20))();
  if ((-1 < (int)param_1[2]) && (puVar2 == (undefined8 *)*param_1)) {
    LOCK();
    *(int *)(param_1 + 2) = (int)param_1[2] + 1;
    UNLOCK();
    return param_1;
  }
  plVar3 = (longlong *)(**(code **)*puVar2)(puVar2,(int)param_1[1],2);
  if (plVar3 == (longlong *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000ad70();
  }
  *(int *)(plVar3 + 1) = (int)param_1[1];
  uVar1 = (longlong)((int)param_1[1] + 1) * 2;
  FUN_180032c60((ulonglong *)(plVar3 + 3),uVar1,param_1 + 3,uVar1);
  return plVar3;
}


==================================================================

### EXPORT FUNC 18000b390 (231 bytes) name=FUN_18000b390

longlong * FUN_18000b390(longlong *param_1,undefined8 *param_2)

{
  int *piVar1;
  int iVar2;
  void *pvVar3;
  longlong lVar4;
  ulonglong uVar5;
  undefined8 *puVar6;
  longlong *plVar7;
  longlong *plVar8;
  
  pvVar3 = (void *)*param_2;
  lVar4 = *param_1;
  plVar7 = (longlong *)((longlong)pvVar3 + -0x18);
  plVar8 = (longlong *)(lVar4 + -0x18);
  if (plVar7 != plVar8) {
    if ((*(int *)(lVar4 + -8) < 0) || ((longlong *)*plVar7 != (longlong *)*plVar8)) {
      FUN_18000b480(param_1,pvVar3,*(int *)((longlong)pvVar3 + -0x10));
    }
    else {
      puVar6 = (undefined8 *)(**(code **)(*(longlong *)*plVar7 + 0x20))();
      if ((*(int *)((longlong)pvVar3 + -8) < 0) || (puVar6 != (undefined8 *)*plVar7)) {
        plVar7 = (longlong *)
                 (**(code **)*puVar6)(puVar6,*(undefined4 *)((longlong)pvVar3 + -0x10),2);
        if (plVar7 == (longlong *)0x0) {
                    /* WARNING: Subroutine does not return */
          FUN_18000ad70();
        }
        *(undefined4 *)(plVar7 + 1) = *(undefined4 *)((longlong)pvVar3 + -0x10);
        uVar5 = (longlong)(*(int *)((longlong)pvVar3 + -0x10) + 1) * 2;
        FUN_180032c60((ulonglong *)(plVar7 + 3),uVar5,pvVar3,uVar5);
      }
      else {
        LOCK();
        *(int *)((longlong)pvVar3 + -8) = *(int *)((longlong)pvVar3 + -8) + 1;
        UNLOCK();
      }
      LOCK();
      piVar1 = (int *)(lVar4 + -8);
      iVar2 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
      if (iVar2 + -1 < 1) {
        (**(code **)(*(longlong *)*plVar8 + 8))((longlong *)*plVar8,plVar8);
      }
      *param_1 = (longlong)(plVar7 + 3);
    }
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18000b480 (337 bytes) name=FUN_18000b480

void FUN_18000b480(longlong *param_1,void *param_2,int param_3)

{
  int *piVar1;
  int iVar2;
  uint uVar3;
  longlong *plVar4;
  longlong lVar5;
  ulonglong *_Dst;
  longlong lVar6;
  ulonglong uVar7;
  
  lVar6 = (longlong)param_3;
  if (param_3 == 0) {
    lVar6 = *param_1;
    plVar4 = *(longlong **)(lVar6 + -0x18);
    if (*(int *)(lVar6 + -0x10) != 0) {
      if (-1 < *(int *)(lVar6 + -8)) {
        LOCK();
        piVar1 = (int *)(lVar6 + -8);
        iVar2 = *piVar1;
        *piVar1 = *piVar1 + -1;
        UNLOCK();
        if (iVar2 + -1 < 1) {
          (**(code **)(**(longlong **)(lVar6 + -0x18) + 8))();
        }
        lVar6 = (**(code **)(*plVar4 + 0x18))(plVar4);
        *param_1 = lVar6 + 0x18;
        return;
      }
      if (*(int *)(lVar6 + -0xc) < 0) {
                    /* WARNING: Subroutine does not return */
        FUN_18000b170(-0x7ff8ffa9);
      }
      *(undefined4 *)(lVar6 + -0x10) = 0;
      *(undefined2 *)*param_1 = 0;
      return;
    }
  }
  else {
    if (param_2 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7ff8ffa9);
    }
    lVar5 = *param_1;
    uVar3 = *(uint *)(lVar5 + -0x10);
    uVar7 = (longlong)param_2 - lVar5 >> 1;
    if ((int)(1U - *(int *)(lVar5 + -8) | *(int *)(lVar5 + -0xc) - param_3) < 0) {
      FUN_18000b190(param_1,param_3);
    }
    _Dst = (ulonglong *)*param_1;
    if (uVar3 < uVar7) {
      FUN_180032c60(_Dst,lVar6 * 2,param_2,lVar6 * 2);
    }
    else {
      memmove_s(_Dst,lVar6 * 2,(void *)((longlong)_Dst + uVar7 * 2),lVar6 * 2);
    }
    if ((param_3 < 0) || (*(int *)(*param_1 + -0xc) < param_3)) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7ff8ffa9);
    }
    *(int *)(*param_1 + -0x10) = param_3;
    *(undefined2 *)(lVar6 * 2 + *param_1) = 0;
  }
  return;
}


==================================================================

### EXPORT FUNC 18000b5e0 (40 bytes) name=FUN_18000b5e0

void FUN_18000b5e0(longlong *param_1)

{
  int *piVar1;
  int iVar2;
  longlong lVar3;
  
  lVar3 = *param_1;
  LOCK();
  piVar1 = (int *)(lVar3 + -8);
  iVar2 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
  }
  return;
}


==================================================================

### EXPORT FUNC 18000b610 (180 bytes) name=FUN_18000b610

longlong * FUN_18000b610(longlong *param_1,short *param_2)

{
  short sVar1;
  undefined **ppuVar2;
  longlong lVar3;
  HMODULE pHVar4;
  int iVar5;
  short *psVar6;
  
  ppuVar2 = FUN_18001fcc0();
  if (ppuVar2 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar3 = (**(code **)(*ppuVar2 + 0x18))();
  *param_1 = lVar3 + 0x18;
  if (param_2 == (short *)0x0) {
    iVar5 = 0;
  }
  else {
    if (((ulonglong)param_2 & 0xffffffffffff0000) == 0) {
      pHVar4 = (HMODULE)FUN_18001fcac();
      if (pHVar4 == (HMODULE)0x0) {
        return param_1;
      }
      FUN_18000af50(param_1,pHVar4,(uint)param_2 & 0xffff);
      return param_1;
    }
    lVar3 = -1;
    psVar6 = param_2;
    do {
      if (lVar3 == 0) break;
      lVar3 = lVar3 + -1;
      sVar1 = *psVar6;
      psVar6 = psVar6 + 1;
    } while (sVar1 != 0);
    iVar5 = ~(uint)lVar3 - 1;
  }
  FUN_18000b480(param_1,param_2,iVar5);
  return param_1;
}


==================================================================

### EXPORT FUNC 18000b6d0 (24 bytes) name=Unwind@18000b6d0

void Unwind_18000b6d0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0(*(longlong **)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 18000b6f0 (929 bytes) name=FUN_18000b6f0

undefined8 * FUN_18000b6f0(undefined8 *param_1)

{
  uint uVar1;
  longlong lVar2;
  longlong lVar3;
  
  *param_1 = CFunctions::vftable;
  param_1[0x83dd] = 0;
  param_1[0x83de] = 0;
  param_1[0x83df] = 0;
  *(undefined4 *)(param_1 + 0x83e0) = 0;
  *(undefined4 *)((longlong)param_1 + 0x41f04) = 0;
  *(undefined4 *)(param_1 + 0x83e1) = 0;
  *(undefined4 *)((longlong)param_1 + 0x41f0c) = 0;
  param_1[0x83dc] = CAccumulator::vftable;
  param_1[0x83e2] = CAccumulator::vftable;
  param_1[0x83e3] = 0;
  param_1[0x83e4] = 0;
  param_1[0x83e5] = 0;
  *(undefined4 *)(param_1 + 0x83e6) = 0;
  *(undefined4 *)((longlong)param_1 + 0x41f34) = 0;
  *(undefined4 *)(param_1 + 0x83e7) = 0;
  *(undefined4 *)((longlong)param_1 + 0x41f3c) = 0;
  param_1[0x83e9] = 0;
  param_1[0x83ea] = 0;
  param_1[0x83eb] = 0;
  param_1[0x83ed] = 0;
  param_1[0x83ec] = 0;
  *(undefined4 *)(param_1 + 0x83ee) = 0;
  *(undefined4 *)((longlong)param_1 + 0x41f74) = 0;
  *(undefined4 *)(param_1 + 0x83ef) = 0;
  *(undefined4 *)((longlong)param_1 + 0x41f7c) = 0;
  param_1[0x83e8] = CSmoother::vftable;
  param_1[0x83f0] = CSmoother::vftable;
  param_1[0x83f1] = 0;
  param_1[0x83f2] = 0;
  param_1[0x83f3] = 0;
  param_1[0x83f5] = 0;
  param_1[0x83f4] = 0;
  *(undefined4 *)(param_1 + 0x83f6) = 0;
  *(undefined4 *)((longlong)param_1 + 0x41fb4) = 0;
  *(undefined4 *)(param_1 + 0x83f7) = 0;
  *(undefined4 *)((longlong)param_1 + 0x41fbc) = 0;
  InitializeCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x47));
  FUN_1800357d0(param_1 + 0x83f8,0,0x28);
  FUN_1800357d0(param_1 + 1,0,200);
  *(undefined1 *)((longlong)param_1 + 0x2d) = 0xff;
  *(undefined4 *)(param_1 + 0x8f27) = 0;
  *(undefined4 *)((longlong)param_1 + 0x4793c) = 0;
  *(undefined4 *)(param_1 + 0x8f28) = 0;
  FUN_1800357d0(param_1 + 0x83ff,0,0x2ca0);
  FUN_1800357d0(param_1 + 0x8993,0,0x2ca0);
  FUN_1800357d0(param_1 + 0x8268,0,0x540);
  FUN_1800357d0(param_1 + 0x8310,0,0x65c);
  *(undefined4 *)(param_1 + 0x83fd) = 0;
  *(undefined4 *)((longlong)param_1 + 0x41fec) = 0;
  *(undefined4 *)(param_1 + 0x83fe) = 0;
  FUN_1800357d0(param_1 + 0x1a,0,0x2c);
  *(undefined4 *)(param_1 + 0x1a) = 0x41200000;
  *(undefined4 *)((longlong)param_1 + 0xd4) = 0x3f800000;
  *(undefined4 *)(param_1 + 0x1b) = 0x41a00000;
  *(undefined4 *)((longlong)param_1 + 0xdc) = 0x3ecccccd;
  *(undefined4 *)(param_1 + 0x1c) = 0x41a00000;
  *(undefined4 *)((longlong)param_1 + 0xe4) = 0;
  *(undefined4 *)(param_1 + 0x1d) = 0;
  *(undefined4 *)((longlong)param_1 + 0xec) = 0;
  *(undefined4 *)(param_1 + 0x1e) = 0;
  *(undefined4 *)((longlong)param_1 + 0xf4) = 0x3f7fa57f;
  *(undefined4 *)(param_1 + 0x1f) = 0x3f800000;
  *(undefined4 *)((longlong)param_1 + 0xfc) = 0;
  *(undefined4 *)(param_1 + 0x45) = 0;
  *(undefined4 *)((longlong)param_1 + 0x22c) = 0;
  *(undefined4 *)((longlong)param_1 + 0x234) = 0;
  *(undefined4 *)(param_1 + 0x46) = 0;
  param_1[0x4c] = 0;
  param_1[0x4d] = 0;
  param_1[0x4e] = 0;
  param_1[0x4f] = 0;
  param_1[0x54] = 0;
  param_1[0x55] = 0;
  param_1[0x56] = 0;
  param_1[0x50] = 0;
  param_1[0x51] = 0;
  param_1[0x52] = 0;
  param_1[0x53] = 0;
  param_1[0x57] = 0;
  param_1[0x58] = 0;
  *(undefined4 *)((longlong)param_1 + 0x47944) = 8;
  *(undefined4 *)(param_1 + 0x8f29) = 0xffff3cb0;
  *(undefined4 *)((longlong)param_1 + 0x4794c) = 3;
  *(undefined4 *)(param_1 + 0x8f2a) = 0;
  *(undefined4 *)((longlong)param_1 + 0x47954) = 0;
  param_1[0x44] = 0;
  FUN_18000d5f0((longlong)param_1,0);
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x47));
  memcpy(&DAT_180099000,&DAT_18005cde0,0xa1c);
  lVar2 = 0;
  do {
    lVar3 = lVar2 + 8;
    uVar1 = *(int *)((longlong)&DAT_180099004 + lVar2) - *(int *)((longlong)&DAT_180099000 + lVar2);
    *(uint *)((longlong)&DAT_180099a20 + lVar2) = ((uVar1 >> 1) + 0x1000000) / uVar1;
    uVar1 = *(int *)((longlong)&DAT_180099008 + lVar2) - *(int *)((longlong)&DAT_180099004 + lVar2);
    *(uint *)((longlong)&DAT_180099a24 + lVar2) = ((uVar1 >> 1) + 0x1000000) / uVar1;
    lVar2 = lVar3;
  } while (lVar3 < 0xa18);
  lVar2 = (longlong)DAT_18009a434;
  *(undefined4 *)(param_1 + 0xd) = 7;
  DAT_180073748 = (undefined4)(0x7fffffff / lVar2);
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x47));
  return param_1;
}


==================================================================

### EXPORT FUNC 18000baa0 (47 bytes) name=FUN_18000baa0

undefined8 * FUN_18000baa0(undefined8 *param_1,uint param_2)

{
  FUN_18000bad0(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18000bad0 (389 bytes) name=FUN_18000bad0

void FUN_18000bad0(undefined8 *param_1)

{
  *param_1 = CFunctions::vftable;
  FUN_18000c2b0((longlong)param_1);
  DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x47));
  param_1[0x83f0] = CSmoother::vftable;
  if ((LPVOID)param_1[0x83f1] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[0x83f1]);
    param_1[0x83f1] = 0;
  }
  param_1[0x83f2] = 0;
  if ((LPVOID)param_1[0x83f3] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[0x83f3]);
    param_1[0x83f3] = 0;
  }
  if ((LPVOID)param_1[0x83f4] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[0x83f4]);
    param_1[0x83f4] = 0;
  }
  param_1[0x83e8] = CSmoother::vftable;
  if ((LPVOID)param_1[0x83e9] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[0x83e9]);
    param_1[0x83e9] = 0;
  }
  param_1[0x83ea] = 0;
  if ((LPVOID)param_1[0x83eb] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[0x83eb]);
    param_1[0x83eb] = 0;
  }
  if ((LPVOID)param_1[0x83ec] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[0x83ec]);
    param_1[0x83ec] = 0;
  }
  param_1[0x83e2] = CAccumulator::vftable;
  if ((LPVOID)param_1[0x83e3] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[0x83e3]);
    param_1[0x83e3] = 0;
  }
  param_1[0x83e4] = 0;
  if ((LPVOID)param_1[0x83e5] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[0x83e5]);
    param_1[0x83e5] = 0;
  }
  param_1[0x83dc] = CAccumulator::vftable;
  if ((LPVOID)param_1[0x83dd] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[0x83dd]);
    param_1[0x83dd] = 0;
  }
  param_1[0x83de] = 0;
  if ((LPVOID)param_1[0x83df] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[0x83df]);
    param_1[0x83df] = 0;
  }
  return;
}


==================================================================

### EXPORT FUNC 18000bc60 (31 bytes) name=Unwind@18000bc60

void Unwind_18000bc60(undefined8 param_1,longlong param_2)

{
  FUN_180001070((undefined8 *)(*(longlong *)(param_2 + 0x40) + 0x41ee0));
  return;
}


==================================================================

### EXPORT FUNC 18000bc80 (31 bytes) name=Unwind@18000bc80

void Unwind_18000bc80(undefined8 param_1,longlong param_2)

{
  FUN_180001070((undefined8 *)(*(longlong *)(param_2 + 0x40) + 0x41f10));
  return;
}


==================================================================

### EXPORT FUNC 18000bca0 (31 bytes) name=Unwind@18000bca0

void Unwind_18000bca0(undefined8 param_1,longlong param_2)

{
  FUN_18001e790((undefined8 *)(*(longlong *)(param_2 + 0x40) + 0x41f40));
  return;
}


==================================================================

### EXPORT FUNC 18000bcc0 (31 bytes) name=Unwind@18000bcc0

void Unwind_18000bcc0(undefined8 param_1,longlong param_2)

{
  FUN_18001e790((undefined8 *)(*(longlong *)(param_2 + 0x40) + 0x41f80));
  return;
}


==================================================================

### EXPORT FUNC 18000bce0 (1477 bytes) name=FUN_18000bce0

undefined4 FUN_18000bce0(longlong param_1,void *param_2)

{
  uint uVar1;
  uint uVar2;
  undefined1 auVar3 [16];
  size_t sVar4;
  LPVOID pvVar5;
  undefined8 uVar6;
  uint uVar7;
  DWORD dwErrCode;
  
  FUN_18000c2b0(param_1);
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  *(undefined4 *)(param_1 + 0x47944) = 8;
  *(undefined4 *)(param_1 + 0x47948) = 0xffff3cb0;
  *(undefined4 *)(param_1 + 0x4794c) = 3;
  *(undefined4 *)(param_1 + 0x47950) = 0;
  *(undefined4 *)(param_1 + 0x47954) = 0;
  memcpy((void *)(param_1 + 0x41fc0),param_2,0x28);
  uVar7 = *(uint *)(param_1 + 0x41fd8);
  if (((((((uVar7 < 4) || (0x40 < uVar7)) || ((uVar7 & uVar7 - 1) != 0)) ||
        ((uVar7 = *(uint *)(param_1 + 0x41fdc), uVar7 == 0 || (0x40 < uVar7)))) ||
       (((uVar7 & uVar7 - 1) != 0 ||
        ((*(uint *)(param_1 + 0x41fe0) == 0 || (2 < *(uint *)(param_1 + 0x41fe0))))))) ||
      (*(int *)(param_1 + 0x41fe4) == 0)) ||
     (((((uVar7 = *(uint *)(param_1 + 0x41fc0), (uVar7 & 3) != 0 || (uVar7 < 4)) ||
        (*(int *)(param_1 + 0x41fc4) == 0)) ||
       (((uVar1 = *(uint *)(param_1 + 0x41fc8), (uVar1 & 3) != 0 || (uVar1 < 4)) ||
        ((*(int *)(param_1 + 0x41fcc) == 0 ||
         ((uVar2 = *(uint *)(param_1 + 0x41fd0), (uVar2 & 3) != 0 || (uVar2 < 4)))))))) ||
      (*(int *)(param_1 + 0x41fd4) == 0)))) {
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    dwErrCode = 0xe4ae0001;
  }
  else {
    uVar7 = *(int *)(param_1 + 0x41fc4) * uVar7;
    *(uint *)(param_1 + 0x47938) = uVar7;
    *(uint *)(param_1 + 0x4793c) = *(int *)(param_1 + 0x41fcc) * uVar1;
    *(uint *)(param_1 + 0x47940) = *(int *)(param_1 + 0x41fd4) * uVar2;
    auVar3 = ZEXT816(2) * ZEXT416(uVar7);
    sVar4 = auVar3._0_8_;
    if (auVar3._8_8_ != 0) {
      sVar4 = 0xffffffffffffffff;
    }
    pvVar5 = thunk_FUN_18001eb74(sVar4);
    *(LPVOID *)(param_1 + 0x270) = pvVar5;
    auVar3 = ZEXT816(2) * ZEXT416(*(uint *)(param_1 + 0x47938));
    sVar4 = auVar3._0_8_;
    if (auVar3._8_8_ != 0) {
      sVar4 = 0xffffffffffffffff;
    }
    pvVar5 = thunk_FUN_18001eb74(sVar4);
    *(LPVOID *)(param_1 + 0x288) = pvVar5;
    auVar3 = ZEXT816(2) *
             ZEXT416((uint)((*(int *)(param_1 + 0x41fc0) + 8) * (*(int *)(param_1 + 0x41fc4) + 8)));
    sVar4 = auVar3._0_8_;
    if (auVar3._8_8_ != 0) {
      sVar4 = 0xffffffffffffffff;
    }
    pvVar5 = thunk_FUN_18001eb74(sVar4);
    *(LPVOID *)(param_1 + 0x290) = pvVar5;
    pvVar5 = thunk_FUN_18001eb74((ulonglong)*(uint *)(param_1 + 0x47938));
    *(LPVOID *)(param_1 + 0x2a0) = pvVar5;
    auVar3 = ZEXT816(4) * ZEXT416(*(uint *)(param_1 + 0x47938));
    sVar4 = auVar3._0_8_;
    if (auVar3._8_8_ != 0) {
      sVar4 = 0xffffffffffffffff;
    }
    pvVar5 = thunk_FUN_18001eb74(sVar4);
    *(LPVOID *)(param_1 + 0x2a8) = pvVar5;
    pvVar5 = thunk_FUN_18001eb74((ulonglong)*(uint *)(param_1 + 0x47938));
    *(LPVOID *)(param_1 + 0x280) = pvVar5;
    pvVar5 = thunk_FUN_18001eb74((ulonglong)*(uint *)(param_1 + 0x47940));
    *(LPVOID *)(param_1 + 0x2b0) = pvVar5;
    auVar3 = ZEXT816(4) * ZEXT416(*(uint *)(param_1 + 0x47938));
    sVar4 = auVar3._0_8_;
    if (auVar3._8_8_ != 0) {
      sVar4 = 0xffffffffffffffff;
    }
    pvVar5 = thunk_FUN_18001eb74(sVar4);
    *(LPVOID *)(param_1 + 0x298) = pvVar5;
    auVar3 = ZEXT816(2) * ZEXT416(*(uint *)(param_1 + 0x47938));
    sVar4 = auVar3._0_8_;
    if (auVar3._8_8_ != 0) {
      sVar4 = 0xffffffffffffffff;
    }
    pvVar5 = thunk_FUN_18001eb74(sVar4);
    *(LPVOID *)(param_1 + 0x260) = pvVar5;
    auVar3 = ZEXT816(4) * ZEXT416(*(uint *)(param_1 + 0x47938));
    sVar4 = auVar3._0_8_;
    if (auVar3._8_8_ != 0) {
      sVar4 = 0xffffffffffffffff;
    }
    pvVar5 = thunk_FUN_18001eb74(sVar4);
    *(LPVOID *)(param_1 + 0x268) = pvVar5;
    pvVar5 = thunk_FUN_18001eb74((ulonglong)
                                 (uint)(*(int *)(param_1 + 0x41fc8) * 3 +
                                       *(int *)(param_1 + 0x4793c)));
    *(LPVOID *)(param_1 + 0x220) = pvVar5;
    auVar3 = ZEXT816(4) * ZEXT416((uint)(*(int *)(param_1 + 0x41fc4) << 6));
    sVar4 = auVar3._0_8_;
    if (auVar3._8_8_ != 0) {
      sVar4 = 0xffffffffffffffff;
    }
    pvVar5 = thunk_FUN_18001eb74(sVar4);
    *(LPVOID *)(param_1 + 0x2b8) = pvVar5;
    auVar3 = ZEXT816(4) * ZEXT416((uint)(*(int *)(param_1 + 0x41fc0) << 6));
    sVar4 = auVar3._0_8_;
    if (auVar3._8_8_ != 0) {
      sVar4 = 0xffffffffffffffff;
    }
    pvVar5 = thunk_FUN_18001eb74(sVar4);
    *(LPVOID *)(param_1 + 0x2c0) = pvVar5;
    if (((((*(longlong *)(param_1 + 0x270) == 0) || (*(longlong *)(param_1 + 0x288) == 0)) ||
         (*(longlong *)(param_1 + 0x290) == 0)) ||
        (((*(longlong *)(param_1 + 0x2a0) == 0 || (*(longlong *)(param_1 + 0x2b0) == 0)) ||
         (((*(longlong *)(param_1 + 0x280) == 0 ||
           ((*(longlong *)(param_1 + 0x220) == 0 || (*(longlong *)(param_1 + 0x260) == 0)))) ||
          (*(longlong *)(param_1 + 0x268) == 0)))))) ||
       ((((*(longlong *)(param_1 + 0x2a8) == 0 || (*(longlong *)(param_1 + 0x298) == 0)) ||
         (*(longlong *)(param_1 + 0x2b8) == 0)) || (pvVar5 == (LPVOID)0x0)))) {
      LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
      dwErrCode = 0xe4ae0002;
    }
    else {
      uVar6 = FUN_1800010c0(param_1 + 0x41ee0,*(uint *)(param_1 + 0x47938),
                            *(uint *)(param_1 + 0x41fd8));
      if (((((int)uVar6 != 0) &&
           (uVar6 = FUN_1800010c0(param_1 + 0x41f10,*(uint *)(param_1 + 0x47938),
                                  *(uint *)(param_1 + 0x41fdc)), (int)uVar6 != 0)) &&
          ((*(uint *)(param_1 + 0x41fe0) < 2 ||
           (uVar6 = FUN_18001e7f0(param_1 + 0x41f40,*(uint *)(param_1 + 0x47938),
                                  *(uint *)(param_1 + 0x41fe0) - 1,0), (int)uVar6 != 0)))) &&
         ((*(uint *)(param_1 + 0x41fe4) < 2 ||
          (uVar6 = FUN_18001e7f0(param_1 + 0x41f80,*(uint *)(param_1 + 0x47938),
                                 *(uint *)(param_1 + 0x41fe4),1), (int)uVar6 != 0)))) {
        FUN_1800357d0((ulonglong *)(param_1 + 0x6c8),0,0x28);
        *(undefined4 *)(param_1 + 0x6c8) = 0x28;
        *(undefined4 *)(param_1 + 0x6cc) = *(undefined4 *)(param_1 + 0x41fc0);
        *(undefined2 *)(param_1 + 0x6d4) = 1;
        *(undefined4 *)(param_1 + 0x6d0) = *(undefined4 *)(param_1 + 0x41fc4);
        *(undefined2 *)(param_1 + 0x6d6) = 8;
        *(undefined4 *)(param_1 + 0x6d8) = 0;
        FUN_1800357d0((ulonglong *)(param_1 + 0xaf0),0,0x28);
        *(undefined4 *)(param_1 + 0xaf0) = 0x28;
        *(undefined4 *)(param_1 + 0xaf4) = *(undefined4 *)(param_1 + 0x41fc8);
        *(undefined2 *)(param_1 + 0xafc) = 1;
        *(undefined4 *)(param_1 + 0xaf8) = *(undefined4 *)(param_1 + 0x41fcc);
        *(undefined2 *)(param_1 + 0xafe) = 8;
        *(undefined4 *)(param_1 + 0xb00) = 0;
        FUN_1800357d0((ulonglong *)(param_1 + 0xf18),0,0x28);
        *(undefined4 *)(param_1 + 0xf18) = 0x28;
        *(undefined4 *)(param_1 + 0xf1c) = *(undefined4 *)(param_1 + 0x41fd0);
        *(undefined2 *)(param_1 + 0xf24) = 1;
        *(undefined2 *)(param_1 + 0xf26) = 8;
        *(undefined4 *)(param_1 + 0xf20) = *(undefined4 *)(param_1 + 0x41fd4);
        *(undefined4 *)(param_1 + 0xf28) = 0;
        FUN_180014fe0(param_1,(float *)(param_1 + 0xd0));
        *(undefined4 *)(param_1 + 0x228) = 1;
        LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
        return *(undefined4 *)(param_1 + 0x228);
      }
      LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
      dwErrCode = 0xe4ae0003;
    }
  }
  SetLastError(dwErrCode);
  return 0;
}


==================================================================

### EXPORT FUNC 18000c2b0 (877 bytes) name=FUN_18000c2b0

void FUN_18000c2b0(longlong param_1)

{
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  *(undefined4 *)(param_1 + 0x41fe8) = 0;
  *(undefined4 *)(param_1 + 0x44) = 0;
  *(undefined4 *)(param_1 + 0x228) = 0;
  *(undefined4 *)(param_1 + 0x22c) = 0;
  *(undefined4 *)(param_1 + 0x234) = 0;
  *(undefined4 *)(param_1 + 0x230) = 0;
  *(undefined4 *)(param_1 + 0x41340) = 0;
  *(undefined4 *)(param_1 + 0x41880) = 0;
  if (*(LPVOID *)(param_1 + 0x260) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x260));
    *(undefined8 *)(param_1 + 0x260) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x268) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x268));
    *(undefined8 *)(param_1 + 0x268) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x270) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x270));
    *(undefined8 *)(param_1 + 0x270) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x278) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x278));
    *(undefined8 *)(param_1 + 0x278) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x2a0) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x2a0));
    *(undefined8 *)(param_1 + 0x2a0) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x2a8) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x2a8));
    *(undefined8 *)(param_1 + 0x2a8) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x220) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x220));
    *(undefined8 *)(param_1 + 0x220) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x2b0) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x2b0));
    *(undefined8 *)(param_1 + 0x2b0) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x280) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x280));
    *(undefined8 *)(param_1 + 0x280) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x288) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x288));
    *(undefined8 *)(param_1 + 0x288) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x290) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x290));
    *(undefined8 *)(param_1 + 0x290) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x298) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x298));
    *(undefined8 *)(param_1 + 0x298) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x2b8) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x2b8));
    *(undefined8 *)(param_1 + 0x2b8) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x2c0) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x2c0));
    *(undefined8 *)(param_1 + 0x2c0) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x416a0) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x416a0));
    *(undefined8 *)(param_1 + 0x416a0) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x416a8) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x416a8));
    *(undefined8 *)(param_1 + 0x416a8) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x416b0) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x416b0));
    *(undefined8 *)(param_1 + 0x416b0) = 0;
  }
  FUN_1800357d0((ulonglong *)(param_1 + 0x41340),0,0x540);
  *(undefined4 *)(param_1 + 0x41f0c) = 0;
  if (*(LPVOID *)(param_1 + 0x41ee8) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x41ee8));
    *(undefined8 *)(param_1 + 0x41ee8) = 0;
  }
  *(undefined8 *)(param_1 + 0x41ef0) = 0;
  if (*(LPVOID *)(param_1 + 0x41ef8) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x41ef8));
    *(undefined8 *)(param_1 + 0x41ef8) = 0;
  }
  *(undefined4 *)(param_1 + 0x41f3c) = 0;
  if (*(LPVOID *)(param_1 + 0x41f18) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x41f18));
    *(undefined8 *)(param_1 + 0x41f18) = 0;
  }
  *(undefined8 *)(param_1 + 0x41f20) = 0;
  if (*(LPVOID *)(param_1 + 0x41f28) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x41f28));
    *(undefined8 *)(param_1 + 0x41f28) = 0;
  }
  *(undefined4 *)(param_1 + 0x41f7c) = 0;
  if (*(LPVOID *)(param_1 + 0x41f48) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x41f48));
    *(undefined8 *)(param_1 + 0x41f48) = 0;
  }
  *(undefined8 *)(param_1 + 0x41f50) = 0;
  if (*(LPVOID *)(param_1 + 0x41f58) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x41f58));
    *(undefined8 *)(param_1 + 0x41f58) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x41f60) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x41f60));
    *(undefined8 *)(param_1 + 0x41f60) = 0;
  }
  *(undefined4 *)(param_1 + 0x41fbc) = 0;
  if (*(LPVOID *)(param_1 + 0x41f88) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x41f88));
    *(undefined8 *)(param_1 + 0x41f88) = 0;
  }
  *(undefined8 *)(param_1 + 0x41f90) = 0;
  if (*(LPVOID *)(param_1 + 0x41f98) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x41f98));
    *(undefined8 *)(param_1 + 0x41f98) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x41fa0) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x41fa0));
    *(undefined8 *)(param_1 + 0x41fa0) = 0;
  }
  FUN_1800357d0((ulonglong *)(param_1 + 0x41ff8),0,0x2ca0);
  FUN_1800357d0((ulonglong *)(param_1 + 0x44c98),0,0x2ca0);
                    /* WARNING: Could not recover jumptable at 0x00018000c616. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  return;
}


==================================================================

### EXPORT FUNC 18000c620 (309 bytes) name=FUN_18000c620

ulonglong FUN_18000c620(longlong param_1,ushort *param_2,int param_3)

{
  ulonglong uVar1;
  ulonglong uVar2;
  
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  if (*(int *)(param_1 + 0x228) == 0) {
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    uVar1 = 0;
  }
  else {
    if (param_3 != 0) {
      *(undefined4 *)(param_1 + 0x22c) = 0;
      *(undefined4 *)(param_1 + 0x41ffc) = 0;
      *(undefined4 *)(param_1 + 0x42004) = 0;
      if (*(int *)(param_1 + 0x41f0c) != 0) {
        *(undefined4 *)(param_1 + 0x41f00) = 0;
      }
      if (*(int *)(param_1 + 0x41f3c) != 0) {
        *(undefined4 *)(param_1 + 0x41f30) = 0;
      }
      if ((1 < *(uint *)(param_1 + 0x41fe0)) && (*(int *)(param_1 + 0x41f7c) != 0)) {
        *(undefined4 *)(param_1 + 0x41f70) = 0;
        *(undefined8 *)(param_1 + 0x41f68) = *(undefined8 *)(param_1 + 0x41f50);
        FUN_1800357d0(*(ulonglong **)(param_1 + 0x41f58),0,
                      (ulonglong)*(uint *)(param_1 + 0x41f74) << 2);
      }
      if (*(int *)(param_1 + 0x41fbc) != 0) {
        *(undefined4 *)(param_1 + 0x41fb0) = 0;
        *(undefined8 *)(param_1 + 0x41fa8) = *(undefined8 *)(param_1 + 0x41f90);
        FUN_1800357d0(*(ulonglong **)(param_1 + 0x41f98),0,
                      (ulonglong)*(uint *)(param_1 + 0x41fb4) << 2);
      }
    }
    uVar2 = FUN_1800011a0(param_1 + 0x41ee0,param_2);
    uVar1 = uVar2 & 0xffffffff;
    if ((int)uVar2 != 0) {
      *(undefined4 *)(param_1 + 0x22c) = 1;
    }
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 18000c760 (488 bytes) name=FUN_18000c760

void FUN_18000c760(longlong param_1,int param_2,uint param_3)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  longlong lVar4;
  int iVar5;
  uint uVar6;
  int iVar7;
  
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  if ((*(int *)(param_1 + 0x228) != 0) && (*(int *)(param_1 + 0x41340) != 0)) {
    if (param_2 == 0) {
      FUN_180016ae0(param_1);
      if ((*(int *)(param_1 + 0x41340) != 0) && (*(int *)(param_1 + 0x41344) != 0)) {
        FUN_18000ffb0(param_1);
      }
    }
    else {
      uVar6 = 0;
      if (param_2 == 1) {
        if (1 < param_3) {
          DAT_18009a43c = 0;
          DAT_18009a438 = 0;
          DAT_18009a440 = (*(int *)(param_1 + 0x41554) + -1) * *(int *)(param_1 + 0x47938);
          DAT_18009a444 = *(int *)(param_1 + 0x47938) * *(int *)(param_1 + 0x41554) * 2;
          DAT_18009a448 =
               (DAT_18009a444 + DAT_18009a440 + -2 + param_3) / (param_3 - 1) + 7 & 0xfffffff8;
        }
      }
      else if (param_2 < 1) goto LAB_18000c92d;
      uVar3 = DAT_18009a448;
      iVar2 = DAT_18009a444;
      iVar1 = DAT_18009a43c;
      iVar5 = DAT_18009a438;
      if (DAT_18009a438 < DAT_18009a440) {
        lVar4 = (longlong)DAT_18009a438;
        uVar6 = DAT_18009a440 - DAT_18009a438;
        if ((int)DAT_18009a448 < DAT_18009a440 - DAT_18009a438) {
          uVar6 = DAT_18009a448;
        }
        FUN_180016dd0(param_1,(short *)(*(longlong *)(param_1 + 0x41848) + lVar4 * 2),
                      (short *)(*(longlong *)(param_1 + 0x41850) + lVar4 * 2),
                      (short *)(*(longlong *)(param_1 + 0x41858) + lVar4 * 2),uVar6);
        DAT_18009a438 = iVar5 + uVar6;
      }
      if (((int)uVar6 < (int)uVar3) && (iVar1 < iVar2)) {
        lVar4 = (longlong)iVar1;
        iVar7 = uVar3 - uVar6;
        iVar5 = iVar2 - iVar1;
        if (iVar7 < iVar2 - iVar1) {
          iVar5 = iVar7;
        }
        FUN_180016f10(param_1,(ushort *)(*(longlong *)(param_1 + 0x41860) + lVar4 * 2),
                      (ushort *)(*(longlong *)(param_1 + 0x41868) + lVar4 * 2),
                      (short *)(*(longlong *)(param_1 + 0x41870) + lVar4 * 2),iVar5);
        DAT_18009a43c = iVar1 + iVar5;
        if (DAT_18009a43c == iVar2) {
          *(undefined4 *)(param_1 + 0x41348) = 1;
        }
      }
    }
  }
LAB_18000c92d:
                    /* WARNING: Could not recover jumptable at 0x00018000c941. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  return;
}


==================================================================

### EXPORT FUNC 18000c950 (221 bytes) name=FUN_18000c950

void FUN_18000c950(longlong param_1,ushort *param_2)

{
  undefined8 uVar1;
  ushort *puVar2;
  
  if (*(int *)(param_1 + 0x41fdc) == 1) {
    FUN_1800011a0(param_1 + 0x41f10,param_2);
    if (*(int *)(param_1 + 0x41f3c) == 0) {
      puVar2 = (ushort *)0x0;
    }
    else {
      puVar2 = *(ushort **)(param_1 + 0x41f20);
    }
    *(ushort **)(param_1 + 0x44c58) = puVar2;
    if ((*(int *)(param_1 + 0x41340) != 0) && (*(int *)(param_1 + 0x41348) != 0)) {
      FUN_180017200(param_1,puVar2);
      FUN_180017330(param_1,*(longlong *)(param_1 + 0x270));
      goto LAB_18000ca18;
    }
  }
  else {
    uVar1 = FUN_1800011a0(param_1 + 0x41f10,param_2);
    *(int *)(param_1 + 0x41ffc) = (int)uVar1;
    if ((int)uVar1 == 0) {
      return;
    }
    puVar2 = (ushort *)0x0;
    *(undefined4 *)(param_1 + 0x41ffc) = 0;
    if (*(int *)(param_1 + 0x41f3c) != 0) {
      puVar2 = *(ushort **)(param_1 + 0x41f20);
    }
    if ((*(int *)(param_1 + 0x41340) != 0) && (*(int *)(param_1 + 0x41348) != 0)) {
      FUN_180017200(param_1,puVar2);
      FUN_180017330(param_1,*(longlong *)(param_1 + 0x270));
      goto LAB_18000ca18;
    }
  }
  FUN_180017040(param_1,puVar2);
LAB_18000ca18:
  *(undefined4 *)(param_1 + 0x42004) = 1;
  return;
}


==================================================================

### EXPORT FUNC 18000ca30 (1760 bytes) name=FUN_18000ca30

/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
FUN_18000ca30(longlong param_1,undefined8 param_2,int param_3,undefined8 param_4,int param_5)

{
  byte *pbVar1;
  byte *pbVar2;
  byte *pbVar3;
  int *piVar4;
  ushort uVar5;
  byte *_Dst;
  undefined1 uVar6;
  DWORD DVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  DWORD DVar11;
  undefined1 *puVar12;
  longlong lVar13;
  int iVar14;
  ushort *in_RDX;
  ulonglong uVar15;
  int iVar16;
  uint uVar17;
  int iVar18;
  ushort *puVar19;
  byte *pbVar20;
  undefined1 auStack_3518 [32];
  DWORD local_34f8;
  int local_34e8;
  ulonglong local_34e4 [63];
  int aiStack_32e8 [384];
  undefined1 local_2ce8 [11424];
  ulonglong local_48;
  
  local_48 = DAT_18006cea0 ^ (ulonglong)auStack_3518;
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  DVar7 = GetTickCount();
  local_34f8 = DVar7;
  if (((*(int *)(param_1 + 0x228) == 0) || (in_RDX == (ushort *)0x0)) ||
     ((param_3 == 0 && (*(int *)(param_1 + 0x22c) == 0)))) {
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    return 0;
  }
  *(undefined4 *)(param_1 + 0x4203c) = 0;
  *(undefined4 *)(param_1 + 0x42040) = 0;
  *(undefined4 *)(param_1 + 0x42044) = 0;
  *(undefined4 *)(param_1 + 0x42004) = 0;
  if (param_3 == 0) {
    FUN_18000c950(param_1,in_RDX);
  }
  else {
    if (param_3 != 1) goto LAB_18000cb0b;
    memcpy(*(void **)(param_1 + 0x270),in_RDX,(ulonglong)*(uint *)(param_1 + 0x47938) * 2);
    *(undefined4 *)(param_1 + 0x42004) = 1;
  }
  if (*(int *)(param_1 + 0x42004) == 0) {
    FUN_18000d2a0(param_1);
LAB_18000cb0b:
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    return 0;
  }
  *(undefined4 *)(param_1 + 0x44c4c) = 0;
  *(undefined4 *)(param_1 + 0x42038) = 0;
  if ((param_5 == 0) && (1 < *(uint *)(param_1 + 0x41fe0))) {
    uVar8 = FUN_180015680(param_1,30000,*(uint *)(param_1 + 0x50));
    FUN_18001e920(param_1 + 0x41f40,*(ushort **)(param_1 + 0x270),uVar8 & 0xffff);
    *(undefined4 *)(param_1 + 0x42038) = 1;
  }
  if (*(int *)(param_1 + 0x230) != 0) {
    FUN_1800175a0(param_1);
  }
  iVar10 = *(int *)(param_1 + 0x41fe8);
  if (iVar10 == 1) {
    FUN_1800184f0(param_1);
  }
  else if (iVar10 == 2) {
    FUN_180018660(param_1);
  }
  else if (iVar10 == 3) {
    FUN_1800184f0(param_1);
    FUN_180018660(param_1);
  }
  else if (iVar10 == 4) {
    FUN_180018660(param_1);
    FUN_180018660(param_1);
  }
  FUN_180010780(param_1,*(ushort **)(param_1 + 0x270));
  FUN_1800109c0(param_1);
  uVar8 = *(uint *)(param_1 + 0x30);
  if (uVar8 < 5) {
    if ((int)uVar8 < 1) goto LAB_18000cf9a;
  }
  else {
    uVar8 = 4;
  }
  if ((((*(int *)(param_1 + 0x4203c) != 0) && (*(int *)(param_1 + 0x28) == 0)) &&
      (*(int *)(param_1 + 0x10) == 0)) &&
     ((*(int *)(param_1 + 0x88) == 0 && (*(int *)(param_1 + 0x44) == 0)))) {
    if (*(int *)(param_1 + 0x84) == 0) {
      FUN_180017770(param_1,param_2);
      memcpy(local_2ce8,(void *)(param_1 + 0x41ff8),0x2ca0);
      FUN_180010780(param_1,*(ushort **)(param_1 + 0x288));
      if (*(int *)(param_1 + 0x42014) < *(int *)(param_1 + 0x42010)) {
        iVar10 = *(int *)(param_1 + 0x42018);
        uVar17 = *(int *)(param_1 + 0x42010) - iVar10;
        uVar8 = iVar10 - *(int *)(param_1 + 0x42014);
        uVar9 = FUN_180015680(param_1,30000,(uint)(*(int *)(param_1 + 0x24) * 1000) >> 1);
        puVar19 = *(ushort **)(param_1 + 0x288);
        if (uVar8 < uVar17) {
          uVar8 = uVar17;
        }
        uVar17 = uVar9 & 0xffff;
        if ((uVar9 & 0xffff) < uVar8) {
          uVar17 = uVar8;
        }
        puVar12 = *(undefined1 **)(param_1 + 0x280);
        uVar8 = 0;
        if (*(int *)(param_1 + 0x47938) != 0) {
          do {
            uVar5 = *puVar19;
            puVar19 = puVar19 + 1;
            uVar9 = ((uint)uVar5 - (iVar10 - uVar17)) * (int)(0x3fc00000 / (ulonglong)(uVar17 * 2))
                    >> 0x16;
            if (uVar9 < 0xc0) {
              uVar6 = (undefined1)uVar9;
              if (uVar9 < 0x3f) {
                uVar6 = 0x3f;
              }
            }
            else {
              uVar6 = 0xbf;
            }
            *puVar12 = uVar6;
            uVar8 = uVar8 + 1;
            puVar12 = puVar12 + 1;
          } while (uVar8 < *(uint *)(param_1 + 0x47938));
        }
        local_34e8 = 0;
        FUN_1800357d0(local_34e4,0,0x7fc);
        _Dst = *(byte **)(param_1 + 0x290);
        memcpy(_Dst,*(void **)(param_1 + 0x280),(ulonglong)*(uint *)(param_1 + 0x47938));
        uVar15 = (ulonglong)*(uint *)(param_1 + 0x41fc0);
        puVar12 = (undefined1 *)(uVar15 + 1 + *(longlong *)(param_1 + 0x280));
        pbVar1 = _Dst + 1;
        pbVar2 = pbVar1 + uVar15;
        pbVar3 = pbVar2 + uVar15;
        iVar10 = (*(int *)(param_1 + 0x41fc4) + -2) * *(uint *)(param_1 + 0x41fc0) + -2;
        if (0 < iVar10) {
          pbVar20 = pbVar3 + 1;
          iVar18 = (uint)pbVar2[uVar15 - 1] + (uint)pbVar1[uVar15 - 1] * 2 + (uint)*_Dst;
          iVar16 = (uint)*pbVar3 + (uint)*pbVar2 * 2 + (uint)*pbVar1;
          do {
            iVar14 = (uint)pbVar20[(longlong)pbVar1 - (longlong)pbVar3] +
                     (uint)pbVar20[(longlong)pbVar2 - (longlong)pbVar3] * 2 + (uint)*pbVar20;
            uVar8 = (uint)(iVar14 + iVar16 * 2 + iVar18) >> 4;
            *puVar12 = (char)uVar8;
            if (0x7f < uVar8) {
              piVar4 = (int *)((longlong)local_34e4 +
                              (longlong)
                              (int)(pbVar20[*(longlong *)(param_1 + 0x2a0) + (-1 - (longlong)pbVar3)
                                           ] + uVar8) * 4 + -4);
              *piVar4 = *piVar4 + 1;
            }
            pbVar20 = pbVar20 + 1;
            puVar12 = puVar12 + 1;
            iVar18 = iVar16;
            iVar16 = iVar14;
          } while ((longlong)(pbVar20 + (-1 - (longlong)pbVar3)) < (longlong)iVar10);
        }
        uVar8 = 0;
        if (*(int *)(param_1 + 0x41fc4) != 0) {
          do {
            uVar9 = *(int *)(param_1 + 0x41fc0) * uVar8;
            *(byte *)((ulonglong)uVar9 + *(longlong *)(param_1 + 0x280)) = _Dst[uVar9];
            uVar8 = uVar8 + 1;
            uVar9 = uVar8 * *(int *)(param_1 + 0x41fc0) - 1;
            *(byte *)((ulonglong)uVar9 + *(longlong *)(param_1 + 0x280)) = _Dst[uVar9];
          } while (uVar8 < *(uint *)(param_1 + 0x41fc4));
        }
        iVar18 = 0x1ff;
        iVar10 = 0;
        lVar13 = 0x1ff;
        do {
          iVar10 = iVar10 + *(int *)((longlong)local_34e4 + lVar13 * 4 + -4);
          if (*(uint *)(param_1 + 0x47938) < (uint)(iVar10 * 0x800)) break;
          lVar13 = lVar13 + -1;
          iVar18 = iVar18 + -1;
        } while (0x17d < lVar13);
        iVar10 = 0x1000;
        if (0x17e < iVar18) {
          iVar10 = (int)(0xff000 / (longlong)(iVar18 + -0x7f));
        }
        uVar8 = 0;
        lVar13 = 0;
        if (*(uint *)(param_1 + 0x47938) != 0) {
          do {
            iVar18 = ((*(byte *)(lVar13 + *(longlong *)(param_1 + 0x280)) - 0x7f) +
                     (uint)*(byte *)(*(longlong *)(param_1 + 0x2a0) + lVar13)) * iVar10;
            iVar18 = (int)(iVar18 + (iVar18 >> 0x1f & 0xfffU)) >> 0xc;
            if (iVar18 < 0) {
              iVar18 = 0;
            }
            else if (0xff < iVar18) {
              iVar18 = 0xff;
            }
            *(char *)(*(longlong *)(param_1 + 0x2a0) + lVar13) = (char)iVar18;
            uVar8 = uVar8 + 1;
            lVar13 = lVar13 + 1;
          } while (uVar8 < *(uint *)(param_1 + 0x47938));
        }
      }
      memcpy((void *)(param_1 + 0x41ff8),local_2ce8,0x2ca0);
      DVar7 = local_34f8;
    }
    else {
      FUN_180017c40(param_1,uVar8 << 3);
    }
  }
LAB_18000cf9a:
  uVar8 = *(uint *)(param_1 + 0x41fc8);
  uVar9 = *(uint *)(param_1 + 0x41fc0);
  if ((uVar8 == uVar9) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4))) {
    memcpy(*(void **)(param_1 + 0x220),*(void **)(param_1 + 0x2a0),
           (ulonglong)*(uint *)(param_1 + 0x47938));
  }
  else if ((uVar8 == uVar9 * 2) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) * 2))
  {
    FUN_180019740(param_1);
  }
  else if ((uVar8 == uVar9 * 4) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) << 2)
          ) {
    FUN_180019b30(param_1);
  }
  else if ((uVar8 == uVar9 * 8) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) << 3)
          ) {
    FUN_180019e60(param_1);
  }
  else if ((uVar8 * 2 == uVar9 * 3) &&
          (*(int *)(param_1 + 0x41fcc) * 2 == *(int *)(param_1 + 0x41fc4) * 3)) {
    FUN_180018e90(param_1);
  }
  else if ((uVar8 * 3 == uVar9 * 5) &&
          (*(int *)(param_1 + 0x41fcc) * 3 == *(int *)(param_1 + 0x41fc4) * 5)) {
    FUN_1800191b0(param_1);
  }
  else if ((uVar9 < uVar8) && (*(uint *)(param_1 + 0x41fc4) < *(uint *)(param_1 + 0x41fcc))) {
    FUN_18001a750(param_1);
  }
  DVar11 = GetTickCount();
  *(DWORD *)(param_1 + 0x42048) = DVar11 - DVar7;
  FUN_18000d2a0(param_1);
  *(undefined4 *)(param_1 + 0x234) = 1;
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  return 3;
}


==================================================================

### EXPORT FUNC 18000d110 (396 bytes) name=FUN_18000d110

void FUN_18000d110(longlong param_1)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  
  if (*(int *)(param_1 + 0x234) != 0) {
    FUN_1800109c0(param_1);
    if (((*(int *)(param_1 + 0x4203c) != 0) && (*(int *)(param_1 + 0x30) != 0)) &&
       ((*(int *)(param_1 + 0x28) == 0 || (*(int *)(param_1 + 0x10) != 0)))) {
      iVar3 = *(int *)(param_1 + 0x30) << 3;
      if (*(int *)(param_1 + 0x84) == 0) {
        FUN_180017c40(param_1,iVar3);
      }
      else {
        FUN_180017fd0(param_1,iVar3);
      }
    }
    uVar1 = *(uint *)(param_1 + 0x41fc8);
    uVar2 = *(uint *)(param_1 + 0x41fc0);
    if ((uVar1 == uVar2) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4))) {
      memcpy(*(void **)(param_1 + 0x220),*(void **)(param_1 + 0x2a0),
             (ulonglong)*(uint *)(param_1 + 0x47938));
      return;
    }
    if ((uVar1 == uVar2 * 2) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) * 2)) {
      FUN_180019740(param_1);
      return;
    }
    if ((uVar1 == uVar2 * 4) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) << 2)) {
      FUN_180019b30(param_1);
      return;
    }
    if ((uVar1 == uVar2 * 8) && (*(int *)(param_1 + 0x41fcc) == *(int *)(param_1 + 0x41fc4) << 3)) {
      FUN_180019e60(param_1);
      return;
    }
    if ((uVar1 * 2 == uVar2 * 3) &&
       (*(int *)(param_1 + 0x41fcc) * 2 == *(int *)(param_1 + 0x41fc4) * 3)) {
      FUN_180018e90(param_1);
      return;
    }
    if ((uVar1 * 3 == uVar2 * 5) &&
       (*(int *)(param_1 + 0x41fcc) * 3 == *(int *)(param_1 + 0x41fc4) * 5)) {
      FUN_1800191b0(param_1);
      return;
    }
    if ((uVar2 < uVar1) && (*(uint *)(param_1 + 0x41fc4) < *(uint *)(param_1 + 0x41fcc))) {
      FUN_18001a750(param_1);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18000d2a0 (839 bytes) name=FUN_18000d2a0

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

void FUN_18000d2a0(longlong param_1)

{
  int iVar1;
  int iVar2;
  uint uVar3;
  float fVar4;
  float fVar5;
  
  memcpy((void *)(param_1 + 0x44c98),(void *)(param_1 + 0x41ff8),0x2ca0);
  iVar1 = FUN_180016290(param_1,(uint)*(ushort *)(param_1 + 0x42018),
                        (*(uint *)(param_1 + 0x47938) >> 1) + (*(uint *)(param_1 + 0x41fc0) >> 1),0)
  ;
  *(int *)(param_1 + 0x44cb8) = iVar1;
  iVar1 = FUN_180016290(param_1,(uint)*(ushort *)(param_1 + 0x4202c),
                        (*(uint *)(param_1 + 0x47938) >> 1) + (*(uint *)(param_1 + 0x41fc0) >> 1),0)
  ;
  *(int *)(param_1 + 0x44ccc) = iVar1;
  iVar1 = FUN_180016290(param_1,(uint)*(ushort *)(param_1 + 0x42010),*(uint *)(param_1 + 0x44cc0),1)
  ;
  *(int *)(param_1 + 0x44cb0) = iVar1;
  iVar1 = FUN_180016290(param_1,(uint)*(ushort *)(param_1 + 0x42030),
                        (*(uint *)(param_1 + 0x47938) >> 1) + (*(uint *)(param_1 + 0x41fc0) >> 1),0)
  ;
  *(int *)(param_1 + 0x44cd0) = iVar1;
  iVar1 = FUN_180016290(param_1,(uint)*(ushort *)(param_1 + 0x42014),*(uint *)(param_1 + 0x44cc4),1)
  ;
  *(int *)(param_1 + 0x44cb4) = iVar1;
  if (*(int *)(param_1 + 0xcc) == 2) {
    iVar1 = *(int *)(param_1 + 0x44cb8);
  }
  else {
    if (*(int *)(param_1 + 0xcc) != 3) goto LAB_18000d3c5;
    iVar1 = *(int *)(param_1 + 0x60);
  }
  *(float *)(param_1 + 0xd8) = (float)iVar1 * _DAT_18005e9f0;
LAB_18000d3c5:
  iVar1 = *(int *)(param_1 + 0x47950);
  if (iVar1 == 0) {
    iVar2 = (uint)*(ushort *)(param_1 + 0x4201c) <<
            ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
  }
  else {
    iVar2 = FUN_180015a40(param_1,*(int *)(param_1 + 0x44cb8),
                          (uint)*(ushort *)(param_1 + 0x4201c) <<
                          (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f));
  }
  *(int *)(param_1 + 0x44cbc) = iVar2;
  uVar3 = (uint)(longlong)(*(float *)(param_1 + 0x42034) * _DAT_18005e9ec);
  if (iVar1 == 0) {
    uVar3 = (uVar3 & 0xffff) << ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
  }
  else {
    uVar3 = FUN_180015a40(param_1,*(int *)(param_1 + 0x44cb8),
                          (uVar3 & 0xffff) << (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f)
                         );
  }
  fVar5 = DAT_18005e9e8;
  fVar4 = *(float *)(param_1 + 0x44c8c) * DAT_18005e9e8;
  *(float *)(param_1 + 0x44cd4) = (float)uVar3 * DAT_18005e9e4;
  uVar3 = (uint)(longlong)fVar4;
  if (iVar1 == 0) {
    uVar3 = (uVar3 & 0xffff) << ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
  }
  else {
    uVar3 = FUN_180015a40(param_1,*(int *)(param_1 + 0x44cb8),
                          (uVar3 & 0xffff) << (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f)
                         );
  }
  fVar4 = DAT_18005e9e0;
  *(float *)(param_1 + 0x4792c) = (float)uVar3 * DAT_18005e9e0;
  uVar3 = (uint)(longlong)(*(float *)(param_1 + 0x44c90) * fVar5);
  if (iVar1 == 0) {
    uVar3 = (uVar3 & 0xffff) << ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
  }
  else {
    uVar3 = FUN_180015a40(param_1,*(int *)(param_1 + 0x44cb8),
                          (uVar3 & 0xffff) << (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f)
                         );
  }
  *(float *)(param_1 + 0x47930) = (float)uVar3 * fVar4;
  if (*(int *)(param_1 + 0x78) != 0) {
    iVar1 = FUN_180015b90(param_1,*(int *)(param_1 + 0x44cb8),*(float *)(param_1 + 0xd4));
    *(int *)(param_1 + 0x44cb8) = iVar1;
    iVar1 = FUN_180015b90(param_1,*(int *)(param_1 + 0x44cb4),*(float *)(param_1 + 0xd4));
    *(int *)(param_1 + 0x44cb4) = iVar1;
    iVar1 = FUN_180015b90(param_1,*(int *)(param_1 + 0x44cb0),*(float *)(param_1 + 0xd4));
    *(int *)(param_1 + 0x44cb0) = iVar1;
  }
  iVar1 = *(int *)(param_1 + 0x44cb4);
  if (*(int *)(param_1 + 0x44cb0) < iVar1) {
    *(int *)(param_1 + 0x44cb0) = iVar1;
  }
  if (*(int *)(param_1 + 0x44cb0) < *(int *)(param_1 + 0x44cb8)) {
    *(int *)(param_1 + 0x44cb8) = *(int *)(param_1 + 0x44cb0);
  }
  if (*(int *)(param_1 + 0x44cb8) < iVar1) {
    *(int *)(param_1 + 0x44cb8) = iVar1;
  }
  return;
}


==================================================================

### EXPORT FUNC 18000d5f0 (6915 bytes) name=FUN_18000d5f0

void FUN_18000d5f0(longlong param_1,undefined4 param_2)

{
  LPCRITICAL_SECTION lpCriticalSection;
  void *_Src;
  int iVar1;
  char cVar2;
  char cVar3;
  char *pcVar4;
  undefined1 *puVar5;
  longlong lVar6;
  undefined1 uVar7;
  int iVar8;
  undefined1 *puVar9;
  int iVar10;
  int iVar11;
  undefined4 *puVar12;
  int iVar13;
  undefined4 local_418;
  undefined4 local_414;
  undefined4 local_410;
  undefined4 local_40c;
  undefined4 local_408;
  undefined4 local_404;
  undefined4 local_400;
  undefined4 local_3fc;
  undefined4 local_3f8;
  undefined4 local_3f4;
  undefined4 local_3f0;
  undefined4 local_3ec;
  undefined4 local_3e8;
  undefined4 local_3e4;
  undefined4 local_3e0;
  undefined4 local_3dc;
  undefined4 local_3d8;
  undefined4 local_3d4;
  undefined4 local_3d0;
  undefined4 local_3cc;
  undefined4 local_3c8;
  undefined4 local_3c4;
  undefined4 local_3c0;
  undefined4 local_3bc;
  undefined4 local_3b8;
  undefined4 local_3b4;
  undefined4 local_3b0;
  undefined4 local_3ac;
  undefined4 local_3a8;
  undefined4 local_3a4;
  undefined4 local_3a0;
  undefined4 local_39c;
  undefined4 local_398;
  undefined4 local_394;
  undefined4 local_390;
  undefined4 local_38c;
  undefined4 local_388;
  undefined4 local_384;
  undefined4 local_380;
  undefined4 local_37c;
  undefined4 local_378;
  undefined4 local_374;
  undefined4 local_370;
  undefined4 local_36c;
  undefined4 local_368;
  undefined4 local_364;
  undefined4 local_360;
  undefined4 local_35c;
  undefined4 local_358;
  undefined4 local_354;
  undefined4 local_350;
  undefined4 local_34c;
  undefined4 local_348;
  undefined4 local_344;
  undefined4 local_340;
  undefined4 local_33c;
  undefined4 local_338;
  undefined4 local_334;
  undefined4 local_330;
  undefined4 local_32c;
  undefined4 local_328;
  undefined4 local_324;
  undefined4 local_320;
  undefined4 local_31c;
  undefined4 local_318;
  undefined4 local_314;
  undefined4 local_310;
  undefined4 local_30c;
  undefined4 local_308;
  undefined4 local_304;
  undefined4 local_300;
  undefined4 local_2fc;
  undefined4 local_2f8;
  undefined4 local_2f4;
  undefined4 local_2f0;
  undefined4 local_2ec;
  undefined4 local_2e8;
  undefined4 local_2e4;
  undefined4 local_2e0;
  undefined4 local_2dc;
  undefined4 local_2d8;
  undefined4 local_2d4;
  undefined4 local_2d0;
  undefined4 local_2cc;
  undefined4 local_2c8;
  undefined4 local_2c4;
  undefined4 local_2c0;
  undefined4 local_2bc;
  undefined4 local_2b8;
  undefined4 local_2b4;
  undefined4 local_2b0;
  undefined4 local_2ac;
  undefined4 local_2a8;
  undefined4 local_2a4;
  undefined4 local_2a0;
  undefined4 local_29c;
  undefined4 local_298;
  undefined4 local_294;
  undefined4 local_290;
  undefined4 local_28c;
  undefined4 local_288;
  undefined4 local_284;
  undefined4 local_280;
  undefined4 local_27c;
  undefined4 local_278;
  undefined4 local_274;
  undefined4 local_270;
  undefined4 local_26c;
  undefined4 local_268;
  undefined4 local_264;
  undefined4 local_260;
  undefined4 local_25c;
  undefined4 local_258;
  undefined4 local_254;
  undefined4 local_250;
  undefined4 local_24c;
  undefined4 local_248;
  undefined4 local_244;
  undefined4 local_240;
  undefined4 local_23c;
  undefined4 local_238;
  undefined4 local_234;
  undefined4 local_230;
  undefined4 local_22c;
  undefined4 local_228;
  undefined4 local_224;
  undefined4 local_220;
  undefined4 local_21c;
  undefined4 local_218;
  undefined4 local_214;
  undefined4 local_210;
  undefined4 local_20c;
  undefined4 local_208;
  undefined4 local_204;
  undefined4 local_200;
  undefined4 local_1fc;
  undefined4 local_1f8;
  undefined4 local_1f4;
  undefined4 local_1f0;
  undefined4 local_1ec;
  undefined4 local_1e8;
  undefined4 local_1e4;
  undefined4 local_1e0;
  undefined4 local_1dc;
  undefined4 local_1d8;
  undefined4 local_1d4;
  undefined4 local_1d0;
  undefined4 local_1cc;
  undefined4 local_1c8;
  undefined4 local_1c4;
  undefined4 local_1c0;
  undefined4 local_1bc;
  undefined4 local_1b8;
  undefined4 local_1b4;
  undefined4 local_1b0;
  undefined4 local_1ac;
  undefined4 local_1a8;
  undefined4 local_1a4;
  undefined4 local_1a0;
  undefined4 local_19c;
  undefined4 local_198;
  undefined4 local_194;
  undefined4 local_190;
  undefined4 local_18c;
  undefined4 local_188;
  undefined4 local_184;
  undefined4 local_180;
  undefined4 local_17c;
  undefined4 local_178;
  undefined4 local_174;
  undefined4 local_170;
  undefined4 local_16c;
  undefined4 local_168;
  undefined4 local_164;
  undefined4 local_160;
  undefined4 local_15c;
  undefined4 local_158;
  undefined4 local_154;
  undefined4 local_150;
  undefined4 local_14c;
  undefined4 local_148;
  undefined4 local_144;
  undefined4 local_140;
  undefined4 local_13c;
  undefined4 local_138;
  undefined4 local_134;
  undefined4 local_130;
  undefined4 local_12c;
  undefined4 local_128;
  undefined4 local_124;
  undefined4 local_120;
  undefined4 local_11c;
  undefined4 local_118;
  undefined4 local_114;
  undefined4 local_110;
  undefined4 local_10c;
  undefined4 local_108;
  undefined4 local_104;
  undefined4 local_100;
  undefined4 local_fc;
  undefined4 local_f8;
  undefined4 local_f4;
  undefined4 local_f0;
  undefined4 local_ec;
  undefined4 local_e8;
  undefined4 local_e4;
  undefined4 local_e0;
  undefined4 local_dc;
  undefined4 local_d8;
  undefined4 local_d4;
  undefined4 local_d0;
  undefined4 local_cc;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined4 local_c0;
  undefined4 local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined4 local_b0;
  undefined4 local_ac;
  undefined4 local_a8;
  undefined4 local_a4;
  undefined4 local_a0;
  undefined4 local_9c;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_90;
  undefined4 local_8c;
  undefined4 local_88;
  undefined4 local_84;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78;
  undefined4 local_74;
  undefined4 local_70;
  undefined4 local_6c;
  undefined4 local_68;
  undefined4 local_64;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  undefined4 local_54;
  undefined4 local_50;
  undefined4 local_4c;
  undefined4 local_48;
  undefined4 local_44;
  undefined4 local_40;
  undefined4 local_3c;
  undefined4 local_38;
  undefined4 local_34;
  undefined4 local_30;
  undefined4 local_2c;
  undefined4 local_28;
  undefined4 local_24;
  undefined4 local_20;
  undefined4 local_1c;
  
  lpCriticalSection = (LPCRITICAL_SECTION)(param_1 + 0x238);
  EnterCriticalSection(lpCriticalSection);
  _Src = (void *)(param_1 + 0x2c8);
  switch(param_2) {
  case 0:
    iVar8 = 0;
    puVar5 = (undefined1 *)(param_1 + 0x2c9);
    do {
      uVar7 = (undefined1)iVar8;
      puVar5[1] = uVar7;
      *puVar5 = uVar7;
      puVar5[-1] = uVar7;
      iVar8 = iVar8 + 1;
      puVar5[2] = 0;
      puVar5 = puVar5 + 4;
    } while (iVar8 < 0x100);
    break;
  case 1:
    iVar8 = 0;
    pcVar4 = (char *)(param_1 + 0x2c9);
    do {
      pcVar4[2] = '\0';
      cVar2 = -1 - (char)iVar8;
      iVar8 = iVar8 + 1;
      pcVar4[1] = cVar2;
      *pcVar4 = cVar2;
      pcVar4[-1] = cVar2;
      pcVar4 = pcVar4 + 4;
    } while (iVar8 < 0x100);
    break;
  case 2:
    iVar8 = 0;
    puVar5 = (undefined1 *)(param_1 + 0x2c9);
    do {
      puVar5[1] = 0;
      *puVar5 = 0;
      puVar5[2] = 0;
      lVar6 = (longlong)iVar8;
      iVar10 = iVar8 / 0x16;
      iVar13 = iVar8 >> 0x1f;
      iVar8 = iVar8 + 0x75;
      puVar5[-1] = ((char)iVar10 + (char)iVar13) - (char)(lVar6 * 0x2e8ba2e9 >> 0x3f);
      puVar5 = puVar5 + 4;
    } while (iVar8 < 0xa0e);
    puVar5 = (undefined1 *)(param_1 + 0x321);
    iVar8 = 0;
    iVar10 = 0;
    do {
      *puVar5 = 0;
      puVar5[2] = 0;
      iVar13 = iVar10 + 0xbc;
      puVar5[1] = (char)(iVar10 / 0x47) - (char)(iVar10 / -0x72000000);
      puVar5[-1] = ((char)(iVar8 / 0x47) - (char)(iVar8 / -0x72000000)) + 'u';
      puVar5 = puVar5 + 4;
      iVar8 = iVar8 + 0x25;
      iVar10 = iVar13;
    } while (iVar13 < 0x3424);
    pcVar4 = (char *)(param_1 + 0x43d);
    iVar8 = 0;
    iVar10 = 0;
    iVar13 = 0;
    do {
      pcVar4[2] = '\0';
      pcVar4[1] = (((char)(iVar13 / 0x1d) + (char)(iVar13 >> 0x1f)) -
                  (char)((longlong)iVar13 * 0x8d3dcb09 >> 0x3f)) + -0x44;
      *pcVar4 = (char)(iVar8 / 0x94) - (char)(iVar8 / -0x6c000000);
      iVar11 = iVar10 + -0x3b;
      pcVar4[-1] = (((char)(iVar10 / 0x1d) + (char)(iVar10 >> 0x1f)) -
                   (char)((longlong)iVar10 * 0x8d3dcb09 >> 0x3f)) + -0x66;
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar8 + 0xff;
      iVar10 = iVar11;
      iVar13 = iVar13 + 0x27;
    } while (-0x6af < iVar11);
    iVar13 = 0;
    pcVar4 = (char *)(param_1 + 0x4b1);
    iVar8 = 0x1ce3;
    iVar10 = 0;
    do {
      pcVar4[2] = '\0';
      pcVar4[1] = (((char)(iVar10 / 0x1e) + (char)(iVar10 >> 0x1f)) -
                  (char)((longlong)iVar10 * 0x88888889 >> 0x3f)) + -0x1d;
      *pcVar4 = (char)(iVar8 / 0x94) - (char)(iVar8 / -0x6c000000);
      lVar6 = (longlong)iVar13;
      iVar11 = iVar13 / 0x12;
      iVar1 = iVar13 >> 0x1f;
      iVar13 = iVar13 + -0x50;
      pcVar4[-1] = (((char)iVar11 + (char)iVar1) - (char)(lVar6 * 0x38e38e39 >> 0x3f)) + '_';
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar8 + 0xff;
      iVar10 = iVar10 + 0x1c;
    } while (-0x5a0 < iVar13);
    pcVar4 = (char *)(param_1 + 0x4f9);
    iVar8 = 0x1f8;
    iVar10 = 0x2ed1;
    do {
      pcVar4[-1] = '\x0f';
      pcVar4[2] = '\0';
      iVar13 = iVar8 + 0x1c;
      pcVar4[1] = (((char)(iVar8 / 0x1e) + (char)(iVar8 >> 0x1f)) -
                  (char)((longlong)iVar8 * 0x88888889 >> 0x3f)) + -0x1d;
      *pcVar4 = (char)(iVar10 / 0x94) - (char)(iVar10 / -0x6c000000);
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar13;
      iVar10 = iVar10 + 0xff;
    } while (iVar13 < 0x348);
    pcVar4 = (char *)(param_1 + 0x529);
    iVar8 = 0x3ac5;
    do {
      pcVar4[1] = -1;
      pcVar4[-1] = '\x0f';
      pcVar4[2] = '\0';
      iVar10 = iVar8 + 0xff;
      *pcVar4 = (char)(iVar8 / 0x94) - (char)(iVar8 / -0x6c000000);
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar10;
    } while (iVar10 < 0x817e);
    pcVar4 = (char *)(param_1 + 0x645);
    iVar8 = 0;
    iVar10 = 0x817e;
    do {
      pcVar4[1] = -1;
      pcVar4[2] = '\0';
      iVar13 = iVar10 + 0xff;
      *pcVar4 = (char)(iVar10 / 0x94) - (char)(iVar10 / -0x6c000000);
      pcVar4[-1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x1fU)) >> 5) + '\x0f';
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar8 + 0xf0;
      iVar10 = iVar13;
    } while (iVar13 < 0x936c);
    puVar5 = (undefined1 *)(param_1 + 0x68d);
    iVar8 = 0x10e0;
    do {
      iVar10 = iVar8 + 0xf0;
      puVar5[1] = 0xff;
      *puVar5 = 0xff;
      puVar5[2] = 0;
      puVar5[-1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x1fU)) >> 5) + '\x0f';
      puVar5 = puVar5 + 4;
      iVar8 = iVar10;
    } while (iVar10 < 0x1ef0);
    break;
  case 3:
    puVar5 = (undefined1 *)(param_1 + 0x2c9);
    iVar8 = 0;
    iVar10 = 0;
    do {
      iVar13 = iVar10 + 0xff;
      puVar5[1] = 0;
      puVar5[2] = 0;
      *puVar5 = (char)((int)(iVar10 + (iVar10 >> 0x1f & 0x7fU)) >> 7);
      puVar5[-1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x3fU)) >> 6) + '2';
      puVar5 = puVar5 + 4;
      iVar8 = iVar8 + 0xcd;
      iVar10 = iVar13;
    } while (iVar13 < 0x3fc0);
    puVar5 = (undefined1 *)(param_1 + 0x3c9);
    iVar8 = 0x3fc0;
    iVar10 = 0;
    do {
      puVar5[2] = 0;
      puVar5[1] = (char)((int)(iVar8 + -0x3fc0 + (iVar8 + -0x3fc0 >> 0x1f & 0x3fU)) >> 6);
      *puVar5 = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x7fU)) >> 7);
      iVar13 = iVar10 + -0xff;
      puVar5[-1] = (char)((int)(iVar10 + (iVar10 >> 0x1f & 0x3fU)) >> 6) + -1;
      puVar5 = puVar5 + 4;
      iVar8 = iVar8 + 0xff;
      iVar10 = iVar13;
    } while (-0x3fc0 < iVar13);
    pcVar4 = (char *)(param_1 + 0x4c9);
    iVar8 = 0;
    iVar10 = 0;
    do {
      iVar13 = iVar10 + -0xff;
      pcVar4[1] = -1;
      pcVar4[2] = '\0';
      *pcVar4 = (char)((int)(iVar10 + (iVar10 >> 0x1f & 0x3fU)) >> 6) + -1;
      pcVar4[-1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x7fU)) >> 7);
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar8 + 0xff;
      iVar10 = iVar13;
    } while (-0x3fc0 < iVar13);
    puVar5 = (undefined1 *)(param_1 + 0x5c9);
    iVar8 = 0x3fc0;
    do {
      puVar5[1] = 0xff;
      puVar5[2] = 0;
      *puVar5 = (char)((int)(iVar8 + -0x3fc0 + (iVar8 + -0x3fc0 >> 0x1f & 0x3fU)) >> 6);
      iVar10 = iVar8 + 0xff;
      puVar5[-1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x7fU)) >> 7);
      puVar5 = puVar5 + 4;
      iVar8 = iVar10;
    } while (iVar10 < 0x7f80);
    break;
  case 4:
    iVar10 = 0;
    puVar5 = (undefined1 *)(param_1 + 0x2c9);
    iVar8 = 0;
    do {
      *puVar5 = (char)iVar8;
      iVar8 = iVar8 + 1;
      puVar5[1] = 0x32;
      puVar5[-1] = 0;
      puVar5[2] = 0;
      puVar5 = puVar5 + 4;
    } while (iVar8 < 0x32);
    cVar2 = '2';
    pcVar4 = (char *)(param_1 + 0x391);
    do {
      *pcVar4 = cVar2;
      pcVar4[-1] = '\0';
      pcVar4[2] = '\0';
      cVar2 = cVar2 + '\x01';
      lVar6 = (longlong)iVar10;
      iVar8 = iVar10 / 0x96;
      iVar13 = iVar10 >> 0x1f;
      iVar10 = iVar10 + 0xcd;
      pcVar4[1] = (((char)iVar8 + (char)iVar13) - (char)(lVar6 * 0x1b4e81b5 >> 0x3f)) + '2';
      pcVar4 = pcVar4 + 4;
    } while (iVar10 < 0x781e);
    iVar8 = 200;
    puVar5 = (undefined1 *)(param_1 + 0x5e9);
    do {
      *puVar5 = (char)iVar8;
      iVar8 = iVar8 + 1;
      puVar5[1] = 0xff;
      puVar5[-1] = 0;
      puVar5[2] = 0;
      puVar5 = puVar5 + 4;
    } while (iVar8 < 0x100);
    break;
  case 5:
    puVar5 = (undefined1 *)(param_1 + 0x2c9);
    iVar8 = 0;
    iVar10 = 0;
    iVar13 = 0;
    do {
      iVar11 = iVar13 + 0xcb;
      puVar5[2] = 0;
      puVar5[1] = (char)((int)(iVar13 + (iVar13 >> 0x1f & 0x3fU)) >> 6);
      *puVar5 = (char)((int)(iVar10 + (iVar10 >> 0x1f & 0x3fU)) >> 6);
      puVar5[-1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x3fU)) >> 6);
      puVar5 = puVar5 + 4;
      iVar8 = iVar8 + 0x24;
      iVar10 = iVar10 + 0x16;
      iVar13 = iVar11;
    } while (iVar11 < 0x32c0);
    pcVar4 = (char *)(param_1 + 0x3c9);
    iVar8 = 0;
    iVar10 = 0;
    iVar13 = 0;
    do {
      pcVar4[2] = '\0';
      pcVar4[1] = (char)((int)(iVar13 + (iVar13 >> 0x1f & 0x3fU)) >> 6) + -0x35;
      *pcVar4 = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x3fU)) >> 6) + '\x16';
      iVar11 = iVar10 + -0x24;
      pcVar4[-1] = (char)((int)(iVar10 + (iVar10 >> 0x1f & 0x3fU)) >> 6) + '$';
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar8 + 0x44;
      iVar10 = iVar11;
      iVar13 = iVar13 + 0x34;
    } while (-0x900 < iVar11);
    pcVar4 = (char *)(param_1 + 0x4c9);
    iVar8 = 0;
    do {
      iVar10 = iVar8 + 0x7c;
      pcVar4[1] = -1;
      pcVar4[-1] = '\0';
      pcVar4[2] = '\0';
      *pcVar4 = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x3fU)) >> 6) + 'Z';
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar10;
    } while (iVar10 < 0x1f00);
    pcVar4 = (char *)(param_1 + 0x5c9);
    iVar8 = 0;
    iVar10 = 0;
    do {
      iVar13 = iVar10 + 0x29;
      pcVar4[1] = -1;
      pcVar4[2] = '\0';
      *pcVar4 = (char)((int)(iVar10 + (iVar10 >> 0x1f & 0x3fU)) >> 6) + -0x2a;
      pcVar4[-1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x3fU)) >> 6);
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar8 + 0xff;
      iVar10 = iVar13;
    } while (iVar13 < 0xa40);
    break;
  case 6:
    cVar2 = '\0';
    iVar8 = 0;
    pcVar4 = (char *)(param_1 + 0x2c9);
    do {
      pcVar4[2] = '\0';
      lVar6 = (longlong)iVar8;
      iVar10 = iVar8 / 100;
      iVar13 = iVar8 >> 0x1f;
      iVar8 = iVar8 + 0xff;
      pcVar4[1] = -1 - (((char)iVar10 + (char)iVar13) - (char)(lVar6 * 0x51eb851f >> 0x3f));
      cVar3 = -1 - cVar2;
      cVar2 = cVar2 + '\x01';
      *pcVar4 = cVar3;
      pcVar4[-1] = cVar3;
      pcVar4 = pcVar4 + 4;
    } while (iVar8 < 0x639c);
    cVar2 = 'd';
    pcVar4 = (char *)(param_1 + 0x459);
    iVar8 = 0;
    do {
      pcVar4[2] = '\0';
      iVar10 = iVar8 + 0xff;
      cVar3 = -1 - cVar2;
      pcVar4[1] = ((char)(iVar8 / 0x69) + (char)(iVar8 >> 0x1f)) -
                  (char)((longlong)iVar8 * 0x9c09c09d >> 0x3f);
      cVar2 = cVar2 + '\x01';
      *pcVar4 = cVar3;
      pcVar4[-1] = cVar3;
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar10;
    } while (iVar10 < 0x6897);
    iVar8 = 0xcd;
    pcVar4 = (char *)(param_1 + 0x5fd);
    do {
      pcVar4[1] = -1;
      pcVar4[2] = '\0';
      cVar2 = -1 - (char)iVar8;
      iVar8 = iVar8 + 1;
      *pcVar4 = cVar2;
      pcVar4[-1] = cVar2;
      pcVar4 = pcVar4 + 4;
    } while (iVar8 < 0x100);
    break;
  case 7:
    puVar5 = (undefined1 *)(param_1 + 0x2c9);
    iVar8 = 0;
    do {
      iVar10 = iVar8 + 1;
      *puVar5 = 0;
      puVar5[-1] = 0;
      puVar5[2] = 0;
      puVar5[1] = (char)iVar8 * '\x02';
      puVar5 = puVar5 + 4;
      iVar8 = iVar10;
    } while (iVar10 < 0x80);
    pcVar4 = (char *)(param_1 + 0x4c9);
    iVar8 = 0;
    do {
      pcVar4[1] = -1;
      pcVar4[2] = '\0';
      iVar10 = iVar8 + 0xff;
      cVar2 = ((char)(iVar8 / 0x7f) + (char)(iVar8 >> 0x1f)) -
              (char)((longlong)iVar8 * 0x81020409 >> 0x3f);
      *pcVar4 = cVar2;
      pcVar4[-1] = cVar2;
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar10;
    } while (iVar10 < 0x7f80);
    break;
  case 8:
    puVar5 = (undefined1 *)(param_1 + 0x2c9);
    iVar8 = 0;
    do {
      iVar10 = iVar8 + 0x80;
      puVar5[1] = 0;
      *puVar5 = 0;
      puVar5[2] = 0;
      puVar5[-1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x1fU)) >> 5) + '\x7f';
      puVar5 = puVar5 + 4;
      iVar8 = iVar10;
    } while (iVar10 < 0x1000);
    puVar5 = (undefined1 *)(param_1 + 0x349);
    iVar8 = 0;
    do {
      iVar10 = iVar8 + 0xff;
      puVar5[1] = 0;
      puVar5[-1] = 0xff;
      puVar5[2] = 0;
      *puVar5 = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x3fU)) >> 6);
      puVar5 = puVar5 + 4;
      iVar8 = iVar10;
    } while (iVar10 < 0x3fc0);
    puVar5 = (undefined1 *)(param_1 + 0x449);
    iVar8 = 0;
    iVar10 = 0;
    do {
      *puVar5 = 0xff;
      puVar5[2] = 0;
      puVar5[1] = (char)((int)(iVar10 + (iVar10 >> 0x1f & 0x3fU)) >> 6);
      iVar13 = iVar8 + -0xff;
      puVar5[-1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x3fU)) >> 6) + -1;
      puVar5 = puVar5 + 4;
      iVar8 = iVar13;
      iVar10 = iVar10 + 0xff;
    } while (-0x3fc0 < iVar13);
    pcVar4 = (char *)(param_1 + 0x549);
    iVar8 = 0;
    do {
      iVar10 = iVar8 + -0xff;
      pcVar4[1] = -1;
      pcVar4[-1] = '\0';
      pcVar4[2] = '\0';
      *pcVar4 = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x3fU)) >> 6) + -1;
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar10;
    } while (-0x3fc0 < iVar10);
    puVar5 = (undefined1 *)(param_1 + 0x649);
    iVar8 = 0;
    do {
      iVar10 = iVar8 + -0x80;
      *puVar5 = 0;
      puVar5[-1] = 0;
      puVar5[2] = 0;
      puVar5[1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 0x1fU)) >> 5) + -1;
      puVar5 = puVar5 + 4;
      iVar8 = iVar10;
    } while (-0x1000 < iVar10);
    break;
  case 9:
    iVar8 = 0;
    iVar10 = 0x9867;
    iVar13 = 0;
    pcVar4 = (char *)(param_1 + 0x2c9);
    do {
      pcVar4[2] = '\0';
      lVar6 = (longlong)iVar13;
      iVar11 = iVar13 / 200;
      iVar1 = iVar13 >> 0x1f;
      iVar13 = iVar13 + 0xff;
      cVar2 = ((char)iVar11 + (char)iVar1) - (char)(lVar6 * 0x51eb851f >> 0x3f);
      pcVar4[1] = cVar2;
      *pcVar4 = cVar2;
      pcVar4[-1] = cVar2;
      pcVar4 = pcVar4 + 4;
    } while (iVar13 < 0x9867);
    puVar5 = (undefined1 *)(param_1 + 0x52d);
    do {
      *puVar5 = 0xc3;
      puVar5[-1] = 0xc3;
      puVar5[2] = 0;
      lVar6 = (longlong)iVar10;
      iVar13 = iVar10 / 200;
      iVar11 = iVar10 >> 0x1f;
      iVar10 = iVar10 + 0xff;
      puVar5[1] = ((char)iVar13 + (char)iVar11) - (char)(lVar6 * 0x51eb851f >> 0x3f);
      puVar5 = puVar5 + 4;
    } while (iVar10 < 51000);
    pcVar4 = (char *)(param_1 + 0x5e9);
    do {
      pcVar4[1] = -1;
      pcVar4[2] = '\0';
      lVar6 = (longlong)iVar8;
      iVar10 = iVar8 / 0x37;
      iVar13 = iVar8 >> 0x1f;
      iVar8 = iVar8 + -0xc3;
      cVar2 = (((char)iVar10 + (char)iVar13) - (char)(lVar6 * 0x94f2095 >> 0x3f)) + -0x3d;
      *pcVar4 = cVar2;
      pcVar4[-1] = cVar2;
      pcVar4 = pcVar4 + 4;
    } while (-0x2aa8 < iVar8);
    break;
  case 10:
    iVar8 = 0;
    puVar5 = (undefined1 *)(param_1 + 0x2c9);
    do {
      *puVar5 = 0;
      puVar5[2] = 0;
      cVar2 = (char)iVar8 * '\a';
      iVar8 = iVar8 + 1;
      puVar5[1] = cVar2;
      puVar5[-1] = cVar2;
      puVar5 = puVar5 + 4;
    } while (iVar8 < 0x24);
    cVar2 = '$';
    puVar5 = (undefined1 *)(param_1 + 0x359);
    iVar8 = 0;
    do {
      cVar3 = cVar2 + -0x24;
      *puVar5 = 0;
      puVar5[2] = 0;
      cVar2 = cVar2 + '\x01';
      iVar10 = iVar8 + -7;
      puVar5[1] = cVar3 * -7 + -4;
      puVar5[-1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 3U)) >> 2) + -4;
      puVar5 = puVar5 + 4;
      iVar8 = iVar10;
    } while (-0x103 < iVar10);
    cVar2 = 'I';
    pcVar4 = (char *)(param_1 + 0x3ed);
    iVar8 = -0xf5;
    do {
      cVar3 = cVar2 + -0x48;
      pcVar4[1] = '\0';
      pcVar4[2] = '\0';
      cVar2 = cVar2 + '\x01';
      *pcVar4 = cVar3 * '\a';
      iVar10 = iVar8 + 7;
      pcVar4[-1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 3U)) >> 2) + -4;
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar10;
    } while (iVar10 < 7);
    cVar2 = 'm';
    pcVar4 = (char *)(param_1 + 0x47d);
    iVar8 = 0;
    do {
      iVar10 = iVar8 + -7;
      cVar3 = -0x6f - cVar2;
      pcVar4[1] = '\0';
      pcVar4[2] = '\0';
      cVar2 = cVar2 + '\x01';
      *pcVar4 = (char)(iVar8 / 2) + -4;
      pcVar4[-1] = cVar3 * '\a';
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar10;
    } while (-0x103 < iVar10);
    cVar2 = -0x6e;
    pcVar4 = (char *)(param_1 + 0x511);
    iVar8 = -0xf5;
    do {
      cVar3 = cVar2 + 'K';
      pcVar4[-1] = '\0';
      pcVar4[2] = '\0';
      cVar2 = cVar2 + '\x01';
      pcVar4[1] = cVar3 * '\a' + -4;
      iVar10 = iVar8 + 7;
      *pcVar4 = (char)(iVar8 / 2) + -4;
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar10;
    } while (iVar10 < 7);
    cVar2 = -0x4a;
    pcVar4 = (char *)(param_1 + 0x5a1);
    iVar8 = 0;
    do {
      cVar3 = cVar2 + 'J';
      iVar10 = iVar8 + -7;
      pcVar4[-1] = '\0';
      pcVar4[2] = '\0';
      cVar2 = cVar2 + '\x01';
      pcVar4[1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 3U)) >> 2) + -4;
      *pcVar4 = cVar3 * -7 + -4;
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar10;
    } while (-0x103 < iVar10);
    cVar2 = -0x25;
    pcVar4 = (char *)(param_1 + 0x635);
    iVar8 = -0xfc;
    do {
      iVar10 = iVar8 + 7;
      pcVar4[2] = '\0';
      pcVar4[1] = (char)((int)(iVar8 + (iVar8 >> 0x1f & 3U)) >> 2) + -4;
      cVar3 = cVar2 * '\a' + '\x03';
      cVar2 = cVar2 + '\x01';
      *pcVar4 = cVar3;
      pcVar4[-1] = cVar3;
      pcVar4 = pcVar4 + 4;
      iVar8 = iVar10;
    } while (iVar10 < 7);
    break;
  case 0xb:
    local_414 = 0x20202;
    local_410 = 0x60606;
    local_40c = 0xa0a0a;
    local_408 = 0x101010;
    local_404 = 0x131313;
    local_418 = 0;
    local_400 = 0x171717;
    local_3fc = 0x1b1b1b;
    local_3f8 = 0x1e1e1e;
    local_3f4 = 0x222222;
    local_3f0 = 0x262626;
    local_3ec = 0x2a2a2a;
    local_3e8 = 0x2f2f2f;
    local_3e4 = 0x333333;
    local_3e0 = 0x373737;
    local_3dc = 0x3a3a3a;
    local_3d8 = 0x3e3e3e;
    local_3d4 = 0x424242;
    local_3d0 = 0x464646;
    local_3cc = 0x4b4b4b;
    local_3c8 = 0x4f4f4f;
    local_3c4 = 0x535353;
    local_3c0 = 0x564e4e;
    local_3bc = 0x5a4949;
    local_3b8 = 0x5e4545;
    local_3b4 = 0x614242;
    local_3b0 = 0x653e3e;
    local_3ac = 0x6b3838;
    local_3a8 = 0x6f3434;
    local_3a4 = 0x723131;
    local_3a0 = 0x762d2d;
    local_39c = 0x7a2929;
    local_398 = 0x7d2626;
    local_394 = 0x812222;
    local_390 = 0x871c1c;
    local_38c = 0x8b1818;
    local_388 = 0x8e1515;
    local_384 = 0x921111;
    local_380 = 0x960d0d;
    local_37c = 0x9a0909;
    local_378 = 0x9d0606;
    local_374 = 0xa30202;
    local_370 = 0xa80000;
    local_36c = 0xaa0202;
    local_368 = 0xae0606;
    local_364 = 0xb20a0a;
    local_360 = 0xb60e0e;
    local_35c = 0xb91111;
    local_358 = 0xbd1515;
    local_354 = 0xc31b1b;
    local_350 = 0xc61e1e;
    local_34c = 0xca2222;
    local_348 = 0xce2626;
    local_344 = 0xd22a2a;
    local_340 = 0xd52d2d;
    local_33c = 0xd93131;
    local_338 = 0xdd3535;
    local_334 = 0xe33b3b;
    local_330 = 0xe63e3e;
    local_32c = 0xea4242;
    local_328 = 0xee4646;
    local_324 = 0xf14949;
    local_320 = 0xf54d4d;
    local_31c = 0xf95151;
    local_318 = 0xfc5454;
    local_314 = 0xfc5351;
    local_310 = 0xf9564d;
    local_30c = 0xf55a49;
    local_308 = 0xf35c47;
    local_304 = 0xf25d46;
    local_300 = 0xee6142;
    local_2fc = 0xeb643f;
    local_2f8 = 0xe9663d;
    local_2f4 = 0xe56a39;
    local_2f0 = 0xe46b38;
    local_2ec = 0xe26d36;
    local_2e8 = 0xde7132;
    local_2e4 = 0xdb742f;
    local_2e0 = 0xdb742f;
    local_2dc = 0xd6792a;
    local_2d8 = 0xd47b28;
    local_2d4 = 0xd27d26;
    local_2d0 = 0xcd8221;
    local_2cc = 0xcb841f;
    local_2c8 = 0xca851e;
    local_2c4 = 0xc6891a;
    local_2c0 = 0xc48b18;
    local_2bc = 0xc18e15;
    local_2b8 = 0xbd9211;
    local_2b4 = 0xbc940f;
    local_2b0 = 0xba950e;
    local_2ac = 0xb6990a;
    local_2a8 = 0xb39c07;
    local_2a4 = 0xb39c07;
    local_2a0 = 0xafa003;
    local_29c = 0xa9a600;
    local_298 = 0xa7a800;
    local_294 = 0xa7a700;
    local_290 = 0xa9a901;
    local_28c = 0xadad05;
    local_288 = 0xb0b008;
    local_284 = 0xb0b008;
    local_280 = 0xb6b60e;
    local_27c = 0xb8b810;
    local_278 = 0xb9b911;
    local_274 = 0xbdbd15;
    local_270 = 0xc0c018;
    local_26c = 0xc0c018;
    local_268 = 0xc4c41c;
    local_264 = 0xc7c71f;
    local_260 = 0xc9c921;
    local_25c = 0xcece26;
    local_258 = 0xd0d028;
    local_254 = 0xd0d028;
    local_250 = 0xd5d52d;
    local_24c = 0xd8d830;
    local_248 = 0xd8d82f;
    local_244 = 0xdede36;
    local_240 = 0xe0e038;
    local_23c = 0xe1e139;
    local_238 = 0xe5e53d;
    local_234 = 0xe8e840;
    local_230 = 0xe8e840;
    local_22c = 0xecec44;
    local_228 = 0xefef47;
    local_224 = 0xf1f149;
    local_220 = 0xf5f54d;
    local_21c = 0xf9f951;
    local_218 = 0xfcfc54;
    local_214 = 0xf9fb53;
    local_210 = 0xe9f74f;
    local_20c = 0xdcf34b;
    local_208 = 0xc6eb43;
    local_204 = 0xb3e43c;
    local_200 = 0xa2de36;
    local_1fc = 0x93db33;
    local_1f8 = 0x85d62e;
    local_1f4 = 0x76cf27;
    local_1f0 = 0x66cb23;
    local_1ec = 0x55c41c;
    local_1e8 = 0x3fbf17;
    local_1e4 = 0x2db911;
    local_1e0 = 0x20b20a;
    local_1dc = 0xfae06;
    local_1d8 = 0xa700;
    local_1d4 = 0xa800;
    local_1d0 = 0x3ab03;
    local_1cc = 0xab20a;
    local_1c8 = 0x11b911;
    local_1c4 = 0x16be16;
    local_1c0 = 0x1dc51d;
    local_1bc = 0x20c820;
    local_1b8 = 0x24cc24;
    local_1b4 = 0x2bd32b;
    local_1b0 = 0x2fd72f;
    local_1ac = 0x38e038;
    local_1a8 = 0x3de53d;
    local_1a4 = 0x41e941;
    local_1a0 = 0x48f048;
    local_19c = 0x4cf44c;
    local_198 = 0x53fb53;
    local_194 = 0x54fc53;
    local_190 = 0x53fb5e;
    local_18c = 0x54fc6b;
    local_188 = 0x54fc76;
    local_184 = 0x53fb81;
    local_180 = 0x54fc8c;
    local_17c = 0x54fc94;
    local_178 = 0x54fc9f;
    local_174 = 0x54fca9;
    local_170 = 0x54fcb9;
    local_16c = 0x54fcc6;
    local_168 = 0x54fccd;
    local_164 = 0x54fcd9;
    local_160 = 0x54fce4;
    local_15c = 0x53fbef;
    local_158 = 0x54fcfa;
    local_154 = 0x52fafb;
    local_150 = 0x4ff1f7;
    local_14c = 0x4ae6f2;
    local_148 = 0x43daeb;
    local_144 = 0x3fcfe7;
    local_140 = 0x38c4e0;
    local_13c = 0x34bcdc;
    local_138 = 0x31b3d9;
    local_134 = 0x29a4d1;
    local_130 = 0x2295ca;
    local_12c = 0x1b8bc3;
    local_128 = 0x1783bf;
    local_124 = 0x1478bc;
    local_120 = 0xc6db4;
    local_11c = 0x962b0;
    local_118 = 0x156a9;
    local_114 = 0x153a8;
    local_110 = 0x1154ac;
    local_10c = 0x2054b0;
    local_108 = 0x2f54b7;
    local_104 = 0x3e54bb;
    local_100 = 0x5053c2;
    local_fc = 0x5f54c6;
    local_f8 = 0x7254cc;
    local_f4 = 0x8654d4;
    local_f0 = 0x9454d8;
    local_ec = 0xa754df;
    local_e8 = 0xb654e3;
    local_e4 = 0xc554e7;
    local_e0 = 0xd454ee;
    local_dc = 0xe253f2;
    local_d8 = 0xf554f9;
    local_d4 = 0xfd53fc;
    local_d0 = 0xf750f7;
    local_cc = 0xf44cf4;
    local_c8 = 0xed45ed;
    local_c4 = 0xe840e8;
    local_c0 = 0xe23ae2;
    local_bc = 0xdc34dc;
    local_b8 = 0xd72fd7;
    local_b4 = 0xd028d0;
    local_b0 = 0xcc24cc;
    local_ac = 0xc51dc5;
    local_a8 = 0xc018c0;
    local_a4 = 0xbd15bd;
    local_a0 = 0xb70fb7;
    local_9c = 0xb008b0;
    local_98 = 0xa800a8;
    local_94 = 0xa800a7;
    local_90 = 0xa403ab;
    local_8c = 0xa106ae;
    local_88 = 0x9a0db5;
    local_84 = 0x9512ba;
    local_80 = 0x8e19c1;
    local_7c = 0x8720c8;
    local_78 = 0x8423cb;
    local_74 = 0x7c2bd3;
    local_70 = 0x782fd7;
    local_6c = 0x7235dd;
    local_68 = 0x6d3ae2;
    local_64 = 0x6a3de5;
    local_60 = 0x6344ec;
    local_5c = 0x5b4cf4;
    local_58 = 0x5452fa;
    local_54 = 0x5454fc;
    local_50 = 0x4e4efb;
    local_4c = 0x4949fc;
    local_48 = 0x4343fc;
    local_44 = 0x3d3dfc;
    local_40 = 0x3838fc;
    local_3c = 0x3030fc;
    local_38 = 0x2c2cfc;
    local_34 = 0x2626fc;
    local_30 = 0x2121fb;
    local_2c = 0x1d1dfc;
    local_28 = 0x1717fc;
    local_24 = 0x1111fc;
    local_20 = 0x808fc;
    local_1c = 0x404fc;
    puVar12 = &local_418;
    lVar6 = 0x100;
    puVar5 = (undefined1 *)(param_1 + 0x2c9);
    do {
      uVar7 = *(undefined1 *)puVar12;
      puVar5[2] = 0;
      puVar9 = puVar5 + 4;
      puVar5[1] = uVar7;
      puVar12 = puVar12 + 1;
      lVar6 = lVar6 + -1;
      *puVar5 = puVar9[(longlong)(&stack0xfffffffffffffbe4 + -(longlong)_Src)];
      puVar5[-1] = puVar9[(longlong)(&stack0xfffffffffffffbe5 + -(longlong)_Src)];
      puVar5 = puVar9;
    } while (lVar6 != 0);
    break;
  case 0xc:
    iVar8 = 0;
    puVar5 = (undefined1 *)(param_1 + 0x2c9);
    do {
      puVar5[1] = 0;
      *puVar5 = 0;
      puVar5[2] = 0;
      cVar2 = (char)iVar8;
      iVar8 = iVar8 + 1;
      puVar5[-1] = cVar2 * '\a';
      puVar5 = puVar5 + 4;
    } while (iVar8 < 0x24);
    iVar8 = 0x24;
    pcVar4 = (char *)(param_1 + 0x359);
    do {
      cVar2 = (char)iVar8;
      iVar8 = iVar8 + 1;
      pcVar4[1] = '\0';
      pcVar4[-1] = -1;
      pcVar4[2] = '\0';
      *pcVar4 = (cVar2 + -0x24) * '\a';
      pcVar4 = pcVar4 + 4;
    } while (iVar8 < 0x49);
    iVar8 = 0x49;
    puVar5 = (undefined1 *)(param_1 + 0x3ed);
    do {
      cVar2 = (char)iVar8;
      iVar8 = iVar8 + 1;
      puVar5[1] = 0;
      *puVar5 = 0xff;
      puVar5[2] = 0;
      puVar5[-1] = (cVar2 + -0x49) * -7 + -0xb;
      puVar5 = puVar5 + 4;
    } while (iVar8 < 0x6d);
    iVar8 = 0x6d;
    puVar5 = (undefined1 *)(param_1 + 0x47d);
    iVar10 = 0x92;
    do {
      cVar2 = (char)iVar8;
      iVar8 = iVar8 + 1;
      *puVar5 = 0xff;
      puVar5[-1] = 0;
      puVar5[2] = 0;
      puVar5[1] = (cVar2 + -0x6d) * '\a';
      puVar5 = puVar5 + 4;
    } while (iVar8 < 0x92);
    iVar8 = 0xb6;
    pcVar4 = (char *)(param_1 + 0x511);
    do {
      cVar2 = (char)iVar10;
      iVar10 = iVar10 + 1;
      pcVar4[1] = -1;
      pcVar4[-1] = '\0';
      pcVar4[2] = '\0';
      *pcVar4 = (cVar2 + 'n') * -7 + -0xb;
      pcVar4 = pcVar4 + 4;
    } while (iVar10 < 0xb6);
    puVar5 = (undefined1 *)(param_1 + 0x5a1);
    iVar10 = 0xdb;
    do {
      cVar2 = (char)iVar8;
      iVar8 = iVar8 + 1;
      puVar5[1] = 0xff;
      *puVar5 = 0;
      puVar5[2] = 0;
      puVar5[-1] = (cVar2 + 'J') * '\a';
      puVar5 = puVar5 + 4;
    } while (iVar8 < 0xdb);
    pcVar4 = (char *)(param_1 + 0x635);
    do {
      cVar2 = (char)iVar10;
      iVar10 = iVar10 + 1;
      pcVar4[1] = -1;
      pcVar4[-1] = -1;
      pcVar4[2] = '\0';
      *pcVar4 = (cVar2 + '%') * '\a';
      pcVar4 = pcVar4 + 4;
    } while (iVar10 < 0x100);
    break;
  case 0xd:
    iVar8 = 0;
    pcVar4 = (char *)(param_1 + 0x2c9);
    do {
      cVar2 = (char)iVar8;
      iVar8 = iVar8 + 1;
      pcVar4[1] = '\0';
      pcVar4[-1] = -1;
      pcVar4[2] = '\0';
      *pcVar4 = cVar2 << 2;
      pcVar4 = pcVar4 + 4;
    } while (iVar8 < 0x40);
    iVar8 = 0x40;
    iVar10 = 0x80;
    puVar5 = (undefined1 *)(param_1 + 0x3c9);
    do {
      cVar2 = (char)iVar8;
      iVar8 = iVar8 + 1;
      puVar5[1] = 0;
      *puVar5 = 0xff;
      puVar5[2] = 0;
      puVar5[-1] = cVar2 * -4 + -4;
      puVar5 = puVar5 + 4;
    } while (iVar8 < 0x80);
    puVar5 = (undefined1 *)(param_1 + 0x4c9);
    iVar8 = 0xc0;
    do {
      cVar2 = (char)iVar10;
      iVar10 = iVar10 + 1;
      *puVar5 = 0xff;
      puVar5[-1] = 0;
      puVar5[2] = 0;
      puVar5[1] = cVar2 << 2;
      puVar5 = puVar5 + 4;
    } while (iVar10 < 0xc0);
    pcVar4 = (char *)(param_1 + 0x5c9);
    do {
      cVar2 = (char)iVar8;
      iVar8 = iVar8 + 1;
      pcVar4[1] = -1;
      pcVar4[-1] = '\0';
      pcVar4[2] = '\0';
      *pcVar4 = cVar2 * -4 + -4;
      pcVar4 = pcVar4 + 4;
    } while (iVar8 < 0x100);
    break;
  default:
    LeaveCriticalSection(lpCriticalSection);
    SetLastError(0xe4ae0001);
    return;
  }
  memcpy((void *)(param_1 + 0x6f0),_Src,0x400);
  memcpy((void *)(param_1 + 0xb18),_Src,0x400);
  memcpy((void *)(param_1 + 0xf40),_Src,0x400);
  LeaveCriticalSection(lpCriticalSection);
  return;
}


==================================================================

### EXPORT FUNC 18000f130 (3439 bytes) name=FUN_18000f130

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined4 FUN_18000f130(longlong param_1,LPCWSTR param_2)

{
  int *piVar1;
  LPCSTR lpMultiByteStr;
  WCHAR WVar2;
  undefined4 uVar3;
  undefined1 auVar4 [16];
  undefined1 auVar5 [16];
  undefined1 auVar6 [16];
  float fVar7;
  float fVar8;
  float fVar9;
  uint uVar10;
  undefined8 uVar11;
  __uint64 _Var12;
  __int64 _Var13;
  size_t sVar14;
  LPVOID pvVar15;
  wchar_t *pwVar16;
  longlong *plVar17;
  undefined **ppuVar18;
  longlong lVar19;
  int iVar20;
  ulonglong uVar21;
  LPCWSTR pWVar22;
  uint uVar23;
  ulonglong uVar24;
  ulonglong uVar25;
  uint uVar26;
  int iVar27;
  undefined1 auStackY_298 [32];
  CFile local_268 [32];
  wchar_t *local_248;
  int local_240;
  undefined4 local_23c;
  uint local_238;
  int local_234;
  undefined4 local_230;
  int local_22c;
  float local_228;
  int local_224;
  int local_220 [2];
  longlong local_218;
  longlong local_210;
  longlong local_208;
  undefined8 local_200 [3];
  undefined8 local_1e8;
  int local_1d8;
  ulonglong local_1d4 [3];
  undefined4 local_1bc;
  WCHAR local_b8 [32];
  ulonglong local_78;
  
  local_1e8 = 0xfffffffffffffffe;
  local_78 = DAT_18006cea0 ^ (ulonglong)auStackY_298;
  local_208 = param_1;
  FUN_180020138((undefined8 *)local_268);
  local_238 = 8;
  local_230 = 0xffff3cb0;
  uVar25 = 0;
  iVar20 = 0;
  local_240 = 0;
  local_23c = 0;
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  if (*(LPVOID *)(param_1 + 0x416a0) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x416a0));
    *(undefined8 *)(param_1 + 0x416a0) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x416a8) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x416a8));
    *(undefined8 *)(param_1 + 0x416a8) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x416b0) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x416b0));
    *(undefined8 *)(param_1 + 0x416b0) = 0;
  }
  FUN_1800357d0((ulonglong *)(param_1 + 0x41340),0,0x540);
  FUN_1800357d0((ulonglong *)(param_1 + 0x100),0,0x120);
  FUN_1800357d0((ulonglong *)(param_1 + 0x41880),0,0x65c);
  if (*(int *)(param_1 + 0x228) != 0) {
    lVar19 = -1;
    pWVar22 = param_2;
    do {
      if (lVar19 == 0) break;
      lVar19 = lVar19 + -1;
      WVar2 = *pWVar22;
      pWVar22 = pWVar22 + 1;
    } while (WVar2 != L'\0');
    if (lVar19 != -2) {
      uVar11 = FUN_180020a6c((longlong)local_268,param_2,0x40,0);
      if ((int)uVar11 == 0) {
        LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
        FUN_1800203a4(local_268);
        return 0;
      }
      wcscpy_s((wchar_t *)(param_1 + 0x4134c),0x104,param_2);
      *(undefined2 *)(param_1 + 0x41552) = 0;
      local_234 = 0;
      FUN_18001ef2c(local_200);
      FUN_18001fd6c((longlong)local_268,&local_234,4);
      FUN_18001fd6c((longlong)local_268,local_220,4);
      FUN_18001fd6c((longlong)local_268,&local_224,4);
      FUN_18001fd6c((longlong)local_268,(LPVOID)(param_1 + 0x41558),4);
      FUN_18001fd6c((longlong)local_268,(LPVOID)(param_1 + 0x41554),4);
      if (local_234 == 0x5aa50003) {
        FUN_18001fd6c((longlong)local_268,&local_238,4);
        FUN_18001fd6c((longlong)local_268,&local_230,4);
        iVar20 = 0x24;
        *(undefined4 *)(param_1 + 0x47950) = 0;
      }
      else if (local_234 == 0x5aa50004) {
        FUN_18001fd6c((longlong)local_268,&local_240,4);
        FUN_18001fd6c((longlong)local_268,&local_23c,4);
        iVar20 = 0x144;
        *(undefined4 *)(param_1 + 0x47950) = 1;
      }
      FUN_18001fd6c((longlong)local_268,(LPVOID)(param_1 + 0x4155c),4);
      FUN_18001fd6c((longlong)local_268,(LPVOID)(param_1 + 0x41560),4);
      if (*(int *)(param_1 + 0x47950) != 0) {
        FUN_18001fd6c((longlong)local_268,(LPVOID)(param_1 + 0x100),0x120);
      }
      if (((((local_234 != 0x5aa50003) && (local_234 != 0x5aa50004)) ||
           (uVar26 = *(uint *)(param_1 + 0x41558), uVar26 < 2)) ||
          ((0x13 < uVar26 || (*(int *)(param_1 + 0x41554) == 0)))) ||
         ((local_238 == 0 ||
          (((local_238 & local_238 - 1) != 0 || (7 < *(uint *)(param_1 + 0x47954))))))) {
        CFile::Close(local_268);
        LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
        FUN_18001ef94();
        FUN_1800203a4(local_268);
        return 0;
      }
      if ((local_220[0] != *(int *)(param_1 + 0x41fc0)) ||
         (local_224 != *(int *)(param_1 + 0x41fc4))) {
        CFile::Close(local_268);
        LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
        FUN_18001ef94();
        FUN_1800203a4(local_268);
        return 0;
      }
      FUN_18001fd6c((longlong)local_268,(LPVOID)(param_1 + 0x41564),uVar26 << 2);
      FUN_18001fd6c((longlong)local_268,(LPVOID)(param_1 + 0x415b4),*(int *)(param_1 + 0x41558) << 2
                   );
      FUN_18001fd6c((longlong)local_268,(LPVOID)(param_1 + 0x41604),*(int *)(param_1 + 0x41558) << 2
                   );
      FUN_18001fd6c((longlong)local_268,(LPVOID)(param_1 + 0x41654),
                    *(int *)(param_1 + 0x41558) * 4 - 4);
      uVar21 = uVar25;
      while ((uint)uVar21 < *(int *)(param_1 + 0x41558) - 1U) {
        if ((*(uint *)(param_1 + 0x47938) <= *(uint *)(param_1 + 0x41654 + uVar21 * 4)) ||
           (uVar24 = (ulonglong)((uint)uVar21 + 1), lVar19 = uVar21 * 4, uVar21 = uVar24,
           *(int *)(param_1 + 0x41564 + uVar24 * 4) <= *(int *)(param_1 + 0x41564 + lVar19))) {
          CFile::Close(local_268);
          LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
          FUN_18001ef94();
          FUN_1800203a4(local_268);
          return 0;
        }
      }
      uVar26 = *(int *)(param_1 + 0x41560) +
               (*(int *)(param_1 + 0x41554) * 3 + -1) * *(int *)(param_1 + 0x47938) * 2 +
               *(int *)(param_1 + 0x4155c);
      uVar21 = uVar25;
      uVar24 = uVar25;
      while( true ) {
        iVar27 = (int)uVar24;
        if (*(int *)(param_1 + 0x41558) - 1U <= (uint)uVar21) break;
        uVar24 = (ulonglong)(uint)(iVar27 + *(int *)(param_1 + 0x41654 + uVar21 * 4) * 0x28);
        uVar21 = (ulonglong)((uint)uVar21 + 1);
      }
      uVar21 = (ulonglong)
               (*(int *)(param_1 + 0x41558) * uVar26 + iVar27 + -4 +
                *(int *)(param_1 + 0x41558) * 0x10 + iVar20);
      _Var12 = CFile::GetLength(local_268);
      if (_Var12 < uVar21) {
        CFile::Close(local_268);
        LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
        FUN_18001ef94();
        FUN_1800203a4(local_268);
        return 0;
      }
      _Var12 = CFile::GetLength(local_268);
      if ((*(int *)(param_1 + 0x47950) == 0) && (0x11f < *(uint *)(param_1 + 0x4155c))) {
        _Var13 = FUN_18001fe78((longlong)local_268);
        CFile::Seek(local_268,
                    (ulonglong)
                    (uint)((*(int *)(param_1 + 0x41554) + -1) * *(int *)(param_1 + 0x47938)) * 2,1);
        local_1d8 = 0;
        FUN_1800357d0(local_1d4,0,0x11c);
        FUN_18001fd6c((longlong)local_268,&local_1d8,0x120);
        CFile::Seek(local_268,_Var13,0);
        if (local_1d8 == 0x1000000) {
          local_1bc = 0xc;
          memcpy((void *)(param_1 + 0x100),&local_1d8,0x120);
        }
      }
      if (*(int *)(param_1 + 0x11c) == 0) {
        *(undefined4 *)(param_1 + 0x11c) = 0xc;
      }
      auVar4._8_8_ = 0;
      auVar4._0_8_ = (ulonglong)(*(int *)(param_1 + 0x41558) * uVar26) + 3 >> 2;
      sVar14 = SUB168(ZEXT816(4) * auVar4,0);
      if (SUB168(ZEXT816(4) * auVar4,8) != 0) {
        sVar14 = 0xffffffffffffffff;
      }
      pvVar15 = thunk_FUN_18001eb74(sVar14);
      *(LPVOID *)(param_1 + 0x416a0) = pvVar15;
      auVar5._8_8_ = 0;
      auVar5._0_8_ = (ulonglong)uVar26 + 3 >> 2;
      sVar14 = SUB168(ZEXT816(4) * auVar5,0);
      if (SUB168(ZEXT816(4) * auVar5,8) != 0) {
        sVar14 = 0xffffffffffffffff;
      }
      pvVar15 = thunk_FUN_18001eb74(sVar14);
      *(LPVOID *)(param_1 + 0x416a8) = pvVar15;
      if (iVar27 != 0) {
        auVar6._8_8_ = 0;
        auVar6._0_8_ = uVar24 + 3 >> 2;
        sVar14 = SUB168(ZEXT816(4) * auVar6,0);
        if (SUB168(ZEXT816(4) * auVar6,8) != 0) {
          sVar14 = 0xffffffffffffffff;
        }
        pvVar15 = thunk_FUN_18001eb74(sVar14);
        *(LPVOID *)(param_1 + 0x416b0) = pvVar15;
      }
      if (((*(longlong *)(param_1 + 0x416a0) == 0) ||
          (lVar19 = *(longlong *)(param_1 + 0x416a8), lVar19 == 0)) ||
         ((iVar27 != 0 && (*(longlong *)(param_1 + 0x416b0) == 0)))) {
        CFile::Close(local_268);
        LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
        FUN_18001ef94();
        FUN_1800203a4(local_268);
        return 0;
      }
      *(longlong *)(param_1 + 0x41858) = lVar19;
      *(ulonglong *)(param_1 + 0x41870) =
           lVar19 + ((ulonglong)
                     (uint)((*(int *)(param_1 + 0x41554) + -1) * *(int *)(param_1 + 0x47938)) +
                    (ulonglong)(*(uint *)(param_1 + 0x4155c) >> 1)) * 2;
      uVar11 = FUN_18001fe78((longlong)local_268);
      *(int *)(param_1 + 0x41708) = (int)uVar11;
      *(undefined4 *)(param_1 + 0x41758) = 0;
      for (uVar23 = 1; uVar23 < *(uint *)(param_1 + 0x41558); uVar23 = uVar23 + 1) {
        *(uint *)(param_1 + 0x41708 + (ulonglong)uVar23 * 4) =
             uVar26 + *(int *)(param_1 + 0x41708 + (ulonglong)(uVar23 - 1) * 4);
        *(uint *)(param_1 + 0x41758 + (ulonglong)uVar23 * 4) =
             uVar26 + *(int *)(param_1 + 0x41758 + (ulonglong)(uVar23 - 1) * 4);
      }
      *(uint *)(param_1 + 0x417a8) =
           *(int *)(param_1 + 0x41558) * uVar26 + *(int *)(param_1 + 0x41708);
      *(undefined4 *)(param_1 + 0x417f4) = 0;
      uVar24 = 1;
      while (uVar23 = (uint)uVar24, uVar23 < *(int *)(param_1 + 0x41558) - 1U) {
        uVar10 = uVar23 - 1;
        iVar20 = *(int *)(param_1 + 0x41654 + (ulonglong)uVar10 * 4) * 0x28;
        *(int *)(param_1 + 0x417a8 + uVar24 * 4) =
             iVar20 + *(int *)(param_1 + 0x417a8 + (ulonglong)uVar10 * 4);
        *(int *)(param_1 + 0x417f4 + uVar24 * 4) =
             iVar20 + *(int *)(param_1 + 0x417f4 + (ulonglong)uVar10 * 4);
        uVar24 = (ulonglong)(uVar23 + 1);
      }
      if (uVar21 < _Var12) {
        CFile::Seek(local_268,(ulonglong)(*(int *)(param_1 + 0x41558) * uVar26 + iVar27),1);
        _Var12 = CFile::GetLength(local_268);
        uVar11 = FUN_18001fe78((longlong)local_268);
        uVar26 = (int)_Var12 - (int)uVar11;
        *(undefined4 *)(param_1 + 0x41884) = 0;
        fVar9 = DAT_18005ebdc;
        fVar8 = DAT_18005ebd8;
        fVar7 = DAT_18005e700;
        while ((0x43 < (int)uVar26 && (*(uint *)(param_1 + 0x41884) < 3))) {
          local_22c = 0;
          FUN_18001fd6c((longlong)local_268,&local_22c,4);
          if (local_22c != 0x6bb60001) break;
          lpMultiByteStr =
               (LPCSTR)((ulonglong)*(uint *)(param_1 + 0x41884) * 0x21c + 0x41888 + param_1);
          FUN_18001fd6c((longlong)local_268,lpMultiByteStr,0x20);
          lpMultiByteStr[0x1e] = '\0';
          lpMultiByteStr[0x1f] = '\0';
          FUN_18001fd6c((longlong)local_268,lpMultiByteStr + 0x20,4);
          FUN_18001fd6c((longlong)local_268,lpMultiByteStr + 0x24,4);
          FUN_18001fd6c((longlong)local_268,lpMultiByteStr + 0x28,4);
          FUN_18001fd6c((longlong)local_268,lpMultiByteStr + 0x2c,4);
          FUN_18001fd6c((longlong)local_268,lpMultiByteStr + 0x30,4);
          FUN_18001fd6c((longlong)local_268,lpMultiByteStr + 0x38,4);
          FUN_18001fd6c((longlong)local_268,lpMultiByteStr + 0x34,4);
          FUN_18001fd6c((longlong)local_268,lpMultiByteStr + 0x3c,4);
          if (((0xf < *(uint *)(lpMultiByteStr + 0x30)) ||
              (uVar23 = *(uint *)(lpMultiByteStr + 0x3c), uVar23 == 0)) || (0x19 < uVar23)) break;
          if (uVar26 < 0x21c) {
            if (1 < uVar23) {
              FUN_18001fd6c((longlong)local_268,lpMultiByteStr + 0x40,uVar23 * 4 - 4);
            }
            FUN_18001fd6c((longlong)local_268,lpMultiByteStr + 0xd4,
                          *(int *)(lpMultiByteStr + 0x3c) << 3);
            uVar26 = uVar26 + *(int *)(lpMultiByteStr + 0x3c) * -0xc + -0x40;
            local_228 = fVar7;
            FUN_18001adb0((longlong *)&local_248,lpMultiByteStr);
            iVar20 = *(int *)(local_248 + -8);
            if ((int)(*(int *)(local_248 + -6) - iVar20 | 1U - *(int *)(local_248 + -4)) < 0) {
              FUN_18000b190((longlong *)&local_248,iVar20);
            }
            FUN_180034160(local_248,(longlong)(iVar20 + 1));
            if ((iVar20 < 0) || (*(int *)(local_248 + -6) < iVar20)) {
                    /* WARNING: Subroutine does not return */
              FUN_18000b170(-0x7ff8ffa9);
            }
            *(int *)(local_248 + -8) = iVar20;
            local_248[iVar20] = L'\0';
            if (((-1 < *(int *)(local_248 + -8)) &&
                (pwVar16 = wcsstr(local_248,L"FILT"), pwVar16 != (wchar_t *)0x0)) &&
               (iVar20 = (int)((longlong)pwVar16 - (longlong)local_248 >> 1), -1 < iVar20)) {
              plVar17 = FUN_18000a7c0((longlong *)&local_248,&local_210,
                                      (*(int *)(local_248 + -8) - iVar20) + -4);
              FUN_18000b390((longlong *)&local_248,plVar17);
              LOCK();
              piVar1 = (int *)(local_210 + -8);
              iVar20 = *piVar1;
              *piVar1 = *piVar1 + -1;
              UNLOCK();
              if (iVar20 + -1 < 1) {
                (**(code **)(**(longlong **)(local_210 + -0x18) + 8))();
              }
              FUN_180033340(local_248,L"%f",&local_228,uVar24);
            }
            *(float *)(lpMultiByteStr + 0x204) = local_228;
            LOCK();
            pwVar16 = local_248 + -4;
            iVar20 = *(int *)pwVar16;
            *(int *)pwVar16 = *(int *)pwVar16 + -1;
            UNLOCK();
            if (iVar20 + -1 < 1) {
              (**(code **)(**(longlong **)(local_248 + -0xc) + 8))();
            }
          }
          else {
            FUN_18001fd6c((longlong)local_268,lpMultiByteStr + 0x40,0x1dc);
            uVar26 = uVar26 - 0x220;
          }
          if ((*(float *)(lpMultiByteStr + 0x204) <= 0.0) ||
             (fVar7 < *(float *)(lpMultiByteStr + 0x204))) {
            lpMultiByteStr[0x204] = '\0';
            lpMultiByteStr[0x205] = '\0';
            lpMultiByteStr[0x206] = -0x80;
            lpMultiByteStr[0x207] = '?';
          }
          if ((*(float *)(lpMultiByteStr + 0x214) < fVar9) ||
             (fVar8 < *(float *)(lpMultiByteStr + 0x214))) {
            lpMultiByteStr[0x214] = '\0';
            lpMultiByteStr[0x215] = '\0';
            lpMultiByteStr[0x216] = '\0';
            lpMultiByteStr[0x217] = '\0';
          }
          *(undefined4 *)(lpMultiByteStr + 0xc4) = *(undefined4 *)(param_1 + 0x47950);
          *(int *)(lpMultiByteStr + 200) = local_240;
          *(undefined4 *)(lpMultiByteStr + 0xcc) = local_23c;
          *(int *)(param_1 + 0x41884) = *(int *)(param_1 + 0x41884) + 1;
          *(undefined4 *)(param_1 + 0x41880) = 1;
          ppuVar18 = FUN_18001fcc0();
          if (ppuVar18 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7fffbffb);
          }
          local_218 = (**(code **)(*ppuVar18 + 0x18))(ppuVar18);
          local_218 = local_218 + 0x18;
          uVar24 = 0xffffffff;
          MultiByteToWideChar(0,0,lpMultiByteStr,-1,local_b8,0x20);
          FUN_18001ad00(&local_218,L"Found Lens: %s.",local_b8,uVar24);
          LOCK();
          piVar1 = (int *)(local_218 + -8);
          iVar20 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
          if (iVar20 + -1 < 1) {
            (**(code **)(**(longlong **)(local_218 + -0x18) + 8))();
          }
        }
      }
      FUN_18001ef94();
      CFile::Close(local_268);
      if (*(int *)(param_1 + 0x47950) == 0) {
        *(uint *)(param_1 + 0x47944) = local_238;
        *(undefined4 *)(param_1 + 0x47948) = local_230;
        do {
          if (1 << ((byte)uVar25 & 0x1f) == *(int *)(param_1 + 0x47944)) {
            *(int *)(param_1 + 0x4794c) = (int)uVar25;
            break;
          }
          uVar26 = (int)uVar25 + 1;
          uVar25 = (ulonglong)uVar26;
        } while (uVar26 < 0x20);
      }
      else {
        *(undefined4 *)(param_1 + 0x47954) = local_23c;
      }
      *(undefined4 *)(param_1 + 0x41340) = 1;
      LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
      FUN_180015500(param_1,local_240);
      uVar3 = *(undefined4 *)(param_1 + 0x41340);
      FUN_1800203a4(local_268);
      return uVar3;
    }
  }
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  FUN_1800203a4(local_268);
  return 0;
}


==================================================================

### EXPORT FUNC 18000fec0 (24 bytes) name=Unwind@18000fec0

void Unwind_18000fec0(undefined8 param_1,longlong param_2)

{
  FUN_1800203a4((CFile *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 18000fee0 (27 bytes) name=Unwind@18000fee0

void Unwind_18000fee0(void)

{
  thunk_FUN_18001ef94();
  return;
}


==================================================================

### EXPORT FUNC 18000ff00 (24 bytes) name=Unwind@18000ff00

void Unwind_18000ff00(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 18000ff20 (27 bytes) name=Unwind@18000ff20

void Unwind_18000ff20(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x88));
  return;
}


==================================================================

### EXPORT FUNC 18000ff40 (27 bytes) name=Unwind@18000ff40

void Unwind_18000ff40(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x80));
  return;
}


==================================================================

### EXPORT FUNC 18000ff60 (72 bytes) name=Catch@18000ff60

undefined * Catch_18000ff60(undefined8 param_1,longlong param_2)

{
  *(undefined8 *)(param_2 + 0xa0) = *(undefined8 *)(param_2 + 0xa8);
  CFile::Close((CFile *)(param_2 + 0x30));
  LeaveCriticalSection((LPCRITICAL_SECTION)(*(longlong *)(param_2 + 0x90) + 0x238));
  return &DAT_18000fe46;
}


==================================================================

### EXPORT FUNC 18000ffb0 (1995 bytes) name=FUN_18000ffb0

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

void FUN_18000ffb0(longlong param_1)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  longlong lVar10;
  int *piVar11;
  int *piVar12;
  int iVar13;
  longlong lVar14;
  float fVar15;
  int local_78 [12];
  int local_48 [12];
  
  if ((*(int *)(param_1 + 0x41340) != 0) && (*(int *)(param_1 + 0x41344) != 0)) {
    iVar2 = (*(int *)(param_1 + 0x41568) + *(int *)(param_1 + 0x41564)) / 2;
    if (*(float *)(param_1 + 0x9c) == _DAT_180057598) {
      *(undefined4 *)(param_1 + 0x418c4) = 1;
      *(undefined4 *)(param_1 + 0x4195c) = *(undefined4 *)(param_1 + 0x47944);
      *(int *)(param_1 + 0x41960) = (*(int *)(param_1 + 0x47948) + *(int *)(param_1 + 0x54)) - iVar2
      ;
      return;
    }
    iVar6 = *(int *)(param_1 + 0x54);
    fVar15 = ((float)(iVar6 - iVar2) * *(float *)(param_1 + 0x9c)) / _DAT_18005e820 + DAT_18005e700;
    if (fVar15 < DAT_18005e824) {
      fVar15 = DAT_18005e824;
    }
    iVar1 = *(int *)(param_1 + 0x47950);
    *(undefined4 *)(param_1 + 0x418c4) = 10;
    iVar13 = 0;
    local_48[0] = 0;
    iVar9 = iVar2 - (int)((float)iVar6 * fVar15);
    iVar3 = 0;
    if (iVar1 == 0) {
      local_78[0] = iVar9 - *(int *)(param_1 + 0x47948) >>
                    ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
      if (local_78[0] < 0) {
        local_78[0] = iVar13;
      }
    }
    else {
      iVar9 = iVar9 + 150000;
      iVar4 = (int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc;
      iVar7 = iVar3;
      if ((-1 < iVar4) && (iVar7 = iVar4, 0x285 < iVar4)) {
        iVar7 = 0x285;
      }
      iVar9 = (iVar9 + iVar7 * -0x1000) * ((&DAT_180099004)[iVar7] - (&DAT_180099000)[iVar7]);
      iVar9 = ((int)((iVar9 >> 0x1f & 0xfffU) + iVar9) >> 0xc) + (&DAT_180099000)[iVar7];
      if (iVar9 < 0) {
        iVar9 = iVar13;
      }
      local_78[0] = iVar9 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
    }
    local_48[1] = 10000;
    iVar9 = (int)((float)(10000 - iVar6) * fVar15) + iVar2;
    if (iVar1 == 0) {
      local_78[1] = iVar9 - *(int *)(param_1 + 0x47948) >>
                    ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
      if (local_78[1] < 0) {
        local_78[1] = iVar13;
      }
    }
    else {
      iVar9 = iVar9 + 150000;
      iVar4 = (int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc;
      iVar7 = iVar3;
      if ((-1 < iVar4) && (iVar7 = iVar4, 0x285 < iVar4)) {
        iVar7 = 0x285;
      }
      iVar9 = (iVar9 + iVar7 * -0x1000) * ((&DAT_180099004)[iVar7] - (&DAT_180099000)[iVar7]);
      iVar9 = ((int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc) + (&DAT_180099000)[iVar7];
      if (iVar9 < 0) {
        iVar9 = iVar13;
      }
      local_78[1] = iVar9 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
    }
    local_48[2] = 20000;
    iVar9 = (int)((float)(20000 - iVar6) * fVar15) + iVar2;
    if (iVar1 == 0) {
      local_78[2] = iVar9 - *(int *)(param_1 + 0x47948) >>
                    ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
      if (local_78[2] < 0) {
        local_78[2] = iVar13;
      }
    }
    else {
      iVar9 = iVar9 + 150000;
      iVar4 = (int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc;
      iVar7 = iVar3;
      if ((-1 < iVar4) && (iVar7 = iVar4, 0x285 < iVar4)) {
        iVar7 = 0x285;
      }
      iVar9 = (iVar9 + iVar7 * -0x1000) * ((&DAT_180099004)[iVar7] - (&DAT_180099000)[iVar7]);
      iVar9 = ((int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc) + (&DAT_180099000)[iVar7];
      if (iVar9 < 0) {
        iVar9 = iVar13;
      }
      local_78[2] = iVar9 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
    }
    local_48[3] = 30000;
    iVar9 = (int)((float)(30000 - iVar6) * fVar15) + iVar2;
    if (iVar1 == 0) {
      local_78[3] = iVar9 - *(int *)(param_1 + 0x47948) >>
                    ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
      if (local_78[3] < 0) {
        local_78[3] = iVar13;
      }
    }
    else {
      iVar9 = iVar9 + 150000;
      iVar4 = (int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc;
      iVar7 = iVar3;
      if ((-1 < iVar4) && (iVar7 = iVar4, 0x285 < iVar4)) {
        iVar7 = 0x285;
      }
      iVar9 = (iVar9 + iVar7 * -0x1000) * ((&DAT_180099004)[iVar7] - (&DAT_180099000)[iVar7]);
      iVar9 = ((int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc) + (&DAT_180099000)[iVar7];
      if (iVar9 < 0) {
        iVar9 = iVar13;
      }
      local_78[3] = iVar9 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
    }
    local_48[4] = 40000;
    iVar9 = (int)((float)(40000 - iVar6) * fVar15) + iVar2;
    iVar7 = 0;
    if (iVar1 == 0) {
      local_78[4] = iVar9 - *(int *)(param_1 + 0x47948) >>
                    ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
      if (local_78[4] < 0) {
        local_78[4] = iVar13;
      }
    }
    else {
      iVar9 = iVar9 + 150000;
      iVar5 = (int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc;
      iVar4 = iVar7;
      if ((-1 < iVar5) && (iVar4 = iVar5, 0x285 < iVar5)) {
        iVar4 = 0x285;
      }
      iVar9 = (iVar9 + iVar4 * -0x1000) * ((&DAT_180099004)[iVar4] - (&DAT_180099000)[iVar4]);
      iVar9 = ((int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc) + (&DAT_180099000)[iVar4];
      if (iVar9 < 0) {
        iVar9 = iVar13;
      }
      local_78[4] = iVar9 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
    }
    local_48[5] = 50000;
    iVar9 = (int)((float)(50000 - iVar6) * fVar15) + iVar2;
    if (iVar1 == 0) {
      local_78[5] = iVar9 - *(int *)(param_1 + 0x47948) >>
                    ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
      if (local_78[5] < 0) {
        local_78[5] = iVar13;
      }
    }
    else {
      iVar9 = iVar9 + 150000;
      iVar5 = (int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc;
      iVar4 = iVar7;
      if ((-1 < iVar5) && (iVar4 = iVar5, 0x285 < iVar5)) {
        iVar4 = 0x285;
      }
      iVar9 = (iVar9 + iVar4 * -0x1000) * ((&DAT_180099004)[iVar4] - (&DAT_180099000)[iVar4]);
      iVar9 = ((int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc) + (&DAT_180099000)[iVar4];
      if (iVar9 < 0) {
        iVar9 = iVar13;
      }
      local_78[5] = iVar9 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
    }
    local_48[6] = 60000;
    iVar9 = (int)((float)(60000 - iVar6) * fVar15) + iVar2;
    if (iVar1 == 0) {
      local_78[6] = iVar9 - *(int *)(param_1 + 0x47948) >>
                    ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
      if (local_78[6] < 0) {
        local_78[6] = iVar13;
      }
    }
    else {
      iVar9 = iVar9 + 150000;
      iVar5 = (int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc;
      iVar4 = iVar7;
      if ((-1 < iVar5) && (iVar4 = iVar5, 0x285 < iVar5)) {
        iVar4 = 0x285;
      }
      iVar9 = (iVar9 + iVar4 * -0x1000) * ((&DAT_180099004)[iVar4] - (&DAT_180099000)[iVar4]);
      iVar9 = ((int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc) + (&DAT_180099000)[iVar4];
      if (iVar9 < 0) {
        iVar9 = iVar13;
      }
      local_78[6] = iVar9 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
    }
    local_48[7] = 70000;
    iVar6 = (int)((float)(70000 - iVar6) * fVar15) + iVar2;
    if (iVar1 == 0) {
      local_78[7] = iVar6 - *(int *)(param_1 + 0x47948) >>
                    ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
      if (local_78[7] < 0) {
        local_78[7] = iVar13;
      }
    }
    else {
      iVar6 = iVar6 + 150000;
      iVar9 = (int)(iVar6 + (iVar6 >> 0x1f & 0xfffU)) >> 0xc;
      if ((-1 < iVar9) && (iVar7 = iVar9, 0x285 < iVar9)) {
        iVar7 = 0x285;
      }
      iVar6 = (iVar6 + iVar7 * -0x1000) * ((&DAT_180099004)[iVar7] - (&DAT_180099000)[iVar7]);
      iVar6 = ((int)(iVar6 + (iVar6 >> 0x1f & 0xfffU)) >> 0xc) + (&DAT_180099000)[iVar7];
      if (iVar6 < 0) {
        iVar6 = iVar13;
      }
      local_78[7] = iVar6 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
    }
    iVar9 = 80000;
    lVar10 = 0x20;
    iVar6 = 80000 - *(int *)(param_1 + 0x54);
    do {
      *(int *)((longlong)local_48 + lVar10) = iVar9;
      iVar7 = (int)((float)iVar6 * fVar15) + iVar2;
      if (iVar1 == 0) {
        iVar7 = iVar7 - *(int *)(param_1 + 0x47948) >>
                ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
        if (iVar7 < 0) {
          iVar7 = iVar13;
        }
      }
      else {
        iVar7 = iVar7 + 150000;
        iVar5 = (int)(iVar7 + (iVar7 >> 0x1f & 0xfffU)) >> 0xc;
        iVar4 = iVar3;
        if ((-1 < iVar5) && (iVar4 = iVar5, 0x285 < iVar5)) {
          iVar4 = 0x285;
        }
        iVar7 = (iVar7 + iVar4 * -0x1000) * ((&DAT_180099004)[iVar4] - (&DAT_180099000)[iVar4]);
        iVar7 = ((int)(iVar7 + (iVar7 >> 0x1f & 0xfffU)) >> 0xc) + (&DAT_180099000)[iVar4];
        if (iVar7 < 0) {
          iVar7 = iVar13;
        }
        iVar7 = iVar7 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
      }
      iVar9 = iVar9 + 10000;
      *(int *)((longlong)local_78 + lVar10) = iVar7;
      lVar10 = lVar10 + 4;
      iVar6 = iVar6 + 10000;
    } while (iVar9 < 110000);
    piVar11 = (int *)(param_1 + 0x418cc);
    piVar12 = (int *)(param_1 + 0x41960);
    lVar10 = 0;
    do {
      iVar2 = *(int *)((longlong)local_78 + lVar10 + 4);
      iVar6 = *(int *)((longlong)local_48 + lVar10 + 4);
      iVar9 = *(int *)((longlong)local_78 + lVar10);
      iVar1 = *(int *)((longlong)local_48 + lVar10);
      iVar3 = *(int *)((longlong)local_78 + lVar10 + 0xc);
      piVar11[-1] = iVar2;
      lVar14 = lVar10 + 0x14;
      uVar8 = iVar2 - iVar9;
      uVar8 = (((uVar8 >> 1) - iVar1) + iVar6) / uVar8;
      piVar12[-1] = uVar8;
      iVar13 = *(int *)((longlong)local_78 + lVar10 + 8);
      *piVar12 = iVar1 - iVar9 * uVar8;
      iVar9 = *(int *)((longlong)local_48 + lVar10 + 8);
      *piVar11 = iVar13;
      uVar8 = ((((uint)(iVar13 - iVar2) >> 1) - iVar6) + iVar9) / (uint)(iVar13 - iVar2);
      piVar12[1] = uVar8;
      iVar1 = *(int *)((longlong)local_78 + lVar10 + 0x10);
      piVar12[2] = iVar6 - iVar2 * uVar8;
      iVar2 = *(int *)((longlong)local_48 + lVar10 + 0xc);
      piVar11[1] = iVar3;
      uVar8 = ((((uint)(iVar3 - iVar13) >> 1) - iVar9) + iVar2) / (uint)(iVar3 - iVar13);
      piVar12[3] = uVar8;
      iVar6 = *(int *)((longlong)local_48 + lVar10 + 0x10);
      piVar12[4] = iVar9 - iVar13 * uVar8;
      iVar9 = *(int *)((longlong)local_78 + lVar10 + 0x14);
      piVar11[2] = iVar1;
      uVar8 = ((((uint)(iVar1 - iVar3) >> 1) - iVar2) + iVar6) / (uint)(iVar1 - iVar3);
      piVar12[5] = uVar8;
      iVar13 = *(int *)((longlong)local_48 + lVar10 + 0x14);
      piVar12[6] = iVar2 - iVar3 * uVar8;
      piVar11[3] = iVar9;
      uVar8 = iVar9 - iVar1;
      uVar8 = ((iVar13 + (uVar8 >> 1)) - iVar6) / uVar8;
      piVar12[7] = uVar8;
      piVar12[8] = iVar6 - iVar1 * uVar8;
      piVar11 = piVar11 + 5;
      piVar12 = piVar12 + 10;
      lVar10 = lVar14;
    } while (lVar14 < 0x28);
  }
  return;
}


==================================================================

### EXPORT FUNC 180010780 (273 bytes) name=FUN_180010780

void FUN_180010780(longlong param_1,ushort *param_2)

{
  ushort uVar1;
  uint uVar2;
  ulonglong uVar3;
  ulonglong uVar4;
  ulonglong uVar5;
  uint uVar6;
  ushort uVar8;
  uint uVar9;
  undefined4 uVar10;
  undefined4 uVar11;
  double dVar13;
  ulonglong uVar7;
  ulonglong uVar12;
  
  uVar2 = *(uint *)(param_1 + 0x47938);
  uVar8 = *param_2;
  uVar3 = 0;
  uVar10 = 0;
  uVar9 = (uint)uVar8;
  uVar5 = uVar3;
  uVar11 = uVar10;
  if (uVar2 != 0) {
    uVar4 = uVar3;
    uVar7 = uVar3;
    uVar12 = uVar3;
    do {
      uVar1 = *param_2;
      param_2 = param_2 + 1;
      uVar3 = uVar3 + uVar1;
      uVar5 = uVar5 + (uint)uVar1 * (uint)uVar1;
      if ((ushort)uVar9 < uVar1) {
        uVar9 = (uint)uVar1;
        uVar4 = uVar7;
      }
      else if (uVar1 < uVar8) {
        uVar12 = uVar7;
        uVar8 = uVar1;
      }
      uVar11 = (undefined4)uVar12;
      uVar10 = (undefined4)uVar4;
      uVar6 = (int)uVar7 + 1;
      uVar7 = (ulonglong)uVar6;
    } while (uVar6 < *(uint *)(param_1 + 0x47938));
  }
  *(uint *)(param_1 + 0x42010) = uVar9;
  *(uint *)(param_1 + 0x42014) = (uint)uVar8;
  *(undefined4 *)(param_1 + 0x42020) = uVar10;
  *(undefined4 *)(param_1 + 0x42024) = uVar11;
  *(int *)(param_1 + 0x42018) = (int)((longlong)uVar3 / (longlong)(ulonglong)uVar2);
  dVar13 = FUN_1800513c0(((double)(longlong)uVar5 -
                         ((double)(longlong)uVar3 * (double)(longlong)uVar3) / (double)uVar2) /
                         (double)(uVar2 - 1));
  *(int *)(param_1 + 0x4201c) = (int)dVar13;
  return;
}


==================================================================

### EXPORT FUNC 1800108a0 (284 bytes) name=FUN_1800108a0

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

int FUN_1800108a0(longlong param_1)

{
  ushort uVar1;
  uint uVar2;
  int iVar3;
  int iVar4;
  
  iVar4 = *(int *)(param_1 + 0x4c);
  uVar2 = *(int *)(param_1 + 0x24) * 1000;
  if (*(int *)(param_1 + 0x47950) == 0) {
    uVar2 = uVar2 >> ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
    uVar1 = (ushort)uVar2;
    if (0xffff < uVar2) {
      uVar1 = 0xffff;
    }
  }
  else {
    iVar3 = FUN_180015940(param_1,30000,uVar2);
    iVar3 = iVar3 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
    if (0xffff < iVar3) {
      iVar3 = 0xffff;
    }
    uVar1 = (ushort)iVar3;
  }
  if (iVar4 < 0) {
    if (iVar4 < -100) {
      iVar4 = -100;
    }
    iVar3 = -0x51eb851f;
  }
  else {
    if (100 < iVar4) {
      iVar4 = 100;
    }
    iVar3 = -0x1b4e81b5;
  }
  iVar4 = (int)((ulonglong)((longlong)iVar3 * (longlong)(int)((uint)uVar1 * iVar4)) >> 0x20);
  iVar4 = (uint)uVar1 + ((iVar4 >> 4) - (iVar4 >> 0x1f));
  if (((*(int *)(param_1 + 0x41340) != 0) && (_DAT_180057598 < *(float *)(param_1 + 0x9c))) &&
     ((*(int *)(param_1 + 0x41558) == 1 ||
      ((*(int *)(param_1 + 0x41558) == 2 &&
       (*(int *)(param_1 + 0x41568) - *(int *)(param_1 + 0x41564) == 50000)))))) {
    iVar4 = iVar4 + (int)(((float)((*(int *)(param_1 + 0x54) -
                                   (*(int *)(param_1 + 0x41568) + *(int *)(param_1 + 0x41564)) / 2)
                                  * iVar4) * *(float *)(param_1 + 0x9c)) / _DAT_18005e820);
  }
  iVar3 = 0x80;
  if (0x80 < iVar4) {
    iVar3 = iVar4;
  }
  return iVar3;
}


==================================================================

### EXPORT FUNC 1800109c0 (640 bytes) name=FUN_1800109c0

void FUN_1800109c0(longlong param_1)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  
  if (*(int *)(param_1 + 0x42014) == *(int *)(param_1 + 0x42010)) {
    *(int *)(param_1 + 0x4202c) = *(int *)(param_1 + 0x42010);
    *(int *)(param_1 + 0x42030) = *(int *)(param_1 + 0x42014);
    FUN_1800357d0((ulonglong *)(param_1 + 0x4284c),0x80,0x400);
    FUN_1800357d0(*(ulonglong **)(param_1 + 0x2a0),0x80,(ulonglong)*(uint *)(param_1 + 0x47938));
    FUN_1800357d0((ulonglong *)(param_1 + 0x4204c),0,0x400);
    *(undefined4 *)(param_1 + 0x4224c) = *(undefined4 *)(param_1 + 0x47938);
    FUN_1800357d0((ulonglong *)(param_1 + 0x42c4c),0,0x1000);
    *(undefined4 *)(param_1 + 0x4344c) = *(undefined4 *)(param_1 + 0x47938);
    FUN_1800357d0(*(ulonglong **)(param_1 + 0x2b0),0x80,(ulonglong)*(uint *)(param_1 + 0x47940));
    *(undefined4 *)(param_1 + 0x4203c) = 1;
    return;
  }
  if (*(int *)(param_1 + 0x10) == 0) {
    iVar3 = *(int *)(param_1 + 0x42018);
    if (*(int *)(param_1 + 0x88) != 0) {
      FUN_180011380(param_1);
      iVar3 = *(int *)(param_1 + 0x44c64);
    }
    uVar1 = FUN_1800108a0(param_1);
    uVar2 = iVar3 - (uVar1 >> 1);
    if (*(uint *)(param_1 + 0x42014) < uVar2) {
      uVar2 = *(uint *)(param_1 + 0x42014);
    }
    uVar1 = (uVar1 >> 1) + iVar3;
    *(uint *)(param_1 + 0x42030) = uVar2;
    if (uVar1 < *(uint *)(param_1 + 0x42010)) {
      uVar1 = *(uint *)(param_1 + 0x42010);
    }
    *(uint *)(param_1 + 0x4202c) = uVar1;
    if ((int)uVar2 < 0) {
      *(undefined4 *)(param_1 + 0x42030) = 0;
    }
    if (0xffff < (int)uVar1) {
      *(undefined4 *)(param_1 + 0x4202c) = 0xffff;
    }
    if (*(int *)(param_1 + 0x90) == 0) {
      FUN_180011ee0(param_1,*(ushort **)(param_1 + 0x270));
    }
    else {
      FUN_180011cc0(param_1);
    }
    if (*(int *)(param_1 + 0x28) == 0) {
      if (*(int *)(param_1 + 0x44c50) != 0) {
        memcpy((void *)(param_1 + 0x6f0),(void *)(param_1 + 0x2c8),0x400);
        memcpy((void *)(param_1 + 0xb18),(void *)(param_1 + 0x2c8),0x400);
        memcpy((void *)(param_1 + 0xf40),(void *)(param_1 + 0x2c8),0x400);
        *(undefined4 *)(param_1 + 0x44c50) = 0;
      }
    }
    else {
      FUN_180010c40(param_1);
      *(undefined4 *)(param_1 + 0x44c50) = 1;
    }
  }
  else {
    FUN_1800110e0(param_1);
    if (*(int *)(param_1 + 0x44c50) != 0) {
      memcpy((void *)(param_1 + 0x6f0),(void *)(param_1 + 0x2c8),0x400);
      memcpy((void *)(param_1 + 0xb18),(void *)(param_1 + 0x2c8),0x400);
      memcpy((void *)(param_1 + 0xf40),(void *)(param_1 + 0x2c8),0x400);
      *(undefined4 *)(param_1 + 0x44c50) = 0;
    }
  }
  FUN_180010e80(param_1);
  return;
}


==================================================================

### EXPORT FUNC 180010c40 (574 bytes) name=FUN_180010c40

void FUN_180010c40(longlong param_1)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  uint uVar7;
  uint uVar8;
  undefined4 *puVar9;
  uint uVar10;
  uint uVar11;
  ulonglong uVar12;
  uint uVar13;
  
  uVar1 = *(uint *)(param_1 + 0x4202c);
  uVar10 = *(uint *)(param_1 + 0x47938);
  uVar2 = *(uint *)(param_1 + 0x42030);
  iVar3 = *(int *)(param_1 + 0x18);
  uVar5 = 0;
  uVar8 = *(uint *)(param_1 + 0x41fc0);
  uVar13 = 0xffff;
  uVar7 = 0xffff;
  *(undefined4 *)(param_1 + 0x74) = 1;
  do {
    uVar11 = uVar7 + uVar5 >> 1;
    iVar6 = FUN_180016290(param_1,uVar11,(uVar10 >> 1) + (uVar8 >> 1),0);
    if ((*(int *)(param_1 + 0x74) != 0) || (*(int *)(param_1 + 0x78) != 0)) {
      iVar6 = FUN_180015b90(param_1,iVar6,*(float *)(param_1 + 0xd4));
    }
    uVar4 = uVar11;
    if (iVar6 <= iVar3) {
      uVar4 = uVar7;
      uVar5 = uVar11;
    }
    uVar7 = uVar4;
  } while (uVar5 + 1 < uVar7);
  iVar3 = *(int *)(param_1 + 0x14);
  uVar10 = *(uint *)(param_1 + 0x47938);
  uVar7 = uVar7 + uVar5 >> 1;
  uVar5 = 0;
  uVar8 = *(uint *)(param_1 + 0x41fc0);
  *(undefined4 *)(param_1 + 0x74) = 1;
  do {
    uVar11 = uVar13 + uVar5 >> 1;
    iVar6 = FUN_180016290(param_1,uVar11,(uVar10 >> 1) + (uVar8 >> 1),0);
    if ((*(int *)(param_1 + 0x74) != 0) || (*(int *)(param_1 + 0x78) != 0)) {
      iVar6 = FUN_180015b90(param_1,iVar6,*(float *)(param_1 + 0xd4));
    }
    uVar4 = uVar11;
    if (iVar6 <= iVar3) {
      uVar4 = uVar13;
      uVar5 = uVar11;
    }
    uVar13 = uVar4;
  } while (uVar5 + 1 < uVar13);
  uVar8 = uVar13 + uVar5 >> 1;
  uVar10 = 0x100;
  if (uVar1 < uVar7) {
    uVar5 = 0x100;
  }
  else if (uVar7 < uVar2) {
    uVar5 = 0xffffffff;
  }
  else {
    uVar5 = (uint)*(byte *)((ulonglong)((uVar7 - uVar2) * 0x3ff) / (ulonglong)(uVar1 - uVar2) +
                            0x4284c + param_1);
  }
  if (uVar8 <= uVar1) {
    if (uVar8 < uVar2) {
      uVar10 = 0xffffffff;
    }
    else {
      uVar10 = (uint)*(byte *)((ulonglong)((uVar8 - uVar2) * 0x3ff) / (ulonglong)(uVar1 - uVar2) +
                               0x4284c + param_1);
    }
  }
  memcpy((void *)(param_1 + 0x6f0),(void *)(param_1 + 0x2c8),0x400);
  if ((int)uVar10 < 0) {
    uVar10 = 0;
  }
  if (0xff < (int)uVar5) {
    uVar5 = 0xff;
  }
  if ((int)uVar10 <= (int)uVar5) {
    uVar12 = (ulonglong)((uVar5 - uVar10) + 1);
    puVar9 = (undefined4 *)(param_1 + 0x6f0 + (longlong)(int)uVar10 * 4);
    do {
      uVar12 = uVar12 - 1;
      *puVar9 = *(undefined4 *)(param_1 + 0x2c);
      puVar9 = puVar9 + 1;
    } while (uVar12 != 0);
  }
  memcpy((void *)(param_1 + 0xb18),(void *)(param_1 + 0x6f0),0x400);
  memcpy((void *)(param_1 + 0xf40),(void *)(param_1 + 0x6f0),0x400);
  return;
}


==================================================================

### EXPORT FUNC 180010e80 (538 bytes) name=FUN_180010e80

void FUN_180010e80(longlong param_1)

{
  int *piVar1;
  ushort uVar2;
  int iVar3;
  undefined1 *puVar4;
  longlong lVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  int iVar10;
  uint uVar11;
  ushort *puVar12;
  uint uVar13;
  int iVar14;
  
  iVar7 = *(int *)(param_1 + 0x4202c);
  puVar4 = *(undefined1 **)(param_1 + 0x2a0);
  puVar12 = *(ushort **)(param_1 + 0x270);
  iVar14 = *(int *)(param_1 + 0x42030);
  FUN_1800357d0((ulonglong *)(param_1 + 0x4204c),0,0x400);
  iVar3 = *(int *)(param_1 + 0x42030);
  for (iVar10 = *(int *)(param_1 + 0x47938); iVar10 != 0; iVar10 = iVar10 + -1) {
    uVar2 = *puVar12;
    puVar12 = puVar12 + 1;
    uVar6 = ((uint)uVar2 - iVar3) * (int)(0xffc00000 / (ulonglong)(uint)(iVar7 - iVar14));
    *puVar4 = *(undefined1 *)((ulonglong)(uVar6 >> 0x16) + 0x4284c + param_1);
    piVar1 = (int *)(param_1 + 0x4204c + (ulonglong)(uVar6 >> 0x18) * 4);
    *piVar1 = *piVar1 + 1;
    puVar4 = puVar4 + 1;
  }
  uVar6 = *(uint *)(param_1 + 0x41fd0);
  lVar5 = *(longlong *)(param_1 + 0x2b0);
  *(undefined4 *)(param_1 + 0x4203c) = 1;
  if (*(int *)(param_1 + 0x94) == 0) {
    uVar8 = *(uint *)(param_1 + 0x41fd4);
    if (uVar8 < 2) {
      iVar7 = 0;
    }
    else {
      iVar7 = (int)(0xff0000 / (ulonglong)(uVar8 - 1));
    }
    iVar14 = uVar8 - 1;
    if (-1 < iVar14) {
      uVar11 = uVar6 * iVar14;
      uVar8 = iVar7 * iVar14;
      do {
        FUN_1800357d0((ulonglong *)((ulonglong)uVar11 + lVar5),(ulonglong)(uVar8 >> 0x10 & 0xff),
                      (ulonglong)uVar6);
        uVar8 = uVar8 - iVar7;
        uVar11 = uVar11 - uVar6;
        iVar14 = iVar14 + -1;
      } while (-1 < iVar14);
    }
  }
  else {
    iVar7 = *(int *)(param_1 + 0x42030);
    uVar8 = 0;
    if ((*(int *)(param_1 + 0x42014) == iVar7) || (*(int *)(param_1 + 0x4202c) == iVar7)) {
      iVar14 = 0;
    }
    else {
      iVar14 = ((*(int *)(param_1 + 0x42014) - iVar7) * 0x3ff) /
               (*(int *)(param_1 + 0x4202c) - iVar7);
    }
    if ((*(int *)(param_1 + 0x42010) == iVar7) || (*(int *)(param_1 + 0x4202c) == iVar7)) {
      iVar7 = 0x3ff;
    }
    else {
      iVar7 = ((*(int *)(param_1 + 0x42010) - iVar7) * 0x3ff) /
              (*(int *)(param_1 + 0x4202c) - iVar7);
    }
    uVar11 = *(uint *)(param_1 + 0x41fd4);
    if (1 < uVar11) {
      uVar8 = (uint)((iVar7 - iVar14) * 0x10000) / (uVar11 - 1);
    }
    iVar7 = uVar11 - 1;
    if (-1 < iVar7) {
      uVar11 = uVar6 * iVar7;
      uVar13 = uVar8 * iVar7;
      do {
        uVar9 = (uVar13 >> 0x10) + iVar14;
        if (0x3ff < uVar9) {
          uVar9 = 0x3ff;
        }
        FUN_1800357d0((ulonglong *)((ulonglong)uVar11 + lVar5),
                      (ulonglong)*(byte *)((ulonglong)uVar9 + 0x4284c + param_1),(ulonglong)uVar6);
        uVar13 = uVar13 - uVar8;
        uVar11 = uVar11 - uVar6;
        iVar7 = iVar7 + -1;
      } while (-1 < iVar7);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 1800110a0 (64 bytes) name=FUN_1800110a0

undefined8 FUN_1800110a0(longlong param_1)

{
  if ((*(int *)(param_1 + 0x228) != 0) && (*(int *)(param_1 + 0x234) != 0)) {
    if (*(int *)(param_1 + 0x4203c) == 0) {
      FUN_180010e80(param_1);
    }
    return *(undefined8 *)(param_1 + 0x2a0);
  }
  return 0;
}


==================================================================

### EXPORT FUNC 1800110e0 (658 bytes) name=FUN_1800110e0

void FUN_1800110e0(longlong param_1)

{
  int iVar1;
  ulonglong uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  undefined1 *puVar8;
  int iVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  int iVar13;
  uint uVar14;
  
  if ((*(uint *)(param_1 + 0x1c) < *(uint *)(param_1 + 0x20)) &&
     (iVar1 = *(int *)(param_1 + 0x14), iVar1 < *(int *)(param_1 + 0x18))) {
    uVar14 = *(uint *)(param_1 + 0x41fc0);
    uVar6 = *(uint *)(param_1 + 0x47938);
    uVar10 = 0;
    uVar7 = 0xffff;
    uVar12 = 0;
    *(undefined4 *)(param_1 + 0x74) = 1;
    uVar5 = 0xffff;
    do {
      uVar11 = uVar5 + uVar12 >> 1;
      iVar4 = FUN_180016290(param_1,uVar11,(uVar6 >> 1) + (uVar14 >> 1),0);
      if ((*(int *)(param_1 + 0x74) != 0) || (*(int *)(param_1 + 0x78) != 0)) {
        iVar4 = FUN_180015b90(param_1,iVar4,*(float *)(param_1 + 0xd4));
      }
      uVar3 = uVar11;
      if (iVar4 <= iVar1) {
        uVar3 = uVar5;
        uVar12 = uVar11;
      }
      uVar5 = uVar3;
    } while (uVar12 + 1 < uVar5);
    iVar1 = *(int *)(param_1 + 0x18);
    uVar14 = *(uint *)(param_1 + 0x47938);
    uVar5 = uVar5 + uVar12 >> 1;
    uVar12 = 0;
    uVar6 = *(uint *)(param_1 + 0x41fc0);
    *(undefined4 *)(param_1 + 0x74) = 1;
    do {
      uVar11 = uVar7 + uVar12 >> 1;
      iVar4 = FUN_180016290(param_1,uVar11,(uVar14 >> 1) + (uVar6 >> 1),0);
      if ((*(int *)(param_1 + 0x74) != 0) || (*(int *)(param_1 + 0x78) != 0)) {
        iVar4 = FUN_180015b90(param_1,iVar4,*(float *)(param_1 + 0xd4));
      }
      uVar3 = uVar11;
      if (iVar4 <= iVar1) {
        uVar3 = uVar7;
        uVar12 = uVar11;
      }
      uVar7 = uVar3;
    } while (uVar12 + 1 < uVar7);
    iVar1 = *(int *)(param_1 + 0x1c);
    uVar6 = uVar7 + uVar12 >> 1;
    uVar14 = uVar6;
    if ((int)uVar6 < (int)*(uint *)(param_1 + 0x42010)) {
      uVar14 = *(uint *)(param_1 + 0x42010);
    }
    uVar12 = uVar5;
    if ((int)*(uint *)(param_1 + 0x42014) < (int)uVar5) {
      uVar12 = *(uint *)(param_1 + 0x42014);
    }
    *(uint *)(param_1 + 0x4202c) = uVar14;
    iVar4 = *(int *)(param_1 + 0x20) * 4;
    *(uint *)(param_1 + 0x42030) = uVar12;
    uVar2 = (ulonglong)((uVar5 - uVar12) * 0x3ff) / (ulonglong)(uVar14 - uVar12);
    uVar14 = ((uVar6 - uVar12) * 0x3ff) / (uVar14 - uVar12);
    uVar6 = (uint)uVar2;
    if (uVar6 == 0) {
      iVar9 = 0;
    }
    else {
      iVar9 = (int)((uint)(iVar1 << 0x18) / uVar2);
    }
    if (uVar6 < uVar14) {
      uVar12 = (uint)((iVar4 + iVar1 * -4) * 0x400000) / (uVar14 - uVar6);
    }
    else {
      uVar12 = 0;
    }
    if (uVar14 < 0x3ff) {
      uVar5 = (uint)((*(int *)(param_1 + 0x20) * -4 + -1) * 0x400000) / (0x3ff - uVar14);
    }
    else {
      uVar5 = 0;
    }
    puVar8 = (undefined1 *)(param_1 + 0x4284c);
    iVar13 = 0;
    uVar7 = -(uVar12 * uVar6);
    uVar11 = -(uVar5 * uVar14);
    do {
      if (uVar6 < uVar10) {
        if (uVar10 < uVar14) {
          *puVar8 = (char)((uVar7 >> 0x16) + iVar1 * 4 >> 2);
        }
        else {
          *puVar8 = (char)((uVar11 >> 0x16) + iVar4 >> 2);
        }
      }
      else {
        *puVar8 = (char)((uint)iVar13 >> 0x18);
      }
      uVar10 = uVar10 + 1;
      uVar11 = uVar11 + uVar5;
      uVar7 = uVar7 + uVar12;
      iVar13 = iVar13 + iVar9;
      puVar8 = puVar8 + 1;
    } while (uVar10 < 0x400);
  }
  return;
}


==================================================================

### EXPORT FUNC 180011380 (1476 bytes) name=FUN_180011380

/* WARNING: Function: __chkstk replaced with injection: alloca_probe */

void FUN_180011380(longlong param_1)

{
  uint *puVar1;
  longlong lVar2;
  float *pfVar3;
  ulonglong uVar4;
  ulonglong uVar5;
  uint uVar6;
  int iVar7;
  ulonglong uVar8;
  ulonglong uVar9;
  uint uVar10;
  uint uVar11;
  ulonglong uVar12;
  uint uVar13;
  uint uVar14;
  ushort *puVar15;
  uint uVar16;
  uint uVar17;
  uint uVar18;
  uint uVar19;
  int iVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  uint local_2828 [1279];
  float afStack_142c [1281];
  
  uVar17 = *(uint *)(param_1 + 0x41fc4);
  puVar15 = *(ushort **)(param_1 + 0x270);
  uVar4 = 0;
  uVar10 = 0;
  if (uVar17 != 0) {
    uVar18 = *(uint *)(param_1 + 0x41fc0);
    uVar12 = (ulonglong)*(uint *)(param_1 + 0x41fc4);
    puVar1 = local_2828;
    do {
      uVar9 = uVar4;
      for (uVar6 = uVar18 >> 2; uVar6 != 0; uVar6 = uVar6 - 1) {
        uVar9 = (ulonglong)
                ((int)uVar9 + (uint)*puVar15 + (uint)puVar15[1] + (uint)puVar15[2] +
                (uint)puVar15[3]);
        puVar15 = puVar15 + 4;
      }
      uVar12 = uVar12 - 1;
      *puVar1 = (int)(uVar9 / uVar18);
      puVar1 = puVar1 + 1;
    } while (uVar12 != 0);
  }
  uVar11 = uVar17 >> 2;
  uVar18 = 0;
  uVar13 = uVar17 * 7 >> 3;
  uVar12 = uVar4;
  uVar6 = uVar18;
  uVar16 = uVar10;
  if (1 < uVar11) {
    uVar6 = (uVar11 - 2 >> 1) + 1;
    uVar8 = (ulonglong)uVar6;
    uVar6 = uVar6 * 2;
    uVar9 = uVar4;
    uVar5 = uVar4;
    do {
      uVar16 = (int)uVar5 + local_2828[uVar12];
      uVar5 = (ulonglong)uVar16;
      uVar10 = (int)uVar9 + local_2828[uVar12 + 1];
      uVar9 = (ulonglong)uVar10;
      uVar12 = uVar12 + 2;
      uVar8 = uVar8 - 1;
    } while (uVar8 != 0);
  }
  if (uVar6 < uVar11) {
    uVar18 = local_2828[uVar12];
  }
  uVar12 = (ulonglong)uVar11;
  uVar18 = uVar18 + uVar10 + uVar16;
  if (uVar11 < uVar17) {
    puVar1 = local_2828 + uVar11;
    uVar9 = (ulonglong)(*(int *)(param_1 + 0x41fc4) - uVar11);
    do {
      uVar4 = (ulonglong)((int)uVar4 + *puVar1);
      puVar1 = puVar1 + 1;
      uVar9 = uVar9 - 1;
    } while (uVar9 != 0);
  }
  iVar20 = (uVar13 - uVar11) + 1;
  uVar9 = uVar12;
  uVar10 = uVar11;
  if (3 < iVar20) {
    fVar23 = (float)uVar17;
    uVar6 = uVar11 + 2;
    do {
      uVar18 = uVar18 + local_2828[uVar9];
      uVar16 = (int)uVar4 - local_2828[uVar9];
      iVar7 = uVar17 - uVar10;
      fVar22 = (float)(uVar6 - 1) / fVar23;
      fVar21 = (float)uVar18 / (float)(uVar6 - 1) - (float)uVar16 / (float)(iVar7 - 1);
      uVar18 = uVar18 + local_2828[uVar9 + 1];
      uVar16 = uVar16 - local_2828[uVar9 + 1];
      afStack_142c[uVar9 + 1] = (DAT_18005e700 - fVar22) * fVar22 * fVar21 * fVar21;
      fVar22 = (float)uVar6 / fVar23;
      uVar19 = uVar18 + local_2828[uVar9 + 2];
      uVar14 = uVar16 - local_2828[uVar9 + 2];
      fVar21 = (float)uVar18 / (float)uVar6 - (float)uVar16 / (float)(iVar7 - 2);
      afStack_142c[uVar9 + 2] = (DAT_18005e700 - fVar22) * fVar22 * fVar21 * fVar21;
      uVar18 = uVar19 + local_2828[uVar9 + 3];
      uVar4 = (ulonglong)(uVar14 - local_2828[uVar9 + 3]);
      fVar22 = (float)(uVar6 + 1) / fVar23;
      uVar16 = uVar6 + 2;
      fVar21 = (float)uVar19 / (float)(uVar6 + 1) - (float)uVar14 / (float)(iVar7 - 3);
      afStack_142c[uVar9 + 3] = (DAT_18005e700 - fVar22) * fVar22 * fVar21 * fVar21;
      fVar22 = (float)uVar16 / fVar23;
      uVar10 = uVar10 + 4;
      uVar9 = uVar9 + 4;
      uVar6 = uVar6 + 4;
      fVar21 = (float)uVar18 / (float)uVar16 - (float)uVar4 / (float)(iVar7 - 4);
      afStack_142c[uVar9] = (DAT_18005e700 - fVar22) * fVar22 * fVar21 * fVar21;
    } while (uVar10 <= uVar13 - 3);
  }
  uVar5 = 0;
  if (uVar10 <= uVar13) {
    uVar6 = *(uint *)(param_1 + 0x41fc4);
    lVar2 = uVar9 * 4;
    uVar16 = uVar10;
    do {
      uVar16 = uVar16 + 1;
      uVar18 = uVar18 + *(int *)((longlong)local_2828 + lVar2);
      uVar4 = (ulonglong)(uint)((int)uVar4 - *(int *)((longlong)local_2828 + lVar2));
      fVar21 = (float)uVar16 / (float)uVar6;
      iVar7 = uVar6 - uVar10;
      uVar10 = uVar10 + 1;
      fVar23 = (float)uVar18 / (float)uVar16 - (float)uVar4 / (float)(iVar7 - 1);
      *(float *)((longlong)afStack_142c + lVar2 + 4) =
           (DAT_18005e700 - fVar21) * fVar21 * fVar23 * fVar23;
      lVar2 = lVar2 + 4;
    } while (uVar10 <= uVar13);
  }
  fVar23 = afStack_142c[(ulonglong)uVar11 + 1];
  uVar10 = uVar11;
  uVar18 = uVar11;
  if (3 < iVar20) {
    uVar6 = uVar11 + 2;
    do {
      if (fVar23 <= afStack_142c[uVar12 + 1]) {
        fVar23 = afStack_142c[uVar12 + 1];
        uVar10 = uVar18;
      }
      if (fVar23 <= afStack_142c[uVar12 + 2]) {
        uVar10 = uVar6 - 1;
        fVar23 = afStack_142c[uVar12 + 2];
      }
      if (fVar23 <= afStack_142c[uVar12 + 3]) {
        fVar23 = afStack_142c[uVar12 + 3];
        uVar10 = uVar6;
      }
      if (fVar23 <= afStack_142c[uVar12 + 4]) {
        uVar10 = uVar6 + 1;
        fVar23 = afStack_142c[uVar12 + 4];
      }
      uVar18 = uVar18 + 4;
      uVar12 = uVar12 + 4;
      uVar6 = uVar6 + 4;
    } while (uVar18 <= uVar13 - 3);
  }
  if (uVar18 <= uVar13) {
    pfVar3 = afStack_142c + uVar12 + 1;
    do {
      if (fVar23 <= *pfVar3) {
        fVar23 = *pfVar3;
        uVar10 = uVar18;
      }
      uVar18 = uVar18 + 1;
      pfVar3 = pfVar3 + 1;
    } while (uVar18 <= uVar13);
  }
  uVar18 = 0;
  if ((uVar10 != uVar11) && (uVar10 != uVar13)) {
    uVar6 = uVar10 + 1;
    uVar4 = uVar5;
    uVar12 = uVar5;
    uVar9 = uVar5;
    if ((int)uVar6 < 2) {
LAB_1800117f6:
      uVar14 = (uint)uVar9;
      uVar13 = (uint)uVar12;
      uVar19 = local_2828[uVar4];
    }
    else {
      uVar16 = uVar10 + 1 >> 1;
      uVar8 = (ulonglong)uVar16;
      do {
        uVar14 = (int)uVar9 + local_2828[uVar4];
        uVar9 = (ulonglong)uVar14;
        uVar13 = (int)uVar12 + local_2828[uVar4 + 1];
        uVar12 = (ulonglong)uVar13;
        uVar4 = uVar4 + 2;
        uVar8 = uVar8 - 1;
      } while (uVar8 != 0);
      uVar19 = uVar18;
      if (uVar16 * 2 <= uVar10) goto LAB_1800117f6;
    }
    uVar4 = uVar5;
    if (uVar6 < uVar17) {
      puVar1 = local_2828 + (int)uVar6;
      uVar12 = (ulonglong)(uVar17 - uVar6);
      do {
        uVar4 = (ulonglong)((int)uVar4 + *puVar1);
        puVar1 = puVar1 + 1;
        uVar12 = uVar12 - 1;
      } while (uVar12 != 0);
    }
    uVar6 = (uVar19 + uVar13 + uVar14) / uVar6;
    iVar20 = (int)(uVar4 / ((uVar17 - uVar10) - 1));
    uVar16 = (int)(uVar6 - iVar20) >> 0x1f;
    if (((int)(iVar20 + uVar6) <= (int)(((uVar6 - iVar20 ^ uVar16) - uVar16) * 0x80)) &&
       (iVar20 <= (int)uVar6)) {
      uVar6 = *(uint *)(param_1 + 0x44c60);
      *(uint *)(param_1 + 0x44c68) = local_2828[uVar10];
      if ((uVar11 < uVar6) && (uVar6 <= uVar17 - 1)) {
        uVar17 = uVar17 >> 7;
        uVar16 = uVar17;
        if (uVar17 == 0) {
          uVar16 = 1;
        }
        if (uVar16 + uVar6 <= uVar10) {
          uVar10 = uVar17;
          if (uVar17 == 0) {
            uVar10 = 1;
          }
          uVar10 = uVar10 + uVar6;
        }
        uVar16 = uVar17;
        if (uVar17 == 0) {
          uVar16 = 1;
        }
        if (uVar10 <= uVar6 - uVar16) {
          if (uVar17 == 0) {
            uVar17 = 1;
          }
          uVar10 = uVar6 - uVar17;
        }
      }
      uVar4 = uVar5;
      uVar12 = uVar5;
      if ((int)(uVar10 + 1) < 2) {
LAB_1800118f9:
        uVar16 = (uint)uVar12;
        uVar6 = (uint)uVar4;
        uVar18 = local_2828[uVar5];
      }
      else {
        uVar17 = uVar10 + 1 >> 1;
        uVar9 = (ulonglong)uVar17;
        do {
          uVar16 = (int)uVar12 + local_2828[uVar5];
          uVar12 = (ulonglong)uVar16;
          uVar6 = (int)uVar4 + local_2828[uVar5 + 1];
          uVar4 = (ulonglong)uVar6;
          uVar5 = uVar5 + 2;
          uVar9 = uVar9 - 1;
        } while (uVar9 != 0);
        if (uVar17 * 2 <= uVar10) goto LAB_1800118f9;
      }
      *(uint *)(param_1 + 0x44c60) = uVar10;
      uVar17 = (uVar6 + uVar16 + uVar18) / (uVar10 + 1);
      goto LAB_180011928;
    }
  }
  *(undefined4 *)(param_1 + 0x44c68) = 0;
  *(uint *)(param_1 + 0x44c60) = uVar17 - 1;
  uVar17 = *(uint *)(param_1 + 0x42018);
LAB_180011928:
  *(uint *)(param_1 + 0x44c64) = uVar17;
  return;
}


==================================================================

### EXPORT FUNC 180011950 (879 bytes) name=FUN_180011950

/* WARNING: Function: __chkstk replaced with injection: alloca_probe */

int FUN_180011950(longlong param_1,ushort *param_2,ulonglong *param_3)

{
  int *piVar1;
  ushort uVar2;
  int iVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  ulonglong *puVar7;
  uint uVar8;
  int iVar9;
  int iVar10;
  uint uVar11;
  ushort *puVar13;
  ulonglong uVar14;
  int iVar15;
  uint uVar16;
  uint uVar17;
  uint uVar18;
  ulonglong uVar19;
  longlong lVar20;
  ulonglong uVar21;
  ulonglong uVar22;
  uint uVar23;
  int aiStack_1034 [3];
  undefined8 local_1028;
  undefined8 uStack_30;
  ulonglong uVar12;
  
  uStack_30 = 0x180011972;
  iVar15 = *(int *)(param_1 + 0x47938);
  if ((*(int *)(param_1 + 0x88) != 0) && (*(int *)(param_1 + 0x10) == 0)) {
    iVar15 = (*(int *)(param_1 + 0x44c60) + 1) * *(int *)(param_1 + 0x41fc0);
  }
  iVar10 = *(int *)(param_1 + 0x42030);
  uVar23 = *(int *)(param_1 + 0x4202c) - iVar10;
  iVar6 = (int)(0xffc00000 / (ulonglong)uVar23);
  FUN_1800357d0(param_3,0,0x1000);
  for (; iVar15 != 0; iVar15 = iVar15 + -1) {
    uVar2 = *param_2;
    param_2 = param_2 + 1;
    piVar1 = (int *)((longlong)param_3 + (ulonglong)(((uint)uVar2 - iVar10) * iVar6 >> 0x16) * 4);
    *piVar1 = *piVar1 + 1;
  }
  uVar14 = 0;
  uVar5 = 0;
  puVar7 = param_3 + 1;
  lVar20 = 0x100;
  uVar18 = 0;
  uVar22 = uVar14;
  uVar12 = uVar14;
  uVar21 = uVar14;
  uVar19 = uVar14;
  do {
    uVar16 = (int)uVar21 + (int)puVar7[-1];
    uVar21 = (ulonglong)uVar16;
    uVar17 = (int)uVar19 + *(int *)((longlong)puVar7 + -4);
    uVar19 = (ulonglong)uVar17;
    uVar11 = (int)uVar12 + (int)*puVar7;
    uVar12 = (ulonglong)uVar11;
    uVar8 = (int)uVar22 + *(int *)((longlong)puVar7 + 4);
    uVar22 = (ulonglong)uVar8;
    puVar7 = puVar7 + 2;
    lVar20 = lVar20 + -1;
  } while (lVar20 != 0);
  iVar15 = uVar16 + uVar17 + uVar11 + uVar8;
  if (((*(int *)(param_1 + 0x88) != 0) && (*(int *)(param_1 + 0x10) == 0)) &&
     (*(uint *)(param_1 + 0x44c60) < *(int *)(param_1 + 0x41fc4) - 1U)) {
    iVar3 = *(int *)(param_1 + 0x44c68);
    if (iVar3 << 5 < *(int *)(param_1 + 0x44c64) * 0x1f) {
      uVar22 = (ulonglong)(uint)((iVar3 - iVar10) * 0x3ff) / (ulonglong)uVar23;
      uVar23 = (uint)uVar22;
      lVar20 = (longlong)(int)uVar23;
      if (uVar23 != 0) {
        FUN_1800357d0(param_3,0,uVar22 << 2);
      }
      uVar8 = uVar18;
      if (1 < (int)(0x400 - uVar23)) {
        uVar5 = (0x3fe - uVar23 >> 1) + 1;
        uVar21 = (ulonglong)uVar5;
        uVar23 = uVar23 + uVar5 * 2;
        uVar22 = uVar14;
        uVar12 = uVar14;
        do {
          uVar5 = (int)uVar22 + *(int *)((longlong)param_3 + lVar20 * 4);
          uVar22 = (ulonglong)uVar5;
          uVar8 = (int)uVar12 + *(int *)((longlong)param_3 + lVar20 * 4 + 4);
          uVar12 = (ulonglong)uVar8;
          lVar20 = lVar20 + 2;
          uVar21 = uVar21 - 1;
        } while (uVar21 != 0);
      }
      if (uVar23 < 0x400) {
        uVar18 = *(uint *)((longlong)param_3 + lVar20 * 4);
      }
      iVar15 = uVar18 + uVar5 + uVar8;
    }
    else if (*(int *)(param_1 + 0x44c64) * 0x21 < iVar3 << 5) {
      uVar5 = 0;
      uVar23 = (uint)((iVar3 - iVar10) * 0x3ff) / uVar23;
      uVar22 = uVar14;
      uVar8 = uVar5;
      uVar11 = uVar5;
      if (1 < (int)uVar23) {
        uVar8 = (uVar23 - 2 >> 1) + 1;
        uVar19 = (ulonglong)uVar8;
        uVar8 = uVar8 * 2;
        uVar12 = uVar14;
        uVar21 = uVar14;
        do {
          uVar18 = (int)uVar12 + *(int *)((longlong)param_3 + uVar22 * 4);
          uVar12 = (ulonglong)uVar18;
          uVar11 = (int)uVar21 + *(int *)((longlong)param_3 + uVar22 * 4 + 4);
          uVar21 = (ulonglong)uVar11;
          uVar22 = uVar22 + 2;
          uVar19 = uVar19 - 1;
        } while (uVar19 != 0);
      }
      if (uVar8 < uVar23) {
        uVar5 = *(uint *)((longlong)param_3 + uVar22 * 4);
      }
      iVar15 = uVar5 + uVar11 + uVar18;
      if (uVar23 < 0x400) {
        FUN_1800357d0((ulonglong *)((longlong)param_3 + (longlong)(int)uVar23 * 4),0,
                      (ulonglong)(0x400 - uVar23) << 2);
      }
    }
  }
  if (*(int *)(param_1 + 0x44) != 0) {
    FUN_1800357d0(&local_1028,0,0x1000);
    uVar23 = *(uint *)(param_1 + 0x3c);
    if (uVar23 <= *(uint *)(param_1 + 0x40)) {
      uVar18 = *(uint *)(param_1 + 0x34);
      iVar3 = *(int *)(param_1 + 0x38);
      iVar4 = *(int *)(param_1 + 0x41fc0);
      lVar20 = *(longlong *)(param_1 + 0x270);
      uVar5 = iVar4 * uVar23;
      uVar22 = (ulonglong)((*(uint *)(param_1 + 0x40) - uVar23) + 1);
      do {
        puVar13 = (ushort *)(lVar20 + ((ulonglong)uVar5 + (ulonglong)uVar18) * 2);
        for (iVar9 = (iVar3 - uVar18) + 1; iVar9 != 0; iVar9 = iVar9 + -1) {
          uVar2 = *puVar13;
          puVar13 = puVar13 + 1;
          piVar1 = (int *)((longlong)&local_1028 +
                          (ulonglong)(((uint)uVar2 - iVar10) * iVar6 >> 0x16) * 4);
          *piVar1 = *piVar1 + 1;
        }
        uVar5 = uVar5 + iVar4;
        uVar22 = uVar22 - 1;
      } while (uVar22 != 0);
    }
    uVar22 = uVar14;
    uVar12 = uVar14;
    uVar21 = uVar14;
    puVar7 = param_3 + 1;
    do {
      lVar20 = uVar21 * 4;
      iVar10 = *(int *)((longlong)&local_1028 + (4 - (longlong)param_3) + (longlong)puVar7);
      uVar21 = uVar21 + 4;
      iVar6 = *(int *)((longlong)&local_1028 + lVar20) * *(int *)(param_1 + 0x44);
      *(int *)(puVar7 + -1) = (int)puVar7[-1] + iVar6;
      iVar15 = iVar15 + iVar6;
      iVar6 = aiStack_1034[uVar21] * *(int *)(param_1 + 0x44);
      *(int *)((longlong)puVar7 + -4) = *(int *)((longlong)puVar7 + -4) + iVar6;
      uVar5 = (int)uVar12 + iVar6;
      uVar12 = (ulonglong)uVar5;
      iVar6 = *(int *)(&stack0xffffffffffffefc8 + -(longlong)param_3 + (longlong)(puVar7 + 2)) *
              *(int *)(param_1 + 0x44);
      *(int *)puVar7 = (int)*puVar7 + iVar6;
      uVar18 = (int)uVar22 + iVar6;
      uVar22 = (ulonglong)uVar18;
      iVar10 = iVar10 * *(int *)(param_1 + 0x44);
      *(int *)((longlong)puVar7 + 4) = *(int *)((longlong)puVar7 + 4) + iVar10;
      uVar23 = (int)uVar14 + iVar10;
      uVar14 = (ulonglong)uVar23;
      puVar7 = puVar7 + 2;
    } while ((longlong)uVar21 < 0x400);
    iVar15 = uVar23 + uVar18 + uVar5 + iVar15;
  }
  return iVar15;
}


==================================================================

### EXPORT FUNC 180011cc0 (537 bytes) name=FUN_180011cc0

void FUN_180011cc0(longlong param_1)

{
  ulonglong *puVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  longlong lVar8;
  longlong lVar9;
  ulonglong uVar10;
  uint uVar11;
  int iVar12;
  int iVar13;
  longlong lVar14;
  int iVar15;
  int *piVar16;
  
  uVar3 = FUN_180011950(param_1,*(ushort **)(param_1 + 0x270),(ulonglong *)(param_1 + 0x42c4c));
  if (*(int *)(param_1 + 0x88) == 0) {
    iVar13 = *(int *)(param_1 + 0x42018);
  }
  else {
    iVar13 = *(int *)(param_1 + 0x44c64);
  }
  iVar6 = 100;
  if (*(int *)(param_1 + 0x48) < 100) {
    iVar6 = *(int *)(param_1 + 0x48);
  }
  iVar4 = FUN_1800108a0(param_1);
  iVar7 = *(int *)(param_1 + 0x4202c);
  puVar1 = (ulonglong *)(param_1 + 0x4284c);
  iVar12 = 0x3ff;
  uVar5 = (uint)((iVar13 - *(int *)(param_1 + 0x42030)) * 0x3ff) /
          (uint)(iVar7 - *(int *)(param_1 + 0x42030));
  iVar15 = -100;
  if (-100 < iVar6) {
    iVar15 = iVar6;
  }
  iVar6 = (iVar7 - iVar13) * 0xff;
  uVar11 = (iVar15 * 0xff) / 200 + 0xffU >> 2;
  uVar10 = (longlong)iVar6 % (longlong)iVar4 & 0xffffffff;
  piVar16 = (int *)(param_1 + 0x43c48);
  iVar15 = *piVar16;
  iVar6 = iVar6 / iVar4 + uVar11;
  if (0xff < iVar6) {
    iVar6 = 0xff;
  }
  if (iVar6 == 0xff) {
    for (; ((iVar15 < (int)(uVar3 >> 8) && ((int)(uVar5 + 1) < iVar12)) &&
           (uVar2 = (int)((0xff - uVar11) * iVar4) / 0xff, uVar10 = (ulonglong)uVar2,
           (int)uVar2 < iVar7 - iVar13)); iVar7 = iVar7 / 0x3ff + *(int *)(param_1 + 0x42030)) {
      iVar15 = iVar15 + piVar16[-1];
      iVar12 = iVar12 + -1;
      piVar16 = piVar16 + -1;
      iVar7 = (*(int *)(param_1 + 0x4202c) - *(int *)(param_1 + 0x42030)) * iVar12;
      uVar10 = (ulonglong)((longlong)iVar7 * -0x7fdff7fd) >> 0x20;
    }
  }
  lVar14 = (longlong)iVar12;
  if ((int)uVar5 < lVar14) {
    lVar8 = (longlong)(int)uVar5;
    iVar13 = 0;
    do {
      lVar9 = lVar8 + 1;
      uVar10 = (longlong)iVar13 % (longlong)(int)(iVar12 - uVar5) & 0xffffffff;
      *(char *)(lVar8 + (longlong)puVar1) = (char)(iVar13 / (int)(iVar12 - uVar5)) + (char)uVar11;
      lVar8 = lVar9;
      iVar13 = iVar13 + (iVar6 - uVar11);
    } while (lVar9 < lVar14);
  }
  if (lVar14 < 0x400) {
    FUN_1800357d0((ulonglong *)(lVar14 + (longlong)puVar1),CONCAT71((int7)(uVar10 >> 8),0xff),
                  0x400 - lVar14);
  }
  iVar13 = iVar12 + -1;
  lVar14 = (longlong)iVar13;
  if (-1 < iVar13) {
    iVar7 = (iVar6 - uVar11) * (iVar13 - uVar5);
    do {
      iVar15 = iVar7 / (int)(iVar12 - uVar5) + uVar11;
      if (iVar15 < 1) {
        FUN_1800357d0(puVar1,0,(longlong)(iVar13 + 1));
        return;
      }
      *(char *)(lVar14 + (longlong)puVar1) = (char)iVar15;
      iVar13 = iVar13 + -1;
      iVar7 = iVar7 + (uVar11 - iVar6);
      lVar14 = lVar14 + -1;
    } while (-1 < lVar14);
  }
  return;
}


==================================================================

### EXPORT FUNC 180011ee0 (3137 bytes) name=FUN_180011ee0

/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

void FUN_180011ee0(longlong param_1,ushort *param_2)

{
  ulonglong *puVar1;
  uint *puVar2;
  bool bVar3;
  int iVar4;
  uint uVar5;
  int iVar6;
  int iVar7;
  DWORD DVar8;
  int iVar9;
  int iVar10;
  ulonglong uVar11;
  uint uVar12;
  uint *puVar14;
  ulonglong uVar15;
  ushort uVar16;
  uint uVar17;
  int iVar18;
  ulonglong uVar19;
  longlong lVar20;
  uint uVar21;
  int iVar22;
  int iVar23;
  longlong lVar24;
  longlong lVar25;
  int iVar26;
  uint local_res8;
  uint local_1038 [1024];
  ulonglong uVar13;
  
  local_1038[0x3fe] = 0x80011efa;
  local_1038[0x3ff] = 1;
  puVar1 = (ulonglong *)(param_1 + 0x42c4c);
  puVar2 = (uint *)(param_1 + 0x43c4c);
  uVar5 = FUN_180011950(param_1,param_2,puVar1);
  bVar3 = true;
  lVar24 = 0x155;
  uVar21 = uVar5 >> 0xc;
  puVar14 = (uint *)(param_1 + 0x42c50);
  if (uVar21 == 0) {
    uVar21 = 1;
  }
  do {
    puVar14[-1] = *puVar14 + puVar14[-1] >> 1;
    *puVar14 = puVar14[1] + *puVar14 >> 1;
    lVar24 = lVar24 + -1;
    puVar14[1] = puVar14[2] + puVar14[1] >> 1;
    puVar14 = puVar14 + 3;
  } while (lVar24 != 0);
  *(undefined4 *)(param_1 + 0x43c48) = *(undefined4 *)(param_1 + 0x43c44);
  if (*(int *)(param_1 + 0x88) == 0) {
    iVar18 = *(int *)(param_1 + 0x42018);
  }
  else {
    iVar18 = *(int *)(param_1 + 0x44c64);
  }
  uVar15 = 0;
  local_res8 = (uint)((iVar18 - *(int *)(param_1 + 0x42030)) * 0x3ff) /
               (uint)(*(int *)(param_1 + 0x4202c) - *(int *)(param_1 + 0x42030));
  iVar18 = 0;
  if (*(int *)(param_1 + 0x8c) != 0) {
    uVar11 = uVar15;
    uVar13 = uVar15;
    uVar19 = uVar15;
    do {
      uVar12 = (int)uVar13 + *(int *)((longlong)puVar1 + uVar11 * 4);
      uVar13 = (ulonglong)uVar12;
      uVar17 = (uint)uVar19;
      if (uVar5 * 3 >> 2 <= uVar12) {
        if ((int)local_res8 < (int)uVar17) {
          local_res8 = uVar17;
        }
        break;
      }
      uVar11 = uVar11 + 1;
      uVar19 = (ulonglong)(uVar17 + 1);
    } while ((longlong)uVar11 < 0x400);
  }
  lVar24 = (longlong)(int)local_res8;
  if (-1 < (int)local_res8) {
    uVar11 = uVar15;
    puVar14 = puVar2 + lVar24;
    lVar20 = lVar24;
    uVar13 = uVar15;
    do {
      uVar5 = (int)uVar11 + *(int *)((longlong)puVar14 + ((longlong)puVar1 - (longlong)puVar2));
      uVar11 = (ulonglong)uVar5;
      if (uVar21 <= uVar5) {
        uVar13 = (ulonglong)((int)uVar13 + 0x100);
        uVar11 = uVar15;
      }
      lVar20 = lVar20 + -1;
      *puVar14 = ((0x10000 / uVar21) * (int)uVar11 >> 8) + (int)uVar13;
      puVar14 = puVar14 + -1;
    } while (-1 < lVar20);
  }
  lVar20 = (longlong)(int)(local_res8 + 1);
  if (lVar20 < 0x400) {
    lVar25 = 0x400 - lVar20;
    uVar11 = uVar15;
    uVar13 = uVar15;
    puVar14 = puVar2 + lVar20;
    do {
      uVar5 = (int)uVar11 + *(int *)((longlong)puVar14 + ((longlong)puVar1 - (longlong)puVar2));
      uVar11 = (ulonglong)uVar5;
      if (uVar5 < uVar21 * 8) {
        if (uVar21 <= uVar5) {
          uVar5 = (int)uVar13 + 0x100;
          goto LAB_18001209a;
        }
      }
      else {
        uVar5 = (int)uVar13 + 0x200;
LAB_18001209a:
        uVar13 = (ulonglong)uVar5;
        uVar11 = uVar15;
      }
      lVar25 = lVar25 + -1;
      *puVar14 = ((0x10000 / uVar21) * (int)uVar11 >> 8) + (int)uVar13;
      puVar14 = puVar14 + 1;
    } while (lVar25 != 0);
  }
  iVar23 = *(int *)(param_1 + 0x4c);
  uVar5 = *(int *)(param_1 + 0x24) * 1000;
  if (*(int *)(param_1 + 0x47950) == 0) {
    uVar5 = uVar5 >> ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
    uVar16 = (ushort)uVar5;
    if (0xffff < uVar5) {
      uVar16 = 0xffff;
    }
    uVar5 = (uint)uVar16;
    goto LAB_1800121bd;
  }
  iVar7 = uVar5 + 180000;
  iVar6 = (int)(iVar7 + (iVar7 >> 0x1f & 0xfffU)) >> 0xc;
  iVar10 = iVar18;
  if (iVar6 < 0) {
LAB_1800120f5:
    iVar6 = (iVar7 + iVar10 * -0x1000) * ((&DAT_180099004)[iVar10] - (&DAT_180099000)[iVar10]);
    iVar7 = (DAT_1800990ac - DAT_1800990b0) * 0xf20;
    iVar7 = ((((int)((iVar6 >> 0x1f & 0xfffU) + iVar6) >> 0xc) +
             ((int)(iVar7 + (iVar7 >> 0x1f & 0xfffU)) >> 0xc)) - DAT_1800990ac) +
            (&DAT_180099000)[iVar10];
  }
  else {
    if (0x285 < iVar6) {
      iVar10 = 0x285;
      goto LAB_1800120f5;
    }
    iVar10 = iVar6;
    if (iVar6 != 0x2b) goto LAB_1800120f5;
    iVar7 = (DAT_1800990b0 - DAT_1800990ac) * uVar5;
    iVar7 = (int)((iVar7 >> 0x1f & 0xfffU) + iVar7) >> 0xc;
  }
  uVar5 = iVar7 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
  if (0xffff < (int)uVar5) {
    uVar5 = 0xffff;
  }
LAB_1800121bd:
  if (iVar23 < 0) {
    iVar7 = -0x51eb851f;
    if (iVar23 < -100) {
      iVar23 = -100;
    }
  }
  else {
    iVar7 = -0x1b4e81b5;
    if (100 < iVar23) {
      iVar23 = 100;
    }
  }
  iVar23 = (int)((ulonglong)((longlong)iVar7 * (longlong)(int)((uVar5 & 0xffff) * iVar23)) >> 0x20);
  uVar5 = (uVar5 & 0xffff) + ((iVar23 >> 4) - (iVar23 >> 0x1f));
  if (((*(int *)(param_1 + 0x41340) != 0) && (_DAT_180057598 < *(float *)(param_1 + 0x9c))) &&
     ((*(int *)(param_1 + 0x41558) == 1 ||
      ((*(int *)(param_1 + 0x41558) == 2 &&
       (*(int *)(param_1 + 0x41568) - *(int *)(param_1 + 0x41564) == 50000)))))) {
    uVar5 = uVar5 + (int)(((float)(int)((*(int *)(param_1 + 0x54) -
                                        (*(int *)(param_1 + 0x41568) + *(int *)(param_1 + 0x41564))
                                        / 2) * uVar5) * *(float *)(param_1 + 0x9c)) / _DAT_18005e820
                         );
  }
  iVar23 = *(int *)(param_1 + 0x42030);
  uVar12 = *(int *)(param_1 + 0x4202c) - iVar23;
  uVar21 = 0x80;
  if (0x80 < (int)uVar5) {
    uVar21 = uVar5;
  }
  uVar21 = (uVar12 * 0x10) / uVar21;
  if (uVar21 == 0) {
    uVar21 = 1;
  }
  else if (0x200 < uVar21) {
    uVar21 = 0x200;
  }
  uVar5 = uVar21 * 0x1800;
  uVar11 = uVar15;
  do {
    uVar17 = 1;
    if (uVar5 >> 0xd != 0) {
      uVar17 = uVar5 >> 0xd;
    }
    uVar5 = uVar5 + uVar21 * 4;
    local_1038[uVar11] = uVar17;
    uVar11 = uVar11 + 1;
  } while ((longlong)uVar11 < 0x400);
  iVar10 = 0x332;
  iVar7 = 100;
  if (*(int *)(param_1 + 0x48) < 100) {
    iVar7 = *(int *)(param_1 + 0x48);
  }
  iVar6 = -100;
  if (-100 < iVar7) {
    iVar6 = iVar7;
  }
  iVar6 = (iVar6 * 0x155) / 200;
  iVar7 = iVar6 + 0x155;
  iVar26 = iVar7;
  if (0x331 < iVar6 + 0x156) {
    iVar26 = 0x330;
  }
  iVar6 = *(int *)(param_1 + 0x42014);
  iVar22 = (int)(0xffc00000 / (ulonglong)uVar12);
  iVar9 = *(int *)(param_1 + 0x42010);
  if (iVar26 + 1 < 0x332) {
    do {
      iVar7 = (iVar10 + iVar26) / 2;
      if (bVar3) {
        bVar3 = false;
        iVar7 = iVar26;
      }
      uVar5 = *puVar2;
      if (uVar5 != 0) {
        uVar21 = iVar7 * 0x10 + 0x10;
        for (lVar20 = lVar24; -1 < lVar20; lVar20 = lVar20 + -1) {
          uVar12 = (iVar7 * 0x10 + 0x10) -
                   (puVar2[lVar20] * ((iVar7 * 0x40000 + 0x40000U) / uVar5) >> 0xe);
          if (local_1038[lVar20] < uVar21 - uVar12) {
            uVar12 = uVar21 - local_1038[lVar20];
          }
          *(char *)(lVar20 + 0x4284c + param_1) = (char)(uVar12 >> 6);
          uVar21 = uVar12;
        }
      }
      uVar5 = *(uint *)(param_1 + 0x44c48);
      if (uVar5 != 0) {
        uVar21 = iVar7 * 0x10;
        lVar20 = lVar24;
        while (lVar25 = lVar20 + 1, lVar25 < 0x400) {
          uVar12 = (puVar2[lVar25] * ((iVar7 * -0x40000 + 0xffc0000U) / uVar5) >> 0xe) +
                   iVar7 * 0x10;
          if (local_1038[lVar25] < uVar12 - uVar21) {
            uVar12 = local_1038[lVar25] + uVar21;
          }
          *(char *)(lVar20 + 0x4284d + param_1) = (char)(uVar12 >> 6);
          uVar21 = uVar12;
          lVar20 = lVar25;
        }
      }
      iVar4 = iVar7;
      if ((*(char *)((ulonglong)((uint)((iVar6 - iVar23) * iVar22) >> 0x16) + 0x4284c + param_1) ==
           '\0') &&
         (*(char *)((ulonglong)((uint)((iVar9 - iVar23) * iVar22) >> 0x16) + 0x4284c + param_1) !=
          -1)) {
        iVar4 = iVar10;
        iVar26 = iVar7;
      }
      iVar10 = iVar4;
    } while (iVar26 + 1 < iVar10);
  }
  DVar8 = GetTickCount();
  if ((((DVar8 - *(int *)(param_1 + 0x44c6c) < 0x78) &&
       (*(int *)(param_1 + 0x44c70) == *(int *)(param_1 + 0x4c))) &&
      (*(int *)(param_1 + 0x44c74) == *(int *)(param_1 + 0x48))) &&
     ((uVar5 = *(int *)(param_1 + 0x44c78) - local_res8, uVar21 = (int)uVar5 >> 0x1f,
      (int)((uVar5 ^ uVar21) - uVar21) < 0xb &&
      (uVar5 = *(int *)(param_1 + 0x44c7c) - iVar7, uVar21 = (int)uVar5 >> 0x1f,
      1 < (int)((uVar5 ^ uVar21) - uVar21))))) {
    iVar23 = *(int *)(param_1 + 0x47928);
    uVar5 = *(int *)(param_1 + 0x42018) - *(int *)(param_1 + 0x44c88);
    uVar21 = (int)uVar5 >> 0x1f;
    uVar21 = (uVar5 ^ uVar21) - uVar21;
    if (*(int *)(param_1 + 0x47950) == 0) {
      iVar23 = (uVar21 & 0xffff) << ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
    }
    else {
      iVar10 = iVar23 + 150000;
      uVar5 = (uVar21 & 0xffff) << (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
      iVar6 = (int)(iVar10 + (iVar10 >> 0x1f & 0xfffU)) >> 0xc;
      if ((-1 < iVar6) && (iVar18 = iVar6, 0x285 < iVar6)) {
        iVar18 = 0x285;
      }
      iVar6 = (&DAT_180099000)[iVar18];
      iVar26 = (&DAT_180099004)[iVar18] - iVar6;
      if ((iVar26 < (int)(((uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f)) * 2)) &&
         ((iVar26 = (iVar10 + iVar18 * -0x1000) * iVar26,
          iVar10 = iVar6 + ((int)(iVar26 + (iVar26 >> 0x1f & 0xfffU)) >> 0xc) + uVar5,
          iVar10 < iVar6 || ((int)(&DAT_180099004)[iVar18] < iVar10)))) {
        uVar5 = 0x286;
        uVar11 = uVar15;
        do {
          uVar21 = (int)(uVar5 + (int)uVar11) >> 1;
          if ((int)(&DAT_180099000)[(int)uVar21] <= iVar10) {
            uVar11 = (ulonglong)uVar21;
            uVar21 = uVar5;
          }
          uVar5 = uVar21;
          iVar18 = (int)uVar11;
        } while (iVar18 + 1U < uVar5);
        iVar10 = iVar10 - (&DAT_180099000)[iVar18];
        if (DAT_180073748 < iVar10) {
          iVar23 = ((int)((longlong)(int)(&DAT_180099a20)[iVar18] * (longlong)iVar10 >> 0xc) +
                    -150000 + iVar18 * 0x1000) - iVar23;
        }
        else {
          iVar23 = (((&DAT_180099a20)[iVar18] * iVar10 >> 0xc) + -150000 + iVar18 * 0x1000) - iVar23
          ;
        }
      }
      else {
        iVar23 = (int)((&DAT_180099a20)[iVar18] * uVar5) >> 0xc;
      }
    }
    iVar18 = *(int *)(param_1 + 0x47920);
    uVar5 = *(int *)(param_1 + 0x42010) - *(int *)(param_1 + 0x44c80);
    uVar21 = (int)uVar5 >> 0x1f;
    uVar21 = (uVar5 ^ uVar21) - uVar21;
    iVar10 = 0;
    if (*(int *)(param_1 + 0x47950) == 0) {
      iVar18 = (uVar21 & 0xffff) << ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
    }
    else {
      iVar6 = iVar18 + 150000;
      uVar5 = (uVar21 & 0xffff) << (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
      iVar9 = (int)(iVar6 + (iVar6 >> 0x1f & 0xfffU)) >> 0xc;
      iVar26 = iVar10;
      if ((-1 < iVar9) && (iVar26 = iVar9, 0x285 < iVar9)) {
        iVar26 = 0x285;
      }
      iVar9 = (&DAT_180099000)[iVar26];
      iVar22 = (&DAT_180099004)[iVar26] - iVar9;
      if ((iVar22 < (int)(((uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f)) * 2)) &&
         ((iVar22 = (iVar6 + iVar26 * -0x1000) * iVar22,
          iVar6 = iVar9 + ((int)(iVar22 + (iVar22 >> 0x1f & 0xfffU)) >> 0xc) + uVar5, iVar6 < iVar9
          || ((int)(&DAT_180099004)[iVar26] < iVar6)))) {
        uVar5 = 0x286;
        uVar11 = uVar15;
        do {
          uVar21 = (int)(uVar5 + (int)uVar11) >> 1;
          if ((int)(&DAT_180099000)[(int)uVar21] <= iVar6) {
            uVar11 = (ulonglong)uVar21;
            uVar21 = uVar5;
          }
          uVar5 = uVar21;
          iVar26 = (int)uVar11;
        } while (iVar26 + 1U < uVar5);
        iVar6 = iVar6 - (&DAT_180099000)[iVar26];
        if (DAT_180073748 < iVar6) {
          iVar18 = ((int)((longlong)(int)(&DAT_180099a20)[iVar26] * (longlong)iVar6 >> 0xc) +
                    -150000 + iVar26 * 0x1000) - iVar18;
        }
        else {
          iVar18 = (((&DAT_180099a20)[iVar26] * iVar6 >> 0xc) + -150000 + iVar26 * 0x1000) - iVar18;
        }
      }
      else {
        iVar18 = (int)((&DAT_180099a20)[iVar26] * uVar5) >> 0xc;
      }
    }
    uVar5 = *(int *)(param_1 + 0x42014) - *(int *)(param_1 + 0x44c84);
    uVar21 = (int)uVar5 >> 0x1f;
    uVar21 = (uVar5 ^ uVar21) - uVar21;
    if (*(int *)(param_1 + 0x47950) == 0) {
      iVar10 = (uVar21 & 0xffff) << ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
    }
    else {
      iVar6 = *(int *)(param_1 + 0x47924) + 150000;
      uVar5 = (uVar21 & 0xffff) << (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
      iVar26 = (int)(iVar6 + (iVar6 >> 0x1f & 0xfffU)) >> 0xc;
      if ((-1 < iVar26) && (iVar10 = iVar26, 0x285 < iVar26)) {
        iVar10 = 0x285;
      }
      iVar26 = (&DAT_180099000)[iVar10];
      iVar9 = (&DAT_180099004)[iVar10] - iVar26;
      if ((iVar9 < (int)(((uVar5 ^ (int)uVar5 >> 0x1f) - ((int)uVar5 >> 0x1f)) * 2)) &&
         ((iVar9 = (iVar6 + iVar10 * -0x1000) * iVar9,
          iVar6 = iVar26 + ((int)(iVar9 + (iVar9 >> 0x1f & 0xfffU)) >> 0xc) + uVar5, iVar6 < iVar26
          || ((int)(&DAT_180099004)[iVar10] < iVar6)))) {
        uVar5 = 0x286;
        do {
          uVar21 = (int)(uVar5 + (int)uVar15) >> 1;
          if ((int)(&DAT_180099000)[(int)uVar21] <= iVar6) {
            uVar15 = (ulonglong)uVar21;
            uVar21 = uVar5;
          }
          uVar5 = uVar21;
          iVar10 = (int)uVar15;
        } while (iVar10 + 1U < uVar5);
        iVar6 = iVar6 - (&DAT_180099000)[iVar10];
        if (DAT_180073748 < iVar6) {
          iVar10 = ((int)((longlong)(int)(&DAT_180099a20)[iVar10] * (longlong)iVar6 >> 0xc) +
                    -150000 + iVar10 * 0x1000) - *(int *)(param_1 + 0x47924);
        }
        else {
          iVar10 = (((&DAT_180099a20)[iVar10] * iVar6 >> 0xc) + -150000 + iVar10 * 0x1000) -
                   *(int *)(param_1 + 0x47924);
        }
      }
      else {
        iVar10 = (int)((&DAT_180099a20)[iVar10] * uVar5) >> 0xc;
      }
    }
    iVar18 = iVar10 + iVar23 * 2 + iVar18;
    if (iVar18 < 0x9c4) {
      if (iVar18 < 100) {
        iVar18 = 100;
      }
      puVar2 = (uint *)(param_1 + 0x43c4c);
      iVar7 = (iVar18 * iVar7 + *(int *)(param_1 + 0x44c7c) * 500) / (iVar18 + 500);
      uVar5 = *puVar2;
      if (uVar5 != 0) {
        uVar21 = iVar7 * 0x10 + 0x10;
        lVar24 = (longlong)(int)local_res8;
        if (-1 < (int)local_res8) {
          do {
            uVar12 = (iVar7 * 0x10 + 0x10) -
                     (puVar2[lVar24] * ((iVar7 * 0x40000 + 0x40000U) / uVar5) >> 0xe);
            if (local_1038[lVar24] < uVar21 - uVar12) {
              uVar12 = uVar21 - local_1038[lVar24];
            }
            lVar20 = lVar24 + -1;
            *(char *)(lVar24 + 0x4284c + param_1) = (char)(uVar12 >> 6);
            lVar24 = lVar20;
            uVar21 = uVar12;
          } while (-1 < lVar20);
        }
      }
      uVar5 = *(uint *)(param_1 + 0x44c48);
      if (uVar5 != 0) {
        uVar21 = iVar7 * 0x10;
        for (lVar24 = (longlong)(int)(local_res8 + 1); lVar24 < 0x400; lVar24 = lVar24 + 1) {
          uVar12 = (puVar2[lVar24] * ((iVar7 * -0x40000 + 0xffc0000U) / uVar5) >> 0xe) +
                   iVar7 * 0x10;
          if (local_1038[lVar24] < uVar12 - uVar21) {
            uVar12 = local_1038[lVar24] + uVar21;
          }
          *(char *)(lVar24 + 0x4284c + param_1) = (char)(uVar12 >> 6);
          uVar21 = uVar12;
        }
      }
    }
  }
  *(int *)(param_1 + 0x44c7c) = iVar7;
  *(DWORD *)(param_1 + 0x44c6c) = DVar8;
  *(undefined4 *)(param_1 + 0x44c70) = *(undefined4 *)(param_1 + 0x4c);
  *(undefined4 *)(param_1 + 0x44c74) = *(undefined4 *)(param_1 + 0x48);
  *(uint *)(param_1 + 0x44c78) = local_res8;
  *(undefined4 *)(param_1 + 0x44c80) = *(undefined4 *)(param_1 + 0x42010);
  *(undefined4 *)(param_1 + 0x44c84) = *(undefined4 *)(param_1 + 0x42014);
  *(undefined4 *)(param_1 + 0x44c88) = *(undefined4 *)(param_1 + 0x42018);
  return;
}


==================================================================

### EXPORT FUNC 180012b30 (1415 bytes) name=FUN_180012b30

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8 FUN_180012b30(longlong param_1,int param_2,short *param_3)

{
  LPCWSTR pWVar1;
  int *piVar2;
  LPCRITICAL_SECTION lpCriticalSection;
  short sVar3;
  undefined **ppuVar4;
  longlong lVar5;
  HMODULE pHVar6;
  LPVOID _Dst;
  longlong *plVar7;
  wchar_t *pwVar8;
  undefined8 uVar9;
  int iVar10;
  short *psVar11;
  LPCWSTR pWVar12;
  void *_Src;
  uint uVar13;
  void *pvVar14;
  undefined1 auStackY_488 [32];
  LPCWSTR local_448;
  short *local_440;
  CFile local_438 [32];
  undefined2 local_418;
  int local_416;
  undefined2 local_412;
  undefined2 local_410;
  undefined4 local_40e;
  longlong local_408;
  __time64_t local_400;
  LPVOID local_3f8;
  undefined8 local_3f0;
  undefined8 local_3e0 [3];
  CDialog local_3c8 [912];
  ulonglong local_38;
  
  local_3f0 = 0xfffffffffffffffe;
  local_38 = DAT_18006cea0 ^ (ulonglong)auStackY_488;
  ppuVar4 = FUN_18001fcc0();
  if (ppuVar4 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar5 = (**(code **)(*ppuVar4 + 0x18))();
  pWVar12 = (LPCWSTR)(lVar5 + 0x18);
  local_448 = pWVar12;
  if (param_3 == (short *)0x0) {
    iVar10 = 0;
  }
  else {
    if (((ulonglong)param_3 & 0xffffffffffff0000) == 0) {
      pHVar6 = (HMODULE)FUN_18001fcac();
      if (pHVar6 != (HMODULE)0x0) {
        FUN_18000af50((longlong *)&local_448,pHVar6,(uint)param_3 & 0xffff);
        pWVar12 = local_448;
      }
      goto LAB_180012c12;
    }
    lVar5 = -1;
    psVar11 = param_3;
    do {
      if (lVar5 == 0) break;
      lVar5 = lVar5 + -1;
      sVar3 = *psVar11;
      psVar11 = psVar11 + 1;
    } while (sVar3 != 0);
    iVar10 = ~(uint)lVar5 - 1;
  }
  FUN_18000b480((longlong *)&local_448,param_3,iVar10);
  pWVar12 = local_448;
LAB_180012c12:
  FUN_180020138((undefined8 *)local_438);
  lpCriticalSection = (LPCRITICAL_SECTION)(param_1 + 0x238);
  EnterCriticalSection(lpCriticalSection);
  if ((*(int *)(param_1 + 0x228) == 0) || (*(int *)(param_1 + 0x234) == 0)) {
    LeaveCriticalSection(lpCriticalSection);
    SetLastError(0xe4ae0006);
    FUN_1800203a4(local_438);
    LOCK();
    pWVar1 = pWVar12 + -4;
    iVar10 = *(int *)pWVar1;
    *(int *)pWVar1 = *(int *)pWVar1 + -1;
    UNLOCK();
    if (iVar10 + -1 < 1) {
      (**(code **)(**(longlong **)(pWVar12 + -0xc) + 8))();
    }
    uVar9 = 0;
  }
  else {
    if (param_2 == 0) {
      uVar13 = *(uint *)(param_1 + 0x47938);
      pvVar14 = (void *)(param_1 + 0x6c8);
      if (*(int *)(param_1 + 0x4203c) == 0) {
        FUN_180010e80(param_1);
      }
      _Src = *(void **)(param_1 + 0x2a0);
    }
    else if (param_2 == 1) {
      uVar13 = *(uint *)(param_1 + 0x4793c);
      pvVar14 = (void *)(param_1 + 0xaf0);
      _Src = *(void **)(param_1 + 0x220);
    }
    else {
      if (param_2 != 2) {
        LeaveCriticalSection(lpCriticalSection);
        SetLastError(0xe4ae0001);
        FUN_1800203a4(local_438);
        LOCK();
        pWVar1 = pWVar12 + -4;
        iVar10 = *(int *)pWVar1;
        *(int *)pWVar1 = *(int *)pWVar1 + -1;
        UNLOCK();
        if (iVar10 + -1 < 1) {
          (**(code **)(**(longlong **)(pWVar12 + -0xc) + 8))();
        }
        return 0;
      }
      uVar13 = *(uint *)(param_1 + 0x47940);
      pvVar14 = (void *)(param_1 + 0xf18);
      _Src = *(void **)(param_1 + 0x2b0);
    }
    if (_Src == (void *)0x0) {
      LeaveCriticalSection(lpCriticalSection);
      SetLastError(0xe4ae0003);
      FUN_1800203a4(local_438);
      LOCK();
      pWVar1 = pWVar12 + -4;
      iVar10 = *(int *)pWVar1;
      *(int *)pWVar1 = *(int *)pWVar1 + -1;
      UNLOCK();
      if (iVar10 + -1 < 1) {
        (**(code **)(**(longlong **)(pWVar12 + -0xc) + 8))();
      }
      uVar9 = 0;
    }
    else {
      _Dst = thunk_FUN_18001eb74((ulonglong)uVar13);
      local_3f8 = _Dst;
      if (_Dst == (LPVOID)0x0) {
        LeaveCriticalSection(lpCriticalSection);
        SetLastError(0xe4ae0002);
        FUN_1800203a4(local_438);
        LOCK();
        pWVar1 = pWVar12 + -4;
        iVar10 = *(int *)pWVar1;
        *(int *)pWVar1 = *(int *)pWVar1 + -1;
        UNLOCK();
        if (iVar10 + -1 < 1) {
          (**(code **)(**(longlong **)(pWVar12 + -0xc) + 8))();
        }
        uVar9 = 0;
      }
      else {
        memcpy(_Dst,_Src,(ulonglong)uVar13);
        LeaveCriticalSection(lpCriticalSection);
        if (*(int *)(pWVar12 + -8) == 0) {
          local_400 = _time64((__time64_t *)0x0);
          FUN_18001ab70(&local_400,(longlong *)&local_440,L"%Y-%m-%d %H-%M-%S");
          FUN_18001f670(local_3c8,0,&DAT_18006e9f8,local_440,6,
                        u_Bitmap_Files___bmp____bmp_All_Fi_18006ea00,(CWnd *)0x0,0);
          lVar5 = FUN_18001f450(local_3c8);
          if (lVar5 != 1) {
            thunk_FUN_180034a70(_Dst);
            FUN_18001f5c8((CWnd *)local_3c8);
            LOCK();
            piVar2 = (int *)(local_440 + -4);
            iVar10 = *piVar2;
            *piVar2 = *piVar2 + -1;
            UNLOCK();
            if (iVar10 + -1 < 1) {
              (**(code **)(**(longlong **)(local_440 + -0xc) + 8))();
            }
            FUN_1800203a4(local_438);
            LOCK();
            pWVar12 = local_448 + -4;
            iVar10 = *(int *)pWVar12;
            *(int *)pWVar12 = *(int *)pWVar12 + -1;
            UNLOCK();
            if (iVar10 + -1 < 1) {
              (**(code **)(**(longlong **)(local_448 + -0xc) + 8))();
            }
            return 0;
          }
          plVar7 = FUN_18001f980((longlong)local_3c8,&local_408);
          FUN_18000b390((longlong *)&local_448,plVar7);
          LOCK();
          piVar2 = (int *)(local_408 + -8);
          iVar10 = *piVar2;
          *piVar2 = *piVar2 + -1;
          UNLOCK();
          if (iVar10 + -1 < 1) {
            (**(code **)(**(longlong **)(local_408 + -0x18) + 8))();
          }
          pWVar12 = local_448;
          if (((*(int *)(local_448 + -8) < 1) ||
              (pwVar8 = wcschr(local_448,L'.'), pwVar8 == (wchar_t *)0x0)) ||
             ((int)((longlong)pwVar8 - (longlong)pWVar12 >> 1) == -1)) {
            FUN_18001aaa0((longlong *)&local_448,L".bmp");
          }
          FUN_18001f5c8((CWnd *)local_3c8);
          LOCK();
          piVar2 = (int *)(local_440 + -4);
          iVar10 = *piVar2;
          *piVar2 = *piVar2 + -1;
          UNLOCK();
          pWVar12 = local_448;
          if (iVar10 + -1 < 1) {
            (**(code **)(**(longlong **)(local_440 + -0xc) + 8))();
            pWVar12 = local_448;
          }
        }
        uVar9 = FUN_180020a6c((longlong)local_438,pWVar12,0x1021,0);
        if ((int)uVar9 == 0) {
          thunk_FUN_180034a70(_Dst);
          SetLastError(0xe4ae0009);
          FUN_1800203a4(local_438);
          LOCK();
          pWVar1 = pWVar12 + -4;
          iVar10 = *(int *)pWVar1;
          *(int *)pWVar1 = *(int *)pWVar1 + -1;
          UNLOCK();
          if (iVar10 + -1 < 1) {
            (**(code **)(**(longlong **)(pWVar12 + -0xc) + 8))();
          }
          uVar9 = 0;
        }
        else {
          local_418 = 0x4d42;
          local_416 = uVar13 + 0x436;
          local_412 = 0;
          local_410 = 0;
          local_40e = 0x436;
          FUN_18001ef2c(local_3e0);
          CFile::Write(local_438,&local_418,0xe);
          CFile::Write(local_438,pvVar14,0x428);
          CFile::Write(local_438,_Dst,uVar13);
          FUN_18001ef94();
          CFile::Close(local_438);
          thunk_FUN_180034a70(_Dst);
          FUN_1800203a4(local_438);
          LOCK();
          pWVar1 = pWVar12 + -4;
          iVar10 = *(int *)pWVar1;
          *(int *)pWVar1 = *(int *)pWVar1 + -1;
          UNLOCK();
          if (iVar10 + -1 < 1) {
            (**(code **)(**(longlong **)(pWVar12 + -0xc) + 8))();
          }
          uVar9 = 1;
        }
      }
    }
  }
  return uVar9;
}


==================================================================

### EXPORT FUNC 1800130f0 (24 bytes) name=Unwind@1800130f0

void Unwind_1800130f0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 180013110 (24 bytes) name=Unwind@180013110

void Unwind_180013110(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 180013130 (24 bytes) name=Unwind@180013130

void Unwind_180013130(undefined8 param_1,longlong param_2)

{
  FUN_1800203a4((CFile *)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 180013150 (24 bytes) name=Unwind@180013150

void Unwind_180013150(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x48));
  return;
}


==================================================================

### EXPORT FUNC 180013170 (27 bytes) name=Unwind@180013170

void Unwind_180013170(undefined8 param_1,longlong param_2)

{
  FUN_18001f5c8((CWnd *)(param_2 + 0xc0));
  return;
}


==================================================================

### EXPORT FUNC 180013190 (27 bytes) name=Unwind@180013190

void Unwind_180013190(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x80));
  return;
}


==================================================================

### EXPORT FUNC 1800131b0 (27 bytes) name=Unwind@1800131b0

void Unwind_1800131b0(void)

{
  thunk_FUN_18001ef94();
  return;
}


==================================================================

### EXPORT FUNC 1800131d0 (75 bytes) name=Catch@1800131d0

undefined * Catch_1800131d0(undefined8 param_1,longlong param_2)

{
  *(undefined8 *)(param_2 + 0xb0) = *(undefined8 *)(param_2 + 0xa0);
  CFile::Close((CFile *)(param_2 + 0x50));
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x90));
  SetLastError(0xe4ae0009);
  return &DAT_180013050;
}


==================================================================

### EXPORT FUNC 180013220 (738 bytes) name=FUN_180013220

undefined8
FUN_180013220(longlong param_1,uint param_2,uint param_3,uint param_4,uint param_5,int *param_6)

{
  ushort uVar1;
  int iVar2;
  uint uVar3;
  DWORD dwErrCode;
  uint uVar4;
  longlong lVar5;
  uint uVar6;
  ulonglong uVar7;
  uint uVar8;
  ulonglong uVar9;
  ulonglong uVar10;
  ulonglong uVar11;
  ushort *puVar12;
  ulonglong uVar13;
  uint uVar14;
  uint uVar15;
  ulonglong uVar16;
  
  if (((((*(int *)(param_1 + 0x234) != 0) && (param_2 <= param_4)) &&
       (uVar15 = *(uint *)(param_1 + 0x41fc0), param_4 < uVar15)) &&
      ((param_3 <= param_5 && (param_5 < *(uint *)(param_1 + 0x41fc4))))) && (param_6 != (int *)0x0)
     ) {
    uVar7 = 0;
    uVar14 = 0xffffffff;
    if (((param_2 == 0) && (param_3 == 0)) &&
       ((param_4 == uVar15 - 1 && (param_5 == *(uint *)(param_1 + 0x41fc4) - 1)))) {
      uVar14 = *(uint *)(param_1 + 0x42014);
      uVar11 = (ulonglong)*(uint *)(param_1 + 0x47938) * (longlong)*(int *)(param_1 + 0x42018);
      uVar6 = *(uint *)(param_1 + 0x42010);
      uVar3 = *(uint *)(param_1 + 0x42024);
      uVar8 = *(uint *)(param_1 + 0x42020);
    }
    else {
      lVar5 = *(longlong *)(param_1 + 0x270);
      uVar15 = *(int *)(param_1 + 0x41fc0) * param_3;
      uVar16 = (ulonglong)((param_5 - param_3) + 1);
      uVar9 = uVar7;
      uVar10 = uVar7;
      uVar11 = uVar7;
      do {
        puVar12 = (ushort *)(lVar5 + ((ulonglong)uVar15 + (ulonglong)param_2) * 2);
        uVar4 = uVar15 + param_2;
        uVar13 = (ulonglong)((param_4 - param_2) + 1);
        do {
          uVar1 = *puVar12;
          puVar12 = puVar12 + 1;
          uVar11 = uVar11 + uVar1;
          uVar3 = (uint)uVar1;
          if ((uint)uVar7 < (uint)uVar1) {
            uVar7 = (ulonglong)uVar3;
            uVar9 = (ulonglong)uVar4;
          }
          uVar6 = (uint)uVar7;
          uVar8 = (uint)uVar9;
          if (uVar3 < uVar14) {
            uVar10 = (ulonglong)uVar4;
            uVar14 = uVar3;
          }
          uVar3 = (uint)uVar10;
          uVar4 = uVar4 + 1;
          uVar13 = uVar13 - 1;
        } while (uVar13 != 0);
        lVar5 = *(longlong *)(param_1 + 0x270);
        uVar15 = uVar15 + *(int *)(param_1 + 0x41fc0);
        uVar16 = uVar16 - 1;
      } while (uVar16 != 0);
      uVar15 = *(uint *)(param_1 + 0x41fc0);
    }
    iVar2 = FUN_180016290(param_1,uVar14 & 0xffff,uVar3,1);
    *param_6 = iVar2;
    iVar2 = FUN_180016290(param_1,uVar6 & 0xffff,uVar8,1);
    param_6[1] = iVar2;
    iVar2 = FUN_180016290(param_1,(uint)((longlong)uVar11 /
                                        (longlong)
                                        (ulonglong)
                                        (((param_4 - param_2) + 1) * ((param_5 - param_3) + 1))),
                          ((param_3 + param_5) * uVar15 >> 1) + (param_2 + param_4 >> 1),1);
    param_6[2] = iVar2;
    param_6[3] = uVar3;
    param_6[4] = uVar8;
    if (*(int *)(param_1 + 0x78) != 0) {
      iVar2 = FUN_180015b90(param_1,*param_6,*(float *)(param_1 + 0xd4));
      *param_6 = iVar2;
      iVar2 = FUN_180015b90(param_1,param_6[1],*(float *)(param_1 + 0xd4));
      param_6[1] = iVar2;
      iVar2 = FUN_180015b90(param_1,param_6[2],*(float *)(param_1 + 0xd4));
      param_6[2] = iVar2;
    }
    iVar2 = *param_6;
    if (param_6[1] < iVar2) {
      param_6[1] = iVar2;
    }
    if (param_6[1] < param_6[2]) {
      param_6[2] = param_6[1];
    }
    if (param_6[2] < iVar2) {
      param_6[2] = iVar2;
    }
    return 1;
  }
  dwErrCode = 0xe4ae0001;
  if (*(int *)(param_1 + 0x234) == 0) {
    dwErrCode = 0xe4ae0005;
  }
  SetLastError(dwErrCode);
  return 0;
}


==================================================================

### EXPORT FUNC 180013510 (4003 bytes) name=FUN_180013510

undefined8
FUN_180013510(longlong param_1,uint param_2,uint param_3,uint param_4,uint param_5,int *param_6)

{
  int iVar1;
  ushort uVar2;
  longlong lVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  DWORD dwErrCode;
  uint uVar9;
  uint uVar10;
  int iVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  ushort *puVar15;
  uint uVar16;
  int iVar17;
  uint uVar18;
  longlong lVar19;
  uint uVar20;
  uint uVar21;
  ulonglong uVar22;
  ulonglong uVar23;
  ulonglong uVar24;
  uint uStack0000000000000038;
  uint local_c4;
  uint local_c0;
  uint local_bc;
  uint local_b8;
  uint local_b4;
  int local_ac;
  longlong local_a8;
  int local_a0;
  int local_84;
  int local_80;
  ulonglong local_68;
  
  if ((((*(int *)(param_1 + 0x234) == 0) || (param_4 <= param_2)) ||
      (*(uint *)(param_1 + 0x41fc0) <= param_4)) ||
     (((param_5 <= param_3 || (*(uint *)(param_1 + 0x41fc4) <= param_5)) || (param_6 == (int *)0x0))
     )) {
    dwErrCode = 0xe4ae0001;
    if (*(int *)(param_1 + 0x234) == 0) {
      dwErrCode = 0xe4ae0005;
    }
    SetLastError(dwErrCode);
    return 0;
  }
  local_b4 = 0;
  uVar8 = 0;
  lVar19 = 0;
  uVar20 = 0;
  uVar16 = param_4 - param_2;
  uVar10 = param_5 - param_3;
  uVar21 = 0xffffffff;
  local_c4 = 0;
  local_a8 = 0;
  uStack0000000000000038 = 0;
  local_b8 = 0;
  if (uVar16 < uVar10) {
    uVar23 = FUN_1800512c0((float)(int)(uVar10 * uVar10 - uVar16 * uVar16));
    lVar19 = *(longlong *)(param_1 + 0x270);
    uVar22 = (ulonglong)(uVar10 + 1);
    iVar4 = (int)((float)(param_3 + param_5) - (float)uVar23) / 2;
    iVar5 = param_3 - iVar4;
    uVar8 = *(int *)(param_1 + 0x41fc0) * param_3;
    uVar20 = uVar8 + 2 + param_2;
    iVar4 = iVar4 - (int)((float)uVar23 + (float)(param_3 + param_5)) / 2;
    do {
      iVar6 = 0;
      puVar15 = (ushort *)(lVar19 + ((ulonglong)uVar8 + (ulonglong)param_2) * 2);
      local_bc = param_2;
      if (3 < (int)(uVar16 + 1)) {
        uVar13 = param_2 * 2;
        uVar14 = (param_2 - param_4) + 4;
        uVar12 = local_c4;
        uVar18 = uVar20;
        do {
          uVar9 = uVar14 - 4;
          iVar7 = (uVar9 ^ (int)uVar9 >> 0x1f) - ((int)uVar9 >> 0x1f);
          iVar17 = iVar6;
          if (iVar6 < iVar7) {
            uVar23 = FUN_1800512c0((float)(uVar9 * uVar9 + iVar5 * iVar5 * 4));
            uVar24 = FUN_1800512c0((float)(uVar9 * uVar9 + (iVar4 + iVar5) * (iVar4 + iVar5) * 4));
            iVar17 = iVar7;
            if ((int)((float)uVar23 + (float)uVar24) <= (int)(uVar10 * 2)) goto LAB_180013ffc;
            if (param_2 + param_4 <= uVar13) goto LAB_180013e49;
          }
          else {
LAB_180013ffc:
            iVar6 = iVar17;
            uVar2 = *puVar15;
            uStack0000000000000038 = uStack0000000000000038 + 1;
            local_a8 = local_a8 + (ulonglong)uVar2;
            uVar9 = (uint)uVar2;
            if (uVar12 < uVar2) {
              local_b8 = uVar18 - 2;
              uVar12 = uVar9;
              local_c4 = uVar9;
            }
            if (uVar9 < uVar21) {
              local_b4 = uVar18 - 2;
              uVar21 = uVar9;
            }
          }
          uVar9 = uVar14 - 2;
          iVar7 = (uVar9 ^ (int)uVar9 >> 0x1f) - ((int)uVar9 >> 0x1f);
          iVar17 = iVar6;
          if (iVar6 < iVar7) {
            uVar23 = FUN_1800512c0((float)(uVar9 * uVar9 + iVar5 * iVar5 * 4));
            uVar24 = FUN_1800512c0((float)(uVar9 * uVar9 + (iVar4 + iVar5) * (iVar4 + iVar5) * 4));
            iVar17 = iVar7;
            if ((int)((float)uVar23 + (float)uVar24) <= (int)(uVar10 * 2)) goto LAB_1800140e6;
            if (param_2 + param_4 <= uVar13 + 2) goto LAB_180013e49;
          }
          else {
LAB_1800140e6:
            iVar6 = iVar17;
            uVar2 = puVar15[1];
            uStack0000000000000038 = uStack0000000000000038 + 1;
            local_a8 = local_a8 + (ulonglong)uVar2;
            uVar9 = (uint)uVar2;
            if (uVar12 < uVar2) {
              local_b8 = uVar18 - 1;
              uVar12 = uVar9;
              local_c4 = uVar9;
            }
            if (uVar9 < uVar21) {
              local_b4 = uVar18 - 1;
              uVar21 = uVar9;
            }
          }
          iVar7 = (uVar14 ^ (int)uVar14 >> 0x1f) - ((int)uVar14 >> 0x1f);
          iVar17 = iVar6;
          if (iVar6 < iVar7) {
            uVar23 = FUN_1800512c0((float)(uVar14 * uVar14 + iVar5 * iVar5 * 4));
            uVar24 = FUN_1800512c0((float)(uVar14 * uVar14 + (iVar4 + iVar5) * (iVar4 + iVar5) * 4))
            ;
            iVar17 = iVar7;
            if ((int)((float)uVar23 + (float)uVar24) <= (int)(uVar10 * 2)) goto LAB_1800141cd;
            if (param_2 + param_4 <= uVar13 + 4) goto LAB_180013e49;
          }
          else {
LAB_1800141cd:
            iVar6 = iVar17;
            uVar2 = puVar15[2];
            uStack0000000000000038 = uStack0000000000000038 + 1;
            local_a8 = local_a8 + (ulonglong)uVar2;
            uVar9 = (uint)uVar2;
            if (uVar12 < uVar2) {
              uVar12 = uVar9;
              local_c4 = uVar9;
              local_b8 = uVar18;
            }
            if (uVar9 < uVar21) {
              uVar21 = uVar9;
              local_b4 = uVar18;
            }
          }
          uVar9 = uVar14 + 2;
          iVar7 = (uVar9 ^ (int)uVar9 >> 0x1f) - ((int)uVar9 >> 0x1f);
          iVar17 = iVar6;
          if (iVar6 < iVar7) {
            uVar23 = FUN_1800512c0((float)(uVar9 * uVar9 + iVar5 * iVar5 * 4));
            uVar24 = FUN_1800512c0((float)(uVar9 * uVar9 + (iVar4 + iVar5) * (iVar4 + iVar5) * 4));
            iVar17 = iVar7;
            if ((int)((float)uVar23 + (float)uVar24) <= (int)(uVar10 * 2)) goto LAB_1800142af;
            if (param_2 + param_4 <= uVar13 + 6) goto LAB_180013e49;
          }
          else {
LAB_1800142af:
            iVar6 = iVar17;
            uVar2 = puVar15[3];
            uStack0000000000000038 = uStack0000000000000038 + 1;
            local_a8 = local_a8 + (ulonglong)uVar2;
            uVar9 = (uint)uVar2;
            if (uVar12 < uVar2) {
              local_b8 = uVar18 + 1;
              uVar12 = uVar9;
              local_c4 = uVar9;
            }
            if (uVar9 < uVar21) {
              local_b4 = uVar18 + 1;
              uVar21 = uVar9;
            }
          }
          puVar15 = puVar15 + 4;
          local_bc = local_bc + 4;
          uVar13 = uVar13 + 8;
          uVar14 = uVar14 + 8;
          uVar18 = uVar18 + 4;
        } while (local_bc <= param_4 - 3);
      }
      if (local_bc <= param_4) {
        uVar13 = local_bc * 2;
        uVar12 = uVar8 + local_bc;
        uVar18 = (uVar13 - param_2) - param_4;
        do {
          iVar7 = (uVar18 ^ (int)uVar18 >> 0x1f) - ((int)uVar18 >> 0x1f);
          iVar17 = iVar6;
          if (iVar6 < iVar7) {
            uVar23 = FUN_1800512c0((float)(uVar18 * uVar18 + iVar5 * iVar5 * 4));
            uVar24 = FUN_1800512c0((float)(uVar18 * uVar18 + (iVar4 + iVar5) * (iVar4 + iVar5) * 4))
            ;
            iVar17 = iVar7;
            if ((int)((float)uVar23 + (float)uVar24) <= (int)(uVar10 * 2)) goto LAB_18001440b;
            if (param_2 + param_4 <= uVar13) break;
          }
          else {
LAB_18001440b:
            iVar6 = iVar17;
            uVar2 = *puVar15;
            uStack0000000000000038 = uStack0000000000000038 + 1;
            local_a8 = local_a8 + (ulonglong)uVar2;
            uVar14 = (uint)uVar2;
            if (local_c4 < uVar2) {
              local_c4 = uVar14;
              local_b8 = uVar12;
            }
            if (uVar14 < uVar21) {
              uVar21 = uVar14;
              local_b4 = uVar12;
            }
          }
          puVar15 = puVar15 + 1;
          local_bc = local_bc + 1;
          uVar13 = uVar13 + 2;
          uVar18 = uVar18 + 2;
          uVar12 = uVar12 + 1;
        } while (local_bc <= param_4);
      }
LAB_180013e49:
      iVar17 = *(int *)(param_1 + 0x41fc0);
      uVar8 = uVar8 + iVar17;
      uVar20 = uVar20 + iVar17;
      iVar5 = iVar5 + 1;
      uVar22 = uVar22 - 1;
    } while (uVar22 != 0);
  }
  else {
    uVar22 = FUN_1800512c0((float)(int)(uVar16 * uVar16 - uVar10 * uVar10));
    local_68 = (ulonglong)(uVar10 + 1);
    iVar4 = (int)((float)(param_2 + param_4) - (float)uVar22) / 2;
    lVar3 = *(longlong *)(param_1 + 0x270);
    iVar5 = (int)((float)uVar22 + (float)(param_2 + param_4)) / 2;
    uVar10 = *(int *)(param_1 + 0x41fc0) * param_3;
    iVar6 = param_3 - param_5;
    uVar13 = uVar10 + 2 + param_2;
    do {
      local_ac = 0;
      puVar15 = (ushort *)(lVar3 + ((ulonglong)uVar10 + (ulonglong)param_2) * 2);
      iVar17 = iVar6 * iVar6;
      local_c0 = param_2;
      if (3 < (int)(uVar16 + 1)) {
        local_84 = param_2 - iVar5;
        uVar18 = param_2 * 2;
        iVar7 = (param_2 - iVar4) + 2;
        local_a0 = (param_2 - iVar4) * 4 + 4;
        local_80 = local_84 * 4 + 4;
        uVar14 = (param_2 - param_4) + 4;
        uVar12 = uVar13;
        do {
          uVar9 = (int)(uVar14 - 4) >> 0x1f;
          iVar11 = (uVar14 - 4 ^ uVar9) - uVar9;
          iVar1 = local_ac;
          if (local_ac < iVar11) {
            uVar22 = FUN_1800512c0((float)(uint)(iVar17 + (iVar7 + -2) * (iVar7 + -2) * 4));
            uVar23 = FUN_1800512c0((float)(uint)(iVar17 + local_84 * local_84 * 4));
            iVar1 = iVar11;
            if ((int)((float)uVar22 + (float)uVar23) <= (int)(uVar16 * 2)) goto LAB_180013821;
            if (param_2 + param_4 <= uVar18) goto LAB_1800137be;
          }
          else {
LAB_180013821:
            local_ac = iVar1;
            uVar2 = *puVar15;
            uVar20 = uVar20 + 1;
            lVar19 = lVar19 + (ulonglong)uVar2;
            uVar9 = (uint)uVar2;
            if (uVar8 < uVar2) {
              local_b8 = uVar12 - 2;
              uVar8 = uVar9;
              local_c4 = uVar9;
            }
            uStack0000000000000038 = uVar20;
            local_a8 = lVar19;
            if (uVar9 < uVar21) {
              local_b4 = uVar12 - 2;
              uVar21 = uVar9;
            }
          }
          uVar9 = (int)(uVar14 - 2) >> 0x1f;
          iVar11 = (uVar14 - 2 ^ uVar9) - uVar9;
          iVar1 = local_ac;
          if (local_ac < iVar11) {
            uVar22 = FUN_1800512c0((float)(uint)(((iVar4 - iVar5) + iVar7 + -1) * local_80 + iVar17)
                                  );
            uVar23 = FUN_1800512c0((float)(uint)((iVar7 + -1) * local_a0 + iVar17));
            iVar1 = iVar11;
            if ((int)((float)uVar22 + (float)uVar23) <= (int)(uVar16 * 2)) goto LAB_180013902;
            if (param_2 + param_4 <= uVar18 + 2) goto LAB_1800137be;
          }
          else {
LAB_180013902:
            local_ac = iVar1;
            uVar2 = puVar15[1];
            uVar20 = uVar20 + 1;
            lVar19 = lVar19 + (ulonglong)uVar2;
            uVar9 = (uint)uVar2;
            if (uVar8 < uVar2) {
              local_b8 = uVar12 - 1;
              uVar8 = uVar9;
              local_c4 = uVar9;
            }
            uStack0000000000000038 = uVar20;
            local_a8 = lVar19;
            if (uVar9 < uVar21) {
              local_b4 = uVar12 - 1;
              uVar21 = uVar9;
            }
          }
          iVar11 = (uVar14 ^ (int)uVar14 >> 0x1f) - ((int)uVar14 >> 0x1f);
          iVar1 = local_ac;
          if (local_ac < iVar11) {
            iVar1 = iVar7 + (iVar4 - iVar5);
            uVar22 = FUN_1800512c0((float)(uint)(iVar17 + iVar7 * iVar7 * 4));
            uVar23 = FUN_1800512c0((float)(uint)(iVar17 + iVar1 * iVar1 * 4));
            iVar1 = iVar11;
            if ((int)((float)uVar22 + (float)uVar23) <= (int)(uVar16 * 2)) goto LAB_1800139e4;
            if (param_2 + param_4 <= uVar18 + 4) goto LAB_1800137be;
          }
          else {
LAB_1800139e4:
            local_ac = iVar1;
            uVar2 = puVar15[2];
            uVar20 = uVar20 + 1;
            lVar19 = lVar19 + (ulonglong)uVar2;
            uVar9 = (uint)uVar2;
            if (uVar8 < uVar2) {
              uVar8 = uVar9;
              local_c4 = uVar9;
              local_b8 = uVar12;
            }
            uStack0000000000000038 = uVar20;
            local_a8 = lVar19;
            if (uVar9 < uVar21) {
              uVar21 = uVar9;
              local_b4 = uVar12;
            }
          }
          uVar9 = (int)(uVar14 + 2) >> 0x1f;
          iVar11 = (uVar14 + 2 ^ uVar9) - uVar9;
          iVar1 = local_ac;
          if (local_ac < iVar11) {
            uVar22 = FUN_1800512c0((float)(uint)(iVar17 + (iVar7 + 1) * (iVar7 + 1) * 4));
            uVar23 = FUN_1800512c0((float)(uint)(iVar17 + (local_84 + 3) * (local_84 + 3) * 4));
            iVar1 = iVar11;
            if ((int)((float)uVar22 + (float)uVar23) <= (int)(uVar16 * 2)) goto LAB_180013ac4;
            if (param_2 + param_4 <= uVar18 + 6) goto LAB_1800137be;
          }
          else {
LAB_180013ac4:
            local_ac = iVar1;
            uVar2 = puVar15[3];
            uVar20 = uVar20 + 1;
            lVar19 = lVar19 + (ulonglong)uVar2;
            uVar9 = (uint)uVar2;
            if (uVar8 < uVar2) {
              local_b8 = uVar12 + 1;
              uVar8 = uVar9;
              local_c4 = uVar9;
            }
            uStack0000000000000038 = uVar20;
            local_a8 = lVar19;
            if (uVar9 < uVar21) {
              local_b4 = uVar12 + 1;
              uVar21 = uVar9;
            }
          }
          puVar15 = puVar15 + 4;
          local_80 = local_80 + 0x10;
          local_a0 = local_a0 + 0x10;
          local_84 = local_84 + 4;
          local_c0 = local_c0 + 4;
          uVar18 = uVar18 + 8;
          uVar14 = uVar14 + 8;
          iVar7 = iVar7 + 4;
          uVar12 = uVar12 + 4;
        } while (local_c0 <= param_4 - 3);
      }
      if (local_c0 <= param_4) {
        uVar18 = local_c0 * 2;
        iVar7 = local_c0 - iVar4;
        uVar14 = uVar10 + local_c0;
        uVar12 = (uVar18 - param_2) - param_4;
        do {
          iVar11 = (uVar12 ^ (int)uVar12 >> 0x1f) - ((int)uVar12 >> 0x1f);
          iVar1 = local_ac;
          if (local_ac < iVar11) {
            iVar1 = iVar7 + (iVar4 - iVar5);
            uVar22 = FUN_1800512c0((float)(uint)(iVar17 + iVar1 * iVar1 * 4));
            uVar23 = FUN_1800512c0((float)(uint)(iVar17 + iVar7 * iVar7 * 4));
            iVar1 = iVar11;
            if ((int)((float)uVar22 + (float)uVar23) <= (int)(uVar16 * 2)) goto LAB_180013c3b;
            lVar19 = local_a8;
            uVar20 = uStack0000000000000038;
            local_c4 = uVar8;
            if (param_2 + param_4 <= uVar18) break;
          }
          else {
LAB_180013c3b:
            local_ac = iVar1;
            uVar2 = *puVar15;
            uStack0000000000000038 = uStack0000000000000038 + 1;
            local_a8 = local_a8 + (ulonglong)uVar2;
            uVar20 = (uint)uVar2;
            if (uVar8 < uVar2) {
              uVar8 = uVar20;
              local_b8 = uVar14;
            }
            if (uVar20 < uVar21) {
              uVar21 = uVar20;
              local_b4 = uVar14;
            }
          }
          puVar15 = puVar15 + 1;
          local_c0 = local_c0 + 1;
          iVar7 = iVar7 + 1;
          uVar18 = uVar18 + 2;
          uVar12 = uVar12 + 2;
          uVar14 = uVar14 + 1;
          lVar19 = local_a8;
          uVar20 = uStack0000000000000038;
          local_c4 = uVar8;
        } while (local_c0 <= param_4);
      }
LAB_1800137be:
      iVar17 = *(int *)(param_1 + 0x41fc0);
      uVar10 = uVar10 + iVar17;
      uVar13 = uVar13 + iVar17;
      iVar6 = iVar6 + 2;
      local_68 = local_68 - 1;
    } while (local_68 != 0);
  }
  iVar4 = FUN_180016290(param_1,uVar21 & 0xffff,local_b4,1);
  *param_6 = iVar4;
  iVar4 = FUN_180016290(param_1,local_c4,local_b8,1);
  param_6[1] = iVar4;
  iVar4 = FUN_180016290(param_1,(uint)(local_a8 / (longlong)(ulonglong)uStack0000000000000038),
                        ((param_3 + param_5) * iVar17 >> 1) + (param_2 + param_4 >> 1),1);
  param_6[2] = iVar4;
  param_6[3] = local_b4;
  param_6[4] = local_b8;
  if (*(int *)(param_1 + 0x78) != 0) {
    iVar4 = FUN_180015b90(param_1,*param_6,*(float *)(param_1 + 0xd4));
    *param_6 = iVar4;
    iVar4 = FUN_180015b90(param_1,param_6[1],*(float *)(param_1 + 0xd4));
    param_6[1] = iVar4;
    iVar4 = FUN_180015b90(param_1,param_6[2],*(float *)(param_1 + 0xd4));
    param_6[2] = iVar4;
  }
  iVar4 = *param_6;
  if (param_6[1] < iVar4) {
    param_6[1] = iVar4;
  }
  if (param_6[1] < param_6[2]) {
    param_6[2] = param_6[1];
  }
  if (param_6[2] < iVar4) {
    param_6[2] = iVar4;
  }
  return 1;
}


==================================================================

### EXPORT FUNC 1800144c0 (959 bytes) name=FUN_1800144c0

ulonglong FUN_1800144c0(longlong param_1,uint *param_2,ulonglong param_3,int *param_4,uint param_5,
                       uint param_6,uint param_7,uint param_8)

{
  bool bVar1;
  int iVar2;
  int iVar3;
  uint uVar4;
  int iVar5;
  uint uVar6;
  DWORD dwErrCode;
  uint uVar7;
  uint uVar8;
  ulonglong uVar10;
  uint uVar11;
  ulonglong uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  ulonglong uVar17;
  uint *puVar18;
  ulonglong uVar9;
  
  if ((((((*(int *)(param_1 + 0x234) != 0) && (param_5 < *(uint *)(param_1 + 0x41fc0))) &&
        (param_7 < *(uint *)(param_1 + 0x41fc0))) &&
       ((param_6 < *(uint *)(param_1 + 0x41fc4) && (param_8 < *(uint *)(param_1 + 0x41fc4))))) &&
      ((param_5 != param_7 || (param_6 != param_8)))) &&
     (((param_4 != (int *)0x0 && (param_2 != (uint *)0x0)) && (3 < (uint)param_3)))) {
    uVar12 = 0;
    uVar4 = 0;
    uVar7 = (int)(param_5 - param_7) >> 0x1f;
    iVar5 = (param_5 - param_7 ^ uVar7) - uVar7;
    uVar7 = (int)(param_6 - param_8) >> 0x1f;
    iVar2 = (param_6 - param_8 ^ uVar7) - uVar7;
    bVar1 = iVar5 < iVar2;
    iVar3 = iVar2;
    if (!bVar1) {
      iVar3 = iVar5;
    }
    uVar10 = param_3 >> 2 & 0x3fffffff;
    if (iVar3 + 1 <= (int)uVar10) {
      if (bVar1) {
        uVar10 = (ulonglong)(iVar2 + 1);
      }
      else {
        uVar10 = (ulonglong)(iVar5 + 1);
      }
    }
    uVar7 = param_5;
    uVar8 = param_6;
    uVar15 = param_7;
    uVar14 = param_8;
    if (param_5 <= param_7) {
      uVar7 = param_7;
      uVar8 = param_8;
      uVar15 = param_5;
      uVar14 = param_6;
    }
    uVar11 = (uint)uVar10;
    if (bVar1) {
      if ((int)uVar14 < (int)uVar8) {
        uVar16 = (uVar14 - 1) + uVar11;
        uVar9 = uVar12;
        puVar18 = param_2;
        uVar13 = uVar14;
        while( true ) {
          uVar6 = uVar16;
          if ((int)uVar8 < (int)uVar16) {
            uVar6 = uVar8;
          }
          if ((int)uVar6 < (int)uVar13) break;
          iVar2 = (int)uVar9;
          uVar9 = (ulonglong)(iVar2 + 1);
          iVar3 = *(int *)(param_1 + 0x41fc0) * uVar13;
          uVar13 = uVar13 + 1;
          *puVar18 = (uint)*(ushort *)
                            (*(longlong *)(param_1 + 0x270) +
                            (ulonglong)
                            (iVar3 + (int)((uVar7 - uVar15) * iVar2) / (int)(uVar8 - uVar14) +
                                     uVar15) * 2);
          puVar18 = puVar18 + 1;
        }
      }
      else {
        uVar16 = (uVar14 - uVar11) + 1;
        uVar9 = uVar12;
        puVar18 = param_2;
        uVar13 = uVar14;
        while( true ) {
          uVar6 = uVar16;
          if ((int)uVar16 < (int)uVar8) {
            uVar6 = uVar8;
          }
          if ((int)uVar13 < (int)uVar6) break;
          iVar2 = (int)uVar9;
          uVar9 = (ulonglong)(iVar2 - 1);
          iVar3 = *(int *)(param_1 + 0x41fc0) * uVar13;
          uVar13 = uVar13 - 1;
          *puVar18 = (uint)*(ushort *)
                            (*(longlong *)(param_1 + 0x270) +
                            (ulonglong)
                            (iVar3 + (int)((uVar7 - uVar15) * iVar2) / (int)(uVar8 - uVar14) +
                                     uVar15) * 2);
          puVar18 = puVar18 + 1;
        }
      }
    }
    else {
      uVar16 = (uVar15 - 1) + uVar11;
      uVar9 = uVar12;
      puVar18 = param_2;
      uVar13 = uVar15;
      while( true ) {
        uVar6 = uVar16;
        if ((int)uVar7 < (int)uVar16) {
          uVar6 = uVar7;
        }
        if ((int)uVar6 < (int)uVar13) break;
        iVar3 = (int)uVar9;
        uVar9 = (ulonglong)(iVar3 + 1);
        uVar6 = (uVar14 + (int)((uVar8 - uVar14) * iVar3) / (int)(uVar7 - uVar15)) *
                *(int *)(param_1 + 0x41fc0) + uVar13;
        uVar13 = uVar13 + 1;
        *puVar18 = (uint)*(ushort *)(*(longlong *)(param_1 + 0x270) + (ulonglong)uVar6 * 2);
        puVar18 = puVar18 + 1;
      }
    }
    uVar7 = 0xffffffff;
    puVar18 = param_2;
    uVar9 = uVar10;
    uVar17 = uVar12;
    uVar8 = uVar11;
    while (uVar8 != 0) {
      uVar8 = *puVar18;
      puVar18 = puVar18 + 1;
      uVar17 = (ulonglong)((int)uVar17 + uVar8);
      if ((uint)uVar12 < uVar8) {
        uVar12 = (ulonglong)uVar8;
      }
      uVar4 = (uint)uVar12;
      if (uVar8 < uVar7) {
        uVar7 = uVar8;
      }
      uVar8 = (int)uVar9 - 1;
      uVar9 = (ulonglong)uVar8;
    }
    uVar8 = ((param_6 + param_8) * *(int *)(param_1 + 0x41fc0) >> 1) + (param_5 + param_7 >> 1);
    iVar3 = FUN_180016290(param_1,uVar7 & 0xffff,uVar8,0);
    *param_4 = iVar3;
    iVar3 = FUN_180016290(param_1,uVar4 & 0xffff,uVar8,0);
    param_4[1] = iVar3;
    iVar3 = FUN_180016290(param_1,(uint)(uVar17 / uVar10),uVar8,0);
    param_4[2] = iVar3;
    uVar12 = uVar10;
    if (*(int *)(param_1 + 0x78) != 0) {
      iVar3 = FUN_180015b90(param_1,*param_4,*(float *)(param_1 + 0xd4));
      *param_4 = iVar3;
      iVar3 = FUN_180015b90(param_1,param_4[1],*(float *)(param_1 + 0xd4));
      param_4[1] = iVar3;
      iVar3 = FUN_180015b90(param_1,param_4[2],*(float *)(param_1 + 0xd4));
      param_4[2] = iVar3;
    }
    while (uVar11 != 0) {
      uVar4 = FUN_180016290(param_1,(uint)(ushort)*param_2,uVar8,0);
      *param_2 = uVar4;
      if (*(int *)(param_1 + 0x78) != 0) {
        uVar4 = FUN_180015b90(param_1,uVar4,*(float *)(param_1 + 0xd4));
        *param_2 = uVar4;
      }
      param_2 = param_2 + 1;
      uVar11 = (int)uVar12 - 1;
      uVar12 = (ulonglong)uVar11;
    }
    return uVar10;
  }
  dwErrCode = 0xe4ae0001;
  if (*(int *)(param_1 + 0x234) == 0) {
    dwErrCode = 0xe4ae0005;
  }
  SetLastError(dwErrCode);
  return 0;
}


==================================================================

### EXPORT FUNC 180014880 (961 bytes) name=FUN_180014880

undefined8
FUN_180014880(longlong param_1,uint param_2,uint param_3,uint param_4,uint param_5,int *param_6)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  DWORD dwErrCode;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  uint uStack0000000000000038;
  uint local_68;
  uint local_64;
  int local_60;
  longlong local_58;
  
  if ((((*(int *)(param_1 + 0x234) != 0) && (param_2 < *(uint *)(param_1 + 0x41fc0))) &&
      (param_4 < *(uint *)(param_1 + 0x41fc0))) &&
     ((((param_3 < *(uint *)(param_1 + 0x41fc4) && (param_5 < *(uint *)(param_1 + 0x41fc4))) &&
       ((param_2 != param_4 || (param_3 != param_5)))) && (param_6 != (int *)0x0)))) {
    iVar1 = 0;
    local_58 = 0;
    uStack0000000000000038 = 0;
    local_64 = 0;
    uVar5 = (int)(param_2 - param_4) >> 0x1f;
    iVar8 = 0x7fffffff;
    iVar3 = -0x7fffffff;
    uVar6 = (int)(param_3 - param_5) >> 0x1f;
    if ((int)((param_2 - param_4 ^ uVar5) - uVar5) < (int)((param_3 - param_5 ^ uVar6) - uVar6)) {
      uVar5 = param_2;
      uVar6 = param_5;
      local_68 = param_4;
      if (param_3 <= param_5) {
        uVar5 = param_4;
        uVar6 = param_3;
        param_3 = param_5;
        local_68 = param_2;
      }
      iVar4 = param_3 - uVar6;
      local_60 = iVar4 + 1;
      if ((int)param_3 < (int)uVar6) {
        local_58 = 0;
      }
      else {
        do {
          uVar7 = iVar1 / iVar4 + local_68 + *(int *)(param_1 + 0x41fc0) * uVar6;
          iVar2 = FUN_180016290(param_1,(uint)*(ushort *)
                                               (*(longlong *)(param_1 + 0x270) +
                                               (longlong)(int)uVar7 * 2),uVar7,1);
          local_58 = local_58 + iVar2;
          if (iVar3 < iVar2) {
            iVar3 = iVar2;
            local_64 = uVar7;
          }
          if (iVar2 < iVar8) {
            iVar8 = iVar2;
            uStack0000000000000038 = uVar7;
          }
          uVar6 = uVar6 + 1;
          iVar1 = iVar1 + (uVar5 - local_68);
        } while ((int)uVar6 <= (int)param_3);
      }
    }
    else {
      uVar5 = param_4;
      uVar6 = param_5;
      if (param_2 <= param_4) {
        uVar5 = param_2;
        param_2 = param_4;
        uVar6 = param_3;
        param_3 = param_5;
      }
      iVar4 = param_2 - uVar5;
      local_60 = iVar4 + 1;
      if ((int)param_2 < (int)uVar5) {
        local_58 = 0;
      }
      else {
        do {
          uVar7 = (uVar6 + iVar1 / iVar4) * *(int *)(param_1 + 0x41fc0) + uVar5;
          iVar2 = FUN_180016290(param_1,(uint)*(ushort *)
                                               (*(longlong *)(param_1 + 0x270) +
                                               (longlong)(int)uVar7 * 2),uVar7,1);
          local_58 = local_58 + iVar2;
          if (iVar3 < iVar2) {
            iVar3 = iVar2;
            local_64 = uVar7;
          }
          if (iVar2 < iVar8) {
            iVar8 = iVar2;
            uStack0000000000000038 = uVar7;
          }
          uVar5 = uVar5 + 1;
          iVar1 = iVar1 + (param_3 - uVar6);
        } while ((int)uVar5 <= (int)param_2);
      }
    }
    param_6[1] = iVar3;
    *param_6 = iVar8;
    param_6[3] = uStack0000000000000038;
    param_6[4] = local_64;
    param_6[2] = (int)(local_58 / (longlong)local_60);
    if (*(int *)(param_1 + 0x78) != 0) {
      iVar3 = FUN_180015b90(param_1,iVar8,*(float *)(param_1 + 0xd4));
      *param_6 = iVar3;
      iVar3 = FUN_180015b90(param_1,param_6[1],*(float *)(param_1 + 0xd4));
      param_6[1] = iVar3;
      iVar3 = FUN_180015b90(param_1,param_6[2],*(float *)(param_1 + 0xd4));
      param_6[2] = iVar3;
    }
    return 1;
  }
  dwErrCode = 0xe4ae0001;
  if (*(int *)(param_1 + 0x234) == 0) {
    dwErrCode = 0xe4ae0005;
  }
  SetLastError(dwErrCode);
  return 0;
}


==================================================================

### EXPORT FUNC 180014c50 (537 bytes) name=FUN_180014c50

undefined8 FUN_180014c50(longlong param_1,uint *param_2,uint param_3,int *param_4)

{
  ushort uVar1;
  uint uVar2;
  int iVar3;
  DWORD dwErrCode;
  uint uVar4;
  ulonglong uVar5;
  uint uVar6;
  uint uVar8;
  ulonglong uVar9;
  uint uVar10;
  ulonglong uVar12;
  uint uStack0000000000000028;
  ulonglong uVar7;
  ulonglong uVar11;
  
  if ((((*(int *)(param_1 + 0x234) != 0) && (param_4 != (int *)0x0)) && (param_2 != (uint *)0x0)) &&
     (param_3 != 0)) {
    uVar5 = 0;
    uVar2 = *(uint *)(param_1 + 0x41fc0);
    uVar8 = 0xffffffff;
    uStack0000000000000028 = 0;
    uVar7 = uVar5;
    uVar9 = uVar5;
    uVar11 = uVar5;
    uVar12 = uVar5;
    uVar4 = param_3;
    do {
      uVar6 = *param_2;
      param_2 = param_2 + 1;
      uVar1 = *(ushort *)(*(longlong *)(param_1 + 0x270) + (ulonglong)uVar6 * 2);
      uVar9 = uVar9 + uVar1;
      uVar10 = (uint)uVar1;
      if ((uint)uVar5 < (uint)uVar1) {
        uVar5 = (ulonglong)uVar10;
        uStack0000000000000028 = uVar6;
      }
      if (uVar10 < uVar8) {
        uVar12 = (ulonglong)uVar6;
        uVar8 = uVar10;
      }
      uVar10 = (int)uVar11 + uVar6 / uVar2;
      uVar11 = (ulonglong)uVar10;
      uVar6 = (int)uVar7 + (uVar6 - uVar2 * (uVar6 / uVar2));
      uVar7 = (ulonglong)uVar6;
      uVar4 = uVar4 - 1;
    } while (uVar4 != 0);
    iVar3 = FUN_180016290(param_1,uVar8 & 0xffff,(uint)uVar12,1);
    uVar4 = uStack0000000000000028;
    *param_4 = iVar3;
    iVar3 = FUN_180016290(param_1,(uint)uVar5,uStack0000000000000028,1);
    param_4[1] = iVar3;
    iVar3 = FUN_180016290(param_1,(uint)((longlong)uVar9 / (longlong)(ulonglong)param_3),
                          (uVar10 / param_3) * uVar2 + uVar6 / param_3,1);
    param_4[2] = iVar3;
    param_4[3] = (uint)uVar12;
    param_4[4] = uVar4;
    if (*(int *)(param_1 + 0x78) != 0) {
      iVar3 = FUN_180015b90(param_1,*param_4,*(float *)(param_1 + 0xd4));
      *param_4 = iVar3;
      iVar3 = FUN_180015b90(param_1,param_4[1],*(float *)(param_1 + 0xd4));
      param_4[1] = iVar3;
      iVar3 = FUN_180015b90(param_1,param_4[2],*(float *)(param_1 + 0xd4));
      param_4[2] = iVar3;
    }
    iVar3 = *param_4;
    if (param_4[1] < iVar3) {
      param_4[1] = iVar3;
    }
    if (param_4[1] < param_4[2]) {
      param_4[2] = param_4[1];
    }
    if (param_4[2] < iVar3) {
      param_4[2] = iVar3;
    }
    return 1;
  }
  dwErrCode = 0xe4ae0001;
  if (*(int *)(param_1 + 0x234) == 0) {
    dwErrCode = 0xe4ae0005;
  }
  SetLastError(dwErrCode);
  return 0;
}


==================================================================

### EXPORT FUNC 180014e70 (358 bytes) name=FUN_180014e70

int FUN_180014e70(longlong param_1,uint param_2,int param_3)

{
  int iVar1;
  uint uVar2;
  DWORD dwErrCode;
  int iVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  uint uVar8;
  int iVar9;
  
  if ((*(int *)(param_1 + 0x234) == 0) || (*(uint *)(param_1 + 0x47938) <= param_2)) {
    dwErrCode = 0xe4ae0001;
    if (*(int *)(param_1 + 0x234) == 0) {
      dwErrCode = 0xe4ae0005;
    }
    SetLastError(dwErrCode);
    iVar7 = -0x7fffffff;
  }
  else {
    iVar7 = 0;
    if (param_3 == 1) {
      iVar6 = 0;
    }
    else if (param_3 == 3) {
      iVar6 = 1;
    }
    else {
      iVar6 = (param_3 != 5) + 2;
    }
    uVar2 = param_2 / *(uint *)(param_1 + 0x41fc0);
    iVar5 = 0;
    iVar3 = param_2 - *(uint *)(param_1 + 0x41fc0) * uVar2;
    for (iVar9 = iVar3 - iVar6; iVar9 <= iVar3 + iVar6; iVar9 = iVar9 + 1) {
      if ((-1 < iVar9) && (iVar1 = *(int *)(param_1 + 0x41fc0), iVar9 < iVar1)) {
        iVar4 = uVar2 - iVar6;
        if (iVar4 <= (int)(uVar2 + iVar6)) {
          uVar8 = iVar1 * iVar4 + iVar9;
          do {
            if ((-1 < iVar4) && (iVar4 < *(int *)(param_1 + 0x41fc4))) {
              iVar5 = iVar5 + (uint)*(ushort *)
                                     (*(longlong *)(param_1 + 0x270) + (ulonglong)uVar8 * 2);
              iVar7 = iVar7 + 1;
            }
            iVar4 = iVar4 + 1;
            uVar8 = uVar8 + iVar1;
          } while (iVar4 <= (int)(uVar2 + iVar6));
        }
      }
    }
    iVar7 = FUN_180016290(param_1,iVar5 / iVar7,param_2,1);
    if (*(int *)(param_1 + 0x78) != 0) {
      iVar7 = FUN_180015b90(param_1,iVar7,*(float *)(param_1 + 0xd4));
      return iVar7;
    }
  }
  return iVar7;
}


==================================================================

### EXPORT FUNC 180014fe0 (1301 bytes) name=FUN_180014fe0

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

ulonglong FUN_180014fe0(undefined8 param_1,float *param_2)

{
  int iVar1;
  ulonglong uVar2;
  float fVar3;
  undefined4 uVar4;
  float fVar5;
  float fVar6;
  float fVar7;
  float local_e4 [4];
  undefined4 local_d4;
  undefined4 local_d0;
  undefined4 local_cc;
  undefined4 local_c8;
  undefined4 local_c4;
  undefined4 local_c0;
  undefined4 local_bc;
  undefined4 local_b8;
  undefined4 local_b4;
  undefined4 local_b0;
  undefined4 local_ac;
  undefined4 local_a8;
  undefined4 local_a4;
  undefined4 local_a0;
  undefined4 local_9c;
  undefined4 local_98;
  undefined4 local_94;
  undefined4 local_90;
  undefined4 local_8c;
  undefined4 local_88;
  undefined4 local_84;
  undefined4 local_80;
  undefined4 local_7c;
  undefined4 local_78;
  undefined4 local_74;
  undefined4 local_70;
  undefined4 local_6c;
  undefined4 local_68;
  undefined4 local_64;
  undefined4 local_60;
  undefined4 local_5c;
  undefined4 local_58;
  
  local_e4[0] = DAT_18005e7b8;
  local_e4[1] = (float)DAT_18005e7b4;
  local_e4[2] = (float)DAT_18005e7b0;
  local_e4[3] = (float)DAT_18005e7ac;
  local_d4 = DAT_18005e7a8;
  local_d0 = DAT_18005e7a4;
  local_cc = DAT_18005e7a0;
  local_c8 = DAT_18005e79c;
  local_c4 = DAT_18005e798;
  local_c0 = DAT_18005e794;
  local_bc = DAT_18005e790;
  local_b8 = DAT_18005e78c;
  local_b4 = DAT_18005e788;
  local_b0 = DAT_18005e784;
  local_ac = DAT_18005e780;
  local_a8 = DAT_18005e77c;
  local_a4 = DAT_18005e778;
  local_a0 = DAT_18005e774;
  local_98 = DAT_18005e76c;
  local_9c = DAT_18005e770;
  local_90 = DAT_18005e768;
  local_94 = DAT_18005e764;
  local_88 = DAT_18005e760;
  local_8c = DAT_18005e75c;
  local_80 = DAT_18005e758;
  local_84 = DAT_18005e754;
  local_78 = DAT_18005e750;
  local_7c = DAT_18005e74c;
  local_70 = DAT_18005e748;
  local_74 = DAT_18005e744;
  local_68 = DAT_18005e740;
  local_6c = DAT_18005e73c;
  local_60 = DAT_18005e738;
  local_64 = DAT_18005e734;
  local_58 = DAT_18005e730;
  local_5c = DAT_18005e72c;
  if (param_2 == (float *)0x0) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  fVar3 = 0.0;
  uVar4 = 0;
  if ((((0.0 < *param_2) && (0.0 < param_2[4])) && (fVar5 = param_2[3], 0.0 <= fVar5)) &&
     (fVar5 <= DAT_18005e700)) {
    iVar1 = (int)param_2[2];
    if (iVar1 < -0x19) {
      iVar1 = -0x19;
    }
    else if (0x23 < iVar1) {
      iVar1 = 0x23;
    }
    uVar2 = FUN_1800512c0(fVar5 * local_e4[iVar1]);
    fVar5 = DAT_18005e728 / param_2[4];
    fVar6 = (float)uVar2 * _DAT_18005e724 + _DAT_18005e720;
    if (param_2[5] <= 0.0) {
      fVar7 = 0.0;
    }
    else {
      uVar2 = FUN_180050940((ulonglong)(uint)param_2[5],DAT_18005e71c);
      fVar7 = (float)uVar2 * DAT_18005e71c;
    }
    if (0.0 < param_2[6]) {
      uVar2 = FUN_180050940((ulonglong)(uint)param_2[6],DAT_18005e718);
      uVar4 = (undefined4)(uVar2 >> 0x20);
      fVar3 = (float)uVar2 * _DAT_18005e714;
    }
    uVar2 = FUN_180050fc0(CONCAT44(uVar4,(fVar3 + fVar7 + fVar5 + fVar6) * *param_2 * _DAT_18005e710
                                  ));
    param_2[9] = (float)uVar2;
    return uVar2;
  }
  param_2[9] = 1.0;
  SetLastError(0xe4ae0001);
  return (ulonglong)(uint)param_2[9];
}


==================================================================

### EXPORT FUNC 180015500 (350 bytes) name=FUN_180015500

undefined8 FUN_180015500(longlong param_1,int param_2)

{
  uint uVar1;
  undefined *_Src;
  longlong lVar2;
  longlong lVar3;
  
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  if (param_2 == 0) {
    param_2 = 7;
  }
  switch(param_2) {
  case 1:
    _Src = &DAT_180059120;
    break;
  case 2:
    _Src = &DAT_180059b40;
    break;
  case 3:
    _Src = &DAT_18005a560;
    break;
  case 4:
    _Src = &DAT_18005af80;
    break;
  case 5:
    _Src = &DAT_18005b9a0;
    break;
  case 6:
    _Src = &DAT_18005c3c0;
    break;
  case 7:
    _Src = &DAT_18005cde0;
    break;
  case 8:
    _Src = &DAT_18005d800;
    break;
  default:
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    return 0;
  }
  memcpy(&DAT_180099000,_Src,0xa1c);
  lVar2 = 0;
  do {
    lVar3 = lVar2 + 8;
    uVar1 = *(int *)((longlong)&DAT_180099004 + lVar2) - *(int *)((longlong)&DAT_180099000 + lVar2);
    *(uint *)((longlong)&DAT_180099a20 + lVar2) = ((uVar1 >> 1) + 0x1000000) / uVar1;
    uVar1 = *(int *)((longlong)&DAT_180099008 + lVar2) - *(int *)((longlong)&DAT_180099004 + lVar2);
    *(uint *)((longlong)&DAT_180099a24 + lVar2) = ((uVar1 >> 1) + 0x1000000) / uVar1;
    lVar2 = lVar3;
  } while (lVar3 < 0xa18);
  lVar2 = (longlong)DAT_18009a434;
  *(int *)(param_1 + 0x68) = param_2;
  DAT_180073748 = (undefined4)(0x7fffffff / lVar2);
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  return 1;
}


==================================================================

### EXPORT FUNC 180015680 (88 bytes) name=FUN_180015680

uint FUN_180015680(longlong param_1,undefined8 param_2,uint param_3)

{
  int iVar1;
  uint uVar2;
  undefined8 in_RAX;
  undefined2 uVar3;
  
  if (*(int *)(param_1 + 0x47950) != 0) {
    iVar1 = FUN_180015940(param_1,30000,param_3);
    uVar2 = iVar1 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
    if (0xffff < (int)uVar2) {
      uVar2 = 0xffff;
    }
    return uVar2;
  }
  uVar2 = param_3 >> ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
  uVar3 = (undefined2)uVar2;
  if (0xffff < uVar2) {
    uVar3 = 0xffff;
  }
  return (uint)CONCAT62((int6)((ulonglong)in_RAX >> 0x10),uVar3);
}


==================================================================

### EXPORT FUNC 1800156e0 (143 bytes) name=FUN_1800156e0

int FUN_1800156e0(longlong param_1,int param_2)

{
  int iVar1;
  int iVar2;
  
  if (*(int *)(param_1 + 0x47950) != 0) {
    return param_2 << (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
  }
  iVar2 = (param_2 << ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f)) +
          *(int *)(param_1 + 0x47948) + 150000;
  iVar1 = (int)(iVar2 + (iVar2 >> 0x1f & 0xfffU)) >> 0xc;
  if (iVar1 < 0) {
    iVar1 = 0;
  }
  else if (0x285 < iVar1) {
    iVar1 = 0x285;
  }
  iVar2 = (iVar2 + iVar1 * -0x1000) * ((&DAT_180099004)[iVar1] - (&DAT_180099000)[iVar1]);
  iVar2 = ((int)(iVar2 + (iVar2 >> 0x1f & 0xfffU)) >> 0xc) + (&DAT_180099000)[iVar1];
  if (iVar2 < 0) {
    iVar2 = 0;
  }
  return iVar2;
}


==================================================================

### EXPORT FUNC 180015770 (204 bytes) name=FUN_180015770

int FUN_180015770(longlong param_1,int param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  
  if (*(int *)(param_1 + 0x47950) == 0) {
    uVar3 = 0x286;
    uVar2 = 0;
    do {
      uVar1 = (int)(uVar3 + uVar2) >> 1;
      if (param_2 < (int)(&DAT_180099000)[(int)uVar1]) {
        uVar3 = uVar1;
        uVar1 = uVar2;
      }
      uVar2 = uVar1;
    } while (uVar2 + 1 < uVar3);
    iVar4 = param_2 - (&DAT_180099000)[(int)uVar2];
    if (DAT_180073748 < iVar4) {
      iVar4 = (int)((longlong)(int)(&DAT_180099a20)[(int)uVar2] * (longlong)iVar4 >> 0xc) + -150000
              + uVar2 * 0x1000;
    }
    else {
      iVar4 = ((&DAT_180099a20)[(int)uVar2] * iVar4 >> 0xc) + -150000 + uVar2 * 0x1000;
    }
    iVar4 = iVar4 - *(int *)(param_1 + 0x47948) >> ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f)
    ;
    if (iVar4 < 0) {
      iVar4 = 0;
    }
    return iVar4;
  }
  return param_2 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
}


==================================================================

### EXPORT FUNC 180015840 (103 bytes) name=FUN_180015840

int FUN_180015840(undefined8 param_1,int param_2)

{
  int iVar1;
  int iVar2;
  int iVar3;
  
  iVar3 = param_2 + 150000;
  iVar2 = (int)((iVar3 >> 0x1f & 0xfffU) + iVar3) >> 0xc;
  iVar1 = 0;
  if ((-1 < iVar2) && (iVar1 = iVar2, 0x285 < iVar2)) {
    iVar1 = 0x285;
  }
  iVar2 = (iVar3 + iVar1 * -0x1000) * ((&DAT_180099004)[iVar1] - (&DAT_180099000)[iVar1]);
  iVar1 = ((int)(iVar2 + (iVar2 >> 0x1f & 0xfffU)) >> 0xc) + (&DAT_180099000)[iVar1];
  if (iVar1 < 0) {
    iVar1 = 0;
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 1800158b0 (130 bytes) name=FUN_1800158b0

int FUN_1800158b0(undefined8 param_1,int param_2)

{
  uint uVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  
  uVar3 = 0;
  uVar4 = 0x286;
  do {
    uVar1 = (int)(uVar4 + uVar3) >> 1;
    if (param_2 < (int)(&DAT_180099000)[(int)uVar1]) {
      uVar4 = uVar1;
      uVar1 = uVar3;
    }
    uVar3 = uVar1;
  } while (uVar3 + 1 < uVar4);
  iVar2 = param_2 - (&DAT_180099000)[(int)uVar3];
  if (DAT_180073748 < iVar2) {
    return (int)((longlong)(int)(&DAT_180099a20)[(int)uVar3] * (longlong)iVar2 >> 0xc) + -150000 +
           uVar3 * 0x1000;
  }
  return ((&DAT_180099a20)[(int)uVar3] * iVar2 >> 0xc) + -150000 + uVar3 * 0x1000;
}


==================================================================

### EXPORT FUNC 180015940 (251 bytes) name=FUN_180015940

int FUN_180015940(undefined8 param_1,int param_2,int param_3)

{
  int iVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  
  iVar4 = param_2 + 150000;
  iVar1 = (int)(iVar4 + (iVar4 >> 0x1f & 0xfffU)) >> 0xc;
  iVar3 = 0;
  if ((-1 < iVar1) && (iVar3 = iVar1, 0x285 < iVar1)) {
    iVar3 = 0x285;
  }
  iVar1 = iVar4 + param_3;
  iVar2 = (int)(iVar1 + (iVar1 >> 0x1f & 0xfffU)) >> 0xc;
  iVar5 = 0;
  if ((-1 < iVar2) && (iVar5 = iVar2, 0x285 < iVar2)) {
    iVar5 = 0x285;
  }
  if (iVar3 != iVar5) {
    iVar1 = (iVar1 + iVar5 * -0x1000) * ((&DAT_180099004)[iVar5] - (&DAT_180099000)[iVar5]);
    iVar4 = (iVar4 + iVar3 * -0x1000) * ((&DAT_180099004)[iVar3] - (&DAT_180099000)[iVar3]);
    return (&DAT_180099000)[iVar5] +
           ((((int)((iVar1 >> 0x1f & 0xfffU) + iVar1) >> 0xc) -
            ((int)(iVar4 + (iVar4 >> 0x1f & 0xfffU)) >> 0xc)) - (&DAT_180099000)[iVar3]);
  }
  iVar3 = ((&DAT_180099004)[iVar3] - (&DAT_180099000)[iVar3]) * param_3;
  return (int)(iVar3 + (iVar3 >> 0x1f & 0xfffU)) >> 0xc;
}


==================================================================

### EXPORT FUNC 180015a40 (336 bytes) name=FUN_180015a40

int FUN_180015a40(undefined8 param_1,int param_2,uint param_3)

{
  int iVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  int iVar6;
  
  iVar3 = param_2 + 150000;
  uVar5 = 0x286;
  iVar6 = (int)((iVar3 >> 0x1f & 0xfffU) + iVar3) >> 0xc;
  if (iVar6 < 0) {
    iVar6 = 0;
  }
  else if (0x285 < iVar6) {
    iVar6 = 0x285;
  }
  iVar1 = (&DAT_180099000)[iVar6];
  if (((&DAT_180099004)[iVar6] - iVar1 <
       (int)(((param_3 ^ (int)param_3 >> 0x1f) - ((int)param_3 >> 0x1f)) * 2)) &&
     ((iVar3 = (iVar3 + iVar6 * -0x1000) * ((&DAT_180099004)[iVar6] - iVar1),
      iVar3 = iVar1 + ((int)(iVar3 + (iVar3 >> 0x1f & 0xfffU)) >> 0xc) + param_3, uVar4 = 0,
      iVar3 < iVar1 || (uVar4 = 0, (int)(&DAT_180099004)[iVar6] < iVar3)))) {
    do {
      uVar2 = (int)(uVar5 + uVar4) >> 1;
      if (iVar3 < (int)(&DAT_180099000)[(int)uVar2]) {
        uVar5 = uVar2;
        uVar2 = uVar4;
      }
      uVar4 = uVar2;
    } while (uVar4 + 1 < uVar5);
    iVar3 = iVar3 - (&DAT_180099000)[(int)uVar4];
    if (DAT_180073748 < iVar3) {
      iVar3 = (int)((longlong)(int)(&DAT_180099a20)[(int)uVar4] * (longlong)iVar3 >> 0xc) + -150000
              + uVar4 * 0x1000;
    }
    else {
      iVar3 = ((&DAT_180099a20)[(int)uVar4] * iVar3 >> 0xc) + -150000 + uVar4 * 0x1000;
    }
    iVar3 = iVar3 - param_2;
  }
  else {
    iVar3 = (int)((&DAT_180099a20)[iVar6] * param_3) >> 0xc;
  }
  return iVar3;
}


==================================================================

### EXPORT FUNC 180015b90 (392 bytes) name=FUN_180015b90

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

int FUN_180015b90(longlong param_1,int param_2,float param_3)

{
  int iVar1;
  int iVar2;
  int iVar3;
  float fVar4;
  float fVar5;
  float fVar6;
  
  if (*(int *)(param_1 + 0xcc) == 0) {
    return param_2;
  }
  fVar5 = *(float *)(param_1 + 0xf4);
  if ((((0.0 < fVar5) && (fVar5 <= DAT_18005e700)) && (0.0 < param_3)) &&
     (((param_3 <= DAT_18005e700 && (fVar4 = *(float *)(param_1 + 0xf8), 0.0 < fVar4)) &&
      (fVar4 <= DAT_18005e700)))) {
    fVar6 = fVar4 * fVar5 * param_3;
    fVar5 = DAT_18005e700;
    iVar2 = FUN_180015840(param_1,param_2);
    fVar4 = (float)iVar2;
    iVar2 = FUN_180015840(param_1,(int)(*(float *)(param_1 + 0xd8) * _DAT_18005e820));
    iVar2 = FUN_1800158b0(param_1,(int)((fVar4 - (float)iVar2 * (fVar5 - fVar6)) / fVar6));
    if (iVar2 < -0x42afe) {
      iVar2 = -0x42afe;
    }
    iVar3 = (*(int *)(param_1 + 0x5c) + -15000) / 5000;
    if (iVar3 < 0) {
      iVar3 = 0;
    }
    else if (6 < iVar3) {
      iVar3 = 6;
    }
    iVar1 = *(int *)(param_1 + 0xac + (longlong)iVar3 * 4);
    iVar2 = iVar2 + ((*(int *)(param_1 + 0x5c) + (iVar3 + 3) * -5000) *
                    (*(int *)(param_1 + 0xb0 + (longlong)iVar3 * 4) - iVar1)) / 5000 + iVar1;
    if (*(int *)(param_1 + 0x6c) != 0) {
      iVar2 = iVar2 + ((int)((float)iVar2 * *(float *)(param_1 + 0xec)) -
                      (int)(*(float *)(param_1 + 0xf0) * _DAT_18005e91c));
    }
    return iVar2;
  }
  SetLastError(0xe4ae0001);
  return param_2;
}


==================================================================

### EXPORT FUNC 180015d20 (1389 bytes) name=FUN_180015d20

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

undefined8 FUN_180015d20(longlong param_1,uint param_2,float param_3,float *param_4,uint *param_5)

{
  longlong lVar1;
  ushort uVar2;
  longlong lVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  ushort *puVar8;
  ulonglong uVar9;
  int iVar10;
  int iVar11;
  longlong lVar12;
  ulonglong uVar13;
  ulonglong uVar14;
  int iVar15;
  uint uVar16;
  uint uVar17;
  ulonglong uVar18;
  int iVar19;
  int iVar20;
  ulonglong uVar21;
  uint uVar22;
  uint uVar23;
  ulonglong uVar24;
  uint uVar25;
  float fVar26;
  uint local_60;
  int local_5c;
  
  uVar17 = 0;
  if (*(int *)(param_1 + 0x44c4c) == 0) {
    iVar11 = *(int *)(param_1 + 0x42010);
    uVar5 = 0x286;
    if (*(int *)(param_1 + 0x47950) == 0) {
      iVar19 = (iVar11 << ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f)) +
               *(int *)(param_1 + 0x47948);
    }
    else {
      uVar7 = 0x286;
      iVar19 = iVar11 << (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
      uVar25 = uVar17;
      do {
        uVar6 = (int)(uVar7 + uVar25) >> 1;
        if (iVar19 < (int)(&DAT_180099000)[(int)uVar6]) {
          uVar7 = uVar6;
          uVar6 = uVar25;
        }
        uVar25 = uVar6;
      } while (uVar25 + 1 < uVar7);
      iVar19 = iVar19 - (&DAT_180099000)[(int)uVar25];
      if (DAT_180073748 < iVar19) {
        iVar19 = (int)((longlong)(int)(&DAT_180099a20)[(int)uVar25] * (longlong)iVar19 >> 0xc) +
                 -150000 + uVar25 * 0x1000;
      }
      else {
        iVar19 = ((&DAT_180099a20)[(int)uVar25] * iVar19 >> 0xc) + -150000 + uVar25 * 0x1000;
      }
    }
    iVar20 = *(int *)(param_1 + 0x42018);
    if (*(int *)(param_1 + 0x47950) == 0) {
      iVar15 = (iVar20 << ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f)) +
               *(int *)(param_1 + 0x47948);
    }
    else {
      iVar15 = iVar20 << (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
      do {
        uVar7 = (int)(uVar5 + uVar17) >> 1;
        if (iVar15 < (int)(&DAT_180099000)[(int)uVar7]) {
          uVar5 = uVar7;
          uVar7 = uVar17;
        }
        uVar17 = uVar7;
      } while (uVar17 + 1 < uVar5);
      iVar15 = iVar15 - (&DAT_180099000)[(int)uVar17];
      if (DAT_180073748 < iVar15) {
        iVar15 = (int)((longlong)(int)(&DAT_180099a20)[(int)uVar17] * (longlong)iVar15 >> 0xc) +
                 -150000 + uVar17 * 0x1000;
      }
      else {
        iVar15 = ((&DAT_180099a20)[(int)uVar17] * iVar15 >> 0xc) + -150000 + uVar17 * 0x1000;
      }
    }
    if (iVar19 - iVar15 < 2000) {
      *(undefined4 *)(param_1 + 0x44c4c) = 0xffff;
    }
    else {
      iVar11 = iVar11 - iVar20;
      *(int *)(param_1 + 0x44c4c) =
           iVar11 / 3 + (iVar11 >> 0x1f) +
           (int)(((longlong)iVar11 / 3 + ((longlong)iVar11 >> 0x3f) & 0xffffffffU) >> 0x1f) + iVar20
      ;
    }
  }
  lVar3 = *(longlong *)(param_1 + 0x270);
  uVar17 = *(uint *)(param_1 + 0x44c4c);
  uVar2 = *(ushort *)(lVar3 + (ulonglong)param_2 * 2);
  if (uVar17 < uVar2) {
    iVar11 = *(int *)(param_1 + 0x41fe8);
    if (iVar11 != 0) {
      param_3 = param_3 * (float)(1 << ((byte)iVar11 & 0x1f));
    }
    uVar7 = *(uint *)(param_1 + 0x41fc0);
    uVar6 = param_2 / uVar7;
    iVar19 = *(int *)(param_1 + 0x41fc4) - uVar6;
    uVar23 = param_2 - uVar7 * uVar6;
    uVar16 = iVar19 - 1;
    local_5c = 0;
    uVar5 = (uVar7 - uVar23) - 1;
    uVar25 = uVar16;
    if (uVar5 < uVar16) {
      uVar25 = uVar5;
    }
    uVar22 = uVar6;
    if ((int)uVar23 < (int)uVar6) {
      uVar22 = uVar23;
    }
    if ((int)uVar25 <= (int)uVar22) {
      iVar20 = uVar7 - uVar23;
      if (uVar16 <= uVar5) {
        iVar20 = iVar19;
      }
      uVar22 = iVar20 - 1;
    }
    lVar12 = lVar3;
    iVar19 = 1;
    local_60 = (uint)uVar2;
    if (0 < (int)uVar22) {
      do {
        iVar20 = iVar19;
        uVar21 = 0;
        uVar17 = *(uint *)(param_1 + 0x41fc0);
        uVar16 = 0;
        lVar12 = lVar12 + (((ulonglong)((uVar6 - iVar20) * uVar17) - (longlong)iVar20) +
                          (longlong)(int)uVar23) * 2;
        iVar19 = iVar20 * 2;
        uVar9 = uVar21;
        uVar14 = uVar21;
        uVar5 = uVar16;
        uVar25 = uVar16;
        if (1 < iVar19 + 1) {
          uVar17 = uVar17 * iVar20 * 2;
          uVar5 = iVar19 + 1U >> 1;
          uVar13 = (ulonglong)uVar5;
          uVar5 = uVar5 * 2;
          uVar24 = uVar21;
          do {
            uVar18 = (ulonglong)uVar17;
            lVar1 = uVar9 * 2;
            uVar9 = uVar9 + 2;
            uVar4 = uVar17 + 1;
            uVar17 = uVar17 + 2;
            uVar25 = (int)uVar24 + (uint)*(ushort *)(lVar12 + lVar1) +
                     (uint)*(ushort *)(lVar12 + uVar18 * 2);
            uVar24 = (ulonglong)uVar25;
            uVar14 = (ulonglong)
                     ((int)uVar14 + (uint)*(ushort *)(lVar12 + -2 + uVar9 * 2) +
                     (uint)*(ushort *)(lVar12 + (ulonglong)uVar4 * 2));
            uVar13 = uVar13 - 1;
          } while (uVar13 != 0);
          uVar17 = *(uint *)(param_1 + 0x41fc0);
        }
        uVar4 = uVar16;
        if ((int)uVar5 <= iVar19) {
          uVar4 = (uint)*(ushort *)
                         (lVar12 + (ulonglong)(uVar5 + iVar20 * *(int *)(param_1 + 0x41fc0) * 2) * 2
                         ) + (uint)*(ushort *)(lVar12 + uVar9 * 2);
        }
        iVar15 = 1;
        iVar10 = uVar4 + uVar25 + (int)uVar14;
        uVar9 = uVar21;
        if (1 < iVar19 + -1) {
          uVar5 = uVar17 * 2;
          uVar25 = (iVar19 - 3U >> 1) + 1;
          uVar14 = (ulonglong)uVar25;
          iVar15 = uVar25 * 2 + 1;
          uVar25 = uVar5;
          do {
            uVar13 = (ulonglong)uVar25;
            uVar24 = (ulonglong)uVar17;
            uVar16 = iVar19 + uVar17;
            uVar17 = uVar17 + uVar5;
            uVar4 = iVar19 + uVar25;
            uVar9 = (ulonglong)
                    ((int)uVar9 + (uint)*(ushort *)(lVar12 + uVar24 * 2) +
                    (uint)*(ushort *)(lVar12 + (ulonglong)uVar16 * 2));
            uVar25 = uVar25 + uVar5;
            uVar16 = (int)uVar21 + (uint)*(ushort *)(lVar12 + uVar13 * 2) +
                     (uint)*(ushort *)(lVar12 + (ulonglong)uVar4 * 2);
            uVar21 = (ulonglong)uVar16;
            uVar14 = uVar14 - 1;
          } while (uVar14 != 0);
        }
        if (iVar15 < iVar19) {
          uVar17 = iVar15 * *(int *)(param_1 + 0x41fc0);
          iVar10 = iVar10 + (uint)*(ushort *)(lVar12 + (ulonglong)uVar17 * 2) +
                   (uint)*(ushort *)(lVar12 + (ulonglong)(iVar19 + uVar17) * 2);
        }
        uVar17 = *(uint *)(param_1 + 0x44c4c);
        uVar5 = (uVar16 + (int)uVar9 + iVar10) / (uint)(iVar20 * 8);
        if ((int)uVar5 <= (int)uVar17) {
          fVar26 = (float)(int)((uVar17 - local_60) * (iVar20 - local_5c)) /
                   (float)(int)(uVar5 - local_60) + (float)local_5c;
          if (fVar26 != _DAT_180057598) goto LAB_1800161d1;
          break;
        }
        if (param_3 < (float)iVar20) {
          iVar19 = (int)(iVar20 * 9 + (iVar20 * 9 >> 0x1f & 7U)) >> 3;
          if (iVar19 < iVar20 + 1) {
            iVar19 = iVar20 + 1;
          }
        }
        else {
          iVar19 = iVar20 + 1;
        }
        lVar12 = *(longlong *)(param_1 + 0x270);
        local_60 = uVar5;
        local_5c = iVar20;
      } while (iVar19 <= (int)uVar22);
    }
    fVar26 = (float)(int)uVar22;
    if (param_3 < fVar26) {
LAB_1800161d1:
      uVar5 = 0;
      if ((int)(fVar26 + _DAT_18005e918) < (int)uVar22) {
        uVar22 = (int)(fVar26 + _DAT_18005e918);
      }
      iVar19 = uVar22 * 2;
      if (-1 < iVar19) {
        uVar9 = (ulonglong)(iVar19 + 1);
        uVar6 = (uVar6 - uVar22) * uVar7;
        uVar25 = uVar5;
        do {
          puVar8 = (ushort *)
                   (lVar3 + (((ulonglong)uVar6 - (longlong)(int)uVar22) + (longlong)(int)uVar23) * 2
                   );
          if (-1 < iVar19) {
            uVar14 = (ulonglong)(iVar19 + 1);
            do {
              uVar2 = *puVar8;
              puVar8 = puVar8 + 1;
              if (uVar2 <= uVar17) {
                uVar25 = uVar25 + uVar2;
                uVar5 = uVar5 + 1;
              }
              uVar14 = uVar14 - 1;
            } while (uVar14 != 0);
          }
          uVar6 = uVar6 + uVar7;
          uVar9 = uVar9 - 1;
        } while (uVar9 != 0);
        if (uVar5 != 0) {
          if (iVar11 != 0) {
            fVar26 = fVar26 / (float)(1 << ((byte)iVar11 & 0x1f));
          }
          *param_4 = fVar26;
          *param_5 = uVar25 / uVar5;
          return 1;
        }
      }
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180016290 (2127 bytes) name=FUN_180016290

int FUN_180016290(longlong param_1,uint param_2,uint param_3,int param_4)

{
  longlong lVar1;
  uint uVar2;
  uint uVar3;
  undefined8 uVar4;
  int *piVar5;
  uint uVar6;
  uint uVar7;
  int iVar8;
  ulonglong uVar9;
  int iVar10;
  int iVar11;
  uint uVar12;
  int iVar13;
  float extraout_XMM0_Da;
  ulonglong uVar14;
  float fVar15;
  float fVar16;
  float fVar17;
  float local_res8 [2];
  uint local_58;
  uint local_54;
  
  iVar8 = DAT_180073748;
  if (*(int *)(param_1 + 0x41880) == 0) {
    if (*(int *)(param_1 + 0x47950) == 0) {
      return ((param_2 & 0xffff) << ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f)) +
             *(int *)(param_1 + 0x47948);
    }
    uVar7 = 0x286;
    iVar8 = (param_2 & 0xffff) << (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
    uVar12 = 0;
    do {
      uVar6 = (int)(uVar7 + uVar12) >> 1;
      if (iVar8 < (int)(&DAT_180099000)[(int)uVar6]) {
        uVar7 = uVar6;
        uVar6 = uVar12;
      }
      uVar12 = uVar6;
    } while (uVar12 + 1 < uVar7);
    iVar8 = iVar8 - (&DAT_180099000)[(int)uVar12];
    if (DAT_180073748 < iVar8) {
      return (int)((longlong)(int)(&DAT_180099a20)[(int)uVar12] * (longlong)iVar8 >> 0xc) + -150000
             + uVar12 * 0x1000;
    }
    return ((&DAT_180099a20)[(int)uVar12] * iVar8 >> 0xc) + -150000 + uVar12 * 0x1000;
  }
  fVar17 = 0.0;
  uVar9 = 0;
  uVar14 = (ulonglong)*(uint *)(param_1 + 0x98);
  if (*(uint *)(param_1 + 0x41884) <= *(uint *)(param_1 + 0x98)) {
    uVar14 = uVar9;
  }
  uVar7 = param_2 & 0xffff;
  fVar16 = *(float *)(uVar14 * 0x21c + 0x41a8c + param_1);
  lVar1 = uVar14 * 0x21c + 0x41888 + param_1;
  uVar12 = 0;
  local_54 = param_3;
  if ((fVar16 <= DAT_18005e9e0) || (DAT_18005e9dc <= fVar16)) {
    if ((param_4 != 0) &&
       ((((DAT_18005e700 <= *(float *)(lVar1 + 0xac) && (DAT_18005e700 <= *(float *)(lVar1 + 0xb0)))
         && (0.0 < *(float *)(lVar1 + 0xb4))) &&
        ((0.0 < *(float *)(lVar1 + 0xbc) &&
         (fVar16 = DAT_18005e700,
         uVar4 = FUN_180015d20(param_1,param_3,*(float *)(lVar1 + 0xb0),local_res8,&local_58),
         (int)uVar4 != 0)))))) {
      fVar15 = *(float *)(lVar1 + 0xac);
      if (*(float *)(lVar1 + 0xb0) < fVar15) {
        fVar15 = fVar15 * *(float *)(lVar1 + 0xbc) + *(float *)(lVar1 + 0xc0);
      }
      else {
        fVar15 = fVar15 * *(float *)(lVar1 + 0xb4) + *(float *)(lVar1 + 0xb8);
      }
      iVar10 = FUN_1800156e0(param_1,uVar7);
      iVar13 = FUN_1800156e0(param_1,local_58);
      uVar7 = FUN_180015770(param_1,(int)((float)(iVar10 - iVar13) *
                                          (fVar16 - extraout_XMM0_Da / fVar15) + (float)iVar10));
    }
  }
  else {
    if (*(int *)(param_1 + 0x47950) == 0) {
      iVar10 = (uVar7 << ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f)) +
               *(int *)(param_1 + 0x47948);
    }
    else {
      uVar6 = 0x286;
      iVar10 = uVar7 << (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
      uVar14 = uVar9;
      do {
        uVar7 = (int)(uVar6 + (int)uVar14) >> 1;
        if ((int)(&DAT_180099000)[(int)uVar7] <= iVar10) {
          uVar14 = (ulonglong)uVar7;
          uVar7 = uVar6;
        }
        uVar6 = uVar7;
        iVar13 = (int)uVar14;
      } while (iVar13 + 1U < uVar6);
      iVar10 = iVar10 - (&DAT_180099000)[iVar13];
      if (DAT_180073748 < iVar10) {
        iVar10 = (int)((longlong)(int)(&DAT_180099a20)[iVar13] * (longlong)iVar10 >> 0xc) + -150000
                 + iVar13 * 0x1000;
      }
      else {
        iVar10 = ((&DAT_180099a20)[iVar13] * iVar10 >> 0xc) + -150000 + iVar13 * 0x1000;
      }
    }
    iVar10 = iVar10 + 150000;
    uVar6 = (int)(iVar10 + (iVar10 >> 0x1f & 0xfffU)) >> 0xc;
    uVar7 = uVar12;
    if ((-1 < (int)uVar6) && (uVar7 = uVar6, 0x285 < (int)uVar6)) {
      uVar7 = 0x285;
    }
    iVar10 = (iVar10 + uVar7 * -0x1000) *
             ((&DAT_180099004)[(int)uVar7] - (&DAT_180099000)[(int)uVar7]);
    uVar7 = ((int)((iVar10 >> 0x1f & 0xfffU) + iVar10) >> 0xc) + (&DAT_180099000)[(int)uVar7];
    if ((int)uVar7 < 0) {
      uVar7 = uVar12;
    }
    iVar10 = *(int *)(param_1 + 0x5c) + 150000;
    uVar2 = (int)(iVar10 + (iVar10 >> 0x1f & 0xfffU)) >> 0xc;
    uVar6 = uVar12;
    if ((-1 < (int)uVar2) && (uVar6 = uVar2, 0x285 < (int)uVar2)) {
      uVar6 = 0x285;
    }
    iVar10 = (iVar10 + uVar6 * -0x1000) *
             ((&DAT_180099004)[(int)uVar6] - (&DAT_180099000)[(int)uVar6]);
    uVar6 = ((int)(iVar10 + (iVar10 >> 0x1f & 0xfffU)) >> 0xc) + (&DAT_180099000)[(int)uVar6];
    if ((int)uVar6 < 0) {
      uVar6 = uVar12;
    }
    iVar10 = (int)(((float)(int)uVar7 - (DAT_18005e700 - fVar16) * (float)(int)uVar6) / fVar16);
    if (iVar10 < DAT_18009907c) {
      iVar10 = DAT_18009907c;
    }
    uVar7 = FUN_180015770(param_1,iVar10);
  }
  if (*(int *)(param_1 + 0x47950) != 0) {
    uVar6 = 0x286;
    iVar10 = uVar7 << (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
    uVar14 = uVar9;
    do {
      uVar7 = (int)(uVar6 + (int)uVar14) >> 1;
      if ((int)(&DAT_180099000)[(int)uVar7] <= iVar10) {
        uVar14 = (ulonglong)uVar7;
        uVar7 = uVar6;
      }
      uVar6 = uVar7;
      iVar13 = (int)uVar14;
    } while (iVar13 + 1U < uVar6);
    iVar10 = iVar10 - (&DAT_180099000)[iVar13];
    if (iVar8 < iVar10) {
      uVar7 = (int)((longlong)(int)(&DAT_180099a20)[iVar13] * (longlong)iVar10 >> 0xc) + -150000 +
              iVar13 * 0x1000;
    }
    else {
      uVar7 = ((&DAT_180099a20)[iVar13] * iVar10 >> 0xc) + -150000 + iVar13 * 0x1000;
    }
  }
  uVar6 = uVar12;
  if (*(int *)(lVar1 + 0x3c) != 1) {
    piVar5 = (int *)(lVar1 + 0x40);
    do {
      uVar6 = (uint)uVar9;
      if ((int)uVar7 <= *piVar5) break;
      uVar6 = uVar6 + 1;
      uVar9 = (ulonglong)uVar6;
      piVar5 = piVar5 + 1;
    } while (uVar6 < *(int *)(lVar1 + 0x3c) - 1U);
  }
  iVar8 = (*(int *)(lVar1 + 0x38) - *(int *)(lVar1 + 0x34)) + *(int *)(param_1 + 0x54);
  iVar10 = (int)((longlong)*(int *)(lVar1 + 0xd4 + (ulonglong)(uVar6 * 2) * 4) *
                 (longlong)(int)uVar7 >> (*(byte *)(lVar1 + 0x30) & 0x3f)) +
           *(int *)(lVar1 + 0xd4 + (ulonglong)(uVar6 * 2 + 1) * 4);
  if (*(int *)(param_1 + 100) == 0) {
    iVar8 = *(int *)(param_1 + 0x58) - iVar8;
    if (iVar8 < 0x3e9) {
      if (iVar8 < -1000) {
        iVar8 = -1000;
      }
    }
    else {
      iVar8 = 1000;
    }
  }
  else {
    iVar8 = iVar8 - *(int *)(param_1 + 0x58);
    if (iVar8 < 0x3e9) {
      if (iVar8 < -5000) {
        iVar8 = -5000;
      }
    }
    else {
      iVar8 = 1000;
    }
  }
  iVar13 = *(int *)(param_1 + 0x58) + 150000;
  iVar8 = iVar8 + ((*(int *)(param_1 + 0x5c) - *(int *)(param_1 + 0x54)) * 2 -
                  *(int *)(param_1 + 0x60)) + *(int *)(param_1 + 0x58);
  uVar6 = (int)(iVar13 + (iVar13 >> 0x1f & 0xfffU)) >> 0xc;
  uVar7 = uVar12;
  if ((-1 < (int)uVar6) && (uVar7 = uVar6, 0x285 < (int)uVar6)) {
    uVar7 = 0x285;
  }
  iVar11 = iVar13 + iVar8;
  uVar2 = (int)(iVar11 + (iVar11 >> 0x1f & 0xfffU)) >> 0xc;
  uVar6 = uVar12;
  if ((-1 < (int)uVar2) && (uVar6 = uVar2, 0x285 < (int)uVar2)) {
    uVar6 = 0x285;
  }
  if (uVar7 == uVar6) {
    iVar8 = ((&DAT_180099004)[(int)uVar7] - (&DAT_180099000)[(int)uVar7]) * iVar8;
    uVar7 = (int)((iVar8 >> 0x1f & 0xfffU) + iVar8) >> 0xc;
  }
  else {
    iVar8 = (iVar11 + uVar6 * -0x1000) *
            ((&DAT_180099004)[(int)uVar6] - (&DAT_180099000)[(int)uVar6]);
    iVar13 = (iVar13 + uVar7 * -0x1000) *
             ((&DAT_180099004)[(int)uVar7] - (&DAT_180099000)[(int)uVar7]);
    uVar7 = ((((int)((iVar8 >> 0x1f & 0xfffU) + iVar8) >> 0xc) -
             ((int)(iVar13 + (iVar13 >> 0x1f & 0xfffU)) >> 0xc)) - (&DAT_180099000)[(int)uVar7]) +
            (&DAT_180099000)[(int)uVar6];
  }
  if (param_4 != 0) {
    if (*(float *)(param_1 + 0xa8) != fVar17) {
      iVar8 = *(int *)(param_1 + 0x44cb8);
      if (*(int *)(lVar1 + 0x20c) - *(int *)(lVar1 + 0x208) < 0xc351) {
        if (40000 < iVar8) {
          iVar8 = 40000;
        }
        if (iVar8 < 5000) {
          iVar8 = 5000;
        }
      }
      else {
        if (80000 < iVar8) {
          iVar8 = 80000;
        }
        if (iVar8 < -80000) {
          iVar8 = -80000;
        }
      }
      iVar8 = FUN_180015940(param_1,35000,
                            (int)((float)(iVar8 - *(int *)(param_1 + 0xa4)) *
                                 *(float *)(param_1 + 0xa8)));
      uVar7 = uVar7 + iVar8;
    }
    fVar16 = *(float *)(lVar1 + 0x214);
    if (fVar16 != fVar17) {
      uVar6 = *(uint *)(param_1 + 0x41fc0);
      iVar13 = (local_54 - uVar6 * (local_54 / uVar6)) - (uVar6 >> 1);
      iVar8 = local_54 / uVar6 - (*(uint *)(param_1 + 0x41fc4) >> 1);
      uVar14 = FUN_1800512c0((float)(iVar13 * iVar13 + iVar8 * iVar8));
      iVar8 = iVar10 + 150000;
      uVar2 = (int)(iVar8 + (iVar8 >> 0x1f & 0xfffU)) >> 0xc;
      uVar6 = uVar12;
      if ((-1 < (int)uVar2) && (uVar6 = uVar2, 0x285 < (int)uVar2)) {
        uVar6 = 0x285;
      }
      iVar8 = (iVar8 + uVar6 * -0x1000) *
              ((&DAT_180099004)[(int)uVar6] - (&DAT_180099000)[(int)uVar6]);
      uVar6 = ((int)((iVar8 >> 0x1f & 0xfffU) + iVar8) >> 0xc) + (&DAT_180099000)[(int)uVar6];
      if ((int)uVar6 < 0) {
        uVar6 = uVar12;
      }
      iVar8 = *(int *)(param_1 + 0x60) + 150000;
      uVar3 = (int)(iVar8 + (iVar8 >> 0x1f & 0xfffU)) >> 0xc;
      uVar2 = uVar12;
      if ((-1 < (int)uVar3) && (uVar2 = uVar3, 0x285 < (int)uVar3)) {
        uVar2 = 0x285;
      }
      iVar8 = (iVar8 + uVar2 * -0x1000) *
              ((&DAT_180099004)[(int)uVar2] - (&DAT_180099000)[(int)uVar2]);
      uVar2 = ((int)(iVar8 + (iVar8 >> 0x1f & 0xfffU)) >> 0xc) + (&DAT_180099000)[(int)uVar2];
      if ((int)uVar2 < 0) {
        uVar2 = uVar12;
      }
      uVar7 = uVar7 + (int)((float)(int)(uVar6 - uVar2) * (DAT_18005e9d8 - (float)uVar14 * fVar16));
    }
  }
  iVar8 = FUN_180015a40(param_1,iVar10,uVar7);
  return iVar8 + iVar10;
}


==================================================================

### EXPORT FUNC 180016ae0 (617 bytes) name=FUN_180016ae0

void FUN_180016ae0(longlong param_1)

{
  DWORD DVar1;
  undefined8 uVar2;
  int *piVar3;
  longlong lVar4;
  longlong lVar5;
  ulonglong uVar6;
  uint uVar7;
  DWORD DVar8;
  bool bVar9;
  undefined8 local_48 [2];
  CFile local_38 [32];
  
  *(undefined4 *)(param_1 + 0x41348) = 0;
  uVar7 = 0;
  if (*(int *)(param_1 + 0x41558) != 2) {
    piVar3 = (int *)(param_1 + 0x41568);
    do {
      if (*(int *)(param_1 + 0x54) <= *piVar3) break;
      uVar7 = uVar7 + 1;
      piVar3 = piVar3 + 1;
    } while (uVar7 < *(int *)(param_1 + 0x41558) - 2U);
  }
  *(uint *)(param_1 + 0x41840) = uVar7;
  DVar8 = *(int *)(param_1 + 0x41560) +
          (*(int *)(param_1 + 0x41554) * 3 + -1) * *(int *)(param_1 + 0x47938) * 2 +
          *(int *)(param_1 + 0x4155c);
  do {
    if (*(int *)(param_1 + 0x41840) + 1U < uVar7) {
      uVar7 = *(uint *)(param_1 + 0x41840);
      lVar4 = (ulonglong)*(uint *)(param_1 + 0x41758 + (ulonglong)uVar7 * 4) +
              *(longlong *)(param_1 + 0x416a0);
      *(longlong *)(param_1 + 0x41848) = lVar4;
      lVar5 = (ulonglong)(uint)((*(int *)(param_1 + 0x41554) + -1) * *(int *)(param_1 + 0x47938)) +
              (ulonglong)(*(uint *)(param_1 + 0x4155c) >> 1);
      *(longlong *)(param_1 + 0x41860) = lVar4 + lVar5 * 2;
      lVar4 = (ulonglong)*(uint *)(param_1 + 0x41758 + (ulonglong)(uVar7 + 1) * 4) +
              *(longlong *)(param_1 + 0x416a0);
      *(longlong *)(param_1 + 0x41850) = lVar4;
      *(longlong *)(param_1 + 0x41868) = lVar4 + lVar5 * 2;
      *(ulonglong *)(param_1 + 0x41878) =
           (ulonglong)*(uint *)(param_1 + 0x417f4 + (ulonglong)uVar7 * 4) +
           *(longlong *)(param_1 + 0x416b0);
      return;
    }
    uVar6 = (ulonglong)uVar7;
    if (*(int *)(param_1 + 0x416b8 + uVar6 * 4) == 0) {
      FUN_180020138((undefined8 *)local_38);
      uVar2 = FUN_180020a6c((longlong)local_38,(LPCWSTR)(param_1 + 0x4134c),0x40,0);
      if ((int)uVar2 == 0) {
        FUN_1800203a4(local_38);
        return;
      }
      FUN_18001ef2c(local_48);
      CFile::Seek(local_38,(ulonglong)*(uint *)(param_1 + 0x41708 + uVar6 * 4),0);
      DVar1 = FUN_18001fd6c((longlong)local_38,
                            (LPVOID)((ulonglong)*(uint *)(param_1 + 0x41758 + uVar6 * 4) +
                                    *(longlong *)(param_1 + 0x416a0)),DVar8);
      bVar9 = DVar1 == DVar8;
      if ((*(int *)(param_1 + 0x41654 + uVar6 * 4) != 0) &&
         (uVar7 <= *(int *)(param_1 + 0x41558) - 2U)) {
        CFile::Seek(local_38,(ulonglong)*(uint *)(param_1 + 0x417a8 + uVar6 * 4),0);
        DVar1 = FUN_18001fd6c((longlong)local_38,
                              (LPVOID)((ulonglong)*(uint *)(param_1 + 0x417f4 + uVar6 * 4) +
                                      *(longlong *)(param_1 + 0x416b0)),
                              *(int *)(param_1 + 0x41654 + uVar6 * 4) * 0x28);
        if ((ulonglong)DVar1 != (ulonglong)(uint)(*(int *)(param_1 + 0x41654 + uVar6 * 4) * 10) << 2
           ) {
          bVar9 = false;
        }
      }
      FUN_18001ef94();
      CFile::Close(local_38);
      if (!bVar9) {
        FUN_1800203a4(local_38);
        return;
      }
      *(undefined4 *)(param_1 + 0x416b8 + uVar6 * 4) = 1;
      FUN_1800203a4(local_38);
    }
    uVar7 = uVar7 + 1;
  } while( true );
}


==================================================================

### EXPORT FUNC 180016d60 (24 bytes) name=Unwind@180016d60

void Unwind_180016d60(undefined8 param_1,longlong param_2)

{
  FUN_1800203a4((CFile *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 180016d80 (24 bytes) name=Unwind@180016d80

void Unwind_180016d80(void)

{
  thunk_FUN_18001ef94();
  return;
}


==================================================================

### EXPORT FUNC 180016da0 (46 bytes) name=Catch@180016da0

undefined * Catch_180016da0(undefined8 param_1,longlong param_2)

{
  *(undefined8 *)(param_2 + 0x38) = *(undefined8 *)(param_2 + 0x28);
  CFile::Close((CFile *)(param_2 + 0x40));
  return &DAT_180016ca9;
}


==================================================================

### EXPORT FUNC 180016dd0 (316 bytes) name=FUN_180016dd0

void FUN_180016dd0(longlong param_1,short *param_2,short *param_3,short *param_4,int param_5)

{
  short sVar1;
  bool bVar2;
  int iVar3;
  short sVar4;
  int iVar5;
  
  iVar3 = *(int *)(param_1 + 0x54);
  bVar2 = false;
  if ((iVar3 < *(int *)(param_1 + 0x41564)) ||
     (*(int *)(param_1 + 0x41564 + (ulonglong)(*(int *)(param_1 + 0x41558) - 1) * 4) < iVar3)) {
    bVar2 = true;
  }
  iVar5 = *(int *)(param_1 + 0x41564 + (ulonglong)*(uint *)(param_1 + 0x41840) * 4);
  iVar3 = ((iVar3 - iVar5) * 0x1000) /
          (*(int *)(param_1 + 0x41564 + (ulonglong)(*(uint *)(param_1 + 0x41840) + 1) * 4) - iVar5);
  if (iVar3 < 0x4000) {
    if (iVar3 < -0x3fff) {
      iVar3 = -0x3fff;
    }
  }
  else {
    iVar3 = 0x3fff;
  }
  if (bVar2) {
    for (; param_5 != 0; param_5 = param_5 + -1) {
      sVar4 = *param_2;
      sVar1 = *param_3;
      param_2 = param_2 + 1;
      param_3 = param_3 + 1;
      iVar5 = (((int)sVar1 - (int)sVar4) * iVar3 >> 0xc) + (int)sVar4;
      if (iVar5 < 0x8000) {
        sVar4 = (short)iVar5;
        if (iVar5 < -0x8000) {
          sVar4 = -0x8000;
        }
      }
      else {
        sVar4 = 0x7fff;
      }
      *param_4 = sVar4;
      param_4 = param_4 + 1;
    }
  }
  else if (param_5 != 0) {
    do {
      sVar4 = *param_2;
      sVar1 = *param_3;
      param_2 = param_2 + 1;
      param_3 = param_3 + 1;
      param_5 = param_5 + -1;
      *param_4 = (short)(((int)sVar1 - (int)sVar4) * iVar3 >> 0xc) + sVar4;
      param_4 = param_4 + 1;
    } while (param_5 != 0);
    return;
  }
  return;
}


==================================================================

### EXPORT FUNC 180016f10 (289 bytes) name=FUN_180016f10

void FUN_180016f10(longlong param_1,ushort *param_2,ushort *param_3,short *param_4,int param_5)

{
  ushort uVar1;
  ushort uVar2;
  bool bVar3;
  int iVar4;
  short sVar5;
  int iVar6;
  
  iVar4 = *(int *)(param_1 + 0x54);
  bVar3 = false;
  if ((iVar4 < *(int *)(param_1 + 0x41564)) ||
     (*(int *)(param_1 + 0x41564 + (ulonglong)(*(int *)(param_1 + 0x41558) - 1) * 4) < iVar4)) {
    bVar3 = true;
  }
  iVar6 = *(int *)(param_1 + 0x41564 + (ulonglong)*(uint *)(param_1 + 0x41840) * 4);
  iVar4 = ((iVar4 - iVar6) * 0x1000) /
          (*(int *)(param_1 + 0x41564 + (ulonglong)(*(uint *)(param_1 + 0x41840) + 1) * 4) - iVar6);
  if (iVar4 < 0x4000) {
    if (iVar4 < -0x3fff) {
      iVar4 = -0x3fff;
    }
  }
  else {
    iVar4 = 0x3fff;
  }
  if (bVar3) {
    for (; param_5 != 0; param_5 = param_5 + -1) {
      uVar1 = *param_2;
      uVar2 = *param_3;
      param_2 = param_2 + 1;
      param_3 = param_3 + 1;
      iVar6 = ((int)(((uint)uVar2 - (uint)uVar1) * iVar4) >> 0xc) + (uint)uVar1;
      if (iVar6 < 0x10000) {
        sVar5 = (short)iVar6;
        if (iVar6 < 0) {
          sVar5 = 0;
        }
      }
      else {
        sVar5 = -1;
      }
      *param_4 = sVar5;
      param_4 = param_4 + 1;
    }
  }
  else {
    for (; param_5 != 0; param_5 = param_5 + -1) {
      uVar1 = *param_2;
      uVar2 = *param_3;
      param_2 = param_2 + 1;
      param_3 = param_3 + 1;
      *param_4 = (short)((int)(((uint)uVar2 - (uint)uVar1) * iVar4) >> 0xc) + uVar1;
      param_4 = param_4 + 1;
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180017040 (413 bytes) name=FUN_180017040

void FUN_180017040(longlong param_1,ushort *param_2)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  undefined **ppuVar4;
  int iVar5;
  int iVar6;
  ushort *puVar7;
  int iVar8;
  undefined2 *puVar9;
  uint uVar10;
  ulonglong uVar11;
  ushort *puVar12;
  longlong local_res8;
  
  iVar2 = DAT_18006ea60;
  puVar7 = (ushort *)0x0;
  iVar8 = 0;
  puVar12 = puVar7;
  if (*(int *)(param_1 + 0x41f0c) != 0) {
    puVar12 = *(ushort **)(param_1 + 0x41ef0);
  }
  puVar9 = *(undefined2 **)(param_1 + 0x270);
  if (*(int *)(param_1 + 0x47950) == 0) {
    iVar3 = 50000 - *(int *)(param_1 + 0x47948) >> ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f)
    ;
    if (iVar3 < 0) {
      iVar3 = iVar8;
    }
  }
  else {
    iVar3 = (DAT_1800990c4 - DAT_1800990c0) * 0xd40;
    iVar3 = ((int)((iVar3 >> 0x1f & 0xfffU) + iVar3) >> 0xc) + DAT_1800990c0;
    if (iVar3 < 0) {
      iVar3 = iVar8;
    }
    iVar3 = iVar3 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
  }
  iVar6 = iVar8;
  for (uVar10 = *(uint *)(param_1 + 0x47938); uVar11 = (ulonglong)uVar10, uVar10 != 0;
      uVar10 = uVar10 - 1) {
    iVar5 = ((uint)*param_2 - (uint)*puVar12) * iVar2 + iVar3;
    puVar12 = puVar12 + 1;
    param_2 = param_2 + 1;
    if (iVar5 < 0x10000) {
      if (iVar5 < 0) {
        puVar7 = (ushort *)(ulonglong)((int)puVar7 + 1);
        iVar5 = iVar8;
      }
    }
    else {
      puVar7 = (ushort *)(ulonglong)((int)puVar7 + 1);
      iVar5 = 0xffff;
    }
    iVar6 = (int)puVar7;
    *puVar9 = (short)iVar5;
    puVar9 = puVar9 + 1;
  }
  if (((*(int *)(param_1 + 0xfc) != 0) && (0x100 < iVar6)) && (1 < iVar2)) {
    DAT_18006ea60 = iVar2 + -1;
    ppuVar4 = FUN_18001fcc0();
    if (ppuVar4 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7fffbffb);
    }
    local_res8 = (**(code **)(*ppuVar4 + 0x18))(ppuVar4);
    local_res8 = local_res8 + 0x18;
    FUN_18001ad00(&local_res8,L"Converstation ratio adjusted to %dmK/LSB.",
                  (ulonglong)(uint)(*(int *)(param_1 + 0x47944) * DAT_18006ea60),uVar11);
    LOCK();
    piVar1 = (int *)(local_res8 + -8);
    iVar2 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar2 + -1 < 1) {
      (**(code **)(**(longlong **)(local_res8 + -0x18) + 8))();
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 1800171e0 (24 bytes) name=Unwind@1800171e0

void Unwind_1800171e0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 180017200 (297 bytes) name=FUN_180017200

void FUN_180017200(longlong param_1,ushort *param_2)

{
  longlong lVar1;
  ushort *puVar2;
  ushort uVar3;
  ushort uVar4;
  undefined4 uVar5;
  int iVar6;
  uint uVar7;
  short *psVar8;
  uint uVar9;
  ushort *puVar10;
  ulonglong uVar11;
  int iVar12;
  short *psVar13;
  int iVar14;
  undefined2 uVar15;
  uint uVar16;
  undefined2 *puVar17;
  longlong lVar18;
  
  psVar13 = *(short **)(param_1 + 0x41858);
  puVar10 = (ushort *)0x0;
  if (*(int *)(param_1 + 0x41f0c) != 0) {
    puVar10 = *(ushort **)(param_1 + 0x41ef0);
  }
  iVar12 = *(int *)(param_1 + 0x47938);
  lVar18 = *(longlong *)(param_1 + 0x41870);
  uVar5 = *(undefined4 *)(param_1 + 0x11c);
  puVar17 = *(undefined2 **)(param_1 + 0x270);
  uVar16 = *(int *)(param_1 + 0x41554) - 1;
  iVar6 = iVar12 * 2;
  if (iVar12 != 0) {
    do {
      uVar9 = 0;
      uVar3 = *puVar10;
      uVar4 = *param_2;
      puVar10 = puVar10 + 1;
      param_2 = param_2 + 1;
      iVar14 = (int)((uint)uVar4 - (uint)uVar3) >> 1;
      psVar8 = psVar13;
      uVar7 = 0;
      if (uVar16 != 0) {
        do {
          uVar9 = uVar7;
          if (iVar14 <= *psVar8) break;
          uVar9 = uVar9 + 1;
          psVar8 = psVar8 + 1;
          uVar7 = uVar9;
        } while (uVar9 < uVar16);
      }
      uVar11 = (ulonglong)(uVar9 * iVar6);
      psVar13 = psVar13 + uVar16;
      puVar2 = (ushort *)(lVar18 + uVar11 * 2);
      lVar1 = lVar18 + 2;
      lVar18 = lVar18 + 4;
      iVar14 = ((int)((uint)*puVar2 * iVar14) >> ((byte)uVar5 & 0x1f)) +
               (uint)*(ushort *)(lVar1 + uVar11 * 2);
      if (iVar14 < 0x10000) {
        uVar15 = (undefined2)iVar14;
        if (iVar14 < 0) {
          uVar15 = 0;
        }
      }
      else {
        uVar15 = 0xffff;
      }
      *puVar17 = uVar15;
      puVar17 = puVar17 + 1;
      iVar12 = iVar12 + -1;
    } while (iVar12 != 0);
  }
  return;
}


==================================================================

### EXPORT FUNC 180017330 (595 bytes) name=FUN_180017330

void FUN_180017330(longlong param_1,longlong param_2)

{
  uint uVar1;
  uint *puVar2;
  uint uVar3;
  
  puVar2 = *(uint **)(param_1 + 0x41878);
  uVar3 = 0;
  uVar1 = *(uint *)(param_1 + 0x41654 + (ulonglong)*(uint *)(param_1 + 0x41840) * 4);
  if (uVar1 != 0) {
    do {
      switch(puVar2[1]) {
      case 3:
        *(short *)(param_2 + (ulonglong)*puVar2 * 2) =
             (short)((ulonglong)
                     ((longlong)
                      (int)((uint)*(ushort *)(param_2 + (ulonglong)puVar2[4] * 2) +
                            (uint)*(ushort *)(param_2 + (ulonglong)puVar2[3] * 2) +
                           (uint)*(ushort *)(param_2 + (ulonglong)puVar2[2] * 2)) * 0x55555556) >>
                    0x20);
        break;
      case 4:
        *(short *)(param_2 + (ulonglong)*puVar2 * 2) =
             (short)((int)((uint)*(ushort *)(param_2 + (ulonglong)puVar2[5] * 2) +
                           (uint)*(ushort *)(param_2 + (ulonglong)puVar2[4] * 2) +
                           (uint)*(ushort *)(param_2 + (ulonglong)puVar2[3] * 2) +
                          (uint)*(ushort *)(param_2 + (ulonglong)puVar2[2] * 2)) >> 2);
        break;
      case 5:
        *(short *)(param_2 + (ulonglong)*puVar2 * 2) =
             (short)(((uint)*(ushort *)(param_2 + (ulonglong)puVar2[6] * 2) +
                      (uint)*(ushort *)(param_2 + (ulonglong)puVar2[5] * 2) +
                      (uint)*(ushort *)(param_2 + (ulonglong)puVar2[4] * 2) +
                      (uint)*(ushort *)(param_2 + (ulonglong)puVar2[3] * 2) +
                     (uint)*(ushort *)(param_2 + (ulonglong)puVar2[2] * 2)) / 5);
        break;
      case 6:
        *(short *)(param_2 + (ulonglong)*puVar2 * 2) =
             (short)((ulonglong)
                     ((longlong)
                      (int)((uint)*(ushort *)(param_2 + (ulonglong)puVar2[7] * 2) +
                            (uint)*(ushort *)(param_2 + (ulonglong)puVar2[6] * 2) +
                            (uint)*(ushort *)(param_2 + (ulonglong)puVar2[5] * 2) +
                            (uint)*(ushort *)(param_2 + (ulonglong)puVar2[4] * 2) +
                            (uint)*(ushort *)(param_2 + (ulonglong)puVar2[3] * 2) +
                           (uint)*(ushort *)(param_2 + (ulonglong)puVar2[2] * 2)) * 0x2aaaaaab) >>
                    0x20);
        break;
      case 7:
        *(short *)(param_2 + (ulonglong)*puVar2 * 2) =
             (short)(((uint)*(ushort *)(param_2 + (ulonglong)puVar2[8] * 2) +
                      (uint)*(ushort *)(param_2 + (ulonglong)puVar2[7] * 2) +
                      (uint)*(ushort *)(param_2 + (ulonglong)puVar2[6] * 2) +
                      (uint)*(ushort *)(param_2 + (ulonglong)puVar2[5] * 2) +
                      (uint)*(ushort *)(param_2 + (ulonglong)puVar2[4] * 2) +
                      (uint)*(ushort *)(param_2 + (ulonglong)puVar2[3] * 2) +
                     (uint)*(ushort *)(param_2 + (ulonglong)puVar2[2] * 2)) / 7);
        break;
      case 8:
        *(short *)(param_2 + (ulonglong)*puVar2 * 2) =
             (short)((int)((uint)*(ushort *)(param_2 + (ulonglong)puVar2[8] * 2) +
                           (uint)*(ushort *)(param_2 + (ulonglong)puVar2[7] * 2) +
                           (uint)*(ushort *)(param_2 + (ulonglong)puVar2[6] * 2) +
                           (uint)*(ushort *)(param_2 + (ulonglong)puVar2[5] * 2) +
                           (uint)*(ushort *)(param_2 + (ulonglong)puVar2[4] * 2) +
                           (uint)*(ushort *)(param_2 + (ulonglong)puVar2[3] * 2) +
                           (uint)*(ushort *)(param_2 + (ulonglong)puVar2[2] * 2) +
                          (uint)*(ushort *)(param_2 + (ulonglong)puVar2[9] * 2)) >> 3);
        break;
      default:
        goto switchD_18001737a_default;
      }
      uVar3 = uVar3 + 1;
      puVar2 = puVar2 + 10;
    } while (uVar3 < uVar1);
  }
switchD_18001737a_default:
  return;
}


==================================================================

### EXPORT FUNC 1800175a0 (194 bytes) name=FUN_1800175a0

void FUN_1800175a0(longlong param_1)

{
  ushort uVar1;
  int iVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  ushort *puVar6;
  ushort *puVar7;
  
  if (*(int *)(param_1 + 0x47950) == 0) {
    uVar3 = -*(int *)(param_1 + 0x47948) >> ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
    if ((int)uVar3 < 0) {
      uVar3 = 0;
    }
  }
  else {
    iVar2 = (DAT_180099094 - DAT_180099090) * 0x9f0;
    iVar2 = ((int)(iVar2 + (iVar2 >> 0x1f & 0xfffU)) >> 0xc) + DAT_180099090;
    if (iVar2 < 0) {
      iVar2 = 0;
    }
    uVar3 = iVar2 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
  }
  iVar2 = *(int *)(param_1 + 0x47938);
  puVar7 = *(ushort **)(param_1 + 0x278);
  puVar6 = *(ushort **)(param_1 + 0x270);
  if (iVar2 != 0) {
    do {
      uVar1 = *puVar7;
      puVar7 = puVar7 + 1;
      iVar4 = ((uint)*puVar6 - (uint)uVar1) + (uVar3 & 0xffff);
      iVar5 = 0;
      if ((-1 < iVar4) && (iVar5 = iVar4, 0xfffe < iVar4)) {
        iVar5 = 0xffff;
      }
      *puVar6 = (ushort)iVar5;
      puVar6 = puVar6 + 1;
      iVar2 = iVar2 + -1;
    } while (iVar2 != 0);
  }
  return;
}


==================================================================

### EXPORT FUNC 180017670 (249 bytes) name=FUN_180017670

undefined8 FUN_180017670(longlong param_1,int *param_2,ulonglong param_3,int param_4)

{
  float fVar1;
  int iVar2;
  DWORD dwErrCode;
  uint uVar3;
  uint uVar4;
  ushort *puVar5;
  
  if ((*(int *)(param_1 + 0x234) != 0) && (param_2 != (int *)0x0)) {
    uVar4 = *(uint *)(param_1 + 0x47938);
    if (((uint)(param_3 >> 2) & 0x3fffffff) < uVar4) {
      uVar4 = (uint)(param_3 >> 2) & 0x3fffffff;
    }
    puVar5 = *(ushort **)(param_1 + 0x270);
    fVar1 = *(float *)(param_1 + 0xd4);
    uVar3 = 0;
    if (uVar4 != 0) {
      do {
        iVar2 = FUN_180016290(param_1,(uint)*puVar5,uVar3,1);
        puVar5 = puVar5 + 1;
        if ((param_4 != 0) || (*(int *)(param_1 + 0x78) != 0)) {
          iVar2 = FUN_180015b90(param_1,iVar2,fVar1);
        }
        uVar3 = uVar3 + 1;
        *param_2 = iVar2;
        param_2 = param_2 + 1;
      } while (uVar3 < uVar4);
    }
    return 1;
  }
  dwErrCode = 0xe4ae0001;
  if (*(int *)(param_1 + 0x234) == 0) {
    dwErrCode = 0xe4ae0005;
  }
  SetLastError(dwErrCode);
  return 0;
}


==================================================================

### EXPORT FUNC 180017770 (1228 bytes) name=FUN_180017770

/* WARNING: Function: __chkstk replaced with injection: alloca_probe */

void FUN_180017770(longlong param_1,undefined8 param_2)

{
  undefined2 *puVar1;
  longlong lVar2;
  ushort uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  uint uVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  uint uVar17;
  uint uVar18;
  undefined2 *puVar19;
  undefined2 *puVar20;
  undefined4 *puVar21;
  longlong lVar22;
  longlong lVar23;
  undefined2 uVar24;
  uint uVar25;
  int iVar26;
  ulonglong uVar27;
  float *pfVar28;
  int iVar29;
  ulonglong uVar30;
  longlong lVar31;
  ulonglong uVar32;
  ulonglong uVar33;
  float fVar34;
  float fVar35;
  float fVar36;
  float fVar37;
  float fVar38;
  undefined4 uVar39;
  float fVar40;
  float afStack_40068 [4];
  float afStack_40058 [65548];
  
  uVar39 = (undefined4)((ulonglong)param_2 >> 0x20);
  puVar20 = *(undefined2 **)(param_1 + 0x270);
  uVar30 = 0;
  puVar19 = (undefined2 *)(*(longlong *)(param_1 + 0x290) + 2);
  uVar18 = 0;
  uVar32 = uVar30;
  if (*(int *)(param_1 + 0x41fc4) != -6) {
    do {
      uVar24 = *puVar20;
      puVar19[2] = uVar24;
      puVar19[1] = uVar24;
      *puVar19 = uVar24;
      memcpy(puVar19 + 3,puVar20,(ulonglong)*(uint *)(param_1 + 0x41fc0) * 2);
      puVar1 = puVar19 + (ulonglong)*(uint *)(param_1 + 0x41fc0) + 3;
      uVar24 = puVar20[*(uint *)(param_1 + 0x41fc0) - 1];
      puVar19 = puVar1 + 3;
      uVar17 = (uint)uVar32;
      puVar1[2] = uVar24;
      puVar1[1] = uVar24;
      *puVar1 = uVar24;
      if ((2 < (int)uVar17) && (uVar17 <= *(int *)(param_1 + 0x41fc4) + 1U)) {
        puVar20 = puVar20 + *(uint *)(param_1 + 0x41fc0);
      }
      uVar32 = (ulonglong)(uVar17 + 1);
    } while (uVar17 + 1 < *(int *)(param_1 + 0x41fc4) + 6U);
  }
  fVar34 = DAT_18005e70c;
  uVar32 = 0;
  if (DAT_18009a450 == 0.0) {
    uVar33 = uVar30;
    puVar21 = &DAT_18009a450;
    do {
      uVar32 = FUN_180050fc0(CONCAT44((int)(uVar32 >> 0x20),(float)(int)uVar33 / fVar34));
      uVar17 = (int)uVar33 - 1;
      uVar33 = (ulonglong)uVar17;
      *puVar21 = (int)uVar32;
      fVar40 = DAT_18005e708;
      puVar21 = puVar21 + 1;
    } while (-0x13 < (int)uVar17);
    uVar32 = uVar30;
    puVar21 = &DAT_18009a4a0;
    do {
      fVar34 = (float)(int)uVar32;
      uVar33 = FUN_180050fc0(CONCAT44(uVar39,fVar34 * fVar40 * fVar34));
      uVar17 = (int)uVar32 + 1;
      uVar32 = (ulonglong)uVar17;
      *puVar21 = (int)uVar33;
      puVar21 = puVar21 + 1;
    } while ((int)uVar17 < 0x10001);
  }
  uVar17 = *(int *)(param_1 + 0x42010) - *(int *)(param_1 + 0x42014);
  uVar32 = uVar30;
  if (3 < (int)(uVar17 + 1)) {
    uVar25 = 0x20000;
    uVar18 = uVar17 + 1 >> 2;
    uVar27 = (ulonglong)uVar18;
    uVar18 = uVar18 * 4;
    uVar33 = uVar30;
    do {
      uVar32 = uVar33 + 4;
      afStack_40068[uVar32] =
           (float)(&DAT_18009a4a0)[(ulonglong)(uVar25 - 0x20000) / (ulonglong)uVar17];
      afStack_40068[uVar33 + 5] =
           (float)(&DAT_18009a4a0)[(ulonglong)(uVar25 - 0x10000) / (ulonglong)uVar17];
      afStack_40068[uVar33 + 6] = (float)(&DAT_18009a4a0)[(ulonglong)uVar25 / (ulonglong)uVar17];
      uVar4 = uVar25 + 0x10000;
      uVar25 = uVar25 + 0x40000;
      uVar27 = uVar27 - 1;
      afStack_40068[uVar33 + 7] = (float)(&DAT_18009a4a0)[(ulonglong)uVar4 / (ulonglong)uVar17];
      uVar33 = uVar32;
    } while (uVar27 != 0);
    if (uVar17 < uVar18) goto LAB_1800179bd;
  }
  uVar25 = uVar18 << 0x10;
  uVar33 = (ulonglong)((uVar17 - uVar18) + 1);
  pfVar28 = afStack_40068 + uVar32 + 4;
  do {
    uVar32 = (ulonglong)uVar25;
    uVar25 = uVar25 + 0x10000;
    uVar33 = uVar33 - 1;
    *pfVar28 = (float)(&DAT_18009a4a0)[uVar32 / uVar17];
    pfVar28 = pfVar28 + 1;
  } while (uVar33 != 0);
LAB_1800179bd:
  uVar18 = *(uint *)(param_1 + 0x41fc0);
  puVar20 = *(undefined2 **)(param_1 + 0x288);
  lVar2 = *(longlong *)(param_1 + 0x290) + 8 + (ulonglong)(uVar18 * 3 + 0x12) * 2;
  if (*(int *)(param_1 + 0x41fc4) != 0) {
    do {
      uVar17 = 0;
      iVar29 = (int)uVar30;
      if (uVar18 != 0) {
        do {
          iVar26 = uVar18 + 6;
          fVar34 = 0.0;
          fVar40 = 0.0;
          lVar31 = -3;
          uVar18 = iVar26 * (iVar29 + -3);
          uVar3 = *(ushort *)(lVar2 + (ulonglong)(iVar26 * iVar29 + uVar17) * 2);
          uVar25 = (uint)uVar3;
          do {
            lVar23 = (ulonglong)uVar18 + (longlong)(int)uVar17;
            lVar22 = lVar31 * lVar31;
            uVar7 = (uint)*(ushort *)(lVar2 + -6 + lVar23 * 2);
            uVar4 = uVar25 - uVar7;
            uVar10 = (int)uVar4 >> 0x1f;
            uVar8 = (uint)*(ushort *)(lVar2 + -4 + lVar23 * 2);
            uVar5 = uVar3 - uVar8;
            uVar11 = (int)uVar5 >> 0x1f;
            uVar9 = (uint)*(ushort *)(lVar2 + -2 + lVar23 * 2);
            uVar6 = uVar25 - uVar9;
            uVar12 = (int)uVar6 >> 0x1f;
            fVar35 = afStack_40068[(longlong)(int)((uVar5 ^ uVar11) - uVar11) + 4] *
                     *(float *)(lVar22 * 4 + 0x18009a460);
            fVar36 = afStack_40068[(longlong)(int)((uVar6 ^ uVar12) - uVar12) + 4] *
                     *(float *)(lVar22 * 4 + 0x18009a454);
            uVar11 = (uint)*(ushort *)(lVar2 + lVar23 * 2);
            uVar5 = uVar25 - uVar11;
            uVar13 = (int)uVar5 >> 0x1f;
            uVar12 = (uint)*(ushort *)(lVar2 + 2 + lVar23 * 2);
            uVar6 = uVar25 - uVar12;
            uVar14 = (int)uVar6 >> 0x1f;
            fVar37 = afStack_40068[(longlong)(int)((uVar6 ^ uVar14) - uVar14) + 4] *
                     *(float *)(lVar22 * 4 + 0x18009a454);
            uVar14 = (uint)*(ushort *)(lVar2 + 4 + lVar23 * 2);
            uVar6 = uVar25 - uVar14;
            uVar15 = (int)uVar6 >> 0x1f;
            fVar38 = afStack_40068[(longlong)(int)((uVar6 ^ uVar15) - uVar15) + 4] *
                     *(float *)(lVar22 * 4 + 0x18009a460);
            uVar15 = (uint)*(ushort *)(lVar2 + 6 + lVar23 * 2);
            uVar6 = uVar25 - uVar15;
            lVar31 = lVar31 + 1;
            uVar16 = (int)uVar6 >> 0x1f;
            uVar18 = uVar18 + iVar26;
            fVar40 = fVar40 + afStack_40068[(longlong)(int)((uVar4 ^ uVar10) - uVar10) + 4] *
                              (float)(&DAT_18009a474)[lVar22] + fVar35 + fVar36 +
                     afStack_40068[(longlong)(int)((uVar5 ^ uVar13) - uVar13) + 4] *
                     (&DAT_18009a450)[lVar22] + fVar37 + fVar38 +
                     afStack_40068[(longlong)(int)((uVar6 ^ uVar16) - uVar16) + 4] *
                     (float)(&DAT_18009a474)[lVar22];
            fVar34 = fVar34 + (float)uVar7 *
                              afStack_40068[(longlong)(int)((uVar4 ^ uVar10) - uVar10) + 4] *
                              (float)(&DAT_18009a474)[lVar22] + (float)uVar8 * fVar35 +
                     (float)uVar9 * fVar36 +
                     (float)uVar11 *
                     afStack_40068[(longlong)(int)((uVar5 ^ uVar13) - uVar13) + 4] *
                     (&DAT_18009a450)[lVar22] + (float)uVar12 * fVar37 + (float)uVar14 * fVar38 +
                     (float)uVar15 *
                     afStack_40068[(longlong)(int)((uVar6 ^ uVar16) - uVar16) + 4] *
                     (float)(&DAT_18009a474)[lVar22];
          } while (lVar31 < 4);
          iVar26 = (uVar25 - (int)(fVar34 / fVar40)) + 0x8000;
          if (iVar26 < 0x10000) {
            uVar24 = (undefined2)iVar26;
            if (iVar26 < 0) {
              uVar24 = 0;
            }
          }
          else {
            uVar24 = 0;
          }
          *puVar20 = uVar24;
          uVar17 = uVar17 + 1;
          uVar18 = *(uint *)(param_1 + 0x41fc0);
          puVar20 = puVar20 + 1;
        } while (uVar17 < uVar18);
      }
      uVar30 = (ulonglong)(iVar29 + 1U);
    } while (iVar29 + 1U < *(uint *)(param_1 + 0x41fc4));
  }
  return;
}


==================================================================

### EXPORT FUNC 180017c40 (905 bytes) name=FUN_180017c40

void FUN_180017c40(longlong param_1,int param_2)

{
  ushort uVar1;
  ushort uVar2;
  ushort uVar3;
  byte bVar4;
  int iVar5;
  uint uVar6;
  ulonglong uVar7;
  int iVar8;
  ushort *puVar9;
  int iVar10;
  uint uVar11;
  int iVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  int *piVar16;
  byte *pbVar17;
  ushort uVar18;
  uint uVar19;
  ushort *puVar20;
  int *piVar21;
  longlong lVar22;
  uint local_res18;
  
  if (param_2 != 0) {
    FUN_1800357d0(*(ulonglong **)(param_1 + 0x2a8),0,(ulonglong)*(uint *)(param_1 + 0x47938) << 2);
    uVar19 = *(int *)(param_1 + 0x24) * 1000;
    if (*(int *)(param_1 + 0x47950) == 0) {
      uVar19 = uVar19 >> ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
      uVar18 = (ushort)uVar19;
      if (0xffff < uVar19) {
        uVar18 = 0xffff;
      }
    }
    else {
      iVar5 = FUN_180015940(param_1,30000,uVar19);
      iVar5 = iVar5 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
      if (0xffff < iVar5) {
        iVar5 = 0xffff;
      }
      uVar18 = (ushort)iVar5;
    }
    local_res18 = 0;
    uVar19 = ((uint)uVar18 * param_2 & 0x7fffffff) >> 7;
    if (*(int *)(param_1 + 0x41fc4) != 6) {
      do {
        iVar5 = *(int *)(param_1 + 0x41fc0) + -6;
        iVar12 = *(int *)(param_1 + 0x41fc0) * local_res18;
        if (iVar5 != 0) {
          lVar22 = (longlong)iVar12 * 2;
          do {
            uVar11 = (uint)*(ushort *)(lVar22 + 2 + *(longlong *)(param_1 + 0x270));
            puVar20 = (ushort *)(lVar22 + *(longlong *)(param_1 + 0x270));
            piVar16 = (int *)(*(longlong *)(param_1 + 0x2a8) + (longlong)iVar12 * 4);
            uVar15 = (uint)*puVar20;
            puVar9 = puVar20;
            uVar13 = 0;
            iVar10 = 4;
            do {
              iVar8 = iVar10;
              uVar18 = *puVar9;
              uVar6 = (uint)uVar18;
              uVar14 = uVar6;
              if ((uVar18 < uVar11 || uVar6 == uVar11) && (uVar14 = uVar11, uVar6 < uVar15)) {
                uVar15 = uVar6;
              }
              uVar1 = puVar9[2];
              uVar6 = (uint)uVar1;
              uVar11 = uVar6;
              if ((uVar1 < uVar14 || uVar6 == uVar14) && (uVar11 = uVar14, uVar6 < uVar15)) {
                uVar15 = uVar6;
              }
              uVar2 = puVar9[4];
              uVar6 = (uint)uVar2;
              uVar14 = uVar6;
              if ((uVar2 < uVar11 || uVar6 == uVar11) && (uVar14 = uVar11, uVar6 < uVar15)) {
                uVar15 = uVar6;
              }
              uVar3 = puVar9[6];
              uVar13 = uVar13 + uVar18 + (uint)uVar1 + (uint)uVar2 + (uint)uVar3;
              uVar6 = (uint)uVar3;
              uVar11 = uVar6;
              if ((uVar3 < uVar14 || uVar6 == uVar14) && (uVar11 = uVar14, uVar6 < uVar15)) {
                uVar15 = uVar6;
              }
              puVar9 = puVar9 + (ulonglong)(*(int *)(param_1 + 0x41fc0) * 2 - 8) + 8;
              iVar10 = iVar8 + -1;
            } while (iVar10 != 0);
            if (uVar19 <= (uVar11 - uVar15) * 0x20) {
              uVar13 = uVar13 >> 4;
              uVar14 = uVar19;
              if (uVar19 < uVar11 - uVar13) {
                uVar14 = uVar11 - uVar13;
              }
              if (uVar14 < uVar13 - uVar15) {
                uVar14 = uVar13 - uVar15;
              }
              iVar8 = iVar8 + 3;
              do {
                iVar10 = (int)(0x8000 / (ulonglong)uVar14);
                *piVar16 = *piVar16 + (*puVar20 - uVar13) * iVar10;
                piVar16[2] = piVar16[2] + (puVar20[2] - uVar13) * iVar10;
                piVar16[4] = piVar16[4] + (puVar20[4] - uVar13) * iVar10;
                piVar16[6] = piVar16[6] + (puVar20[6] - uVar13) * iVar10;
                iVar8 = iVar8 + -1;
                uVar7 = (ulonglong)(*(int *)(param_1 + 0x41fc0) * 2 - 8);
                puVar20 = puVar20 + uVar7 + 8;
                piVar16 = piVar16 + uVar7 + 8;
              } while (iVar8 != 0);
            }
            iVar12 = iVar12 + 1;
            lVar22 = lVar22 + 2;
            iVar5 = iVar5 + -1;
          } while (iVar5 != 0);
        }
        local_res18 = local_res18 + 1;
      } while (local_res18 < *(int *)(param_1 + 0x41fc4) - 6U);
    }
    uVar19 = *(uint *)(param_1 + 0x41fc4);
    pbVar17 = *(byte **)(param_1 + 0x2a0);
    piVar16 = *(int **)(param_1 + 0x2a8);
    uVar7 = 0;
    if (uVar19 != 0) {
      uVar13 = *(uint *)(param_1 + 0x41fc0);
      do {
        uVar11 = (uint)uVar7;
        uVar15 = 4;
        if (uVar11 < 6) {
          uVar15 = (int)(uVar7 >> 1) + 1;
        }
        else if (uVar19 < uVar11 + 7) {
          uVar15 = (uVar19 - uVar11) + 1 >> 1;
        }
        uVar7 = 0;
        piVar21 = piVar16;
        if (uVar13 != 0) {
          do {
            uVar14 = (uint)uVar7;
            uVar19 = 4;
            if (uVar14 < 6) {
              uVar19 = (int)(uVar7 >> 1) + 1;
            }
            else if (uVar13 < uVar14 + 7) {
              uVar19 = (uVar13 - uVar14) + 1 >> 1;
            }
            piVar16 = piVar21 + 1;
            iVar5 = param_2 * *piVar21;
            if (uVar19 * uVar15 == 0x10) {
              iVar5 = (int)((iVar5 >> 0x1f & 0x7ffffU) + iVar5) >> 0x13;
            }
            else {
              iVar5 = iVar5 / (int)(uVar19 * uVar15 * 0x8000);
            }
            iVar5 = (uint)*pbVar17 + iVar5;
            if (iVar5 < 0x100) {
              bVar4 = (byte)iVar5;
              if (iVar5 < 0) {
                bVar4 = 0;
              }
            }
            else {
              bVar4 = 0xff;
            }
            *pbVar17 = bVar4;
            uVar13 = *(uint *)(param_1 + 0x41fc0);
            uVar7 = (ulonglong)(uVar14 + 1);
            pbVar17 = pbVar17 + 1;
            piVar21 = piVar16;
          } while (uVar14 + 1 < uVar13);
        }
        uVar19 = *(uint *)(param_1 + 0x41fc4);
        uVar7 = (ulonglong)(uVar11 + 1);
      } while (uVar11 + 1 < uVar19);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180017fd0 (1054 bytes) name=FUN_180017fd0

void FUN_180017fd0(longlong param_1,int param_2)

{
  ushort uVar1;
  ushort uVar2;
  ushort uVar3;
  ushort uVar4;
  byte bVar5;
  uint uVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  ulonglong uVar10;
  ushort *puVar11;
  int *piVar12;
  ushort *puVar13;
  uint uVar14;
  uint uVar15;
  byte *pbVar16;
  int iVar17;
  uint uVar18;
  uint local_res18;
  
  if (param_2 != 0) {
    uVar6 = *(int *)(param_1 + 0x24) * 1000;
    if (*(int *)(param_1 + 0x47950) == 0) {
      uVar6 = uVar6 >> ((byte)*(undefined4 *)(param_1 + 0x4794c) & 0x1f);
      if (0xffff < uVar6) {
        uVar6 = 0xffff;
      }
    }
    else {
      iVar7 = FUN_180015940(param_1,30000,uVar6);
      uVar6 = iVar7 >> (7U - (char)*(undefined4 *)(param_1 + 0x47954) & 0x1f);
      if (0xffff < (int)uVar6) {
        uVar6 = 0xffff;
      }
    }
    uVar6 = ((uVar6 & 0xffff) * param_2 & 0x7fffffff) >> 7;
    local_res18 = 0;
    do {
      iVar17 = *(int *)(param_1 + 0x41fc0);
      piVar12 = (int *)(*(longlong *)(param_1 + 0x2a8) + 0xc +
                       (ulonglong)((local_res18 + 3) * iVar17) * 4);
      iVar7 = iVar17 + -6;
      puVar13 = (ushort *)(*(longlong *)(param_1 + 0x270) + (ulonglong)(iVar17 * local_res18) * 2);
      if (iVar7 != 0) {
        do {
          uVar9 = (uint)*puVar13;
          uVar14 = (uint)puVar13[1];
          iVar17 = 4;
          puVar11 = puVar13;
          uVar18 = 0;
          do {
            uVar1 = *puVar11;
            uVar8 = (uint)uVar1;
            uVar15 = uVar8;
            if ((uVar1 < uVar14 || uVar8 == uVar14) && (uVar15 = uVar14, uVar8 < uVar9)) {
              uVar9 = uVar8;
            }
            uVar2 = puVar11[2];
            uVar8 = (uint)uVar2;
            uVar14 = uVar8;
            if ((uVar2 < uVar15 || uVar8 == uVar15) && (uVar14 = uVar15, uVar8 < uVar9)) {
              uVar9 = uVar8;
            }
            uVar3 = puVar11[4];
            uVar8 = (uint)uVar3;
            uVar15 = uVar8;
            if ((uVar3 < uVar14 || uVar8 == uVar14) && (uVar15 = uVar14, uVar8 < uVar9)) {
              uVar9 = uVar8;
            }
            uVar4 = puVar11[6];
            uVar18 = uVar18 + uVar1 + (uint)uVar2 + (uint)uVar3 + (uint)uVar4;
            uVar8 = (uint)uVar4;
            uVar14 = uVar8;
            if ((uVar4 < uVar15 || uVar8 == uVar15) && (uVar14 = uVar15, uVar8 < uVar9)) {
              uVar9 = uVar8;
            }
            puVar11 = puVar11 + (ulonglong)(*(int *)(param_1 + 0x41fc0) * 2 - 8) + 8;
            iVar17 = iVar17 + -1;
          } while (iVar17 != 0);
          if ((uVar14 - uVar9) * 0x20 < uVar6) {
            *piVar12 = 0;
          }
          else {
            uVar18 = uVar18 >> 4;
            uVar15 = uVar6;
            if (uVar6 < uVar14 - uVar18) {
              uVar15 = uVar14 - uVar18;
            }
            if (uVar15 < uVar18 - uVar9) {
              uVar15 = uVar18 - uVar9;
            }
            *piVar12 = (puVar13[(ulonglong)(uint)(*(int *)(param_1 + 0x41fc0) * 3) + 3] - uVar18) *
                       (int)(0x8000 / (ulonglong)uVar15);
          }
          piVar12 = piVar12 + 1;
          puVar13 = puVar13 + 1;
          iVar7 = iVar7 + -1;
        } while (iVar7 != 0);
      }
      local_res18 = local_res18 + 2;
    } while (local_res18 <= *(int *)(param_1 + 0x41fc4) - 7U);
    local_res18 = 1;
    if (*(int *)(param_1 + 0x41fc4) != 7) {
      do {
        iVar17 = *(int *)(param_1 + 0x41fc0);
        piVar12 = (int *)(*(longlong *)(param_1 + 0x2a8) + 0xc +
                         (ulonglong)((local_res18 + 3) * iVar17) * 4);
        iVar7 = iVar17 + -6;
        puVar13 = (ushort *)(*(longlong *)(param_1 + 0x270) + (ulonglong)(iVar17 * local_res18) * 2)
        ;
        if (iVar7 != 0) {
          do {
            uVar9 = (uint)*puVar13;
            uVar14 = (uint)puVar13[1];
            iVar17 = 4;
            puVar11 = puVar13;
            uVar18 = 0;
            do {
              uVar1 = *puVar11;
              uVar8 = (uint)uVar1;
              uVar15 = uVar8;
              if ((uVar1 < uVar14 || uVar8 == uVar14) && (uVar15 = uVar14, uVar8 < uVar9)) {
                uVar9 = uVar8;
              }
              uVar2 = puVar11[2];
              uVar8 = (uint)uVar2;
              uVar14 = uVar8;
              if ((uVar2 < uVar15 || uVar8 == uVar15) && (uVar14 = uVar15, uVar8 < uVar9)) {
                uVar9 = uVar8;
              }
              uVar3 = puVar11[4];
              uVar8 = (uint)uVar3;
              uVar15 = uVar8;
              if ((uVar3 < uVar14 || uVar8 == uVar14) && (uVar15 = uVar14, uVar8 < uVar9)) {
                uVar9 = uVar8;
              }
              uVar4 = puVar11[6];
              uVar18 = uVar18 + uVar1 + (uint)uVar2 + (uint)uVar3 + (uint)uVar4;
              uVar8 = (uint)uVar4;
              uVar14 = uVar8;
              if ((uVar4 < uVar15 || uVar8 == uVar15) && (uVar14 = uVar15, uVar8 < uVar9)) {
                uVar9 = uVar8;
              }
              puVar11 = puVar11 + (ulonglong)(*(int *)(param_1 + 0x41fc0) * 2 - 8) + 8;
              iVar17 = iVar17 + -1;
            } while (iVar17 != 0);
            if ((uVar14 - uVar9) * 0x20 < uVar6) {
              *piVar12 = 0;
            }
            else {
              uVar18 = uVar18 >> 4;
              uVar15 = uVar6;
              if (uVar6 < uVar14 - uVar18) {
                uVar15 = uVar14 - uVar18;
              }
              if (uVar15 < uVar18 - uVar9) {
                uVar15 = uVar18 - uVar9;
              }
              *piVar12 = (puVar13[(ulonglong)(uint)(*(int *)(param_1 + 0x41fc0) * 3) + 3] - uVar18)
                         * (int)(0x8000 / (ulonglong)uVar15);
            }
            piVar12 = piVar12 + 1;
            puVar13 = puVar13 + 1;
            iVar7 = iVar7 + -1;
          } while (iVar7 != 0);
        }
        local_res18 = local_res18 + 2;
      } while (local_res18 <= *(int *)(param_1 + 0x41fc4) - 7U);
    }
    uVar6 = 3;
    if (3 < *(int *)(param_1 + 0x41fc4) - 3U) {
      do {
        uVar10 = (ulonglong)(*(int *)(param_1 + 0x41fc0) * uVar6);
        piVar12 = (int *)(*(longlong *)(param_1 + 0x2a8) + 0xc + uVar10 * 4);
        pbVar16 = (byte *)(uVar10 + 3 + *(longlong *)(param_1 + 0x2a0));
        for (iVar7 = *(int *)(param_1 + 0x41fc0) + -6; iVar7 != 0; iVar7 = iVar7 + -1) {
          iVar17 = *piVar12;
          piVar12 = piVar12 + 1;
          iVar17 = ((int)(iVar17 * param_2 + (iVar17 * param_2 >> 0x1f & 0x7fffU)) >> 0xf) +
                   (uint)*pbVar16;
          if (iVar17 < 0x100) {
            bVar5 = (byte)iVar17;
            if (iVar17 < 0) {
              bVar5 = 0;
            }
          }
          else {
            bVar5 = 0xff;
          }
          *pbVar16 = bVar5;
          pbVar16 = pbVar16 + 1;
        }
        uVar6 = uVar6 + 1;
      } while (uVar6 < *(int *)(param_1 + 0x41fc4) - 3U);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 1800183f0 (254 bytes) name=FUN_1800183f0

void FUN_1800183f0(longlong param_1,int param_2,int param_3,int param_4)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  uint uVar5;
  
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  if ((param_2 < 1) || (4 < param_2)) {
    *(undefined4 *)(param_1 + 0x41fe8) = 0;
    *(undefined4 *)(param_1 + 0x41fec) = 0;
    *(undefined4 *)(param_1 + 0x41ff0) = 0;
  }
  else {
    uVar2 = *(uint *)(param_1 + 0x41fc0);
    uVar1 = *(uint *)(param_1 + 0x41fc4);
    uVar4 = 1 << ((byte)param_2 & 0x1f);
    *(int *)(param_1 + 0x41fe8) = param_2;
    uVar3 = param_3 - uVar2 / (uVar4 * 2);
    if ((int)uVar3 < 0) {
      uVar3 = 0;
    }
    uVar5 = param_4 - uVar1 / (uVar4 * 2);
    if ((int)uVar5 < 0) {
      uVar5 = 0;
    }
    uVar2 = (uVar2 - uVar2 / uVar4) - 2;
    if (uVar3 < uVar2) {
      uVar2 = uVar3;
    }
    *(uint *)(param_1 + 0x41fec) = uVar2 & 0xfffffffe;
    uVar2 = (uVar1 - uVar1 / uVar4) - 1;
    if (uVar5 < uVar2) {
      uVar2 = uVar5;
    }
    *(uint *)(param_1 + 0x41ff0) = uVar2;
  }
                    /* WARNING: Could not recover jumptable at 0x0001800184e7. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  return;
}


==================================================================

### EXPORT FUNC 1800184f0 (364 bytes) name=FUN_1800184f0

void FUN_1800184f0(longlong param_1)

{
  ushort *puVar1;
  void *_Src;
  ushort uVar2;
  ushort uVar3;
  void *_Dst;
  uint *puVar4;
  ushort *puVar5;
  ushort *puVar6;
  int iVar7;
  uint uVar8;
  uint uVar9;
  
  _Dst = *(void **)(param_1 + 0x288);
  _Src = (void *)(*(longlong *)(param_1 + 0x270) +
                 ((ulonglong)(uint)(*(int *)(param_1 + 0x41ff0) * *(int *)(param_1 + 0x41fc0)) +
                 (ulonglong)*(uint *)(param_1 + 0x41fec)) * 2);
  for (iVar7 = (*(uint *)(param_1 + 0x41fc4) >> 1) + 1; iVar7 != 0; iVar7 = iVar7 + -1) {
    memcpy(_Dst,_Src,(ulonglong)((*(uint *)(param_1 + 0x41fc0) >> 1) + 2) * 2);
    _Src = (void *)((longlong)_Src + (ulonglong)*(uint *)(param_1 + 0x41fc0) * 2);
    _Dst = (void *)((longlong)_Dst + (ulonglong)((*(uint *)(param_1 + 0x41fc0) >> 1) + 2) * 2);
  }
  puVar6 = *(ushort **)(param_1 + 0x288);
  puVar4 = *(uint **)(param_1 + 0x270);
  for (uVar8 = *(uint *)(param_1 + 0x41fc4) >> 1; uVar8 != 0; uVar8 = uVar8 - 1) {
    for (uVar9 = *(uint *)(param_1 + 0x41fc0) >> 1; uVar9 != 0; uVar9 = uVar9 - 1) {
      *puVar4 = ((int)((uint)puVar6[1] + (uint)*puVar6) >> 1) << 0x10 | (uint)*puVar6;
      puVar6 = puVar6 + 1;
      puVar4 = puVar4 + 1;
    }
    puVar5 = puVar6 + 2;
    puVar6 = puVar6 + -(ulonglong)(*(uint *)(param_1 + 0x41fc0) >> 1);
    for (uVar9 = *(uint *)(param_1 + 0x41fc0) >> 1; uVar9 != 0; uVar9 = uVar9 - 1) {
      uVar2 = *puVar6;
      uVar3 = *puVar5;
      puVar1 = puVar5 + 1;
      puVar6 = puVar6 + 1;
      puVar5 = puVar5 + 1;
      *puVar4 = ((int)((uint)*puVar1 + (uint)*puVar6 + (uint)uVar3 + (uint)uVar2) >> 2) << 0x10 |
                (int)((uint)uVar3 + (uint)uVar2) >> 1;
      puVar4 = puVar4 + 1;
    }
    puVar6 = puVar6 + 2;
  }
  return;
}


==================================================================

### EXPORT FUNC 180018660 (956 bytes) name=FUN_180018660

void FUN_180018660(longlong param_1)

{
  ushort *puVar1;
  void *_Src;
  ushort uVar2;
  ushort uVar3;
  void *_Dst;
  uint *puVar4;
  ushort *puVar5;
  int iVar6;
  ushort *puVar7;
  uint uVar8;
  uint uVar9;
  
  _Dst = *(void **)(param_1 + 0x288);
  _Src = (void *)(*(longlong *)(param_1 + 0x270) +
                 ((ulonglong)(uint)(*(int *)(param_1 + 0x41ff0) * *(int *)(param_1 + 0x41fc0)) +
                 (ulonglong)*(uint *)(param_1 + 0x41fec)) * 2);
  for (iVar6 = (*(uint *)(param_1 + 0x41fc4) >> 2) + 1; iVar6 != 0; iVar6 = iVar6 + -1) {
    memcpy(_Dst,_Src,(ulonglong)((*(uint *)(param_1 + 0x41fc0) >> 2) + 2) * 2);
    _Src = (void *)((longlong)_Src + (ulonglong)*(uint *)(param_1 + 0x41fc0) * 2);
    _Dst = (void *)((longlong)_Dst + (ulonglong)((*(uint *)(param_1 + 0x41fc0) >> 2) + 2) * 2);
  }
  puVar7 = *(ushort **)(param_1 + 0x288);
  puVar4 = *(uint **)(param_1 + 0x270);
  for (uVar9 = *(uint *)(param_1 + 0x41fc4) >> 2; uVar9 != 0; uVar9 = uVar9 - 1) {
    for (uVar8 = *(uint *)(param_1 + 0x41fc0) >> 2; uVar8 != 0; uVar8 = uVar8 - 1) {
      uVar2 = *puVar7;
      *puVar4 = ((int)((uint)uVar2 + (uint)uVar2 * 2 + (uint)puVar7[1]) >> 2) << 0x10 | (uint)uVar2;
      uVar2 = puVar7[1];
      puVar4[1] = ((int)((uint)*puVar7 + (uint)uVar2 * 2 + (uint)uVar2) >> 2) << 0x10 |
                  (int)((uint)uVar2 + (uint)*puVar7) >> 1;
      puVar7 = puVar7 + 1;
      puVar4 = puVar4 + 2;
    }
    puVar5 = puVar7 + 2;
    puVar7 = puVar7 + -(ulonglong)(*(uint *)(param_1 + 0x41fc0) >> 2);
    for (uVar8 = *(uint *)(param_1 + 0x41fc0) >> 2; uVar8 != 0; uVar8 = uVar8 - 1) {
      iVar6 = (uint)*puVar7 + (uint)*puVar7 * 2;
      *puVar4 = ((int)(((uint)puVar7[1] + (uint)*puVar5 + iVar6) * 3 + (uint)puVar5[1]) >> 4) <<
                0x10 | (int)((uint)*puVar5 + iVar6) >> 2;
      uVar2 = puVar7[1];
      uVar3 = puVar5[1];
      puVar4[1] = ((int)((uint)*puVar5 +
                        ((uint)uVar3 + (uint)uVar2 * 2 + (uint)uVar2 + (uint)*puVar7) * 3) >> 4) <<
                  0x10 | (int)((uint)uVar3 + ((uint)uVar2 + (uint)*puVar7) * 3 + (uint)*puVar5) >> 3
      ;
      puVar5 = puVar5 + 1;
      puVar7 = puVar7 + 1;
      puVar4 = puVar4 + 2;
    }
    puVar5 = puVar7 + 2;
    puVar7 = puVar7 + -(ulonglong)(*(uint *)(param_1 + 0x41fc0) >> 2);
    for (uVar8 = *(uint *)(param_1 + 0x41fc0) >> 2; uVar8 != 0; uVar8 = uVar8 - 1) {
      puVar1 = puVar7 + 1;
      *puVar4 = ((int)(((uint)*puVar7 + (uint)*puVar5) * 3 + (uint)puVar5[1] + (uint)*puVar1) >> 3)
                << 0x10 | (int)((uint)*puVar7 + (uint)*puVar5) >> 1;
      iVar6 = (uint)puVar5[1] + (uint)*puVar1;
      puVar4[1] = ((int)((uint)*puVar5 + iVar6 * 3 + (uint)*puVar7) >> 3) << 0x10 |
                  (int)(iVar6 + (uint)*puVar5 + (uint)*puVar7) >> 2;
      puVar5 = puVar5 + 1;
      puVar7 = puVar1;
      puVar4 = puVar4 + 2;
    }
    puVar5 = puVar7 + 2;
    puVar7 = puVar7 + -(ulonglong)(*(uint *)(param_1 + 0x41fc0) >> 2);
    for (uVar8 = *(uint *)(param_1 + 0x41fc0) >> 2; uVar8 != 0; uVar8 = uVar8 - 1) {
      iVar6 = (uint)*puVar5 + (uint)*puVar5 * 2;
      *puVar4 = ((int)(((uint)puVar5[1] + iVar6 + (uint)*puVar7) * 3 + (uint)puVar7[1]) >> 4) <<
                0x10 | (int)(iVar6 + (uint)*puVar7) >> 2;
      uVar2 = puVar5[1];
      uVar3 = puVar7[1];
      puVar4[1] = ((int)((uint)*puVar7 +
                        ((uint)uVar3 + (uint)uVar2 * 2 + (uint)uVar2 + (uint)*puVar5) * 3) >> 4) <<
                  0x10 | (int)((uint)uVar3 + ((uint)uVar2 + (uint)*puVar5) * 3 + (uint)*puVar7) >> 3
      ;
      puVar5 = puVar5 + 1;
      puVar7 = puVar7 + 1;
      puVar4 = puVar4 + 2;
    }
    puVar7 = puVar7 + 2;
  }
  return;
}


==================================================================

### EXPORT FUNC 180018a20 (704 bytes) name=FUN_180018a20

undefined4 FUN_180018a20(longlong param_1,LPCSTR param_2,undefined8 param_3,undefined8 param_4)

{
  int *piVar1;
  float fVar2;
  int iVar3;
  undefined **ppuVar4;
  longlong lVar5;
  HMODULE pHVar6;
  wchar_t *pwVar7;
  longlong *plVar8;
  wchar_t *_Str;
  float local_res8 [2];
  wchar_t *local_res10;
  longlong local_res18;
  
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  if ((*(uint *)(param_2 + 0x3c) != 0) && (*(uint *)(param_2 + 0x3c) < 0x1a)) {
    memcpy((void *)(param_1 + 0x41888),param_2,0x21c);
    fVar2 = DAT_18005e700;
    if ((*(float *)(param_2 + 0x204) <= 0.0) || (DAT_18005e700 < *(float *)(param_2 + 0x204))) {
      memcpy((void *)(param_1 + 0x4195c),param_2 + 0xdc,
             (ulonglong)(uint)(*(int *)(param_2 + 0x3c) * 2) << 2);
      local_res8[0] = fVar2;
      ppuVar4 = FUN_18001fcc0();
      if (ppuVar4 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_18000b170(-0x7fffbffb);
      }
      lVar5 = (**(code **)(*ppuVar4 + 0x18))(ppuVar4);
      _Str = (wchar_t *)(lVar5 + 0x18);
      local_res10 = _Str;
      if (((ulonglong)param_2 & 0xffffffffffff0000) == 0) {
        pHVar6 = (HMODULE)FUN_18001fcac();
        if (pHVar6 != (HMODULE)0x0) {
          FUN_18000af50((longlong *)&local_res10,pHVar6,(uint)param_2 & 0xffff);
          _Str = local_res10;
        }
      }
      else {
        FUN_18000ad80((longlong *)&local_res10,param_2);
        _Str = local_res10;
      }
      iVar3 = *(int *)(_Str + -8);
      if ((int)(*(int *)(_Str + -6) - iVar3 | 1U - *(int *)(_Str + -4)) < 0) {
        FUN_18000b190((longlong *)&local_res10,iVar3);
        _Str = local_res10;
      }
      FUN_180034160(_Str,(longlong)(iVar3 + 1));
      if ((iVar3 < 0) || (*(int *)(_Str + -6) < iVar3)) {
                    /* WARNING: Subroutine does not return */
        FUN_18000b170(-0x7ff8ffa9);
      }
      *(int *)(_Str + -8) = iVar3;
      _Str[iVar3] = L'\0';
      if (-1 < *(int *)(_Str + -8)) {
        pwVar7 = wcsstr(_Str,L"FILT");
        if ((pwVar7 != (wchar_t *)0x0) &&
           (iVar3 = (int)((longlong)pwVar7 - (longlong)_Str >> 1), -1 < iVar3)) {
          plVar8 = FUN_18000a7c0((longlong *)&local_res10,&local_res18,
                                 (*(int *)(_Str + -8) - iVar3) + -4);
          FUN_18000b390((longlong *)&local_res10,plVar8);
          LOCK();
          piVar1 = (int *)(local_res18 + -8);
          iVar3 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
          if (iVar3 + -1 < 1) {
            (**(code **)(**(longlong **)(local_res18 + -0x18) + 8))();
          }
          _Str = local_res10;
          FUN_180033340(local_res10,L"%f",local_res8,param_4);
        }
      }
      if ((local_res8[0] <= 0.0) || (fVar2 < local_res8[0])) {
        local_res8[0] = fVar2;
      }
      *(float *)(param_1 + 0x41a8c) = local_res8[0];
      *(undefined4 *)(param_1 + 0x41a9c) = 0;
      LOCK();
      pwVar7 = _Str + -4;
      iVar3 = *(int *)pwVar7;
      *(int *)pwVar7 = *(int *)pwVar7 + -1;
      UNLOCK();
      if (iVar3 + -1 < 1) {
        (**(code **)(**(longlong **)(_Str + -0xc) + 8))();
      }
    }
    *(undefined4 *)(param_1 + 0x41884) = 1;
    *(undefined4 *)(param_1 + 0x41880) = 1;
    *(undefined4 *)(param_1 + 0x98) = 0;
  }
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
  if (*(int *)(param_1 + 0x41880) != 0) {
    *(undefined4 *)(param_1 + 0x47950) = *(undefined4 *)(param_1 + 0x4194c);
    *(undefined4 *)(param_1 + 0x47954) = *(undefined4 *)(param_1 + 0x41954);
    FUN_180015500(param_1,*(int *)(param_1 + 0x41950));
  }
  return *(undefined4 *)(param_1 + 0x41880);
}


==================================================================

### EXPORT FUNC 180018cf0 (24 bytes) name=Unwind@180018cf0

void Unwind_180018cf0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x78));
  return;
}


==================================================================

### EXPORT FUNC 180018d10 (24 bytes) name=Unwind@180018d10

void Unwind_180018d10(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x78));
  return;
}


==================================================================

### EXPORT FUNC 180018d30 (27 bytes) name=Unwind@180018d30

void Unwind_180018d30(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x80));
  return;
}


==================================================================

### EXPORT FUNC 180018d50 (306 bytes) name=FUN_180018d50

undefined8 FUN_180018d50(longlong param_1,int param_2,uint param_3,undefined4 param_4)

{
  undefined8 uVar1;
  longlong lVar2;
  uint uVar3;
  char *pcVar4;
  undefined4 uVar5;
  char *pcVar6;
  bool bVar7;
  
  bVar7 = *(int *)(param_1 + 0x41880) == 0;
  if (!bVar7) {
    lVar2 = 0x14;
    pcVar4 = (char *)(param_1 + 0x41888);
    pcVar6 = "Shutterless Default";
    do {
      if (lVar2 == 0) break;
      lVar2 = lVar2 + -1;
      bVar7 = *pcVar4 == *pcVar6;
      pcVar4 = pcVar4 + 1;
      pcVar6 = pcVar6 + 1;
    } while (bVar7);
    if (bVar7) {
      EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
      *(undefined4 *)(param_1 + 0x47950) = 0;
      *(uint *)(param_1 + 0x4195c) = param_3;
      *(undefined4 *)(param_1 + 0x41960) = param_4;
      LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
      return 1;
    }
  }
  uVar3 = 0;
  if (((param_2 - 1U < 7) &&
      ((uVar5 = 1, *(int *)(param_1 + 0x41880) == 0 ||
       (*(int *)((ulonglong)*(uint *)(param_1 + 0x98) * 0x21c + 0x4194c + param_1) != 0)))) ||
     ((uVar5 = 0, param_3 != 0 && ((param_3 & param_3 - 1) == 0)))) {
    EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    *(undefined4 *)(param_1 + 0x47950) = uVar5;
    *(int *)(param_1 + 0x47954) = param_2;
    *(uint *)(param_1 + 0x47944) = param_3;
    *(undefined4 *)(param_1 + 0x47948) = param_4;
    do {
      if (1 << ((byte)uVar3 & 0x1f) == param_3) {
        *(uint *)(param_1 + 0x4794c) = uVar3;
        break;
      }
      uVar3 = uVar3 + 1;
    } while (uVar3 < 0x20);
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x238));
    uVar1 = 1;
  }
  else {
    uVar1 = 0;
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180018e90 (798 bytes) name=FUN_180018e90

void FUN_180018e90(longlong param_1)

{
  byte bVar1;
  byte bVar2;
  byte bVar3;
  byte bVar4;
  int iVar5;
  ulonglong uVar6;
  undefined1 uVar7;
  int iVar8;
  undefined1 *puVar9;
  undefined1 *_Dst;
  uint uVar10;
  uint uVar11;
  void *_Src;
  byte *pbVar12;
  uint uVar13;
  byte *pbVar14;
  byte *pbVar15;
  uint local_res8;
  uint local_res10;
  
  _Src = *(void **)(param_1 + 0x2a0);
  local_res8 = 0;
  uVar10 = 0;
  puVar9 = (undefined1 *)
           (((ulonglong)(uint)((*(int *)(param_1 + 0x41fcc) + 3) * *(int *)(param_1 + 0x41fc8)) -
            (ulonglong)(uint)((*(int *)(param_1 + 0x41fc0) + 8) * (*(int *)(param_1 + 0x41fc4) + 1))
            ) + *(longlong *)(param_1 + 0x220));
  _Dst = puVar9;
  if (*(int *)(param_1 + 0x41fc4) != 0) {
    do {
      memcpy(_Dst,_Src,(ulonglong)*(uint *)(param_1 + 0x41fc0));
      iVar8 = (uint)*(byte *)((ulonglong)(*(int *)(param_1 + 0x41fc0) - 1) + (longlong)_Src) * 2 -
              (uint)*(byte *)((ulonglong)(*(int *)(param_1 + 0x41fc0) - 2) + (longlong)_Src);
      if (iVar8 < 0x100) {
        uVar7 = (undefined1)iVar8;
        if (iVar8 < 0) {
          uVar7 = 0;
        }
      }
      else {
        uVar7 = 0xff;
      }
      uVar10 = uVar10 + 1;
      _Dst[*(uint *)(param_1 + 0x41fc0)] = uVar7;
      _Src = (void *)((longlong)_Src + (ulonglong)*(uint *)(param_1 + 0x41fc0));
      _Dst = _Dst + (*(uint *)(param_1 + 0x41fc0) + 8);
    } while (uVar10 < *(uint *)(param_1 + 0x41fc4));
  }
  uVar6 = (ulonglong)(*(int *)(param_1 + 0x41fc0) + 8);
  pbVar12 = _Dst + -uVar6;
  pbVar14 = pbVar12 + -uVar6;
  for (iVar8 = *(int *)(param_1 + 0x41fc0) + 1; iVar8 != 0; iVar8 = iVar8 + -1) {
    bVar1 = *pbVar12;
    bVar2 = *pbVar14;
    pbVar14 = pbVar14 + 1;
    pbVar12 = pbVar12 + 1;
    iVar5 = (uint)bVar1 * 2 - (uint)bVar2;
    if (iVar5 < 0x100) {
      uVar7 = (undefined1)iVar5;
      if (iVar5 < 0) {
        uVar7 = 0;
      }
    }
    else {
      uVar7 = 0xff;
    }
    *_Dst = uVar7;
    _Dst = _Dst + 1;
  }
  if (*(int *)(param_1 + 0x41fc4) != 0) {
    uVar6 = 0;
    local_res10 = 0;
    do {
      pbVar12 = (byte *)((ulonglong)(uint)((int)(uVar6 >> 1) * *(int *)(param_1 + 0x41fc8)) +
                        *(longlong *)(param_1 + 0x220));
      pbVar14 = puVar9 + (*(uint *)(param_1 + 0x41fc0) + 8) * local_res8;
      for (uVar10 = *(uint *)(param_1 + 0x41fc0) >> 1; uVar10 != 0; uVar10 = uVar10 - 1) {
        uVar13 = (uint)*pbVar14;
        bVar1 = pbVar14[1];
        uVar6 = (ulonglong)*(uint *)(param_1 + 0x41fc0);
        uVar11 = (uint)pbVar14[uVar6 + 8];
        bVar2 = pbVar14[uVar6 + 10];
        bVar3 = pbVar14[2];
        iVar8 = (uint)pbVar14[uVar6 + 9] + (uint)pbVar14[uVar6 + 9];
        pbVar15 = pbVar12 + 3;
        *pbVar12 = *pbVar14 / 1;
        pbVar12[1] = (byte)(((uint)bVar1 + (uint)bVar1 + uVar13) * 0xab >> 9);
        pbVar12[2] = (byte)(((uint)bVar1 + (uint)bVar1 + (uint)bVar3) * 0xab >> 9);
        uVar6 = (ulonglong)*(uint *)(param_1 + 0x41fc8);
        pbVar15[uVar6 - 3] = (byte)((uVar11 * 2 + uVar13) * 0xab >> 9);
        pbVar15[uVar6 - 2] = (byte)((uVar13 + (iVar8 + uVar11 + (uint)bVar1) * 2) * 0x39 >> 9);
        pbVar15[uVar6 - 1] =
             (byte)(((uint)bVar3 + (iVar8 + (uint)bVar2 + (uint)bVar1) * 2) * 0x39 >> 9);
        pbVar12 = pbVar14 + (*(int *)(param_1 + 0x41fc0) * 2 + 0x10);
        uVar6 = (ulonglong)(uint)(*(int *)(param_1 + 0x41fc8) * 2);
        bVar1 = pbVar12[1];
        bVar3 = *pbVar12;
        bVar4 = pbVar12[2];
        pbVar15[uVar6 - 3] = (byte)((uVar11 * 2 + (uint)bVar3) * 0xab >> 9);
        pbVar15[uVar6 - 2] = (byte)(((uint)bVar3 + ((uint)bVar1 + iVar8 + uVar11) * 2) * 0x39 >> 9);
        pbVar15[uVar6 - 1] =
             (byte)(((uint)bVar4 + ((uint)bVar1 + iVar8 + (uint)bVar2) * 2) * 0x39 >> 9);
        pbVar12 = pbVar15;
        pbVar14 = pbVar14 + 2;
      }
      local_res8 = local_res8 + 2;
      local_res10 = local_res10 + 6;
      uVar6 = (ulonglong)local_res10;
    } while (local_res8 < *(uint *)(param_1 + 0x41fc4));
  }
  return;
}


==================================================================

### EXPORT FUNC 1800191b0 (1423 bytes) name=FUN_1800191b0

/* WARNING: Type propagation algorithm not settling */

byte * FUN_1800191b0(longlong param_1)

{
  int iVar1;
  byte bVar2;
  byte bVar3;
  byte bVar4;
  byte bVar5;
  byte bVar6;
  byte bVar7;
  uint uVar8;
  byte *pbVar9;
  ulonglong uVar10;
  undefined1 uVar11;
  int iVar12;
  int iVar13;
  undefined1 *puVar14;
  undefined1 *_Dst;
  uint uVar15;
  uint uVar16;
  uint uVar17;
  byte *pbVar18;
  int iVar19;
  byte *pbVar20;
  int iVar21;
  byte *pbVar22;
  byte *pbVar23;
  uint uVar24;
  uint uVar25;
  uint uVar26;
  uint uVar27;
  uint local_res10;
  uint local_res18;
  uint local_res20;
  
  pbVar18 = *(byte **)(param_1 + 0x2a0);
  uVar8 = *(int *)(param_1 + 0x41fc0) + 8;
  pbVar9 = (byte *)(ulonglong)uVar8;
  local_res18 = 0;
  uVar15 = 0;
  puVar14 = (undefined1 *)
            (((ulonglong)(uint)((*(int *)(param_1 + 0x41fcc) + 3) * *(int *)(param_1 + 0x41fc8)) -
             (ulonglong)((*(int *)(param_1 + 0x41fc4) + 1) * uVar8)) +
            *(longlong *)(param_1 + 0x220));
  _Dst = puVar14;
  if (*(int *)(param_1 + 0x41fc4) != 0) {
    do {
      memcpy(_Dst,pbVar18,(ulonglong)*(uint *)(param_1 + 0x41fc0));
      iVar12 = (uint)pbVar18[*(int *)(param_1 + 0x41fc0) - 1] * 2 -
               (uint)pbVar18[*(int *)(param_1 + 0x41fc0) - 2];
      if (iVar12 < 0x100) {
        uVar11 = (undefined1)iVar12;
        if (iVar12 < 0) {
          uVar11 = 0;
        }
      }
      else {
        uVar11 = 0xff;
      }
      uVar15 = uVar15 + 1;
      _Dst[*(uint *)(param_1 + 0x41fc0)] = uVar11;
      pbVar9 = (byte *)(ulonglong)*(uint *)(param_1 + 0x41fc0);
      pbVar18 = pbVar18 + (longlong)pbVar9;
      _Dst = _Dst + (*(uint *)(param_1 + 0x41fc0) + 8);
    } while (uVar15 < *(uint *)(param_1 + 0x41fc4));
  }
  uVar10 = (ulonglong)(*(int *)(param_1 + 0x41fc0) + 8);
  pbVar18 = _Dst + -uVar10;
  pbVar20 = pbVar18 + -uVar10;
  for (iVar12 = *(int *)(param_1 + 0x41fc0) + 1; iVar12 != 0; iVar12 = iVar12 + -1) {
    bVar2 = *pbVar18;
    bVar3 = *pbVar20;
    pbVar20 = pbVar20 + 1;
    pbVar18 = pbVar18 + 1;
    uVar8 = (uint)bVar2 * 2 - (uint)bVar3;
    if ((int)uVar8 < 0x100) {
      pbVar9 = (byte *)(ulonglong)uVar8;
      if ((int)uVar8 < 0) {
        pbVar9 = (byte *)0x0;
      }
    }
    else {
      pbVar9 = (byte *)0xff;
    }
    *_Dst = (char)pbVar9;
    _Dst = _Dst + 1;
  }
  if (*(int *)(param_1 + 0x41fc4) != 0) {
    uVar10 = 0;
    local_res20 = 0;
    do {
      local_res10 = *(uint *)(param_1 + 0x41fc0);
      pbVar20 = puVar14 + (local_res10 + 8) * local_res18;
      pbVar9 = (byte *)((ulonglong)local_res10 * 0xaaaaaaab & 0xffffffff);
      pbVar18 = (byte *)((ulonglong)(uint)((int)(uVar10 / 3) * *(int *)(param_1 + 0x41fc8)) +
                        *(longlong *)(param_1 + 0x220));
      local_res10 = local_res10 / 3;
      if (local_res10 != 0) {
        pbVar9 = pbVar20 + 2;
        pbVar23 = pbVar18 + 3;
        do {
          bVar2 = pbVar9[-1];
          bVar3 = *pbVar9;
          bVar4 = pbVar9[1];
          bVar5 = *pbVar20;
          uVar10 = (ulonglong)*(uint *)(param_1 + 0x41fc0);
          iVar19 = (uint)bVar3 + (uint)bVar2 * 4;
          bVar6 = pbVar20[uVar10 + 10];
          bVar7 = pbVar20[uVar10 + 9];
          uVar27 = (uint)bVar7;
          uVar26 = (uint)pbVar20[uVar10 + 8];
          iVar13 = (uint)bVar5 * 0x19a;
          uVar8 = (uint)pbVar20[uVar10 + 0xb];
          iVar21 = (uint)bVar2 + (uint)bVar3 * 4;
          *pbVar18 = bVar5 / 1;
          uVar15 = (uint)bVar6;
          pbVar23[-2] = (byte)((uint)bVar2 * 0x267 + iVar13 >> 10);
          pbVar23[-1] = (byte)((uint)(iVar19 * 0xcd) >> 10);
          *pbVar23 = (byte)((uint)(iVar21 * 0xcd) >> 10);
          pbVar23[1] = (byte)((uint)bVar3 * 0x267 + (uint)bVar4 * 0x19a >> 10);
          pbVar22 = pbVar18 + *(uint *)(param_1 + 0x41fc8);
          iVar12 = (uint)bVar7 * 4;
          *pbVar22 = (byte)(uVar26 * 0x267 + iVar13 >> 10);
          iVar1 = (uint)bVar6 * 4;
          pbVar22[1] = (byte)((uVar26 + bVar2) * 0xf6 + uVar27 * 0x171 + (uint)bVar5 * 0xa4 >> 10);
          pbVar22[2] = (byte)((iVar12 + (uint)bVar6) * 0x7b + iVar19 * 0x52 >> 10);
          pbVar22[3] = (byte)((iVar1 + uVar27) * 0x7b + iVar21 * 0x52 >> 10);
          pbVar22[4] = (byte)((uVar8 + bVar3) * 0xf6 + uVar15 * 0x171 + (uint)bVar4 * 0xa4 >> 10);
          pbVar22 = pbVar20 + (*(int *)(param_1 + 0x41fc0) * 2 + 0x10);
          uVar25 = (uint)pbVar22[2];
          uVar17 = (uint)*pbVar22;
          uVar16 = (uint)pbVar22[1];
          uVar24 = (uint)pbVar22[3];
          iVar12 = iVar12 + uVar16;
          pbVar22 = pbVar18 + (uint)(*(int *)(param_1 + 0x41fc8) * 2);
          iVar13 = uVar17 + uVar26 * 4;
          *pbVar22 = (byte)((uint)(iVar13 * 0xcd) >> 10);
          iVar1 = iVar1 + uVar25;
          pbVar22[1] = (byte)((uint)(iVar12 * 0x7b + iVar13 * 0x52) >> 10);
          pbVar22[2] = (byte)((uVar25 + (iVar12 + uVar15) * 4) * 0x29 >> 10);
          iVar12 = uVar26 + uVar17 * 4;
          pbVar22[3] = (byte)((uVar16 + (iVar1 + uVar27) * 4) * 0x29 >> 10);
          pbVar22[4] = (byte)((uVar24 + uVar8 * 4) * 0x52 + iVar1 * 0x7b >> 10);
          iVar13 = uVar16 * 4 + uVar25;
          pbVar22 = pbVar18 + (uint)(*(int *)(param_1 + 0x41fc8) * 3);
          *pbVar22 = (byte)((uint)(iVar12 * 0xcd) >> 10);
          iVar1 = uVar25 * 4 + uVar16;
          pbVar22[1] = (byte)((uVar16 * 4 + uVar27) * 0x7b + iVar12 * 0x52 >> 10);
          pbVar22[2] = (byte)((uVar15 + (iVar13 + uVar27) * 4) * 0x29 >> 10);
          pbVar22[3] = (byte)((uVar27 + (iVar1 + uVar15) * 4) * 0x29 >> 10);
          pbVar22[4] = (byte)((uVar8 + uVar24 * 4) * 0x52 + (uVar25 * 4 + uVar15) * 0x7b >> 10);
          pbVar22 = pbVar20 + (*(int *)(param_1 + 0x41fc0) * 3 + 0x18);
          bVar2 = *pbVar22;
          uVar8 = (uint)pbVar22[1];
          uVar15 = (uint)pbVar22[2];
          bVar3 = pbVar22[3];
          pbVar20 = pbVar20 + 3;
          pbVar22 = pbVar18 + (uint)(*(int *)(param_1 + 0x41fc8) << 2);
          *pbVar22 = (byte)((uint)bVar2 * 0x19a + uVar17 * 0x267 >> 10);
          pbVar22[1] = (byte)((uVar8 + uVar17) * 0xf6 + uVar16 * 0x171 + (uint)bVar2 * 0xa4 >> 10);
          pbVar22[2] = (byte)((uVar15 + uVar8 * 4) * 0x52 + iVar13 * 0x7b >> 10);
          pbVar22[3] = (byte)((uVar8 + uVar15 * 4) * 0x52 + iVar1 * 0x7b >> 10);
          pbVar18 = pbVar18 + 5;
          pbVar22[4] = (byte)((uVar15 + uVar24) * 0xf6 + uVar25 * 0x171 + (uint)bVar3 * 0xa4 >> 10);
          pbVar9 = pbVar9 + 3;
          pbVar23 = pbVar23 + 5;
          local_res10 = local_res10 - 1;
        } while (local_res10 != 0);
      }
      local_res18 = local_res18 + 3;
      local_res20 = local_res20 + 0xf;
      uVar10 = (ulonglong)local_res20;
    } while (local_res18 < *(uint *)(param_1 + 0x41fc4));
  }
  return pbVar9;
}


==================================================================

### EXPORT FUNC 180019740 (1000 bytes) name=FUN_180019740

void FUN_180019740(longlong param_1)

{
  byte *pbVar1;
  byte bVar2;
  byte bVar3;
  int iVar4;
  int iVar5;
  int iVar6;
  longlong lVar7;
  longlong lVar8;
  longlong lVar9;
  longlong lVar10;
  longlong lVar11;
  longlong lVar12;
  int iVar13;
  longlong lVar14;
  int iVar15;
  int iVar16;
  int local_res10;
  int local_res18;
  
  iVar4 = *(int *)(param_1 + 0x41fc4);
  iVar5 = *(int *)(param_1 + 0x41fc0);
  lVar7 = (longlong)iVar5;
  lVar9 = *(longlong *)(param_1 + 0x2a0);
  lVar10 = *(longlong *)(param_1 + 0x220);
  if (1 < iVar4) {
    local_res18 = 1;
    iVar15 = 0;
    local_res10 = 0;
    do {
      if (2 < iVar5) {
        iVar13 = 0;
        iVar16 = iVar15;
        do {
          lVar11 = (longlong)iVar16;
          bVar2 = *(byte *)(lVar11 + 1 + lVar9);
          iVar16 = iVar16 + 2;
          lVar14 = (longlong)(iVar13 / 2 + iVar15);
          lVar8 = lVar7 + lVar11;
          *(uint *)(lVar10 + lVar14 * 4) =
               ((((int)((uint)*(byte *)(lVar11 + 2 + lVar9) + (uint)bVar2) >> 1) * 0x100 +
                (uint)bVar2) * 0x100 + ((int)((uint)*(byte *)(lVar11 + lVar9) + (uint)bVar2) >> 1))
               * 0x100 + (uint)*(byte *)(lVar11 + lVar9);
          bVar2 = *(byte *)(lVar8 + 1 + lVar9);
          bVar3 = *(byte *)(lVar11 + 1 + lVar9);
          *(int *)(lVar10 + (lVar14 + iVar5 / 2) * 4) =
               ((((int)((uint)*(byte *)(lVar11 + 2 + lVar9) +
                        (uint)*(byte *)(lVar8 + 2 + lVar9) + (uint)bVar2 + (uint)bVar3) >> 2) *
                 0x100 + ((int)((uint)bVar2 + (uint)bVar3) >> 1)) * 0x100 +
               ((int)((uint)*(byte *)(lVar8 + lVar9) + (uint)bVar2 + (uint)*(byte *)(lVar11 + lVar9)
                     + (uint)bVar3) >> 2)) * 0x100 +
               ((int)((uint)*(byte *)(lVar8 + lVar9) + (uint)*(byte *)(lVar11 + lVar9)) >> 1);
          iVar6 = iVar13 + 4;
          iVar13 = iVar13 + 2;
        } while (iVar6 < iVar5);
      }
      iVar16 = iVar15 + iVar5 + -2;
      iVar15 = iVar15 + iVar5;
      lVar8 = (longlong)iVar16;
      lVar11 = (longlong)(local_res10 + iVar5 + -2);
      *(ushort *)(lVar10 + lVar11 * 2) =
           (short)((int)((uint)*(byte *)(lVar8 + 1 + lVar9) + (uint)*(byte *)(lVar8 + lVar9)) >> 1)
           * 0x100 + (ushort)*(byte *)(lVar8 + lVar9);
      bVar2 = *(byte *)(lVar8 + lVar7 + lVar9);
      local_res10 = local_res10 + iVar5 * 2;
      *(short *)(lVar10 + (lVar11 + lVar7) * 2) =
           (short)((int)((uint)*(byte *)(lVar8 + 1 + lVar9) +
                         (uint)*(byte *)(lVar8 + lVar7 + 1 + lVar9) + (uint)bVar2 +
                        (uint)*(byte *)(lVar8 + lVar9)) >> 2) * 0x100 +
           (short)((int)((uint)bVar2 + (uint)*(byte *)(lVar8 + lVar9)) >> 1);
      local_res18 = local_res18 + 1;
    } while (local_res18 < iVar4);
  }
  lVar8 = (longlong)(iVar5 * 2);
  if (1 < iVar4) {
    iVar16 = iVar5 + -1;
    iVar15 = 0;
    do {
      lVar12 = (longlong)iVar16;
      lVar11 = lVar12 + lVar7;
      iVar16 = iVar16 + iVar5;
      lVar14 = (longlong)(iVar15 * 2 * iVar5 * 2 + iVar5 * 2 + -2);
      *(undefined1 *)(lVar14 + lVar10) = *(undefined1 *)(lVar12 + lVar9);
      *(byte *)(lVar14 + 1 + lVar10) =
           (char)((int)((uint)*(byte *)(lVar12 + lVar9) + (uint)*(byte *)(lVar12 + lVar9) * 2) >> 2)
           + (*(byte *)(lVar12 + -1 + lVar9) >> 2);
      *(char *)(lVar14 + lVar8 + lVar10) =
           (char)((int)((uint)*(byte *)(lVar11 + lVar9) + (uint)*(byte *)(lVar12 + lVar9)) >> 1);
      iVar13 = iVar15 + 2;
      *(char *)(lVar14 + lVar8 + 1 + lVar10) =
           (char)((int)(((uint)*(byte *)(lVar11 + lVar9) + (uint)*(byte *)(lVar12 + lVar9)) * 3 +
                        (uint)*(byte *)(lVar11 + -1 + lVar9) + (uint)*(byte *)(lVar12 + -1 + lVar9))
                 >> 3);
      iVar15 = iVar15 + 1;
    } while (iVar13 < iVar4);
  }
  iVar15 = 1;
  if (1 < iVar5) {
    lVar11 = lVar9 - lVar7;
    iVar13 = (iVar4 + -1) * iVar5;
    iVar16 = (iVar4 * 2 + -2) * iVar5 * 2;
    do {
      lVar12 = (longlong)iVar13;
      lVar14 = (longlong)iVar16;
      iVar15 = iVar15 + 1;
      iVar13 = iVar13 + 1;
      *(undefined1 *)(lVar14 + lVar10) = *(undefined1 *)(lVar12 + lVar9);
      iVar16 = iVar16 + 2;
      *(char *)(lVar14 + 1 + lVar10) =
           (char)((int)((uint)*(byte *)(lVar12 + 1 + lVar9) + (uint)*(byte *)(lVar12 + lVar9)) >> 1)
      ;
      *(byte *)(lVar14 + lVar8 + lVar10) =
           (char)((int)((uint)*(byte *)(lVar12 + lVar9) + (uint)*(byte *)(lVar12 + lVar9) * 2) >> 2)
           + (*(byte *)(lVar12 + lVar11) >> 2);
      *(char *)(lVar14 + lVar8 + 1 + lVar10) =
           (char)((int)(((uint)*(byte *)(lVar12 + 1 + lVar9) + (uint)*(byte *)(lVar12 + lVar9)) * 3
                        + (uint)*(byte *)(lVar12 + 1 + lVar11) + (uint)*(byte *)(lVar12 + lVar11))
                 >> 3);
    } while (iVar15 < iVar5);
  }
  lVar9 = (longlong)((iVar4 + -1) * iVar5 + iVar5 + -1);
  lVar10 = (longlong)((iVar4 * 2 + -2) * iVar5 * 2 + (iVar5 + -1) * 2);
  *(undefined1 *)(lVar10 + *(longlong *)(param_1 + 0x220)) =
       *(undefined1 *)(lVar9 + *(longlong *)(param_1 + 0x2a0));
  bVar2 = *(byte *)(lVar9 + *(longlong *)(param_1 + 0x2a0));
  *(char *)(lVar10 + 1 + *(longlong *)(param_1 + 0x220)) =
       (char)((int)((uint)bVar2 + (uint)bVar2 * 2 +
                   (uint)*(byte *)(lVar9 + -1 + *(longlong *)(param_1 + 0x2a0))) >> 2);
  bVar2 = *(byte *)(lVar9 + *(longlong *)(param_1 + 0x2a0));
  *(char *)(lVar10 + *(longlong *)(param_1 + 0x220) + lVar8) =
       (char)((int)((uint)*(byte *)((lVar9 - lVar7) + *(longlong *)(param_1 + 0x2a0)) +
                   (uint)bVar2 + (uint)bVar2 * 2) >> 2);
  pbVar1 = (byte *)(lVar10 + *(longlong *)(param_1 + 0x220));
  pbVar1[lVar8 + 1] =
       (byte)((ulonglong)
              ((longlong)
               (int)((uint)*(byte *)(lVar10 + 1 + *(longlong *)(param_1 + 0x220)) +
                     (uint)pbVar1[lVar8] + (uint)*pbVar1) * 0x55555556) >> 0x20);
  return;
}


==================================================================

### EXPORT FUNC 180019b30 (816 bytes) name=FUN_180019b30

void FUN_180019b30(longlong param_1)

{
  byte bVar1;
  byte bVar2;
  int iVar3;
  ulonglong uVar4;
  undefined1 uVar5;
  int iVar6;
  uint uVar7;
  undefined1 *puVar8;
  undefined1 *_Dst;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  void *_Src;
  byte *pbVar12;
  byte *pbVar13;
  byte *pbVar14;
  uint uVar15;
  byte *pbVar16;
  uint local_res8;
  
  _Src = *(void **)(param_1 + 0x2a0);
  local_res8 = 0;
  uVar9 = 0;
  puVar8 = (undefined1 *)
           (((ulonglong)(uint)((*(int *)(param_1 + 0x41fcc) + 3) * *(int *)(param_1 + 0x41fc8)) -
            (ulonglong)(uint)((*(int *)(param_1 + 0x41fc0) + 8) * (*(int *)(param_1 + 0x41fc4) + 1))
            ) + *(longlong *)(param_1 + 0x220));
  _Dst = puVar8;
  if (*(int *)(param_1 + 0x41fc4) != 0) {
    do {
      memcpy(_Dst,_Src,(ulonglong)*(uint *)(param_1 + 0x41fc0));
      iVar6 = (uint)*(byte *)((ulonglong)(*(int *)(param_1 + 0x41fc0) - 1) + (longlong)_Src) * 2 -
              (uint)*(byte *)((ulonglong)(*(int *)(param_1 + 0x41fc0) - 2) + (longlong)_Src);
      if (iVar6 < 0x100) {
        uVar5 = (undefined1)iVar6;
        if (iVar6 < 0) {
          uVar5 = 0;
        }
      }
      else {
        uVar5 = 0xff;
      }
      uVar9 = uVar9 + 1;
      _Dst[*(uint *)(param_1 + 0x41fc0)] = uVar5;
      _Src = (void *)((longlong)_Src + (ulonglong)*(uint *)(param_1 + 0x41fc0));
      _Dst = _Dst + (*(uint *)(param_1 + 0x41fc0) + 8);
    } while (uVar9 < *(uint *)(param_1 + 0x41fc4));
  }
  uVar4 = (ulonglong)(*(int *)(param_1 + 0x41fc0) + 8);
  pbVar12 = _Dst + -uVar4;
  pbVar13 = pbVar12 + -uVar4;
  for (iVar6 = *(int *)(param_1 + 0x41fc0) + 1; iVar6 != 0; iVar6 = iVar6 + -1) {
    bVar1 = *pbVar12;
    bVar2 = *pbVar13;
    pbVar13 = pbVar13 + 1;
    pbVar12 = pbVar12 + 1;
    iVar3 = (uint)bVar1 * 2 - (uint)bVar2;
    if (iVar3 < 0x100) {
      uVar5 = (undefined1)iVar3;
      if (iVar3 < 0) {
        uVar5 = 0;
      }
    }
    else {
      uVar5 = 0xff;
    }
    *_Dst = uVar5;
    _Dst = _Dst + 1;
  }
  if (*(int *)(param_1 + 0x41fc4) != 0) {
    do {
      iVar6 = *(int *)(param_1 + 0x41fc0);
      pbVar13 = (byte *)((ulonglong)(*(int *)(param_1 + 0x41fc8) * local_res8 * 4) +
                        *(longlong *)(param_1 + 0x220));
      pbVar12 = puVar8 + (iVar6 + 8) * local_res8;
      if (iVar6 != 0) {
        pbVar16 = pbVar13 + 2;
        do {
          bVar1 = *pbVar12;
          uVar10 = (uint)bVar1;
          uVar7 = (uint)pbVar12[1];
          uVar15 = (uint)pbVar12[(ulonglong)*(uint *)(param_1 + 0x41fc0) + 8];
          uVar11 = (uint)pbVar12[(ulonglong)*(uint *)(param_1 + 0x41fc0) + 9];
          pbVar12 = pbVar12 + 1;
          *pbVar13 = bVar1;
          uVar9 = uVar10 * 3 + uVar15;
          pbVar16[-1] = (byte)(uVar10 * 3 + uVar7 >> 2);
          *pbVar16 = (byte)(uVar7 + uVar10 >> 1);
          pbVar16[1] = (byte)(uVar7 * 3 + uVar10 >> 2);
          pbVar14 = pbVar13 + *(uint *)(param_1 + 0x41fc8);
          *pbVar14 = (byte)(uVar9 >> 2);
          pbVar14[1] = (byte)(uVar11 + (uVar9 + uVar7) * 3 >> 4);
          pbVar14[2] = (byte)(uVar11 + (uVar7 + uVar10) * 3 + uVar15 >> 3);
          pbVar14[3] = (byte)(uVar15 + (uVar7 * 3 + uVar11 + uVar10) * 3 >> 4);
          pbVar14 = pbVar13 + (uint)(*(int *)(param_1 + 0x41fc8) * 2);
          *pbVar14 = (byte)(uVar15 + uVar10 >> 1);
          pbVar14[1] = (byte)(uVar11 + (uVar15 + uVar10) * 3 + uVar7 >> 3);
          pbVar14[2] = (byte)(uVar11 + uVar15 + uVar7 + uVar10 >> 2);
          pbVar14[3] = (byte)(uVar15 + (uVar11 + uVar7) * 3 + uVar10 >> 3);
          pbVar14 = pbVar13 + (uint)(*(int *)(param_1 + 0x41fc8) * 3);
          *pbVar14 = (byte)(uVar15 * 3 + uVar10 >> 2);
          pbVar13 = pbVar13 + 4;
          pbVar16 = pbVar16 + 4;
          pbVar14[1] = (byte)(uVar7 + (uVar15 * 3 + uVar11 + uVar10) * 3 >> 4);
          pbVar14[2] = (byte)(uVar7 + (uVar11 + uVar15) * 3 + uVar10 >> 3);
          iVar6 = iVar6 + -1;
          pbVar14[3] = (byte)(uVar10 + (uVar15 + uVar11 * 3 + uVar7) * 3 >> 4);
        } while (iVar6 != 0);
      }
      local_res8 = local_res8 + 1;
    } while (local_res8 < *(uint *)(param_1 + 0x41fc4));
  }
  return;
}


==================================================================

### EXPORT FUNC 180019e60 (2276 bytes) name=FUN_180019e60

void FUN_180019e60(longlong param_1)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  uint uVar4;
  uint uVar5;
  byte bVar6;
  byte bVar7;
  int iVar8;
  ulonglong uVar9;
  undefined1 uVar10;
  int iVar11;
  int iVar12;
  int iVar13;
  uint uVar14;
  undefined1 *puVar15;
  undefined1 *_Dst;
  void *_Src;
  uint uVar16;
  uint uVar17;
  uint uVar18;
  uint uVar19;
  byte *pbVar20;
  byte *pbVar21;
  int iVar22;
  byte *pbVar23;
  byte *pbVar24;
  int iVar25;
  int iVar26;
  uint uVar27;
  int iVar28;
  uint uVar29;
  int iVar30;
  int local_90;
  uint local_8c;
  
  _Src = *(void **)(param_1 + 0x2a0);
  local_8c = 0;
  uVar16 = 0;
  puVar15 = (undefined1 *)
            (((ulonglong)(uint)((*(int *)(param_1 + 0x41fcc) + 3) * *(int *)(param_1 + 0x41fc8)) -
             (ulonglong)
             (uint)((*(int *)(param_1 + 0x41fc0) + 8) * (*(int *)(param_1 + 0x41fc4) + 1))) +
            *(longlong *)(param_1 + 0x220));
  _Dst = puVar15;
  if (*(int *)(param_1 + 0x41fc4) != 0) {
    do {
      memcpy(_Dst,_Src,(ulonglong)*(uint *)(param_1 + 0x41fc0));
      iVar11 = (uint)*(byte *)((ulonglong)(*(int *)(param_1 + 0x41fc0) - 1) + (longlong)_Src) * 2 -
               (uint)*(byte *)((ulonglong)(*(int *)(param_1 + 0x41fc0) - 2) + (longlong)_Src);
      if (iVar11 < 0x100) {
        uVar10 = (undefined1)iVar11;
        if (iVar11 < 0) {
          uVar10 = 0;
        }
      }
      else {
        uVar10 = 0xff;
      }
      uVar16 = uVar16 + 1;
      _Dst[*(uint *)(param_1 + 0x41fc0)] = uVar10;
      _Src = (void *)((longlong)_Src + (ulonglong)*(uint *)(param_1 + 0x41fc0));
      _Dst = _Dst + (*(uint *)(param_1 + 0x41fc0) + 8);
    } while (uVar16 < *(uint *)(param_1 + 0x41fc4));
  }
  uVar9 = (ulonglong)(*(int *)(param_1 + 0x41fc0) + 8);
  pbVar20 = _Dst + -uVar9;
  pbVar23 = pbVar20 + -uVar9;
  for (iVar11 = *(int *)(param_1 + 0x41fc0) + 1; iVar11 != 0; iVar11 = iVar11 + -1) {
    bVar6 = *pbVar20;
    bVar7 = *pbVar23;
    pbVar23 = pbVar23 + 1;
    pbVar20 = pbVar20 + 1;
    iVar8 = (uint)bVar6 * 2 - (uint)bVar7;
    if (iVar8 < 0x100) {
      uVar10 = (undefined1)iVar8;
      if (iVar8 < 0) {
        uVar10 = 0;
      }
    }
    else {
      uVar10 = 0xff;
    }
    *_Dst = uVar10;
    _Dst = _Dst + 1;
  }
  if (*(int *)(param_1 + 0x41fc4) != 0) {
    do {
      local_90 = *(int *)(param_1 + 0x41fc0);
      pbVar20 = (byte *)((ulonglong)(*(int *)(param_1 + 0x41fc8) * local_8c * 8) +
                        *(longlong *)(param_1 + 0x220));
      if (local_90 != 0) {
        pbVar23 = pbVar20 + 6;
        pbVar24 = puVar15 + (local_90 + 8) * local_8c;
        do {
          uVar14 = (uint)pbVar24[1];
          uVar18 = (uint)*pbVar24;
          uVar27 = (uint)pbVar24[(ulonglong)*(uint *)(param_1 + 0x41fc0) + 8];
          uVar29 = (uint)pbVar24[(ulonglong)*(uint *)(param_1 + 0x41fc0) + 9];
          uVar16 = uVar18 * 7 + uVar14;
          iVar8 = uVar18 * 3;
          uVar19 = uVar14 + uVar18;
          uVar4 = iVar8 + uVar14;
          *pbVar20 = *pbVar24;
          pbVar23[-5] = (byte)(uVar16 >> 3);
          pbVar23[-4] = (byte)(uVar4 >> 2);
          pbVar23[-3] = (byte)(uVar18 * 0x28 + uVar14 * 0x18 >> 6);
          pbVar23[-2] = (byte)(uVar19 >> 1);
          pbVar23[-1] = (byte)(uVar18 * 0x18 + uVar14 * 0x28 >> 6);
          uVar17 = uVar14 * 3 + uVar18;
          *pbVar23 = (byte)(uVar17 >> 2);
          uVar1 = uVar14 * 7 + uVar18;
          pbVar23[1] = (byte)(uVar1 >> 3);
          uVar2 = uVar18 * 7 + uVar27;
          pbVar21 = pbVar20 + *(uint *)(param_1 + 0x41fc8);
          iVar3 = uVar27 * 3;
          *pbVar21 = (byte)(uVar2 >> 3);
          pbVar21[1] = (byte)((uVar2 + uVar14) * 7 + uVar29 >> 6);
          iVar11 = uVar14 * 7 + uVar29;
          pbVar21[2] = (byte)(uVar4 * 7 + iVar3 + uVar29 >> 5);
          iVar13 = uVar29 * 3;
          pbVar21[3] = (byte)(iVar11 * 3 + uVar2 * 5 >> 6);
          pbVar21[4] = (byte)(uVar19 * 7 + uVar29 + uVar27 >> 4);
          uVar5 = iVar8 + uVar27;
          pbVar21[5] = (byte)(iVar11 * 5 + uVar2 * 3 >> 6);
          pbVar21[6] = (byte)(uVar17 * 7 + iVar13 + uVar27 >> 5);
          pbVar21[7] = (byte)((uVar18 + iVar11) * 7 + uVar27 >> 6);
          pbVar21 = pbVar20 + (uint)(*(int *)(param_1 + 0x41fc8) * 2);
          *pbVar21 = (byte)(uVar5 >> 2);
          iVar11 = uVar14 * 3 + uVar29;
          pbVar21[1] = (byte)(uVar5 * 7 + uVar14 * 3 + uVar29 >> 5);
          pbVar21[2] = (byte)(uVar29 + (uVar14 + uVar5) * 3 >> 4);
          pbVar21[3] = (byte)(uVar5 * 10 + iVar11 * 6 >> 6);
          pbVar21[4] = (byte)(uVar29 + uVar19 * 3 + uVar27 >> 3);
          pbVar21[5] = (byte)(uVar5 * 6 + iVar11 * 10 >> 6);
          pbVar21[6] = (byte)(uVar27 + (iVar11 + uVar18) * 3 >> 4);
          pbVar21[7] = (byte)(iVar11 * 7 + iVar8 + uVar27 >> 5);
          pbVar21 = pbVar20 + (uint)(*(int *)(param_1 + 0x41fc8) * 3);
          iVar11 = uVar27 * 7 + uVar29;
          *pbVar21 = (byte)(uVar18 * 0x28 + uVar27 * 0x18 >> 6);
          iVar22 = (uVar29 + uVar18) * 0xf;
          iVar30 = uVar29 + iVar3;
          pbVar21[1] = (byte)(iVar11 * 3 + uVar16 * 5 >> 6);
          iVar28 = uVar27 + uVar29;
          iVar25 = (uVar27 + uVar14) * 0xf;
          pbVar21[2] = (byte)(uVar4 * 10 + iVar30 * 6 >> 6);
          iVar26 = iVar13 + uVar27;
          pbVar21[3] = (byte)(uVar18 * 0x19 + iVar25 + uVar29 * 9 >> 6);
          pbVar21[4] = (byte)(uVar19 * 0x14 + iVar28 * 0xc >> 6);
          iVar8 = uVar29 * 7 + uVar27;
          pbVar21[5] = (byte)(uVar27 * 9 + uVar14 * 0x19 + iVar22 >> 6);
          pbVar21[6] = (byte)((uVar14 * 3 + uVar18) * 10 + iVar26 * 6 >> 6);
          pbVar21[7] = (byte)(iVar8 * 3 + uVar1 * 5 >> 6);
          pbVar21 = pbVar20 + (uint)(*(int *)(param_1 + 0x41fc8) << 2);
          uVar19 = uVar27 + uVar18;
          *pbVar21 = (byte)(uVar19 >> 1);
          pbVar21[1] = (byte)(uVar19 * 7 + uVar29 + uVar14 >> 4);
          iVar12 = uVar29 + uVar14;
          pbVar21[2] = (byte)(uVar29 + uVar19 * 3 + uVar14 >> 3);
          pbVar21[3] = (byte)(uVar19 * 0x14 + iVar12 * 0xc >> 6);
          pbVar21[4] = (byte)(iVar28 + uVar14 + uVar18 >> 2);
          pbVar21[5] = (byte)(uVar19 * 0xc + iVar12 * 0x14 >> 6);
          pbVar21[6] = (byte)(uVar27 + iVar12 * 3 + uVar18 >> 3);
          pbVar21[7] = (byte)(iVar12 * 7 + uVar27 + uVar18 >> 4);
          pbVar21 = pbVar20 + (uint)(*(int *)(param_1 + 0x41fc8) * 5);
          *pbVar21 = (byte)(uVar18 * 0x18 + uVar27 * 0x28 >> 6);
          pbVar21[1] = (byte)(iVar11 * 5 + uVar16 * 3 >> 6);
          pbVar21[2] = (byte)((uVar18 * 3 + uVar14) * 6 + iVar30 * 10 >> 6);
          uVar16 = uVar18 + iVar3;
          pbVar21[3] = (byte)(uVar14 * 9 + iVar22 + uVar27 * 0x19 >> 6);
          pbVar21[4] = (byte)((uVar14 + uVar18) * 0xc + iVar28 * 0x14 >> 6);
          pbVar21[5] = (byte)(uVar18 * 9 + uVar29 * 0x19 + iVar25 >> 6);
          pbVar21[6] = (byte)((uVar14 * 3 + uVar18) * 6 + iVar26 * 10 >> 6);
          pbVar21[7] = (byte)(iVar8 * 5 + uVar1 * 3 >> 6);
          pbVar21 = pbVar20 + (uint)(*(int *)(param_1 + 0x41fc8) * 6);
          *pbVar21 = (byte)(uVar16 >> 2);
          pbVar21[1] = (byte)(uVar16 * 7 + iVar13 + uVar14 >> 5);
          iVar13 = iVar13 + uVar14;
          pbVar21[2] = (byte)(uVar14 + (iVar30 + uVar18) * 3 >> 4);
          pbVar21[3] = (byte)(uVar16 * 10 + iVar13 * 6 >> 6);
          pbVar21[4] = (byte)(uVar14 + iVar28 * 3 + uVar18 >> 3);
          pbVar21[5] = (byte)(uVar16 * 6 + iVar13 * 10 >> 6);
          pbVar21[6] = (byte)(uVar18 + (iVar26 + uVar14) * 3 >> 4);
          pbVar21[7] = (byte)(iVar13 * 7 + iVar3 + uVar18 >> 5);
          iVar3 = uVar29 * 7 + uVar14;
          pbVar21 = pbVar20 + (uint)(*(int *)(param_1 + 0x41fc8) * 7);
          uVar16 = uVar18 + uVar27 * 7;
          *pbVar21 = (byte)(uVar16 >> 3);
          pbVar21[1] = (byte)((iVar11 + uVar18) * 7 + uVar14 >> 6);
          pbVar21[2] = (byte)(iVar30 * 7 + uVar18 * 3 + uVar14 >> 5);
          pbVar21[3] = (byte)(iVar3 * 3 + uVar16 * 5 >> 6);
          pbVar21[4] = (byte)(iVar28 * 7 + uVar14 + uVar18 >> 4);
          pbVar21[5] = (byte)(iVar3 * 5 + uVar16 * 3 >> 6);
          pbVar20 = pbVar20 + 8;
          pbVar23 = pbVar23 + 8;
          local_90 = local_90 + -1;
          pbVar21[6] = (byte)(iVar26 * 7 + uVar14 * 3 + uVar18 >> 5);
          pbVar21[7] = (byte)((iVar8 + uVar14) * 7 + uVar18 >> 6);
          pbVar24 = pbVar24 + 1;
        } while (local_90 != 0);
      }
      local_8c = local_8c + 1;
    } while (local_8c < *(uint *)(param_1 + 0x41fc4));
  }
  return;
}


==================================================================

### EXPORT FUNC 18001a750 (841 bytes) name=FUN_18001a750

void FUN_18001a750(longlong param_1)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint uVar4;
  int iVar5;
  float fVar6;
  float fVar7;
  undefined1 uVar8;
  uint uVar9;
  longlong lVar10;
  uint uVar11;
  uint uVar12;
  ulonglong uVar13;
  uint uVar14;
  int iVar15;
  ulonglong uVar16;
  ulonglong uVar17;
  int iVar18;
  float fVar19;
  float fVar20;
  float fVar21;
  float fVar22;
  float fVar23;
  
  fVar7 = DAT_18005e704;
  fVar6 = DAT_18005e700;
  uVar1 = *(uint *)(param_1 + 0x41fc8);
  uVar2 = *(uint *)(param_1 + 0x41fc0);
  uVar3 = *(uint *)(param_1 + 0x41fc4);
  uVar4 = *(uint *)(param_1 + 0x41fcc);
  uVar17 = 0;
  if (uVar1 != 0) {
    fVar23 = (float)uVar2 - DAT_18005e700;
    do {
      iVar18 = (int)uVar17;
      fVar22 = (float)uVar17 * ((float)uVar2 / (float)uVar1);
      if (fVar23 < fVar22) {
        fVar22 = fVar23;
      }
      uVar11 = 0;
      uVar13 = (ulonglong)fVar22;
      if (uVar4 != 0) {
        iVar5 = (int)uVar13;
        uVar12 = iVar5 + 1;
        fVar21 = (float)uVar3 - fVar6;
        do {
          fVar20 = (float)uVar11 * ((float)uVar3 / (float)uVar4);
          if (fVar21 < fVar20) {
            fVar20 = fVar21;
          }
          uVar16 = (ulonglong)fVar20;
          iVar15 = (int)uVar16;
          if ((uVar12 < uVar2) && (iVar15 + 1U < uVar3)) {
            lVar10 = *(longlong *)(param_1 + 0x2a0);
            uVar14 = iVar15 * uVar2 + iVar5;
            fVar19 = fVar22 - (float)(uVar13 & 0xffffffff);
            fVar20 = fVar20 - (float)(uVar16 & 0xffffffff);
            lVar10 = (longlong)
                     (((float)*(byte *)((ulonglong)(uVar14 + uVar2) + lVar10) * (fVar6 - fVar19) +
                      (float)*(byte *)((ulonglong)(uVar14 + 1 + uVar2) + lVar10) * fVar19) * fVar20
                      + ((float)*(byte *)((ulonglong)(uVar14 + 1) + lVar10) * fVar19 +
                        (float)*(byte *)((ulonglong)uVar14 + lVar10) * (fVar6 - fVar19)) *
                        (fVar6 - fVar20) + fVar7);
            uVar8 = (undefined1)lVar10;
            if (0xff < (uint)lVar10) {
              uVar8 = 0xff;
            }
            *(undefined1 *)(uVar17 + *(longlong *)(param_1 + 0x220)) = uVar8;
          }
          else {
            uVar14 = iVar15 + 1;
            if ((uVar14 == uVar3) && (uVar12 < uVar2)) {
              uVar14 = iVar15 * uVar2 + iVar5;
              uVar9 = (uint)*(byte *)((ulonglong)uVar14 + *(longlong *)(param_1 + 0x2a0));
              lVar10 = (longlong)
                       ((float)(int)(*(byte *)((ulonglong)(uVar14 + 1) +
                                              *(longlong *)(param_1 + 0x2a0)) - uVar9) *
                        (fVar22 - (float)(uVar13 & 0xffffffff)) + (float)uVar9 + fVar7);
              uVar8 = (undefined1)lVar10;
              if (0xff < (uint)lVar10) {
                uVar8 = 0xff;
              }
              *(undefined1 *)(uVar17 + *(longlong *)(param_1 + 0x220)) = uVar8;
            }
            else if ((uVar12 == uVar2) && (uVar14 < uVar3)) {
              uVar9 = (uint)*(byte *)((ulonglong)(iVar15 * uVar2 + iVar5) +
                                     *(longlong *)(param_1 + 0x2a0));
              lVar10 = (longlong)
                       ((float)(int)(*(byte *)((ulonglong)(uVar14 * uVar2 + iVar5) +
                                              *(longlong *)(param_1 + 0x2a0)) - uVar9) *
                        (fVar20 - (float)(uVar16 & 0xffffffff)) + (float)uVar9 + fVar7);
              uVar8 = (undefined1)lVar10;
              if (0xff < (uint)lVar10) {
                uVar8 = 0xff;
              }
              *(undefined1 *)(uVar17 + *(longlong *)(param_1 + 0x220)) = uVar8;
            }
            else {
              *(undefined1 *)(uVar17 + *(longlong *)(param_1 + 0x220)) =
                   *(undefined1 *)
                    ((ulonglong)(iVar15 * uVar2 + iVar5) + *(longlong *)(param_1 + 0x2a0));
            }
          }
          uVar11 = uVar11 + 1;
          uVar17 = (ulonglong)((int)uVar17 + uVar1);
        } while (uVar11 < uVar4);
      }
      uVar11 = iVar18 + 1;
      uVar17 = (ulonglong)uVar11;
    } while (uVar11 < uVar1);
  }
  return;
}


==================================================================

### EXPORT FUNC 18001aaa0 (204 bytes) name=FUN_18001aaa0

longlong * FUN_18001aaa0(longlong *param_1,short *param_2)

{
  short sVar1;
  uint uVar2;
  longlong lVar3;
  int iVar4;
  int iVar5;
  short *psVar6;
  ulonglong uVar7;
  
  if (param_2 == (short *)0x0) {
    iVar4 = 0;
  }
  else {
    lVar3 = -1;
    psVar6 = param_2;
    do {
      if (lVar3 == 0) break;
      lVar3 = lVar3 + -1;
      sVar1 = *psVar6;
      psVar6 = psVar6 + 1;
    } while (sVar1 != 0);
    iVar4 = ~(uint)lVar3 - 1;
  }
  lVar3 = *param_1;
  uVar2 = *(uint *)(lVar3 + -0x10);
  iVar5 = uVar2 + iVar4;
  uVar7 = (longlong)param_2 - lVar3 >> 1;
  if ((int)(1U - *(int *)(lVar3 + -8) | *(int *)(lVar3 + -0xc) - iVar5) < 0) {
    FUN_18000b190(param_1,iVar5);
  }
  if (uVar7 <= uVar2) {
    param_2 = (short *)(*param_1 + uVar7 * 2);
  }
  FUN_180032c60((ulonglong *)(*param_1 + (ulonglong)uVar2 * 2),(longlong)iVar4 * 2,param_2,
                (longlong)iVar4 * 2);
  if ((-1 < iVar5) && (iVar5 <= *(int *)(*param_1 + -0xc))) {
    *(int *)(*param_1 + -0x10) = iVar5;
    *(undefined2 *)(*param_1 + (longlong)iVar5 * 2) = 0;
    return param_1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8ffa9);
}


==================================================================

### EXPORT FUNC 18001ab70 (330 bytes) name=FUN_18001ab70

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

longlong * FUN_18001ab70(longlong *param_1,longlong *param_2,LPCWSTR param_3)

{
  WCHAR WVar1;
  undefined **ppuVar2;
  longlong lVar3;
  undefined8 uVar4;
  HMODULE pHVar5;
  WCHAR *pWVar6;
  undefined1 auStack_188 [32];
  undefined4 local_168;
  longlong *local_160;
  undefined8 local_158;
  int local_150 [10];
  WCHAR local_128 [128];
  ulonglong local_28;
  
  local_158 = 0xfffffffffffffffe;
  local_28 = DAT_18006cea0 ^ (ulonglong)auStack_188;
  local_168 = 0;
  local_160 = param_2;
  if (param_3 == (LPCWSTR)0x0) {
    ppuVar2 = FUN_18001fcc0();
    if (ppuVar2 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7fffbffb);
    }
    lVar3 = (**(code **)(*ppuVar2 + 0x18))(ppuVar2);
    *param_2 = lVar3 + 0x18;
    FUN_18000b480(param_2,(void *)0x0,0);
  }
  else {
    uVar4 = FUN_180033b30(local_150,param_1);
    if (((int)uVar4 != 0) || (lVar3 = FUN_180033a30(local_128,0x80,param_3,local_150), lVar3 == 0))
    {
      local_128[0] = L'\0';
    }
    ppuVar2 = FUN_18001fcc0();
    if (ppuVar2 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7fffbffb);
    }
    lVar3 = (**(code **)(*ppuVar2 + 0x18))(ppuVar2);
    *param_2 = lVar3 + 0x18;
    if (((ulonglong)local_128 & 0xffffffffffff0000) == 0) {
      pHVar5 = (HMODULE)FUN_18001fcac();
      if (pHVar5 != (HMODULE)0x0) {
        FUN_18000af50(param_2,pHVar5,(uint)local_128 & 0xffff);
      }
    }
    else {
      lVar3 = -1;
      pWVar6 = local_128;
      do {
        if (lVar3 == 0) break;
        lVar3 = lVar3 + -1;
        WVar1 = *pWVar6;
        pWVar6 = pWVar6 + 1;
      } while (WVar1 != L'\0');
      FUN_18000b480(param_2,local_128,~(uint)lVar3 - 1);
    }
  }
  return param_2;
}


==================================================================

### EXPORT FUNC 18001acc0 (24 bytes) name=Unwind@18001acc0

void Unwind_18001acc0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0(*(longlong **)(param_2 + 0x28));
  return;
}


==================================================================

### EXPORT FUNC 18001ace0 (24 bytes) name=Unwind@18001ace0

void Unwind_18001ace0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0(*(longlong **)(param_2 + 0x28));
  return;
}


==================================================================

### EXPORT FUNC 18001ad00 (164 bytes) name=FUN_18001ad00

void FUN_18001ad00(longlong *param_1,WCHAR *param_2,undefined8 param_3,undefined8 param_4)

{
  int iVar1;
  ulonglong uVar2;
  undefined8 local_res18;
  undefined8 local_res20;
  
  local_res18 = param_3;
  local_res20 = param_4;
  if (param_2 == (WCHAR *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7ff8ffa9);
  }
  uVar2 = FUN_180033040(param_2,(WCHAR *)&local_res18);
  iVar1 = (int)uVar2;
  if ((int)(1U - *(int *)(*param_1 + -8) | *(int *)(*param_1 + -0xc) - iVar1) < 0) {
    FUN_18000b190(param_1,iVar1);
  }
  FUN_180033200((char *)*param_1,(longlong)(iVar1 + 1),(longlong)param_2,&local_res18);
  if ((-1 < iVar1) && (iVar1 <= *(int *)(*param_1 + -0xc))) {
    *(int *)(*param_1 + -0x10) = iVar1;
    *(undefined2 *)(*param_1 + (longlong)iVar1 * 2) = 0;
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8ffa9);
}


==================================================================

### EXPORT FUNC 18001adb0 (147 bytes) name=FUN_18001adb0

longlong * FUN_18001adb0(longlong *param_1,LPCSTR param_2)

{
  undefined **ppuVar1;
  longlong lVar2;
  HMODULE pHVar3;
  
  ppuVar1 = FUN_18001fcc0();
  if (ppuVar1 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar2 = (**(code **)(*ppuVar1 + 0x18))(ppuVar1);
  *param_1 = lVar2 + 0x18;
  if ((param_2 == (LPCSTR)0x0) || (((ulonglong)param_2 & 0xffffffffffff0000) != 0)) {
    FUN_18000ad80(param_1,param_2);
  }
  else {
    pHVar3 = (HMODULE)FUN_18001fcac();
    if (pHVar3 != (HMODULE)0x0) {
      FUN_18000af50(param_1,pHVar3,(uint)param_2 & 0xffff);
    }
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18001ae50 (24 bytes) name=Unwind@18001ae50

void Unwind_18001ae50(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0(*(longlong **)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 18001ae70 (383 bytes) name=FUN_18001ae70

undefined8 * FUN_18001ae70(undefined8 *param_1)

{
  undefined8 *puVar1;
  LSTATUS LVar2;
  undefined8 uVar3;
  undefined8 *local_res8;
  undefined8 *local_res10;
  HKEY local_res18;
  
  *param_1 = CMgtStream::vftable;
  puVar1 = param_1 + 1;
  local_res8 = param_1;
  local_res10 = puVar1;
  FUN_18001ec00(puVar1);
  *puVar1 = CCriticalSection::vftable;
  uVar3 = FUN_1800013a0((longlong)puVar1);
  if ((int)uVar3 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed6c();
  }
  FUN_180020138(param_1 + 10);
  *(undefined4 *)(param_1 + 8) = 0;
  *(undefined4 *)((longlong)param_1 + 0x44) = 0;
  *(undefined4 *)(param_1 + 9) = 0;
  *(undefined4 *)((longlong)param_1 + 0x4c) = 0;
  param_1[0x91] = 0;
  *(undefined4 *)(param_1 + 0x92) = 0;
  param_1[0x93] = 0;
  param_1[0x94] = 0;
  *(undefined4 *)(param_1 + 0x95) = 0;
  *(undefined4 *)((longlong)param_1 + 0x4ac) = 0;
  *(undefined4 *)(param_1 + 0x96) = 4;
  *(undefined4 *)((longlong)param_1 + 0x4b4) = 0;
  *(undefined4 *)(param_1 + 0x97) = 0x14;
  *(undefined4 *)((longlong)param_1 + 0x4bc) = 1;
  *(undefined4 *)(param_1 + 0x98) = 0;
  *(undefined4 *)((longlong)param_1 + 0x4c4) = 0;
  param_1[0x99] = 0;
  param_1[0x9a] = 0;
  *(undefined4 *)(param_1 + 0x9b) = 0;
  param_1[0x9c] = 0;
  param_1[0x9d] = 0;
  LVar2 = RegCreateKeyExW((HKEY)0xffffffff80000001,L"Software\\GNU\\Xvid",0,(LPWSTR)0x0,0,0xf003f,
                          (LPSECURITY_ATTRIBUTES)0x0,&local_res18,(LPDWORD)&local_res10);
  if (LVar2 == 0) {
    local_res8 = (undefined8 *)((ulonglong)local_res8 & 0xffffffff00000000);
    RegSetValueExW(local_res18,L"display_status",0,4,(BYTE *)&local_res8,4);
    RegCloseKey(local_res18);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18001aff0 (24 bytes) name=Unwind@18001aff0

void Unwind_18001aff0(undefined8 param_1,longlong param_2)

{
  CSyncObject::~CSyncObject(*(CSyncObject **)(param_2 + 0x78));
  return;
}


==================================================================

### EXPORT FUNC 18001b010 (28 bytes) name=Unwind@18001b010

void Unwind_18001b010(undefined8 param_1,longlong param_2)

{
  FUN_180001440((CSyncObject *)(*(longlong *)(param_2 + 0x70) + 8));
  return;
}


==================================================================

### EXPORT FUNC 18001b030 (47 bytes) name=FUN_18001b030

undefined8 *
FUN_18001b030(undefined8 *param_1,ulonglong param_2,undefined8 param_3,undefined8 param_4)

{
  FUN_18001b060(param_1,param_2,param_3,param_4);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18001b060 (259 bytes) name=FUN_18001b060

void FUN_18001b060(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  longlong *plVar1;
  
  *param_1 = CMgtStream::vftable;
  if ((*(int *)((longlong)param_1 + 0x44) != 0) || (*(int *)(param_1 + 9) != 0)) {
    FUN_180001470((longlong)(param_1 + 1));
    if (*(int *)(param_1 + 9) != 0) {
      *(undefined4 *)(param_1 + 0x9b) = 0;
      SetEvent((HANDLE)param_1[0x9d]);
      if (param_1[0x9c] != 0) {
        WaitForSingleObject(*(HANDLE *)(param_1[0x9c] + 0x58),0xffffffff);
        plVar1 = (longlong *)param_1[0x9c];
        if (plVar1 != (longlong *)0x0) {
          (**(code **)(*plVar1 + 8))(plVar1,1);
        }
        param_1[0x9c] = 0;
      }
      CloseHandle((HANDLE)param_1[0x9d]);
      *(undefined4 *)(param_1 + 9) = 0;
    }
    if (*(int *)((longlong)param_1 + 0x44) != 0) {
      *(undefined4 *)((longlong)param_1 + 0x44) = 0;
    }
    (**(code **)(param_1[10] + 0x98))();
    *(undefined4 *)(param_1 + 8) = 0;
    (**(code **)(param_1[1] + 0x28))(param_1 + 1);
  }
  FUN_1800203a4((CFile *)(param_1 + 10));
  param_1[1] = CCriticalSection::vftable;
  DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 3));
  CSyncObject::~CSyncObject((CSyncObject *)(param_1 + 1));
  return;
}


==================================================================

### EXPORT FUNC 18001b170 (28 bytes) name=Unwind@18001b170

void Unwind_18001b170(undefined8 param_1,longlong param_2)

{
  FUN_180001440((CSyncObject *)(*(longlong *)(param_2 + 0x40) + 8));
  return;
}


==================================================================

### EXPORT FUNC 18001b190 (28 bytes) name=Unwind@18001b190

void Unwind_18001b190(undefined8 param_1,longlong param_2)

{
  FUN_1800203a4((CFile *)(*(longlong *)(param_2 + 0x40) + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 18001b1b0 (190 bytes) name=FUN_18001b1b0

undefined8
FUN_18001b1b0(longlong param_1,longlong param_2,undefined8 param_3,longlong param_4,int param_5)

{
  undefined8 uVar1;
  undefined8 local_18 [2];
  
  FUN_180001470(param_1 + 8);
  if (*(int *)(param_1 + 0x44) == 0) {
    (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
    uVar1 = 0;
  }
  else {
    FUN_18001ef2c(local_18);
    if (param_2 != 0) {
      (**(code **)(*(longlong *)(param_1 + 0x50) + 0x70))((longlong *)(param_1 + 0x50),param_2,0x40)
      ;
    }
    if ((param_4 != 0) && (param_5 != 0)) {
      (**(code **)(*(longlong *)(param_1 + 0x50) + 0x70))((longlong *)(param_1 + 0x50),param_4);
    }
    FUN_18001ef94();
    *(int *)(param_1 + 0x40) = *(int *)(param_1 + 0x40) + 1;
    (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
    uVar1 = 1;
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 18001b280 (24 bytes) name=Unwind@18001b280

void Unwind_18001b280(void)

{
  thunk_FUN_18001ef94();
  return;
}


==================================================================

### EXPORT FUNC 18001b2a0 (61 bytes) name=Catch@18001b2a0

undefined * Catch_18001b2a0(undefined8 param_1,longlong param_2)

{
  longlong lVar1;
  
  *(undefined8 *)(param_2 + 0x38) = *(undefined8 *)(param_2 + 0x28);
  lVar1 = *(longlong *)(param_2 + 0x50);
  FUN_18001b2e0(lVar1);
  (**(code **)(*(longlong *)(lVar1 + 8) + 0x28))();
  return &DAT_18001b258;
}


==================================================================

### EXPORT FUNC 18001b2e0 (178 bytes) name=FUN_18001b2e0

void FUN_18001b2e0(longlong param_1)

{
  longlong *plVar1;
  
  FUN_180001470(param_1 + 8);
  if (*(int *)(param_1 + 0x48) != 0) {
    *(undefined4 *)(param_1 + 0x4d8) = 0;
    SetEvent(*(HANDLE *)(param_1 + 0x4e8));
    if (*(longlong *)(param_1 + 0x4e0) != 0) {
      WaitForSingleObject(*(HANDLE *)(*(longlong *)(param_1 + 0x4e0) + 0x58),0xffffffff);
      plVar1 = *(longlong **)(param_1 + 0x4e0);
      if (plVar1 != (longlong *)0x0) {
        (**(code **)(*plVar1 + 8))(plVar1,1);
      }
      *(undefined8 *)(param_1 + 0x4e0) = 0;
    }
    CloseHandle(*(HANDLE *)(param_1 + 0x4e8));
    *(undefined4 *)(param_1 + 0x48) = 0;
  }
  if (*(int *)(param_1 + 0x44) != 0) {
    *(undefined4 *)(param_1 + 0x44) = 0;
  }
  (**(code **)(*(longlong *)(param_1 + 0x50) + 0x98))(param_1 + 0x50);
  *(undefined4 *)(param_1 + 0x40) = 0;
                    /* WARNING: Could not recover jumptable at 0x00018001b38e. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
  return;
}


==================================================================

### EXPORT FUNC 18001b3a0 (913 bytes) name=FUN_18001b3a0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined4 FUN_18001b3a0(longlong param_1,short *param_2,longlong param_3)

{
  wchar_t *pwVar1;
  int *piVar2;
  short sVar3;
  int iVar4;
  undefined4 uVar5;
  undefined **ppuVar6;
  longlong lVar7;
  HMODULE pHVar8;
  longlong *plVar9;
  wchar_t *pwVar10;
  short *psVar11;
  undefined1 auStackY_458 [32];
  wchar_t *local_418;
  short *local_410;
  longlong local_408;
  longlong local_400;
  __time64_t local_3f8 [6];
  CDialog local_3c8 [912];
  ulonglong local_38;
  
  local_3f8[1] = 0xfffffffffffffffe;
  local_38 = DAT_18006cea0 ^ (ulonglong)auStackY_458;
  local_408 = param_1;
  FUN_180001470(param_1 + 8);
  if ((*(int *)(param_1 + 0x44) != 0) || (*(int *)(param_1 + 0x48) != 0)) {
    (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
    return 0;
  }
  ppuVar6 = FUN_18001fcc0();
  if (ppuVar6 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar7 = (**(code **)(*ppuVar6 + 0x18))();
  local_418 = (wchar_t *)(lVar7 + 0x18);
  if (param_2 == (short *)0x0) {
    iVar4 = 0;
  }
  else {
    if (((ulonglong)param_2 & 0xffffffffffff0000) == 0) {
      pHVar8 = (HMODULE)FUN_18001fcac();
      if (pHVar8 != (HMODULE)0x0) {
        FUN_18000af50((longlong *)&local_418,pHVar8,(uint)param_2 & 0xffff);
      }
      goto LAB_18001b49c;
    }
    lVar7 = -1;
    psVar11 = param_2;
    do {
      if (lVar7 == 0) break;
      lVar7 = lVar7 + -1;
      sVar3 = *psVar11;
      psVar11 = psVar11 + 1;
    } while (sVar3 != 0);
    iVar4 = ~(uint)lVar7 - 1;
  }
  FUN_18000b480((longlong *)&local_418,param_2,iVar4);
LAB_18001b49c:
  if (*(int *)(local_418 + -8) == 0) {
    local_3f8[0] = _time64((__time64_t *)0x0);
    FUN_18001ab70(local_3f8,(longlong *)&local_410,L"%Y-%m-%d %H-%M-%S");
    FUN_18001f670(local_3c8,0,&DAT_18006ea90,local_410,6,
                  u_Magnity_Temperature_Stream_Files_18006eaa0,(CWnd *)0x0,0);
    lVar7 = FUN_18001f450(local_3c8);
    if (lVar7 != 1) {
      (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
      FUN_18001f5c8((CWnd *)local_3c8);
      LOCK();
      piVar2 = (int *)(local_410 + -4);
      iVar4 = *piVar2;
      *piVar2 = *piVar2 + -1;
      UNLOCK();
      if (iVar4 + -1 < 1) {
        (**(code **)(**(longlong **)(local_410 + -0xc) + 8))();
      }
      LOCK();
      pwVar1 = local_418 + -4;
      iVar4 = *(int *)pwVar1;
      *(int *)pwVar1 = *(int *)pwVar1 + -1;
      UNLOCK();
      if (iVar4 + -1 < 1) {
        (**(code **)(**(longlong **)(local_418 + -0xc) + 8))();
      }
      return 0;
    }
    plVar9 = FUN_18001f980((longlong)local_3c8,&local_400);
    FUN_18000b390((longlong *)&local_418,plVar9);
    LOCK();
    piVar2 = (int *)(local_400 + -8);
    iVar4 = *piVar2;
    *piVar2 = *piVar2 + -1;
    UNLOCK();
    if (iVar4 + -1 < 1) {
      (**(code **)(**(longlong **)(local_400 + -0x18) + 8))();
    }
    pwVar1 = local_418;
    if (((*(int *)(local_418 + -8) < 1) ||
        (pwVar10 = wcschr(local_418,L'.'), pwVar10 == (wchar_t *)0x0)) ||
       ((int)((longlong)pwVar10 - (longlong)pwVar1 >> 1) == -1)) {
      FUN_18001aaa0((longlong *)&local_418,L".mgs");
    }
    FUN_18001f5c8((CWnd *)local_3c8);
    LOCK();
    piVar2 = (int *)(local_410 + -4);
    iVar4 = *piVar2;
    *piVar2 = *piVar2 + -1;
    UNLOCK();
    if (iVar4 + -1 < 1) {
      (**(code **)(**(longlong **)(local_410 + -0xc) + 8))();
    }
  }
  pwVar1 = local_418;
  iVar4 = (**(code **)(*(longlong *)(param_1 + 0x50) + 0x40))(param_1 + 0x50,local_418,0x1021,0);
  if (iVar4 == 0) {
    (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
    MessageBoxW((HWND)0x0,L"Failed to open file.",L"Error",0x10);
    LOCK();
    pwVar10 = pwVar1 + -4;
    iVar4 = *(int *)pwVar10;
    *(int *)pwVar10 = *(int *)pwVar10 + -1;
    UNLOCK();
    if (iVar4 + -1 < 1) {
      (**(code **)(**(longlong **)(pwVar1 + -0xc) + 8))();
    }
    uVar5 = 0;
  }
  else {
    FUN_18001ef2c(local_3f8 + 2);
    if (param_3 != 0) {
      (**(code **)(*(longlong *)(param_1 + 0x50) + 0x70))(param_1 + 0x50,param_3,0x418);
    }
    FUN_18001ef94();
    *(undefined4 *)(param_1 + 0x40) = 0;
    *(undefined4 *)(param_1 + 0x44) = 1;
    (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
    uVar5 = *(undefined4 *)(param_1 + 0x44);
    LOCK();
    pwVar1 = local_418 + -4;
    iVar4 = *(int *)pwVar1;
    *(int *)pwVar1 = *(int *)pwVar1 + -1;
    UNLOCK();
    if (iVar4 + -1 < 1) {
      (**(code **)(**(longlong **)(local_418 + -0xc) + 8))();
    }
  }
  return uVar5;
}


==================================================================

### EXPORT FUNC 18001b760 (24 bytes) name=Unwind@18001b760

void Unwind_18001b760(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 18001b780 (24 bytes) name=Unwind@18001b780

void Unwind_18001b780(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 18001b7a0 (24 bytes) name=Unwind@18001b7a0

void Unwind_18001b7a0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x48));
  return;
}


==================================================================

### EXPORT FUNC 18001b7c0 (27 bytes) name=Unwind@18001b7c0

void Unwind_18001b7c0(undefined8 param_1,longlong param_2)

{
  FUN_18001f5c8((CWnd *)(param_2 + 0x90));
  return;
}


==================================================================

### EXPORT FUNC 18001b7e0 (24 bytes) name=Unwind@18001b7e0

void Unwind_18001b7e0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x58));
  return;
}


==================================================================

### EXPORT FUNC 18001b800 (24 bytes) name=Unwind@18001b800

void Unwind_18001b800(void)

{
  thunk_FUN_18001ef94();
  return;
}


==================================================================

### EXPORT FUNC 18001b820 (69 bytes) name=Catch@18001b820

undefined * Catch_18001b820(undefined8 param_1,longlong param_2)

{
  longlong lVar1;
  
  *(undefined8 *)(param_2 + 0x78) = *(undefined8 *)(param_2 + 0x80);
  lVar1 = *(longlong *)(param_2 + 0x50);
  (**(code **)(*(longlong *)(lVar1 + 0x50) + 0x98))();
  (**(code **)(*(longlong *)(lVar1 + 8) + 0x28))();
  return &DAT_18001b6fd;
}


==================================================================

### EXPORT FUNC 18001b870 (838 bytes) name=FUN_18001b870

undefined4 FUN_18001b870(longlong param_1,longlong *param_2)

{
  int *piVar1;
  int iVar2;
  int iVar3;
  undefined4 uVar4;
  longlong lVar5;
  undefined **ppuVar6;
  longlong *plVar7;
  longlong local_res18;
  longlong local_res20;
  longlong local_98 [3];
  undefined8 local_80 [3];
  undefined1 local_68 [24];
  undefined8 local_50;
  undefined4 local_48;
  
  local_98[1] = 0xfffffffffffffffe;
  if (((*(int *)(param_1 + 0x44) == 0) && (*(int *)(param_1 + 0x48) == 0)) &&
     (*(int *)(*param_2 + -0x10) != 0)) {
    iVar3 = (**(code **)(*(longlong *)(param_1 + 0x50) + 0x40))(param_1 + 0x50,*param_2,0x30);
    if (iVar3 == 0) {
      lVar5 = *param_2;
      LOCK();
      piVar1 = (int *)(lVar5 + -8);
      iVar3 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
      if (iVar3 + -1 < 1) {
        (**(code **)(**(longlong **)(lVar5 + -0x18) + 8))();
      }
      uVar4 = 0;
    }
    else {
      FUN_18001ef2c(local_80);
      (**(code **)(*(longlong *)(param_1 + 0x50) + 0x68))(param_1 + 0x50,param_1 + 0x70,0x418);
      FUN_18001ef94();
      if ((((*(int *)(param_1 + 0x70) == 0x418) &&
           ((*(int *)(param_1 + 0x74) == 0x10200 || (*(int *)(param_1 + 0x74) == 0x10100)))) &&
          (iVar3 = *(int *)(param_1 + 0xcc), 0x4f < iVar3)) &&
         ((((iVar3 < 0x501 && (iVar2 = *(int *)(param_1 + 0xd0), 0x3b < iVar2)) &&
           ((iVar2 < 0x401 &&
            ((((0x417 < *(uint *)(param_1 + 0xc0) &&
               ((longlong)*(int *)(param_1 + 0xc4) == (longlong)(iVar2 * iVar3) * 2 + 0x40)) &&
              (-1 < *(int *)(param_1 + 200))) &&
             ((*(int *)(param_1 + 0xd4) != 0 && (0 < *(int *)(param_1 + 0xdc))))))))) &&
          (*(int *)(param_1 + 0xdc) < 0x3e9)))) {
        if (*(int *)(param_1 + 200) == 0) {
          lVar5 = (**(code **)(*(longlong *)(param_1 + 0x50) + 0x60))(param_1 + 0x50);
          *(int *)(param_1 + 200) =
               (int)((lVar5 - 0x418U) / (ulonglong)(longlong)*(int *)(param_1 + 0xc4));
        }
        if (0 < *(int *)(param_1 + 200)) {
          (**(code **)(*(longlong *)(param_1 + 0x50) + 0x68))(param_1 + 0x50,local_68,0x40);
          (**(code **)(*(longlong *)(param_1 + 0x50) + 0x50))(param_1 + 0x50,0xffffffffffffffc0,1);
          *(undefined8 *)(param_1 + 0x488) = local_50;
          *(undefined4 *)(param_1 + 0x490) = local_48;
          *(undefined4 *)(param_1 + 0x4ac) = local_48;
          *(undefined4 *)(param_1 + 0x48) = 1;
          local_res20 = *(longlong *)(param_1 + 0x78);
          ppuVar6 = FUN_18001fcc0();
          if (ppuVar6 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7fffbffb);
          }
          local_res18 = (**(code **)(*ppuVar6 + 0x18))(ppuVar6);
          local_res18 = local_res18 + 0x18;
          plVar7 = FUN_18001ab70(&local_res20,local_98,L"%Y-%m-%d %H:%M:%S");
          FUN_18001ad00(&local_res18,
                        L"Open stream file %s, create time %s, recorded  as %dfps, total play time %ds (50fps)"
                        ,*param_2,*plVar7);
          LOCK();
          piVar1 = (int *)(local_98[0] + -8);
          iVar3 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
          if (iVar3 + -1 < 1) {
            (**(code **)(**(longlong **)(local_98[0] + -0x18) + 8))();
          }
          LOCK();
          piVar1 = (int *)(local_res18 + -8);
          iVar3 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
          if (iVar3 + -1 < 1) {
            (**(code **)(**(longlong **)(local_res18 + -0x18) + 8))();
          }
        }
      }
      if (*(int *)(param_1 + 0x48) == 0) {
        (**(code **)(*(longlong *)(param_1 + 0x50) + 0x98))(param_1 + 0x50);
      }
      *(undefined4 *)(param_1 + 0x40) = 0;
      FUN_18001c190(param_1);
      uVar4 = *(undefined4 *)(param_1 + 0x48);
      lVar5 = *param_2;
      LOCK();
      piVar1 = (int *)(lVar5 + -8);
      iVar3 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
      if (iVar3 + -1 < 1) {
        (**(code **)(**(longlong **)(lVar5 + -0x18) + 8))();
      }
    }
  }
  else {
    lVar5 = *param_2;
    LOCK();
    piVar1 = (int *)(lVar5 + -8);
    iVar3 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar3 + -1 < 1) {
      (**(code **)(**(longlong **)(lVar5 + -0x18) + 8))();
    }
    uVar4 = 0;
  }
  return uVar4;
}


==================================================================

### EXPORT FUNC 18001bbd0 (27 bytes) name=Unwind@18001bbd0

void Unwind_18001bbd0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0(*(longlong **)(param_2 + 0xd8));
  return;
}


==================================================================

### EXPORT FUNC 18001bbf0 (24 bytes) name=Unwind@18001bbf0

void Unwind_18001bbf0(void)

{
  thunk_FUN_18001ef94();
  return;
}


==================================================================

### EXPORT FUNC 18001bc10 (57 bytes) name=Catch@18001bc10

undefined * Catch_18001bc10(undefined8 param_1,longlong param_2)

{
  *(undefined8 *)(param_2 + 0x50) = *(undefined8 *)(param_2 + 0x40);
  (**(code **)(*(longlong *)(*(longlong *)(param_2 + 0xd0) + 0x50) + 0x98))();
  return &DAT_18001bb88;
}


==================================================================

### EXPORT FUNC 18001bc50 (27 bytes) name=Unwind@18001bc50

void Unwind_18001bc50(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0xe0));
  return;
}


==================================================================

### EXPORT FUNC 18001bc70 (24 bytes) name=Unwind@18001bc70

void Unwind_18001bc70(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 18001bc90 (200 bytes) name=FUN_18001bc90

undefined8 FUN_18001bc90(void *param_1,undefined4 param_2,undefined8 param_3,longlong param_4)

{
  HANDLE pvVar1;
  CWinThread *pCVar2;
  
  if (((*(int *)((longlong)param_1 + 0x48) != 0) && (*(longlong *)((longlong)param_1 + 0x4e0) == 0))
     && (param_4 != 0)) {
    *(undefined4 *)((longlong)param_1 + 0x4c4) = param_2;
    *(longlong *)((longlong)param_1 + 0x4d0) = param_4;
    *(code **)((longlong)param_1 + 0x4c8) = FUN_18000a410;
    pvVar1 = CreateEventW((LPSECURITY_ATTRIBUTES)0x0,0,0,(LPCWSTR)0x0);
    *(HANDLE *)((longlong)param_1 + 0x4e8) = pvVar1;
    *(undefined4 *)((longlong)param_1 + 0x4d8) = 1;
    pCVar2 = AfxBeginThread(FUN_18001bd60,param_1,0,0,4,(_SECURITY_ATTRIBUTES *)0x0);
    *(CWinThread **)((longlong)param_1 + 0x4e0) = pCVar2;
    *(undefined4 *)(pCVar2 + 0x50) = 0;
    ResumeThread(*(HANDLE *)(*(longlong *)((longlong)param_1 + 0x4e0) + 0x58));
    return 1;
  }
  return 0;
}


==================================================================

### EXPORT FUNC 18001bd60 (547 bytes) name=FUN_18001bd60

undefined4 FUN_18001bd60(longlong param_1)

{
  undefined4 uVar1;
  int iVar2;
  int iVar3;
  int iVar4;
  int iVar5;
  undefined8 local_78 [2];
  int local_68;
  int local_64;
  undefined8 local_50;
  undefined4 local_48;
  undefined8 local_40;
  undefined8 local_38;
  undefined4 local_30;
  
  if (param_1 == 0) {
    uVar1 = 1;
  }
  else if (*(longlong *)(param_1 + 0x4c8) == 0) {
    uVar1 = 2;
  }
  else {
    iVar5 = *(int *)(param_1 + 0xc4) + -0x40;
LAB_18001bdc0:
    if ((*(int *)(param_1 + 0x4d8) != 0) && (*(int *)(param_1 + 0x48) != 0)) {
      WaitForSingleObject(*(HANDLE *)(param_1 + 0x4e8),*(DWORD *)(param_1 + 0x4b8));
      if (*(int *)(param_1 + 0x4d8) != 0) {
        if (*(int *)(param_1 + 0x4c0) == 0) goto LAB_18001be12;
        *(undefined4 *)(param_1 + 0x4c0) = 0;
        goto LAB_18001be1c;
      }
    }
LAB_18001bf69:
    uVar1 = 0;
  }
  return uVar1;
LAB_18001be12:
  if (*(int *)(param_1 + 0x4bc) == 0) {
LAB_18001be1c:
    FUN_180001470(param_1 + 8);
    if (*(int *)(param_1 + 200) <= *(int *)(param_1 + 0x40)) {
      if (*(int *)(param_1 + 0x4c) == 0) {
        (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
        goto LAB_18001bdc0;
      }
      FUN_18001bff0(param_1,0);
    }
    FUN_18001ef2c(local_78);
    iVar2 = (**(code **)(*(longlong *)(param_1 + 0x50) + 0x68))(param_1 + 0x50,&local_68,0x40);
    iVar3 = (**(code **)(*(longlong *)(param_1 + 0x50) + 0x68))
                      (param_1 + 0x50,*(undefined8 *)(param_1 + 0x4d0),iVar5);
    *(int *)(param_1 + 0x40) = *(int *)(param_1 + 0x40) + 1;
    iVar4 = *(int *)(param_1 + 0x4b4);
    if (*(int *)(param_1 + 200) - *(int *)(param_1 + 0x40) <= iVar4) {
      iVar4 = *(int *)(param_1 + 200) - *(int *)(param_1 + 0x40);
    }
    if (0 < iVar4) {
      (**(code **)(*(longlong *)(param_1 + 0x50) + 0x50))
                (param_1 + 0x50,(longlong)*(int *)(param_1 + 0xc4) * (longlong)iVar4,1);
      *(int *)(param_1 + 0x40) = *(int *)(param_1 + 0x40) + iVar4;
    }
    FUN_18001ef94();
    *(undefined8 *)(param_1 + 0x488) = local_50;
    *(undefined4 *)(param_1 + 0x490) = local_48;
    *(undefined8 *)(param_1 + 0x498) = local_40;
    *(undefined8 *)(param_1 + 0x4a0) = local_38;
    *(undefined4 *)(param_1 + 0x4a8) = local_30;
    (**(code **)(*(longlong *)(param_1 + 8) + 0x28))(param_1 + 8);
    if ((((iVar2 != 0x40) || (iVar3 != iVar5)) || (local_68 != 0x40)) || (local_64 != 0x10100))
    goto LAB_18001bf69;
    (**(code **)(param_1 + 0x4c8))
              (*(undefined4 *)(param_1 + 0x4c4),*(undefined8 *)(param_1 + 0x4d0),&local_68);
  }
  goto LAB_18001bdc0;
}


==================================================================

### EXPORT FUNC 18001bf90 (24 bytes) name=Unwind@18001bf90

void Unwind_18001bf90(void)

{
  thunk_FUN_18001ef94();
  return;
}


==================================================================

### EXPORT FUNC 18001bfb0 (54 bytes) name=Catch@18001bfb0

undefined * Catch_18001bfb0(undefined8 param_1,longlong param_2)

{
  *(undefined8 *)(param_2 + 0x38) = *(undefined8 *)(param_2 + 0x28);
  (**(code **)(*(longlong *)(*(longlong *)(param_2 + 0xb0) + 8) + 0x28))();
  return &DAT_18001bf64;
}


==================================================================

### EXPORT FUNC 18001bff0 (315 bytes) name=FUN_18001bff0

undefined4 FUN_18001bff0(longlong param_1,int param_2)

{
  longlong lVar1;
  int iVar2;
  undefined4 uVar3;
  longlong *plVar4;
  undefined8 uVar5;
  undefined8 local_58 [2];
  undefined1 local_48 [24];
  undefined8 local_30;
  undefined4 local_28;
  
  uVar5 = 0xfffffffffffffffe;
  uVar3 = 0;
  if (*(int *)(param_1 + 0x48) != 0) {
    FUN_180001470(param_1 + 8);
    FUN_18001ef2c(local_58);
    if (param_2 < 1) {
      (**(code **)(*(longlong *)(param_1 + 0x50) + 0x50))((longlong *)(param_1 + 0x50),0x418,0);
      *(undefined4 *)(param_1 + 0x40) = 0;
    }
    else {
      iVar2 = *(int *)(param_1 + 200) + -1;
      if (iVar2 <= param_2) {
        param_2 = iVar2;
      }
      lVar1 = *(longlong *)(param_1 + 0x50);
      (**(code **)(lVar1 + 0x50))
                ((longlong *)(param_1 + 0x50),
                 (longlong)*(int *)(param_1 + 0xc4) * (longlong)param_2 + 0x418,0,lVar1,uVar5);
      *(int *)(param_1 + 0x40) = param_2;
    }
    plVar4 = (longlong *)(param_1 + 0x50);
    (**(code **)(*plVar4 + 0x68))(plVar4,local_48,0x40);
    (**(code **)(*plVar4 + 0x50))(plVar4,0xffffffffffffffc0,1);
    *(undefined8 *)(param_1 + 0x488) = local_30;
    *(undefined4 *)(param_1 + 0x490) = local_28;
    FUN_18001ef94();
    (**(code **)(*(longlong *)(param_1 + 8) + 0x28))();
    if ((*(int *)(param_1 + 0x48) != 0) && (*(int *)(param_1 + 0x40) < *(int *)(param_1 + 200))) {
      if (*(int *)(param_1 + 0x4bc) != 0) {
        *(undefined4 *)(param_1 + 0x4c0) = 1;
      }
      SetEvent(*(HANDLE *)(param_1 + 0x4e8));
    }
    uVar3 = 1;
  }
  return uVar3;
}


==================================================================

### EXPORT FUNC 18001c140 (24 bytes) name=Unwind@18001c140

void Unwind_18001c140(void)

{
  thunk_FUN_18001ef94();
  return;
}


==================================================================

### EXPORT FUNC 18001c160 (36 bytes) name=Catch@18001c160

undefined * Catch_18001c160(undefined8 param_1,longlong param_2)

{
  *(undefined8 *)(param_2 + 0x38) = *(undefined8 *)(param_2 + 0x28);
  return &DAT_18001c0cd;
}


==================================================================

### EXPORT FUNC 18001c190 (137 bytes) name=FUN_18001c190

void FUN_18001c190(longlong param_1)

{
  int iVar1;
  int iVar2;
  int iVar3;
  
  if (*(int *)(param_1 + 0x48) != 0) {
    *(undefined4 *)(param_1 + 0x4b0) = 4;
    iVar2 = (int)(float)*(int *)(param_1 + 0xdc);
    iVar3 = 1;
    if ((iVar2 < 1) || (iVar3 = iVar2, 0 < iVar2)) {
      iVar1 = (int)(1000 / (longlong)iVar3);
      iVar2 = iVar3;
      if (iVar1 < 1) {
        iVar1 = 1;
      }
    }
    else {
      iVar1 = 1000;
    }
    *(undefined4 *)(param_1 + 0x4b4) = 0;
    if (iVar1 < 10) {
      *(int *)(param_1 + 0x4b4) = (iVar1 + 9) / iVar1 + -1;
    }
    *(int *)(param_1 + 0x4b8) = ((*(int *)(param_1 + 0x4b4) + 1) * 1000) / iVar2;
  }
  return;
}


==================================================================

### EXPORT FUNC 18001c220 (322 bytes) name=FUN_18001c220

undefined8 * FUN_18001c220(undefined8 *param_1)

{
  undefined8 *puVar1;
  undefined8 uVar2;
  HANDLE pvVar3;
  
  *param_1 = CNetComm::vftable;
  puVar1 = param_1 + 0x10;
  FUN_18001ec00(puVar1);
  *puVar1 = CCriticalSection::vftable;
  uVar2 = FUN_1800013a0((longlong)puVar1);
  if ((int)uVar2 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed6c();
  }
  puVar1 = param_1 + 0x17;
  FUN_18001ec00(puVar1);
  *puVar1 = CCriticalSection::vftable;
  uVar2 = FUN_1800013a0((longlong)puVar1);
  if ((int)uVar2 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed6c();
  }
  *(undefined4 *)(param_1 + 1) = 0;
  *(undefined4 *)((longlong)param_1 + 0xc) = 0;
  *(undefined4 *)(param_1 + 2) = 0;
  *(undefined4 *)((longlong)param_1 + 0x14) = 0;
  *(undefined4 *)(param_1 + 3) = 0;
  *(undefined4 *)((longlong)param_1 + 0x1c) = 0;
  param_1[4] = 0;
  *(undefined4 *)(param_1 + 5) = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  FUN_1800357d0(param_1 + 8,0,0x38);
  *(undefined4 *)(param_1 + 0xf) = 0;
  param_1[0x59f] = 0;
  param_1[0x5a0] = 0;
  *(undefined4 *)(param_1 + 0x5a1) = 0;
  *(undefined4 *)((longlong)param_1 + 0x2d0c) = 0;
  pvVar3 = CreateEventW((LPSECURITY_ATTRIBUTES)0x0,0,0,(LPCWSTR)0x0);
  param_1[0x5a2] = pvVar3;
  FUN_1800357d0(param_1 + 0x1e,0,0x2c00);
  *(undefined4 *)(param_1 + 0x59e) = 0;
  *(undefined4 *)(param_1 + 0x5a3) = 0;
  param_1[0x5a4] = 0;
  param_1[0x5a5] = 0;
  param_1[0x5a6] = 0;
  param_1[0x5a7] = 0;
  usb_init();
  return param_1;
}


==================================================================

### EXPORT FUNC 18001c370 (24 bytes) name=Unwind@18001c370

void Unwind_18001c370(undefined8 param_1,longlong param_2)

{
  CSyncObject::~CSyncObject(*(CSyncObject **)(param_2 + 0x48));
  return;
}


==================================================================

### EXPORT FUNC 18001c390 (31 bytes) name=Unwind@18001c390

void Unwind_18001c390(undefined8 param_1,longlong param_2)

{
  FUN_180001440((CSyncObject *)(*(longlong *)(param_2 + 0x40) + 0x80));
  return;
}


==================================================================

### EXPORT FUNC 18001c3b0 (24 bytes) name=Unwind@18001c3b0

void Unwind_18001c3b0(undefined8 param_1,longlong param_2)

{
  CSyncObject::~CSyncObject(*(CSyncObject **)(param_2 + 0x48));
  return;
}


==================================================================

### EXPORT FUNC 18001c3d0 (47 bytes) name=FUN_18001c3d0

undefined8 * FUN_18001c3d0(undefined8 *param_1,uint param_2)

{
  FUN_18001c400(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18001c400 (325 bytes) name=FUN_18001c400

void FUN_18001c400(undefined8 *param_1)

{
  int *piVar1;
  uint uVar2;
  
  *param_1 = CNetComm::vftable;
  uVar2 = 0;
  *(undefined4 *)(param_1 + 2) = 0;
  if (*(int *)(param_1 + 3) != 0) {
    FUN_18001d520((longlong)param_1);
  }
  if (*(int *)((longlong)param_1 + 0x14) != 0) {
    if (*(int *)(param_1 + 3) != 0) {
      FUN_18001d520((longlong)param_1);
    }
    FUN_180001470((longlong)(param_1 + 0x10));
    if (*(int *)(param_1 + 0x59e) != 0) {
      piVar1 = (int *)((longlong)param_1 + 0x13c);
      do {
        if (*piVar1 != 0) {
          *piVar1 = 0;
        }
        uVar2 = uVar2 + 1;
        piVar1 = piVar1 + 0x16;
      } while (uVar2 < *(uint *)(param_1 + 0x59e));
    }
    (**(code **)(param_1[0x10] + 0x28))(param_1 + 0x10);
    if ((HWND)param_1[4] != (HWND)0x0) {
      PostMessageW((HWND)param_1[4],0x111,0x83e9,0);
    }
    if (param_1[7] != 0) {
      usb_release_interface(param_1[7],0);
      usb_close(param_1[7]);
      param_1[7] = 0;
    }
    param_1[6] = 0;
    *(undefined4 *)((longlong)param_1 + 0x14) = 0;
  }
  *(undefined4 *)(param_1 + 0x59e) = 0;
  CloseHandle((HANDLE)param_1[0x5a2]);
  param_1[0x17] = CCriticalSection::vftable;
  DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x19));
  CSyncObject::~CSyncObject((CSyncObject *)(param_1 + 0x17));
  param_1[0x10] = CCriticalSection::vftable;
  DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x12));
  CSyncObject::~CSyncObject((CSyncObject *)(param_1 + 0x10));
  return;
}


==================================================================

### EXPORT FUNC 18001c550 (31 bytes) name=Unwind@18001c550

void Unwind_18001c550(undefined8 param_1,longlong param_2)

{
  FUN_180001440((CSyncObject *)(*(longlong *)(param_2 + 0x40) + 0x80));
  return;
}


==================================================================

### EXPORT FUNC 18001c570 (31 bytes) name=Unwind@18001c570

void Unwind_18001c570(undefined8 param_1,longlong param_2)

{
  FUN_180001440((CSyncObject *)(*(longlong *)(param_2 + 0x40) + 0xb8));
  return;
}


==================================================================

### EXPORT FUNC 18001c590 (223 bytes) name=FUN_18001c590

void FUN_18001c590(longlong param_1)

{
  int *piVar1;
  uint uVar2;
  
  uVar2 = 0;
  *(undefined4 *)(param_1 + 0x10) = 0;
  if (*(int *)(param_1 + 0x18) != 0) {
    FUN_18001d520(param_1);
  }
  if (*(int *)(param_1 + 0x14) != 0) {
    if (*(int *)(param_1 + 0x18) != 0) {
      FUN_18001d520(param_1);
    }
    FUN_180001470(param_1 + 0x80);
    if (*(int *)(param_1 + 0x2cf0) != 0) {
      piVar1 = (int *)(param_1 + 0x13c);
      do {
        if (*piVar1 != 0) {
          *piVar1 = 0;
        }
        uVar2 = uVar2 + 1;
        piVar1 = piVar1 + 0x16;
      } while (uVar2 < *(uint *)(param_1 + 0x2cf0));
    }
    (**(code **)(*(longlong *)(param_1 + 0x80) + 0x28))(param_1 + 0x80);
    if (*(HWND *)(param_1 + 0x20) != (HWND)0x0) {
      PostMessageW(*(HWND *)(param_1 + 0x20),0x111,0x83e9,0);
    }
    if (*(longlong *)(param_1 + 0x38) != 0) {
      usb_release_interface(*(longlong *)(param_1 + 0x38),0);
      usb_close(*(undefined8 *)(param_1 + 0x38));
      *(undefined8 *)(param_1 + 0x38) = 0;
    }
    *(undefined8 *)(param_1 + 0x30) = 0;
    *(undefined4 *)(param_1 + 0x14) = 0;
  }
  *(undefined4 *)(param_1 + 0x2cf0) = 0;
  return;
}


==================================================================

### EXPORT FUNC 18001c670 (398 bytes) name=FUN_18001c670

undefined8 FUN_18001c670(longlong param_1,uint *param_2,uint param_3)

{
  int *piVar1;
  uint uVar2;
  int iVar3;
  undefined **ppuVar4;
  undefined4 uVar5;
  ulonglong uVar6;
  undefined8 uVar7;
  longlong local_res8;
  longlong local_res20;
  uint local_118;
  undefined8 local_114 [31];
  
  uVar5 = 2000;
  uVar6 = (ulonglong)param_3;
  uVar2 = usb_bulk_write(*(undefined8 *)(param_1 + 0x38),3,param_2,uVar6,2000);
  if (uVar2 == param_3) {
    if (*param_2 == 0x6bb6b671) {
      uVar5 = 120000;
    }
    uVar7 = 0x100;
    iVar3 = usb_bulk_read(*(undefined8 *)(param_1 + 0x38),0x82,&local_118,0x100,uVar5);
    if (iVar3 < 4) {
      ppuVar4 = FUN_18001fcc0();
      if (ppuVar4 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_18000b170(-0x7fffbffb);
      }
      local_res20 = (**(code **)(*ppuVar4 + 0x18))(ppuVar4);
      local_res20 = local_res20 + 0x18;
      FUN_18001ad00(&local_res20,L"cmd=0X%X, ack time out.",(ulonglong)*param_2,uVar7);
      LOCK();
      piVar1 = (int *)(local_res20 + -8);
      iVar3 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
      if (iVar3 + -1 < 1) {
        (**(code **)(**(longlong **)(local_res20 + -0x18) + 8))();
      }
      uVar7 = 0;
    }
    else {
      FUN_18001cf20(param_1,local_118,local_114,(ulonglong)(iVar3 - 4));
      uVar7 = 1;
    }
  }
  else {
    ppuVar4 = FUN_18001fcc0();
    if (ppuVar4 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7fffbffb);
    }
    local_res8 = (**(code **)(*ppuVar4 + 0x18))(ppuVar4);
    local_res8 = local_res8 + 0x18;
    FUN_18001ad00(&local_res8,L"usb_bulk_write() fail, cmd=0X%X.",(ulonglong)*param_2,uVar6);
    LOCK();
    piVar1 = (int *)(local_res8 + -8);
    iVar3 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar3 + -1 < 1) {
      (**(code **)(**(longlong **)(local_res8 + -0x18) + 8))();
    }
    uVar7 = 0;
  }
  return uVar7;
}


==================================================================

### EXPORT FUNC 18001c800 (27 bytes) name=Unwind@18001c800

void Unwind_18001c800(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x160));
  return;
}


==================================================================

### EXPORT FUNC 18001c820 (27 bytes) name=Unwind@18001c820

void Unwind_18001c820(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x178));
  return;
}


==================================================================

### EXPORT FUNC 18001c840 (183 bytes) name=FUN_18001c840

void FUN_18001c840(longlong param_1)

{
  int *piVar1;
  uint uVar2;
  
  if (*(int *)(param_1 + 0x18) != 0) {
    FUN_18001d520(param_1);
  }
  FUN_180001470(param_1 + 0x80);
  uVar2 = 0;
  if (*(int *)(param_1 + 0x2cf0) != 0) {
    piVar1 = (int *)(param_1 + 0x13c);
    do {
      if (*piVar1 != 0) {
        *piVar1 = 0;
      }
      uVar2 = uVar2 + 1;
      piVar1 = piVar1 + 0x16;
    } while (uVar2 < *(uint *)(param_1 + 0x2cf0));
  }
  (**(code **)(*(longlong *)(param_1 + 0x80) + 0x28))(param_1 + 0x80);
  if (*(HWND *)(param_1 + 0x20) != (HWND)0x0) {
    PostMessageW(*(HWND *)(param_1 + 0x20),0x111,0x83e9,0);
  }
  if (*(longlong *)(param_1 + 0x38) != 0) {
    usb_release_interface(*(longlong *)(param_1 + 0x38),0);
    usb_close(*(undefined8 *)(param_1 + 0x38));
    *(undefined8 *)(param_1 + 0x38) = 0;
  }
  *(undefined4 *)(param_1 + 0x14) = 0;
  *(undefined8 *)(param_1 + 0x30) = 0;
  return;
}


==================================================================

### EXPORT FUNC 18001c900 (912 bytes) name=FUN_18001c900

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8 FUN_18001c900(longlong param_1)

{
  int *piVar1;
  char *_Dst;
  int iVar2;
  uint uVar3;
  undefined8 *puVar4;
  bool bVar5;
  undefined **ppuVar6;
  undefined8 *puVar7;
  undefined8 uVar8;
  longlong lVar9;
  longlong *plVar10;
  int iVar11;
  int iVar12;
  int *piVar13;
  undefined1 auStackY_188 [32];
  longlong local_158;
  longlong local_150;
  undefined8 local_148;
  WCHAR local_138 [64];
  WCHAR local_b8 [64];
  ulonglong local_38;
  
  local_148 = 0xfffffffffffffffe;
  local_38 = DAT_18006cea0 ^ (ulonglong)auStackY_188;
  if (*(int *)(param_1 + 0x10) == 0) {
    SetLastError(0xe4ae0004);
    uVar8 = 0;
  }
  else if (*(int *)(param_1 + 0x1c) == 0) {
    bVar5 = false;
    FUN_180001470(param_1 + 0x80);
    iVar12 = *(int *)(param_1 + 0x2cf0);
    iVar11 = iVar12 + -1;
    if (-1 < iVar11) {
      piVar13 = (int *)((longlong)iVar11 * 0x58 + 0x140 + param_1);
      do {
        *piVar13 = *piVar13 + -1;
        if (*piVar13 == 0) {
          ppuVar6 = FUN_18001fcc0();
          if (ppuVar6 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7fffbffb);
          }
          local_158 = (**(code **)(*ppuVar6 + 0x18))();
          local_158 = local_158 + 0x18;
          uVar8 = 0xffffffff;
          MultiByteToWideChar(0,0,(LPCSTR)((longlong)iVar11 * 0x58 + 0xfc + param_1),-1,local_138,
                              0x40);
          FUN_18001ad00(&local_158,L"%s leaved.",local_138,uVar8);
          if (iVar12 < *(int *)(param_1 + 0x2cf0)) {
            memcpy((void *)((longlong)iVar11 * 0x58 + 0xf0 + param_1),
                   (void *)((longlong)iVar12 * 0x58 + 0xf0 + param_1),
                   (ulonglong)((*(int *)(param_1 + 0x2cf0) - iVar11) - 1) * 0x58);
          }
          *(int *)(param_1 + 0x2cf0) = *(int *)(param_1 + 0x2cf0) + -1;
          bVar5 = true;
          LOCK();
          piVar1 = (int *)(local_158 + -8);
          iVar2 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
          if (iVar2 + -1 < 1) {
            (**(code **)(**(longlong **)(local_158 + -0x18) + 8))();
          }
        }
        iVar12 = iVar12 + -1;
        piVar13 = piVar13 + -0x16;
        iVar11 = iVar11 + -1;
      } while (-1 < iVar11);
    }
    usb_find_busses();
    usb_find_devices();
    for (puVar7 = (undefined8 *)usb_get_busses(); puVar7 != (undefined8 *)0x0;
        puVar7 = (undefined8 *)*puVar7) {
      for (puVar4 = (undefined8 *)puVar7[0x42]; puVar4 != (undefined8 *)0x0;
          puVar4 = (undefined8 *)*puVar4) {
        if ((*(short *)(puVar4 + 0x44) == -0x7cc4) && (*(short *)((longlong)puVar4 + 0x222) == 1)) {
          uVar3 = *(uint *)(param_1 + 0x2cf0);
          iVar12 = uVar3 - 1;
          lVar9 = (longlong)iVar12;
          if (-1 < iVar12) {
            plVar10 = (longlong *)(lVar9 * 0x58 + 0xf0 + param_1);
            do {
              if ((undefined8 *)*plVar10 == puVar4) {
                *(undefined4 *)((longlong)iVar12 * 0x58 + 0x140 + param_1) = 5;
                goto LAB_18001cc04;
              }
              iVar12 = iVar12 + -1;
              plVar10 = plVar10 + -0xb;
              lVar9 = lVar9 + -1;
            } while (-1 < lVar9);
          }
          if (uVar3 < 0x80) {
            lVar9 = (ulonglong)uVar3 * 0x58;
            *(undefined8 **)(lVar9 + 0xf0 + param_1) = puVar4;
            *(undefined4 *)(lVar9 + 0xf8 + param_1) = 0xffffffff;
            _Dst = (char *)(lVar9 + 0xfc + param_1);
            strcpy_s(_Dst,0x40,(char *)(puVar4 + 2));
            *(undefined4 *)(lVar9 + 0x13c + param_1) = 0;
            *(undefined4 *)(lVar9 + 0x140 + param_1) = 5;
            *(int *)(param_1 + 0x2cf0) = *(int *)(param_1 + 0x2cf0) + 1;
            ppuVar6 = FUN_18001fcc0();
            if (ppuVar6 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
              FUN_18000b170(-0x7fffbffb);
            }
            local_150 = (**(code **)(*ppuVar6 + 0x18))();
            local_150 = local_150 + 0x18;
            uVar8 = 0xffffffff;
            MultiByteToWideChar(0,0,_Dst,-1,local_b8,0x40);
            FUN_18001ad00(&local_150,L"Found camera %s.",local_b8,uVar8);
            bVar5 = true;
            LOCK();
            piVar13 = (int *)(local_150 + -8);
            iVar12 = *piVar13;
            *piVar13 = *piVar13 + -1;
            UNLOCK();
            if (iVar12 + -1 < 1) {
              (**(code **)(**(longlong **)(local_150 + -0x18) + 8))();
            }
          }
        }
LAB_18001cc04:
      }
    }
    (**(code **)(*(longlong *)(param_1 + 0x80) + 0x28))(param_1 + 0x80);
    if ((bVar5) && (*(HWND *)(param_1 + 0x20) != (HWND)0x0)) {
      PostMessageW(*(HWND *)(param_1 + 0x20),0x111,0x83ea,0);
    }
    uVar8 = 1;
  }
  else {
    uVar8 = 0;
  }
  return uVar8;
}


==================================================================

### EXPORT FUNC 18001cca0 (24 bytes) name=Unwind@18001cca0

void Unwind_18001cca0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 18001ccc0 (24 bytes) name=Unwind@18001ccc0

void Unwind_18001ccc0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x38));
  return;
}


==================================================================

### EXPORT FUNC 18001cce0 (536 bytes) name=FUN_18001cce0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined4 FUN_18001cce0(longlong param_1,uint param_2)

{
  int *piVar1;
  int iVar2;
  DWORD DVar3;
  undefined4 uVar4;
  longlong lVar5;
  undefined **ppuVar6;
  longlong lVar7;
  undefined8 uVar8;
  undefined1 auStackY_268 [32];
  longlong local_238 [2];
  WCHAR local_228 [264];
  ulonglong local_18;
  
  local_238[1] = 0xfffffffffffffffe;
  local_18 = DAT_18006cea0 ^ (ulonglong)auStackY_268;
  if (*(int *)(param_1 + 0x14) == 0) {
    FUN_180001470(param_1 + 0x80);
    if (param_2 < *(uint *)(param_1 + 0x2cf0)) {
      lVar7 = (ulonglong)param_2 * 0x58;
      lVar5 = usb_open(*(undefined8 *)(lVar7 + 0xf0 + param_1));
      *(longlong *)(param_1 + 0x38) = lVar5;
      if (lVar5 != 0) {
        *(undefined8 *)(param_1 + 0x30) = *(undefined8 *)(lVar7 + 0xf0 + param_1);
        iVar2 = usb_set_configuration(lVar5,2);
        if ((iVar2 < 0) &&
           (iVar2 = usb_set_configuration(*(undefined8 *)(param_1 + 0x38),1), iVar2 < 0)) {
          usb_close(*(undefined8 *)(param_1 + 0x38));
          (**(code **)(*(longlong *)(param_1 + 0x80) + 0x28))(param_1 + 0x80);
          SetLastError(0xe4ae0007);
          return 0;
        }
        iVar2 = usb_claim_interface(*(undefined8 *)(param_1 + 0x38),0);
        if (iVar2 < 0) {
          usb_close(*(undefined8 *)(param_1 + 0x38));
          (**(code **)(*(longlong *)(param_1 + 0x80) + 0x28))(param_1 + 0x80);
          SetLastError(0xe4ae0007);
          return 0;
        }
        *(undefined4 *)(lVar7 + 0x13c + param_1) = 1;
        DVar3 = GetTickCount();
        *(DWORD *)(param_1 + 0x78) = DVar3;
        *(undefined4 *)(param_1 + 0x14) = 1;
        ppuVar6 = FUN_18001fcc0();
        if (ppuVar6 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
          FUN_18000b170(-0x7fffbffb);
        }
        local_238[0] = (**(code **)(*ppuVar6 + 0x18))(ppuVar6);
        local_238[0] = local_238[0] + 0x18;
        uVar8 = 0xffffffff;
        MultiByteToWideChar(0,0,(LPCSTR)(lVar7 + 0xfc + param_1),-1,local_228,0x104);
        FUN_18001ad00(local_238,L"Connected to %s.",local_228,uVar8);
        LOCK();
        piVar1 = (int *)(local_238[0] + -8);
        iVar2 = *piVar1;
        *piVar1 = *piVar1 + -1;
        UNLOCK();
        if (iVar2 + -1 < 1) {
          (**(code **)(**(longlong **)(local_238[0] + -0x18) + 8))();
        }
      }
      (**(code **)(*(longlong *)(param_1 + 0x80) + 0x28))(param_1 + 0x80);
      uVar4 = *(undefined4 *)(param_1 + 0x14);
    }
    else {
      (**(code **)(*(longlong *)(param_1 + 0x80) + 0x28))(param_1 + 0x80);
      SetLastError(0xe4ae0001);
      uVar4 = 0;
    }
  }
  else {
    SetLastError(0xe4ae000a);
    uVar4 = 0;
  }
  return uVar4;
}


==================================================================

### EXPORT FUNC 18001cf00 (24 bytes) name=Unwind@18001cf00

void Unwind_18001cf00(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 18001cf20 (877 bytes) name=FUN_18001cf20

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

void FUN_18001cf20(longlong param_1,uint param_2,undefined8 *param_3,ulonglong param_4)

{
  int *piVar1;
  longlong *plVar2;
  undefined **ppuVar3;
  longlong lVar4;
  uint uVar5;
  uint *_Src;
  uint uVar6;
  uint *puVar7;
  int iVar8;
  bool bVar9;
  undefined1 auStack_d8 [32];
  longlong local_b8 [2];
  undefined1 local_a8 [96];
  ulonglong local_48;
  
  local_b8[1] = 0xfffffffffffffffe;
  local_48 = DAT_18006cea0 ^ (ulonglong)auStack_d8;
  uVar6 = (uint)param_4;
  switch(param_2) {
  case 0x5bb5b55b:
    if ((param_3 != (undefined8 *)0x0) && (0x37 < uVar6)) {
      *(undefined8 *)(param_1 + 0x2d40) = *param_3;
      *(undefined8 *)(param_1 + 0x2d48) = param_3[1];
      *(undefined8 *)(param_1 + 0x2d50) = param_3[2];
      *(undefined8 *)(param_1 + 0x2d58) = param_3[3];
      *(undefined8 *)(param_1 + 0x2d60) = param_3[4];
      *(undefined8 *)(param_1 + 0x2d68) = param_3[5];
      *(undefined8 *)(param_1 + 0x2d70) = param_3[6];
      if ((*(int *)(param_1 + 0x2d50) != 0) && (*(int *)(param_1 + 0x2d54) != 0)) {
        memcpy((void *)(param_1 + 0x40),param_3,0x38);
        FUN_180001470(param_1 + 0x80);
        uVar6 = 0;
        iVar8 = 0;
        if (*(int *)(param_1 + 0x2cf0) != 0) {
          plVar2 = (longlong *)(param_1 + 0xf0);
          do {
            if (*plVar2 == *(longlong *)(param_1 + 0x30)) {
              lVar4 = (ulonglong)uVar6 * 0x58;
              *(undefined4 *)(lVar4 + 0xf8 + param_1) = *(undefined4 *)(param_1 + 0x40);
              FUN_180032bb0((char *)(lVar4 + 0xfc + param_1),(byte *)"Cube-%d",
                            (ulonglong)*(uint *)(param_1 + 0x40),param_4);
              iVar8 = *(int *)(lVar4 + 0xf8 + param_1);
              if ((iVar8 != 0) && (*(int *)(param_1 + 0x2cf0) != 1)) {
                puVar7 = (uint *)(param_1 + 0xf8);
                uVar6 = 1;
                do {
                  if (uVar6 < *(uint *)(param_1 + 0x2cf0)) {
                    _Src = puVar7 + 0x14;
                    uVar5 = uVar6;
                    do {
                      if (_Src[2] < *puVar7) {
                        memcpy(local_a8,puVar7 + -2,0x58);
                        memcpy(puVar7 + -2,_Src,0x58);
                        memcpy(_Src,local_a8,0x58);
                      }
                      uVar5 = uVar5 + 1;
                      _Src = _Src + 0x16;
                    } while (uVar5 < *(uint *)(param_1 + 0x2cf0));
                  }
                  puVar7 = puVar7 + 0x16;
                  bVar9 = uVar6 < *(int *)(param_1 + 0x2cf0) - 1U;
                  uVar6 = uVar6 + 1;
                } while (bVar9);
              }
              break;
            }
            uVar6 = uVar6 + 1;
            plVar2 = plVar2 + 0xb;
            iVar8 = 0;
          } while (uVar6 < *(uint *)(param_1 + 0x2cf0));
        }
        (**(code **)(*(longlong *)(param_1 + 0x80) + 0x28))(param_1 + 0x80);
        if ((iVar8 != 0) && (*(HWND *)(param_1 + 0x20) != (HWND)0x0)) {
          PostMessageW(*(HWND *)(param_1 + 0x20),0x111,0x83ea,0);
        }
      }
    }
    break;
  case 0x5bb5b55c:
    if ((param_3 != (undefined8 *)0x0) && (0x37 < uVar6)) {
      *(undefined8 *)(param_1 + 0x2d78) = *param_3;
      *(undefined8 *)(param_1 + 0x2d80) = param_3[1];
      *(undefined8 *)(param_1 + 0x2d88) = param_3[2];
      *(undefined8 *)(param_1 + 0x2d90) = param_3[3];
      *(undefined8 *)(param_1 + 0x2d98) = param_3[4];
      *(undefined8 *)(param_1 + 0x2da0) = param_3[5];
      *(undefined8 *)(param_1 + 0x2da8) = param_3[6];
    }
    break;
  case 0x5bb5b55d:
  case 0x5bb5b55e:
    if ((param_3 != (undefined8 *)0x0) && (0xf < uVar6)) {
      *(undefined8 *)(param_1 + 0x2db0) = *param_3;
      *(undefined8 *)(param_1 + 0x2db8) = param_3[1];
    }
    break;
  case 0x5bb5b55f:
  case 0x5bb5b560:
    break;
  default:
    ppuVar3 = FUN_18001fcc0();
    if (ppuVar3 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7fffbffb);
    }
    local_b8[0] = (**(code **)(*ppuVar3 + 0x18))(ppuVar3);
    local_b8[0] = local_b8[0] + 0x18;
    FUN_18001ad00(local_b8,L"Unkown cmd received: cmd=0X%X len=%d.",(ulonglong)param_2,
                  param_4 & 0xffffffff);
    LOCK();
    piVar1 = (int *)(local_b8[0] + -8);
    iVar8 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar8 + -1 < 1) {
      (**(code **)(**(longlong **)(local_b8[0] + -0x18) + 8))();
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18001d2b0 (24 bytes) name=Unwind@18001d2b0

void Unwind_18001d2b0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x20));
  return;
}


==================================================================

### EXPORT FUNC 18001d2d0 (578 bytes) name=FUN_18001d2d0

undefined8 FUN_18001d2d0(void *param_1,undefined4 param_2,longlong param_3)

{
  LPVOID pvVar1;
  LPVOID pvVar2;
  CWinThread *pCVar3;
  undefined8 uVar4;
  uint local_res8 [2];
  
  if (*(int *)((longlong)param_1 + 0x18) != 0) {
    SetLastError(0xe4ae000a);
    return 0;
  }
  if (param_3 != 0) {
    *(undefined4 *)((longlong)param_1 + 0x2d18) = param_2;
    *(undefined4 *)((longlong)param_1 + 8) = 0;
    *(undefined4 *)((longlong)param_1 + 0xc) = 0;
    if (*(LPVOID *)((longlong)param_1 + 0x2d20) != (LPVOID)0x0) {
      thunk_FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x2d20));
      *(undefined8 *)((longlong)param_1 + 0x2d20) = 0;
    }
    pvVar1 = thunk_FUN_18001eb74((ulonglong)*(uint *)((longlong)param_1 + 0x2d18) * 2 + 0xb0);
    *(LPVOID *)((longlong)param_1 + 0x2d20) = pvVar1;
    if (*(LPVOID *)((longlong)param_1 + 0x2d28) != (LPVOID)0x0) {
      thunk_FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x2d28));
      *(undefined8 *)((longlong)param_1 + 0x2d28) = 0;
    }
    pvVar2 = thunk_FUN_18001eb74((ulonglong)*(uint *)((longlong)param_1 + 0x2d18) + 0x4c);
    pvVar1 = *(LPVOID *)((longlong)param_1 + 0x2d20);
    *(LPVOID *)((longlong)param_1 + 0x2d28) = pvVar2;
    if ((pvVar1 == (LPVOID)0x0) || (pvVar2 == (LPVOID)0x0)) {
      if (pvVar1 != (LPVOID)0x0) {
        thunk_FUN_180034a70(pvVar1);
        *(undefined8 *)((longlong)param_1 + 0x2d20) = 0;
      }
      if (*(LPVOID *)((longlong)param_1 + 0x2d28) != (LPVOID)0x0) {
        thunk_FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x2d28));
        *(undefined8 *)((longlong)param_1 + 0x2d28) = 0;
      }
      SetLastError(0xe4ae0002);
    }
    else {
      *(longlong *)((longlong)param_1 + 0x2d30) = param_3;
      *(code **)((longlong)param_1 + 0x2d38) = FUN_180009ee0;
      ResetEvent(*(HANDLE *)((longlong)param_1 + 0x2d10));
      *(undefined4 *)((longlong)param_1 + 0x2d0c) = 1;
      pCVar3 = AfxBeginThread(FUN_18001d610,param_1,-1,0,4,(_SECURITY_ATTRIBUTES *)0x0);
      *(CWinThread **)((longlong)param_1 + 0x2d00) = pCVar3;
      *(undefined4 *)(pCVar3 + 0x50) = 0;
      ResumeThread(*(HANDLE *)(*(longlong *)((longlong)param_1 + 0x2d00) + 0x58));
      *(undefined4 *)((longlong)param_1 + 0x2d08) = 1;
      pCVar3 = AfxBeginThread(FUN_18001d930,param_1,0,0,4,(_SECURITY_ATTRIBUTES *)0x0);
      *(CWinThread **)((longlong)param_1 + 0x2cf8) = pCVar3;
      *(undefined4 *)(pCVar3 + 0x50) = 0;
      ResumeThread(*(HANDLE *)(*(longlong *)((longlong)param_1 + 0x2cf8) + 0x58));
      Sleep(0x32);
      local_res8[0] = 0x6bb6b673;
      if (*(int *)((longlong)param_1 + 0x14) == 0) {
        SetLastError(0xe4ae0005);
      }
      else {
        uVar4 = FUN_18001c670((longlong)param_1,local_res8,4);
        if ((int)uVar4 != 0) {
          *(undefined4 *)((longlong)param_1 + 0x18) = 1;
          return 1;
        }
      }
      FUN_18001d520((longlong)param_1);
    }
    return 0;
  }
  SetLastError(0xe4ae0001);
  return 0;
}


==================================================================

### EXPORT FUNC 18001d520 (240 bytes) name=FUN_18001d520

void FUN_18001d520(longlong param_1)

{
  longlong *plVar1;
  uint local_res8 [2];
  
  if (*(int *)(param_1 + 0x14) != 0) {
    local_res8[0] = 0x6bb6b674;
    FUN_18001c670(param_1,local_res8,4);
  }
  *(undefined4 *)(param_1 + 0x2d08) = 0;
  if (*(longlong *)(param_1 + 0x2cf8) != 0) {
    WaitForSingleObject(*(HANDLE *)(*(longlong *)(param_1 + 0x2cf8) + 0x58),0xffffffff);
    plVar1 = *(longlong **)(param_1 + 0x2cf8);
    if (plVar1 != (longlong *)0x0) {
      (**(code **)(*plVar1 + 8))(plVar1,1);
    }
    *(undefined8 *)(param_1 + 0x2cf8) = 0;
  }
  *(undefined4 *)(param_1 + 0x2d0c) = 0;
  SetEvent(*(HANDLE *)(param_1 + 0x2d10));
  if (*(longlong *)(param_1 + 0x2d00) != 0) {
    WaitForSingleObject(*(HANDLE *)(*(longlong *)(param_1 + 0x2d00) + 0x58),0xffffffff);
    plVar1 = *(longlong **)(param_1 + 0x2d00);
    if (plVar1 != (longlong *)0x0) {
      (**(code **)(*plVar1 + 8))(plVar1,1);
    }
    *(undefined8 *)(param_1 + 0x2d00) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x2d20) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x2d20));
    *(undefined8 *)(param_1 + 0x2d20) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x2d28) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x2d28));
    *(undefined8 *)(param_1 + 0x2d28) = 0;
  }
  *(undefined4 *)(param_1 + 0x18) = 0;
  return;
}


==================================================================

### EXPORT FUNC 18001d610 (200 bytes) name=FUN_18001d610

undefined4 FUN_18001d610(longlong param_1)

{
  int iVar1;
  
  if (param_1 == 0) {
    return 1;
  }
  if (*(longlong *)(param_1 + 0x2d38) != 0) {
    iVar1 = *(int *)(param_1 + 0x2d0c);
    while ((iVar1 != 0 &&
           (WaitForSingleObject(*(HANDLE *)(param_1 + 0x2d10),0xffffffff),
           *(int *)(param_1 + 0x2d0c) != 0))) {
      FUN_180001470(param_1 + 0xb8);
      memcpy(*(void **)(param_1 + 0x2d30),*(void **)(param_1 + 0x2d28),
             (ulonglong)*(uint *)(param_1 + 0x2d18) + 0x4c);
      (**(code **)(*(longlong *)(param_1 + 0xb8) + 0x28))(param_1 + 0xb8);
      if (*(code **)(param_1 + 0x2d38) != (code *)0x0) {
        (**(code **)(param_1 + 0x2d38))(*(undefined4 *)(param_1 + 0x28));
      }
      iVar1 = *(int *)(param_1 + 0x2d0c);
    }
    return 0;
  }
  return 2;
}


==================================================================

### EXPORT FUNC 18001d6e0 (589 bytes) name=FUN_18001d6e0

undefined8 FUN_18001d6e0(longlong param_1,undefined8 *param_2,undefined8 *param_3,uint param_4)

{
  DWORD DVar1;
  DWORD DVar2;
  undefined8 uVar3;
  int iVar4;
  int iVar5;
  uint local_res10 [2];
  
  if ((param_2 == (undefined8 *)0x0) || (param_3 == (undefined8 *)0x0)) {
    SetLastError(0xe4ae0001);
    return 0;
  }
  *(undefined8 *)(param_1 + 0x2d40) = 0;
  *(undefined8 *)(param_1 + 0x2d48) = 0;
  *(undefined8 *)(param_1 + 0x2d50) = 0;
  *(undefined8 *)(param_1 + 0x2d58) = 0;
  *(undefined8 *)(param_1 + 0x2d60) = 0;
  *(undefined8 *)(param_1 + 0x2d68) = 0;
  *(undefined8 *)(param_1 + 0x2d70) = 0;
  *(undefined8 *)(param_1 + 0x2d78) = 0;
  *(undefined8 *)(param_1 + 0x2d80) = 0;
  *(undefined8 *)(param_1 + 0x2d88) = 0;
  *(undefined8 *)(param_1 + 0x2d90) = 0;
  *(undefined8 *)(param_1 + 0x2d98) = 0;
  *(undefined8 *)(param_1 + 0x2da0) = 0;
  iVar5 = 0;
  *(undefined8 *)(param_1 + 0x2da8) = 0;
  local_res10[0] = 0x6bb6b66b;
  if (*(int *)(param_1 + 0x14) == 0) {
    SetLastError(0xe4ae0005);
    iVar4 = 0;
  }
  else {
    uVar3 = FUN_18001c670(param_1,local_res10,4);
    iVar4 = (int)uVar3;
  }
  local_res10[0] = 0x6bb6b66c;
  if (*(int *)(param_1 + 0x14) == 0) {
    SetLastError(0xe4ae0005);
  }
  else {
    uVar3 = FUN_18001c670(param_1,local_res10,4);
    iVar5 = (int)uVar3;
  }
  if ((iVar4 != 0) && (iVar5 != 0)) {
    DVar1 = GetTickCount();
    do {
      Sleep(10);
      if ((*(int *)(param_1 + 0x2d50) != 0) && (*(int *)(param_1 + 0x2d78) != 0)) break;
      DVar2 = GetTickCount();
    } while (DVar2 - DVar1 < param_4);
    if ((*(int *)(param_1 + 0x2d50) != 0) && (*(int *)(param_1 + 0x2d78) != 0)) {
      *param_2 = *(undefined8 *)(param_1 + 0x2d40);
      param_2[1] = *(undefined8 *)(param_1 + 0x2d48);
      param_2[2] = *(undefined8 *)(param_1 + 0x2d50);
      param_2[3] = *(undefined8 *)(param_1 + 0x2d58);
      param_2[4] = *(undefined8 *)(param_1 + 0x2d60);
      param_2[5] = *(undefined8 *)(param_1 + 0x2d68);
      param_2[6] = *(undefined8 *)(param_1 + 0x2d70);
      *param_3 = *(undefined8 *)(param_1 + 0x2d78);
      param_3[1] = *(undefined8 *)(param_1 + 0x2d80);
      param_3[2] = *(undefined8 *)(param_1 + 0x2d88);
      param_3[3] = *(undefined8 *)(param_1 + 0x2d90);
      param_3[4] = *(undefined8 *)(param_1 + 0x2d98);
      param_3[5] = *(undefined8 *)(param_1 + 0x2da0);
      param_3[6] = *(undefined8 *)(param_1 + 0x2da8);
      return 1;
    }
    SetLastError(0xe4ae0008);
  }
  return 0;
}


==================================================================

### EXPORT FUNC 18001d930 (1392 bytes) name=FUN_18001d930

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined4 FUN_18001d930(longlong param_1)

{
  int *piVar1;
  uint uVar2;
  uint *_Dst;
  undefined8 *puVar3;
  bool bVar4;
  LPCSTR pCVar5;
  undefined4 uVar6;
  uint uVar7;
  undefined **ppuVar8;
  longlong lVar9;
  undefined8 uVar10;
  int *_Src;
  ulonglong uVar11;
  uint *_Src_00;
  uint uVar12;
  size_t _Size;
  ulonglong uVar13;
  int iVar14;
  int *piVar15;
  undefined1 auStackY_2e8 [32];
  longlong local_2a8;
  LPCSTR local_2a0;
  longlong local_298 [2];
  undefined4 local_288;
  uint uStack_284;
  uint local_280;
  undefined4 uStack_27c;
  undefined4 local_278;
  int iStack_274;
  undefined4 local_270;
  undefined4 uStack_26c;
  undefined4 local_268;
  undefined4 uStack_264;
  int local_260;
  int iStack_25c;
  undefined8 local_258;
  undefined8 local_250;
  undefined4 local_248;
  uint uStack_244;
  undefined4 local_240;
  undefined8 local_238;
  WCHAR local_228 [256];
  ulonglong local_28;
  
  local_238 = 0xfffffffffffffffe;
  local_28 = DAT_18006cea0 ^ (ulonglong)auStackY_2e8;
  if (param_1 == 0) {
    uVar6 = 1;
  }
  else {
    local_288 = 0;
    FUN_1800357d0((ulonglong *)&uStack_284,0,0x48);
    uStack_27c = 1;
    local_278 = 0;
    iStack_274 = *(int *)(param_1 + 0x50);
    local_270 = *(undefined4 *)(param_1 + 0x54);
    uStack_26c = 8;
    local_268 = 0xffff3cb0;
    bVar4 = false;
    piVar15 = *(int **)(param_1 + 0x2d20);
    if (*(int *)(param_1 + 0x2d08) != 0) {
      while( true ) {
        iVar14 = (int)piVar15;
        uVar7 = usb_bulk_read(*(undefined8 *)(param_1 + 0x38),0x81,piVar15,
                              (*(int *)(param_1 + 0x2d18) * 2 - iVar14) + *(int *)(param_1 + 0x2d20)
                             );
        if (*(int *)(param_1 + 0x2d08) == 0) break;
        if ((int)uVar7 < 0) {
          ppuVar8 = FUN_18001fcc0();
          if (ppuVar8 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
            FUN_18000b170(-0x7fffbffb);
          }
          lVar9 = (**(code **)(*ppuVar8 + 0x18))(ppuVar8);
          local_2a0 = (LPCSTR)(lVar9 + 0x18);
          uVar10 = usb_strerror();
          FUN_18001e660((longlong *)&local_2a0,(byte *)"usb error: usb_bulk_read=%d, %s",
                        (ulonglong)uVar7,uVar10);
          pCVar5 = local_2a0;
          MultiByteToWideChar(0,0,local_2a0,-1,local_228,0x100);
          Sleep(10);
          if (uVar7 == 0xfffffffb) {
            usb_clear_halt(*(undefined8 *)(param_1 + 0x38),0x81);
            LOCK();
            piVar15 = (int *)(pCVar5 + -8);
            iVar14 = *piVar15;
            *piVar15 = *piVar15 + -1;
            UNLOCK();
            if (iVar14 + -1 < 1) {
              (**(code **)(**(longlong **)(pCVar5 + -0x18) + 8))();
            }
            break;
          }
          piVar15 = *(int **)(param_1 + 0x2d20);
          LOCK();
          piVar1 = (int *)(pCVar5 + -8);
          iVar14 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
          if (iVar14 + -1 < 1) {
            (**(code **)(**(longlong **)(pCVar5 + -0x18) + 8))();
          }
        }
        else {
          uVar12 = (iVar14 - *(int *)(param_1 + 0x2d20)) + uVar7;
          if (!bVar4) {
            piVar1 = (int *)((longlong)piVar15 + (longlong)(int)uVar7);
            piVar15 = *(int **)(param_1 + 0x2d20);
            for (_Src = piVar15; _Src < piVar1; _Src = _Src + 1) {
              if (*_Src == 0x1bb1b11b) goto LAB_18001db0e;
            }
            if (*_Src != 0x1bb1b11b) goto LAB_18001de17;
LAB_18001db0e:
            uVar12 = (iVar14 - (int)_Src) + uVar7;
            if (_Src != piVar15) {
              memcpy(piVar15,_Src,(longlong)(int)uVar12);
            }
            bVar4 = true;
          }
          uVar7 = *(uint *)(param_1 + 0x2d18);
          uVar13 = (ulonglong)uVar7;
          uVar11 = (ulonglong)(int)uVar12;
          if (uVar11 < uVar13 + 0x38) {
            piVar15 = (int *)(uVar11 + *(longlong *)(param_1 + 0x2d20));
          }
          else {
            _Dst = *(uint **)(param_1 + 0x2d20);
            if (*_Dst == 0x1bb1b11b) {
              uVar2 = _Dst[2];
              if (((uVar2 == uVar7) && (*(int *)(uVar13 + 0x1c + (longlong)_Dst) == 0x1bb1b11c)) &&
                 ((iVar14 = *(int *)(uVar13 + 0x28 + (longlong)_Dst), iVar14 == 0 || (iVar14 == 1)))
                 ) {
                uStack_284 = _Dst[1];
                uStack_244 = _Dst[3];
                if (iStack_274 == 0xa0) {
                  iStack_25c = *(int *)(uVar13 + 0x24 + (longlong)_Dst);
                  local_260 = iStack_25c + -500;
                }
                else if (iStack_274 == 0x180) {
                  local_260 = *(int *)(uVar13 + 0x2c + (longlong)_Dst);
                  iStack_25c = local_260 + 500;
                }
                else if (iStack_274 == 0x280) {
                  local_260 = *(int *)(uVar13 + 0x2c + (longlong)_Dst);
                  iStack_25c = *(int *)(uVar13 + 0x24 + (longlong)_Dst);
                }
                local_280 = uVar2;
                FUN_180001470(param_1 + 0xb8);
                puVar3 = *(undefined8 **)(param_1 + 0x2d28);
                *puVar3 = CONCAT44(uStack_284,local_288);
                puVar3[1] = CONCAT44(uStack_27c,local_280);
                puVar3[2] = CONCAT44(iStack_274,local_278);
                puVar3[3] = CONCAT44(uStack_26c,local_270);
                puVar3[4] = CONCAT44(uStack_264,local_268);
                puVar3[5] = CONCAT44(iStack_25c,local_260);
                puVar3[6] = local_258;
                puVar3[7] = local_250;
                puVar3[8] = CONCAT44(uStack_244,local_248);
                *(undefined4 *)(puVar3 + 9) = local_240;
                memcpy((void *)(*(longlong *)(param_1 + 0x2d28) + 0x4c),
                       (void *)(*(longlong *)(param_1 + 0x2d20) + 0x1c),
                       (ulonglong)*(uint *)(param_1 + 0x2d18));
                (**(code **)(*(longlong *)(param_1 + 0xb8) + 0x28))(param_1 + 0xb8);
                SetEvent(*(HANDLE *)(param_1 + 0x2d10));
                *(int *)(param_1 + 8) = *(int *)(param_1 + 8) + 1;
              }
              else {
                if ((uVar2 != uVar7) || (*(int *)(uVar13 + 0x1c + (longlong)_Dst) == 0x1bb1b11c))
                goto LAB_18001dd96;
                for (_Src_00 = (uint *)((uVar11 & 0xfffffffffffffffc) + (longlong)_Dst);
                    _Dst < _Src_00; _Src_00 = _Src_00 + -1) {
                  if (*_Src_00 == 0x1bb1b11b) goto LAB_18001dcf0;
                }
                if (*_Src_00 == 0x1bb1b11b) {
LAB_18001dcf0:
                  if (_Dst < _Src_00) {
                    _Size = (size_t)(int)(uVar12 + ((int)_Dst - (int)_Src_00));
                    memcpy(_Dst,_Src_00,_Size);
                    piVar15 = (int *)(_Size + *(longlong *)(param_1 + 0x2d20));
                    goto LAB_18001de17;
                  }
                }
                ppuVar8 = FUN_18001fcc0();
                if (ppuVar8 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
                  FUN_18000b170(-0x7fffbffb);
                }
                local_298[0] = (**(code **)(*ppuVar8 + 0x18))(ppuVar8);
                local_298[0] = local_298[0] + 0x18;
                FUN_18001ad00(local_298,
                              L"drop1, lentgh=%d, startcode=%X, sendbyte=%d, endcode=%X, intDrop=%d"
                              ,(ulonglong)uVar12,(ulonglong)*_Dst);
                LOCK();
                piVar15 = (int *)(local_298[0] + -8);
                iVar14 = *piVar15;
                *piVar15 = *piVar15 + -1;
                UNLOCK();
                if (iVar14 + -1 < 1) {
                  (**(code **)(**(longlong **)(local_298[0] + -0x18) + 8))();
                }
              }
            }
            else {
LAB_18001dd96:
              ppuVar8 = FUN_18001fcc0();
              if (ppuVar8 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
                FUN_18000b170(-0x7fffbffb);
              }
              local_2a8 = (**(code **)(*ppuVar8 + 0x18))(ppuVar8);
              local_2a8 = local_2a8 + 0x18;
              FUN_18001ad00(&local_2a8,
                            L"drop2, lentgh=%d, startcode=%X, sendbyte=%d, endcode=%X, intDrop=%d",
                            (ulonglong)uVar12,(ulonglong)*_Dst);
              LOCK();
              piVar15 = (int *)(local_2a8 + -8);
              iVar14 = *piVar15;
              *piVar15 = *piVar15 + -1;
              UNLOCK();
              if (iVar14 + -1 < 1) {
                (**(code **)(**(longlong **)(local_2a8 + -0x18) + 8))();
              }
            }
            bVar4 = false;
            piVar15 = *(int **)(param_1 + 0x2d20);
          }
        }
LAB_18001de17:
        if (*(int *)(param_1 + 0x2d08) == 0) break;
      }
    }
    uVar6 = 0;
  }
  return uVar6;
}


==================================================================

### EXPORT FUNC 18001deb0 (24 bytes) name=Unwind@18001deb0

void Unwind_18001deb0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x48));
  return;
}


==================================================================

### EXPORT FUNC 18001ded0 (24 bytes) name=Unwind@18001ded0

void Unwind_18001ded0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 18001def0 (24 bytes) name=Unwind@18001def0

void Unwind_18001def0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 18001df10 (427 bytes) name=FUN_18001df10

bool FUN_18001df10(longlong param_1,longlong *param_2)

{
  int *piVar1;
  int iVar2;
  ulonglong uVar3;
  longlong lVar4;
  undefined8 uVar5;
  __uint64 _Var6;
  bool bVar7;
  uint local_res8 [2];
  longlong *local_res10;
  uint local_40;
  CFile local_30 [40];
  
  local_res10 = param_2;
  if (*(int *)(param_1 + 0x14) == 0) {
    SetLastError(0xe4ae0005);
  }
  else {
    *(undefined8 *)(param_1 + 0x2db0) = 0;
    *(undefined8 *)(param_1 + 0x2db8) = 0;
    local_res8[0] = 0x6bb6b66f;
    if (*(int *)(param_1 + 0x14) == 0) {
      SetLastError(0xe4ae0005);
    }
    else {
      uVar5 = FUN_18001c670(param_1,local_res8,4);
      if (((int)uVar5 != 0) && (*(int *)(param_1 + 0x2db0) != 0)) {
        uVar3 = *(ulonglong *)(param_1 + 0x2db0);
        local_40 = (uint)uVar3;
        if (0x3f00000 < local_40) {
          lVar4 = *param_2;
          LOCK();
          piVar1 = (int *)(lVar4 + -8);
          iVar2 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
          if (iVar2 + -1 < 1) {
            (**(code **)(**(longlong **)(lVar4 + -0x18) + 8))();
          }
          return false;
        }
        FUN_180020138((undefined8 *)local_30);
        uVar5 = FUN_180020a6c((longlong)local_30,(LPCWSTR)*param_2,0x40,0);
        if ((int)uVar5 == 0) {
          FUN_1800203a4(local_30);
          lVar4 = *param_2;
          LOCK();
          piVar1 = (int *)(lVar4 + -8);
          iVar2 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
          if (iVar2 + -1 < 1) {
            (**(code **)(**(longlong **)(lVar4 + -0x18) + 8))();
          }
          return true;
        }
        _Var6 = CFile::GetLength(local_30);
        bVar7 = _Var6 != (uVar3 & 0xffffffff);
        CFile::Close(local_30);
        FUN_1800203a4(local_30);
        lVar4 = *param_2;
        LOCK();
        piVar1 = (int *)(lVar4 + -8);
        iVar2 = *piVar1;
        *piVar1 = *piVar1 + -1;
        UNLOCK();
        if (0 < iVar2 + -1) {
          return bVar7;
        }
        (**(code **)(**(longlong **)(lVar4 + -0x18) + 8))();
        return bVar7;
      }
    }
  }
  lVar4 = *param_2;
  LOCK();
  piVar1 = (int *)(lVar4 + -8);
  iVar2 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)(lVar4 + -0x18) + 8))();
  }
  return true;
}


==================================================================

### EXPORT FUNC 18001e0c0 (24 bytes) name=Unwind@18001e0c0

void Unwind_18001e0c0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0(*(longlong **)(param_2 + 0x78));
  return;
}


==================================================================

### EXPORT FUNC 18001e0e0 (24 bytes) name=Unwind@18001e0e0

void Unwind_18001e0e0(undefined8 param_1,longlong param_2)

{
  FUN_1800203a4((CFile *)(param_2 + 0x38));
  return;
}


==================================================================

### EXPORT FUNC 18001e100 (533 bytes) name=FUN_18001e100

bool FUN_18001e100(longlong param_1,longlong *param_2)

{
  int *piVar1;
  uint uVar2;
  longlong lVar3;
  uint uVar4;
  LPVOID pvVar5;
  int iVar6;
  undefined8 uVar7;
  LPVOID pvVar8;
  bool bVar9;
  uint local_res18 [2];
  LPVOID local_res20;
  undefined8 local_68 [2];
  CFile local_58 [40];
  
  *(undefined8 *)(param_1 + 0x2db0) = 0;
  *(undefined8 *)(param_1 + 0x2db8) = 0;
  local_res18[0] = 0x6bb6b670;
  if (*(int *)(param_1 + 0x14) == 0) {
    SetLastError(0xe4ae0005);
  }
  else {
    uVar7 = FUN_18001c670(param_1,local_res18,4);
    if ((((int)uVar7 != 0) && (*(int *)(param_1 + 0x2db0) != 0)) &&
       (*(uint *)(param_1 + 0x2db0) < 0x3f00001)) {
      uVar2 = *(uint *)(param_1 + 0x2db0);
      pvVar8 = thunk_FUN_18001eb74((longlong)(int)uVar2);
      uVar4 = uVar2;
      pvVar5 = pvVar8;
      local_res20 = pvVar8;
      if (pvVar8 == (LPVOID)0x0) {
        lVar3 = *param_2;
        LOCK();
        piVar1 = (int *)(lVar3 + -8);
        iVar6 = *piVar1;
        *piVar1 = *piVar1 + -1;
        UNLOCK();
        if (iVar6 + -1 < 1) {
          (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
        }
        return false;
      }
      while ((0 < (int)uVar4 &&
             (iVar6 = usb_bulk_read(*(undefined8 *)(param_1 + 0x38),0x84,pvVar5,uVar4,20000),
             0 < iVar6))) {
        uVar4 = uVar4 - iVar6;
        pvVar5 = (LPVOID)((longlong)pvVar5 + (longlong)iVar6);
      }
      if (uVar4 != 0) {
        thunk_FUN_180034a70(pvVar8);
        usb_strerror();
        lVar3 = *param_2;
        LOCK();
        piVar1 = (int *)(lVar3 + -8);
        iVar6 = *piVar1;
        *piVar1 = *piVar1 + -1;
        UNLOCK();
        if (iVar6 + -1 < 1) {
          (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
        }
        return false;
      }
      FUN_180020138((undefined8 *)local_58);
      uVar7 = FUN_180020a6c((longlong)local_58,(LPCWSTR)*param_2,0x1021,0);
      bVar9 = (int)uVar7 != 0;
      if (bVar9) {
        FUN_18001ef2c(local_68);
        CFile::Write(local_58,pvVar8,uVar2);
        FUN_18001ef94();
        CFile::Close(local_58);
      }
      thunk_FUN_180034a70(pvVar8);
      FUN_1800203a4(local_58);
      lVar3 = *param_2;
      LOCK();
      piVar1 = (int *)(lVar3 + -8);
      iVar6 = *piVar1;
      *piVar1 = *piVar1 + -1;
      UNLOCK();
      if (0 < iVar6 + -1) {
        return bVar9;
      }
      (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
      return bVar9;
    }
  }
  lVar3 = *param_2;
  LOCK();
  piVar1 = (int *)(lVar3 + -8);
  iVar6 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar6 + -1 < 1) {
    (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
  }
  return false;
}


==================================================================

### EXPORT FUNC 18001e330 (27 bytes) name=Unwind@18001e330

void Unwind_18001e330(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0(*(longlong **)(param_2 + 0xb8));
  return;
}


==================================================================

### EXPORT FUNC 18001e350 (24 bytes) name=Unwind@18001e350

void Unwind_18001e350(undefined8 param_1,longlong param_2)

{
  FUN_1800203a4((CFile *)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 18001e370 (24 bytes) name=Unwind@18001e370

void Unwind_18001e370(void)

{
  thunk_FUN_18001ef94();
  return;
}


==================================================================

### EXPORT FUNC 18001e390 (36 bytes) name=Catch@18001e390

undefined * Catch_18001e390(undefined8 param_1,longlong param_2)

{
  *(undefined8 *)(param_2 + 0x48) = *(undefined8 *)(param_2 + 0x38);
  return &DAT_18001e29d;
}


==================================================================

### EXPORT FUNC 18001e3c0 (192 bytes) name=FUN_18001e3c0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

longlong * FUN_18001e3c0(longlong param_1,longlong *param_2)

{
  undefined **ppuVar1;
  longlong lVar2;
  undefined1 auStack_268 [32];
  undefined4 local_248;
  undefined8 local_240;
  longlong *local_238;
  WCHAR local_228 [264];
  ulonglong local_18;
  
  local_240 = 0xfffffffffffffffe;
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_268;
  local_248 = 0;
  local_238 = param_2;
  GetTempPathW(0x104,local_228);
  ppuVar1 = FUN_18001fcc0();
  if (ppuVar1 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar2 = (**(code **)(*ppuVar1 + 0x18))(ppuVar1);
  *param_2 = lVar2 + 0x18;
  local_248 = 1;
  FUN_18001ad00(param_2,L"%sCore%d",local_228,(ulonglong)*(uint *)(param_1 + 0x40));
  return param_2;
}


==================================================================

### EXPORT FUNC 18001e490 (38 bytes) name=Unwind@18001e490

void Unwind_18001e490(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x20) & 1) != 0) {
    *(uint *)(param_2 + 0x20) = *(uint *)(param_2 + 0x20) & 0xfffffffe;
    FUN_18000b5e0(*(longlong **)(param_2 + 0x30));
  }
  return;
}


==================================================================

### EXPORT FUNC 18001e4c0 (372 bytes) name=FUN_18001e4c0

ulonglong FUN_18001e4c0(longlong param_1)

{
  int *piVar1;
  int iVar2;
  void *pvVar3;
  bool bVar4;
  undefined8 *puVar5;
  undefined7 extraout_var;
  ulonglong uVar6;
  longlong lVar7;
  undefined7 extraout_var_00;
  longlong lVar8;
  void *local_res10;
  longlong local_res18;
  longlong local_res20;
  
  FUN_18001e3c0(param_1,(longlong *)&local_res10);
  pvVar3 = local_res10;
  puVar5 = (undefined8 *)(**(code **)(**(longlong **)((longlong)local_res10 + -0x18) + 0x20))();
  if ((*(int *)((longlong)pvVar3 + -8) < 0) ||
     (puVar5 != *(undefined8 **)((longlong)pvVar3 + -0x18))) {
    lVar7 = (**(code **)*puVar5)(puVar5,*(undefined4 *)((longlong)pvVar3 + -0x10),2);
    if (lVar7 == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000ad70();
    }
    *(undefined4 *)(lVar7 + 8) = *(undefined4 *)((longlong)pvVar3 + -0x10);
    lVar8 = (longlong)(*(int *)((longlong)pvVar3 + -0x10) + 1);
    FUN_180032c60((ulonglong *)(lVar7 + 0x18),lVar8 * 2,pvVar3,lVar8 * 2);
  }
  else {
    lVar7 = (longlong)pvVar3 + -0x18;
    LOCK();
    *(int *)((longlong)pvVar3 + -8) = *(int *)((longlong)pvVar3 + -8) + 1;
    UNLOCK();
  }
  local_res18 = lVar7 + 0x18;
  bVar4 = FUN_18001df10(param_1,&local_res18);
  pvVar3 = local_res10;
  if ((int)CONCAT71(extraout_var,bVar4) == 0) {
    LOCK();
    piVar1 = (int *)((longlong)local_res10 + -8);
    iVar2 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar2 + -1 < 1) {
      (**(code **)(**(longlong **)((longlong)local_res10 + -0x18) + 8))();
    }
    uVar6 = 1;
  }
  else {
    puVar5 = (undefined8 *)(**(code **)(**(longlong **)((longlong)local_res10 + -0x18) + 0x20))();
    if ((*(int *)((longlong)pvVar3 + -8) < 0) ||
       (puVar5 != *(undefined8 **)((longlong)pvVar3 + -0x18))) {
      lVar7 = (**(code **)*puVar5)(puVar5,*(undefined4 *)((longlong)pvVar3 + -0x10),2);
      if (lVar7 == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_18000ad70();
      }
      *(undefined4 *)(lVar7 + 8) = *(undefined4 *)((longlong)pvVar3 + -0x10);
      lVar8 = (longlong)(*(int *)((longlong)pvVar3 + -0x10) + 1);
      FUN_180032c60((ulonglong *)(lVar7 + 0x18),lVar8 * 2,pvVar3,lVar8 * 2);
    }
    else {
      lVar7 = (longlong)pvVar3 + -0x18;
      LOCK();
      *(int *)((longlong)pvVar3 + -8) = *(int *)((longlong)pvVar3 + -8) + 1;
      UNLOCK();
    }
    local_res20 = lVar7 + 0x18;
    bVar4 = FUN_18001e100(param_1,&local_res20);
    uVar6 = CONCAT71(extraout_var_00,bVar4) & 0xffffffff;
    LOCK();
    piVar1 = (int *)((longlong)local_res10 + -8);
    iVar2 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar2 + -1 < 1) {
      (**(code **)(**(longlong **)((longlong)local_res10 + -0x18) + 8))();
    }
  }
  return uVar6;
}


==================================================================

### EXPORT FUNC 18001e640 (24 bytes) name=Unwind@18001e640

void Unwind_18001e640(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x58));
  return;
}


==================================================================

### EXPORT FUNC 18001e660 (162 bytes) name=FUN_18001e660

void FUN_18001e660(longlong *param_1,byte *param_2,undefined8 param_3,undefined8 param_4)

{
  uint uVar1;
  undefined8 local_res18;
  undefined8 local_res20;
  
  local_res18 = param_3;
  local_res20 = param_4;
  if (param_2 == (byte *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7ff8ffa9);
  }
  uVar1 = FUN_180034240(param_2,(WCHAR *)&local_res18);
  if ((int)(1U - *(int *)(*param_1 + -8) | *(int *)(*param_1 + -0xc) - uVar1) < 0) {
    FUN_18000ab60(param_1,uVar1);
  }
  FUN_1800343c0((char *)*param_1,(longlong)(int)(uVar1 + 1),(longlong)param_2,&local_res18);
  if ((-1 < (int)uVar1) && ((int)uVar1 <= *(int *)(*param_1 + -0xc))) {
    *(uint *)(*param_1 + -0x10) = uVar1;
    *(undefined1 *)((longlong)(int)uVar1 + *param_1) = 0;
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8ffa9);
}


==================================================================

### EXPORT FUNC 18001e710 (123 bytes) name=FUN_18001e710

undefined8 * FUN_18001e710(undefined8 *param_1,uint param_2)

{
  *param_1 = CSmoother::vftable;
  if ((LPVOID)param_1[1] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[1]);
    param_1[1] = 0;
  }
  param_1[2] = 0;
  if ((LPVOID)param_1[3] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[3]);
    param_1[3] = 0;
  }
  if ((LPVOID)param_1[4] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[4]);
    param_1[4] = 0;
  }
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18001e790 (94 bytes) name=FUN_18001e790

void FUN_18001e790(undefined8 *param_1)

{
  *param_1 = CSmoother::vftable;
  if ((LPVOID)param_1[1] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[1]);
    param_1[1] = 0;
  }
  param_1[2] = 0;
  if ((LPVOID)param_1[3] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[3]);
    param_1[3] = 0;
  }
  if ((LPVOID)param_1[4] != (LPVOID)0x0) {
    thunk_FUN_180034a70((LPVOID)param_1[4]);
    param_1[4] = 0;
  }
  return;
}


==================================================================

### EXPORT FUNC 18001e7f0 (304 bytes) name=FUN_18001e7f0

undefined8 FUN_18001e7f0(longlong param_1,uint param_2,int param_3,int param_4)

{
  undefined1 auVar1 [16];
  undefined1 auVar2 [16];
  size_t sVar3;
  LPVOID pvVar4;
  ulonglong *puVar5;
  ulonglong uVar6;
  
  *(undefined4 *)(param_1 + 0x3c) = 0;
  uVar6 = CONCAT44(0,param_2);
  if (*(LPVOID *)(param_1 + 8) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 8));
    *(undefined8 *)(param_1 + 8) = 0;
  }
  *(undefined8 *)(param_1 + 0x10) = 0;
  if (*(LPVOID *)(param_1 + 0x18) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x18));
    *(undefined8 *)(param_1 + 0x18) = 0;
  }
  if (*(LPVOID *)(param_1 + 0x20) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 0x20));
    *(undefined8 *)(param_1 + 0x20) = 0;
  }
  if ((param_2 != 0) && (param_3 != 0)) {
    *(int *)(param_1 + 0x38) = param_3;
    *(undefined4 *)(param_1 + 0x30) = 0;
    *(uint *)(param_1 + 0x34) = param_2;
    auVar2 = ZEXT816(2) * ZEXT416(param_2 * param_3);
    sVar3 = auVar2._0_8_;
    if (auVar2._8_8_ != 0) {
      sVar3 = 0xffffffffffffffff;
    }
    pvVar4 = thunk_FUN_18001eb74(sVar3);
    *(LPVOID *)(param_1 + 8) = pvVar4;
    *(LPVOID *)(param_1 + 0x10) = pvVar4;
    if (pvVar4 != (LPVOID)0x0) {
      *(LPVOID *)(param_1 + 0x10) = pvVar4;
      *(LPVOID *)(param_1 + 0x28) = pvVar4;
      auVar2._8_8_ = 0;
      auVar2._0_8_ = uVar6;
      sVar3 = SUB168(ZEXT816(4) * auVar2,0);
      if (SUB168(ZEXT816(4) * auVar2,8) != 0) {
        sVar3 = 0xffffffffffffffff;
      }
      puVar5 = thunk_FUN_18001eb74(sVar3);
      *(ulonglong **)(param_1 + 0x18) = puVar5;
      if (puVar5 != (ulonglong *)0x0) {
        FUN_1800357d0(puVar5,0,uVar6 * 4);
        if (param_4 != 0) {
          auVar1._8_8_ = 0;
          auVar1._0_8_ = uVar6;
          sVar3 = SUB168(ZEXT816(2) * auVar1,0);
          if (SUB168(ZEXT816(2) * auVar1,8) != 0) {
            sVar3 = 0xffffffffffffffff;
          }
          pvVar4 = thunk_FUN_18001eb74(sVar3);
          *(LPVOID *)(param_1 + 0x20) = pvVar4;
          if (pvVar4 == (LPVOID)0x0) {
            return 0;
          }
        }
        *(undefined4 *)(param_1 + 0x3c) = 1;
        return 1;
      }
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 18001e920 (206 bytes) name=FUN_18001e920

bool FUN_18001e920(longlong param_1,ushort *param_2,int param_3)

{
  ushort uVar1;
  ushort uVar2;
  uint uVar3;
  uint uVar4;
  ushort *puVar5;
  int iVar6;
  int iVar7;
  
  if (*(int *)(param_1 + 0x3c) == 0) {
    return false;
  }
  *(int *)(param_1 + 0x30) = *(int *)(param_1 + 0x30) + 1;
  if (*(uint *)(param_1 + 0x38) < *(uint *)(param_1 + 0x30)) {
    if (*(uint *)(param_1 + 0x38) != 1) {
      return false;
    }
    puVar5 = *(ushort **)(param_1 + 0x10);
    for (iVar7 = *(int *)(param_1 + 0x34); iVar7 != 0; iVar7 = iVar7 + -1) {
      uVar1 = *puVar5;
      uVar2 = *param_2;
      *puVar5 = uVar2;
      iVar6 = (uint)uVar2 - (uint)uVar1;
      if (((iVar6 <= param_3) && (-iVar6 <= param_3)) && (iVar6 != 0)) {
        *param_2 = uVar2 - (short)(iVar6 >> 1);
      }
      param_2 = param_2 + 1;
      puVar5 = puVar5 + 1;
    }
  }
  else {
    memcpy(*(void **)(param_1 + 0x28),param_2,(ulonglong)*(uint *)(param_1 + 0x34) * 2);
  }
  uVar3 = *(uint *)(param_1 + 0x30);
  uVar4 = *(uint *)(param_1 + 0x38);
  if (uVar3 % uVar4 != 0) {
    *(longlong *)(param_1 + 0x28) =
         *(longlong *)(param_1 + 0x28) + (ulonglong)*(uint *)(param_1 + 0x34) * 2;
    return uVar4 <= uVar3;
  }
  *(undefined8 *)(param_1 + 0x28) = *(undefined8 *)(param_1 + 0x10);
  return uVar4 <= uVar3;
}


==================================================================

### EXPORT FUNC 18001e9f0 (6 bytes) name=FUN_18001e9f0

undefined8 FUN_18001e9f0(void)

{
  return 1;
}


==================================================================

### EXPORT FUNC 18001e9f8 (30 bytes) name=FUN_18001e9f8

void FUN_18001e9f8(void)

{
  FUN_18002362c(0,1);
  FUN_18002372c();
  AfxTlsRelease();
  return;
}


==================================================================

### EXPORT FUNC 18001ea18 (263 bytes) name=FUN_18001ea18

undefined8
FUN_18001ea18(HINSTANCE__ *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  undefined8 uVar1;
  longlong *plVar2;
  int iVar3;
  longlong lVar4;
  undefined8 uVar5;
  longlong lVar6;
  undefined8 uVar7;
  
  uVar7 = 0;
  iVar3 = (int)param_2;
  if (iVar3 != 1) {
    if (iVar3 == 0) {
      lVar4 = FUN_180022bb4();
      if (*(longlong **)(lVar4 + 8) != (longlong *)0x0) {
        (**(code **)(**(longlong **)(lVar4 + 8) + 0xd0))();
      }
      FUN_180023860();
      FUN_180023c24(-1,param_2,param_3,param_4);
      AfxWinTerm();
      FUN_18002362c((longlong)param_1,1);
    }
    else if (iVar3 == 3) {
      FUN_180023860();
      FUN_180023c24(-1,param_2,param_3,param_4);
      AfxTermThread(param_1);
    }
    return 1;
  }
  lVar4 = FUN_1800222f4();
  uVar1 = *(undefined8 *)(lVar4 + 0x10);
  uVar5 = AfxWinInit(param_1,0,&DAT_18005911c,0);
  if ((int)uVar5 != 0) {
    lVar6 = FUN_180022bb4();
    plVar2 = *(longlong **)(lVar6 + 8);
    if ((plVar2 == (longlong *)0x0) || (iVar3 = (**(code **)(*plVar2 + 0xa0))(plVar2), iVar3 != 0))
    {
      *(undefined8 *)(lVar4 + 0x10) = uVar1;
      AfxInitLocalData(param_1);
      uVar7 = 1;
      goto LAB_18001eaa1;
    }
    (**(code **)(*plVar2 + 0xd0))(plVar2);
  }
  AfxWinTerm();
LAB_18001eaa1:
  *(undefined8 *)(lVar4 + 0x10) = uVar1;
  return uVar7;
}


==================================================================

### EXPORT FUNC 18001eb20 (54 bytes) name=DllMain

/* Library Function - Single Match
    DllMain
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

undefined8 DllMain(HINSTANCE__ *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  longlong lVar1;
  undefined8 uVar2;
  
  if (DAT_18006eda4 == 0) {
LAB_18001eb4b:
    uVar2 = FUN_18001ea18(param_1,param_2,param_3,param_4);
  }
  else {
    if ((int)param_2 == 1) {
      lVar1 = FUN_180022bb4();
      *(HINSTANCE__ **)(lVar1 + 0x10) = param_1;
    }
    else if ((int)param_2 != 0) goto LAB_18001eb4b;
    uVar2 = 1;
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 18001eb58 (9 bytes) name=FUN_18001eb58

void FUN_18001eb58(void)

{
                    /* WARNING: Subroutine does not return */
  FUN_18001ed6c();
}


==================================================================

### EXPORT FUNC 18001eb64 (15 bytes) name=FUN_18001eb64

undefined * FUN_18001eb64(undefined *param_1)

{
  undefined *puVar1;
  
  puVar1 = PTR_FUN_18006c000;
  PTR_FUN_18006c000 = param_1;
  return puVar1;
}


==================================================================

### EXPORT FUNC 18001eb74 (66 bytes) name=FUN_18001eb74

LPVOID FUN_18001eb74(size_t param_1)

{
  int iVar1;
  LPVOID pvVar2;
  
  while( true ) {
    pvVar2 = FUN_1800349a0(param_1);
    if (pvVar2 != (LPVOID)0x0) {
      return pvVar2;
    }
    if (PTR_FUN_18006c000 == (undefined *)0x0) break;
    iVar1 = (*(code *)PTR_FUN_18006c000)(param_1);
    if (iVar1 == 0) {
      return (LPVOID)0x0;
    }
  }
  return (LPVOID)0x0;
}


==================================================================

### EXPORT FUNC 18001ebb8 (5 bytes) name=thunk_FUN_180034a70

void thunk_FUN_180034a70(LPVOID param_1)

{
  BOOL BVar1;
  DWORD DVar2;
  DWORD *pDVar3;
  
  if (param_1 != (LPVOID)0x0) {
    BVar1 = HeapFree(DAT_180072ed8,0,param_1);
    if (BVar1 == 0) {
      pDVar3 = FUN_180035b40();
      DVar2 = GetLastError();
      DVar2 = FUN_180035af0(DVar2);
      *pDVar3 = DVar2;
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18001ebc0 (5 bytes) name=thunk_FUN_18001eb74

LPVOID thunk_FUN_18001eb74(size_t param_1)

{
  int iVar1;
  LPVOID pvVar2;
  
  while( true ) {
    pvVar2 = FUN_1800349a0(param_1);
    if (pvVar2 != (LPVOID)0x0) {
      return pvVar2;
    }
    if (PTR_FUN_18006c000 == (undefined *)0x0) break;
    iVar1 = (*(code *)PTR_FUN_18006c000)(param_1);
    if (iVar1 == 0) {
      return (LPVOID)0x0;
    }
  }
  return (LPVOID)0x0;
}


==================================================================

### EXPORT FUNC 18001ebc8 (39 bytes) name=FUN_18001ebc8

undefined8 FUN_18001ebc8(longlong param_1,DWORD param_2)

{
  DWORD DVar1;
  undefined8 uVar2;
  
  DVar1 = WaitForSingleObject(*(HANDLE *)(param_1 + 8),param_2);
  if ((DVar1 == 0) || (DVar1 == 0x80)) {
    uVar2 = 1;
  }
  else {
    uVar2 = 0;
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 18001ebf0 (8 bytes) name=FUN_18001ebf0

undefined ** FUN_18001ebf0(void)

{
  return &PTR_s_CCriticalSection_180053b50;
}


==================================================================

### EXPORT FUNC 18001ebf8 (8 bytes) name=FUN_18001ebf8

undefined ** FUN_18001ebf8(void)

{
  return &PTR_s_CSyncObject_180053af8;
}


==================================================================

### EXPORT FUNC 18001ec00 (19 bytes) name=FUN_18001ec00

undefined8 * FUN_18001ec00(undefined8 *param_1)

{
  param_1[1] = 0;
  *param_1 = CSyncObject::vftable;
  return param_1;
}


==================================================================

### EXPORT FUNC 18001ec14 (45 bytes) name=~CSyncObject

/* Library Function - Single Match
    public: virtual __cdecl CSyncObject::~CSyncObject(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CSyncObject::~CSyncObject(CSyncObject *this)

{
  *(undefined ***)this = vftable;
  if (*(HANDLE *)(this + 8) != (HANDLE)0x0) {
    CloseHandle(*(HANDLE *)(this + 8));
    *(undefined8 *)(this + 8) = 0;
  }
  return;
}


==================================================================

### EXPORT FUNC 18001ec44 (47 bytes) name=FUN_18001ec44

CSyncObject * FUN_18001ec44(CSyncObject *param_1,uint param_2)

{
  CSyncObject::~CSyncObject(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18001ec74 (26 bytes) name=FUN_18001ec74

void FUN_18001ec74(longlong *param_1)

{
  if (0 < (int)param_1[1]) {
    (**(code **)(*param_1 + 8))(param_1,1);
  }
  return;
}


==================================================================

### EXPORT FUNC 18001ec90 (7 bytes) name=FUN_18001ec90

void FUN_18001ec90(longlong *param_1)

{
                    /* WARNING: Could not recover jumptable at 0x00018001ec93. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*param_1 + 0x20))();
  return;
}


==================================================================

### EXPORT FUNC 18001ec98 (131 bytes) name=ReportError

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    public: virtual int __cdecl CException::ReportError(unsigned int,unsigned int) __ptr64
   
   Library: Visual Studio 2008 Release */

int __thiscall CException::ReportError(CException *this,uint param_1,uint param_2)

{
  int iVar1;
  undefined1 auStack_448 [32];
  uint local_428 [4];
  wchar_t local_418 [512];
  ulonglong local_18;
  
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_448;
  iVar1 = (**(code **)(*(longlong *)this + 0x18))(this,local_418,0x200,local_428);
  if (iVar1 == 0) {
    if (param_2 == 0) {
      param_2 = 0xf020;
    }
    iVar1 = FUN_180024b20(param_2,param_1,local_428[0]);
  }
  else {
    iVar1 = AfxMessageBox(local_418,param_1,local_428[0]);
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 18001ed1c (8 bytes) name=FUN_18001ed1c

undefined ** FUN_18001ed1c(void)

{
  return &PTR_s_CMemoryException_180053c40;
}


==================================================================

### EXPORT FUNC 18001ed24 (8 bytes) name=FUN_18001ed24

undefined ** FUN_18001ed24(void)

{
  return &PTR_s_CNotSupportedException_180053c70;
}


==================================================================

### EXPORT FUNC 18001ed2c (8 bytes) name=FUN_18001ed2c

undefined ** FUN_18001ed2c(void)

{
  return &PTR_s_CInvalidArgException_180053ca0;
}


==================================================================

### EXPORT FUNC 18001ed34 (53 bytes) name=InitString

/* Library Function - Single Match
    public: void __cdecl CSimpleException::InitString(void) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void __thiscall CSimpleException::InitString(CSimpleException *this)

{
  uint uVar1;
  
  *(undefined4 *)(this + 0x14) = 1;
  uVar1 = FUN_18001fbc8(*(uint *)(this + 0x11c),(ulonglong *)(this + 0x1c),0x80);
  *(uint *)(this + 0x18) = (uint)(uVar1 != 0);
  return;
}


==================================================================

### EXPORT FUNC 18001ed6c (33 bytes) name=FUN_18001ed6c

void FUN_18001ed6c(void)

{
  undefined **local_res8 [4];
  
  local_res8[0] = &PTR_vftable_18006c1a0;
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(local_res8,(ThrowInfo *)&DAT_1800685f8);
}


==================================================================

### EXPORT FUNC 18001ed90 (33 bytes) name=FUN_18001ed90

void FUN_18001ed90(void)

{
  undefined **local_res8 [4];
  
  local_res8[0] = &PTR_vftable_18006c3e0;
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(local_res8,(ThrowInfo *)&DAT_180068710);
}


==================================================================

### EXPORT FUNC 18001edb4 (49 bytes) name=CreateObject

/* Library Function - Single Match
    public: static class CNoTrackObject * __ptr64 __cdecl CThreadLocal<class
   _AFX_THREAD_STATE>::CreateObject(void)
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

CNoTrackObject * __cdecl CThreadLocal<_AFX_THREAD_STATE>::CreateObject(void)

{
  _AFX_THREAD_STATE *this;
  CNoTrackObject *pCVar1;
  
  this = (_AFX_THREAD_STATE *)FUN_180022c84(0x1e0);
  pCVar1 = (CNoTrackObject *)0x0;
  if (this != (_AFX_THREAD_STATE *)0x0) {
    pCVar1 = (CNoTrackObject *)_AFX_THREAD_STATE::_AFX_THREAD_STATE(this);
  }
  return pCVar1;
}


==================================================================

### EXPORT FUNC 18001edf4 (24 bytes) name=Unwind@18001edf4

void Unwind_18001edf4(undefined8 param_1,longlong param_2)

{
  FUN_180022ca8(*(HLOCAL *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 18001ee0c (11 bytes) name=FUN_18001ee0c

longlong FUN_18001ee0c(longlong param_1)

{
  *(undefined4 *)(param_1 + 8) = 1;
  return param_1;
}


==================================================================

### EXPORT FUNC 18001ee18 (7 bytes) name=FUN_18001ee18

longlong FUN_18001ee18(longlong param_1,undefined4 param_2)

{
  *(undefined4 *)(param_1 + 8) = param_2;
  return param_1;
}


==================================================================

### EXPORT FUNC 18001ee20 (145 bytes) name=FUN_18001ee20

undefined4 FUN_18001ee20(CSimpleException *param_1,short *param_2,uint param_3,undefined4 *param_4)

{
  int iVar1;
  undefined4 uVar2;
  
  if ((param_2 == (short *)0x0) || (param_3 == 0)) {
    uVar2 = 0;
  }
  else {
    if (param_4 != (undefined4 *)0x0) {
      *param_4 = 0;
    }
    if (*(int *)(param_1 + 0x14) == 0) {
      CSimpleException::InitString(param_1);
    }
    if (*(int *)(param_1 + 0x18) == 0) {
      *param_2 = 0;
    }
    else {
      iVar1 = FUN_1800354c0(param_2,(ulonglong)param_3,(short *)(param_1 + 0x1c),-1);
      if (iVar1 != 0) {
        if (iVar1 == 0xc) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed6c();
        }
        if ((iVar1 == 0x16) || (iVar1 == 0x22)) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
        if (iVar1 != 0x50) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
      }
    }
    uVar2 = *(undefined4 *)(param_1 + 0x18);
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 18001eeb4 (38 bytes) name=FUN_18001eeb4

undefined8 * FUN_18001eeb4(undefined8 *param_1,byte param_2)

{
  *param_1 = CMemoryException::vftable;
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18001eedc (38 bytes) name=FUN_18001eedc

undefined8 * FUN_18001eedc(undefined8 *param_1,byte param_2)

{
  *param_1 = CNotSupportedException::vftable;
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18001ef04 (38 bytes) name=FUN_18001ef04

undefined8 * FUN_18001ef04(undefined8 *param_1,byte param_2)

{
  *param_1 = CInvalidArgException::vftable;
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18001ef2c (101 bytes) name=FUN_18001ef2c

undefined8 * FUN_18001ef2c(undefined8 *param_1)

{
  DWORD dwErrCode;
  void *pvVar1;
  
  param_1[1] = 0;
  dwErrCode = GetLastError();
  pvVar1 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar1 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  SetLastError(dwErrCode);
  *param_1 = *(undefined8 *)((longlong)pvVar1 + 0x20);
  *(undefined8 **)((longlong)pvVar1 + 0x20) = param_1;
  return param_1;
}


==================================================================

### EXPORT FUNC 18001ef94 (111 bytes) name=FUN_18001ef94

void FUN_18001ef94(void)

{
  undefined8 *puVar1;
  longlong *plVar2;
  DWORD dwErrCode;
  void *pvVar3;
  
  dwErrCode = GetLastError();
  pvVar3 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar3 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  SetLastError(dwErrCode);
  puVar1 = *(undefined8 **)((longlong)pvVar3 + 0x20);
  if (puVar1 != (undefined8 *)0x0) {
    plVar2 = (longlong *)puVar1[1];
    if ((plVar2 != (longlong *)0x0) && (0 < (int)plVar2[1])) {
      (**(code **)(*plVar2 + 8))(plVar2,1);
    }
    *(undefined8 *)((longlong)pvVar3 + 0x20) = *puVar1;
  }
  return;
}


==================================================================

### EXPORT FUNC 18001f004 (8 bytes) name=FUN_18001f004

undefined8 FUN_18001f004(longlong param_1)

{
  return *(undefined8 *)(param_1 + 0xe8);
}


==================================================================

### EXPORT FUNC 18001f00c (8 bytes) name=FUN_18001f00c

undefined ** FUN_18001f00c(void)

{
  return &PTR_s_CFileDialog_180053db0;
}


==================================================================

### EXPORT FUNC 18001f014 (5 bytes) name=thunk_FUN_180024c40

void thunk_FUN_180024c40(CWnd *param_1)

{
  *(undefined ***)param_1 = CDialog::vftable;
  if (*(longlong *)(param_1 + 0x40) != 0) {
    FUN_180029920((longlong)param_1);
  }
  CWnd::~CWnd(param_1);
  return;
}


==================================================================

### EXPORT FUNC 18001f01c (36 bytes) name=FUN_18001f01c

void FUN_18001f01c(longlong param_1)

{
  HWND pHVar1;
  CWnd *pCVar2;
  
  pHVar1 = GetParent(*(HWND *)(param_1 + 0x40));
  pCVar2 = CWnd::FromHandle(pHVar1);
  FUN_180028ce8(pCVar2,0);
  return;
}


==================================================================

### EXPORT FUNC 18001f040 (278 bytes) name=OnNotify

/* Library Function - Single Match
    protected: virtual int __cdecl CFileDialog::OnNotify(unsigned __int64,__int64,__int64 * __ptr64)
   __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

int __thiscall
CFileDialog::OnNotify(CFileDialog *this,__uint64 param_1,__int64 param_2,__int64 *param_3)

{
  uint uVar1;
  int iVar2;
  undefined8 uVar3;
  LRESULT LVar4;
  
  uVar3 = FUN_18002aedc((longlong *)this,param_1,(undefined8 *)param_2,param_3);
  if ((int)uVar3 == 0) {
    iVar2 = *(int *)(param_2 + 0x10);
    if (iVar2 == -0x25f) {
      (**(code **)(*(longlong *)this + 0x2e8))(this);
    }
    else if (iVar2 == -0x25e) {
      iVar2 = (**(code **)(*(longlong *)this + 0x2c0))(this);
      *param_3 = (longlong)iVar2;
    }
    else if (iVar2 == -0x25d) {
      LVar4 = SendMessageW(*(HWND *)(this + 0x40),0x111,0xe146,0);
      if (LVar4 == 0) {
        SendMessageW(*(HWND *)(this + 0x40),0x365,0,0);
      }
    }
    else if (iVar2 == -0x25c) {
      uVar1 = (**(code **)(*(longlong *)this + 0x2b8))(this,*(undefined8 *)(param_2 + 0x20));
      *param_3 = (ulonglong)uVar1;
    }
    else if (iVar2 == -0x25b) {
      (**(code **)(*(longlong *)this + 0x2e0))(this);
    }
    else if (iVar2 == -0x25a) {
      (**(code **)(*(longlong *)this + 0x2d8))(this);
    }
    else {
      if (iVar2 != -0x259) {
        return 0;
      }
      (**(code **)(*(longlong *)this + 0x2d0))(this);
    }
  }
  return 1;
}


==================================================================

### EXPORT FUNC 18001f158 (114 bytes) name=FUN_18001f158

undefined8 * FUN_18001f158(longlong param_1,undefined8 *param_2)

{
  HMODULE pHVar1;
  FARPROC pFVar2;
  
  if (*(longlong *)(param_1 + 0x28) == 0) {
    if (*(longlong *)(param_1 + 8) == 0) {
      pHVar1 = GetModuleHandleW(*(LPCWSTR *)(param_1 + 0x18));
      *(HMODULE *)(param_1 + 8) = pHVar1;
      if (pHVar1 == (HMODULE)0x0) {
        pHVar1 = LoadLibraryW(*(LPCWSTR *)(param_1 + 0x18));
        *(HMODULE *)(param_1 + 8) = pHVar1;
        *(bool *)(param_1 + 0x10) = pHVar1 != (HMODULE)0x0;
      }
    }
    pFVar2 = GetProcAddress(*(HMODULE *)(param_1 + 8),"GetOpenFileNameW");
    *(FARPROC *)(param_1 + 0x28) = pFVar2;
  }
  *param_2 = *(undefined8 *)(param_1 + 0x28);
  return param_2;
}


==================================================================

### EXPORT FUNC 18001f1cc (180 bytes) name=FID_conflict:_InitCommonControlsEx

/* Library Function - Multiple Matches With Different Base Names
    public: int __cdecl CCommDlgWrapper::_GetOpenFileNameW(struct tagOFNW * __ptr64) __ptr64
    public: int __cdecl CComCtlWrapper::_InitCommonControlsEx(struct tagINITCOMMONCONTROLSEX *
   __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

BOOL __stdcall FID_conflict__InitCommonControlsEx(INITCOMMONCONTROLSEX *picce)

{
  undefined1 uVar1;
  int iVar2;
  int iVar3;
  DWORD dwErrCode;
  longlong lVar4;
  undefined7 extraout_var;
  undefined8 local_res20;
  undefined8 local_10;
  
  local_res20 = 0;
  lVar4 = FUN_180022bb4();
  uVar1 = FUN_180021f24(*(undefined8 *)(lVar4 + 0xd8),(longlong)&local_res20);
  iVar2 = (int)CONCAT71(extraout_var,uVar1);
  iVar3 = 0;
  if (iVar2 != 0) {
    FUN_18001f158((longlong)picce,&local_10);
    if (picce[5] == (INITCOMMONCONTROLSEX)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    iVar3 = (*(code *)picce[5])();
    if (iVar2 != 2) {
      if (iVar3 != 0) {
        dwErrCode = 0;
      }
      else {
        dwErrCode = GetLastError();
      }
      FUN_180021f08();
      if (iVar3 == 0) {
        SetLastError(dwErrCode);
      }
    }
  }
  return iVar3;
}


==================================================================

### EXPORT FUNC 18001f28c (72 bytes) name=FUN_18001f28c

void FUN_18001f28c(undefined8 param_1,longlong param_2)

{
  DWORD dwErrCode;
  bool bVar1;
  
  if (*(int *)(param_2 + 0x50) != 2) {
    bVar1 = *(int *)(param_2 + 0x20) != 0;
    if (bVar1) {
      dwErrCode = 0;
    }
    else {
      dwErrCode = GetLastError();
    }
    FUN_180021f08();
    if (!bVar1) {
      SetLastError(dwErrCode);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18001f2d4 (114 bytes) name=FUN_18001f2d4

undefined8 * FUN_18001f2d4(longlong param_1,undefined8 *param_2)

{
  HMODULE pHVar1;
  FARPROC pFVar2;
  
  if (*(longlong *)(param_1 + 0x38) == 0) {
    if (*(longlong *)(param_1 + 8) == 0) {
      pHVar1 = GetModuleHandleW(*(LPCWSTR *)(param_1 + 0x18));
      *(HMODULE *)(param_1 + 8) = pHVar1;
      if (pHVar1 == (HMODULE)0x0) {
        pHVar1 = LoadLibraryW(*(LPCWSTR *)(param_1 + 0x18));
        *(HMODULE *)(param_1 + 8) = pHVar1;
        *(bool *)(param_1 + 0x10) = pHVar1 != (HMODULE)0x0;
      }
    }
    pFVar2 = GetProcAddress(*(HMODULE *)(param_1 + 8),"GetSaveFileNameW");
    *(FARPROC *)(param_1 + 0x38) = pFVar2;
  }
  *param_2 = *(undefined8 *)(param_1 + 0x38);
  return param_2;
}


==================================================================

### EXPORT FUNC 18001f348 (180 bytes) name=FID_conflict:_GetSaveFileNameW

/* Library Function - Multiple Matches With Different Base Names
    public: int __cdecl CCommDlgWrapper::_GetSaveFileNameW(struct tagOFNW * __ptr64) __ptr64
    public: int __cdecl CComCtlWrapper::_ImageList_Destroy(struct _IMAGELIST * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

BOOL __stdcall FID_conflict__GetSaveFileNameW(LPOPENFILENAMEW param_1)

{
  undefined1 uVar1;
  int iVar2;
  int iVar3;
  DWORD dwErrCode;
  longlong lVar4;
  undefined7 extraout_var;
  undefined8 local_res20;
  undefined8 local_10;
  
  local_res20 = 0;
  lVar4 = FUN_180022bb4();
  uVar1 = FUN_180021f24(*(undefined8 *)(lVar4 + 0xd8),(longlong)&local_res20);
  iVar2 = (int)CONCAT71(extraout_var,uVar1);
  iVar3 = 0;
  if (iVar2 != 0) {
    FUN_18001f2d4((longlong)param_1,&local_10);
    if (*(code **)&param_1->nMaxFile == (code *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    iVar3 = (**(code **)&param_1->nMaxFile)();
    if (iVar2 != 2) {
      if (iVar3 != 0) {
        dwErrCode = 0;
      }
      else {
        dwErrCode = GetLastError();
      }
      FUN_180021f08();
      if (iVar3 == 0) {
        SetLastError(dwErrCode);
      }
    }
  }
  return iVar3;
}


==================================================================

### EXPORT FUNC 18001f408 (72 bytes) name=FUN_18001f408

void FUN_18001f408(undefined8 param_1,longlong param_2)

{
  DWORD dwErrCode;
  bool bVar1;
  
  if (*(int *)(param_2 + 0x50) != 2) {
    bVar1 = *(int *)(param_2 + 0x20) != 0;
    if (bVar1) {
      dwErrCode = 0;
    }
    else {
      dwErrCode = GetLastError();
    }
    FUN_180021f08();
    if (!bVar1) {
      SetLastError(dwErrCode);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18001f450 (375 bytes) name=FUN_18001f450

longlong FUN_18001f450(CDialog *param_1)

{
  bool bVar1;
  int iVar2;
  BOOL BVar3;
  HWND hWnd;
  HWND__ *pHVar4;
  longlong lVar5;
  longlong lVar6;
  
  iVar2 = lstrlenW(*(LPCWSTR *)(*(longlong *)(param_1 + 0xe8) + 0x30));
  FUN_1800357d0((ulonglong *)
                (*(longlong *)(*(longlong *)(param_1 + 0xe8) + 0x30) + (ulonglong)(iVar2 + 1U) * 2),
                0,(ulonglong)(*(int *)(*(longlong *)(param_1 + 0xe8) + 0x38) - (iVar2 + 1U)) * 2);
  hWnd = GetFocus();
  lVar5 = *(longlong *)(param_1 + 0xe8);
  bVar1 = false;
  pHVar4 = CDialog::PreModal(param_1);
  *(HWND__ **)(lVar5 + 8) = pHVar4;
  FUN_1800296fc();
  if (*(longlong *)(*(longlong *)(param_1 + 0xe8) + 8) != 0) {
    BVar3 = IsWindowEnabled(*(HWND *)(*(longlong *)(param_1 + 0xe8) + 8));
    if (BVar3 != 0) {
      bVar1 = true;
      EnableWindow(*(HWND *)(*(longlong *)(param_1 + 0xe8) + 8),0);
    }
  }
  lVar5 = FUN_1800222f4();
  if ((*(uint *)(*(longlong *)(param_1 + 0xe8) + 0x60) >> 0x13 & 1) == 0) {
    FUN_18002b980((longlong)param_1);
  }
  else {
    *(CDialog **)(lVar5 + 0x30) = param_1;
  }
  if (*(int *)(param_1 + 0xf0) == 0) {
    lVar6 = FUN_180022bb4();
    iVar2 = FID_conflict__GetSaveFileNameW(*(LPOPENFILENAMEW *)(*(longlong *)(lVar6 + 200) + 8));
  }
  else {
    lVar6 = FUN_180022bb4();
    iVar2 = FID_conflict__InitCommonControlsEx
                      (*(INITCOMMONCONTROLSEX **)(*(longlong *)(lVar6 + 200) + 8));
  }
  *(undefined8 *)(lVar5 + 0x30) = 0;
  if (bVar1) {
    EnableWindow(*(HWND *)(*(longlong *)(param_1 + 0xe8) + 8),1);
  }
  BVar3 = IsWindow(hWnd);
  if (BVar3 != 0) {
    SetFocus(hWnd);
  }
  CDialog::PostModal(param_1);
  lVar5 = 2;
  if ((longlong)iVar2 != 0) {
    lVar5 = (longlong)iVar2;
  }
  return lVar5;
}


==================================================================

### EXPORT FUNC 18001f5c8 (79 bytes) name=FUN_18001f5c8

void FUN_18001f5c8(CWnd *param_1)

{
  int *piVar1;
  int iVar2;
  longlong lVar3;
  
  *(undefined ***)param_1 = CFileDialog::vftable;
  FUN_180034a70(*(LPVOID *)(param_1 + 0xe8));
  lVar3 = *(longlong *)(param_1 + 0xf8);
  LOCK();
  piVar1 = (int *)(lVar3 + -8);
  iVar2 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
  }
  FUN_180024c40(param_1);
  return;
}


==================================================================

### EXPORT FUNC 18001f618 (13 bytes) name=FUN_18001f618

void FUN_18001f618(longlong param_1)

{
                    /* WARNING: Could not recover jumptable at 0x00018001f61e. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  EnableWindow(*(HWND *)(param_1 + 0x40),0);
  return;
}


==================================================================

### EXPORT FUNC 18001f628 (16 bytes) name=FUN_18001f628

void FUN_18001f628(longlong param_1)

{
                    /* WARNING: Could not recover jumptable at 0x00018001f631. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  EnableWindow(*(HWND *)(param_1 + 0x40),1);
  return;
}


==================================================================

### EXPORT FUNC 18001f638 (8 bytes) name=FUN_18001f638

void FUN_18001f638(CDialog *param_1,ushort param_2,CWnd *param_3)

{
  FUN_180025adc(param_1,(LPCWSTR)(ulonglong)param_2,param_3);
  return;
}


==================================================================

### EXPORT FUNC 18001f640 (47 bytes) name=FUN_18001f640

CWnd * FUN_18001f640(CWnd *param_1,uint param_2)

{
  FUN_18001f5c8(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18001f670 (705 bytes) name=FUN_18001f670

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

CDialog * FUN_18001f670(CDialog *param_1,int param_2,undefined8 param_3,short *param_4,uint param_5,
                       short *param_6,CWnd *param_7,uint param_8)

{
  CDialog *pCVar1;
  int iVar2;
  undefined **ppuVar3;
  longlong lVar4;
  ulonglong *puVar5;
  wchar_t *pwVar6;
  undefined1 auStack_198 [32];
  CDialog *local_178;
  undefined8 local_170;
  _OSVERSIONINFOW local_168;
  ulonglong local_48;
  
  local_170 = 0xfffffffffffffffe;
  local_48 = DAT_18006cea0 ^ (ulonglong)auStack_198;
  local_178 = param_1;
  CDialog::CDialog(param_1,0,param_7);
  *(undefined ***)param_1 = CFileDialog::vftable;
  ppuVar3 = FUN_18001fcc0();
  if (ppuVar3 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar4 = (**(code **)(*ppuVar3 + 0x18))();
  *(longlong *)(param_1 + 0xf8) = lVar4 + 0x18;
  if (param_8 == 0) {
    FUN_1800357d0((ulonglong *)&local_168,0,0x114);
    local_168.dwOSVersionInfoSize = 0x114;
    GetVersionExW(&local_168);
    if ((local_168.dwPlatformId == 2) && (4 < local_168.dwMajorVersion)) {
      param_8 = 0x98;
    }
    else {
      param_8 = 0x88;
    }
  }
  puVar5 = FUN_1800349a0((ulonglong)param_8);
  *(ulonglong **)(param_1 + 0xe8) = puVar5;
  if (puVar5 == (ulonglong *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed6c();
  }
  FUN_1800357d0(puVar5,0,(ulonglong)param_8);
  pCVar1 = param_1 + 0x180;
  *(short *)pCVar1 = 0;
  *(undefined2 *)(param_1 + 0x100) = 0;
  *(undefined8 *)(param_1 + 0x388) = 0;
  *(int *)(param_1 + 0xf0) = param_2;
  *(uint *)(param_1 + 0xa8) = 0x7005 - (uint)(param_2 != 0);
  **(uint **)(param_1 + 0xe8) = param_8;
  *(CDialog **)(*(longlong *)(param_1 + 0xe8) + 0x30) = pCVar1;
  *(undefined4 *)(*(longlong *)(param_1 + 0xe8) + 0x38) = 0x104;
  *(undefined8 *)(*(longlong *)(param_1 + 0xe8) + 0x68) = param_3;
  *(CDialog **)(*(longlong *)(param_1 + 0xe8) + 0x40) = param_1 + 0x100;
  *(undefined4 *)(*(longlong *)(param_1 + 0xe8) + 0x48) = 0x40;
  *(uint *)(*(longlong *)(param_1 + 0xe8) + 0x60) =
       *(uint *)(*(longlong *)(param_1 + 0xe8) + 0x60) | param_5 | 0x80020;
  if ((param_5 & 0x40) != 0) {
    *(uint *)(*(longlong *)(param_1 + 0xe8) + 0x60) =
         *(uint *)(*(longlong *)(param_1 + 0xe8) + 0x60) & 0xff7fffff;
  }
  lVar4 = FUN_180022bb4();
  *(undefined8 *)(*(longlong *)(param_1 + 0xe8) + 0x10) = *(undefined8 *)(lVar4 + 0x18);
  *(code **)(*(longlong *)(param_1 + 0xe8) + 0x78) = FUN_18002df0c;
  if ((param_4 != (short *)0x0) &&
     (iVar2 = FUN_1800354c0((short *)pCVar1,0x104,param_4,-1), iVar2 != 0)) {
    if (iVar2 == 0xc) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed6c();
    }
    if ((iVar2 == 0x16) || (iVar2 == 0x22)) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    if (iVar2 != 0x50) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
  }
  if (param_6 != (short *)0x0) {
    lVar4 = FUN_1800355e0(param_6);
    FUN_18000b480((longlong *)(param_1 + 0xf8),param_6,(int)lVar4);
    if ((int)(*(uint *)(*(longlong *)(param_1 + 0xf8) + -0xc) |
             1U - *(int *)(*(longlong *)(param_1 + 0xf8) + -8)) < 0) {
      FUN_18000b190((longlong *)(param_1 + 0xf8),0);
    }
    for (pwVar6 = wcschr(*(wchar_t **)(param_1 + 0xf8),L'|'); pwVar6 != (wchar_t *)0x0;
        pwVar6 = wcschr(pwVar6 + 1,L'|')) {
      *pwVar6 = L'\0';
    }
    *(undefined8 *)(*(longlong *)(param_1 + 0xe8) + 0x18) = *(undefined8 *)(param_1 + 0xf8);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18001f940 (24 bytes) name=Unwind@18001f940

void Unwind_18001f940(undefined8 param_1,longlong param_2)

{
  thunk_FUN_180024c40(*(CWnd **)(param_2 + 0x20));
  return;
}


==================================================================

### EXPORT FUNC 18001f960 (31 bytes) name=Unwind@18001f960

void Unwind_18001f960(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(*(longlong *)(param_2 + 0x20) + 0xf8));
  return;
}


==================================================================

### EXPORT FUNC 18001f980 (544 bytes) name=FUN_18001f980

longlong * FUN_18001f980(longlong param_1,longlong *param_2)

{
  int *piVar1;
  int iVar2;
  undefined **ppuVar3;
  longlong lVar4;
  HWND pHVar5;
  CWnd *pCVar6;
  LRESULT LVar7;
  longlong *plVar8;
  short *lParam;
  short *local_res8;
  
  local_res8 = (short *)((ulonglong)local_res8 & 0xffffffff00000000);
  if (((*(uint *)(*(longlong *)(param_1 + 0xe8) + 0x60) >> 0x13 & 1) != 0) &&
     (*(longlong *)(param_1 + 0x40) != 0)) {
    ppuVar3 = FUN_18001fcc0();
    if (ppuVar3 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7fffbffb);
    }
    lVar4 = (**(code **)(*ppuVar3 + 0x18))(ppuVar3);
    local_res8 = (short *)(lVar4 + 0x18);
    if ((int)(*(int *)(lVar4 + 0xc) - 0x104U | 1U - *(int *)(lVar4 + 0x10)) < 0) {
      FUN_18000b190((longlong *)&local_res8,0x104);
    }
    lParam = local_res8;
    pHVar5 = GetParent(*(HWND *)(param_1 + 0x40));
    pCVar6 = CWnd::FromHandle(pHVar5);
    LVar7 = SendMessageW(*(HWND *)(pCVar6 + 0x40),0x464,0x104,(LPARAM)lParam);
    if (LVar7 < 0) {
      FUN_18000aec0((longlong *)&local_res8);
      lParam = local_res8;
    }
    else {
      if (lParam == (short *)0x0) {
        iVar2 = 0;
      }
      else {
        lVar4 = FUN_1800355e0(lParam);
        iVar2 = (int)lVar4;
        if (iVar2 < 0) goto LAB_18001fb6f;
      }
      if (*(int *)(lParam + -6) < iVar2) {
LAB_18001fb6f:
                    /* WARNING: Subroutine does not return */
        FUN_18000b170(-0x7ff8ffa9);
      }
      *(int *)(lParam + -8) = iVar2;
      lParam[iVar2] = 0;
    }
    if (*(int *)(lParam + -8) != 0) {
      if ((int)(*(int *)(lParam + -6) - 0x104U | 1U - *(int *)(lParam + -4)) < 0) {
        FUN_18000b190((longlong *)&local_res8,0x104);
        lParam = local_res8;
      }
      pHVar5 = GetParent(*(HWND *)(param_1 + 0x40));
      pCVar6 = CWnd::FromHandle(pHVar5);
      LVar7 = SendMessageW(*(HWND *)(pCVar6 + 0x40),0x465,0x104,(LPARAM)lParam);
      if (-1 < LVar7) {
        if (lParam == (short *)0x0) {
          iVar2 = 0;
        }
        else {
          lVar4 = FUN_1800355e0(lParam);
          iVar2 = (int)lVar4;
          if (iVar2 < 0) goto LAB_18001fb46;
        }
        if (iVar2 <= *(int *)(lParam + -6)) {
          *(int *)(lParam + -8) = iVar2;
          lParam[iVar2] = 0;
          plVar8 = FUN_18000b300((longlong *)(lParam + -0xc));
          *param_2 = (longlong)(plVar8 + 3);
          LOCK();
          piVar1 = (int *)(lParam + -4);
          iVar2 = *piVar1;
          *piVar1 = *piVar1 + -1;
          UNLOCK();
          if (0 < iVar2 + -1) {
            return param_2;
          }
          (**(code **)(**(longlong **)(lParam + -0xc) + 8))
                    (*(longlong **)(lParam + -0xc),lParam + -0xc);
          return param_2;
        }
LAB_18001fb46:
                    /* WARNING: Subroutine does not return */
        FUN_18000b170(-0x7ff8ffa9);
      }
      FUN_18000aec0((longlong *)&local_res8);
      lParam = local_res8;
    }
    LOCK();
    piVar1 = (int *)(lParam + -4);
    iVar2 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar2 + -1 < 1) {
      (**(code **)(**(longlong **)(lParam + -0xc) + 8))();
    }
  }
  FUN_18000b610(param_2,*(short **)(*(longlong *)(param_1 + 0xe8) + 0x30));
  return param_2;
}


==================================================================

### EXPORT FUNC 18001fbb0 (24 bytes) name=Unwind@18001fbb0

void Unwind_18001fbb0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 18001fbc8 (222 bytes) name=FUN_18001fbc8

uint FUN_18001fbc8(uint param_1,ulonglong *param_2,int param_3)

{
  HMODULE hModule;
  int iVar1;
  longlong lVar2;
  HRSRC pHVar3;
  ushort *puVar4;
  undefined8 uVar5;
  uint uVar6;
  uint uVar7;
  
  if ((param_2 == (ulonglong *)0x0) || (param_3 == 0)) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  lVar2 = FUN_180022bb4();
  hModule = *(HMODULE *)(lVar2 + 0x18);
  pHVar3 = FindResourceW(hModule,(LPCWSTR)(ulonglong)(ushort)((short)(param_1 >> 4) + 1),
                         (LPCWSTR)0x6);
  if ((pHVar3 != (HRSRC)0x0) &&
     (puVar4 = FUN_18000b0d0(hModule,pHVar3,param_1), puVar4 != (ushort *)0x0)) {
    uVar6 = param_3 - 1;
    uVar7 = (uint)*puVar4;
    if (uVar6 < *puVar4) {
      uVar7 = uVar6;
    }
    uVar5 = FUN_180032c60(param_2,(ulonglong)uVar6 * 2,puVar4 + 1,(longlong)(int)uVar7 * 2);
    iVar1 = (int)uVar5;
    if (iVar1 != 0) {
      if (iVar1 == 0xc) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed6c();
      }
      if ((iVar1 == 0x16) || (iVar1 == 0x22)) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      if (iVar1 != 0x50) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
    }
    *(undefined2 *)((longlong)(int)uVar7 * 2 + (longlong)param_2) = 0;
    return uVar7;
  }
  *(undefined2 *)param_2 = 0;
  return 0;
}


==================================================================

### EXPORT FUNC 18001fcac (18 bytes) name=FUN_18001fcac

undefined8 FUN_18001fcac(void)

{
  longlong lVar1;
  
  lVar1 = FUN_180022bb4();
  return *(undefined8 *)(lVar1 + 0x18);
}


==================================================================

### EXPORT FUNC 18001fcc0 (8 bytes) name=FUN_18001fcc0

undefined ** FUN_18001fcc0(void)

{
  return &PTR_vftable_18006c608;
}


==================================================================

### EXPORT FUNC 18001fcc8 (75 bytes) name=FUN_18001fcc8

undefined8 * FUN_18001fcc8(undefined8 param_1,int param_2,int param_3)

{
  undefined8 *puVar1;
  
  if ((-1 < param_2) &&
     (puVar1 = FUN_1800349a0((longlong)((param_2 + 1) * param_3) + 0x18),
     puVar1 != (undefined8 *)0x0)) {
    *(undefined4 *)(puVar1 + 1) = 0;
    *puVar1 = param_1;
    *(undefined4 *)(puVar1 + 2) = 1;
    *(int *)((longlong)puVar1 + 0xc) = param_2;
    return puVar1;
  }
  return (undefined8 *)0x0;
}


==================================================================

### EXPORT FUNC 18001fd14 (8 bytes) name=FUN_18001fd14

void FUN_18001fd14(undefined8 param_1,LPVOID param_2)

{
  FUN_180034a70(param_2);
  return;
}


==================================================================

### EXPORT FUNC 18001fd1c (56 bytes) name=Reallocate

/* Library Function - Single Match
    public: virtual struct ATL::CStringData * __ptr64 __cdecl CAfxStringMgr::Reallocate(struct
   ATL::CStringData * __ptr64,int,int) __ptr64
   
   Library: Visual Studio */

CStringData * __thiscall
CAfxStringMgr::Reallocate(CAfxStringMgr *this,CStringData *param_1,int param_2,int param_3)

{
  CStringData *pCVar1;
  
  if ((-1 < param_2) &&
     (pCVar1 = FUN_180035950(param_1,(longlong)((param_2 + 1) * param_3) + 0x18),
     pCVar1 != (CStringData *)0x0)) {
    *(int *)(pCVar1 + 0xc) = param_2;
    return pCVar1;
  }
  return (CStringData *)0x0;
}


==================================================================

### EXPORT FUNC 18001fd54 (4 bytes) name=FUN_18001fd54

undefined8 FUN_18001fd54(undefined8 param_1)

{
  return param_1;
}


==================================================================

### EXPORT FUNC 18001fd58 (10 bytes) name=FUN_18001fd58

longlong FUN_18001fd58(longlong param_1)

{
  LOCK();
  *(int *)(param_1 + 0x18) = *(int *)(param_1 + 0x18) + 1;
  UNLOCK();
  return param_1 + 8;
}


==================================================================

### EXPORT FUNC 18001fd64 (8 bytes) name=FUN_18001fd64

undefined ** FUN_18001fd64(void)

{
  return &PTR_s_CFile_180054198;
}


==================================================================

### EXPORT FUNC 18001fd6c (73 bytes) name=FUN_18001fd6c

DWORD FUN_18001fd6c(longlong param_1,LPVOID param_2,DWORD param_3)

{
  short *psVar1;
  BOOL BVar2;
  DWORD DVar3;
  DWORD local_res18 [4];
  
  if (param_3 == 0) {
    local_res18[0] = 0;
  }
  else {
    BVar2 = ReadFile(*(HANDLE *)(param_1 + 8),param_2,param_3,local_res18,(LPOVERLAPPED)0x0);
    if (BVar2 == 0) {
      psVar1 = *(short **)(param_1 + 0x18);
      DVar3 = GetLastError();
      ThrowOsError(DVar3,psVar1);
    }
  }
  return local_res18[0];
}


==================================================================

### EXPORT FUNC 18001fdb8 (108 bytes) name=Write

/* Library Function - Single Match
    public: virtual void __cdecl CFile::Write(void const * __ptr64,unsigned int) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

void __thiscall CFile::Write(CFile *this,void *param_1,uint param_2)

{
  short *psVar1;
  code *pcVar2;
  BOOL BVar3;
  DWORD DVar4;
  uint local_res18 [4];
  
  if (param_2 != 0) {
    BVar3 = WriteFile(*(HANDLE *)(this + 8),param_1,param_2,local_res18,(LPOVERLAPPED)0x0);
    if (BVar3 == 0) {
      psVar1 = *(short **)(this + 0x18);
      DVar4 = GetLastError();
      ThrowOsError(DVar4,psVar1);
    }
    if (local_res18[0] != param_2) {
      FUN_18002f3ac(0xd,0xffffffff,*(short **)(this + 0x18));
      pcVar2 = (code *)swi(3);
      (*pcVar2)();
      return;
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18001fe24 (82 bytes) name=Seek

/* Library Function - Single Match
    public: virtual unsigned __int64 __cdecl CFile::Seek(__int64,unsigned int) __ptr64
   
   Library: Visual Studio 2005 Release */

__uint64 __thiscall CFile::Seek(CFile *this,__int64 param_1,uint param_2)

{
  short *psVar1;
  DWORD DVar2;
  undefined8 local_res8;
  
  local_res8 = param_1;
  DVar2 = SetFilePointer(*(HANDLE *)(this + 8),(LONG)param_1,(PLONG)((longlong)&local_res8 + 4),
                         param_2);
  local_res8 = CONCAT44(local_res8._4_4_,DVar2);
  if (DVar2 == 0xffffffff) {
    DVar2 = GetLastError();
    if (DVar2 != 0) {
      psVar1 = *(short **)(this + 0x18);
      DVar2 = GetLastError();
      ThrowOsError(DVar2,psVar1);
    }
  }
  return local_res8;
}


==================================================================

### EXPORT FUNC 18001fe78 (88 bytes) name=FUN_18001fe78

undefined8 FUN_18001fe78(longlong param_1)

{
  short *psVar1;
  DWORD DVar2;
  undefined8 local_res8;
  
  local_res8 = 0;
  DVar2 = SetFilePointer(*(HANDLE *)(param_1 + 8),0,(PLONG)((longlong)&local_res8 + 4),1);
  local_res8 = CONCAT44(local_res8._4_4_,DVar2);
  if (DVar2 == 0xffffffff) {
    DVar2 = GetLastError();
    if (DVar2 != 0) {
      psVar1 = *(short **)(param_1 + 0x18);
      DVar2 = GetLastError();
      ThrowOsError(DVar2,psVar1);
    }
  }
  return local_res8;
}


==================================================================

### EXPORT FUNC 18001fed0 (55 bytes) name=Flush

/* Library Function - Single Match
    public: virtual void __cdecl CFile::Flush(void) __ptr64
   
   Library: Visual Studio 2005 Release */

void __thiscall CFile::Flush(CFile *this)

{
  short *psVar1;
  BOOL BVar2;
  DWORD DVar3;
  
  if (*(HANDLE *)(this + 8) != (HANDLE)0xffffffffffffffff) {
    BVar2 = FlushFileBuffers(*(HANDLE *)(this + 8));
    if (BVar2 == 0) {
      psVar1 = *(short **)(this + 0x18);
      DVar3 = GetLastError();
      ThrowOsError(DVar3,psVar1);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18001ff08 (70 bytes) name=FID_conflict:UnlockRange

/* Library Function - Multiple Matches With Different Base Names
    public: virtual void __cdecl CFile::LockRange(unsigned __int64,unsigned __int64) __ptr64
    public: virtual void __cdecl CFile::UnlockRange(unsigned __int64,unsigned __int64) __ptr64
   
   Library: Visual Studio 2005 Release */

void FID_conflict_UnlockRange(longlong param_1,undefined8 param_2,undefined8 param_3)

{
  short *psVar1;
  BOOL BVar2;
  DWORD DVar3;
  
  BVar2 = LockFile(*(HANDLE *)(param_1 + 8),(DWORD)param_2,(DWORD)((ulonglong)param_2 >> 0x20),
                   (DWORD)param_3,(DWORD)((ulonglong)param_3 >> 0x20));
  if (BVar2 == 0) {
    psVar1 = *(short **)(param_1 + 0x18);
    DVar3 = GetLastError();
    ThrowOsError(DVar3,psVar1);
  }
  return;
}


==================================================================

### EXPORT FUNC 18001ff50 (70 bytes) name=FID_conflict:UnlockRange

/* Library Function - Multiple Matches With Different Base Names
    public: virtual void __cdecl CFile::LockRange(unsigned __int64,unsigned __int64) __ptr64
    public: virtual void __cdecl CFile::UnlockRange(unsigned __int64,unsigned __int64) __ptr64
   
   Library: Visual Studio 2005 Release */

void FID_conflict_UnlockRange(longlong param_1,undefined8 param_2,undefined8 param_3)

{
  short *psVar1;
  BOOL BVar2;
  DWORD DVar3;
  
  BVar2 = UnlockFile(*(HANDLE *)(param_1 + 8),(DWORD)param_2,(DWORD)((ulonglong)param_2 >> 0x20),
                     (DWORD)param_3,(DWORD)((ulonglong)param_3 >> 0x20));
  if (BVar2 == 0) {
    psVar1 = *(short **)(param_1 + 0x18);
    DVar3 = GetLastError();
    ThrowOsError(DVar3,psVar1);
  }
  return;
}


==================================================================

### EXPORT FUNC 18001ff98 (58 bytes) name=SetLength

/* Library Function - Single Match
    public: virtual void __cdecl CFile::SetLength(unsigned __int64) __ptr64
   
   Library: Visual Studio 2005 Release */

void __thiscall CFile::SetLength(CFile *this,__uint64 param_1)

{
  short *psVar1;
  BOOL BVar2;
  DWORD DVar3;
  
  (**(code **)(*(longlong *)this + 0x50))(this,param_1,0);
  BVar2 = SetEndOfFile(*(HANDLE *)(this + 8));
  if (BVar2 == 0) {
    psVar1 = *(short **)(this + 0x18);
    DVar3 = GetLastError();
    ThrowOsError(DVar3,psVar1);
  }
  return;
}


==================================================================

### EXPORT FUNC 18001ffd4 (74 bytes) name=GetLength

/* Library Function - Single Match
    public: virtual unsigned __int64 __cdecl CFile::GetLength(void)const __ptr64
   
   Library: Visual Studio 2005 Release */

__uint64 __thiscall CFile::GetLength(CFile *this)

{
  short *psVar1;
  DWORD DVar2;
  DWORD DVar3;
  DWORD aDStackX_c [7];
  
  DVar2 = GetFileSize(*(HANDLE *)(this + 8),aDStackX_c);
  if (DVar2 == 0xffffffff) {
    DVar3 = GetLastError();
    if (DVar3 != 0) {
      psVar1 = *(short **)(this + 0x18);
      DVar3 = GetLastError();
      ThrowOsError(DVar3,psVar1);
    }
  }
  return CONCAT44(aDStackX_c[0],DVar2);
}


==================================================================

### EXPORT FUNC 180020020 (144 bytes) name=AfxGetFileTitle

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    unsigned int __cdecl AfxGetFileTitle(wchar_t const * __ptr64,wchar_t * __ptr64,unsigned int)
   
   Library: Visual Studio 2005 Release */

uint __cdecl AfxGetFileTitle(wchar_t *param_1,wchar_t *param_2,uint param_3)

{
  short sVar1;
  uint uVar2;
  int iVar3;
  WCHAR *Buf;
  undefined1 auStack_268 [32];
  WCHAR local_248 [264];
  ulonglong local_38;
  
  local_38 = DAT_18006cea0 ^ (ulonglong)auStack_268;
  uVar2 = 0;
  Buf = param_2;
  if (param_2 == (wchar_t *)0x0) {
    Buf = local_248;
    param_3 = 0x104;
  }
  sVar1 = GetFileTitleW(param_1,Buf,(WORD)param_3);
  if (sVar1 == 0) {
    if (param_2 == (wchar_t *)0x0) {
      iVar3 = lstrlenW(Buf);
      uVar2 = iVar3 + 1;
    }
  }
  else {
    uVar2 = FUN_180024240(param_1,param_2,(ulonglong)param_3);
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 1800200b0 (90 bytes) name=Close

/* Library Function - Single Match
    public: virtual void __cdecl CFile::Close(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

void __thiscall CFile::Close(CFile *this)

{
  short *psVar1;
  BOOL BVar2;
  DWORD DVar3;
  bool bVar4;
  
  bVar4 = false;
  if (*(HANDLE *)(this + 8) != (HANDLE)0xffffffffffffffff) {
    BVar2 = CloseHandle(*(HANDLE *)(this + 8));
    bVar4 = BVar2 == 0;
  }
  *(undefined8 *)(this + 8) = 0xffffffffffffffff;
  *(undefined4 *)(this + 0x10) = 0;
  FUN_18000aec0((longlong *)(this + 0x18));
  if (bVar4) {
    psVar1 = *(short **)(this + 0x18);
    DVar3 = GetLastError();
    ThrowOsError(DVar3,psVar1);
  }
  return;
}


==================================================================

### EXPORT FUNC 18002010c (44 bytes) name=Abort

/* Library Function - Single Match
    public: virtual void __cdecl CFile::Abort(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release,
   Visual Studio 2015 Release */

void __thiscall CFile::Abort(CFile *this)

{
  if (*(HANDLE *)(this + 8) != (HANDLE)0xffffffffffffffff) {
    CloseHandle(*(HANDLE *)(this + 8));
    *(undefined8 *)(this + 8) = 0xffffffffffffffff;
  }
  FUN_18000aec0((longlong *)(this + 0x18));
  return;
}


==================================================================

### EXPORT FUNC 180020138 (74 bytes) name=FUN_180020138

undefined8 * FUN_180020138(undefined8 *param_1)

{
  undefined **ppuVar1;
  longlong lVar2;
  
  *param_1 = CFile::vftable;
  ppuVar1 = FUN_18001fcc0();
  if (ppuVar1 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar2 = (**(code **)(*ppuVar1 + 0x18))(ppuVar1);
  param_1[3] = lVar2 + 0x18;
  param_1[1] = 0xffffffffffffffff;
  *(undefined4 *)(param_1 + 2) = 0;
  return param_1;
}


==================================================================

### EXPORT FUNC 180020184 (194 bytes) name=Duplicate

/* Library Function - Single Match
    public: virtual class CFile * __ptr64 __cdecl CFile::Duplicate(void)const __ptr64
   
   Library: Visual Studio 2008 Release */

CFile * __thiscall CFile::Duplicate(CFile *this)

{
  short *psVar1;
  BOOL BVar2;
  DWORD DVar3;
  CFile *pCVar4;
  HANDLE hTargetProcessHandle;
  HANDLE hSourceProcessHandle;
  HANDLE local_res8;
  undefined8 *local_res10;
  
  local_res10 = FUN_18001eb74(0x20);
  if (local_res10 == (undefined8 *)0x0) {
    pCVar4 = (CFile *)0x0;
  }
  else {
    pCVar4 = (CFile *)FUN_180020138(local_res10);
  }
  hTargetProcessHandle = GetCurrentProcess();
  hSourceProcessHandle = GetCurrentProcess();
  BVar2 = DuplicateHandle(hSourceProcessHandle,*(HANDLE *)(this + 8),hTargetProcessHandle,
                          &local_res8,0,0,2);
  if (BVar2 == 0) {
    if (pCVar4 != (CFile *)0x0) {
      (**(code **)(*(longlong *)pCVar4 + 8))(pCVar4,1);
    }
    psVar1 = *(short **)(this + 0x18);
    DVar3 = GetLastError();
    ThrowOsError(DVar3,psVar1);
  }
  *(HANDLE *)(pCVar4 + 8) = local_res8;
  *(undefined4 *)(pCVar4 + 0x10) = *(undefined4 *)(this + 0x10);
  return pCVar4;
}


==================================================================

### EXPORT FUNC 180020254 (24 bytes) name=Unwind@180020254

void Unwind_180020254(undefined8 param_1,longlong param_2)

{
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x68));
  return;
}


==================================================================

### EXPORT FUNC 18002026c (220 bytes) name=FUN_18002026c

void FUN_18002026c(short *param_1,longlong *param_2)

{
  LPWSTR pszPath;
  int iVar1;
  longlong lVar2;
  
  if ((int)(1U - *(int *)(*param_2 + -8) | *(int *)(*param_2 + -0xc) - 0x104U) < 0) {
    FUN_18000b190(param_2,0x104);
  }
  pszPath = (LPWSTR)*param_2;
  FUN_1800357d0((ulonglong *)pszPath,0,0x104);
  iVar1 = FUN_1800354c0(pszPath,0x104,param_1,-1);
  if (iVar1 != 0) {
    if (iVar1 == 0xc) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed6c();
    }
    if ((iVar1 == 0x16) || (iVar1 == 0x22)) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    if (iVar1 != 0x50) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
  }
  PathStripToRootW(pszPath);
  if ((short *)*param_2 == (short *)0x0) {
    iVar1 = 0;
  }
  else {
    lVar2 = FUN_1800355e0((short *)*param_2);
    iVar1 = (int)lVar2;
    if (iVar1 < 0) goto LAB_180020341;
  }
  if (iVar1 <= *(int *)(*param_2 + -0xc)) {
    *(int *)(*param_2 + -0x10) = iVar1;
    *(undefined2 *)(*param_2 + (longlong)iVar1 * 2) = 0;
    return;
  }
LAB_180020341:
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8ffa9);
}


==================================================================

### EXPORT FUNC 18002034c (85 bytes) name=FUN_18002034c

undefined8 * FUN_18002034c(undefined8 *param_1,uint param_2)

{
  int *piVar1;
  int iVar2;
  longlong lVar3;
  
  lVar3 = param_1[3];
  *param_1 = CFileException::vftable;
  LOCK();
  piVar1 = (int *)(lVar3 + -8);
  iVar2 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
  }
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 1800203a4 (132 bytes) name=FUN_1800203a4

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

void FUN_1800203a4(CFile *param_1)

{
  int *piVar1;
  int iVar2;
  longlong lVar3;
  undefined1 auStack_468 [56];
  CFile *local_430;
  undefined8 local_420;
  ulonglong local_18;
  
  local_420 = 0xfffffffffffffffe;
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_468;
  *(undefined ***)param_1 = CFile::vftable;
  local_430 = param_1;
  if ((*(longlong *)(param_1 + 8) != -1) && (*(int *)(param_1 + 0x10) != 0)) {
    CFile::Close(param_1);
  }
  lVar3 = *(longlong *)(param_1 + 0x18);
  LOCK();
  piVar1 = (int *)(lVar3 + -8);
  iVar2 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
  }
  return;
}


==================================================================

### EXPORT FUNC 180020434 (28 bytes) name=Unwind@180020434

void Unwind_180020434(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(*(longlong *)(param_2 + 0x38) + 0x18));
  return;
}


==================================================================

### EXPORT FUNC 180020454 (253 bytes) name=Catch@180020454

undefined * Catch_180020454(undefined8 param_1,longlong param_2)

{
  wchar_t *pwVar1;
  wchar_t *pwVar2;
  int iVar3;
  undefined **ppuVar4;
  longlong lVar5;
  
  ppuVar4 = FUN_18001fcc0();
  if (ppuVar4 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar5 = (**(code **)(*ppuVar4 + 0x18))(ppuVar4);
  *(longlong *)(param_2 + 0x30) = lVar5 + 0x18;
  iVar3 = (**(code **)(**(longlong **)(param_2 + 0x40) + 0x18))
                    (*(longlong **)(param_2 + 0x40),param_2 + 0x50,0x200,0);
  if (iVar3 == 0) {
    FUN_18001ad00((longlong *)(param_2 + 0x30),L"%s (%s:%d)","Exception thrown in destructor",
                  "f:\\sp\\vctools\\vc7libs\\ship\\atlmfc\\src\\mfc\\filecore.cpp");
  }
  else {
    FUN_18001ad00((longlong *)(param_2 + 0x30),L"%s (%s:%d)\n%s","Exception thrown in destructor",
                  "f:\\sp\\vctools\\vc7libs\\ship\\atlmfc\\src\\mfc\\filecore.cpp");
  }
  pwVar2 = *(wchar_t **)(param_2 + 0x30);
  AfxMessageBox(pwVar2,0,0);
  LOCK();
  pwVar1 = pwVar2 + -4;
  iVar3 = *(int *)pwVar1;
  *(int *)pwVar1 = *(int *)pwVar1 + -1;
  UNLOCK();
  if (iVar3 + -1 < 1) {
    (**(code **)(**(longlong **)(pwVar2 + -0xc) + 8))();
  }
  (**(code **)(**(longlong **)(param_2 + 0x40) + 8))(*(longlong **)(param_2 + 0x40),1);
  return &DAT_1800203ef;
}


==================================================================

### EXPORT FUNC 180020554 (24 bytes) name=Unwind@180020554

void Unwind_180020554(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 18002056c (47 bytes) name=FUN_18002056c

CFile * FUN_18002056c(CFile *param_1,uint param_2)

{
  FUN_1800203a4(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18002059c (93 bytes) name=FUN_18002059c

void FUN_18002059c(longlong param_1,short *param_2)

{
  DWORD DVar1;
  int iVar2;
  longlong lVar3;
  int iVar4;
  
  iVar4 = 0;
  if (param_1 != 0) {
    DVar1 = GetLastError();
    *(DWORD *)(param_1 + 0x14) = DVar1;
    iVar2 = CFileException::OsErrorToException(DVar1);
    *(int *)(param_1 + 0x10) = iVar2;
    if (param_2 != (short *)0x0) {
      lVar3 = FUN_1800355e0(param_2);
      iVar4 = (int)lVar3;
    }
    FUN_18000b480((longlong *)(param_1 + 0x18),param_2,iVar4);
  }
  return;
}


==================================================================

### EXPORT FUNC 1800205fc (810 bytes) name=FUN_1800205fc

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8 FUN_1800205fc(LPWSTR param_1,LPCWSTR param_2,longlong param_3)

{
  LPCWSTR pWVar1;
  LPCWSTR lpRootPathName;
  DWORD DVar2;
  int iVar3;
  BOOL BVar4;
  int iVar5;
  errno_t eVar6;
  longlong lVar7;
  undefined **ppuVar8;
  HANDLE hFindFile;
  undefined8 uVar9;
  int iVar10;
  undefined1 auStackY_2f8 [32];
  uint local_2b8 [2];
  LPWSTR local_2b0;
  LPCWSTR local_2a8;
  DWORD local_2a0 [2];
  undefined8 local_298;
  _WIN32_FIND_DATAW local_288;
  ulonglong local_38;
  
  local_298 = 0xfffffffffffffffe;
  local_38 = DAT_18006cea0 ^ (ulonglong)auStackY_2f8;
  iVar5 = 0;
  iVar3 = 0;
  if (param_1 == (LPWSTR)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (param_2 == (LPCWSTR)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  DVar2 = GetFullPathNameW(param_2,0x104,param_1,&local_2b0);
  if (DVar2 == 0) {
    iVar3 = FUN_1800354c0(param_1,0x104,param_2,-1);
    if (iVar3 != 0) {
      if (iVar3 == 0xc) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed6c();
      }
      if ((iVar3 == 0x16) || (iVar3 == 0x22)) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      if (iVar3 != 0x50) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
    }
    FUN_18002059c(param_3,param_2);
    uVar9 = 0;
  }
  else if (DVar2 < 0x104) {
    ppuVar8 = FUN_18001fcc0();
    if (ppuVar8 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7fffbffb);
    }
    lVar7 = (**(code **)(*ppuVar8 + 0x18))(ppuVar8);
    local_2a8 = (LPCWSTR)(lVar7 + 0x18);
    FUN_18002026c(param_1,(longlong *)&local_2a8);
    lpRootPathName = local_2a8;
    BVar4 = PathIsUNCW(local_2a8);
    if (BVar4 == 0) {
      BVar4 = GetVolumeInformationW
                        (lpRootPathName,(LPWSTR)0x0,0,(LPDWORD)0x0,local_2a0,local_2b8,(LPWSTR)0x0,0
                        );
      if (BVar4 == 0) {
        FUN_18002059c(param_3,param_2);
        LOCK();
        pWVar1 = lpRootPathName + -4;
        iVar3 = *(int *)pWVar1;
        *(int *)pWVar1 = *(int *)pWVar1 + -1;
        UNLOCK();
        if (iVar3 + -1 < 1) {
          (**(code **)(**(longlong **)(lpRootPathName + -0xc) + 8))();
        }
        return 0;
      }
      if ((local_2b8[0] & 2) == 0) {
        CharUpperW(param_1);
      }
      if (((local_2b8[0] & 4) == 0) &&
         (hFindFile = FindFirstFileW(param_2,&local_288), hFindFile != (HANDLE)0xffffffffffffffff))
      {
        FindClose(hFindFile);
        if ((local_2b0 == (LPWSTR)0x0) || (local_2b0 <= param_1)) {
          FUN_18002059c(param_3,param_2);
          LOCK();
          pWVar1 = lpRootPathName + -4;
          iVar3 = *(int *)pWVar1;
          *(int *)pWVar1 = *(int *)pWVar1 + -1;
          UNLOCK();
          if (iVar3 + -1 < 1) {
            (**(code **)(**(longlong **)(lpRootPathName + -0xc) + 8))();
          }
          return 0;
        }
        iVar5 = lstrlenW(local_288.cFileName);
        iVar10 = (int)((longlong)local_2b0 - (longlong)param_1 >> 1);
        if (0x103 < iVar5 + iVar10) {
          if (param_3 != 0) {
            *(undefined4 *)(param_3 + 0x10) = 3;
            if (param_2 != (LPCWSTR)0x0) {
              lVar7 = FUN_1800355e0(param_2);
              iVar3 = (int)lVar7;
            }
            FUN_18000b480((longlong *)(param_3 + 0x18),param_2,iVar3);
          }
          LOCK();
          pWVar1 = lpRootPathName + -4;
          iVar3 = *(int *)pWVar1;
          *(int *)pWVar1 = *(int *)pWVar1 + -1;
          UNLOCK();
          if (iVar3 + -1 < 1) {
            (**(code **)(**(longlong **)(lpRootPathName + -0xc) + 8))();
          }
          return 0;
        }
        eVar6 = wcscpy_s(local_2b0,(longlong)(0x104 - iVar10),local_288.cFileName);
        if (eVar6 != 0) {
          if (eVar6 == 0xc) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed6c();
          }
          if ((eVar6 == 0x16) || (eVar6 == 0x22)) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed90();
          }
          if (eVar6 != 0x50) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed90();
          }
        }
      }
    }
    LOCK();
    pWVar1 = lpRootPathName + -4;
    iVar3 = *(int *)pWVar1;
    *(int *)pWVar1 = *(int *)pWVar1 + -1;
    UNLOCK();
    if (iVar3 + -1 < 1) {
      (**(code **)(**(longlong **)(lpRootPathName + -0xc) + 8))();
    }
    uVar9 = 1;
  }
  else {
    if (param_3 != 0) {
      *(undefined4 *)(param_3 + 0x10) = 3;
      if (param_2 != (LPCWSTR)0x0) {
        lVar7 = FUN_1800355e0(param_2);
        iVar5 = (int)lVar7;
      }
      FUN_18000b480((longlong *)(param_3 + 0x18),param_2,iVar5);
    }
    uVar9 = 0;
  }
  return uVar9;
}


==================================================================

### EXPORT FUNC 18002093c (24 bytes) name=Unwind@18002093c

void Unwind_18002093c(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 180020954 (180 bytes) name=FUN_180020954

undefined8 * FUN_180020954(undefined8 *param_1,undefined4 param_2,undefined4 param_3,short *param_4)

{
  undefined **ppuVar1;
  longlong lVar2;
  int iVar3;
  
  FUN_18001ee0c((longlong)param_1);
  *param_1 = CFileException::vftable;
  ppuVar1 = FUN_18001fcc0();
  iVar3 = 0;
  if (ppuVar1 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar2 = (**(code **)(*ppuVar1 + 0x18))(ppuVar1);
  param_1[3] = lVar2 + 0x18;
  *(undefined4 *)(param_1 + 2) = param_2;
  *(undefined4 *)((longlong)param_1 + 0x14) = param_3;
  if (param_4 != (short *)0x0) {
    lVar2 = FUN_1800355e0(param_4);
    iVar3 = (int)lVar2;
  }
  FUN_18000b480(param_1 + 3,param_4,iVar3);
  return param_1;
}


==================================================================

### EXPORT FUNC 180020a14 (28 bytes) name=Unwind@180020a14

void Unwind_180020a14(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(*(longlong *)(param_2 + 0x50) + 0x18));
  return;
}


==================================================================

### EXPORT FUNC 180020a30 (59 bytes) name=FUN_180020a30

void FUN_180020a30(longlong param_1,short *param_2)

{
  longlong lVar1;
  
  if (param_2 != (short *)0x0) {
    lVar1 = FUN_1800355e0(param_2);
    FUN_18000b480((longlong *)(param_1 + 0x18),param_2,(int)lVar1);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18001ed90();
}


==================================================================

### EXPORT FUNC 180020a6c (500 bytes) name=FUN_180020a6c

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8 FUN_180020a6c(longlong param_1,LPCWSTR param_2,uint param_3,longlong param_4)

{
  uint uVar1;
  DWORD dwFlagsAndAttributes;
  LPCWSTR pWVar2;
  undefined8 uVar3;
  HANDLE pvVar4;
  DWORD dwCreationDisposition;
  longlong lVar5;
  DWORD dwDesiredAccess;
  DWORD dwShareMode;
  int iVar6;
  undefined1 auStackY_2b8 [32];
  _SECURITY_ATTRIBUTES local_278;
  WCHAR local_258 [264];
  ulonglong local_48;
  
  local_48 = DAT_18006cea0 ^ (ulonglong)auStackY_2b8;
  *(undefined8 *)(param_1 + 8) = 0xffffffffffffffff;
  dwShareMode = 0;
  iVar6 = 0;
  *(undefined4 *)(param_1 + 0x10) = 0;
  FUN_18000aec0((longlong *)(param_1 + 0x18));
  if (param_2 != (LPCWSTR)0x0) {
    lVar5 = 0x104;
    pWVar2 = param_2;
    do {
      if (*pWVar2 == L'\0') break;
      pWVar2 = pWVar2 + 1;
      lVar5 = lVar5 + -1;
    } while (lVar5 != 0);
    if (lVar5 != 0) {
      uVar3 = FUN_1800205fc(local_258,param_2,param_4);
      if ((int)uVar3 == 0) {
        return 0;
      }
      lVar5 = FUN_1800355e0(local_258);
      FUN_18000b480((longlong *)(param_1 + 0x18),local_258,(int)lVar5);
      dwCreationDisposition = 3;
      uVar1 = param_3 & 3;
      if (uVar1 == 0) {
        dwDesiredAccess = 0x80000000;
      }
      else if (uVar1 == 1) {
        dwDesiredAccess = 0x40000000;
      }
      else {
        dwDesiredAccess = dwShareMode;
        if (uVar1 == 2) {
          dwDesiredAccess = 0xc0000000;
        }
      }
      uVar1 = param_3 & 0x70;
      if ((uVar1 != 0) && (uVar1 != 0x10)) {
        if (uVar1 == 0x20) {
          dwShareMode = 1;
        }
        else if (uVar1 == 0x30) {
          dwShareMode = 2;
        }
        else if (uVar1 == 0x40) {
          dwShareMode = 3;
        }
      }
      local_278.nLength = 0x18;
      local_278.lpSecurityDescriptor = (LPVOID)0x0;
      local_278.bInheritHandle = ~((param_3 & 0xffff7fff) >> 7) & 1;
      if (((param_3 & 0xffff7fff) >> 0xc & 1) != 0) {
        dwCreationDisposition = (-(uint)((param_3 & 0x2000) != 0) & 2) + 2;
      }
      dwFlagsAndAttributes = 0x80;
      if ((param_3 >> 0x10 & 1) != 0) {
        dwFlagsAndAttributes = 0x20000080;
      }
      if ((param_3 >> 0x11 & 1) != 0) {
        dwFlagsAndAttributes = dwFlagsAndAttributes | 0x80000000;
      }
      if ((param_3 >> 0x12 & 1) != 0) {
        dwFlagsAndAttributes = dwFlagsAndAttributes | 0x10000000;
      }
      if ((param_3 >> 0x13 & 1) != 0) {
        dwFlagsAndAttributes = dwFlagsAndAttributes | 0x8000000;
      }
      pvVar4 = CreateFileW(param_2,dwDesiredAccess,dwShareMode,&local_278,dwCreationDisposition,
                           dwFlagsAndAttributes,(HANDLE)0x0);
      if (pvVar4 == (HANDLE)0xffffffffffffffff) {
        FUN_18002059c(param_4,param_2);
        return 0;
      }
      *(HANDLE *)(param_1 + 8) = pvVar4;
      *(undefined4 *)(param_1 + 0x10) = 1;
      return 1;
    }
  }
  if (param_4 != 0) {
    *(undefined4 *)(param_4 + 0x10) = 3;
    if (param_2 != (LPCWSTR)0x0) {
      lVar5 = FUN_1800355e0(param_2);
      iVar6 = (int)lVar5;
    }
    FUN_18000b480((longlong *)(param_4 + 0x18),param_2,iVar6);
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180020c60 (8 bytes) name=FUN_180020c60

undefined ** FUN_180020c60(void)

{
  return &PTR_s_COleException_1800543f8;
}


==================================================================

### EXPORT FUNC 180020c68 (96 bytes) name=FUN_180020c68

void FUN_180020c68(undefined4 param_1)

{
  undefined8 *puVar1;
  undefined8 *local_res10 [3];
  
  puVar1 = FUN_18001eb74(0x18);
  if (puVar1 == (undefined8 *)0x0) {
    puVar1 = (undefined8 *)0x0;
  }
  else {
    local_res10[0] = puVar1;
    FUN_18001ee0c((longlong)puVar1);
    *puVar1 = COleException::vftable;
    *(undefined4 *)(puVar1 + 2) = 0;
  }
  *(undefined4 *)(puVar1 + 2) = param_1;
  local_res10[0] = puVar1;
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(local_res10,(ThrowInfo *)&DAT_180068788);
}


==================================================================

### EXPORT FUNC 180020cd8 (24 bytes) name=Unwind@180020cd8

void Unwind_180020cd8(undefined8 param_1,longlong param_2)

{
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x48));
  return;
}


==================================================================

### EXPORT FUNC 180020cf0 (164 bytes) name=FUN_180020cf0

undefined4 FUN_180020cf0(longlong param_1,short *param_2,ulonglong param_3,undefined4 *param_4)

{
  DWORD DVar1;
  int iVar2;
  undefined4 uVar3;
  short *local_res8;
  
  if (param_4 != (undefined4 *)0x0) {
    *param_4 = 0;
  }
  DVar1 = FormatMessageW(0x1100,(LPCVOID)0x0,*(DWORD *)(param_1 + 0x10),0x800,(LPWSTR)&local_res8,0,
                         (va_list *)0x0);
  if (DVar1 == 0) {
    *param_2 = 0;
    uVar3 = 0;
  }
  else {
    iVar2 = FUN_1800354c0(param_2,param_3 & 0xffffffff,local_res8,-1);
    if (iVar2 != 0) {
      if (iVar2 == 0xc) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed6c();
      }
      if ((iVar2 == 0x16) || (iVar2 == 0x22)) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      if (iVar2 != 0x50) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
    }
    LocalFree(local_res8);
    uVar3 = 1;
  }
  return uVar3;
}


==================================================================

### EXPORT FUNC 180020d98 (38 bytes) name=FUN_180020d98

undefined8 * FUN_180020d98(undefined8 *param_1,byte param_2)

{
  *param_1 = COleException::vftable;
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180020dc0 (126 bytes) name=FUN_180020dc0

void FUN_180020dc0(longlong *param_1,undefined2 param_2)

{
  uint uVar1;
  longlong lVar2;
  int iVar3;
  
  lVar2 = *param_1;
  uVar1 = *(uint *)(lVar2 + -0x10);
  iVar3 = uVar1 + 1;
  if ((int)(1U - *(int *)(lVar2 + -8) | *(int *)(lVar2 + -0xc) - iVar3) < 0) {
    FUN_18000b190(param_1,iVar3);
  }
  *(undefined2 *)(*param_1 + (ulonglong)uVar1 * 2) = param_2;
  if ((-1 < iVar3) && (iVar3 <= *(int *)(*param_1 + -0xc))) {
    *(int *)(*param_1 + -0x10) = iVar3;
    *(undefined2 *)(*param_1 + (longlong)iVar3 * 2) = 0;
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8ffa9);
}


==================================================================

### EXPORT FUNC 180020e40 (18 bytes) name=FUN_180020e40

undefined8 FUN_180020e40(void)

{
  longlong lVar1;
  
  lVar1 = FUN_180022c04();
  return *(undefined8 *)(lVar1 + 8);
}


==================================================================

### EXPORT FUNC 180020e54 (18 bytes) name=FUN_180020e54

longlong FUN_180020e54(void)

{
  longlong lVar1;
  
  lVar1 = FUN_1800222f4();
  return lVar1 + 0x58;
}


==================================================================

### EXPORT FUNC 180020e68 (43 bytes) name=AfxInternalProcessWndProcException

/* Library Function - Single Match
    __int64 __cdecl AfxInternalProcessWndProcException(class CException * __ptr64,struct tagMSG
   const * __ptr64)
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

__int64 __cdecl AfxInternalProcessWndProcException(CException *param_1,tagMSG *param_2)

{
  __int64 _Var1;
  
  if (param_2->message == 1) {
    _Var1 = -1;
  }
  else {
    if (param_2->message == 0xf) {
      ValidateRect(param_2->hwnd,(RECT *)0x0);
    }
    _Var1 = 0;
  }
  return _Var1;
}


==================================================================

### EXPORT FUNC 180020e94 (69 bytes) name=AfxProcessWndProcException

/* Library Function - Single Match
    __int64 __cdecl AfxProcessWndProcException(class CException * __ptr64,struct tagMSG const *
   __ptr64)
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

__int64 __cdecl AfxProcessWndProcException(CException *param_1,tagMSG *param_2)

{
  longlong *plVar1;
  longlong lVar2;
  __int64 _Var3;
  
  lVar2 = FUN_180022c04();
  plVar1 = *(longlong **)(lVar2 + 8);
  if (plVar1 == (longlong *)0x0) {
    _Var3 = AfxInternalProcessWndProcException(param_1,param_2);
  }
  else {
    _Var3 = (**(code **)(*plVar1 + 0xd8))(plVar1,param_1,param_2);
  }
  return _Var3;
}


==================================================================

### EXPORT FUNC 180020edc (139 bytes) name=AfxTermThread

/* Library Function - Single Match
    void __cdecl AfxTermThread(struct HINSTANCE__ * __ptr64)
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

void __cdecl AfxTermThread(HINSTANCE__ *param_1)

{
  longlong *plVar1;
  longlong lVar2;
  undefined8 in_RDX;
  undefined8 in_R8;
  undefined8 in_R9;
  
  FUN_180023860();
  FUN_180023c24(-1,in_RDX,in_R8,in_R9);
  if (param_1 == (HINSTANCE__ *)0x0) {
    lVar2 = FUN_180022c04();
    if ((lVar2 != 0) && (*(longlong **)(lVar2 + 0x78) != (longlong *)0x0)) {
      (**(code **)(**(longlong **)(lVar2 + 0x78) + 0xc0))();
      plVar1 = *(longlong **)(lVar2 + 0x78);
      if (plVar1 != (longlong *)0x0) {
        (**(code **)(*plVar1 + 8))(plVar1,1);
      }
      *(undefined8 *)(lVar2 + 0x78) = 0;
    }
  }
  if (DAT_18006edf0 != (DWORD *)0x0) {
    FUN_180023498(DAT_18006edf0,(longlong)param_1,0);
  }
  return;
}


==================================================================

### EXPORT FUNC 180020f7c (38 bytes) name=Catch@180020f7c

undefined * Catch_180020f7c(undefined8 param_1,longlong param_2)

{
  FUN_18001ec74(*(longlong **)(param_2 + 0x28));
  return &DAT_180020f07;
}


==================================================================

### EXPORT FUNC 180020fac (38 bytes) name=Catch@180020fac

undefined * Catch_180020fac(undefined8 param_1,longlong param_2)

{
  FUN_18001ec74(*(longlong **)(param_2 + 0x30));
  return &DAT_180020f49;
}


==================================================================

### EXPORT FUNC 180020fdc (38 bytes) name=Catch@180020fdc

undefined8 Catch_180020fdc(undefined8 param_1,longlong param_2)

{
  FUN_18001ec74(*(longlong **)(param_2 + 0x38));
  return 0x180020f66;
}


==================================================================

### EXPORT FUNC 180021004 (83 bytes) name=CommonConstruct

/* Library Function - Single Match
    public: void __cdecl CWinThread::CommonConstruct(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

void __thiscall CWinThread::CommonConstruct(CWinThread *this)

{
  longlong lVar1;
  
  *(undefined8 *)(this + 0x40) = 0;
  *(undefined8 *)(this + 0x48) = 0;
  *(undefined8 *)(this + 0x58) = 0;
  *(undefined4 *)(this + 0x60) = 0;
  lVar1 = FUN_1800222f4();
  *(undefined4 *)(lVar1 + 0x60) = 0;
  *(undefined4 *)(lVar1 + 0x90) = 0;
  GetCursorPos((LPPOINT)(lVar1 + 0x88));
  *(undefined8 *)(this + 0x80) = 0;
  *(undefined8 *)(this + 0x78) = 0;
  *(undefined4 *)(this + 0x50) = 1;
  return;
}


==================================================================

### EXPORT FUNC 180021058 (76 bytes) name=~CWinThread

/* Library Function - Single Match
    public: virtual __cdecl CWinThread::~CWinThread(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

void __thiscall CWinThread::~CWinThread(CWinThread *this)

{
  longlong lVar1;
  
  *(undefined ***)this = vftable;
  if (*(HANDLE *)(this + 0x58) != (HANDLE)0x0) {
    CloseHandle(*(HANDLE *)(this + 0x58));
  }
  lVar1 = FUN_180022c04();
  if (*(CWinThread **)(lVar1 + 8) == this) {
    *(undefined8 *)(lVar1 + 8) = 0;
  }
  CCmdTarget::~CCmdTarget((CCmdTarget *)this);
  return;
}


==================================================================

### EXPORT FUNC 1800210a8 (24 bytes) name=Unwind@1800210a8

void Unwind_1800210a8(undefined8 param_1,longlong param_2)

{
  CCmdTarget::~CCmdTarget(*(CCmdTarget **)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 1800210c0 (26 bytes) name=FUN_1800210c0

void FUN_1800210c0(longlong *param_1)

{
  if ((int)param_1[10] != 0) {
    (**(code **)(*param_1 + 8))(param_1,1);
  }
  return;
}


==================================================================

### EXPORT FUNC 1800210dc (207 bytes) name=FUN_1800210dc

void FUN_1800210dc(longlong *param_1)

{
  bool bVar1;
  int iVar2;
  BOOL BVar3;
  longlong lVar4;
  
  lVar4 = FUN_1800222f4();
  bVar1 = true;
  do {
    while ((bVar1 && (BVar3 = PeekMessageW((LPMSG)(lVar4 + 0x58),(HWND)0x0,0,0,0), BVar3 == 0))) {
      iVar2 = (**(code **)(*param_1 + 0xc0))(param_1);
      if (iVar2 == 0) {
        bVar1 = false;
      }
    }
    do {
      iVar2 = (**(code **)(*param_1 + 0xb8))(param_1);
      if (iVar2 == 0) {
                    /* WARNING: Could not recover jumptable at 0x0001800211a4. Too many branches */
                    /* WARNING: Treating indirect jump as call */
        (**(code **)(*param_1 + 0xd0))(param_1);
        return;
      }
      iVar2 = (**(code **)(*param_1 + 200))();
      if (iVar2 != 0) {
        bVar1 = true;
      }
      BVar3 = PeekMessageW((LPMSG)(lVar4 + 0x58),(HWND)0x0,0,0,0);
    } while (BVar3 != 0);
  } while( true );
}


==================================================================

### EXPORT FUNC 1800211ac (17 bytes) name=FUN_1800211ac

undefined4 FUN_1800211ac(void)

{
  longlong lVar1;
  
  lVar1 = FUN_1800222f4();
  return *(undefined4 *)(lVar1 + 0x68);
}


==================================================================

### EXPORT FUNC 1800211c0 (153 bytes) name=FUN_1800211c0

undefined8 FUN_1800211c0(longlong *param_1,longlong param_2)

{
  longlong *plVar1;
  AFX_MSGMAP_ENTRY *pAVar2;
  
  plVar1 = (longlong *)(**(code **)(*param_1 + 0x50))();
  do {
    if (*plVar1 == 0) {
      return 0;
    }
    pAVar2 = (AFX_MSGMAP_ENTRY *)plVar1[1];
    if (*(uint *)(param_2 + 8) < 0xc000) {
      pAVar2 = AfxFindMessageEntry(pAVar2,*(uint *)(param_2 + 8),0,0);
      if (pAVar2 != (AFX_MSGMAP_ENTRY *)0x0) {
LAB_180021206:
        (**(code **)(pAVar2 + 0x18))
                  (param_1,*(undefined8 *)(param_2 + 0x10),*(undefined8 *)(param_2 + 0x18));
        return 1;
      }
    }
    else {
      while (pAVar2 = AfxFindMessageEntry(pAVar2,0xc000,0,0), pAVar2 != (AFX_MSGMAP_ENTRY *)0x0) {
        if (**(int **)(pAVar2 + 0x10) == *(int *)(param_2 + 8)) goto LAB_180021206;
        pAVar2 = pAVar2 + 0x20;
      }
    }
    plVar1 = (longlong *)(*(code *)*plVar1)();
  } while( true );
}


==================================================================

### EXPORT FUNC 18002125c (11 bytes) name=FUN_18002125c

void FUN_18002125c(undefined8 param_1,CException *param_2,tagMSG *param_3)

{
  AfxInternalProcessWndProcException(param_2,param_3);
  return;
}


==================================================================

### EXPORT FUNC 180021268 (8 bytes) name=FUN_180021268

undefined ** FUN_180021268(void)

{
  return &PTR_s_CWinThread_180054498;
}


==================================================================

### EXPORT FUNC 180021270 (49 bytes) name=CreateObject

/* Library Function - Single Match
    public: static class CNoTrackObject * __ptr64 __cdecl CThreadLocal<class
   AFX_MODULE_THREAD_STATE>::CreateObject(void)
   
   Library: Visual Studio 2008 Release */

CNoTrackObject * __cdecl CThreadLocal<AFX_MODULE_THREAD_STATE>::CreateObject(void)

{
  AFX_MODULE_THREAD_STATE *this;
  CNoTrackObject *pCVar1;
  
  this = (AFX_MODULE_THREAD_STATE *)FUN_180022c84(0xa8);
  pCVar1 = (CNoTrackObject *)0x0;
  if (this != (AFX_MODULE_THREAD_STATE *)0x0) {
    pCVar1 = (CNoTrackObject *)AFX_MODULE_THREAD_STATE::AFX_MODULE_THREAD_STATE(this);
  }
  return pCVar1;
}


==================================================================

### EXPORT FUNC 1800212b0 (24 bytes) name=Unwind@1800212b0

void Unwind_1800212b0(undefined8 param_1,longlong param_2)

{
  FUN_180022ca8(*(HLOCAL *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 1800212c8 (163 bytes) name=AfxInternalPreTranslateMessage

/* Library Function - Single Match
    int __cdecl AfxInternalPreTranslateMessage(struct tagMSG * __ptr64)
   
   Library: Visual Studio 2008 Release */

int __cdecl AfxInternalPreTranslateMessage(tagMSG *param_1)

{
  int iVar1;
  longlong lVar2;
  undefined8 uVar3;
  CWnd *pCVar4;
  CWnd *pCVar5;
  HWND__ *pHVar6;
  
  lVar2 = FUN_180022c04();
  if (((*(longlong **)(lVar2 + 8) == (longlong *)0x0) || (param_1->hwnd != (HWND)0x0)) ||
     (uVar3 = FUN_1800211c0(*(longlong **)(lVar2 + 8),(longlong)param_1), (int)uVar3 == 0)) {
    lVar2 = FUN_180022c04();
    if (*(longlong **)(lVar2 + 8) == (longlong *)0x0) {
      pCVar4 = (CWnd *)0x0;
    }
    else {
      pCVar4 = (CWnd *)(**(code **)(**(longlong **)(lVar2 + 8) + 0xe8))();
    }
    if (pCVar4 == (CWnd *)0x0) {
      pHVar6 = (HWND__ *)0x0;
    }
    else {
      pHVar6 = *(HWND__ **)(pCVar4 + 0x40);
    }
    iVar1 = CWnd::WalkPreTranslateTree(pHVar6,param_1);
    if (iVar1 == 0) {
      if (pCVar4 != (CWnd *)0x0) {
        pCVar5 = CWnd::FromHandle(param_1->hwnd);
        pCVar5 = CWnd::GetTopLevelParent(pCVar5);
        if (pCVar5 != pCVar4) {
          iVar1 = (**(code **)(*(longlong *)pCVar4 + 0x200))(pCVar4,param_1);
          return iVar1;
        }
      }
      return 0;
    }
  }
  return 1;
}


==================================================================

### EXPORT FUNC 18002136c (51 bytes) name=AfxPreTranslateMessage

/* Library Function - Single Match
    int __cdecl AfxPreTranslateMessage(struct tagMSG * __ptr64)
   
   Library: Visual Studio 2008 Release */

int __cdecl AfxPreTranslateMessage(tagMSG *param_1)

{
  longlong *plVar1;
  int iVar2;
  longlong lVar3;
  
  lVar3 = FUN_180022c04();
  plVar1 = *(longlong **)(lVar3 + 8);
  if (plVar1 == (longlong *)0x0) {
    iVar2 = AfxInternalPreTranslateMessage(param_1);
  }
  else {
    iVar2 = (**(code **)(*plVar1 + 0xb0))(plVar1,param_1);
  }
  return iVar2;
}


==================================================================

### EXPORT FUNC 1800213a0 (118 bytes) name=AfxInternalIsIdleMessage

/* Library Function - Single Match
    int __cdecl AfxInternalIsIdleMessage(struct tagMSG * __ptr64)
   
   Library: Visual Studio 2005 Release */

int __cdecl AfxInternalIsIdleMessage(tagMSG *param_1)

{
  UINT UVar1;
  POINT PVar2;
  longlong lVar3;
  
  UVar1 = param_1->message;
  if ((UVar1 == 0x200) || (UVar1 == 0xa0)) {
    lVar3 = FUN_1800222f4();
    PVar2 = param_1->pt;
    if ((*(int *)(lVar3 + 0x88) == PVar2.x) &&
       ((*(int *)(lVar3 + 0x8c) == PVar2.y && (param_1->message == *(UINT *)(lVar3 + 0x90))))) {
      return 0;
    }
    *(POINT *)(lVar3 + 0x88) = PVar2;
    *(UINT *)(lVar3 + 0x90) = param_1->message;
  }
  else if ((UVar1 == 0xf) || (UVar1 == 0x118)) {
    return 0;
  }
  return 1;
}


==================================================================

### EXPORT FUNC 180021418 (51 bytes) name=AfxIsIdleMessage

/* Library Function - Single Match
    int __cdecl AfxIsIdleMessage(struct tagMSG * __ptr64)
   
   Library: Visual Studio 2005 Release */

int __cdecl AfxIsIdleMessage(tagMSG *param_1)

{
  longlong *plVar1;
  int iVar2;
  longlong lVar3;
  
  lVar3 = FUN_180022c04();
  plVar1 = *(longlong **)(lVar3 + 8);
  if (plVar1 == (longlong *)0x0) {
    iVar2 = AfxInternalIsIdleMessage(param_1);
  }
  else {
    iVar2 = (**(code **)(*plVar1 + 200))(plVar1,param_1);
  }
  return iVar2;
}


==================================================================

### EXPORT FUNC 18002144c (113 bytes) name=AfxEndThread

/* Library Function - Single Match
    void __cdecl AfxEndThread(unsigned int,int)
   
   Library: Visual Studio 2008 Release */

void __cdecl AfxEndThread(uint param_1,int param_2)

{
  longlong *plVar1;
  longlong lVar2;
  
  lVar2 = FUN_180022c04();
  plVar1 = *(longlong **)(lVar2 + 8);
  if (plVar1 != (longlong *)0x0) {
    if ((code *)plVar1[0xf] != (code *)0x0) {
      (*(code *)plVar1[0xf])();
    }
    if (param_2 != 0) {
      (**(code **)(*plVar1 + 0xf0))();
    }
    *(undefined8 *)(lVar2 + 8) = 0;
  }
  AfxTermThread((HINSTANCE__ *)0x0);
  _endthreadex(param_1);
  return;
}


==================================================================

### EXPORT FUNC 1800214c0 (90 bytes) name=CWinThread

/* Library Function - Single Match
    public: __cdecl CWinThread::CWinThread(unsigned int (__cdecl*)(void * __ptr64),void * __ptr64)
   __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

CWinThread * __thiscall
CWinThread::CWinThread(CWinThread *this,_func_uint_void_ptr *param_1,void *param_2)

{
  CCmdTarget::CCmdTarget((CCmdTarget *)this);
  *(undefined ***)this = vftable;
  *(_func_uint_void_ptr **)(this + 0x70) = param_1;
  *(void **)(this + 0x68) = param_2;
  CommonConstruct(this);
  return this;
}


==================================================================

### EXPORT FUNC 180021520 (24 bytes) name=Unwind@180021520

void Unwind_180021520(undefined8 param_1,longlong param_2)

{
  CCmdTarget::~CCmdTarget(*(CCmdTarget **)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 180021538 (47 bytes) name=FUN_180021538

CWinThread * FUN_180021538(CWinThread *param_1,uint param_2)

{
  CWinThread::~CWinThread(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180021568 (8 bytes) name=FUN_180021568

void FUN_180021568(undefined8 param_1,tagMSG *param_2)

{
  AfxInternalIsIdleMessage(param_2);
  return;
}


==================================================================

### EXPORT FUNC 180021570 (8 bytes) name=FUN_180021570

void FUN_180021570(undefined8 param_1,tagMSG *param_2)

{
  AfxInternalPreTranslateMessage(param_2);
  return;
}


==================================================================

### EXPORT FUNC 180021578 (41 bytes) name=FUN_180021578

void FUN_180021578(longlong param_1)

{
  HWND pHVar1;
  
  if ((*(longlong *)(param_1 + 0x48) == 0) && (*(longlong *)(param_1 + 0x40) == 0)) {
    pHVar1 = GetActiveWindow();
    CWnd::FromHandle(pHVar1);
  }
  return;
}


==================================================================

### EXPORT FUNC 1800215a4 (98 bytes) name=AfxInternalPumpMessage

/* Library Function - Single Match
    int __cdecl AfxInternalPumpMessage(void)
   
   Library: Visual Studio 2008 Release */

int __cdecl AfxInternalPumpMessage(void)

{
  BOOL BVar1;
  int iVar2;
  longlong lVar3;
  
  lVar3 = FUN_1800222f4();
  BVar1 = GetMessageW((LPMSG)(lVar3 + 0x58),(HWND)0x0,0,0);
  iVar2 = 0;
  if (BVar1 != 0) {
    if (*(int *)(lVar3 + 0x60) != 0x36a) {
      iVar2 = AfxPreTranslateMessage((tagMSG *)(lVar3 + 0x58));
      if (iVar2 == 0) {
        TranslateMessage((MSG *)(lVar3 + 0x58));
        DispatchMessageW((MSG *)(lVar3 + 0x58));
      }
    }
    iVar2 = 1;
  }
  return iVar2;
}


==================================================================

### EXPORT FUNC 180021608 (39 bytes) name=AfxPumpMessage

/* Library Function - Single Match
    int __cdecl AfxPumpMessage(void)
   
   Library: Visual Studio 2008 Release */

int __cdecl AfxPumpMessage(void)

{
  int iVar1;
  longlong lVar2;
  
  lVar2 = FUN_180022c04();
  if (*(longlong **)(lVar2 + 8) == (longlong *)0x0) {
    iVar1 = AfxInternalPumpMessage();
  }
  else {
    iVar1 = (**(code **)(**(longlong **)(lVar2 + 8) + 0xb8))();
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 180021630 (141 bytes) name=FUN_180021630

LRESULT FUN_180021630(int param_1,WPARAM param_2,LPARAM param_3)

{
  longlong *plVar1;
  int iVar2;
  longlong lVar3;
  void *pvVar4;
  LRESULT LVar5;
  
  lVar3 = FUN_180022bb4();
  if ((*(char *)(lVar3 + 0x28) == '\0') && ((-1 < param_1 || (param_1 == 0x8001)))) {
    lVar3 = FUN_180022c04();
    plVar1 = *(longlong **)(lVar3 + 8);
    if (plVar1 != (longlong *)0x0) {
      iVar2 = (**(code **)(*plVar1 + 0xe0))(plVar1,param_1,param_3);
      return (longlong)iVar2;
    }
  }
  pvVar4 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar4 != (void *)0x0) {
    LVar5 = CallNextHookEx(*(HHOOK *)((longlong)pvVar4 + 0x50),param_1,param_2,param_3);
    return LVar5;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18001ed90();
}


==================================================================

### EXPORT FUNC 1800216c0 (412 bytes) name=FUN_1800216c0

undefined8 FUN_1800216c0(longlong *param_1,int param_2,undefined8 *param_3)

{
  int iVar1;
  CWnd *this;
  CFrameWnd *pCVar2;
  undefined8 uVar3;
  longlong lVar4;
  void *pvVar5;
  undefined1 local_38 [48];
  
  if (param_3 != (undefined8 *)0x0) {
    if (param_2 != 0) {
      if (param_2 != 2) {
        return 0;
      }
      this = CWnd::FromHandle((HWND__ *)*param_3);
      if ((((this != (CWnd *)0x0) &&
           (pCVar2 = CWnd::GetTopLevelFrame(this), pCVar2 != (CFrameWnd *)0x0)) &&
          (uVar3 = FUN_180027034((longlong)pCVar2), (int)uVar3 != 0)) &&
         (*(int *)(pCVar2 + 0xc4) != 0)) {
        lVar4 = FUN_180022c04();
        if (*(longlong **)(lVar4 + 8) == (longlong *)0x0) {
          lVar4 = 0;
        }
        else {
          lVar4 = (**(code **)(**(longlong **)(lVar4 + 8) + 0xe8))();
        }
        if ((param_1[8] != 0) &&
           (((*(int *)(param_3 + 1) == 0x100 && (param_3[2] == 0xd)) ||
            (*(int *)(param_3 + 1) == 0x202)))) {
          SendMessageW(*(HWND *)(lVar4 + 0x40),0x111,0xe146,0);
          return 1;
        }
      }
    }
    lVar4 = FUN_180022c04();
    if (*(longlong **)(lVar4 + 8) != (longlong *)0x0) {
      (**(code **)(**(longlong **)(lVar4 + 8) + 0xe8))();
    }
    if (((param_2 == 0) && (param_1[9] != 0)) &&
       ((0xff < *(uint *)(param_3 + 1) && (*(uint *)(param_3 + 1) < 0x10a)))) {
      pvVar5 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
      if (pvVar5 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      if (*(int *)((longlong)pvVar5 + 0x1a0) == 0) {
        *(undefined4 *)((longlong)pvVar5 + 0x1a0) = 1;
        memcpy(local_38,param_3,0x30);
        iVar1 = CWnd::IsWindowEnabled((CWnd *)param_1[9]);
        if ((iVar1 != 0) && (iVar1 = (**(code **)(*param_1 + 0xb0))(param_1,local_38), iVar1 != 0))
        {
          *(undefined4 *)((longlong)pvVar5 + 0x1a0) = 0;
          return 1;
        }
        *(undefined4 *)((longlong)pvVar5 + 0x1a0) = 0;
      }
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180021860 (5 bytes) name=AfxInternalPumpMessage

int __cdecl AfxInternalPumpMessage(void)

{
  BOOL BVar1;
  int iVar2;
  longlong lVar3;
  
  lVar3 = FUN_1800222f4();
  BVar1 = GetMessageW((LPMSG)(lVar3 + 0x58),(HWND)0x0,0,0);
  iVar2 = 0;
  if (BVar1 != 0) {
    if (*(int *)(lVar3 + 0x60) != 0x36a) {
      iVar2 = AfxPreTranslateMessage((tagMSG *)(lVar3 + 0x58));
      if (iVar2 == 0) {
        TranslateMessage((MSG *)(lVar3 + 0x58));
        DispatchMessageW((MSG *)(lVar3 + 0x58));
      }
    }
    iVar2 = 1;
  }
  return iVar2;
}


==================================================================

### EXPORT FUNC 180021868 (63 bytes) name=AfxInitThread

/* Library Function - Single Match
    void __cdecl AfxInitThread(void)
   
   Library: Visual Studio 2008 Release */

void __cdecl AfxInitThread(void)

{
  longlong lVar1;
  DWORD dwThreadId;
  HHOOK pHVar2;
  
  lVar1 = FUN_180022bb4();
  if (*(char *)(lVar1 + 0x28) == '\0') {
    lVar1 = FUN_1800222f4();
    dwThreadId = GetCurrentThreadId();
    pHVar2 = SetWindowsHookExW(-1,FUN_180021630,(HINSTANCE)0x0,dwThreadId);
    *(HHOOK *)(lVar1 + 0x50) = pHVar2;
  }
  return;
}


==================================================================

### EXPORT FUNC 1800218a8 (403 bytes) name=FUN_1800218a8

bool FUN_1800218a8(longlong param_1,int param_2,undefined8 param_3,undefined8 param_4)

{
  CWnd *pCVar1;
  BOOL BVar2;
  longlong lVar3;
  void *pvVar4;
  code *pcVar5;
  CWnd *pCVar6;
  
  if (param_2 < 1) {
    pCVar1 = *(CWnd **)(param_1 + 0x40);
    if (((pCVar1 != (CWnd *)0x0) && (*(HWND *)(pCVar1 + 0x40) != (HWND)0x0)) &&
       (BVar2 = IsWindowVisible(*(HWND *)(pCVar1 + 0x40)), BVar2 != 0)) {
      FUN_180029ea4(pCVar1,*(undefined8 *)(pCVar1 + 0x40),0x363,1,0);
      FUN_18002a320(*(HWND *)(pCVar1 + 0x40),0x363,1,0,1,1);
    }
    lVar3 = FUN_180022bb4();
    pvVar4 = FUN_180023520((int *)(lVar3 + 0xc0),CThreadLocal<AFX_MODULE_THREAD_STATE>::CreateObject
                          );
    if (pvVar4 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    for (pCVar6 = *(CWnd **)((longlong)pvVar4 + 0x10); pCVar6 != (CWnd *)0x0;
        pCVar6 = *(CWnd **)(pCVar6 + 200)) {
      if ((*(longlong *)(pCVar6 + 0x40) != 0) && (pCVar6 != pCVar1)) {
        if (*(int *)(pCVar6 + 0x120) == 0) {
          FUN_18002e260((longlong)pCVar6,0);
        }
        BVar2 = IsWindowVisible(*(HWND *)(pCVar6 + 0x40));
        if ((BVar2 != 0) || (-1 < *(int *)(pCVar6 + 0x120))) {
          FUN_180029ea4(pCVar6,*(undefined8 *)(pCVar6 + 0x40),0x363,1,0);
          FUN_18002a320(*(HWND *)(pCVar6 + 0x40),0x363,1,0,1,1);
        }
        if (0 < *(int *)(pCVar6 + 0x120)) {
          FUN_18002e260((longlong)pCVar6,*(int *)(pCVar6 + 0x120));
        }
        *(undefined4 *)(pCVar6 + 0x120) = 0xffffffff;
      }
    }
  }
  else {
    lVar3 = FUN_180022bb4();
    pcVar5 = CThreadLocal<AFX_MODULE_THREAD_STATE>::CreateObject;
    pvVar4 = FUN_180023520((int *)(lVar3 + 0xc0),CThreadLocal<AFX_MODULE_THREAD_STATE>::CreateObject
                          );
    if (pvVar4 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    if (*(int *)((longlong)pvVar4 + 0x20) == 0) {
      FUN_180023860();
      FUN_180023c24(1,pcVar5,param_3,param_4);
    }
  }
  return param_2 < 0;
}


==================================================================

### EXPORT FUNC 180021a40 (347 bytes) name=_AfxThreadEntry

/* Library Function - Single Match
    unsigned int __cdecl _AfxThreadEntry(void * __ptr64)
   
   Library: Visual Studio 2008 Release */

uint __cdecl _AfxThreadEntry(void *param_1)

{
  longlong *plVar1;
  HANDLE hHandle;
  uint uVar2;
  int iVar3;
  longlong lVar4;
  void *pvVar5;
  CWnd local_c8 [192];
  
  plVar1 = *(longlong **)((longlong)param_1 + 8);
  CWnd::CWnd(local_c8);
  lVar4 = FUN_1800222f4();
  *(undefined8 *)(lVar4 + 8) = *(undefined8 *)(*(longlong *)param_1 + 8);
  lVar4 = FUN_180022bb4();
  plVar1[7] = lVar4;
  pvVar5 = FUN_180023520((int *)(lVar4 + 0xc0),CThreadLocal<AFX_MODULE_THREAD_STATE>::CreateObject);
  if (pvVar5 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  *(longlong **)((longlong)pvVar5 + 8) = plVar1;
  AfxInitThread();
  lVar4 = FUN_180022bb4();
  if ((((*(longlong *)(lVar4 + 8) != 0) && (plVar1[8] == 0)) &&
      (lVar4 = *(longlong *)(*(longlong *)(lVar4 + 8) + 0x40), lVar4 != 0)) &&
     (*(longlong *)(lVar4 + 0x40) != 0)) {
    FUN_180029650(local_c8,*(ulonglong *)(lVar4 + 0x40));
    plVar1[8] = (longlong)local_c8;
  }
  hHandle = *(HANDLE *)((longlong)param_1 + 0x28);
  SetEvent(*(HANDLE *)((longlong)param_1 + 0x20));
  WaitForSingleObject(hHandle,0xffffffff);
  CloseHandle(hHandle);
  if ((code *)plVar1[0xe] == (code *)0x0) {
    iVar3 = (**(code **)(*plVar1 + 0xa0))(plVar1);
    if (iVar3 == 0) {
      uVar2 = (**(code **)(*plVar1 + 0xd0))(plVar1);
    }
    else {
      uVar2 = (**(code **)(*plVar1 + 0xa8))(plVar1);
    }
  }
  else {
    uVar2 = (*(code *)plVar1[0xe])(plVar1[0xd]);
  }
  CWnd::Detach(local_c8);
  AfxEndThread(uVar2,1);
  CWnd::~CWnd(local_c8);
  return 0;
}


==================================================================

### EXPORT FUNC 180021bb0 (24 bytes) name=Unwind@180021bb0

void Unwind_180021bb0(undefined8 param_1,longlong param_2)

{
  CWnd::~CWnd((CWnd *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 180021bd0 (72 bytes) name=Catch@180021bd0

/* Library Function - Single Match
    int `unsigned int __cdecl _AfxThreadEntry(void * __ptr64)'::`1'::catch$0
   
   Library: Visual Studio 2008 Release */

undefined * Catch_180021bd0(undefined8 param_1,longlong param_2)

{
  longlong lVar1;
  
  CWnd::Detach((CWnd *)(param_2 + 0x30));
  lVar1 = *(longlong *)(param_2 + 0x100);
  *(undefined4 *)(lVar1 + 0x30) = 1;
  SetEvent(*(HANDLE *)(lVar1 + 0x20));
  AfxEndThread(0xffffffff,0);
  return &DAT_180021afe;
}


==================================================================

### EXPORT FUNC 180021c1c (360 bytes) name=FUN_180021c1c

undefined8 FUN_180021c1c(longlong param_1,uint param_2,uint param_3,LPSECURITY_ATTRIBUTES param_4)

{
  HANDLE hThread;
  ulonglong local_48;
  longlong local_40;
  uint local_38;
  HANDLE local_28;
  HANDLE local_20;
  int local_18;
  
  if (*(longlong *)(param_1 + 0x58) != 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  FUN_1800357d0(&local_48,0,0x38);
  local_48 = FUN_1800222f4();
  local_40 = param_1;
  local_28 = CreateEventW((LPSECURITY_ATTRIBUTES)0x0,1,0,(LPCWSTR)0x0);
  local_20 = CreateEventW((LPSECURITY_ATTRIBUTES)0x0,1,0,(LPCWSTR)0x0);
  local_38 = param_2;
  if (local_28 != (HANDLE)0x0) {
    if (local_20 != (HANDLE)0x0) {
      hThread = FUN_180035d70(param_4,(ulonglong)param_3,0x180021a40,&local_48,param_2 | 4,
                              (LPDWORD)(param_1 + 0x60));
      *(HANDLE *)(param_1 + 0x58) = hThread;
      if (hThread == (HANDLE)0x0) {
        return 0;
      }
      ResumeThread(hThread);
      WaitForSingleObject(local_28,0xffffffff);
      CloseHandle(local_28);
      if ((param_2 & 4) != 0) {
        SuspendThread(*(HANDLE *)(param_1 + 0x58));
      }
      if (local_18 == 0) {
        SetEvent(local_20);
        return 1;
      }
      WaitForSingleObject(*(HANDLE *)(param_1 + 0x58),0xffffffff);
      CloseHandle(*(HANDLE *)(param_1 + 0x58));
      *(undefined8 *)(param_1 + 0x58) = 0;
      goto LAB_180021d67;
    }
    CloseHandle(local_28);
  }
  if (local_20 == (HANDLE)0x0) {
    return 0;
  }
LAB_180021d67:
  CloseHandle(local_20);
  return 0;
}


==================================================================

### EXPORT FUNC 180021d88 (179 bytes) name=AfxBeginThread

/* Library Function - Single Match
    class CWinThread * __ptr64 __cdecl AfxBeginThread(unsigned int (__cdecl*)(void * __ptr64),void *
   __ptr64,int,unsigned int,unsigned long,struct _SECURITY_ATTRIBUTES * __ptr64)
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

CWinThread * __cdecl
AfxBeginThread(_func_uint_void_ptr *param_1,void *param_2,int param_3,uint param_4,ulong param_5,
              _SECURITY_ATTRIBUTES *param_6)

{
  CWinThread *pCVar1;
  undefined8 uVar2;
  
  pCVar1 = FUN_18001eb74(0x88);
  if (pCVar1 == (CWinThread *)0x0) {
    pCVar1 = (CWinThread *)0x0;
  }
  else {
    pCVar1 = (CWinThread *)CWinThread::CWinThread(pCVar1,param_1,param_2);
  }
  uVar2 = FUN_180021c1c((longlong)pCVar1,param_5 | 4,param_4,param_6);
  if ((int)uVar2 == 0) {
    (**(code **)(*(longlong *)pCVar1 + 0xf0))(pCVar1);
    pCVar1 = (CWinThread *)0x0;
  }
  else {
    SetThreadPriority(*(HANDLE *)(pCVar1 + 0x58),param_3);
    if ((param_5 & 4) == 0) {
      ResumeThread(*(HANDLE *)(pCVar1 + 0x58));
    }
  }
  return pCVar1;
}


==================================================================

### EXPORT FUNC 180021e48 (24 bytes) name=Unwind@180021e48

void Unwind_180021e48(undefined8 param_1,longlong param_2)

{
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x28));
  return;
}


==================================================================

### EXPORT FUNC 180021e60 (5 bytes) name=~CThreadLocalObject

void __thiscall CThreadLocalObject::~CThreadLocalObject(CThreadLocalObject *this)

{
  if ((*(int *)this != 0) && (DAT_18006edf0 != 0)) {
    FUN_180023128(DAT_18006edf0,*(int *)this);
  }
  *(undefined4 *)this = 0;
  return;
}


==================================================================

### EXPORT FUNC 180021e68 (157 bytes) name=FUN_180021e68

void FUN_180021e68(void)

{
  if (DAT_18006edd0 == (HMODULE)0x0) {
    DAT_18006edd0 = GetModuleHandleW(L"KERNEL32");
    if (DAT_18006edd0 == (HMODULE)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    DAT_18006edb0 = GetProcAddress(DAT_18006edd0,"CreateActCtxW");
    DAT_18006edb8 = GetProcAddress(DAT_18006edd0,"ReleaseActCtx");
    DAT_18006edc0 = GetProcAddress(DAT_18006edd0,"ActivateActCtx");
    DAT_18006edc8 = GetProcAddress(DAT_18006edd0,"DeactivateActCtx");
  }
  return;
}


==================================================================

### EXPORT FUNC 180021f08 (26 bytes) name=FUN_180021f08

void FUN_180021f08(void)

{
  if (DAT_18006edc8 != (code *)0x0) {
    (*DAT_18006edc8)();
  }
  return;
}


==================================================================

### EXPORT FUNC 180021f24 (52 bytes) name=FUN_180021f24

undefined1 FUN_180021f24(undefined8 param_1,longlong param_2)

{
  int iVar1;
  undefined1 uVar2;
  
  if (param_2 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (DAT_18006edc0 == (code *)0x0) {
    uVar2 = 2;
  }
  else {
    iVar1 = (*DAT_18006edc0)();
    uVar2 = iVar1 != 0;
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 180021f5c (331 bytes) name=FUN_180021f5c

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

void FUN_180021f5c(longlong param_1)

{
  HMODULE hModule;
  DWORD DVar1;
  longlong lVar2;
  undefined8 uVar3;
  undefined1 auStack_288 [32];
  undefined4 local_268;
  undefined4 local_264;
  WCHAR *local_260;
  undefined8 local_248;
  HMODULE local_238;
  WCHAR local_228 [260];
  short local_20;
  undefined2 local_1e;
  ulonglong local_18;
  
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_288;
  FUN_180021e68();
  hModule = *(HMODULE *)(param_1 + 0x10);
  local_1e = 0;
  local_20 = 0;
  DVar1 = GetModuleFileNameW(hModule,local_228,0x105);
  if (DVar1 != 0) {
    if (local_20 == 0) {
      local_260 = local_228;
      local_268 = 0x38;
      local_264 = 0x88;
      local_248 = 2;
      local_238 = hModule;
      if (DAT_18006edb0 == (code *)0x0) {
        lVar2 = -1;
      }
      else {
        lVar2 = (*DAT_18006edb0)(&local_268);
      }
      *(longlong *)(param_1 + 0xd8) = lVar2;
      if (lVar2 == -1) {
        local_248 = 3;
        if (DAT_18006edb0 == (code *)0x0) {
          uVar3 = 0xffffffffffffffff;
        }
        else {
          uVar3 = (*DAT_18006edb0)(&local_268);
        }
        *(undefined8 *)(param_1 + 0xd8) = uVar3;
      }
      if (*(longlong *)(param_1 + 0xd8) == -1) {
        local_248 = 1;
        if (DAT_18006edb0 == (code *)0x0) {
          lVar2 = -1;
        }
        else {
          lVar2 = (*DAT_18006edb0)(&local_268);
        }
        *(longlong *)(param_1 + 0xd8) = lVar2;
        if (lVar2 == -1) {
          *(undefined8 *)(param_1 + 0xd8) = 0;
        }
      }
    }
    else {
      SetLastError(0x6f);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 1800220a8 (62 bytes) name=Unlock

/* Library Function - Single Match
    public: void __cdecl CTypeLibCache::Unlock(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CTypeLibCache::Unlock(CTypeLibCache *this)

{
  CTypeLibCache *pCVar1;
  
  LOCK();
  pCVar1 = this + 0x30;
  *(int *)pCVar1 = *(int *)pCVar1 + -1;
  UNLOCK();
  if (*(int *)pCVar1 == 0) {
    if (*(longlong **)(this + 0x28) != (longlong *)0x0) {
      (**(code **)(**(longlong **)(this + 0x28) + 0x10))();
      *(undefined8 *)(this + 0x28) = 0;
    }
    if (*(longlong **)(this + 0x10) != (longlong *)0x0) {
      (**(code **)(**(longlong **)(this + 0x10) + 0x10))();
      *(undefined8 *)(this + 0x10) = 0;
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 1800220e8 (45 bytes) name=_AFX_THREAD_STATE

/* Library Function - Single Match
    public: __cdecl _AFX_THREAD_STATE::_AFX_THREAD_STATE(void) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

_AFX_THREAD_STATE * __thiscall _AFX_THREAD_STATE::_AFX_THREAD_STATE(_AFX_THREAD_STATE *this)

{
  *(undefined ***)this = vftable;
  *(undefined4 *)(this + 0x60) = 0;
  *(undefined4 *)(this + 0x90) = 0;
  *(undefined8 *)(this + 0x88) = 0;
  return this;
}


==================================================================

### EXPORT FUNC 180022118 (69 bytes) name=~_AFX_THREAD_STATE

/* Library Function - Single Match
    public: virtual __cdecl _AFX_THREAD_STATE::~_AFX_THREAD_STATE(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

void __thiscall _AFX_THREAD_STATE::~_AFX_THREAD_STATE(_AFX_THREAD_STATE *this)

{
  *(undefined ***)this = vftable;
  if (*(HHOOK *)(this + 0x50) != (HHOOK)0x0) {
    UnhookWindowsHookEx(*(HHOOK *)(this + 0x50));
  }
  if (*(HHOOK *)(this + 0x48) != (HHOOK)0x0) {
    UnhookWindowsHookEx(*(HHOOK *)(this + 0x48));
  }
  if (*(LPVOID *)(this + 0x18) != (LPVOID)0x0) {
    FUN_180034a70(*(LPVOID *)(this + 0x18));
  }
  return;
}


==================================================================

### EXPORT FUNC 180022160 (244 bytes) name=~AFX_MODULE_THREAD_STATE

/* Library Function - Single Match
    public: virtual __cdecl AFX_MODULE_THREAD_STATE::~AFX_MODULE_THREAD_STATE(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

void __thiscall AFX_MODULE_THREAD_STATE::~AFX_MODULE_THREAD_STATE(AFX_MODULE_THREAD_STATE *this)

{
  undefined8 *puVar1;
  longlong lVar2;
  longlong *plVar3;
  LPVOID pvVar4;
  
  *(undefined ***)this = vftable;
  if (*(longlong **)(this + 0x78) != (longlong *)0x0) {
    (**(code **)(**(longlong **)(this + 0x78) + 0x278))();
  }
  thunk_FUN_180034a70(*(LPVOID *)(this + 0x90));
  puVar1 = *(undefined8 **)(this + 0x28);
  if (puVar1 != (undefined8 *)0x0) {
    (**(code **)*puVar1)(puVar1,1);
  }
  puVar1 = *(undefined8 **)(this + 0x30);
  if (puVar1 != (undefined8 *)0x0) {
    (**(code **)*puVar1)(puVar1,1);
  }
  puVar1 = *(undefined8 **)(this + 0x38);
  if (puVar1 != (undefined8 *)0x0) {
    (**(code **)*puVar1)(puVar1,1);
  }
  puVar1 = *(undefined8 **)(this + 0x40);
  if (puVar1 != (undefined8 *)0x0) {
    (**(code **)*puVar1)(puVar1,1);
  }
  puVar1 = *(undefined8 **)(this + 0x48);
  if (puVar1 != (undefined8 *)0x0) {
    (**(code **)*puVar1)(puVar1,1);
  }
  if (*(longlong *)(this + 0x70) != 0) {
    lVar2 = *(longlong *)(*(longlong *)(this + 0x70) + 0x18);
    while (lVar2 != 0) {
      pvVar4 = (LPVOID)FUN_180030448(*(longlong *)(this + 0x70));
      thunk_FUN_180034a70(pvVar4);
      lVar2 = *(longlong *)(*(longlong *)(this + 0x70) + 0x18);
    }
  }
  plVar3 = *(longlong **)(this + 0x60);
  if (plVar3 != (longlong *)0x0) {
    (**(code **)(*plVar3 + 8))(plVar3,1);
  }
  plVar3 = *(longlong **)(this + 0x68);
  if (plVar3 != (longlong *)0x0) {
    (**(code **)(*plVar3 + 8))(plVar3,1);
  }
  plVar3 = *(longlong **)(this + 0x70);
  if (plVar3 != (longlong *)0x0) {
    (**(code **)(*plVar3 + 8))(plVar3,1);
  }
  return;
}


==================================================================

### EXPORT FUNC 180022254 (47 bytes) name=FUN_180022254

_AFX_THREAD_STATE * FUN_180022254(_AFX_THREAD_STATE *param_1,uint param_2)

{
  _AFX_THREAD_STATE::~_AFX_THREAD_STATE(param_1);
  if ((param_2 & 1) != 0) {
    FUN_180022ca8(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180022284 (64 bytes) name=AFX_MODULE_THREAD_STATE

/* Library Function - Single Match
    public: __cdecl AFX_MODULE_THREAD_STATE::AFX_MODULE_THREAD_STATE(void) __ptr64
   
   Library: Visual Studio 2008 Release */

AFX_MODULE_THREAD_STATE * __thiscall
AFX_MODULE_THREAD_STATE::AFX_MODULE_THREAD_STATE(AFX_MODULE_THREAD_STATE *this)

{
  *(undefined ***)this = vftable;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x88) = 0xffffffffffffffff;
  *(undefined8 *)(this + 0x98) = 0xffffffffffffffff;
  *(code **)(this + 0x50) = FUN_18001eb58;
  *(undefined8 *)(this + 0x90) = 0;
  *(undefined8 *)(this + 0x18) = 200;
  return this;
}


==================================================================

### EXPORT FUNC 1800222c4 (47 bytes) name=FUN_1800222c4

AFX_MODULE_THREAD_STATE * FUN_1800222c4(AFX_MODULE_THREAD_STATE *param_1,uint param_2)

{
  AFX_MODULE_THREAD_STATE::~AFX_MODULE_THREAD_STATE(param_1);
  if ((param_2 & 1) != 0) {
    FUN_180022ca8(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 1800222f4 (38 bytes) name=FUN_1800222f4

void FUN_1800222f4(void)

{
  void *pvVar1;
  
  pvVar1 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar1 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  return;
}


==================================================================

### EXPORT FUNC 18002231c (234 bytes) name=FUN_18002231c

void FUN_18002231c(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  int *piVar1;
  int iVar2;
  longlong *plVar3;
  undefined8 *puVar4;
  longlong lVar5;
  
  *param_1 = AFX_MODULE_STATE::vftable;
  plVar3 = (longlong *)param_1[0x17];
  if (plVar3 != (longlong *)0x0) {
    (**(code **)(*plVar3 + 0x18))(plVar3,param_1 + 0x10,param_3,param_4,0xfffffffffffffffe);
    plVar3 = (longlong *)param_1[0x17];
    if (plVar3 != (longlong *)0x0) {
      (**(code **)(*plVar3 + 8))(plVar3,1);
    }
  }
  puVar4 = *(undefined8 **)param_1[0x19];
  if (puVar4 != (undefined8 *)0x0) {
    (**(code **)*puVar4)(puVar4,1);
  }
  puVar4 = *(undefined8 **)(param_1[0x19] + 8);
  if (puVar4 != (undefined8 *)0x0) {
    (**(code **)*puVar4)(puVar4,1);
  }
  thunk_FUN_180034a70((LPVOID)param_1[0x19]);
  if ((param_1[0x1b] != 0) && (param_1[0x1b] != -1)) {
    if (DAT_18006edb8 != (code *)0x0) {
      (*DAT_18006edb8)();
    }
    param_1[0x1b] = 0xffffffffffffffff;
  }
  CThreadLocalObject::~CThreadLocalObject((CThreadLocalObject *)(param_1 + 0x18));
  lVar5 = param_1[0xb];
  LOCK();
  piVar1 = (int *)(lVar5 + -8);
  iVar2 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)(lVar5 + -0x18) + 8))();
  }
  return;
}


==================================================================

### EXPORT FUNC 18002240c (28 bytes) name=Unwind@18002240c

void Unwind_18002240c(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(*(longlong *)(param_2 + 0x40) + 0x58));
  return;
}


==================================================================

### EXPORT FUNC 18002242c (31 bytes) name=Unwind@18002242c

void Unwind_18002242c(undefined8 param_1,longlong param_2)

{
  CThreadLocalObject::~CThreadLocalObject
            ((CThreadLocalObject *)(*(longlong *)(param_2 + 0x40) + 0xc0));
  return;
}


==================================================================

### EXPORT FUNC 18002244c (47 bytes) name=FUN_18002244c

undefined8 *
FUN_18002244c(undefined8 *param_1,ulonglong param_2,undefined8 param_3,undefined8 param_4)

{
  FUN_18002231c(param_1,param_2,param_3,param_4);
  if ((param_2 & 1) != 0) {
    FUN_180022ca8(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18002247c (762 bytes) name=FUN_18002247c

undefined8 * FUN_18002247c(undefined8 *param_1)

{
  int *piVar1;
  int iVar2;
  longlong *plVar3;
  longlong local_res8;
  
  FUN_18000b610(&local_res8,L"comctl32.dll");
  *param_1 = CDllIsolationWrapperBase::vftable;
  plVar3 = FUN_18000b300((longlong *)(local_res8 + -0x18));
  param_1[3] = plVar3 + 3;
  param_1[1] = 0;
  *(undefined1 *)(param_1 + 2) = 0;
  LOCK();
  piVar1 = (int *)(local_res8 + -8);
  iVar2 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)(local_res8 + -0x18) + 8))();
  }
  *param_1 = CComCtlWrapper::vftable;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  param_1[0xc] = 0;
  param_1[0xd] = 0;
  param_1[0xe] = 0;
  param_1[0xf] = 0;
  param_1[0x10] = 0;
  param_1[0x11] = 0;
  param_1[0x12] = 0;
  param_1[0x13] = 0;
  param_1[0x14] = 0;
  param_1[0x15] = 0;
  param_1[0x16] = 0;
  param_1[0x17] = 0;
  param_1[0x18] = 0;
  param_1[0x19] = 0;
  param_1[0x1a] = 0;
  param_1[0x1b] = 0;
  param_1[0x1c] = 0;
  param_1[0x1d] = 0;
  param_1[0x1e] = 0;
  param_1[0x1f] = 0;
  param_1[0x20] = 0;
  param_1[0x21] = 0;
  param_1[0x22] = 0;
  param_1[0x23] = 0;
  param_1[0x24] = 0;
  param_1[0x25] = 0;
  param_1[0x26] = 0;
  param_1[0x27] = 0;
  param_1[0x28] = 0;
  param_1[0x29] = 0;
  param_1[0x2a] = 0;
  param_1[0x2b] = 0;
  param_1[0x2c] = 0;
  param_1[0x2d] = 0;
  param_1[0x2e] = 0;
  param_1[0x2f] = 0;
  param_1[0x30] = 0;
  param_1[0x31] = 0;
  param_1[0x32] = 0;
  param_1[0x33] = 0;
  param_1[0x34] = 0;
  param_1[0x35] = 0;
  param_1[0x36] = 0;
  param_1[0x37] = 0;
  param_1[0x38] = 0;
  param_1[0x39] = 0;
  param_1[0x3a] = 0;
  param_1[0x3b] = 0;
  param_1[0x3c] = 0;
  param_1[0x3d] = 0;
  param_1[0x3e] = 0;
  param_1[0x3f] = 0;
  param_1[0x40] = 0;
  param_1[0x41] = 0;
  param_1[0x42] = 0;
  param_1[0x43] = 0;
  param_1[0x44] = 0;
  param_1[0x45] = 0;
  param_1[0x46] = 0;
  param_1[0x47] = 0;
  param_1[0x48] = 0;
  param_1[0x49] = 0;
  param_1[0x4a] = 0;
  param_1[0x4b] = 0;
  param_1[0x4c] = 0;
  param_1[0x4d] = 0;
  param_1[0x4e] = 0;
  param_1[0x4f] = 0;
  param_1[0x50] = 0;
  param_1[0x51] = 0;
  param_1[0x52] = 0;
  param_1[0x53] = 0;
  param_1[0x54] = 0;
  param_1[0x55] = 0;
  param_1[0x56] = 0;
  param_1[0x57] = 0;
  param_1[0x58] = 0;
  param_1[0x59] = 0;
  param_1[0x5a] = 0;
  param_1[0x5b] = 0;
  param_1[0x5c] = 0;
  param_1[0x5d] = 0;
  param_1[0x5e] = 0;
  param_1[0x5f] = 0;
  param_1[0x60] = 0;
  param_1[0x61] = 0;
  return param_1;
}


==================================================================

### EXPORT FUNC 18002277c (24 bytes) name=Unwind@18002277c

void Unwind_18002277c(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 180022794 (251 bytes) name=FUN_180022794

undefined8 * FUN_180022794(undefined8 *param_1)

{
  int *piVar1;
  int iVar2;
  longlong *plVar3;
  longlong local_res8;
  
  FUN_18000b610(&local_res8,L"comdlg32.dll");
  *param_1 = CDllIsolationWrapperBase::vftable;
  plVar3 = FUN_18000b300((longlong *)(local_res8 + -0x18));
  param_1[3] = plVar3 + 3;
  param_1[1] = 0;
  *(undefined1 *)(param_1 + 2) = 0;
  LOCK();
  piVar1 = (int *)(local_res8 + -8);
  iVar2 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)(local_res8 + -0x18) + 8))();
  }
  *param_1 = CCommDlgWrapper::vftable;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  param_1[10] = 0;
  param_1[0xb] = 0;
  param_1[0xc] = 0;
  param_1[0xd] = 0;
  param_1[0xe] = 0;
  param_1[0xf] = 0;
  param_1[0x10] = 0;
  param_1[0x11] = 0;
  param_1[0x12] = 0;
  param_1[0x13] = 0;
  param_1[0x14] = 0;
  param_1[0x15] = 0;
  param_1[0x16] = 0;
  param_1[0x17] = 0;
  param_1[0x18] = 0;
  return param_1;
}


==================================================================

### EXPORT FUNC 180022894 (24 bytes) name=Unwind@180022894

void Unwind_180022894(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 1800228ac (101 bytes) name=FUN_1800228ac

undefined8 * FUN_1800228ac(undefined8 *param_1,ulonglong param_2)

{
  int *piVar1;
  int iVar2;
  longlong lVar3;
  
  *param_1 = CDllIsolationWrapperBase::vftable;
  if (*(char *)(param_1 + 2) != '\0') {
    FreeLibrary((HMODULE)param_1[1]);
  }
  lVar3 = param_1[3];
  LOCK();
  piVar1 = (int *)(lVar3 + -8);
  iVar2 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
  }
  if ((param_2 & 1) != 0) {
    FUN_180022ca8(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180022914 (381 bytes) name=FUN_180022914

undefined8 * FUN_180022914(undefined8 *param_1,undefined1 param_2)

{
  undefined **ppuVar1;
  longlong lVar2;
  LPVOID pvVar3;
  undefined8 *puVar4;
  
  *param_1 = AFX_MODULE_STATE::vftable;
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 0;
  param_1[9] = 0;
  ppuVar1 = FUN_18001fcc0();
  if (ppuVar1 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar2 = (**(code **)(*ppuVar1 + 0x18))(ppuVar1);
  param_1[0xb] = lVar2 + 0x18;
  param_1[0xe] = 0;
  param_1[0xf] = 0;
  *(undefined4 *)(param_1 + 0x11) = 0xffffffff;
  param_1[0x12] = 0;
  param_1[0x15] = 0;
  *(undefined4 *)(param_1 + 0x16) = 0;
  param_1[9] = 0x40;
  param_1[7] = 0x20;
  *(undefined4 *)((longlong)param_1 + 0x2c) = 0;
  *(undefined1 *)(param_1 + 5) = param_2;
  if ((int)(*(int *)(param_1[0xb] + -0xc) - 0x1000U | 1U - *(int *)(param_1[0xb] + -8)) < 0) {
    FUN_18000b190(param_1 + 0xb,0x1000);
  }
  *(undefined4 *)((longlong)param_1 + 0x54) = 1;
  param_1[0xf] = 0x20;
  pvVar3 = FUN_18001eb74(0x10);
  param_1[0x19] = pvVar3;
  puVar4 = (undefined8 *)FUN_180022c84(0x310);
  if (puVar4 == (undefined8 *)0x0) {
    puVar4 = (undefined8 *)0x0;
  }
  else {
    puVar4 = FUN_18002247c(puVar4);
  }
  *(undefined8 **)param_1[0x19] = puVar4;
  puVar4 = (undefined8 *)FUN_180022c84(200);
  if (puVar4 == (undefined8 *)0x0) {
    puVar4 = (undefined8 *)0x0;
  }
  else {
    puVar4 = FUN_180022794(puVar4);
  }
  *(undefined8 **)(param_1[0x19] + 8) = puVar4;
  *(undefined4 *)(param_1 + 0x1a) = 1;
  param_1[0x1b] = 0;
  return param_1;
}


==================================================================

### EXPORT FUNC 180022aa4 (28 bytes) name=Unwind@180022aa4

void Unwind_180022aa4(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(*(longlong *)(param_2 + 0x40) + 0x58));
  return;
}


==================================================================

### EXPORT FUNC 180022ac4 (31 bytes) name=Unwind@180022ac4

void Unwind_180022ac4(undefined8 param_1,longlong param_2)

{
  CThreadLocalObject::~CThreadLocalObject
            ((CThreadLocalObject *)(*(longlong *)(param_2 + 0x40) + 0xc0));
  return;
}


==================================================================

### EXPORT FUNC 180022ae4 (43 bytes) name=Catch@180022ae4

undefined * Catch_180022ae4(undefined8 param_1,longlong param_2)

{
  if (*(longlong **)(param_2 + 0x28) != (longlong *)0x0) {
    FUN_18001ec74(*(longlong **)(param_2 + 0x28));
  }
  return &DAT_1800229ef;
}


==================================================================

### EXPORT FUNC 180022b14 (24 bytes) name=Unwind@180022b14

void Unwind_180022b14(undefined8 param_1,longlong param_2)

{
  FUN_180022ca8(*(HLOCAL *)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 180022b34 (24 bytes) name=Unwind@180022b34

void Unwind_180022b34(undefined8 param_1,longlong param_2)

{
  FUN_180022ca8(*(HLOCAL *)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 180022b4c (74 bytes) name=CreateObject

/* Library Function - Single Match
    public: static class CNoTrackObject * __ptr64 __cdecl CProcessLocal<class
   _AFX_BASE_MODULE_STATE>::CreateObject(void)
   
   Library: Visual Studio 2005 Release */

CNoTrackObject * __cdecl CProcessLocal<_AFX_BASE_MODULE_STATE>::CreateObject(void)

{
  CNoTrackObject *pCVar1;
  
  pCVar1 = (CNoTrackObject *)FUN_180022c84(0xe0);
  if (pCVar1 == (CNoTrackObject *)0x0) {
    pCVar1 = (CNoTrackObject *)0x0;
  }
  else {
    FUN_180022914((undefined8 *)pCVar1,1);
    *(undefined ***)pCVar1 = _AFX_BASE_MODULE_STATE::vftable;
  }
  return pCVar1;
}


==================================================================

### EXPORT FUNC 180022b9c (24 bytes) name=Unwind@180022b9c

void Unwind_180022b9c(undefined8 param_1,longlong param_2)

{
  FUN_180022ca8(*(HLOCAL *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 180022bb4 (76 bytes) name=FUN_180022bb4

void FUN_180022bb4(void)

{
  void *pvVar1;
  CNoTrackObject *pCVar2;
  
  pvVar1 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar1 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (*(longlong *)((longlong)pvVar1 + 8) == 0) {
    pCVar2 = CProcessLocalObject::GetData
                       ((CProcessLocalObject *)&DAT_18006edd8,
                        CProcessLocal<_AFX_BASE_MODULE_STATE>::CreateObject);
    if (pCVar2 == (CNoTrackObject *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180022c04 (43 bytes) name=FUN_180022c04

void FUN_180022c04(void)

{
  longlong lVar1;
  void *pvVar2;
  
  lVar1 = FUN_180022bb4();
  pvVar2 = FUN_180023520((int *)(lVar1 + 0xc0),CThreadLocal<AFX_MODULE_THREAD_STATE>::CreateObject);
  if (pvVar2 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  return;
}


==================================================================

### EXPORT FUNC 180022c30 (84 bytes) name=AFX_MAINTAIN_STATE2

/* Library Function - Single Match
    public: __cdecl AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(class AFX_MODULE_STATE * __ptr64)
   __ptr64
   
   Library: Visual Studio 2008 Release */

AFX_MAINTAIN_STATE2 * __thiscall
AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(AFX_MAINTAIN_STATE2 *this,AFX_MODULE_STATE *param_1)

{
  undefined4 uVar1;
  longlong lVar2;
  
  lVar2 = FUN_180022bb4();
  uVar1 = 0;
  if (((*(int *)(lVar2 + 0xd0) != 0) && (*(longlong *)(param_1 + 0xd8) != -1)) &&
     (DAT_18006edc0 != (code *)0x0)) {
    uVar1 = (*DAT_18006edc0)(*(longlong *)(param_1 + 0xd8),this);
  }
  *(undefined4 *)(this + 8) = uVar1;
  return this;
}


==================================================================

### EXPORT FUNC 180022c84 (33 bytes) name=FUN_180022c84

void FUN_180022c84(SIZE_T param_1)

{
  HLOCAL pvVar1;
  
  pvVar1 = LocalAlloc(0x40,param_1);
  if (pvVar1 == (HLOCAL)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed6c();
  }
  return;
}


==================================================================

### EXPORT FUNC 180022ca8 (20 bytes) name=FUN_180022ca8

void FUN_180022ca8(HLOCAL param_1)

{
  if (param_1 != (HLOCAL)0x0) {
    LocalFree(param_1);
  }
  return;
}


==================================================================

### EXPORT FUNC 180022cbc (109 bytes) name=GetThreadValue

/* Library Function - Single Match
    public: void * __ptr64 __cdecl CThreadSlotData::GetThreadValue(int) __ptr64
   
   Library: Visual Studio 2008 Release */

void * __thiscall CThreadSlotData::GetThreadValue(CThreadSlotData *this,int param_1)

{
  void *pvVar1;
  LPVOID pvVar2;
  
  EnterCriticalSection((LPCRITICAL_SECTION)(this + 0x28));
  if ((((0 < param_1) && (param_1 < *(int *)(this + 0xc))) &&
      (pvVar2 = TlsGetValue(*(DWORD *)this), pvVar2 != (LPVOID)0x0)) &&
     (param_1 < *(int *)((longlong)pvVar2 + 0x10))) {
    pvVar1 = *(void **)(*(longlong *)((longlong)pvVar2 + 0x18) + (longlong)param_1 * 8);
    LeaveCriticalSection((LPCRITICAL_SECTION)(this + 0x28));
    return pvVar1;
  }
  LeaveCriticalSection((LPCRITICAL_SECTION)(this + 0x28));
  return (void *)0x0;
}


==================================================================

### EXPORT FUNC 180022d2c (112 bytes) name=AssignInstance

/* Library Function - Single Match
    public: void __cdecl CThreadSlotData::AssignInstance(struct HINSTANCE__ * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CThreadSlotData::AssignInstance(CThreadSlotData *this,HINSTANCE__ *param_1)

{
  longlong lVar1;
  longlong lVar2;
  int iVar3;
  
  EnterCriticalSection((LPCRITICAL_SECTION)(this + 0x28));
  iVar3 = 1;
  if (1 < *(int *)(this + 0xc)) {
    lVar2 = 0x10;
    do {
      lVar1 = *(longlong *)(this + 0x10);
      if ((*(longlong *)(lVar1 + 8 + lVar2) == 0) && ((*(byte *)(lVar1 + lVar2) & 1) != 0)) {
        *(HINSTANCE__ **)(lVar1 + 8 + lVar2) = param_1;
      }
      iVar3 = iVar3 + 1;
      lVar2 = lVar2 + 0x10;
    } while (iVar3 < *(int *)(this + 0xc));
  }
                    /* WARNING: Could not recover jumptable at 0x000180022d95. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LeaveCriticalSection((LPCRITICAL_SECTION)(this + 0x28));
  return;
}


==================================================================

### EXPORT FUNC 180022d9c (36 bytes) name=GetDataNA

/* Library Function - Single Match
    public: class CNoTrackObject * __ptr64 __cdecl CThreadLocalObject::GetDataNA(void) __ptr64
   
   Library: Visual Studio 2008 Release */

CNoTrackObject * __thiscall CThreadLocalObject::GetDataNA(CThreadLocalObject *this)

{
  CNoTrackObject *pCVar1;
  
  if ((*(int *)this == 0) || (DAT_18006edf0 == (CThreadSlotData *)0x0)) {
    pCVar1 = (CNoTrackObject *)0x0;
  }
  else {
    pCVar1 = CThreadSlotData::GetThreadValue(DAT_18006edf0,*(int *)this);
  }
  return pCVar1;
}


==================================================================

### EXPORT FUNC 180022dc0 (80 bytes) name=GetData

/* Library Function - Single Match
    public: class CNoTrackObject * __ptr64 __cdecl CProcessLocalObject::GetData(class CNoTrackObject
   * __ptr64 (__cdecl*)(void)) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

CNoTrackObject * __thiscall
CProcessLocalObject::GetData(CProcessLocalObject *this,_func_CNoTrackObject_ptr *param_1)

{
  CNoTrackObject *pCVar1;
  
  if (*(longlong *)this == 0) {
    FUN_1800237a0(0x10);
    if (*(longlong *)this == 0) {
      pCVar1 = (*param_1)();
      *(CNoTrackObject **)this = pCVar1;
    }
    FUN_180023834(0x10);
  }
  return *(CNoTrackObject **)this;
}


==================================================================

### EXPORT FUNC 180022e10 (32 bytes) name=Catch@180022e10

void Catch_180022e10(void)

{
  FUN_180023834(0x10);
                    /* WARNING: Subroutine does not return */
  _CxxThrowException((void *)0x0,(ThrowInfo *)0x0);
}


==================================================================

### EXPORT FUNC 180022e38 (60 bytes) name=~CProcessLocalObject

/* Library Function - Single Match
    public: __cdecl CProcessLocalObject::~CProcessLocalObject(void) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release, Visual Studio 2010 Release,
   Visual Studio 2012 Release */

void __thiscall CProcessLocalObject::~CProcessLocalObject(CProcessLocalObject *this)

{
  undefined8 *puVar1;
  
  if (*(longlong *)this != 0) {
    puVar1 = *(undefined8 **)this;
    if (puVar1 != (undefined8 *)0x0) {
      (**(code **)*puVar1)(puVar1,1);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180022e74 (29 bytes) name=AfxInitLocalData

/* Library Function - Single Match
    void __cdecl AfxInitLocalData(struct HINSTANCE__ * __ptr64)
   
   Library: Visual Studio 2008 Release */

void __cdecl AfxInitLocalData(HINSTANCE__ *param_1)

{
  if (DAT_18006edf0 != (CThreadSlotData *)0x0) {
    CThreadSlotData::AssignInstance(DAT_18006edf0,param_1);
  }
  return;
}


==================================================================

### EXPORT FUNC 180022e94 (8 bytes) name=FUN_180022e94

void FUN_180022e94(void)

{
  DAT_18006ee50 = DAT_18006ee50 + 1;
  return;
}


==================================================================

### EXPORT FUNC 180022e9c (36 bytes) name=FUN_180022e9c

void FUN_180022e9c(longlong *param_1,longlong param_2)

{
  if (param_2 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  *(longlong *)(param_2 + param_1[1]) = *param_1;
  *param_1 = param_2;
  return;
}


==================================================================

### EXPORT FUNC 180022ec4 (118 bytes) name=FUN_180022ec4

undefined8 FUN_180022ec4(longlong *param_1,longlong param_2)

{
  longlong lVar1;
  undefined8 uVar2;
  longlong lVar3;
  
  lVar3 = *param_1;
  uVar2 = 0;
  if (lVar3 == 0) {
    uVar2 = 0;
  }
  else if (lVar3 == param_2) {
    if (param_2 == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    *param_1 = *(longlong *)(param_2 + param_1[1]);
LAB_180022f2c:
    uVar2 = 1;
  }
  else {
    if (lVar3 == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    do {
      lVar1 = param_1[1];
      if (*(longlong *)(lVar1 + lVar3) == param_2) {
        if (param_2 == 0) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
        *(undefined8 *)(lVar1 + lVar3) = *(undefined8 *)(lVar1 + param_2);
        goto LAB_180022f2c;
      }
      lVar3 = *(longlong *)(lVar1 + lVar3);
    } while (lVar3 != 0);
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 180022f40 (77 bytes) name=FUN_180022f40

DWORD * FUN_180022f40(DWORD *param_1)

{
  DWORD DVar1;
  
  param_1[6] = 0;
  param_1[7] = 0;
  param_1[8] = 8;
  param_1[9] = 0;
  param_1[1] = 0;
  param_1[2] = 1;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  DVar1 = TlsAlloc();
  *param_1 = DVar1;
  if (DVar1 == 0xffffffff) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed6c();
  }
  InitializeCriticalSection((LPCRITICAL_SECTION)(param_1 + 10));
  return param_1;
}


==================================================================

### EXPORT FUNC 180022f90 (403 bytes) name=FUN_180022f90

int FUN_180022f90(longlong param_1)

{
  uint *puVar1;
  int iVar2;
  byte *pbVar3;
  HGLOBAL pvVar4;
  LPVOID pvVar5;
  longlong lVar6;
  int iVar7;
  uint uVar8;
  
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x28));
  iVar2 = *(int *)(param_1 + 4);
  iVar7 = *(int *)(param_1 + 8);
  if ((iVar2 <= iVar7) ||
     ((*(byte *)(*(longlong *)(param_1 + 0x10) + (longlong)iVar7 * 0x10) & 1) != 0)) {
    iVar7 = 1;
    lVar6 = 1;
    if (1 < (longlong)iVar2) {
      pbVar3 = *(byte **)(param_1 + 0x10);
      do {
        pbVar3 = pbVar3 + 0x10;
        if ((*pbVar3 & 1) == 0) break;
        lVar6 = lVar6 + 1;
        iVar7 = iVar7 + 1;
      } while (lVar6 < iVar2);
    }
    if (iVar2 <= iVar7) {
      uVar8 = iVar2 + 0x20;
      if (*(LPCVOID *)(param_1 + 0x10) == (LPCVOID)0x0) {
        if (0xffffffff < (ulonglong)uVar8 << 4) {
                    /* WARNING: Subroutine does not return */
          FUN_18000b170(-0x7ff8ffa9);
        }
        pvVar4 = GlobalAlloc(2,(ulonglong)uVar8 << 4 & 0xffffffff);
      }
      else {
        pvVar4 = GlobalHandle(*(LPCVOID *)(param_1 + 0x10));
        GlobalUnlock(pvVar4);
        if (0xffffffff < (ulonglong)uVar8 << 4) {
                    /* WARNING: Subroutine does not return */
          FUN_18000b170(-0x7ff8ffa9);
        }
        pvVar4 = GlobalReAlloc(pvVar4,(ulonglong)uVar8 << 4 & 0xffffffff,0x2002);
      }
      if (pvVar4 == (HGLOBAL)0x0) {
        if (*(LPCVOID *)(param_1 + 0x10) != (LPCVOID)0x0) {
          pvVar4 = GlobalHandle(*(LPCVOID *)(param_1 + 0x10));
          GlobalLock(pvVar4);
        }
        LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x28));
                    /* WARNING: Subroutine does not return */
        FUN_18001ed6c();
      }
      pvVar5 = GlobalLock(pvVar4);
      FUN_1800357d0((ulonglong *)((longlong)*(int *)(param_1 + 4) * 0x10 + (longlong)pvVar5),0,
                    (longlong)(int)(uVar8 - *(int *)(param_1 + 4)) << 4);
      *(uint *)(param_1 + 4) = uVar8;
      *(LPVOID *)(param_1 + 0x10) = pvVar5;
    }
  }
  if (*(int *)(param_1 + 0xc) <= iVar7) {
    *(int *)(param_1 + 0xc) = iVar7 + 1;
  }
  puVar1 = (uint *)(*(longlong *)(param_1 + 0x10) + (longlong)iVar7 * 0x10);
  *puVar1 = *puVar1 | 1;
  *(int *)(param_1 + 8) = iVar7 + 1;
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x28));
  return iVar7;
}


==================================================================

### EXPORT FUNC 180023128 (153 bytes) name=FUN_180023128

void FUN_180023128(longlong param_1,int param_2)

{
  uint *puVar1;
  undefined8 *puVar2;
  longlong lVar3;
  longlong lVar4;
  
  lVar4 = (longlong)param_2;
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x28));
  if ((0 < param_2) && (param_2 < *(int *)(param_1 + 0xc))) {
    for (lVar3 = *(longlong *)(param_1 + 0x18); lVar3 != 0; lVar3 = *(longlong *)(lVar3 + 8)) {
      if (param_2 < *(int *)(lVar3 + 0x10)) {
        puVar2 = *(undefined8 **)(*(longlong *)(lVar3 + 0x18) + lVar4 * 8);
        if (puVar2 != (undefined8 *)0x0) {
          (**(code **)*puVar2)(puVar2,1);
        }
        *(undefined8 *)(*(longlong *)(lVar3 + 0x18) + lVar4 * 8) = 0;
      }
    }
    puVar1 = (uint *)(*(longlong *)(param_1 + 0x10) + lVar4 * 0x10);
    *puVar1 = *puVar1 & 0xfffffffe;
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x28));
  }
  return;
}


==================================================================

### EXPORT FUNC 1800231c4 (390 bytes) name=FUN_1800231c4

void FUN_1800231c4(DWORD *param_1,int param_2,longlong param_3)

{
  undefined8 *lpTlsValue;
  HLOCAL pvVar1;
  
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 10));
  if ((param_2 < 1) || ((int)param_1[3] <= param_2)) {
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 10));
    return;
  }
  lpTlsValue = TlsGetValue(*param_1);
  if (lpTlsValue == (undefined8 *)0x0) {
    lpTlsValue = (undefined8 *)FUN_180022c84(0x20);
    if (lpTlsValue == (undefined8 *)0x0) {
      lpTlsValue = (undefined8 *)0x0;
    }
    else {
      *lpTlsValue = CThreadData::vftable;
    }
    *(undefined4 *)(lpTlsValue + 2) = 0;
    lpTlsValue[3] = 0;
    *(undefined8 *)((longlong)lpTlsValue + *(longlong *)(param_1 + 8)) =
         *(undefined8 *)(param_1 + 6);
    *(undefined8 **)(param_1 + 6) = lpTlsValue;
  }
  else if ((param_2 < *(int *)(lpTlsValue + 2)) || (param_3 == 0)) goto LAB_180023311;
  if (lpTlsValue[3] == 0) {
    if (0xffffffff < (ulonglong)param_1[3] << 3) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7ff8ffa9);
    }
    pvVar1 = LocalAlloc(0,(ulonglong)param_1[3] << 3 & 0xffffffff);
  }
  else {
    if (0xffffffff < (ulonglong)param_1[3] << 3) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7ff8ffa9);
    }
    pvVar1 = LocalReAlloc((HLOCAL)lpTlsValue[3],(ulonglong)param_1[3] << 3 & 0xffffffff,2);
  }
  if (pvVar1 == (HLOCAL)0x0) {
    LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 10));
                    /* WARNING: Subroutine does not return */
    FUN_18001ed6c();
  }
  lpTlsValue[3] = pvVar1;
  FUN_1800357d0((ulonglong *)((longlong)pvVar1 + (longlong)*(int *)(lpTlsValue + 2) * 8),0,
                (longlong)(int)(param_1[3] - *(int *)(lpTlsValue + 2)) << 3);
  *(DWORD *)(lpTlsValue + 2) = param_1[3];
  TlsSetValue(*param_1,lpTlsValue);
LAB_180023311:
  if ((lpTlsValue[3] != 0) && (param_2 < *(int *)(lpTlsValue + 2))) {
    *(longlong *)(lpTlsValue[3] + (longlong)param_2 * 8) = param_3;
  }
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 10));
  return;
}


==================================================================

### EXPORT FUNC 180023354 (36 bytes) name=Catch@180023354

void Catch_180023354(undefined8 param_1,longlong param_2)

{
  LeaveCriticalSection((LPCRITICAL_SECTION)(*(longlong *)(param_2 + 0x50) + 0x28));
                    /* WARNING: Subroutine does not return */
  _CxxThrowException((void *)0x0,(ThrowInfo *)0x0);
}


==================================================================

### EXPORT FUNC 180023380 (34 bytes) name=FUN_180023380

HLOCAL FUN_180023380(HLOCAL param_1,byte param_2)

{
  if (((param_2 & 1) != 0) && (param_1 != (HLOCAL)0x0)) {
    LocalFree(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 1800233a4 (243 bytes) name=FUN_1800233a4

void FUN_1800233a4(DWORD *param_1,undefined8 *param_2,longlong param_3)

{
  undefined8 *puVar1;
  bool bVar2;
  longlong lVar3;
  int iVar4;
  longlong lVar5;
  
  bVar2 = true;
  iVar4 = 1;
  if (1 < *(int *)(param_2 + 2)) {
    lVar3 = 8;
    lVar5 = 0x10;
    do {
      if ((param_3 == 0) || (*(longlong *)(*(longlong *)(param_1 + 4) + 8 + lVar5) == param_3)) {
        puVar1 = *(undefined8 **)(lVar3 + param_2[3]);
        if (puVar1 != (undefined8 *)0x0) {
          (**(code **)*puVar1)(puVar1,1);
        }
        *(undefined8 *)(lVar3 + param_2[3]) = 0;
      }
      else if (*(longlong *)(lVar3 + param_2[3]) != 0) {
        bVar2 = false;
      }
      iVar4 = iVar4 + 1;
      lVar5 = lVar5 + 0x10;
      lVar3 = lVar3 + 8;
    } while (iVar4 < *(int *)(param_2 + 2));
    if (!bVar2) {
      return;
    }
  }
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 10));
  FUN_180022ec4((longlong *)(param_1 + 6),(longlong)param_2);
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 10));
  LocalFree((HLOCAL)param_2[3]);
  (**(code **)*param_2)(param_2,1);
  TlsSetValue(*param_1,(LPVOID)0x0);
  return;
}


==================================================================

### EXPORT FUNC 180023498 (135 bytes) name=FUN_180023498

void FUN_180023498(DWORD *param_1,longlong param_2,int param_3)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 10));
  if (param_3 == 0) {
    puVar2 = TlsGetValue(*param_1);
    if (puVar2 != (undefined8 *)0x0) {
      FUN_1800233a4(param_1,puVar2,param_2);
    }
  }
  else {
    puVar2 = *(undefined8 **)(param_1 + 6);
    while (puVar2 != (undefined8 *)0x0) {
      puVar1 = (undefined8 *)puVar2[1];
      FUN_1800233a4(param_1,puVar2,param_2);
      puVar2 = puVar1;
    }
  }
                    /* WARNING: Could not recover jumptable at 0x000180023518. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 10));
  return;
}


==================================================================

### EXPORT FUNC 180023520 (182 bytes) name=FUN_180023520

void * FUN_180023520(int *param_1,undefined *param_2)

{
  int iVar1;
  void *pvVar2;
  
  if (param_2 == (undefined *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (*param_1 == 0) {
    if (DAT_18006edf0 == (CThreadSlotData *)0x0) {
      DAT_18006edf0 = (CThreadSlotData *)FUN_180022f40((DWORD *)&DAT_18006ee00);
      if (DAT_18006edf0 == (CThreadSlotData *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
    }
    iVar1 = FUN_180022f90((longlong)DAT_18006edf0);
    *param_1 = iVar1;
    if (iVar1 == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
  }
  pvVar2 = CThreadSlotData::GetThreadValue(DAT_18006edf0,*param_1);
  if (pvVar2 == (void *)0x0) {
    pvVar2 = (void *)(*(code *)param_2)();
    FUN_1800231c4((DWORD *)DAT_18006edf0,*param_1,(longlong)pvVar2);
  }
  return pvVar2;
}


==================================================================

### EXPORT FUNC 1800235e0 (31 bytes) name=Unwind@1800235e0

void Unwind_1800235e0(void)

{
  FUN_180026b64();
  return;
}


==================================================================

### EXPORT FUNC 180023600 (41 bytes) name=~CThreadLocalObject

/* Library Function - Single Match
    public: __cdecl CThreadLocalObject::~CThreadLocalObject(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release,
   Visual Studio 2015 Release */

void __thiscall CThreadLocalObject::~CThreadLocalObject(CThreadLocalObject *this)

{
  if ((*(int *)this != 0) && (DAT_18006edf0 != 0)) {
    FUN_180023128(DAT_18006edf0,*(int *)this);
  }
  *(undefined4 *)this = 0;
  return;
}


==================================================================

### EXPORT FUNC 18002362c (35 bytes) name=FUN_18002362c

void FUN_18002362c(longlong param_1,int param_2)

{
  if (DAT_18006edf0 != (DWORD *)0x0) {
    FUN_180023498(DAT_18006edf0,param_1,param_2);
  }
  return;
}


==================================================================

### EXPORT FUNC 180023650 (115 bytes) name=FUN_180023650

void FUN_180023650(DWORD *param_1)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  HGLOBAL hMem;
  
  puVar2 = *(undefined8 **)(param_1 + 6);
  while (puVar2 != (undefined8 *)0x0) {
    puVar1 = (undefined8 *)puVar2[1];
    FUN_1800233a4(param_1,puVar2,0);
    puVar2 = puVar1;
  }
  if (*param_1 != 0xffffffff) {
    TlsFree(*param_1);
  }
  if (*(LPCVOID *)(param_1 + 4) != (LPCVOID)0x0) {
    hMem = GlobalHandle(*(LPCVOID *)(param_1 + 4));
    GlobalUnlock(hMem);
    GlobalFree(hMem);
  }
                    /* WARNING: Could not recover jumptable at 0x0001800236bc. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 10));
  return;
}


==================================================================

### EXPORT FUNC 1800236c4 (55 bytes) name=AfxTlsRelease

/* Library Function - Single Match
    void __cdecl AfxTlsRelease(void)
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2015 Release */

void __cdecl AfxTlsRelease(void)

{
  if (((DAT_18006ee50 == 0) || (DAT_18006ee50 = DAT_18006ee50 + -1, DAT_18006ee50 == 0)) &&
     (DAT_18006edf0 != (DWORD *)0x0)) {
    FUN_180023650(DAT_18006edf0);
    DAT_18006edf0 = (DWORD *)0x0;
  }
  return;
}


==================================================================

### EXPORT FUNC 1800236fc (48 bytes) name=FUN_1800236fc

int FUN_1800236fc(void)

{
  if (DAT_18006ee54 == 0) {
    DAT_18006ee54 = 1;
    InitializeCriticalSection((LPCRITICAL_SECTION)&DAT_18006f108);
  }
  return DAT_18006ee54;
}


==================================================================

### EXPORT FUNC 18002372c (113 bytes) name=FUN_18002372c

void FUN_18002372c(void)

{
  int *piVar1;
  longlong lVar2;
  LPCRITICAL_SECTION lpCriticalSection;
  
  if (DAT_18006ee54 != 0) {
    DAT_18006ee54 = DAT_18006ee54 + -1;
    DeleteCriticalSection((LPCRITICAL_SECTION)&DAT_18006f108);
    piVar1 = &DAT_18006f130;
    lpCriticalSection = (LPCRITICAL_SECTION)&DAT_18006ee60;
    lVar2 = 0x11;
    do {
      if (*piVar1 != 0) {
        DeleteCriticalSection(lpCriticalSection);
        *piVar1 = *piVar1 + -1;
      }
      lpCriticalSection = lpCriticalSection + 1;
      piVar1 = piVar1 + 1;
      lVar2 = lVar2 + -1;
    } while (lVar2 != 0);
  }
  return;
}


==================================================================

### EXPORT FUNC 1800237a0 (145 bytes) name=FUN_1800237a0

void FUN_1800237a0(uint param_1)

{
  longlong lVar1;
  
  lVar1 = (longlong)(int)param_1;
  if (0x10 < param_1) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (DAT_18006ee54 == 0) {
    FUN_1800236fc();
  }
  if ((&DAT_18006f130)[lVar1] == 0) {
    EnterCriticalSection((LPCRITICAL_SECTION)&DAT_18006f108);
    if ((&DAT_18006f130)[lVar1] == 0) {
      InitializeCriticalSection((LPCRITICAL_SECTION)(&DAT_18006ee60 + lVar1 * 0x28));
      (&DAT_18006f130)[lVar1] = (&DAT_18006f130)[lVar1] + 1;
    }
    LeaveCriticalSection((LPCRITICAL_SECTION)&DAT_18006f108);
  }
                    /* WARNING: Could not recover jumptable at 0x00018002382b. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  EnterCriticalSection((LPCRITICAL_SECTION)(&DAT_18006ee60 + lVar1 * 0x28));
  return;
}


==================================================================

### EXPORT FUNC 180023834 (43 bytes) name=FUN_180023834

void FUN_180023834(uint param_1)

{
  if (0x10 < param_1) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
                    /* WARNING: Could not recover jumptable at 0x000180023859. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LeaveCriticalSection((LPCRITICAL_SECTION)(&DAT_18006ee60 + (longlong)(int)param_1 * 0x28));
  return;
}


==================================================================

### EXPORT FUNC 180023860 (18 bytes) name=FUN_180023860

void FUN_180023860(void)

{
  longlong lVar1;
  
  lVar1 = FUN_180022c04();
  *(int *)(lVar1 + 0x20) = *(int *)(lVar1 + 0x20) + 1;
  return;
}


==================================================================

### EXPORT FUNC 180023874 (212 bytes) name=FUN_180023874

undefined8 *
FUN_180023874(undefined8 *param_1,longlong param_2,longlong param_3,longlong param_4,
             undefined8 param_5,undefined4 param_6)

{
  *param_1 = CHandleMap::vftable;
  CFixedAllocNoSync::CFixedAllocNoSync
            ((CFixedAllocNoSync *)(param_1 + 1),*(uint *)(param_2 + 8),0x40);
  FUN_180030288(param_1 + 6,10);
  FUN_180030288(param_1 + 0xd,4);
  if (param_3 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (param_4 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  InitHashTable((longlong)(param_1 + 0xd),7,0);
  param_1[0x14] = param_2;
  param_1[4] = param_3;
  param_1[5] = param_4;
  param_1[0x15] = param_5;
  *(undefined4 *)(param_1 + 0x16) = param_6;
  return param_1;
}


==================================================================

### EXPORT FUNC 180023954 (28 bytes) name=Unwind@180023954

void Unwind_180023954(undefined8 param_1,longlong param_2)

{
  CFixedAllocNoSync::FreeAll((CFixedAllocNoSync *)(*(longlong *)(param_2 + 0x50) + 8));
  return;
}


==================================================================

### EXPORT FUNC 180023974 (28 bytes) name=Unwind@180023974

void Unwind_180023974(undefined8 param_1,longlong param_2)

{
  FUN_1800302c0((CMapPtrToPtr *)(*(longlong *)(param_2 + 0x50) + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 180023994 (28 bytes) name=Unwind@180023994

void Unwind_180023994(undefined8 param_1,longlong param_2)

{
  FUN_1800302c0((CMapPtrToPtr *)(*(longlong *)(param_2 + 0x50) + 0x68));
  return;
}


==================================================================

### EXPORT FUNC 1800239b0 (228 bytes) name=FromHandle

/* Library Function - Single Match
    public: class CObject * __ptr64 __cdecl CHandleMap::FromHandle(void * __ptr64) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

CObject * __thiscall CHandleMap::FromHandle(CHandleMap *this,void *param_1)

{
  longlong lVar1;
  CObject *pCVar2;
  undefined *puVar3;
  undefined8 *puVar4;
  
  if (param_1 == (void *)0x0) {
    pCVar2 = (CObject *)0x0;
  }
  else {
    pCVar2 = (CObject *)FUN_180030118((longlong)(this + 0x30),(ulonglong)param_1);
    if (pCVar2 == (CObject *)0x0) {
      pCVar2 = (CObject *)FUN_180030118((longlong)(this + 0x68),(ulonglong)param_1);
      if (pCVar2 == (CObject *)0x0) {
        puVar3 = FUN_18001eb64(FUN_18003067c);
        pCVar2 = CFixedAllocNoSync::Alloc((CFixedAllocNoSync *)(this + 8));
        if (pCVar2 == (CObject *)0x0) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed6c();
        }
        (**(code **)(this + 0x20))(pCVar2);
        puVar4 = FUN_18003033c((longlong)(this + 0x68),(ulonglong)param_1);
        *puVar4 = pCVar2;
        FUN_18001eb64(puVar3);
        lVar1 = *(longlong *)(this + 0xa8);
        *(void **)(pCVar2 + lVar1) = param_1;
        if (*(int *)(this + 0xb0) == 2) {
          *(void **)(pCVar2 + lVar1 + 8) = param_1;
        }
      }
      else {
        lVar1 = *(longlong *)(this + 0xa8);
        *(void **)(pCVar2 + lVar1) = param_1;
        if (*(int *)(this + 0xb0) == 2) {
          *(void **)(pCVar2 + lVar1 + 8) = param_1;
        }
      }
    }
  }
  return pCVar2;
}


==================================================================

### EXPORT FUNC 180023aa0 (31 bytes) name=Catch@180023aa0

void Catch_180023aa0(undefined8 param_1,longlong param_2)

{
  FUN_18001eb64(*(undefined **)(param_2 + 0x58));
                    /* WARNING: Subroutine does not return */
  _CxxThrowException((void *)0x0,(ThrowInfo *)0x0);
}


==================================================================

### EXPORT FUNC 180023ac8 (143 bytes) name=DeleteTemp

/* Library Function - Single Match
    public: void __cdecl CHandleMap::DeleteTemp(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

void __thiscall CHandleMap::DeleteTemp(CHandleMap *this)

{
  longlong lVar1;
  longlong local_res8;
  longlong local_res10;
  longlong local_res18;
  
  if (this != (CHandleMap *)0x0) {
    local_res10 = -(ulonglong)(*(longlong *)(this + 0x80) != 0);
    while (local_res10 != 0) {
      FUN_1800301c8((longlong)(this + 0x68),&local_res10,&local_res18,&local_res8);
      lVar1 = *(longlong *)(this + 0xa8);
      *(undefined8 *)(local_res8 + lVar1) = 0;
      if (*(int *)(this + 0xb0) == 2) {
        *(undefined8 *)(local_res8 + 8 + lVar1) = 0;
      }
      (**(code **)(this + 0x28))(local_res8);
    }
    CMapPtrToPtr::RemoveAll((CMapPtrToPtr *)(this + 0x68));
    CFixedAllocNoSync::FreeAll((CFixedAllocNoSync *)(this + 8));
  }
  return;
}


==================================================================

### EXPORT FUNC 180023b58 (101 bytes) name=`scalar_deleting_destructor'

/* Library Function - Single Match
    public: virtual void * __ptr64 __cdecl CHandleMap::`scalar deleting destructor'(unsigned int)
   __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

void * __thiscall CHandleMap::_scalar_deleting_destructor_(CHandleMap *this,uint param_1)

{
  *(undefined ***)this = vftable;
  DeleteTemp(this);
  FUN_1800302c0((CMapPtrToPtr *)(this + 0x68));
  FUN_1800302c0((CMapPtrToPtr *)(this + 0x30));
  CFixedAllocNoSync::FreeAll((CFixedAllocNoSync *)(this + 8));
  if ((param_1 & 1) != 0) {
    thunk_FUN_180034a70(this);
  }
  return this;
}


==================================================================

### EXPORT FUNC 180023bc8 (28 bytes) name=Unwind@180023bc8

void Unwind_180023bc8(undefined8 param_1,longlong param_2)

{
  CFixedAllocNoSync::FreeAll((CFixedAllocNoSync *)(*(longlong *)(param_2 + 0x40) + 8));
  return;
}


==================================================================

### EXPORT FUNC 180023be8 (28 bytes) name=Unwind@180023be8

void Unwind_180023be8(undefined8 param_1,longlong param_2)

{
  FUN_1800302c0((CMapPtrToPtr *)(*(longlong *)(param_2 + 0x40) + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 180023c08 (28 bytes) name=Unwind@180023c08

void Unwind_180023c08(undefined8 param_1,longlong param_2)

{
  FUN_1800302c0((CMapPtrToPtr *)(*(longlong *)(param_2 + 0x40) + 0x68));
  return;
}


==================================================================

### EXPORT FUNC 180023c24 (323 bytes) name=FUN_180023c24

bool FUN_180023c24(int param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  longlong lVar1;
  longlong lVar2;
  CNoTrackObject *pCVar3;
  SIZE_T SVar4;
  SIZE_T SVar5;
  LPVOID pvVar6;
  int iVar7;
  
  lVar1 = FUN_180022c04();
  SVar5 = 0;
  if ((*(int *)(lVar1 + 0x20) != 0) &&
     (iVar7 = *(int *)(lVar1 + 0x20) + -1, *(int *)(lVar1 + 0x20) = iVar7, iVar7 == 0)) {
    if (param_1 != 0) {
      if (param_1 != -1) {
        lVar2 = FUN_180020e40();
        if ((lVar2 != 0) && (*(code **)(lVar2 + 0x78) != (code *)0x0)) {
          (**(code **)(lVar2 + 0x78))(0,0);
        }
      }
      CHandleMap::DeleteTemp(*(CHandleMap **)(lVar1 + 0x40));
      CHandleMap::DeleteTemp(*(CHandleMap **)(lVar1 + 0x38));
      CHandleMap::DeleteTemp(*(CHandleMap **)(lVar1 + 0x30));
      CHandleMap::DeleteTemp(*(CHandleMap **)(lVar1 + 0x28));
      CHandleMap::DeleteTemp(*(CHandleMap **)(lVar1 + 0x48));
    }
    lVar2 = FUN_180022bb4();
    lVar2 = *(longlong *)(lVar2 + 8);
    pCVar3 = CThreadLocalObject::GetDataNA((CThreadLocalObject *)&DAT_18006ede0);
    if ((pCVar3 != (CNoTrackObject *)0x0) && (lVar2 != 0)) {
      if (*(LPCVOID *)(pCVar3 + 0x18) != (LPCVOID)0x0) {
        SVar4 = FUN_180035e80(*(LPCVOID *)(pCVar3 + 0x18));
        if (*(ulonglong *)(lVar2 + 0x128) <= SVar4) goto LAB_180023d44;
      }
      if (*(longlong *)(lVar2 + 0x128) != 0) {
        if (*(LPCVOID *)(pCVar3 + 0x18) != (LPCVOID)0x0) {
          SVar5 = FUN_180035e80(*(LPCVOID *)(pCVar3 + 0x18));
          FUN_180034a70(*(LPVOID *)(pCVar3 + 0x18));
        }
        pvVar6 = FUN_1800349a0(*(size_t *)(lVar2 + 0x128));
        *(LPVOID *)(pCVar3 + 0x18) = pvVar6;
        if ((pvVar6 == (LPVOID)0x0) && (SVar5 != 0)) {
          pvVar6 = FUN_1800349a0(SVar5);
          *(LPVOID *)(pCVar3 + 0x18) = pvVar6;
        }
      }
    }
  }
LAB_180023d44:
  return *(int *)(lVar1 + 0x20) != 0;
}


==================================================================

### EXPORT FUNC 180023d74 (22 bytes) name=Catch@180023d74

void Catch_180023d74(void)

{
                    /* WARNING: Subroutine does not return */
  _CxxThrowException((void *)0x0,(ThrowInfo *)0x0);
}


==================================================================

### EXPORT FUNC 180023d94 (213 bytes) name=FUN_180023d94

longlong * FUN_180023d94(longlong *param_1,longlong *param_2,int param_3,int param_4)

{
  int iVar1;
  longlong lVar2;
  longlong *plVar3;
  undefined8 *puVar4;
  undefined **ppuVar5;
  
  puVar4 = (undefined8 *)0x0;
  if (param_3 < 0) {
    param_3 = 0;
  }
  if (param_4 < 0) {
    param_4 = 0;
  }
  if (0x7fffffff - param_3 < param_4) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7ff8ffa9);
  }
  lVar2 = *param_1;
  iVar1 = *(int *)(lVar2 + -0x10);
  if (iVar1 < param_3 + param_4) {
    param_4 = iVar1 - param_3;
  }
  if (iVar1 < param_3) {
    param_4 = 0;
  }
  if ((param_3 == 0) && (param_4 == iVar1)) {
    plVar3 = FUN_18000b300((longlong *)(lVar2 + -0x18));
    *param_2 = (longlong)(plVar3 + 3);
  }
  else {
    if (*(longlong **)(lVar2 + -0x18) != (longlong *)0x0) {
      puVar4 = (undefined8 *)(**(code **)(**(longlong **)(lVar2 + -0x18) + 0x20))();
    }
    if (puVar4 == (undefined8 *)0x0) {
      ppuVar5 = FUN_18001fcc0();
      puVar4 = (undefined8 *)(**(code **)(*ppuVar5 + 0x20))(ppuVar5);
    }
    FUN_18000acc0(param_2,(void *)(*param_1 + (longlong)param_3 * 2),param_4,puVar4);
  }
  return param_2;
}


==================================================================

### EXPORT FUNC 180023e6c (154 bytes) name=FUN_180023e6c

longlong * FUN_180023e6c(longlong *param_1,short *param_2,longlong *param_3)

{
  int iVar1;
  longlong lVar2;
  HMODULE pHVar3;
  
  if (param_3 == (longlong *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar2 = (**(code **)(*param_3 + 0x18))(param_3);
  *param_1 = lVar2 + 0x18;
  if (param_2 == (short *)0x0) {
    iVar1 = 0;
  }
  else {
    if (((ulonglong)param_2 & 0xffffffffffff0000) == 0) {
      pHVar3 = (HMODULE)FUN_18001fcac();
      if (pHVar3 == (HMODULE)0x0) {
        return param_1;
      }
      FUN_18000af50(param_1,pHVar3,(uint)param_2 & 0xffff);
      return param_1;
    }
    lVar2 = FUN_1800355e0(param_2);
    iVar1 = (int)lVar2;
  }
  FUN_18000b480(param_1,param_2,iVar1);
  return param_1;
}


==================================================================

### EXPORT FUNC 180023f0c (24 bytes) name=Unwind@180023f0c

void Unwind_180023f0c(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0(*(longlong **)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 180023f24 (335 bytes) name=FUN_180023f24

longlong * FUN_180023f24(longlong *param_1,longlong *param_2,wchar_t *param_3,int *param_4)

{
  wchar_t *_Str;
  wchar_t *pwVar1;
  size_t sVar2;
  size_t sVar3;
  longlong *plVar4;
  undefined **ppuVar5;
  longlong lVar6;
  int iVar7;
  
  iVar7 = *param_4;
  if (iVar7 < 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7ff8ffa9);
  }
  if ((param_3 == (wchar_t *)0x0) || (*param_3 == L'\0')) {
    if (iVar7 < *(int *)(*param_1 + -0x10)) {
      plVar4 = *(longlong **)(*param_1 + -0x18);
      if (plVar4 == (longlong *)0x0) {
        plVar4 = (longlong *)0x0;
      }
      else {
        plVar4 = (longlong *)(**(code **)(*plVar4 + 0x20))();
      }
      if (plVar4 == (longlong *)0x0) {
        ppuVar5 = FUN_18001fcc0();
        plVar4 = (longlong *)(**(code **)(*ppuVar5 + 0x20))(ppuVar5);
      }
      FUN_180023e6c(param_2,(short *)(*param_1 + (longlong)*param_4 * 2),plVar4);
      return param_2;
    }
  }
  else {
    lVar6 = *param_1;
    _Str = (wchar_t *)(lVar6 + (longlong)iVar7 * 2);
    pwVar1 = (wchar_t *)(lVar6 + (longlong)*(int *)(lVar6 + -0x10) * 2);
    if (_Str < pwVar1) {
      sVar2 = wcsspn(_Str,param_3);
      if (_Str + (int)sVar2 < pwVar1) {
        sVar3 = wcscspn(_Str + (int)sVar2,param_3);
        iVar7 = (int)sVar2 + *param_4;
        *param_4 = iVar7 + 1 + (int)sVar3;
        FUN_180023d94(param_1,param_2,iVar7,(int)sVar3);
        return param_2;
      }
    }
  }
  *param_4 = -1;
  if (*(longlong **)(*param_1 + -0x18) == (longlong *)0x0) {
    plVar4 = (longlong *)0x0;
  }
  else {
    plVar4 = (longlong *)(**(code **)(**(longlong **)(*param_1 + -0x18) + 0x20))();
  }
  if (plVar4 == (longlong *)0x0) {
    ppuVar5 = FUN_18001fcc0();
    plVar4 = (longlong *)(**(code **)(*ppuVar5 + 0x20))(ppuVar5);
    if (plVar4 == (longlong *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7fffbffb);
    }
  }
  lVar6 = (**(code **)(*plVar4 + 0x18))();
  *param_2 = lVar6 + 0x18;
  return param_2;
}


==================================================================

### EXPORT FUNC 180024078 (241 bytes) name=FUN_180024078

void FUN_180024078(void)

{
  int *piVar1;
  LPCWSTR pWVar2;
  int iVar3;
  longlong lVar4;
  longlong *plVar5;
  longlong *plVar6;
  int local_res8 [2];
  LPCWSTR local_res10;
  longlong local_res18 [2];
  
  lVar4 = FUN_180022bb4();
  FUN_1800237a0(1);
  local_res8[0] = 0;
  plVar6 = (longlong *)(lVar4 + 0x58);
  FUN_180023f24(plVar6,(longlong *)&local_res10,L"\n",local_res8);
  iVar3 = *(int *)(local_res10 + -8);
  while (iVar3 != 0) {
    lVar4 = FUN_180022bb4();
    UnregisterClassW(local_res10,*(HINSTANCE *)(lVar4 + 0x10));
    plVar5 = FUN_180023f24(plVar6,local_res18,L"\n",local_res8);
    FUN_18000b390((longlong *)&local_res10,plVar5);
    LOCK();
    piVar1 = (int *)(local_res18[0] + -8);
    iVar3 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar3 + -1 < 1) {
      (**(code **)(**(longlong **)(local_res18[0] + -0x18) + 8))();
    }
    iVar3 = *(int *)(local_res10 + -8);
  }
  FUN_18000aec0(plVar6);
  FUN_180023834(1);
  LOCK();
  pWVar2 = local_res10 + -4;
  iVar3 = *(int *)pWVar2;
  *(int *)pWVar2 = *(int *)pWVar2 + -1;
  UNLOCK();
  if (iVar3 + -1 < 1) {
    (**(code **)(**(longlong **)(local_res10 + -0xc) + 8))();
  }
  return;
}


==================================================================

### EXPORT FUNC 180024178 (24 bytes) name=Unwind@180024178

void Unwind_180024178(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x48));
  return;
}


==================================================================

### EXPORT FUNC 180024198 (24 bytes) name=Unwind@180024198

void Unwind_180024198(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 1800241b0 (141 bytes) name=AfxWinTerm

/* Library Function - Single Match
    void __cdecl AfxWinTerm(void)
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

void __cdecl AfxWinTerm(void)

{
  code *pcVar1;
  int iVar2;
  longlong lVar3;
  longlong lVar4;
  
  FUN_180024078();
  lVar3 = FUN_180022bb4();
  if ((*(longlong *)(lVar3 + 8) != 0) &&
     (pcVar1 = *(code **)(*(longlong *)(lVar3 + 8) + 0x78), pcVar1 != (code *)0x0)) {
    (*pcVar1)(1);
  }
  lVar3 = FUN_180022c04();
  if (*(longlong **)(lVar3 + 0x78) != (longlong *)0x0) {
    iVar2 = (**(code **)(**(longlong **)(lVar3 + 0x78) + 0x278))();
    if (iVar2 != 0) {
      *(undefined8 *)(lVar3 + 0x78) = 0;
    }
  }
  lVar3 = FUN_1800222f4();
  lVar4 = FUN_180022bb4();
  if (*(char *)(lVar4 + 0x28) == '\0') {
    if (*(HHOOK *)(lVar3 + 0x50) != (HHOOK)0x0) {
      UnhookWindowsHookEx(*(HHOOK *)(lVar3 + 0x50));
      *(undefined8 *)(lVar3 + 0x50) = 0;
    }
    if (*(HHOOK *)(lVar3 + 0x48) != (HHOOK)0x0) {
      UnhookWindowsHookEx(*(HHOOK *)(lVar3 + 0x48));
      *(undefined8 *)(lVar3 + 0x48) = 0;
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180024240 (121 bytes) name=FUN_180024240

int FUN_180024240(LPCWSTR param_1,short *param_2,ulonglong param_3)

{
  int iVar1;
  LPWSTR lpString;
  
  if (param_1 == (LPCWSTR)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  lpString = PathFindFileNameW(param_1);
  if (param_2 == (short *)0x0) {
    iVar1 = lstrlenW(lpString);
    iVar1 = iVar1 + 1;
  }
  else {
    iVar1 = FUN_1800354c0(param_2,param_3 & 0xffffffff,lpString,-1);
    if (iVar1 != 0) {
      if (iVar1 == 0xc) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed6c();
      }
      if ((iVar1 == 0x16) || (iVar1 == 0x22)) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      if (iVar1 != 0x50) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
    }
    iVar1 = 0;
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 1800242c0 (618 bytes) name=FUN_1800242c0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

void FUN_1800242c0(longlong param_1)

{
  DWORD DVar1;
  int iVar2;
  uint uVar3;
  errno_t eVar4;
  longlong lVar5;
  LPWSTR _Dst;
  wchar_t *pwVar6;
  rsize_t _SizeInWords;
  undefined1 auStack_658 [32];
  WCHAR local_638 [264];
  wchar_t local_428 [264];
  wchar_t local_218 [256];
  ulonglong local_18;
  
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_658;
  lVar5 = FUN_180022bb4();
  *(undefined8 *)(lVar5 + 0x10) = *(undefined8 *)(param_1 + 0x88);
  *(undefined8 *)(lVar5 + 0x18) = *(undefined8 *)(param_1 + 0x88);
  DVar1 = GetModuleFileNameW(*(HMODULE *)(param_1 + 0x88),local_638,0x104);
  if ((DVar1 == 0) || (DVar1 == 0x104)) {
    FUN_1800309ac();
  }
  _Dst = PathFindExtensionW(local_638);
  if (_Dst == (LPWSTR)0x0) {
    FUN_1800309ac();
  }
  *_Dst = L'\0';
  iVar2 = FUN_180024240(local_638,local_428,0x104);
  if (iVar2 != 0) {
    FUN_1800309ac();
  }
  if (*(longlong *)(param_1 + 0xc0) == 0) {
    pwVar6 = FUN_180036040(local_428);
    *(wchar_t **)(param_1 + 0xc0) = pwVar6;
    if (pwVar6 == (wchar_t *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed6c();
    }
  }
  pwVar6 = *(wchar_t **)(param_1 + 0xa0);
  if (pwVar6 == (wchar_t *)0x0) {
    uVar3 = FUN_18001fbc8(0xe000,(ulonglong *)local_218,0x100);
    pwVar6 = local_218;
    if (uVar3 == 0) {
      pwVar6 = *(wchar_t **)(param_1 + 0xc0);
    }
    pwVar6 = FUN_180036040(pwVar6);
    *(wchar_t **)(param_1 + 0xa0) = pwVar6;
    if (pwVar6 == (wchar_t *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed6c();
    }
  }
  *(wchar_t **)(lVar5 + 0x20) = pwVar6;
  if (*(longlong *)(param_1 + 200) == 0) {
    _SizeInWords = 0x104 - ((longlong)_Dst - (longlong)local_638 >> 1);
    if (*(int *)(param_1 + 0xd8) == 1) {
      eVar4 = wcscpy_s(_Dst,_SizeInWords,L".CHM");
      if (eVar4 != 0) {
        if (eVar4 == 0xc) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed6c();
        }
        if ((eVar4 == 0x16) || (eVar4 == 0x22)) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
        if (eVar4 != 0x50) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
      }
    }
    else {
      eVar4 = wcscpy_s(_Dst,_SizeInWords,L".HLP");
      if (eVar4 != 0) {
        if (eVar4 == 0xc) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed6c();
        }
        if ((eVar4 == 0x16) || (eVar4 == 0x22)) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
        if (eVar4 != 0x50) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
      }
    }
    pwVar6 = FUN_180036040(local_638);
    *(wchar_t **)(param_1 + 200) = pwVar6;
    if (pwVar6 == (wchar_t *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed6c();
    }
    *_Dst = L'\0';
  }
  if (*(longlong *)(param_1 + 0xd0) == 0) {
    eVar4 = wcscat_s(local_428,0x104,L".INI");
    if (eVar4 != 0) {
      if (eVar4 == 0xc) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed6c();
      }
      if ((eVar4 == 0x16) || (eVar4 == 0x22)) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      if (eVar4 != 0x50) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
    }
    pwVar6 = FUN_180036040(local_428);
    *(wchar_t **)(param_1 + 0xd0) = pwVar6;
    if (pwVar6 == (wchar_t *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed6c();
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180024538 (183 bytes) name=AfxWinInit

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Multiple Matches With Same Base Name
    int __cdecl AfxWinInit(struct HINSTANCE__ * __ptr64,struct HINSTANCE__ * __ptr64,char *
   __ptr64,int)
    int __cdecl AfxWinInit(struct HINSTANCE__ * __ptr64,struct HINSTANCE__ * __ptr64,wchar_t *
   __ptr64,int)
   
   Library: Visual Studio 2008 Release */

undefined8 AfxWinInit(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined4 param_4)

{
  UINT UVar1;
  longlong lVar2;
  HMODULE hModule;
  
  UVar1 = SetErrorMode(0);
  SetErrorMode(UVar1 | 0x8001);
  lVar2 = FUN_180022bb4();
  *(undefined8 *)(lVar2 + 0x10) = param_1;
  *(undefined8 *)(lVar2 + 0x18) = param_1;
  FUN_180021f5c(lVar2);
  lVar2 = FUN_180022bb4();
  lVar2 = *(longlong *)(lVar2 + 8);
  if (lVar2 != 0) {
    *(undefined8 *)(lVar2 + 0x88) = param_1;
    *(undefined8 *)(lVar2 + 0x90) = param_3;
    *(undefined4 *)(lVar2 + 0x98) = param_4;
    FUN_1800242c0(lVar2);
  }
  lVar2 = FUN_180022bb4();
  if (*(char *)(lVar2 + 0x28) == '\0') {
    AfxInitThread();
  }
  hModule = GetModuleHandleW(L"user32.dll");
  if (hModule != (HMODULE)0x0) {
    _DAT_1800721d0 = GetProcAddress(hModule,"NotifyWinEvent");
  }
  return 1;
}


==================================================================

### EXPORT FUNC 1800245f0 (52 bytes) name=FUN_1800245f0

undefined8 FUN_1800245f0(longlong param_1,longlong param_2)

{
  if (param_1 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (param_2 != 0) {
    do {
      if (param_1 == param_2) {
        return 1;
      }
      param_1 = *(longlong *)(param_1 + 0x18);
    } while (param_1 != 0);
    return 0;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18001ed90();
}


==================================================================

### EXPORT FUNC 180024628 (50 bytes) name=FUN_180024628

void FUN_180024628(undefined8 *param_1,longlong param_2)

{
  longlong lVar1;
  
  if (param_1 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  lVar1 = (**(code **)*param_1)();
  if (lVar1 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  FUN_1800245f0(lVar1,param_2);
  return;
}


==================================================================

### EXPORT FUNC 18002465c (42 bytes) name=AfxDynamicDownCast

/* Library Function - Single Match
    class CObject * __ptr64 __cdecl AfxDynamicDownCast(struct CRuntimeClass * __ptr64,class CObject
   * __ptr64)
   
   Library: Visual Studio 2005 Release */

CObject * __cdecl AfxDynamicDownCast(CRuntimeClass *param_1,CObject *param_2)

{
  int iVar1;
  
  if ((param_2 == (CObject *)0x0) ||
     (iVar1 = FUN_180024628((undefined8 *)param_2,(longlong)param_1), iVar1 == 0)) {
    param_2 = (CObject *)0x0;
  }
  return param_2;
}


==================================================================

### EXPORT FUNC 180024688 (57 bytes) name=AfxClassInit

/* Library Function - Single Match
    void __cdecl AfxClassInit(struct CRuntimeClass * __ptr64)
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release,
   Visual Studio 2015 Release */

void __cdecl AfxClassInit(CRuntimeClass *param_1)

{
  longlong lVar1;
  
  lVar1 = FUN_180022bb4();
  FUN_1800237a0(0);
  FUN_180022e9c((longlong *)(lVar1 + 0x30),(longlong)param_1);
  FUN_180023834(0);
  return;
}


==================================================================

### EXPORT FUNC 1800246c4 (184 bytes) name=FID_conflict:AfxCtxMessageBoxA

/* Library Function - Multiple Matches With Different Base Names
    int __cdecl AfxCtxMessageBoxA(struct HWND__ * __ptr64,char const * __ptr64,char const *
   __ptr64,unsigned int)
    int __cdecl AfxCtxMessageBoxW(struct HWND__ * __ptr64,wchar_t const * __ptr64,wchar_t const *
   __ptr64,unsigned int)
   
   Library: Visual Studio 2008 Release */

ulonglong FID_conflict_AfxCtxMessageBoxA(HWND param_1,LPCWSTR param_2,LPCWSTR param_3,UINT param_4)

{
  undefined1 uVar1;
  int iVar2;
  uint uVar3;
  DWORD dwErrCode;
  longlong lVar4;
  undefined7 extraout_var;
  undefined8 local_10;
  ulonglong uVar5;
  
  local_10 = 0;
  lVar4 = FUN_180022bb4();
  uVar1 = FUN_180021f24(*(undefined8 *)(lVar4 + 0xd8),(longlong)&local_10);
  uVar5 = CONCAT71(extraout_var,uVar1);
  iVar2 = (int)uVar5;
  if (iVar2 != 0) {
    uVar3 = MessageBoxW(param_1,param_2,param_3,param_4);
    uVar5 = (ulonglong)uVar3;
    if (iVar2 != 2) {
      if (uVar3 != 0) {
        dwErrCode = 0;
      }
      else {
        dwErrCode = GetLastError();
      }
      FUN_180021f08();
      if (uVar3 == 0) {
        SetLastError(dwErrCode);
      }
    }
  }
  return uVar5;
}


==================================================================

### EXPORT FUNC 180024784 (72 bytes) name=FUN_180024784

void FUN_180024784(undefined8 param_1,longlong param_2)

{
  DWORD dwErrCode;
  bool bVar1;
  
  if (*(int *)(param_2 + 0x24) != 2) {
    bVar1 = *(int *)(param_2 + 0x20) != 0;
    if (bVar1) {
      dwErrCode = 0;
    }
    else {
      dwErrCode = GetLastError();
    }
    FUN_180021f08();
    if (!bVar1) {
      SetLastError(dwErrCode);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 1800247cc (101 bytes) name=DoEnableModeless

/* Library Function - Single Match
    public: static void __cdecl CWinApp::DoEnableModeless(int)
   
   Library: Visual Studio 2008 Release */

void __cdecl CWinApp::DoEnableModeless(int param_1)

{
  int iVar1;
  longlong *plVar2;
  
  plVar2 = (longlong *)FUN_180020e40();
  if (plVar2 == (longlong *)0x0) {
    plVar2 = (longlong *)0x0;
  }
  else {
    plVar2 = (longlong *)(**(code **)(*plVar2 + 0xe8))(plVar2);
  }
  if (plVar2 != (longlong *)0x0) {
    iVar1 = (**(code **)(*plVar2 + 0x240))(plVar2);
    if ((iVar1 != 0) && (plVar2[0x1c] != 0)) {
      (**(code **)(*(longlong *)plVar2[0x1c] + 200))((longlong *)plVar2[0x1c],param_1);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180024834 (260 bytes) name=FUN_180024834

HWND FUN_180024834(HWND param_1,undefined8 *param_2)

{
  HWND hWnd;
  uint uVar1;
  BOOL BVar2;
  longlong lVar3;
  longlong *plVar4;
  HWND hWnd_00;
  HWND pHVar5;
  HWND hWnd_01;
  
  hWnd_00 = param_1;
  if (param_1 != (HWND)0x0) goto LAB_180024899;
  lVar3 = FUN_1800222f4();
  if (*(longlong *)(lVar3 + 0x1b8) == 0) {
    plVar4 = (longlong *)FUN_180020e40();
    if (plVar4 == (longlong *)0x0) {
      lVar3 = 0;
    }
    else {
      lVar3 = (**(code **)(*plVar4 + 0xe8))(plVar4);
    }
    if (lVar3 == 0) {
      hWnd_00 = (HWND)0x0;
      pHVar5 = hWnd_00;
      hWnd_01 = hWnd_00;
      goto joined_r0x0001800248c7;
    }
    hWnd_00 = *(HWND *)(lVar3 + 0x40);
  }
  else {
    hWnd_00 = *(HWND *)(*(longlong *)(lVar3 + 0x1b8) + 0x40);
  }
  for (; pHVar5 = hWnd_00, hWnd_01 = hWnd_00, hWnd_00 != (HWND)0x0; hWnd_00 = GetParent(hWnd_00)) {
LAB_180024899:
    uVar1 = GetWindowLongW(hWnd_00,-0x10);
    pHVar5 = hWnd_00;
    hWnd_01 = hWnd_00;
    if ((uVar1 >> 0x1e & 1) == 0) break;
  }
joined_r0x0001800248c7:
  while (hWnd = pHVar5, hWnd != (HWND)0x0) {
    pHVar5 = GetParent(hWnd);
    hWnd_00 = hWnd;
  }
  if ((param_1 == (HWND)0x0) && (hWnd_01 != (HWND)0x0)) {
    hWnd_01 = GetLastActivePopup(hWnd_01);
  }
  if (param_2 != (undefined8 *)0x0) {
    if (((hWnd_00 == (HWND)0x0) || (BVar2 = IsWindowEnabled(hWnd_00), BVar2 == 0)) ||
       (hWnd_00 == hWnd_01)) {
      *param_2 = 0;
    }
    else {
      *param_2 = hWnd_00;
      EnableWindow(hWnd_00,0);
    }
  }
  return hWnd_01;
}


==================================================================

### EXPORT FUNC 180024938 (7 bytes) name=FUN_180024938

void FUN_180024938(undefined8 param_1,int param_2)

{
  CWinApp::DoEnableModeless(param_2);
  return;
}


==================================================================

### EXPORT FUNC 180024940 (400 bytes) name=ShowAppMessageBox

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    public: static int __cdecl CWinApp::ShowAppMessageBox(class CWinApp * __ptr64,wchar_t const *
   __ptr64,unsigned int,unsigned int)
   
   Library: Visual Studio 2005 Release */

int __cdecl CWinApp::ShowAppMessageBox(CWinApp *param_1,wchar_t *param_2,uint param_3,uint param_4)

{
  DWORD DVar1;
  HWND hWnd;
  CWinApp *pCVar2;
  ulonglong uVar3;
  int iVar4;
  WCHAR *pWVar5;
  undefined1 auStack_288 [32];
  DWORD local_268 [2];
  HWND local_260;
  WCHAR local_258 [259];
  undefined2 local_52;
  ulonglong local_48;
  
  local_48 = DAT_18006cea0 ^ (ulonglong)auStack_288;
  DoEnableModeless(0);
  hWnd = FUN_180024834((HWND)0x0,&local_260);
  if (hWnd != local_260) {
    EnableWindow(hWnd,1);
  }
  iVar4 = 0;
  local_268[0] = 0;
  GetWindowThreadProcessId(hWnd,local_268);
  if ((((hWnd == (HWND)0x0) || (DVar1 = GetCurrentProcessId(), local_268[0] != DVar1)) ||
      (pCVar2 = (CWinApp *)SendMessageW(hWnd,0x376,0,0), pCVar2 == (CWinApp *)0x0)) &&
     (pCVar2 = (CWinApp *)0x0, param_1 != (CWinApp *)0x0)) {
    pCVar2 = param_1 + 0xf0;
  }
  if ((pCVar2 != (CWinApp *)0x0) && (iVar4 = *(int *)pCVar2, param_4 != 0)) {
    *(uint *)pCVar2 = param_4 + 0x30000;
  }
  if ((param_3 & 0xf0) == 0) {
    if ((param_3 & 0xf) < 2) {
      param_3 = param_3 | 0x30;
    }
    else if ((param_3 & 0xf) - 3 < 2) {
      param_3 = param_3 | 0x20;
    }
  }
  local_258[0] = L'\0';
  if (param_1 == (CWinApp *)0x0) {
    pWVar5 = local_258;
    DVar1 = GetModuleFileNameW((HMODULE)0x0,local_258,0x104);
    if (DVar1 == 0x104) {
      local_52 = 0;
    }
  }
  else {
    pWVar5 = *(WCHAR **)(param_1 + 0xa0);
  }
  uVar3 = FID_conflict_AfxCtxMessageBoxA(hWnd,param_2,pWVar5,param_3);
  if (pCVar2 != (CWinApp *)0x0) {
    *(int *)pCVar2 = iVar4;
  }
  if (local_260 != (HWND)0x0) {
    EnableWindow(local_260,1);
  }
  DoEnableModeless(1);
  return (int)uVar3;
}


==================================================================

### EXPORT FUNC 180024ad0 (80 bytes) name=AfxMessageBox

/* Library Function - Multiple Matches With Same Base Name
    int __cdecl AfxMessageBox(char const * __ptr64,unsigned int,unsigned int)
    int __cdecl AfxMessageBox(wchar_t const * __ptr64,unsigned int,unsigned int)
   
   Library: Visual Studio 2008 Release */

void AfxMessageBox(wchar_t *param_1,uint param_2,uint param_3)

{
  longlong lVar1;
  
  lVar1 = FUN_180022bb4();
  if (*(longlong **)(lVar1 + 8) == (longlong *)0x0) {
    CWinApp::ShowAppMessageBox((CWinApp *)0x0,param_1,param_2,param_3);
  }
  else {
    (**(code **)(**(longlong **)(lVar1 + 8) + 0x130))();
  }
  return;
}


==================================================================

### EXPORT FUNC 180024b20 (191 bytes) name=FUN_180024b20

undefined4 FUN_180024b20(uint param_1,uint param_2,uint param_3)

{
  wchar_t *pwVar1;
  int iVar2;
  undefined4 uVar3;
  undefined **ppuVar4;
  longlong lVar5;
  HMODULE pHVar6;
  wchar_t *pwVar7;
  wchar_t *local_res20;
  
  ppuVar4 = FUN_18001fcc0();
  if (ppuVar4 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar5 = (**(code **)(*ppuVar4 + 0x18))(ppuVar4);
  local_res20 = (wchar_t *)(lVar5 + 0x18);
  pHVar6 = (HMODULE)FUN_18001fcac();
  pwVar7 = (wchar_t *)(lVar5 + 0x18);
  if (pHVar6 != (HMODULE)0x0) {
    FUN_18000af50((longlong *)&local_res20,pHVar6,param_1);
    pwVar7 = local_res20;
  }
  if (param_3 == 0xffffffff) {
    param_3 = param_1;
  }
  uVar3 = AfxMessageBox(pwVar7,param_2,param_3);
  LOCK();
  pwVar1 = pwVar7 + -4;
  iVar2 = *(int *)pwVar1;
  *(int *)pwVar1 = *(int *)pwVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)(pwVar7 + -0xc) + 8))();
  }
  return uVar3;
}


==================================================================

### EXPORT FUNC 180024be0 (24 bytes) name=Unwind@180024be0

void Unwind_180024be0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x58));
  return;
}


==================================================================

### EXPORT FUNC 180024bf8 (72 bytes) name=AfxDlgProc

/* Library Function - Single Match
    __int64 __cdecl AfxDlgProc(struct HWND__ * __ptr64,unsigned int,unsigned __int64,__int64)
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

__int64 __cdecl AfxDlgProc(HWND__ *param_1,uint param_2,__uint64 param_3,__int64 param_4)

{
  int iVar1;
  CWnd *pCVar2;
  CObject *pCVar3;
  __int64 _Var4;
  
  if (param_2 == 0x110) {
    pCVar2 = CWnd::FromHandlePermanent(param_1);
    pCVar3 = AfxDynamicDownCast((CRuntimeClass *)&PTR_s_CDialog_180054b80,(CObject *)pCVar2);
    if (pCVar3 == (CObject *)0x0) {
      _Var4 = 1;
    }
    else {
      iVar1 = (**(code **)(*(longlong *)pCVar3 + 0x290))(pCVar3);
      _Var4 = (__int64)iVar1;
    }
  }
  else {
    _Var4 = 0;
  }
  return _Var4;
}


==================================================================

### EXPORT FUNC 180024c40 (58 bytes) name=FUN_180024c40

void FUN_180024c40(CWnd *param_1)

{
  *(undefined ***)param_1 = CDialog::vftable;
  if (*(longlong *)(param_1 + 0x40) != 0) {
    FUN_180029920((longlong)param_1);
  }
  CWnd::~CWnd(param_1);
  return;
}


==================================================================

### EXPORT FUNC 180024c80 (24 bytes) name=Unwind@180024c80

void Unwind_180024c80(undefined8 param_1,longlong param_2)

{
  CWnd::~CWnd(*(CWnd **)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 180024c98 (126 bytes) name=OnPaint

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    protected: void __cdecl CDialog::OnPaint(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CDialog::OnPaint(CDialog *this)

{
  int iVar1;
  undefined1 auStack_b8 [32];
  undefined8 local_98;
  CPaintDC local_88 [112];
  ulonglong local_18;
  
  local_98 = 0xfffffffffffffffe;
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_b8;
  CPaintDC::CPaintDC(local_88,(CWnd *)this);
  iVar1 = CWnd::PaintWindowlessControls((CWnd *)this,(CDC *)local_88);
  if (iVar1 == 0) {
    FUN_1800294c4((longlong *)this);
    CPaintDC::~CPaintDC(local_88);
  }
  else {
    CPaintDC::~CPaintDC(local_88);
  }
  return;
}


==================================================================

### EXPORT FUNC 180024d18 (24 bytes) name=Unwind@180024d18

void Unwind_180024d18(undefined8 param_1,longlong param_2)

{
  CPaintDC::~CPaintDC((CPaintDC *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 180024d30 (13 bytes) name=FUN_180024d30

undefined8 FUN_180024d30(longlong param_1,undefined8 param_2)

{
  *(undefined8 *)(param_1 + 0xe0) = param_2;
  return 1;
}


==================================================================

### EXPORT FUNC 180024d40 (8 bytes) name=FUN_180024d40

undefined8 FUN_180024d40(longlong param_1)

{
  return *(undefined8 *)(param_1 + 0xe0);
}


==================================================================

### EXPORT FUNC 180024d48 (109 bytes) name=CDialog

/* Library Function - Single Match
    public: __cdecl CDialog::CDialog(unsigned int,class CWnd * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

CDialog * __thiscall CDialog::CDialog(CDialog *this,uint param_1,CWnd *param_2)

{
  CWnd::CWnd((CWnd *)this);
  *(undefined ***)this = vftable;
  FUN_1800357d0((ulonglong *)(this + 0xa8),0,0x40);
  *(ulonglong *)(this + 0xb0) = (ulonglong)(param_1 & 0xffff);
  *(uint *)(this + 0xa8) = param_1;
  *(CWnd **)(this + 0xd0) = param_2;
  return this;
}


==================================================================

### EXPORT FUNC 180024db8 (57 bytes) name=EndDialog

/* Library Function - Single Match
    public: void __cdecl CDialog::EndDialog(int) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CDialog::EndDialog(CDialog *this,int param_1)

{
  if (((byte)this[0x78] & 0x18) != 0) {
    (**(code **)(*(longlong *)this + 0x108))(this,param_1);
  }
                    /* WARNING: Could not recover jumptable at 0x000180024dea. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  ::EndDialog(*(undefined8 *)(this + 0x40),(longlong)param_1);
  return;
}


==================================================================

### EXPORT FUNC 180024df4 (42 bytes) name=OnOK

/* Library Function - Single Match
    protected: virtual void __cdecl CDialog::OnOK(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CDialog::OnOK(CDialog *this)

{
  int iVar1;
  
  iVar1 = CWnd::UpdateData((CWnd *)this,1);
  if (iVar1 != 0) {
    EndDialog(this,1);
  }
  return;
}


==================================================================

### EXPORT FUNC 180024e20 (10 bytes) name=FUN_180024e20

void FUN_180024e20(CDialog *param_1)

{
  CDialog::EndDialog(param_1,2);
  return;
}


==================================================================

### EXPORT FUNC 180024e40 (8 bytes) name=FUN_180024e40

undefined ** FUN_180024e40(void)

{
  return &PTR_s_CDialog_180054b80;
}


==================================================================

### EXPORT FUNC 180024e60 (206 bytes) name=PreTranslateMessage

/* Library Function - Single Match
    public: virtual int __cdecl CDialog::PreTranslateMessage(struct tagMSG * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

int __thiscall CDialog::PreTranslateMessage(CDialog *this,tagMSG *param_1)

{
  int iVar1;
  uint uVar2;
  BOOL BVar3;
  CFrameWnd *pCVar4;
  HWND hWnd;
  
  iVar1 = CWnd::PreTranslateMessage((CWnd *)this,param_1);
  if (iVar1 == 0) {
    pCVar4 = CWnd::GetTopLevelFrame((CWnd *)this);
    if ((pCVar4 != (CFrameWnd *)0x0) && (*(int *)(pCVar4 + 0xc4) != 0)) {
      return 0;
    }
    if ((((param_1->message != 0x100) ||
         (((param_1->wParam != 0x1b && (param_1->wParam != 3)) ||
          (uVar2 = GetWindowLongW(param_1->hwnd,-0x10), (uVar2 & 4) == 0)))) ||
        (iVar1 = _AfxCompareClassName(param_1->hwnd,L"Edit"), iVar1 == 0)) ||
       ((hWnd = GetDlgItem(*(HWND *)(this + 0x40),2), hWnd != (HWND)0x0 &&
        (BVar3 = IsWindowEnabled(hWnd), BVar3 == 0)))) {
      iVar1 = CWnd::PreTranslateInput((CWnd *)this,param_1);
      return iVar1;
    }
    SendMessageW(*(HWND *)(this + 0x40),0x111,2,0);
  }
  return 1;
}


==================================================================

### EXPORT FUNC 180024f30 (200 bytes) name=OnCmdMsg

/* Library Function - Single Match
    public: virtual int __cdecl CDialog::OnCmdMsg(unsigned int,int,void * __ptr64,struct
   AFX_CMDHANDLERINFO * __ptr64) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

int __thiscall
CDialog::OnCmdMsg(CDialog *this,uint param_1,int param_2,void *param_3,AFX_CMDHANDLERINFO *param_4)

{
  uint uVar1;
  int iVar2;
  HWND pHVar3;
  CWnd *pCVar4;
  longlong *plVar5;
  undefined4 in_register_00000084;
  
  uVar1 = FUN_18002d834((longlong *)this,param_1,CONCAT44(in_register_00000084,param_2),param_3,
                        (longlong *)param_4);
  if (uVar1 == 0) {
    if ((((param_2 == 0) || (param_2 == -1)) && ((param_1 >> 0xf & 1) != 0)) && (param_1 < 0xf000))
    {
      pHVar3 = GetParent(*(HWND *)(this + 0x40));
      pCVar4 = CWnd::FromHandle(pHVar3);
      if (pCVar4 != (CWnd *)0x0) {
        iVar2 = (**(code **)(*(longlong *)pCVar4 + 0x18))(pCVar4,param_1,param_2,param_3,param_4);
        if (iVar2 != 0) goto LAB_180024f66;
      }
      plVar5 = (longlong *)FUN_180020e40();
      if (plVar5 != (longlong *)0x0) {
        iVar2 = (**(code **)(*plVar5 + 0x18))(plVar5,param_1,param_2,param_3,param_4);
        if (iVar2 != 0) goto LAB_180024f66;
      }
    }
    iVar2 = 0;
  }
  else {
LAB_180024f66:
    iVar2 = 1;
  }
  return iVar2;
}


==================================================================

### EXPORT FUNC 180024ff8 (47 bytes) name=FUN_180024ff8

CWnd * FUN_180024ff8(CWnd *param_1,uint param_2)

{
  FUN_180024c40(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180025028 (92 bytes) name=PreModal

/* Library Function - Single Match
    protected: struct HWND__ * __ptr64 __cdecl CDialog::PreModal(void) __ptr64
   
   Library: Visual Studio 2008 Release */

HWND__ * __thiscall CDialog::PreModal(CDialog *this)

{
  longlong lVar1;
  HWND pHVar2;
  
  lVar1 = FUN_180022bb4();
  pHVar2 = (HWND)0x0;
  if (*(longlong *)(lVar1 + 8) != 0) {
    FUN_180024938(*(longlong *)(lVar1 + 8),0);
  }
  if (*(longlong *)(this + 0xd0) != 0) {
    pHVar2 = *(HWND *)(*(longlong *)(this + 0xd0) + 0x40);
  }
  pHVar2 = FUN_180024834(pHVar2,(undefined8 *)(this + 0xd8));
  FUN_18002b980((longlong)this);
  return pHVar2;
}


==================================================================

### EXPORT FUNC 180025084 (95 bytes) name=PostModal

/* Library Function - Single Match
    protected: void __cdecl CDialog::PostModal(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CDialog::PostModal(CDialog *this)

{
  BOOL BVar1;
  longlong lVar2;
  
  FUN_1800296fc();
  CWnd::Detach((CWnd *)this);
  BVar1 = IsWindow(*(HWND *)(this + 0xd8));
  if (BVar1 != 0) {
    EnableWindow(*(HWND *)(this + 0xd8),1);
  }
  *(undefined8 *)(this + 0xd8) = 0;
  lVar2 = FUN_180022bb4();
  if (*(longlong *)(lVar2 + 8) != 0) {
    FUN_180024938(*(longlong *)(lVar2 + 8),1);
  }
  return;
}


==================================================================

### EXPORT FUNC 1800250e4 (46 bytes) name=HandleSetFont

/* Library Function - Single Match
    protected: __int64 __cdecl CDialog::HandleSetFont(unsigned __int64,__int64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release, Visual Studio 2010 Release,
   Visual Studio 2012 Release */

__int64 __thiscall CDialog::HandleSetFont(CDialog *this,__uint64 param_1,__int64 param_2)

{
  CGdiObject *pCVar1;
  __int64 _Var2;
  
  pCVar1 = CGdiObject::FromHandle((void *)param_1);
  (**(code **)(*(longlong *)this + 0x298))(this,pCVar1);
  _Var2 = FUN_1800294c4((longlong *)this);
  return _Var2;
}


==================================================================

### EXPORT FUNC 180025114 (175 bytes) name=FUN_180025114

longlong FUN_180025114(CDialog *param_1)

{
  longlong *plVar1;
  int iVar2;
  longlong lVar3;
  HWND pHVar4;
  CWnd *pCVar5;
  
  (**(code **)(*(longlong *)param_1 + 0x2b0))();
  lVar3 = FUN_180022bb4();
  plVar1 = *(longlong **)(lVar3 + 0x68);
  if ((plVar1 != (longlong *)0x0) && (*(longlong *)(param_1 + 0xe0) != 0)) {
    if (*(longlong *)(param_1 + 200) == 0) {
      iVar2 = (**(code **)(*plVar1 + 0x48))(plVar1,param_1,*(undefined8 *)(param_1 + 0xb0));
    }
    else {
      iVar2 = (**(code **)(*plVar1 + 0x40))();
    }
    if (iVar2 == 0) {
      CDialog::EndDialog(param_1,-1);
      return 0;
    }
  }
  lVar3 = FUN_1800294c4((longlong *)param_1);
  if ((lVar3 != 0) && ((*(uint *)(param_1 + 0x78) >> 8 & 1) != 0)) {
    pHVar4 = GetNextDlgTabItem(*(HWND *)(param_1 + 0x40),(HWND)0x0,0);
    pCVar5 = CWnd::FromHandle(pHVar4);
    if (pCVar5 != (CWnd *)0x0) {
      FUN_18002e2f0((longlong)pCVar5);
      lVar3 = 0;
    }
  }
  return lVar3;
}


==================================================================

### EXPORT FUNC 1800251c4 (133 bytes) name=AfxHelpEnabled

/* Library Function - Single Match
    int __cdecl AfxHelpEnabled(void)
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

int __cdecl AfxHelpEnabled(void)

{
  int iVar1;
  longlong lVar2;
  longlong *plVar3;
  undefined1 local_18 [24];
  
  lVar2 = FUN_180022bb4();
  if (*(longlong *)(lVar2 + 8) == 0) {
    iVar1 = 0;
  }
  else {
    plVar3 = (longlong *)FUN_180020e40();
    if (plVar3 == (longlong *)0x0) {
      plVar3 = (longlong *)0x0;
    }
    else {
      plVar3 = (longlong *)(**(code **)(*plVar3 + 0xe8))(plVar3);
    }
    if ((plVar3 != (longlong *)0x0) &&
       (iVar1 = (**(code **)(*plVar3 + 0x18))(plVar3,0xe146,0,0,local_18), iVar1 != 0)) {
      return 1;
    }
    lVar2 = FUN_180022bb4();
    iVar1 = (**(code **)(**(longlong **)(lVar2 + 8) + 0x18))
                      (*(longlong **)(lVar2 + 8),0xe146,0,0,local_18);
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 18002524c (122 bytes) name=FUN_18002524c

undefined8 FUN_18002524c(CWnd *param_1)

{
  int iVar1;
  CWnd *pCVar2;
  
  if (*(ushort **)(param_1 + 200) == (ushort *)0x0) {
    iVar1 = FUN_18002d608((longlong)param_1,*(LPCWSTR *)(param_1 + 0xb0));
  }
  else {
    iVar1 = FUN_18002d064((longlong)param_1,*(ushort **)(param_1 + 200));
  }
  if ((iVar1 != 0) && (iVar1 = CWnd::UpdateData(param_1,0), iVar1 != 0)) {
    pCVar2 = CWnd::GetDlgItem(param_1,0xe146);
    if (pCVar2 != (CWnd *)0x0) {
      iVar1 = AfxHelpEnabled();
      FUN_18002e260((longlong)pCVar2,-(uint)(iVar1 != 0) & 5);
    }
    return 1;
  }
  CDialog::EndDialog((CDialog *)param_1,-1);
  return 0;
}


==================================================================

### EXPORT FUNC 1800252c8 (213 bytes) name=FUN_1800252c8

undefined8 FUN_1800252c8(longlong param_1)

{
  HMODULE hModule;
  short sVar1;
  longlong lVar2;
  HRSRC hResInfo;
  HGLOBAL hResData;
  uint *puVar3;
  uint uVar4;
  short sVar5;
  undefined8 uVar6;
  
  puVar3 = *(uint **)(param_1 + 0xc0);
  hResData = *(HGLOBAL *)(param_1 + 0xb8);
  if (*(longlong *)(param_1 + 0xb0) != 0) {
    lVar2 = FUN_180022bb4();
    hModule = *(HMODULE *)(lVar2 + 0x18);
    hResInfo = FindResourceW(hModule,*(LPCWSTR *)(param_1 + 0xb0),(LPCWSTR)0x5);
    hResData = LoadResource(hModule,hResInfo);
  }
  if (hResData != (HGLOBAL)0x0) {
    puVar3 = LockResource(hResData);
  }
  uVar6 = 1;
  if (puVar3 != (uint *)0x0) {
    uVar4 = *puVar3;
    if (*(short *)((longlong)puVar3 + 2) == -1) {
      uVar4 = puVar3[3];
      sVar5 = *(short *)((longlong)puVar3 + 0x12);
      sVar1 = (short)puVar3[5];
    }
    else {
      sVar5 = *(short *)((longlong)puVar3 + 10);
      sVar1 = (short)puVar3[3];
    }
    if ((((uVar4 & 0x1801) != 0) || (sVar5 != 0)) || (sVar1 != 0)) {
      uVar6 = 0;
    }
  }
  if (*(longlong *)(param_1 + 0xb0) != 0) {
    FreeResource(hResData);
  }
  return uVar6;
}


==================================================================

### EXPORT FUNC 1800253a0 (86 bytes) name=OnCommandHelp

/* Library Function - Single Match
    protected: __int64 __cdecl CDialog::OnCommandHelp(unsigned __int64,__int64) __ptr64
   
   Library: Visual Studio 2005 Release */

__int64 __thiscall CDialog::OnCommandHelp(CDialog *this,__uint64 param_1,__int64 param_2)

{
  longlong *plVar1;
  uint uVar2;
  longlong lVar3;
  __int64 _Var4;
  
  if ((param_2 == 0) &&
     ((*(int *)(this + 0xa8) == 0 ||
      (uVar2 = *(int *)(this + 0xa8) + 0x20000, param_2 = (__int64)uVar2, uVar2 == 0)))) {
    _Var4 = 0;
  }
  else {
    lVar3 = FUN_180022bb4();
    plVar1 = *(longlong **)(lVar3 + 8);
    if (plVar1 != (longlong *)0x0) {
      (**(code **)(*plVar1 + 0x158))(plVar1,param_2,1);
    }
    _Var4 = 1;
  }
  return _Var4;
}


==================================================================

### EXPORT FUNC 1800253f8 (8 bytes) name=FUN_1800253f8

undefined ** FUN_1800253f8(void)

{
  return &PTR_FUN_180054ed0;
}


==================================================================

### EXPORT FUNC 180025400 (676 bytes) name=FUN_180025400

bool FUN_180025400(longlong *param_1,LPCDLGTEMPLATEW param_2,longlong param_3,HINSTANCE param_4)

{
  ushort *puVar1;
  longlong *plVar2;
  int iVar3;
  longlong lVar4;
  undefined **ppuVar5;
  undefined8 uVar6;
  HWND hMem;
  HWND pHVar7;
  undefined7 extraout_var;
  bool bVar8;
  short local_res20 [4];
  ushort *local_88;
  HWND local_80;
  HWND local_78;
  longlong *local_70;
  undefined8 local_68 [3];
  undefined8 local_50;
  undefined1 local_48 [32];
  
  local_50 = 0xfffffffffffffffe;
  pHVar7 = (HWND)0x0;
  if (param_4 == (HINSTANCE)0x0) {
    lVar4 = FUN_180022bb4();
    param_4 = *(HINSTANCE *)(lVar4 + 0x18);
  }
  lVar4 = FUN_180022bb4();
  plVar2 = *(longlong **)(lVar4 + 0x68);
  local_80 = (HWND)0x0;
  local_78 = (HWND)0x0;
  local_70 = plVar2;
  FUN_18002d230(0x10);
  FUN_18002d230(0x7c000);
  if (plVar2 != (longlong *)0x0) {
    iVar3 = (**(code **)(*param_1 + 600))(param_1,local_48);
    if (iVar3 == 0) {
      return false;
    }
    param_2 = (LPCDLGTEMPLATEW)(**(code **)(*plVar2 + 0x28))(plVar2,local_48,param_2);
  }
  if (param_2 == (LPCDLGTEMPLATEW)0x0) {
    return false;
  }
  ppuVar5 = FUN_18001fcc0();
  if (ppuVar5 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar4 = (**(code **)(*ppuVar5 + 0x18))(ppuVar5);
  local_88 = (ushort *)(lVar4 + 0x18);
  local_res20[0] = 0;
  uVar6 = FUN_180031adc(&param_2->style,(longlong *)&local_88,local_res20);
  bVar8 = (int)uVar6 == 0;
  if (DAT_180072538 == 0) {
LAB_18002555e:
    hMem = (HWND)0x0;
    if (!bVar8) goto LAB_1800255af;
  }
  else if (!bVar8) {
    iVar3 = GetSystemMetrics(0x2a);
    hMem = pHVar7;
    if ((iVar3 == 0) || (iVar3 = FUN_1800360e0(local_88,(ushort *)L"MS Shell Dlg"), iVar3 != 0))
    goto LAB_1800255af;
    if (local_res20[0] == 8) {
      local_res20[0] = 0;
    }
    bVar8 = true;
    goto LAB_18002555e;
  }
  FUN_180031a90(local_68,&param_2->style);
  FUN_180031998(local_68,local_res20[0]);
  hMem = (HWND)FUN_1800315dc(local_68);
  local_80 = hMem;
  FUN_1800315c4(local_68);
  if (hMem != (HWND)0x0) {
    param_2 = GlobalLock(hMem);
  }
LAB_1800255af:
  *(undefined4 *)(param_1 + 0x11) = 0xffffffff;
  *(uint *)(param_1 + 0xf) = *(uint *)(param_1 + 0xf) | 0x10;
  FUN_18002b980((longlong)param_1);
  if (param_3 != 0) {
    pHVar7 = *(HWND *)(param_3 + 0x40);
  }
  pHVar7 = CreateDialogIndirectParamW(param_4,param_2,pHVar7,AfxDlgProc,0);
  LOCK();
  puVar1 = local_88 + -4;
  iVar3 = *(int *)puVar1;
  *(int *)puVar1 = *(int *)puVar1 + -1;
  UNLOCK();
  local_78 = pHVar7;
  if (iVar3 + -1 < 1) {
    (**(code **)(**(longlong **)(local_88 + -0xc) + 8))();
  }
  if ((plVar2 != (longlong *)0x0) && (pHVar7 != (HWND)0x0)) {
    (**(code **)(*plVar2 + 0x30))(plVar2,local_48);
    (**(code **)(*param_1 + 600))(param_1,0);
  }
  bVar8 = FUN_1800296fc();
  if ((int)CONCAT71(extraout_var,bVar8) == 0) {
    (**(code **)(*param_1 + 0x228))(param_1);
  }
  if ((pHVar7 != (HWND)0x0) && ((*(byte *)(param_1 + 0xf) & 0x10) == 0)) {
    DestroyWindow(pHVar7);
    pHVar7 = (HWND)0x0;
  }
  if (hMem != (HWND)0x0) {
    GlobalUnlock(hMem);
    GlobalFree(hMem);
  }
  return pHVar7 != (HWND)0x0;
}


==================================================================

### EXPORT FUNC 1800256c0 (24 bytes) name=Unwind@1800256c0

void Unwind_1800256c0(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 1800256e0 (24 bytes) name=Unwind@1800256e0

void Unwind_1800256e0(undefined8 param_1,longlong param_2)

{
  FUN_1800315c4((undefined8 *)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 180025700 (60 bytes) name=Catch@180025700

/* Library Function - Single Match
    int `protected: int __cdecl CWnd::CreateDlgIndirect(struct DLGTEMPLATE const * __ptr64,class
   CreateDlgIndirect * __ptr64,struct HINSTANCE__ * __ptr64) __ptr64'::`1'::catch$0
   
   Library: Visual Studio 2008 Release */

undefined * Catch_180025700(undefined8 param_1,longlong param_2)

{
  if (*(longlong **)(param_2 + 0x60) != (longlong *)0x0) {
    FUN_18001ec74(*(longlong **)(param_2 + 0x60));
  }
  *(undefined4 *)(*(longlong *)(param_2 + 0xc0) + 0x88) = 0xffffffff;
  return &DAT_180025615;
}


==================================================================

### EXPORT FUNC 180025740 (623 bytes) name=DoModal

/* Library Function - Single Match
    public: virtual __int64 __cdecl CDialog::DoModal(void) __ptr64
   
   Library: Visual Studio 2008 Release */

__int64 __thiscall CDialog::DoModal(CDialog *this)

{
  bool bVar1;
  bool bVar2;
  bool bVar3;
  BOOL BVar4;
  int iVar5;
  ulong uVar6;
  longlong lVar7;
  HRSRC hResInfo;
  HGLOBAL hResData;
  LPCDLGTEMPLATEW pDVar8;
  __int64 _Var9;
  HWND__ *hWnd;
  HWND pHVar10;
  longlong *plVar11;
  CWnd *this_00;
  CWnd *pCVar12;
  undefined7 extraout_var;
  uint uVar13;
  HINSTANCE local_68;
  
  pDVar8 = *(LPCDLGTEMPLATEW *)(this + 0xc0);
  hResData = *(HGLOBAL *)(this + 0xb8);
  lVar7 = FUN_180022bb4();
  local_68 = *(HINSTANCE *)(lVar7 + 0x18);
  if (*(longlong *)(this + 0xb0) != 0) {
    lVar7 = FUN_180022bb4();
    local_68 = *(HINSTANCE *)(lVar7 + 0x18);
    hResInfo = FindResourceW(local_68,*(LPCWSTR *)(this + 0xb0),(LPCWSTR)0x5);
    hResData = LoadResource(local_68,hResInfo);
  }
  if (hResData != (HGLOBAL)0x0) {
    pDVar8 = LockResource(hResData);
  }
  if (pDVar8 == (LPCDLGTEMPLATEW)0x0) {
    _Var9 = -1;
  }
  else {
    hWnd = PreModal(this);
    FUN_1800296fc();
    this_00 = (CWnd *)0x0;
    bVar3 = false;
    bVar1 = false;
    bVar2 = false;
    if (((hWnd != (HWND__ *)0x0) &&
        (pHVar10 = GetDesktopWindow(), bVar1 = bVar3, bVar2 = false, hWnd != pHVar10)) &&
       (BVar4 = IsWindowEnabled(hWnd), BVar4 != 0)) {
      EnableWindow(hWnd,0);
      bVar2 = true;
      plVar11 = (longlong *)FUN_180020e40();
      if (plVar11 != (longlong *)0x0) {
        this_00 = (CWnd *)(**(code **)(*plVar11 + 0xe8))(plVar11);
      }
      if (((this_00 != (CWnd *)0x0) &&
          (iVar5 = (**(code **)(*(longlong *)this_00 + 0x240))(this_00), iVar5 != 0)) &&
         (iVar5 = CWnd::IsWindowEnabled(this_00), iVar5 != 0)) {
        CWnd::EnableWindow(this_00,0);
        bVar1 = bVar2;
      }
    }
    FUN_18002b980((longlong)this);
    pCVar12 = CWnd::FromHandle(hWnd);
    bVar3 = FUN_180025400((longlong *)this,pDVar8,(longlong)pCVar12,local_68);
    if ((int)CONCAT71(extraout_var,bVar3) != 0) {
      if (((byte)this[0x78] & 0x10) != 0) {
        uVar6 = CWnd::GetStyle((CWnd *)this);
        uVar13 = 4;
        if ((uVar6 >> 8 & 1) != 0) {
          uVar13 = 5;
        }
        FUN_180028f44((CWnd *)this,(ulonglong)uVar13);
      }
      if (*(longlong *)(this + 0x40) != 0) {
        CWnd::SetWindowPos((CWnd *)this,(CWnd *)0x0,0,0,0,0,0x97);
      }
    }
    if (bVar1) {
      CWnd::EnableWindow(this_00,1);
    }
    if (bVar2) {
      EnableWindow(hWnd,1);
    }
    if ((hWnd != (HWND__ *)0x0) && (pHVar10 = GetActiveWindow(), pHVar10 == *(HWND *)(this + 0x40)))
    {
      SetActiveWindow(hWnd);
    }
    (**(code **)(*(longlong *)this + 0xc0))(this);
    PostModal(this);
    if (*(longlong *)(this + 0xb0) != 0) {
      FreeResource(hResData);
    }
    _Var9 = (__int64)*(int *)(this + 0x88);
  }
  return _Var9;
}


==================================================================

### EXPORT FUNC 1800259e0 (56 bytes) name=Catch@1800259e0

undefined * Catch_1800259e0(undefined8 param_1,longlong param_2)

{
  if (*(longlong **)(param_2 + 0x60) != (longlong *)0x0) {
    FUN_18001ec74(*(longlong **)(param_2 + 0x60));
  }
  *(undefined4 *)(*(longlong *)(param_2 + 0xb0) + 0x88) = 0xffffffff;
  return &DAT_180025932;
}


==================================================================

### EXPORT FUNC 180025a1c (100 bytes) name=FUN_180025a1c

void FUN_180025a1c(longlong *param_1,LPCDLGTEMPLATEW param_2,longlong param_3,longlong param_4,
                  HINSTANCE param_5)

{
  longlong *plVar1;
  
  if (param_3 == 0) {
    plVar1 = (longlong *)FUN_180020e40();
    if (plVar1 == (longlong *)0x0) {
      param_3 = 0;
    }
    else {
      param_3 = (**(code **)(*plVar1 + 0xe8))(plVar1);
    }
  }
  param_1[0x19] = param_4;
  FUN_180025400(param_1,param_2,param_3,param_5);
  return;
}


==================================================================

### EXPORT FUNC 180025a80 (71 bytes) name=CreateIndirect

/* Library Function - Single Match
    protected: int __cdecl CDialog::CreateIndirect(void * __ptr64,class CWnd * __ptr64,struct
   HINSTANCE__ * __ptr64) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

int __thiscall
CDialog::CreateIndirect(CDialog *this,void *param_1,CWnd *param_2,HINSTANCE__ *param_3)

{
  int iVar1;
  LPCDLGTEMPLATEW pDVar2;
  
  pDVar2 = LockResource(param_1);
  iVar1 = FUN_180025a1c((longlong *)this,pDVar2,(longlong)param_2,0,param_3);
  return iVar1;
}


==================================================================

### EXPORT FUNC 180025ac8 (20 bytes) name=FUN_180025ac8

void FUN_180025ac8(longlong *param_1,LPCDLGTEMPLATEW param_2,longlong param_3,longlong param_4)

{
  FUN_180025a1c(param_1,param_2,param_3,param_4,(HINSTANCE)0x0);
  return;
}


==================================================================

### EXPORT FUNC 180025adc (156 bytes) name=FUN_180025adc

int FUN_180025adc(CDialog *param_1,LPCWSTR param_2,CWnd *param_3)

{
  HINSTANCE__ *hModule;
  int iVar1;
  longlong lVar2;
  HRSRC hResInfo;
  HGLOBAL hResData;
  
  *(LPCWSTR *)(param_1 + 0xb0) = param_2;
  if ((((ulonglong)param_2 & 0xffffffffffff0000) == 0) && (*(int *)(param_1 + 0xa8) == 0)) {
    *(uint *)(param_1 + 0xa8) = (uint)param_2 & 0xffff;
  }
  lVar2 = FUN_180022bb4();
  hModule = *(HINSTANCE__ **)(lVar2 + 0x18);
  hResInfo = FindResourceW(hModule,param_2,(LPCWSTR)0x5);
  hResData = LoadResource(hModule,hResInfo);
  iVar1 = CDialog::CreateIndirect(param_1,hResData,param_3,hModule);
  FreeResource(hResData);
  return iVar1;
}


==================================================================

### EXPORT FUNC 180025b78 (8 bytes) name=FUN_180025b78

void FUN_180025b78(CDialog *param_1,void *param_2,CWnd *param_3)

{
  CDialog::CreateIndirect(param_1,param_2,param_3,(HINSTANCE__ *)0x0);
  return;
}


==================================================================

### EXPORT FUNC 180025b80 (96 bytes) name=IsPlatformNT

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    IsPlatformNT
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

bool IsPlatformNT(void)

{
  undefined1 auStack_d8 [32];
  _OSVERSIONINFOA local_b8;
  ulonglong local_18;
  
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_d8;
  FUN_1800357d0((ulonglong *)&local_b8.dwMajorVersion,0,0x90);
  local_b8.dwOSVersionInfoSize = 0x94;
  GetVersionExA(&local_b8);
  return local_b8.dwPlatformId == 2;
}


==================================================================

### EXPORT FUNC 180025be0 (373 bytes) name=FUN_180025be0

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

bool FUN_180025be0(void)

{
  bool bVar1;
  undefined7 extraout_var;
  HMODULE hModule;
  char *lpProcName;
  
  if (DAT_1800721c8 != 0) {
    return DAT_1800721b0 != (FARPROC)0x0;
  }
  bVar1 = IsPlatformNT();
  DAT_1800721cc = (int)CONCAT71(extraout_var,bVar1);
  hModule = GetModuleHandleW(L"USER32");
  if ((((hModule != (HMODULE)0x0) &&
       (_DAT_180072190 = GetProcAddress(hModule,"GetSystemMetrics"), _DAT_180072190 != (FARPROC)0x0)
       ) && (DAT_180072198 = GetProcAddress(hModule,"MonitorFromWindow"),
            DAT_180072198 != (FARPROC)0x0)) &&
     (((DAT_1800721a0 = GetProcAddress(hModule,"MonitorFromRect"), DAT_1800721a0 != (FARPROC)0x0 &&
       (_DAT_1800721a8 = GetProcAddress(hModule,"MonitorFromPoint"), _DAT_1800721a8 != (FARPROC)0x0)
       ) && ((_DAT_1800721b8 = GetProcAddress(hModule,"EnumDisplayMonitors"),
             _DAT_1800721b8 != (FARPROC)0x0 &&
             (_DAT_1800721c0 = GetProcAddress(hModule,"EnumDisplayDevicesW"),
             _DAT_1800721c0 != (FARPROC)0x0)))))) {
    lpProcName = "GetMonitorInfoW";
    if (DAT_1800721cc == 0) {
      lpProcName = "GetMonitorInfoA";
    }
    DAT_1800721b0 = GetProcAddress(hModule,lpProcName);
    if (DAT_1800721b0 != (FARPROC)0x0) {
      DAT_1800721c8 = 1;
      return true;
    }
  }
  DAT_1800721c8 = 1;
  _DAT_1800721c0 = (FARPROC)0x0;
  _DAT_1800721b8 = (FARPROC)0x0;
  DAT_1800721b0 = (FARPROC)0x0;
  _DAT_1800721a8 = (FARPROC)0x0;
  DAT_1800721a0 = (FARPROC)0x0;
  DAT_180072198 = (FARPROC)0x0;
  _DAT_180072190 = (FARPROC)0x0;
  return false;
}


==================================================================

### EXPORT FUNC 180025d58 (108 bytes) name=xMonitorFromRect

/* Library Function - Single Match
    xMonitorFromRect
   
   Library: Visual Studio 2008 Release */

undefined8 xMonitorFromRect(int *param_1,uint param_2)

{
  bool bVar1;
  int iVar2;
  undefined7 extraout_var;
  undefined8 uVar3;
  
  bVar1 = FUN_180025be0();
  if ((int)CONCAT71(extraout_var,bVar1) == 0) {
    if (((param_2 & 3) == 0) &&
       ((((param_1[2] < 1 || (param_1[3] < 1)) || (iVar2 = GetSystemMetrics(0), iVar2 <= *param_1))
        || (iVar2 = GetSystemMetrics(1), iVar2 <= param_1[1])))) {
      uVar3 = 0;
    }
    else {
      uVar3 = 0x12340042;
    }
    return uVar3;
  }
  uVar3 = (*DAT_1800721a0)(param_1,param_2);
  return uVar3;
}


==================================================================

### EXPORT FUNC 180025dc4 (125 bytes) name=xMonitorFromWindow

/* Library Function - Single Match
    xMonitorFromWindow
   
   Library: Visual Studio 2008 Release */

undefined8 xMonitorFromWindow(HWND param_1,uint param_2)

{
  bool bVar1;
  BOOL BVar2;
  int iVar3;
  undefined7 extraout_var;
  undefined8 uVar4;
  WINDOWPLACEMENT local_38;
  
  bVar1 = FUN_180025be0();
  if ((int)CONCAT71(extraout_var,bVar1) == 0) {
    if ((param_2 & 3) == 0) {
      BVar2 = IsIconic(param_1);
      if (BVar2 == 0) {
        iVar3 = GetWindowRect(param_1,&local_38.rcNormalPosition);
      }
      else {
        iVar3 = GetWindowPlacement(param_1,&local_38);
      }
      if (iVar3 == 0) {
        uVar4 = 0;
      }
      else {
        uVar4 = xMonitorFromRect(&local_38.rcNormalPosition.left,param_2);
      }
    }
    else {
      uVar4 = 0x12340042;
    }
  }
  else {
    uVar4 = (*DAT_180072198)(param_1,param_2);
  }
  return uVar4;
}


==================================================================

### EXPORT FUNC 180025e44 (230 bytes) name=FUN_180025e44

int FUN_180025e44(longlong param_1,uint *param_2)

{
  bool bVar1;
  int iVar2;
  BOOL BVar3;
  uint uVar4;
  undefined7 extraout_var;
  char *lpMultiByteStr;
  undefined8 local_18;
  undefined8 uStack_10;
  
  bVar1 = FUN_180025be0();
  if ((int)CONCAT71(extraout_var,bVar1) == 0) {
    if ((((param_1 != 0x12340042) || (param_2 == (uint *)0x0)) || (*param_2 < 0x28)) ||
       (BVar3 = SystemParametersInfoA(0x30,0,&local_18,0), BVar3 == 0)) {
      return 0;
    }
    param_2[1] = 0;
    param_2[2] = 0;
    uVar4 = GetSystemMetrics(0);
    iVar2 = 1;
    param_2[3] = uVar4;
    uVar4 = GetSystemMetrics(1);
    param_2[9] = 1;
    *(undefined8 *)(param_2 + 5) = local_18;
    *(undefined8 *)(param_2 + 7) = uStack_10;
    param_2[4] = uVar4;
    if (*param_2 < 0x68) {
      return 1;
    }
    lpMultiByteStr = "DISPLAY";
  }
  else {
    iVar2 = (*DAT_1800721b0)(param_1,param_2);
    if (iVar2 == 0) {
      return 0;
    }
    if (DAT_1800721cc != 0) {
      return iVar2;
    }
    if (*param_2 < 0x68) {
      return iVar2;
    }
    lpMultiByteStr = (char *)(param_2 + 10);
  }
  MultiByteToWideChar(0,0,lpMultiByteStr,-1,(LPWSTR)(param_2 + 10),0x20);
  return iVar2;
}


==================================================================

### EXPORT FUNC 180025f2c (2168 bytes) name=FUN_180025f2c

HRESULT FUN_180025f2c(longlong *param_1,undefined4 param_2,undefined8 param_3,undefined8 param_4,
                     ushort param_5,longlong *param_6,undefined2 *param_7,undefined8 param_8,
                     undefined4 *param_9)

{
  uint uVar1;
  uint uVar2;
  undefined4 uVar3;
  int iVar4;
  VARIANTARG *pVVar5;
  ULONGLONG UVar6;
  undefined1 *puVar7;
  undefined2 *puVar8;
  uint uVar9;
  uint uVar10;
  ulonglong uVar11;
  ulonglong uVar12;
  uint *puVar13;
  undefined4 *puVar14;
  undefined4 local_res8 [2];
  ULONGLONG local_c8;
  _union_1719 local_c0;
  ULONGLONG local_b8;
  VARIANTARG *local_a8 [4];
  ULONGLONG *local_88;
  VARIANTARG local_80;
  ULONGLONG local_68;
  _union_1719 local_60;
  ULONGLONG local_58;
  undefined8 local_50;
  undefined2 local_48 [16];
  
  local_48[0] = 0;
  if (param_1 == (longlong *)0x0) {
    return -0x7ff8ffa9;
  }
  if (param_6 == (longlong *)0x0) {
    return -0x7ffdfff8;
  }
  uVar1 = *(uint *)(param_6 + 2);
  if (5 < uVar1) {
    return -0x7ffdfff2;
  }
  uVar11 = 0;
  if (*(int *)((longlong)param_6 + 0x14) != 0) {
    puVar13 = (uint *)param_6[1];
    uVar12 = uVar11;
    do {
      if (uVar1 <= *puVar13) {
        return -0x7ffdfff2;
      }
      uVar9 = (int)uVar12 + 1;
      uVar11 = (ulonglong)uVar9;
      uVar2 = *puVar13;
      puVar13 = puVar13 + 1;
      uVar10 = *(uint *)((longlong)param_6 + 0x14);
      local_a8[(int)uVar2] = (VARIANTARG *)(*param_6 + uVar12 * 0x18);
      uVar12 = uVar11;
    } while (uVar9 < uVar10);
  }
  if ((uint)uVar11 < uVar1) {
    pVVar5 = (VARIANTARG *)(*param_6 + uVar11 * 0x18);
    do {
      iVar4 = (int)uVar11;
      uVar10 = iVar4 + 1;
      uVar11 = (ulonglong)uVar10;
      local_a8[(uVar1 - iVar4) - 1] = pVVar5;
      pVVar5 = pVVar5 + 1;
    } while (uVar10 < uVar1);
  }
  iVar4 = -0x7ffdfffd;
  puVar14 = local_res8;
  if (param_9 != (undefined4 *)0x0) {
    puVar14 = param_9;
  }
  puVar8 = local_48;
  if (param_7 != (undefined2 *)0x0) {
    puVar8 = param_7;
  }
  VariantInit(&local_80);
  switch(param_2) {
  case 0xffffec66:
    if ((int)param_6[2] == 1) {
      local_c8 = *(ULONGLONG *)&local_a8[0]->n1;
      local_c0 = (local_a8[0]->n1).decVal.u2;
      local_b8 = *(ULONGLONG *)((longlong)&local_a8[0]->n1 + 0x10);
      iVar4 = (**(code **)(*param_1 + 200))(param_1,&local_c8);
      goto switchD_180026056_default;
    }
    break;
  case 0xffffec67:
    if ((int)param_6[2] == 2) {
      if ((local_a8[0]->n1).n2.vt != 3) {
        iVar4 = VariantChangeType(&local_80,local_a8[0],0,3);
        if (iVar4 < 0) goto LAB_180026385;
        local_a8[0] = &local_80;
      }
      uVar3 = *(undefined4 *)((longlong)&local_a8[0]->n1 + 8);
      if ((local_a8[1]->n1).n2.vt != 3) {
        iVar4 = VariantChangeType(&local_80,local_a8[1],0,3);
        if (iVar4 < 0) {
LAB_1800266b4:
          *puVar14 = 1;
          goto switchD_180026056_default;
        }
        local_a8[1] = &local_80;
      }
      iVar4 = (**(code **)(*param_1 + 0xc0))
                        (param_1,uVar3,*(undefined4 *)((longlong)&local_a8[1]->n1 + 8),puVar8);
      goto switchD_180026056_default;
    }
    break;
  case 0xffffec68:
    if ((int)param_6[2] == 2) {
      if ((local_a8[0]->n1).n2.vt != 3) {
        iVar4 = VariantChangeType(&local_80,local_a8[0],0,3);
        if (iVar4 < 0) goto LAB_180026385;
        local_a8[0] = &local_80;
      }
      local_c8 = *(ULONGLONG *)&local_a8[1]->n1;
      local_c0 = (local_a8[1]->n1).decVal.u2;
      local_b8 = *(ULONGLONG *)((longlong)&local_a8[1]->n1 + 0x10);
      iVar4 = (**(code **)(*param_1 + 0xb8))
                        (param_1,*(undefined4 *)((longlong)&local_a8[0]->n1 + 8),&local_c8,puVar8);
      goto switchD_180026056_default;
    }
    break;
  case 0xffffec69:
    UVar6 = local_68;
    if ((int)param_6[2] == 5) {
      while ((((local_a8[0]->n1).n2.vt >> 0xe & 1) != 0 && ((*(byte *)&local_a8[0]->n1 & 0xf) != 0))
            ) {
        if ((*(byte *)&local_a8[0]->n1 & 0xc) == 0) {
          UVar6 = (local_a8[0]->n1).decVal.u2.Lo64;
        }
        else {
          VariantClear((VARIANTARG *)(local_a8[0]->n1).decVal.u2);
          **(undefined2 **)((longlong)&local_a8[0]->n1 + 8) = 3;
          UVar6 = (local_a8[0]->n1).decVal.u2.Lo64 + 8;
        }
      }
      *puVar14 = 0;
      local_c8 = *local_88;
      local_c0 = *(_union_1719 *)(local_88 + 1);
      local_b8 = local_88[2];
      iVar4 = (**(code **)(*param_1 + 0xb0))
                        (param_1,UVar6,local_60.Lo64,local_58,local_50,&local_c8);
      goto switchD_180026056_default;
    }
    break;
  case 0xffffec6a:
    if ((int)param_6[2] == 2) {
      if ((local_a8[0]->n1).n2.vt != 3) {
        iVar4 = VariantChangeType(&local_80,local_a8[0],0,3);
        if (iVar4 < 0) goto LAB_180026385;
        local_a8[0] = &local_80;
      }
      local_c8 = *(ULONGLONG *)&local_a8[1]->n1;
      local_c0 = (local_a8[1]->n1).decVal.u2;
      local_b8 = *(ULONGLONG *)((longlong)&local_a8[1]->n1 + 0x10);
      iVar4 = (**(code **)(*param_1 + 0xa8))
                        (param_1,*(undefined4 *)((longlong)&local_a8[0]->n1 + 8),&local_c8);
      goto switchD_180026056_default;
    }
    break;
  case 0xffffec6b:
    if ((int)param_6[2] == 1) {
      local_c8 = *(ULONGLONG *)&local_a8[0]->n1;
      local_c0 = (local_a8[0]->n1).decVal.u2;
      local_b8 = *(ULONGLONG *)((longlong)&local_a8[0]->n1 + 0x10);
      iVar4 = (**(code **)(*param_1 + 0xa0))(param_1,&local_c8,puVar8 + 4);
LAB_180026644:
      if (-1 < iVar4) {
        *puVar8 = 8;
      }
      goto switchD_180026056_default;
    }
    break;
  case 0xffffec6c:
    iVar4 = (**(code **)(*param_1 + 0x98))(param_1,puVar8);
    goto switchD_180026056_default;
  case 0xffffec6d:
    iVar4 = (**(code **)(*param_1 + 0x90))(param_1,puVar8);
    goto switchD_180026056_default;
  case 0xffffec6e:
    if ((int)param_6[2] == 1) {
      local_c8 = *(ULONGLONG *)&local_a8[0]->n1;
      local_c0 = (local_a8[0]->n1).decVal.u2;
      local_b8 = *(ULONGLONG *)((longlong)&local_a8[0]->n1 + 0x10);
      iVar4 = (**(code **)(*param_1 + 0x88))(param_1,&local_c8,puVar8 + 4);
      goto LAB_180026644;
    }
    break;
  case 0xffffec6f:
    if ((int)param_6[2] == 2) {
      if ((((local_a8[0]->n1).n2.vt >> 0xe & 1) != 0) && ((*(byte *)&local_a8[0]->n1 & 0xc) == 0)) {
        iVar4 = -0x7ffdfffb;
LAB_180026385:
        *puVar14 = 0;
        goto switchD_180026056_default;
      }
      if ((local_a8[0]->n1).n2.vt == 0x400c) {
        VariantClear((VARIANTARG *)(local_a8[0]->n1).decVal.u2);
        **(undefined2 **)((longlong)&local_a8[0]->n1 + 8) = 8;
        puVar7 = (undefined1 *)((local_a8[0]->n1).decVal.u2.Lo64 + 8);
      }
      else if ((local_a8[0]->n1).n2.vt == 0x4008) {
        puVar7 = (undefined1 *)(local_a8[0]->n1).decVal.u2.Lo64;
      }
      else {
        VariantClear(local_a8[0]);
        puVar7 = (undefined1 *)((longlong)&local_a8[0]->n1 + 8);
        (local_a8[0]->n1).n2.vt = 8;
      }
      local_c8 = *(ULONGLONG *)&local_a8[1]->n1;
      local_c0 = (local_a8[1]->n1).decVal.u2;
      local_b8 = *(ULONGLONG *)((longlong)&local_a8[1]->n1 + 0x10);
      iVar4 = (**(code **)(*param_1 + 0x80))(param_1,puVar7,&local_c8,puVar8 + 4);
      goto LAB_180026755;
    }
    break;
  case 0xffffec70:
    if ((int)param_6[2] == 1) {
      local_c8 = *(ULONGLONG *)&local_a8[0]->n1;
      local_c0 = (local_a8[0]->n1).decVal.u2;
      local_b8 = *(ULONGLONG *)((longlong)&local_a8[0]->n1 + 0x10);
      iVar4 = (**(code **)(*param_1 + 0x78))(param_1,&local_c8,puVar8 + 4);
      goto LAB_180026644;
    }
    break;
  case 0xffffec71:
    if ((int)param_6[2] == 1) {
      local_c8 = *(ULONGLONG *)&local_a8[0]->n1;
      local_c0 = (local_a8[0]->n1).decVal.u2;
      local_b8 = *(ULONGLONG *)((longlong)&local_a8[0]->n1 + 0x10);
      iVar4 = (**(code **)(*param_1 + 0x70))(param_1,&local_c8,puVar8);
      goto switchD_180026056_default;
    }
    break;
  case 0xffffec72:
    if ((int)param_6[2] == 1) {
      local_c8 = *(ULONGLONG *)&local_a8[0]->n1;
      local_c0 = (local_a8[0]->n1).decVal.u2;
      local_b8 = *(ULONGLONG *)((longlong)&local_a8[0]->n1 + 0x10);
      iVar4 = (**(code **)(*param_1 + 0x68))(param_1,&local_c8,puVar8);
      goto switchD_180026056_default;
    }
    break;
  case 0xffffec73:
    if ((int)param_6[2] == 1) {
      local_c8 = *(ULONGLONG *)&local_a8[0]->n1;
      local_c0 = (local_a8[0]->n1).decVal.u2;
      local_b8 = *(ULONGLONG *)((longlong)&local_a8[0]->n1 + 0x10);
      iVar4 = (**(code **)(*param_1 + 0x60))(param_1,&local_c8,puVar8 + 4);
      goto LAB_180026644;
    }
    break;
  case 0xffffec74:
    if ((param_5 & 2) == 0) {
      if ((param_5 & 4) == 0) goto switchD_180026056_caseD_ffffec75;
      if ((int)param_6[2] == 2) {
        local_c8 = *(ULONGLONG *)&local_a8[0]->n1;
        local_c0 = (local_a8[0]->n1).decVal.u2;
        local_b8 = *(ULONGLONG *)((longlong)&local_a8[0]->n1 + 0x10);
        if ((local_a8[1]->n1).n2.vt != 8) {
          iVar4 = VariantChangeType(&local_80,local_a8[1],0,3);
          if (iVar4 < 0) goto LAB_1800266b4;
          local_a8[1] = &local_80;
        }
        local_68 = local_c8;
        local_60 = local_c0;
        local_58 = local_b8;
        iVar4 = (**(code **)(*param_1 + 0xd8))(param_1,&local_68,(local_a8[1]->n1).decVal.u2.Lo64);
        goto switchD_180026056_default;
      }
    }
    else if ((int)param_6[2] == 1) {
      local_c8 = *(ULONGLONG *)&local_a8[0]->n1;
      local_c0 = (local_a8[0]->n1).decVal.u2;
      local_b8 = *(ULONGLONG *)((longlong)&local_a8[0]->n1 + 0x10);
      iVar4 = (**(code **)(*param_1 + 0x58))(param_1,&local_c8,puVar8 + 4);
      goto LAB_180026644;
    }
    break;
  case 0xffffec75:
switchD_180026056_caseD_ffffec75:
    if ((param_5 & 2) == 0) {
      if ((param_5 & 4) == 0) goto switchD_180026056_caseD_ffffec76;
      if ((int)param_6[2] == 2) {
        local_68 = *(ULONGLONG *)&local_a8[0]->n1;
        local_60 = (local_a8[0]->n1).decVal.u2;
        local_58 = *(ULONGLONG *)((longlong)&local_a8[0]->n1 + 0x10);
        if ((local_a8[1]->n1).n2.vt != 8) {
          iVar4 = VariantChangeType(&local_80,local_a8[1],0,3);
          if (iVar4 < 0) goto LAB_1800266b4;
          local_a8[1] = &local_80;
        }
        local_c8 = local_68;
        local_c0 = local_60;
        local_b8 = local_58;
        iVar4 = (**(code **)(*param_1 + 0xd0))(param_1,&local_c8,(local_a8[1]->n1).decVal.u2.Lo64);
        goto switchD_180026056_default;
      }
    }
    else if ((int)param_6[2] == 1) {
      local_68 = *(ULONGLONG *)&local_a8[0]->n1;
      local_60 = (local_a8[0]->n1).decVal.u2;
      local_58 = *(ULONGLONG *)((longlong)&local_a8[0]->n1 + 0x10);
      iVar4 = (**(code **)(*param_1 + 0x50))(param_1,&local_68,puVar8 + 4);
      goto LAB_180026644;
    }
    break;
  case 0xffffec76:
switchD_180026056_caseD_ffffec76:
    if ((int)param_6[2] == 1) {
      local_68 = *(ULONGLONG *)&local_a8[0]->n1;
      local_60 = (local_a8[0]->n1).decVal.u2;
      local_58 = *(ULONGLONG *)((longlong)&local_a8[0]->n1 + 0x10);
      iVar4 = (**(code **)(*param_1 + 0x48))(param_1,&local_68,puVar8 + 4);
      goto LAB_180026770;
    }
    break;
  case 0xffffec77:
    iVar4 = (**(code **)(*param_1 + 0x40))(param_1,puVar8 + 4);
LAB_180026755:
    if (-1 < iVar4) {
      *puVar8 = 3;
    }
    goto switchD_180026056_default;
  case 0xffffec78:
    iVar4 = (**(code **)(*param_1 + 0x38))(param_1,puVar8 + 4);
LAB_180026770:
    if (-1 < iVar4) {
      *puVar8 = 9;
    }
  default:
    goto switchD_180026056_default;
  }
  iVar4 = -0x7ffdfff2;
switchD_180026056_default:
  VariantClear(&local_80);
  return iVar4;
}


==================================================================

### EXPORT FUNC 1800267f0 (167 bytes) name=FUN_1800267f0

undefined8
FUN_1800267f0(undefined8 param_1,undefined8 *param_2,uint param_3,undefined8 param_4,
             undefined4 *param_5)

{
  bool bVar1;
  int iVar2;
  uint uVar3;
  undefined4 *puVar4;
  undefined **ppuVar5;
  longlong lVar6;
  
  uVar3 = 0;
  if (param_3 != 0) {
    do {
      bVar1 = false;
      puVar4 = &DAT_18006c940;
      ppuVar5 = &PTR_u_accParent_18006c8a0;
      lVar6 = 0x13;
      do {
        iVar2 = lstrcmpW((LPCWSTR)*param_2,(LPCWSTR)*ppuVar5);
        if (iVar2 == 0) {
          bVar1 = true;
          *param_5 = *puVar4;
        }
        ppuVar5 = ppuVar5 + 1;
        puVar4 = puVar4 + 1;
        lVar6 = lVar6 + -1;
      } while (lVar6 != 0);
      if (!bVar1) {
        return 0x80020006;
      }
      uVar3 = uVar3 + 1;
      param_2 = param_2 + 1;
      param_5 = param_5 + 1;
    } while (uVar3 < param_3);
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180026898 (121 bytes) name=CWnd

/* Library Function - Single Match
    private: __cdecl CWnd::CWnd(struct HWND__ * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

CWnd * __thiscall CWnd::CWnd(CWnd *this,HWND__ *param_1)

{
  CCmdTarget::CCmdTarget((CCmdTarget *)this);
  *(undefined ***)this = vftable;
  *(undefined ***)(this + 0x60) = XAccessible::vftable;
  *(undefined ***)(this + 0x68) = XAccessibleServer::vftable;
  *(HWND__ **)(this + 0x40) = param_1;
  this[0x48] = (CWnd)0x0;
  *(undefined8 *)(this + 0x58) = 0;
  *(undefined8 *)(this + 0x70) = 0;
  *(undefined4 *)(this + 0x78) = 0;
  *(undefined8 *)(this + 0x80) = 0;
  *(undefined4 *)(this + 0x88) = 0;
  *(undefined8 *)(this + 0x90) = 0;
  *(undefined8 *)(this + 0x98) = 0;
  *(undefined8 *)(this + 0xa0) = 0;
  return this;
}


==================================================================

### EXPORT FUNC 180026914 (33 bytes) name=FUN_180026914

void FUN_180026914(longlong *param_1)

{
  if (param_1[8] == 0) {
    (**(code **)(*param_1 + 0x228))();
  }
  else {
    (**(code **)(*param_1 + 0xc0))();
  }
  return;
}


==================================================================

### EXPORT FUNC 180026938 (137 bytes) name=FUN_180026938

void FUN_180026938(longlong *param_1,UINT param_2,WPARAM param_3,LPARAM param_4)

{
  longlong *plVar1;
  WNDPROC lpPrevWndFunc;
  
  lpPrevWndFunc = (WNDPROC)param_1[0x10];
  if (lpPrevWndFunc == (WNDPROC)0x0) {
    plVar1 = (longlong *)(**(code **)(*param_1 + 0x1e0))(param_1);
    lpPrevWndFunc = (WNDPROC)*plVar1;
    if (lpPrevWndFunc == (WNDPROC)0x0) {
      DefWindowProcW((HWND)param_1[8],param_2,param_3,param_4);
      return;
    }
  }
  CallWindowProcW(lpPrevWndFunc,(HWND)param_1[8],param_2,param_3,param_4);
  return;
}


==================================================================

### EXPORT FUNC 1800269c4 (8 bytes) name=FUN_1800269c4

longlong FUN_1800269c4(longlong param_1)

{
  return param_1 + 0x80;
}


==================================================================

### EXPORT FUNC 1800269cc (52 bytes) name=PreTranslateMessage

/* Library Function - Single Match
    public: virtual int __cdecl CWnd::PreTranslateMessage(struct tagMSG * __ptr64) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

int __thiscall CWnd::PreTranslateMessage(CWnd *this,tagMSG *param_1)

{
  longlong lVar1;
  
  lVar1 = FUN_180022bb4();
  if (*(code **)(lVar1 + 0x60) != (code *)0x0) {
    (**(code **)(lVar1 + 0x60))(param_1,this);
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180026a00 (150 bytes) name=FUN_180026a00

ulonglong FUN_180026a00(longlong param_1,tagPOINT param_2,uint *param_3)

{
  undefined8 uVar1;
  int iVar2;
  HWND__ *hWnd;
  ulonglong uVar3;
  ulonglong uVar4;
  
  hWnd = _AfxChildWindowFromPoint(*(HWND__ **)(param_1 + 0x40),param_2);
  if (hWnd == (HWND__ *)0x0) {
    uVar4 = 0xffffffffffffffff;
  }
  else {
    iVar2 = GetDlgCtrlID(hWnd);
    uVar4 = (ulonglong)(ushort)iVar2;
    if ((param_3 != (uint *)0x0) && (0x37 < *param_3)) {
      uVar1 = *(undefined8 *)(param_1 + 0x40);
      param_3[1] = param_3[1] | 1;
      param_3[0xc] = 0xffffffff;
      param_3[0xd] = 0xffffffff;
      *(undefined8 *)(param_3 + 2) = uVar1;
      *(HWND__ **)(param_3 + 4) = hWnd;
      uVar3 = SendMessageW(hWnd,0x87,0,0);
      if ((uVar3 >> 0xd & 1) == 0) {
        param_3[1] = param_3[1] | 0x80000002;
      }
    }
  }
  return uVar4;
}


==================================================================

### EXPORT FUNC 180026a98 (44 bytes) name=AfxFindMessageEntry

/* Library Function - Single Match
    struct AFX_MSGMAP_ENTRY const * __ptr64 __cdecl AfxFindMessageEntry(struct AFX_MSGMAP_ENTRY
   const * __ptr64,unsigned int,unsigned int,unsigned int)
   
   Library: Visual Studio */

AFX_MSGMAP_ENTRY * __cdecl
AfxFindMessageEntry(AFX_MSGMAP_ENTRY *param_1,uint param_2,uint param_3,uint param_4)

{
  while( true ) {
    if (*(longlong *)(param_1 + 0x10) == 0) {
      return (AFX_MSGMAP_ENTRY *)0x0;
    }
    if ((((*(uint *)param_1 == param_2) && (*(uint *)(param_1 + 4) == param_3)) &&
        (*(uint *)(param_1 + 8) <= param_4)) && (param_4 <= *(uint *)(param_1 + 0xc))) break;
    param_1 = param_1 + 0x20;
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180026ac4 (108 bytes) name=WindowProc

/* Library Function - Single Match
    protected: virtual __int64 __cdecl CWnd::WindowProc(unsigned int,unsigned __int64,__int64)
   __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

__int64 __thiscall CWnd::WindowProc(CWnd *this,uint param_1,__uint64 param_2,__int64 param_3)

{
  int iVar1;
  __int64 local_res8;
  __int64 *p_Var2;
  
  local_res8 = 0;
  p_Var2 = &local_res8;
  iVar1 = (**(code **)(*(longlong *)this + 0x218))(this);
  if (iVar1 == 0) {
    local_res8 = (**(code **)(*(longlong *)this + 0x220))(this,param_1,param_2,param_3,p_Var2);
  }
  return local_res8;
}


==================================================================

### EXPORT FUNC 180026b30 (40 bytes) name=CTestCmdUI

/* Library Function - Single Match
    public: __cdecl CTestCmdUI::CTestCmdUI(void) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

CTestCmdUI * __thiscall CTestCmdUI::CTestCmdUI(CTestCmdUI *this)

{
  CCmdUI::CCmdUI((CCmdUI *)this);
  *(undefined4 *)(this + 0x40) = 1;
  *(undefined ***)this = vftable;
  return this;
}


==================================================================

### EXPORT FUNC 180026b58 (11 bytes) name=FUN_180026b58

void FUN_180026b58(longlong param_1,undefined4 param_2)

{
  *(undefined4 *)(param_1 + 0x40) = param_2;
  *(undefined4 *)(param_1 + 0x28) = 1;
  return;
}


==================================================================

### EXPORT FUNC 180026b64 (3 bytes) name=FUN_180026b64

void FUN_180026b64(void)

{
  return;
}


==================================================================

### EXPORT FUNC 180026b68 (90 bytes) name=FUN_180026b68

void FUN_180026b68(CWnd *param_1,undefined8 param_2,int param_3)

{
  ulong uVar1;
  ulong uVar2;
  
  uVar1 = CWnd::GetExStyle(param_1);
  if (param_3 == 0) {
    uVar1 = uVar1 & 0xfffffdff;
  }
  uVar2 = CWnd::GetStyle(param_1);
                    /* WARNING: Could not recover jumptable at 0x000180026bbb. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  AdjustWindowRectEx(param_2,uVar2,0,uVar1);
  return;
}


==================================================================

### EXPORT FUNC 180026bc4 (8 bytes) name=FUN_180026bc4

undefined ** FUN_180026bc4(void)

{
  return &PTR_DAT_180055140;
}


==================================================================

### EXPORT FUNC 180026bcc (47 bytes) name=GetIDsOfNames

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::XAccessible::GetIDsOfNames(struct _GUID const &
   __ptr64,wchar_t * __ptr64 * __ptr64,unsigned int,unsigned long,long * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release, Visual Studio 2010 Release */

long __thiscall
CWnd::XAccessible::GetIDsOfNames
          (XAccessible *this,_GUID *param_1,wchar_t **param_2,uint param_3,ulong param_4,
          long *param_5)

{
  undefined8 uVar1;
  
  uVar1 = FUN_1800267f0(param_1,param_2,param_3,(ulonglong)param_4,param_5);
  return (long)uVar1;
}


==================================================================

### EXPORT FUNC 180026bfc (20 bytes) name=FUN_180026bfc

undefined8 FUN_180026bfc(undefined8 param_1,undefined4 *param_2)

{
  if (param_2 == (undefined4 *)0x0) {
    return 0x80004003;
  }
  *param_2 = 1;
  return 0;
}


==================================================================

### EXPORT FUNC 180026c10 (21 bytes) name=FUN_180026c10

undefined8 FUN_180026c10(undefined8 param_1,undefined8 *param_2)

{
  if (param_2 == (undefined8 *)0x0) {
    return 0x80004003;
  }
  *param_2 = 0;
  return 0x80004001;
}


==================================================================

### EXPORT FUNC 180026c28 (46 bytes) name=EnsureStdObj

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::EnsureStdObj(void) __ptr64
   
   Library: Visual Studio */

long __thiscall CWnd::EnsureStdObj(CWnd *this)

{
  HRESULT HVar1;
  
  if ((*(void **)(this + 0x50) == (void *)0x0) &&
     (HVar1 = CreateStdAccessibleObject
                        (*(HWND *)(this + 0x40),-4,(IID *)&DAT_1800557f8,(void **)(this + 0x50)),
     HVar1 < 0)) {
    return HVar1;
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180026c58 (11 bytes) name=FUN_180026c58

void FUN_180026c58(longlong param_1)

{
                    /* WARNING: Could not recover jumptable at 0x000180026c5f. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(**(longlong **)(param_1 + 0x50) + 0x38))();
  return;
}


==================================================================

### EXPORT FUNC 180026c64 (5 bytes) name=thunk_FUN_180034a70

void thunk_FUN_180034a70(LPVOID param_1)

{
  BOOL BVar1;
  DWORD DVar2;
  DWORD *pDVar3;
  
  if (param_1 != (LPVOID)0x0) {
    BVar1 = HeapFree(DAT_180072ed8,0,param_1);
    if (BVar1 == 0) {
      pDVar3 = FUN_180035b40();
      DVar2 = GetLastError();
      DVar2 = FUN_180035af0(DVar2);
      *pDVar3 = DVar2;
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180026c6c (11 bytes) name=FUN_180026c6c

void FUN_180026c6c(longlong param_1)

{
                    /* WARNING: Could not recover jumptable at 0x000180026c73. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(**(longlong **)(param_1 + 0x50) + 0x40))();
  return;
}


==================================================================

### EXPORT FUNC 180026c78 (51 bytes) name=get_accChild

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::get_accChild(struct tagVARIANT,struct IDispatch * __ptr64 *
   __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall CWnd::get_accChild(CWnd *this,tagVARIANT *param_1,IDispatch **param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  local_28 = *(undefined8 *)&param_1->n1;
  local_20 = (param_1->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 0x48))(*(longlong **)(this + 0x50),&local_28);
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026cac (51 bytes) name=get_accName

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::get_accName(struct tagVARIANT,wchar_t * __ptr64 * __ptr64)
   __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall CWnd::get_accName(CWnd *this,tagVARIANT *param_1,wchar_t **param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  local_28 = *(undefined8 *)&param_1->n1;
  local_20 = (param_1->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 0x50))(*(longlong **)(this + 0x50),&local_28);
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026ce0 (51 bytes) name=get_accValue

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::get_accValue(struct tagVARIANT,wchar_t * __ptr64 * __ptr64)
   __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall CWnd::get_accValue(CWnd *this,tagVARIANT *param_1,wchar_t **param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  local_28 = *(undefined8 *)&param_1->n1;
  local_20 = (param_1->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 0x58))(*(longlong **)(this + 0x50),&local_28);
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026d14 (51 bytes) name=get_accDescription

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::get_accDescription(struct tagVARIANT,wchar_t * __ptr64 *
   __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall CWnd::get_accDescription(CWnd *this,tagVARIANT *param_1,wchar_t **param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  local_28 = *(undefined8 *)&param_1->n1;
  local_20 = (param_1->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 0x60))(*(longlong **)(this + 0x50),&local_28);
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026d48 (51 bytes) name=get_accRole

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::get_accRole(struct tagVARIANT,struct tagVARIANT * __ptr64)
   __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall CWnd::get_accRole(CWnd *this,tagVARIANT *param_1,tagVARIANT *param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  local_28 = *(undefined8 *)&param_1->n1;
  local_20 = (param_1->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 0x68))(*(longlong **)(this + 0x50),&local_28);
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026d7c (51 bytes) name=get_accState

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::get_accState(struct tagVARIANT,struct tagVARIANT * __ptr64)
   __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall CWnd::get_accState(CWnd *this,tagVARIANT *param_1,tagVARIANT *param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  local_28 = *(undefined8 *)&param_1->n1;
  local_20 = (param_1->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 0x70))(*(longlong **)(this + 0x50),&local_28);
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026db0 (51 bytes) name=get_accHelp

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::get_accHelp(struct tagVARIANT,wchar_t * __ptr64 * __ptr64)
   __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall CWnd::get_accHelp(CWnd *this,tagVARIANT *param_1,wchar_t **param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  local_28 = *(undefined8 *)&param_1->n1;
  local_20 = (param_1->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 0x78))(*(longlong **)(this + 0x50),&local_28);
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026de4 (54 bytes) name=get_accHelpTopic

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::get_accHelpTopic(wchar_t * __ptr64 * __ptr64,struct
   tagVARIANT,long * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
CWnd::get_accHelpTopic(CWnd *this,wchar_t **param_1,tagVARIANT *param_2,long *param_3)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  local_28 = *(undefined8 *)&param_2->n1;
  local_20 = (param_2->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_2->n1 + 0x10);
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 0x80))
                    (*(longlong **)(this + 0x50),param_1,&local_28);
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026e1c (54 bytes) name=get_accKeyboardShortcut

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::get_accKeyboardShortcut(struct tagVARIANT,wchar_t * __ptr64 *
   __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall CWnd::get_accKeyboardShortcut(CWnd *this,tagVARIANT *param_1,wchar_t **param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  local_28 = *(undefined8 *)&param_1->n1;
  local_20 = (param_1->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 0x88))(*(longlong **)(this + 0x50),&local_28);
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026e54 (14 bytes) name=FUN_180026e54

void FUN_180026e54(longlong param_1)

{
                    /* WARNING: Could not recover jumptable at 0x000180026e5b. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(**(longlong **)(param_1 + 0x50) + 0x90))();
  return;
}


==================================================================

### EXPORT FUNC 180026e64 (14 bytes) name=FUN_180026e64

void FUN_180026e64(longlong param_1)

{
                    /* WARNING: Could not recover jumptable at 0x000180026e6b. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(**(longlong **)(param_1 + 0x50) + 0x98))();
  return;
}


==================================================================

### EXPORT FUNC 180026e74 (54 bytes) name=get_accDefaultAction

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::get_accDefaultAction(struct tagVARIANT,wchar_t * __ptr64 *
   __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall CWnd::get_accDefaultAction(CWnd *this,tagVARIANT *param_1,wchar_t **param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  local_28 = *(undefined8 *)&param_1->n1;
  local_20 = (param_1->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 0xa0))(*(longlong **)(this + 0x50),&local_28);
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026eac (54 bytes) name=accSelect

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::accSelect(long,struct tagVARIANT) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall CWnd::accSelect(CWnd *this,long param_1,tagVARIANT *param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  local_28 = *(undefined8 *)&param_2->n1;
  local_20 = (param_2->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_2->n1 + 0x10);
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 0xa8))
                    (*(longlong **)(this + 0x50),param_1,&local_28);
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026ee4 (81 bytes) name=accLocation

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::accLocation(long * __ptr64,long * __ptr64,long * __ptr64,long
   * __ptr64,struct tagVARIANT) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
CWnd::accLocation(CWnd *this,long *param_1,long *param_2,long *param_3,long *param_4,
                 tagVARIANT *param_5)

{
  long lVar1;
  
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 0xb0))();
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026f38 (54 bytes) name=accNavigate

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::accNavigate(long,struct tagVARIANT,struct tagVARIANT *
   __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall CWnd::accNavigate(CWnd *this,long param_1,tagVARIANT *param_2,tagVARIANT *param_3)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  local_28 = *(undefined8 *)&param_2->n1;
  local_20 = (param_2->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_2->n1 + 0x10);
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 0xb8))
                    (*(longlong **)(this + 0x50),param_1,&local_28);
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026f70 (14 bytes) name=FUN_180026f70

void FUN_180026f70(longlong param_1)

{
                    /* WARNING: Could not recover jumptable at 0x000180026f77. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(**(longlong **)(param_1 + 0x50) + 0xc0))();
  return;
}


==================================================================

### EXPORT FUNC 180026f80 (54 bytes) name=accDoDefaultAction

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::accDoDefaultAction(struct tagVARIANT) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall CWnd::accDoDefaultAction(CWnd *this,tagVARIANT *param_1)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  local_28 = *(undefined8 *)&param_1->n1;
  local_20 = (param_1->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
  lVar1 = (**(code **)(**(longlong **)(this + 0x50) + 200))(*(longlong **)(this + 0x50),&local_28);
  return lVar1;
}


==================================================================

### EXPORT FUNC 180026fb8 (54 bytes) name=FUN_180026fb8

void FUN_180026fb8(longlong param_1,undefined8 *param_2)

{
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  local_28 = *param_2;
  local_20 = param_2[1];
  local_18 = param_2[2];
  (**(code **)(**(longlong **)(param_1 + 0x50) + 0xd0))(*(longlong **)(param_1 + 0x50),&local_28);
  return;
}


==================================================================

### EXPORT FUNC 180026ff0 (7 bytes) name=FUN_180026ff0

undefined8 FUN_180026ff0(longlong param_1,undefined8 param_2)

{
  *(undefined8 *)(param_1 + 0x58) = param_2;
  return 0;
}


==================================================================

### EXPORT FUNC 180026ff8 (49 bytes) name=PreTranslateInput

/* Library Function - Single Match
    public: int __cdecl CWnd::PreTranslateInput(struct tagMSG * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

int __thiscall CWnd::PreTranslateInput(CWnd *this,tagMSG *param_1)

{
  uint uVar1;
  BOOL BVar2;
  
  uVar1 = param_1->message;
  if (((uVar1 < 0x100) || (0x109 < uVar1)) && ((uVar1 < 0x200 || (0x209 < uVar1)))) {
    BVar2 = 0;
  }
  else {
    BVar2 = FID_conflict_IsDialogMessageW((HWND)this,param_1);
  }
  return BVar2;
}


==================================================================

### EXPORT FUNC 18002702c (7 bytes) name=FUN_18002702c

uint FUN_18002702c(longlong param_1)

{
  return *(uint *)(param_1 + 0x78) & 0x10;
}


==================================================================

### EXPORT FUNC 180027034 (34 bytes) name=FUN_180027034

undefined8 FUN_180027034(longlong param_1)

{
  int iVar1;
  undefined8 uVar2;
  
  iVar1 = *(int *)(param_1 + 0x128);
  uVar2 = 0;
  if (((iVar1 != 0) && (iVar1 != 0xe002)) && (iVar1 != 0xe001)) {
    uVar2 = 1;
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 180027058 (28 bytes) name=FUN_180027058

undefined8 FUN_180027058(undefined8 param_1,undefined8 *param_2)

{
  if (param_2 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  *param_2 = 0;
  return 1;
}


==================================================================

### EXPORT FUNC 180027078 (28 bytes) name=FUN_180027078

undefined8 FUN_180027078(undefined8 param_1,undefined8 param_2,undefined8 *param_3)

{
  if (param_3 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  *param_3 = 0;
  return 1;
}


==================================================================

### EXPORT FUNC 180027098 (8 bytes) name=FUN_180027098

undefined ** FUN_180027098(void)

{
  return &PTR_DAT_180055150;
}


==================================================================

### EXPORT FUNC 1800270ac (151 bytes) name=FUN_1800270ac

undefined1 FUN_1800270ac(WNDCLASSW *param_1)

{
  undefined2 uVar1;
  undefined1 extraout_AL;
  undefined1 uVar2;
  undefined1 extraout_AL_00;
  undefined1 extraout_AH;
  undefined1 extraout_AH_00;
  undefined2 extraout_var;
  undefined2 extraout_var_00;
  DWORD dwErrCode;
  undefined4 extraout_var_01;
  undefined8 local_res18;
  ATOM AVar3;
  
  local_res18 = 0;
  FUN_180022bb4();
  uVar2 = FUN_180021f24(*(undefined8 *)
                         (CONCAT44(extraout_var_01,
                                   CONCAT22(extraout_var,CONCAT11(extraout_AH,extraout_AL))) + 0xd8)
                        ,(longlong)&local_res18);
  uVar1 = CONCAT11(extraout_AH_00,uVar2);
  if ((CONCAT22(extraout_var_00,CONCAT11(extraout_AH_00,uVar2)) &
      CONCAT22(extraout_var_00,CONCAT11(extraout_AH_00,uVar2))) != 0) {
    AVar3 = RegisterClassW(param_1);
    extraout_AL_00 = (undefined1)AVar3;
    uVar2 = extraout_AL_00;
    if (CONCAT22(extraout_var_00,uVar1) != 2) {
      if (AVar3 != 0) {
        dwErrCode = 0;
      }
      else {
        dwErrCode = GetLastError();
      }
      FUN_180021f08();
      if (AVar3 == 0) {
        SetLastError(dwErrCode);
      }
    }
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 18002714c (73 bytes) name=FUN_18002714c

void FUN_18002714c(undefined8 param_1,longlong param_2)

{
  DWORD dwErrCode;
  bool bVar1;
  
  if (*(int *)(param_2 + 0x48) != 2) {
    bVar1 = *(short *)(param_2 + 0x20) != 0;
    if (bVar1) {
      dwErrCode = 0;
    }
    else {
      dwErrCode = GetLastError();
    }
    FUN_180021f08();
    if (!bVar1) {
      SetLastError(dwErrCode);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180027198 (169 bytes) name=FID_conflict:AfxCtxGetClassInfoW

/* Library Function - Multiple Matches With Different Base Names
    int __cdecl AfxCtxGetClassInfoA(struct HINSTANCE__ * __ptr64,char const * __ptr64,struct
   tagWNDCLASSA * __ptr64)
    int __cdecl AfxCtxGetClassInfoExA(struct HINSTANCE__ * __ptr64,char const * __ptr64,struct
   tagWNDCLASSEXA * __ptr64)
    int __cdecl AfxCtxGetClassInfoExW(struct HINSTANCE__ * __ptr64,wchar_t const * __ptr64,struct
   tagWNDCLASSEXW * __ptr64)
    int __cdecl AfxCtxGetClassInfoW(struct HINSTANCE__ * __ptr64,wchar_t const * __ptr64,struct
   tagWNDCLASSW * __ptr64)
   
   Library: Visual Studio 2008 Release */

ulonglong FID_conflict_AfxCtxGetClassInfoW(HINSTANCE param_1,LPCWSTR param_2,LPWNDCLASSW param_3)

{
  undefined1 uVar1;
  int iVar2;
  uint uVar3;
  DWORD dwErrCode;
  longlong lVar4;
  undefined7 extraout_var;
  undefined8 local_10;
  ulonglong uVar5;
  
  local_10 = 0;
  lVar4 = FUN_180022bb4();
  uVar1 = FUN_180021f24(*(undefined8 *)(lVar4 + 0xd8),(longlong)&local_10);
  uVar5 = CONCAT71(extraout_var,uVar1);
  iVar2 = (int)uVar5;
  if (iVar2 != 0) {
    uVar3 = GetClassInfoW(param_1,param_2,param_3);
    uVar5 = (ulonglong)uVar3;
    if (iVar2 != 2) {
      if (uVar3 != 0) {
        dwErrCode = 0;
      }
      else {
        dwErrCode = GetLastError();
      }
      FUN_180021f08();
      if (uVar3 == 0) {
        SetLastError(dwErrCode);
      }
    }
  }
  return uVar5;
}


==================================================================

### EXPORT FUNC 180027248 (72 bytes) name=FUN_180027248

void FUN_180027248(undefined8 param_1,longlong param_2)

{
  DWORD dwErrCode;
  bool bVar1;
  
  if (*(int *)(param_2 + 0x58) != 2) {
    bVar1 = *(int *)(param_2 + 0x20) != 0;
    if (bVar1) {
      dwErrCode = 0;
    }
    else {
      dwErrCode = GetLastError();
    }
    FUN_180021f08();
    if (!bVar1) {
      SetLastError(dwErrCode);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180027290 (169 bytes) name=FID_conflict:AfxCtxGetClassInfoW

/* Library Function - Multiple Matches With Different Base Names
    int __cdecl AfxCtxGetClassInfoA(struct HINSTANCE__ * __ptr64,char const * __ptr64,struct
   tagWNDCLASSA * __ptr64)
    int __cdecl AfxCtxGetClassInfoExA(struct HINSTANCE__ * __ptr64,char const * __ptr64,struct
   tagWNDCLASSEXA * __ptr64)
    int __cdecl AfxCtxGetClassInfoExW(struct HINSTANCE__ * __ptr64,wchar_t const * __ptr64,struct
   tagWNDCLASSEXW * __ptr64)
    int __cdecl AfxCtxGetClassInfoW(struct HINSTANCE__ * __ptr64,wchar_t const * __ptr64,struct
   tagWNDCLASSW * __ptr64)
   
   Library: Visual Studio 2008 Release */

ulonglong FID_conflict_AfxCtxGetClassInfoW(HINSTANCE param_1,LPCWSTR param_2,LPWNDCLASSEXW param_3)

{
  undefined1 uVar1;
  int iVar2;
  uint uVar3;
  DWORD dwErrCode;
  longlong lVar4;
  undefined7 extraout_var;
  undefined8 local_10;
  ulonglong uVar5;
  
  local_10 = 0;
  lVar4 = FUN_180022bb4();
  uVar1 = FUN_180021f24(*(undefined8 *)(lVar4 + 0xd8),(longlong)&local_10);
  uVar5 = CONCAT71(extraout_var,uVar1);
  iVar2 = (int)uVar5;
  if (iVar2 != 0) {
    uVar3 = GetClassInfoExW(param_1,param_2,param_3);
    uVar5 = (ulonglong)uVar3;
    if (iVar2 != 2) {
      if (uVar3 != 0) {
        dwErrCode = 0;
      }
      else {
        dwErrCode = GetLastError();
      }
      FUN_180021f08();
      if (uVar3 == 0) {
        SetLastError(dwErrCode);
      }
    }
  }
  return uVar5;
}


==================================================================

### EXPORT FUNC 180027340 (72 bytes) name=FUN_180027340

void FUN_180027340(undefined8 param_1,longlong param_2)

{
  DWORD dwErrCode;
  bool bVar1;
  
  if (*(int *)(param_2 + 0x58) != 2) {
    bVar1 = *(int *)(param_2 + 0x20) != 0;
    if (bVar1) {
      dwErrCode = 0;
    }
    else {
      dwErrCode = GetLastError();
    }
    FUN_180021f08();
    if (!bVar1) {
      SetLastError(dwErrCode);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180027388 (298 bytes) name=FID_conflict:AfxCtxCreateWindowExA

/* Library Function - Multiple Matches With Different Base Names
    struct HWND__ * __ptr64 __cdecl AfxCtxCreateWindowExA(unsigned long,char const * __ptr64,char
   const * __ptr64,unsigned long,int,int,int,int,struct HWND__ * __ptr64,struct HMENU__ *
   __ptr64,struct HINSTANCE__ * __ptr64,void * __ptr64)
    struct HWND__ * __ptr64 __cdecl AfxCtxCreateWindowExW(unsigned long,wchar_t const *
   __ptr64,wchar_t const * __ptr64,unsigned long,int,int,int,int,struct HWND__ * __ptr64,struct
   HMENU__ * __ptr64,struct HINSTANCE__ * __ptr64,void * __ptr64)
   
   Library: Visual Studio 2008 Release */

HWND FID_conflict_AfxCtxCreateWindowExA
               (DWORD param_1,LPCWSTR param_2,LPCWSTR param_3,DWORD param_4,int param_5,int param_6,
               int param_7,int param_8,HWND param_9,HMENU param_10,HINSTANCE param_11,
               LPVOID param_12)

{
  undefined1 uVar1;
  int iVar2;
  DWORD dwErrCode;
  longlong lVar3;
  undefined7 extraout_var;
  HWND pHVar4;
  undefined8 local_20;
  HWND local_18;
  
  local_20 = 0;
  lVar3 = FUN_180022bb4();
  uVar1 = FUN_180021f24(*(undefined8 *)(lVar3 + 0xd8),(longlong)&local_20);
  iVar2 = (int)CONCAT71(extraout_var,uVar1);
  local_18 = (HWND)0x0;
  if (iVar2 == 0) {
    pHVar4 = (HWND)0x0;
  }
  else {
    pHVar4 = CreateWindowExW(param_1,param_2,param_3,param_4,param_5,param_6,param_7,param_8,param_9
                             ,param_10,param_11,param_12);
    if (iVar2 != 2) {
      local_18 = pHVar4;
      if (pHVar4 != (HWND)0x0) {
        dwErrCode = 0;
      }
      else {
        dwErrCode = GetLastError();
      }
      FUN_180021f08();
      if (pHVar4 == (HWND)0x0) {
        SetLastError(dwErrCode);
      }
    }
  }
  return pHVar4;
}


==================================================================

### EXPORT FUNC 1800274b8 (73 bytes) name=FUN_1800274b8

void FUN_1800274b8(undefined8 param_1,longlong param_2)

{
  DWORD dwErrCode;
  bool bVar1;
  
  if (*(int *)(param_2 + 0x60) != 2) {
    bVar1 = *(longlong *)(param_2 + 0x70) != 0;
    if (bVar1) {
      dwErrCode = 0;
    }
    else {
      dwErrCode = GetLastError();
    }
    FUN_180021f08();
    if (!bVar1) {
      SetLastError(dwErrCode);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180027504 (155 bytes) name=FID_conflict:AfxCtxLoadLibraryA

/* Library Function - Multiple Matches With Different Base Names
    struct HINSTANCE__ * __ptr64 __cdecl AfxCtxLoadLibraryA(char const * __ptr64)
    struct HINSTANCE__ * __ptr64 __cdecl AfxCtxLoadLibraryW(wchar_t const * __ptr64)
   
   Library: Visual Studio 2008 Release */

HMODULE FID_conflict_AfxCtxLoadLibraryA(LPCSTR param_1)

{
  undefined1 uVar1;
  int iVar2;
  DWORD dwErrCode;
  longlong lVar3;
  undefined7 extraout_var;
  HMODULE pHVar4;
  undefined8 local_res18;
  
  local_res18 = 0;
  lVar3 = FUN_180022bb4();
  uVar1 = FUN_180021f24(*(undefined8 *)(lVar3 + 0xd8),(longlong)&local_res18);
  iVar2 = (int)CONCAT71(extraout_var,uVar1);
  if (iVar2 == 0) {
    pHVar4 = (HMODULE)0x0;
  }
  else {
    pHVar4 = LoadLibraryA(param_1);
    if (iVar2 != 2) {
      if (pHVar4 != (HMODULE)0x0) {
        dwErrCode = 0;
      }
      else {
        dwErrCode = GetLastError();
      }
      FUN_180021f08();
      if (pHVar4 == (HMODULE)0x0) {
        SetLastError(dwErrCode);
      }
    }
  }
  return pHVar4;
}


==================================================================

### EXPORT FUNC 1800275a4 (73 bytes) name=FUN_1800275a4

void FUN_1800275a4(undefined8 param_1,longlong param_2)

{
  DWORD dwErrCode;
  bool bVar1;
  
  if (*(int *)(param_2 + 0x48) != 2) {
    bVar1 = *(longlong *)(param_2 + 0x20) != 0;
    if (bVar1) {
      dwErrCode = 0;
    }
    else {
      dwErrCode = GetLastError();
    }
    FUN_180021f08();
    if (!bVar1) {
      SetLastError(dwErrCode);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 1800275f0 (25 bytes) name=FUN_1800275f0

void FUN_1800275f0(longlong param_1)

{
  if (*(int *)(param_1 + 8) != 0) {
    FUN_180021f08();
  }
  return;
}


==================================================================

### EXPORT FUNC 18002760c (113 bytes) name=CWnd

/* Library Function - Single Match
    public: __cdecl CWnd::CWnd(void) __ptr64
   
   Library: Visual Studio 2008 Release */

CWnd * __thiscall CWnd::CWnd(CWnd *this)

{
  CCmdTarget::CCmdTarget((CCmdTarget *)this);
  *(undefined ***)this = vftable;
  *(undefined ***)(this + 0x60) = XAccessible::vftable;
  *(undefined ***)(this + 0x68) = XAccessibleServer::vftable;
  *(undefined8 *)(this + 0x40) = 0;
  this[0x48] = (CWnd)0x0;
  *(undefined8 *)(this + 0x58) = 0;
  *(undefined8 *)(this + 0x50) = 0;
  *(undefined8 *)(this + 0x70) = 0;
  *(undefined4 *)(this + 0x78) = 0;
  *(undefined8 *)(this + 0x80) = 0;
  *(undefined4 *)(this + 0x88) = 0;
  *(undefined8 *)(this + 0x90) = 0;
  *(undefined8 *)(this + 0x98) = 0;
  *(undefined8 *)(this + 0xa0) = 0;
  return this;
}


==================================================================

### EXPORT FUNC 180027680 (47 bytes) name=_AfxPreInitDialog

/* Library Function - Single Match
    void __cdecl _AfxPreInitDialog(class CWnd * __ptr64,struct tagRECT * __ptr64,unsigned long *
   __ptr64)
   
   Library: Visual Studio 2008 Release */

void __cdecl _AfxPreInitDialog(CWnd *param_1,tagRECT *param_2,ulong *param_3)

{
  ulong uVar1;
  
  GetWindowRect(*(HWND *)(param_1 + 0x40),param_2);
  uVar1 = CWnd::GetStyle(param_1);
  *param_3 = uVar1;
  return;
}


==================================================================

### EXPORT FUNC 1800276b0 (193 bytes) name=FUN_1800276b0

void FUN_1800276b0(longlong *param_1,undefined4 param_2,undefined8 param_3,undefined8 param_4,
                  undefined4 param_5,int *param_6,longlong param_7,undefined4 param_8,
                  undefined8 param_9)

{
  undefined8 uVar1;
  
  uVar1 = 0;
  if (param_7 != 0) {
    uVar1 = *(undefined8 *)(param_7 + 0x40);
  }
  (**(code **)(*param_1 + 0xb8))
            (param_1,param_2,param_3,param_4,param_5,*param_6,param_6[1],param_6[2] - *param_6,
             param_6[3] - param_6[1],uVar1,param_8,param_9);
  return;
}


==================================================================

### EXPORT FUNC 180027774 (189 bytes) name=FUN_180027774

void FUN_180027774(longlong *param_1,undefined8 param_2,undefined8 param_3,uint param_4,int *param_5
                  ,longlong param_6,undefined4 param_7,undefined8 param_8)

{
  undefined8 uVar1;
  
  uVar1 = 0;
  if (param_6 != 0) {
    uVar1 = *(undefined8 *)(param_6 + 0x40);
  }
  (**(code **)(*param_1 + 0xb8))
            (param_1,0,param_2,param_3,param_4 | 0x40000000,*param_5,param_5[1],
             param_5[2] - *param_5,param_5[3] - param_5[1],uVar1,param_7,param_8);
  return;
}


==================================================================

### EXPORT FUNC 180027834 (114 bytes) name=FUN_180027834

void FUN_180027834(int param_1)

{
  HWND hWnd;
  longlong *plVar1;
  SHORT SVar2;
  longlong lVar3;
  
  lVar3 = FUN_180022c04();
  if ((*(longlong *)(lVar3 + 0x78) != 0) &&
     (hWnd = *(HWND *)(*(longlong *)(lVar3 + 0x78) + 0x40), hWnd != (HWND)0x0)) {
    SendMessageW(hWnd,0x401,0,0);
  }
  plVar1 = *(longlong **)(lVar3 + 0xa0);
  if ((param_1 != 0) && (plVar1 != (longlong *)0x0)) {
    SVar2 = GetKeyState(1);
    if (-1 < SVar2) {
      (**(code **)(*plVar1 + 0x2d0))(plVar1,0xffffffffffffffff);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 1800278a8 (158 bytes) name=FUN_1800278a8

CMenu * FUN_1800278a8(longlong param_1,uint param_2)

{
  int iVar1;
  UINT UVar2;
  HMENU pHVar3;
  longlong lVar4;
  CMenu *pCVar5;
  int nPos;
  
  if (param_1 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  iVar1 = GetMenuItemCount(*(HMENU *)(param_1 + 8));
  nPos = 0;
  if (0 < iVar1) {
    do {
      pHVar3 = GetSubMenu(*(HMENU *)(param_1 + 8),nPos);
      lVar4 = FromHandle(pHVar3);
      if (lVar4 == 0) {
        UVar2 = GetMenuItemID(*(HMENU *)(param_1 + 8),nPos);
        if (UVar2 == param_2) goto LAB_18002793c;
      }
      else {
        if (*(ulonglong *)(lVar4 + 8) == (ulonglong)param_2) {
LAB_18002793c:
          pCVar5 = CMenu::FromHandlePermanent(*(HMENU__ **)(param_1 + 8));
          return pCVar5;
        }
        pCVar5 = FUN_1800278a8(lVar4,param_2);
        if (pCVar5 != (CMenu *)0x0) {
          return pCVar5;
        }
      }
      nPos = nPos + 1;
    } while (nPos < iVar1);
  }
  return (CMenu *)0x0;
}


==================================================================

### EXPORT FUNC 180027948 (34 bytes) name=FUN_180027948

void FUN_180027948(undefined8 *param_1)

{
  *param_1 = _AFX_HTMLHELP_STATE::vftable;
  if ((HMODULE)param_1[1] != (HMODULE)0x0) {
    FreeLibrary((HMODULE)param_1[1]);
  }
  return;
}


==================================================================

### EXPORT FUNC 18002796c (47 bytes) name=FUN_18002796c

undefined8 * FUN_18002796c(undefined8 *param_1,uint param_2)

{
  FUN_180027948(param_1);
  if ((param_2 & 1) != 0) {
    FUN_180022ca8(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18002799c (129 bytes) name=WinHelpInternal

/* Library Function - Single Match
    public: virtual void __cdecl CWnd::WinHelpInternal(unsigned __int64,unsigned int) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

void __thiscall CWnd::WinHelpInternal(CWnd *this,__uint64 param_1,uint param_2)

{
  longlong lVar1;
  uint uVar2;
  
  lVar1 = FUN_180022bb4();
  if (*(int *)(*(longlong *)(lVar1 + 8) + 0xd8) == 1) {
    if (param_2 == 1) {
      uVar2 = 0xf;
    }
    else {
      uVar2 = 1;
      if ((param_2 != 3) && (uVar2 = param_2, param_2 == 0xb)) {
        uVar2 = 0;
      }
    }
    (**(code **)(*(longlong *)this + 0xf0))(this,param_1,uVar2);
  }
  else {
    (**(code **)(*(longlong *)this + 0xe8))(this,param_1,param_2);
  }
  return;
}


==================================================================

### EXPORT FUNC 180027a20 (50 bytes) name=OnActivateTopLevel

/* Library Function - Single Match
    protected: __int64 __cdecl CWnd::OnActivateTopLevel(unsigned __int64,__int64) __ptr64
   
   Library: Visual Studio 2005 Release */

__int64 __thiscall CWnd::OnActivateTopLevel(CWnd *this,__uint64 param_1,__int64 param_2)

{
  longlong lVar1;
  
  if ((short)param_1 == 0) {
    lVar1 = FUN_180022c04();
    if ((*(longlong *)(lVar1 + 0x90) != 0) &&
       ((*(uint *)(*(longlong *)(lVar1 + 0x90) + 4) >> 0x1e & 1) == 0)) {
      FUN_180027834(1);
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180027a54 (71 bytes) name=AddRef

/* Library Function - Single Match
    public: virtual unsigned long __cdecl CWnd::XAccessible::AddRef(void) __ptr64
   
   Library: Visual Studio 2005 Release */

ulong __thiscall CWnd::XAccessible::AddRef(XAccessible *this)

{
  ulong uVar1;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(this + -0x28));
  uVar1 = CCmdTarget::ExternalAddRef((CCmdTarget *)(this + -0x60));
  if (local_18 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180027aa4 (24 bytes) name=Unwind@180027aa4

void Unwind_180027aa4(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180027abc (71 bytes) name=Release

/* Library Function - Single Match
    public: virtual unsigned long __cdecl CWnd::XAccessible::Release(void) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

ulong __thiscall CWnd::XAccessible::Release(XAccessible *this)

{
  ulong uVar1;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(this + -0x28));
  uVar1 = CCmdTarget::ExternalRelease((CCmdTarget *)(this + -0x60));
  if (local_18 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180027b0c (24 bytes) name=Unwind@180027b0c

void Unwind_180027b0c(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180027b24 (103 bytes) name=QueryInterface

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::XAccessible::QueryInterface(struct _GUID const & __ptr64,void
   * __ptr64 * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

long __thiscall CWnd::XAccessible::QueryInterface(XAccessible *this,_GUID *param_1,void **param_2)

{
  ulong uVar1;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(this + -0x28));
  uVar1 = CCmdTarget::ExternalQueryInterface((CCmdTarget *)(this + -0x60),param_1,param_2);
  if (local_18 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180027b94 (24 bytes) name=Unwind@180027b94

void Unwind_180027b94(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180027bac (180 bytes) name=Invoke

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::XAccessible::Invoke(long,struct _GUID const &
   __ptr64,unsigned long,unsigned short,struct tagDISPPARAMS * __ptr64,struct tagVARIANT *
   __ptr64,struct tagEXCEPINFO * __ptr64,unsigned int * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

long __thiscall
CWnd::XAccessible::Invoke
          (XAccessible *this,long param_1,_GUID *param_2,ulong param_3,ushort param_4,
          tagDISPPARAMS *param_5,tagVARIANT *param_6,tagEXCEPINFO *param_7,uint *param_8)

{
  HRESULT HVar1;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(this + -0x28));
  HVar1 = FUN_180025f2c((longlong *)this,param_1,param_2,(ulonglong)param_3,param_4,
                        (longlong *)param_5,(undefined2 *)param_6,param_7,param_8);
  if (local_18 != 0) {
    FUN_180021f08();
  }
  return HVar1;
}


==================================================================

### EXPORT FUNC 180027c6c (24 bytes) name=Unwind@180027c6c

void Unwind_180027c6c(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x58);
  return;
}


==================================================================

### EXPORT FUNC 180027c84 (91 bytes) name=FUN_180027c84

undefined4 FUN_180027c84(longlong param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x118))
                    ((longlong *)(param_1 + -0x60),param_2);
  if (local_18 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180027ce4 (24 bytes) name=Unwind@180027ce4

void Unwind_180027ce4(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180027cfc (91 bytes) name=FUN_180027cfc

undefined4 FUN_180027cfc(longlong param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x120))
                    ((longlong *)(param_1 + -0x60),param_2);
  if (local_18 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180027d5c (24 bytes) name=Unwind@180027d5c

void Unwind_180027d5c(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180027d74 (136 bytes) name=FID_conflict:put_accValue

/* Library Function - Multiple Matches With Different Base Names
    public: virtual long __cdecl CWnd::XAccessible::get_accChild(struct tagVARIANT,struct IDispatch
   * __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDefaultAction(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDescription(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accHelp(struct tagVARIANT,wchar_t * __ptr64
   * __ptr64) __ptr64
     11 names - too many to list
   
   Library: Visual Studio 2008 Release */

undefined4
FID_conflict_put_accValue
          (longlong param_1,undefined8 *param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  local_28 = *param_2;
  local_20 = param_2[1];
  local_18 = param_2[2];
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x128))
                    ((longlong *)(param_1 + -0x60),&local_28,param_3);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180027e04 (24 bytes) name=Unwind@180027e04

void Unwind_180027e04(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180027e1c (136 bytes) name=FID_conflict:put_accValue

/* Library Function - Multiple Matches With Different Base Names
    public: virtual long __cdecl CWnd::XAccessible::get_accChild(struct tagVARIANT,struct IDispatch
   * __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDefaultAction(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDescription(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accHelp(struct tagVARIANT,wchar_t * __ptr64
   * __ptr64) __ptr64
     11 names - too many to list
   
   Library: Visual Studio 2008 Release */

undefined4
FID_conflict_put_accValue
          (longlong param_1,undefined8 *param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  local_28 = *param_2;
  local_20 = param_2[1];
  local_18 = param_2[2];
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x130))
                    ((longlong *)(param_1 + -0x60),&local_28,param_3);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180027eac (24 bytes) name=Unwind@180027eac

void Unwind_180027eac(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180027ec4 (136 bytes) name=FID_conflict:put_accValue

/* Library Function - Multiple Matches With Different Base Names
    public: virtual long __cdecl CWnd::XAccessible::get_accChild(struct tagVARIANT,struct IDispatch
   * __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDefaultAction(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDescription(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accHelp(struct tagVARIANT,wchar_t * __ptr64
   * __ptr64) __ptr64
     11 names - too many to list
   
   Library: Visual Studio 2008 Release */

undefined4
FID_conflict_put_accValue
          (longlong param_1,undefined8 *param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  local_28 = *param_2;
  local_20 = param_2[1];
  local_18 = param_2[2];
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x138))
                    ((longlong *)(param_1 + -0x60),&local_28,param_3);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180027f54 (24 bytes) name=Unwind@180027f54

void Unwind_180027f54(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180027f6c (136 bytes) name=FID_conflict:put_accValue

/* Library Function - Multiple Matches With Different Base Names
    public: virtual long __cdecl CWnd::XAccessible::get_accChild(struct tagVARIANT,struct IDispatch
   * __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDefaultAction(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDescription(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accHelp(struct tagVARIANT,wchar_t * __ptr64
   * __ptr64) __ptr64
     11 names - too many to list
   
   Library: Visual Studio 2008 Release */

undefined4
FID_conflict_put_accValue
          (longlong param_1,undefined8 *param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  local_28 = *param_2;
  local_20 = param_2[1];
  local_18 = param_2[2];
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x140))
                    ((longlong *)(param_1 + -0x60),&local_28,param_3);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180027ffc (24 bytes) name=Unwind@180027ffc

void Unwind_180027ffc(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180028014 (136 bytes) name=FID_conflict:put_accValue

/* Library Function - Multiple Matches With Different Base Names
    public: virtual long __cdecl CWnd::XAccessible::get_accChild(struct tagVARIANT,struct IDispatch
   * __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDefaultAction(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDescription(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accHelp(struct tagVARIANT,wchar_t * __ptr64
   * __ptr64) __ptr64
     11 names - too many to list
   
   Library: Visual Studio 2008 Release */

undefined4
FID_conflict_put_accValue
          (longlong param_1,undefined8 *param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  local_28 = *param_2;
  local_20 = param_2[1];
  local_18 = param_2[2];
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x148))
                    ((longlong *)(param_1 + -0x60),&local_28,param_3);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 1800280a4 (24 bytes) name=Unwind@1800280a4

void Unwind_1800280a4(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 1800280bc (136 bytes) name=FID_conflict:put_accValue

/* Library Function - Multiple Matches With Different Base Names
    public: virtual long __cdecl CWnd::XAccessible::get_accChild(struct tagVARIANT,struct IDispatch
   * __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDefaultAction(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDescription(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accHelp(struct tagVARIANT,wchar_t * __ptr64
   * __ptr64) __ptr64
     11 names - too many to list
   
   Library: Visual Studio 2008 Release */

undefined4
FID_conflict_put_accValue
          (longlong param_1,undefined8 *param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  local_28 = *param_2;
  local_20 = param_2[1];
  local_18 = param_2[2];
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x150))
                    ((longlong *)(param_1 + -0x60),&local_28,param_3);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 18002814c (24 bytes) name=Unwind@18002814c

void Unwind_18002814c(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180028164 (136 bytes) name=FID_conflict:put_accValue

/* Library Function - Multiple Matches With Different Base Names
    public: virtual long __cdecl CWnd::XAccessible::get_accChild(struct tagVARIANT,struct IDispatch
   * __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDefaultAction(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDescription(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accHelp(struct tagVARIANT,wchar_t * __ptr64
   * __ptr64) __ptr64
     11 names - too many to list
   
   Library: Visual Studio 2008 Release */

undefined4
FID_conflict_put_accValue
          (longlong param_1,undefined8 *param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  local_28 = *param_2;
  local_20 = param_2[1];
  local_18 = param_2[2];
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x158))
                    ((longlong *)(param_1 + -0x60),&local_28,param_3);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 1800281f4 (24 bytes) name=Unwind@1800281f4

void Unwind_1800281f4(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 18002820c (151 bytes) name=get_accHelpTopic

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::XAccessible::get_accHelpTopic(wchar_t * __ptr64 *
   __ptr64,struct tagVARIANT,long * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

long __thiscall
CWnd::XAccessible::get_accHelpTopic
          (XAccessible *this,wchar_t **param_1,tagVARIANT *param_2,long *param_3)

{
  long lVar1;
  undefined8 uVar2;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  uVar2 = 0xfffffffffffffffe;
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(this + -0x28));
  local_28 = *(undefined8 *)&param_2->n1;
  local_20 = (param_2->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_2->n1 + 0x10);
  lVar1 = (**(code **)(*(longlong *)(this + -0x60) + 0x160))
                    (this + -0x60,param_1,&local_28,param_3,uVar2);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 1800282ac (24 bytes) name=Unwind@1800282ac

void Unwind_1800282ac(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 1800282c4 (136 bytes) name=FID_conflict:put_accValue

/* Library Function - Multiple Matches With Different Base Names
    public: virtual long __cdecl CWnd::XAccessible::get_accChild(struct tagVARIANT,struct IDispatch
   * __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDefaultAction(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDescription(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accHelp(struct tagVARIANT,wchar_t * __ptr64
   * __ptr64) __ptr64
     11 names - too many to list
   
   Library: Visual Studio 2008 Release */

undefined4
FID_conflict_put_accValue
          (longlong param_1,undefined8 *param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  local_28 = *param_2;
  local_20 = param_2[1];
  local_18 = param_2[2];
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x168))
                    ((longlong *)(param_1 + -0x60),&local_28,param_3);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180028354 (24 bytes) name=Unwind@180028354

void Unwind_180028354(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 18002836c (91 bytes) name=FUN_18002836c

undefined4 FUN_18002836c(longlong param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x170))
                    ((longlong *)(param_1 + -0x60),param_2);
  if (local_18 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 1800283cc (24 bytes) name=Unwind@1800283cc

void Unwind_1800283cc(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 1800283e4 (91 bytes) name=FUN_1800283e4

undefined4 FUN_1800283e4(longlong param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x178))
                    ((longlong *)(param_1 + -0x60),param_2);
  if (local_18 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180028444 (24 bytes) name=Unwind@180028444

void Unwind_180028444(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 18002845c (136 bytes) name=FID_conflict:put_accValue

/* Library Function - Multiple Matches With Different Base Names
    public: virtual long __cdecl CWnd::XAccessible::get_accChild(struct tagVARIANT,struct IDispatch
   * __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDefaultAction(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDescription(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accHelp(struct tagVARIANT,wchar_t * __ptr64
   * __ptr64) __ptr64
     11 names - too many to list
   
   Library: Visual Studio 2008 Release */

undefined4
FID_conflict_put_accValue
          (longlong param_1,undefined8 *param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  local_28 = *param_2;
  local_20 = param_2[1];
  local_18 = param_2[2];
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x180))
                    ((longlong *)(param_1 + -0x60),&local_28,param_3);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 1800284ec (24 bytes) name=Unwind@1800284ec

void Unwind_1800284ec(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180028504 (134 bytes) name=accSelect

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::XAccessible::accSelect(long,struct tagVARIANT) __ptr64
   
   Library: Visual Studio 2008 Release */

long __thiscall CWnd::XAccessible::accSelect(XAccessible *this,long param_1,tagVARIANT *param_2)

{
  long lVar1;
  undefined8 in_R9;
  undefined8 uVar2;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  uVar2 = 0xfffffffffffffffe;
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(this + -0x28));
  local_28 = *(undefined8 *)&param_2->n1;
  local_20 = (param_2->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_2->n1 + 0x10);
  lVar1 = (**(code **)(*(longlong *)(this + -0x60) + 0x188))
                    (this + -0x60,param_1,&local_28,in_R9,uVar2);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 180028594 (24 bytes) name=Unwind@180028594

void Unwind_180028594(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 1800285ac (181 bytes) name=accLocation

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::XAccessible::accLocation(long * __ptr64,long * __ptr64,long *
   __ptr64,long * __ptr64,struct tagVARIANT) __ptr64
   
   Library: Visual Studio 2008 Release */

long __thiscall
CWnd::XAccessible::accLocation
          (XAccessible *this,long *param_1,long *param_2,long *param_3,long *param_4,
          tagVARIANT *param_5)

{
  long lVar1;
  undefined8 uVar2;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  uVar2 = 0xfffffffffffffffe;
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(this + -0x28));
  local_28 = *(undefined8 *)&param_5->n1;
  local_20 = (param_5->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_5->n1 + 0x10);
  lVar1 = (**(code **)(*(longlong *)(this + -0x60) + 400))
                    (this + -0x60,param_1,param_2,param_3,param_4,&local_28,uVar2);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002866c (24 bytes) name=Unwind@18002866c

void Unwind_18002866c(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x38);
  return;
}


==================================================================

### EXPORT FUNC 180028684 (149 bytes) name=accNavigate

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::XAccessible::accNavigate(long,struct tagVARIANT,struct
   tagVARIANT * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

long __thiscall
CWnd::XAccessible::accNavigate
          (XAccessible *this,long param_1,tagVARIANT *param_2,tagVARIANT *param_3)

{
  long lVar1;
  undefined8 uVar2;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  uVar2 = 0xfffffffffffffffe;
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(this + -0x28));
  local_28 = *(undefined8 *)&param_2->n1;
  local_20 = (param_2->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_2->n1 + 0x10);
  lVar1 = (**(code **)(*(longlong *)(this + -0x60) + 0x198))
                    (this + -0x60,param_1,&local_28,param_3,uVar2);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 180028724 (24 bytes) name=Unwind@180028724

void Unwind_180028724(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 18002873c (119 bytes) name=accHitTest

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::XAccessible::accHitTest(long,long,struct tagVARIANT *
   __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

long __thiscall
CWnd::XAccessible::accHitTest(XAccessible *this,long param_1,long param_2,tagVARIANT *param_3)

{
  long lVar1;
  undefined8 uVar2;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  uVar2 = 0xfffffffffffffffe;
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(this + -0x28));
  lVar1 = (**(code **)(*(longlong *)(this + -0x60) + 0x1a0))
                    (this + -0x60,param_1,param_2,param_3,uVar2);
  if (local_18 != 0) {
    FUN_180021f08();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 1800287bc (24 bytes) name=Unwind@1800287bc

void Unwind_1800287bc(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 1800287d4 (120 bytes) name=accDoDefaultAction

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::XAccessible::accDoDefaultAction(struct tagVARIANT) __ptr64
   
   Library: Visual Studio 2008 Release */

long __thiscall CWnd::XAccessible::accDoDefaultAction(XAccessible *this,tagVARIANT *param_1)

{
  long lVar1;
  undefined8 in_R8;
  undefined8 in_R9;
  undefined8 uVar2;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  uVar2 = 0xfffffffffffffffe;
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(this + -0x28));
  local_28 = *(undefined8 *)&param_1->n1;
  local_20 = (param_1->n1).decVal.u2;
  local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
  lVar1 = (**(code **)(*(longlong *)(this + -0x60) + 0x1a8))
                    (this + -0x60,&local_28,in_R8,in_R9,uVar2);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 180028854 (24 bytes) name=Unwind@180028854

void Unwind_180028854(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 18002886c (136 bytes) name=FID_conflict:put_accValue

/* Library Function - Multiple Matches With Different Base Names
    public: virtual long __cdecl CWnd::XAccessible::get_accChild(struct tagVARIANT,struct IDispatch
   * __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDefaultAction(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDescription(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accHelp(struct tagVARIANT,wchar_t * __ptr64
   * __ptr64) __ptr64
     11 names - too many to list
   
   Library: Visual Studio 2008 Release */

undefined4
FID_conflict_put_accValue
          (longlong param_1,undefined8 *param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  local_28 = *param_2;
  local_20 = param_2[1];
  local_18 = param_2[2];
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x1b0))
                    ((longlong *)(param_1 + -0x60),&local_28,param_3);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 1800288fc (24 bytes) name=Unwind@1800288fc

void Unwind_1800288fc(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180028914 (136 bytes) name=FID_conflict:put_accValue

/* Library Function - Multiple Matches With Different Base Names
    public: virtual long __cdecl CWnd::XAccessible::get_accChild(struct tagVARIANT,struct IDispatch
   * __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDefaultAction(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accDescription(struct tagVARIANT,wchar_t *
   __ptr64 * __ptr64) __ptr64
    public: virtual long __cdecl CWnd::XAccessible::get_accHelp(struct tagVARIANT,wchar_t * __ptr64
   * __ptr64) __ptr64
     11 names - too many to list
   
   Library: Visual Studio 2008 Release */

undefined4
FID_conflict_put_accValue
          (longlong param_1,undefined8 *param_2,undefined8 param_3,undefined8 param_4)

{
  undefined4 uVar1;
  AFX_MAINTAIN_STATE2 local_40 [8];
  int local_38;
  undefined8 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_40,*(AFX_MODULE_STATE **)(param_1 + -0x28));
  local_28 = *param_2;
  local_20 = param_2[1];
  local_18 = param_2[2];
  uVar1 = (**(code **)(*(longlong *)(param_1 + -0x60) + 0x1b8))
                    ((longlong *)(param_1 + -0x60),&local_28,param_3);
  if (local_38 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 1800289a4 (24 bytes) name=Unwind@1800289a4

void Unwind_1800289a4(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 1800289bc (71 bytes) name=AddRef

/* Library Function - Single Match
    public: virtual unsigned long __cdecl CWnd::XAccessibleServer::AddRef(void) __ptr64
   
   Library: Visual Studio 2005 Release */

ulong __thiscall CWnd::XAccessibleServer::AddRef(XAccessibleServer *this)

{
  ulong uVar1;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(this + -0x30));
  uVar1 = CCmdTarget::ExternalAddRef((CCmdTarget *)(this + -0x68));
  if (local_18 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180028a0c (24 bytes) name=Unwind@180028a0c

void Unwind_180028a0c(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180028a24 (71 bytes) name=Release

/* Library Function - Single Match
    public: virtual unsigned long __cdecl CWnd::XAccessibleServer::Release(void) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

ulong __thiscall CWnd::XAccessibleServer::Release(XAccessibleServer *this)

{
  ulong uVar1;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(this + -0x30));
  uVar1 = CCmdTarget::ExternalRelease((CCmdTarget *)(this + -0x68));
  if (local_18 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180028a74 (24 bytes) name=Unwind@180028a74

void Unwind_180028a74(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180028a8c (103 bytes) name=QueryInterface

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::XAccessibleServer::QueryInterface(struct _GUID const &
   __ptr64,void * __ptr64 * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

long __thiscall
CWnd::XAccessibleServer::QueryInterface(XAccessibleServer *this,_GUID *param_1,void **param_2)

{
  ulong uVar1;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(this + -0x30));
  uVar1 = CCmdTarget::ExternalQueryInterface((CCmdTarget *)(this + -0x68),param_1,param_2);
  if (local_18 != 0) {
    FUN_180021f08();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180028afc (24 bytes) name=Unwind@180028afc

void Unwind_180028afc(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180028b14 (91 bytes) name=SetProxy

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::XAccessibleServer::SetProxy(struct IAccessibleProxy *
   __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

long __thiscall CWnd::XAccessibleServer::SetProxy(XAccessibleServer *this,IAccessibleProxy *param_1)

{
  long lVar1;
  undefined8 in_R8;
  undefined8 in_R9;
  undefined8 uVar2;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  uVar2 = 0xfffffffffffffffe;
  AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(this + -0x30));
  lVar1 = (**(code **)(*(longlong *)(this + -0x68) + 0x1c0))(this + -0x68,param_1,in_R8,in_R9,uVar2)
  ;
  if (local_18 != 0) {
    FUN_180021f08();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 180028b74 (24 bytes) name=Unwind@180028b74

void Unwind_180028b74(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180028b8c (81 bytes) name=FUN_180028b8c

undefined8 FUN_180028b8c(longlong param_1,undefined8 *param_2)

{
  undefined8 uVar1;
  AFX_MAINTAIN_STATE2 local_18 [8];
  int local_10;
  
  if (param_2 == (undefined8 *)0x0) {
    uVar1 = 0x80004003;
  }
  else {
    AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_18,*(AFX_MODULE_STATE **)(param_1 + -0x30));
    *param_2 = *(undefined8 *)(param_1 + -0x28);
    if (local_10 != 0) {
      FUN_180021f08();
    }
    uVar1 = 0;
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180028be0 (23 bytes) name=FUN_180028be0

void FUN_180028be0(longlong *param_1)

{
  if ((longlong *)*param_1 != (longlong *)0x0) {
    (**(code **)(*(longlong *)*param_1 + 0x10))();
  }
  return;
}


==================================================================

### EXPORT FUNC 180028bf8 (131 bytes) name=UpdateData

/* Library Function - Single Match
    public: int __cdecl CWnd::UpdateData(int) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

int __thiscall CWnd::UpdateData(CWnd *this,int param_1)

{
  undefined8 uVar1;
  longlong lVar2;
  undefined8 in_R9;
  undefined8 uVar3;
  int local_28 [2];
  CWnd *local_20;
  undefined4 local_18;
  
  uVar3 = 0xfffffffffffffffe;
  local_18 = 0;
  local_28[0] = param_1;
  local_20 = this;
  lVar2 = FUN_1800222f4();
  uVar1 = *(undefined8 *)(lVar2 + 0x198);
  *(undefined8 *)(lVar2 + 0x198) = *(undefined8 *)(this + 0x40);
  (**(code **)(*(longlong *)this + 0x1e8))(this,local_28,*(longlong *)this,in_R9,uVar3);
  *(undefined8 *)(lVar2 + 0x198) = uVar1;
  return 1;
}


==================================================================

### EXPORT FUNC 180028c88 (28 bytes) name=Catch@180028c88

undefined * Catch_180028c88(void)

{
  return &DAT_180028c60;
}


==================================================================

### EXPORT FUNC 180028ca8 (63 bytes) name=Catch@180028ca8

/* Library Function - Single Match
    int `public: int __cdecl CWnd::UpdateData(int) __ptr64'::`1'::catch$1
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

undefined * Catch_180028ca8(undefined8 param_1,longlong param_2)

{
  longlong *plVar1;
  
  plVar1 = *(longlong **)(param_2 + 0x28);
  (**(code **)(*plVar1 + 0x28))(plVar1,0x30,0xf108);
  FUN_18001ec74(plVar1);
  return &DAT_180028c67;
}


==================================================================

### EXPORT FUNC 180028ce8 (603 bytes) name=FUN_180028ce8

void FUN_180028ce8(CWnd *param_1,longlong param_2)

{
  ulong uVar1;
  uint uVar2;
  HWND pHVar3;
  longlong *plVar4;
  HWND pHVar5;
  longlong lVar6;
  HWND pHVar7;
  int iVar8;
  int iVar9;
  tagRECT local_68;
  tagRECT local_58;
  tagRECT local_48;
  uint local_38 [5];
  RECT local_24;
  
  uVar1 = CWnd::GetStyle(param_1);
  pHVar7 = (HWND)0x0;
  if (param_2 == 0) {
    if ((uVar1 >> 0x1e & 1) == 0) {
      pHVar5 = GetWindow(*(HWND *)(param_1 + 0x40),4);
    }
    else {
      pHVar5 = GetParent(*(HWND *)(param_1 + 0x40));
    }
    if ((pHVar5 != (HWND)0x0) &&
       (pHVar3 = (HWND)SendMessageW(pHVar5,0x36b,0,0), pHVar3 != (HWND)0x0)) {
      pHVar5 = pHVar3;
    }
  }
  else {
    pHVar5 = *(HWND *)(param_2 + 0x40);
  }
  GetWindowRect(*(HWND *)(param_1 + 0x40),&local_58);
  if ((uVar1 >> 0x1e & 1) == 0) {
    if ((pHVar5 != (HWND)0x0) &&
       ((uVar2 = GetWindowLongW(pHVar5,-0x10), (uVar2 >> 0x1c & 1) == 0 ||
        ((uVar2 >> 0x1d & 1) != 0)))) {
      pHVar5 = pHVar7;
    }
    local_38[0] = 0x28;
    if (pHVar5 == (HWND)0x0) {
      plVar4 = (longlong *)FUN_180020e40();
      pHVar5 = pHVar7;
      if (plVar4 != (longlong *)0x0) {
        pHVar5 = (HWND)(**(code **)(*plVar4 + 0xe8))(plVar4);
      }
      if (pHVar5 != (HWND)0x0) {
        pHVar7 = *(HWND *)(pHVar5 + 0x10);
      }
      lVar6 = xMonitorFromWindow(pHVar7,1);
      FUN_180025e44(lVar6,local_38);
      CopyRect(&local_48,&local_24);
    }
    else {
      GetWindowRect(pHVar5,&local_48);
      lVar6 = xMonitorFromWindow(pHVar5,2);
      FUN_180025e44(lVar6,local_38);
    }
    CopyRect(&local_68,&local_24);
  }
  else {
    pHVar7 = GetParent(*(HWND *)(param_1 + 0x40));
    GetClientRect(pHVar7,&local_68);
    GetClientRect(pHVar5,&local_48);
    MapWindowPoints(pHVar5,pHVar7,(LPPOINT)&local_48,2);
  }
  iVar8 = (local_48.right + local_48.left) / 2 - (local_58.right - local_58.left) / 2;
  iVar9 = (local_48.bottom + local_48.top) / 2 - (local_58.bottom - local_58.top) / 2;
  if ((local_68.left <= iVar8) &&
     (local_68.left = iVar8, local_68.right < (local_58.right - local_58.left) + iVar8)) {
    local_68.left = (local_58.left - local_58.right) + local_68.right;
  }
  if ((local_68.top <= iVar9) &&
     (local_68.top = iVar9, local_68.bottom < (local_58.bottom - local_58.top) + iVar9)) {
    local_68.top = (local_58.top - local_58.bottom) + local_68.bottom;
  }
  CWnd::SetWindowPos(param_1,(CWnd *)0x0,local_68.left,local_68.top,-1,-1,0x15);
  return;
}


==================================================================

### EXPORT FUNC 180028f44 (398 bytes) name=FUN_180028f44

undefined4 FUN_180028f44(CWnd *param_1,ulonglong param_2)

{
  bool bVar1;
  bool bVar2;
  ulong uVar3;
  int iVar4;
  BOOL BVar5;
  HWND hWnd;
  tagMSG *lpMsg;
  LRESULT LVar6;
  int iVar7;
  
  iVar7 = 0;
  bVar1 = true;
  bVar2 = true;
  if (((param_2 & 4) == 0) || (uVar3 = CWnd::GetStyle(param_1), (uVar3 >> 0x1c & 1) != 0)) {
    bVar1 = false;
  }
  hWnd = GetParent(*(HWND *)(param_1 + 0x40));
  *(uint *)(param_1 + 0x78) = *(uint *)(param_1 + 0x78) | 0x18;
  lpMsg = (tagMSG *)FUN_180020e54();
LAB_180029021:
  while ((!bVar2 || (BVar5 = PeekMessageW(lpMsg,(HWND)0x0,0,0,0), BVar5 != 0))) {
    do {
      iVar4 = AfxPumpMessage();
      if (iVar4 == 0) {
        AfxPostQuitMessage(0);
        return 0xffffffff;
      }
      if ((bVar1) && ((lpMsg->message == 0x118 || (lpMsg->message == 0x104)))) {
        FUN_18002e260((longlong)param_1,1);
        UpdateWindow(*(HWND *)(param_1 + 0x40));
        bVar1 = false;
      }
      iVar4 = (**(code **)(*(longlong *)param_1 + 0x100))(param_1);
      if (iVar4 == 0) {
        *(uint *)(param_1 + 0x78) = *(uint *)(param_1 + 0x78) & 0xffffffe7;
        return *(undefined4 *)(param_1 + 0x88);
      }
      iVar4 = AfxIsIdleMessage(lpMsg);
      if (iVar4 != 0) {
        iVar7 = 0;
        bVar2 = true;
      }
      BVar5 = PeekMessageW(lpMsg,(HWND)0x0,0,0,0);
    } while (BVar5 != 0);
  }
  if (bVar1) {
    FUN_18002e260((longlong)param_1,1);
    UpdateWindow(*(HWND *)(param_1 + 0x40));
    bVar1 = false;
  }
  if ((((param_2 & 1) == 0) && (hWnd != (HWND)0x0)) && (iVar7 == 0)) {
    SendMessageW(hWnd,0x121,0,*(LPARAM *)(param_1 + 0x40));
  }
  if ((param_2 & 2) == 0) goto code_r0x000180029002;
  goto LAB_18002901f;
code_r0x000180029002:
  LVar6 = SendMessageW(*(HWND *)(param_1 + 0x40),0x36a,0,(longlong)iVar7);
  iVar7 = iVar7 + 1;
  if (LVar6 == 0) {
LAB_18002901f:
    bVar2 = false;
  }
  goto LAB_180029021;
}


==================================================================

### EXPORT FUNC 1800290d4 (46 bytes) name=EndModalLoop

/* Library Function - Single Match
    public: virtual void __cdecl CWnd::EndModalLoop(int) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void __thiscall CWnd::EndModalLoop(CWnd *this,int param_1)

{
  *(int *)(this + 0x88) = param_1;
  if ((*(uint *)(this + 0x78) & 0x10) != 0) {
    *(uint *)(this + 0x78) = *(uint *)(this + 0x78) & 0xffffffef;
    PostMessageW(*(HWND *)(this + 0x40),0,0,0);
  }
  return;
}


==================================================================

### EXPORT FUNC 180029104 (49 bytes) name=CreateObject

/* Library Function - Single Match
    public: static class CObject * __ptr64 __cdecl CWnd::CreateObject(void)
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

CObject * __cdecl CWnd::CreateObject(void)

{
  CWnd *this;
  CObject *pCVar1;
  
  this = FUN_18001eb74(0xa8);
  pCVar1 = (CObject *)0x0;
  if (this != (CWnd *)0x0) {
    pCVar1 = (CObject *)CWnd(this);
  }
  return pCVar1;
}


==================================================================

### EXPORT FUNC 180029144 (24 bytes) name=Unwind@180029144

void Unwind_180029144(undefined8 param_1,longlong param_2)

{
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 18002915c (39 bytes) name=Construct

/* Library Function - Single Match
    public: static void __cdecl ConstructDestruct<class CWnd>::Construct(class CObject * __ptr64)
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void __cdecl ConstructDestruct<CWnd>::Construct(CObject *param_1)

{
  if (param_1 != (CObject *)0x0) {
    CWnd::CWnd((CWnd *)param_1);
  }
  return;
}


==================================================================

### EXPORT FUNC 18002918c (28 bytes) name=Unwind@18002918c

void Unwind_18002918c(undefined8 param_1,longlong param_2)

{
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x48));
  return;
}


==================================================================

### EXPORT FUNC 1800291a8 (114 bytes) name=FUN_1800291a8

undefined8 * FUN_1800291a8(longlong param_1,undefined8 *param_2)

{
  HMODULE pHVar1;
  FARPROC pFVar2;
  
  if (*(longlong *)(param_1 + 0x20) == 0) {
    if (*(longlong *)(param_1 + 8) == 0) {
      pHVar1 = GetModuleHandleW(*(LPCWSTR *)(param_1 + 0x18));
      *(HMODULE *)(param_1 + 8) = pHVar1;
      if (pHVar1 == (HMODULE)0x0) {
        pHVar1 = LoadLibraryW(*(LPCWSTR *)(param_1 + 0x18));
        *(HMODULE *)(param_1 + 8) = pHVar1;
        *(bool *)(param_1 + 0x10) = pHVar1 != (HMODULE)0x0;
      }
    }
    pFVar2 = GetProcAddress(*(HMODULE *)(param_1 + 8),"InitCommonControls");
    *(FARPROC *)(param_1 + 0x20) = pFVar2;
  }
  *param_2 = *(undefined8 *)(param_1 + 0x20);
  return param_2;
}


==================================================================

### EXPORT FUNC 18002921c (117 bytes) name=_InitCommonControls

/* Library Function - Single Match
    public: void __cdecl CComCtlWrapper::_InitCommonControls(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CComCtlWrapper::_InitCommonControls(CComCtlWrapper *this)

{
  undefined1 uVar1;
  int iVar2;
  longlong lVar3;
  undefined7 extraout_var;
  undefined8 local_res18;
  undefined8 local_res20;
  
  local_res18 = 0;
  lVar3 = FUN_180022bb4();
  uVar1 = FUN_180021f24(*(undefined8 *)(lVar3 + 0xd8),(longlong)&local_res18);
  iVar2 = (int)CONCAT71(extraout_var,uVar1);
  if (iVar2 != 0) {
    FUN_1800291a8((longlong)this,&local_res20);
    if (*(code **)(this + 0x20) == (code *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    (**(code **)(this + 0x20))();
    if (iVar2 != 2) {
      FUN_180021f08();
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18002929c (32 bytes) name=FUN_18002929c

void FUN_18002929c(undefined8 param_1,longlong param_2)

{
  if (*(int *)(param_2 + 0x38) != 2) {
    FUN_180021f08();
  }
  return;
}


==================================================================

### EXPORT FUNC 1800292bc (114 bytes) name=FUN_1800292bc

undefined8 * FUN_1800292bc(longlong param_1,undefined8 *param_2)

{
  HMODULE pHVar1;
  FARPROC pFVar2;
  
  if (*(longlong *)(param_1 + 0x28) == 0) {
    if (*(longlong *)(param_1 + 8) == 0) {
      pHVar1 = GetModuleHandleW(*(LPCWSTR *)(param_1 + 0x18));
      *(HMODULE *)(param_1 + 8) = pHVar1;
      if (pHVar1 == (HMODULE)0x0) {
        pHVar1 = LoadLibraryW(*(LPCWSTR *)(param_1 + 0x18));
        *(HMODULE *)(param_1 + 8) = pHVar1;
        *(bool *)(param_1 + 0x10) = pHVar1 != (HMODULE)0x0;
      }
    }
    pFVar2 = GetProcAddress(*(HMODULE *)(param_1 + 8),"InitCommonControlsEx");
    *(FARPROC *)(param_1 + 0x28) = pFVar2;
  }
  *param_2 = *(undefined8 *)(param_1 + 0x28);
  return param_2;
}


==================================================================

### EXPORT FUNC 180029330 (180 bytes) name=_InitCommonControlsEx

/* Library Function - Single Match
    public: int __cdecl CComCtlWrapper::_InitCommonControlsEx(struct tagINITCOMMONCONTROLSEX *
   __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

int __thiscall
CComCtlWrapper::_InitCommonControlsEx(CComCtlWrapper *this,tagINITCOMMONCONTROLSEX *param_1)

{
  undefined1 uVar1;
  int iVar2;
  int iVar3;
  DWORD dwErrCode;
  longlong lVar4;
  undefined7 extraout_var;
  undefined8 local_res20;
  undefined8 local_10;
  
  local_res20 = 0;
  lVar4 = FUN_180022bb4();
  uVar1 = FUN_180021f24(*(undefined8 *)(lVar4 + 0xd8),(longlong)&local_res20);
  iVar2 = (int)CONCAT71(extraout_var,uVar1);
  iVar3 = 0;
  if (iVar2 != 0) {
    FUN_1800292bc((longlong)this,&local_10);
    if (*(code **)(this + 0x28) == (code *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    iVar3 = (**(code **)(this + 0x28))(param_1);
    if (iVar2 != 2) {
      if (iVar3 != 0) {
        dwErrCode = 0;
      }
      else {
        dwErrCode = GetLastError();
      }
      FUN_180021f08();
      if (iVar3 == 0) {
        SetLastError(dwErrCode);
      }
    }
  }
  return iVar3;
}


==================================================================

### EXPORT FUNC 1800293f0 (72 bytes) name=FUN_1800293f0

void FUN_1800293f0(undefined8 param_1,longlong param_2)

{
  DWORD dwErrCode;
  bool bVar1;
  
  if (*(int *)(param_2 + 0x50) != 2) {
    bVar1 = *(int *)(param_2 + 0x20) != 0;
    if (bVar1) {
      dwErrCode = 0;
    }
    else {
      dwErrCode = GetLastError();
    }
    FUN_180021f08();
    if (!bVar1) {
      SetLastError(dwErrCode);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180029438 (36 bytes) name=~CInternalGlobalLock

/* Library Function - Single Match
    public: __cdecl CInternalGlobalLock::~CInternalGlobalLock(void) __ptr64
   
   Library: Visual Studio 2005 Release */

void __thiscall CInternalGlobalLock::~CInternalGlobalLock(CInternalGlobalLock *this)

{
  if (*(int *)this != 0x7fffffff) {
    FUN_180023834(*(uint *)this);
    *(undefined4 *)this = 0x7fffffff;
  }
  return;
}


==================================================================

### EXPORT FUNC 18002945c (101 bytes) name=FUN_18002945c

longlong FUN_18002945c(void)

{
  LONG LVar1;
  DWORD DVar2;
  void *pvVar3;
  
  pvVar3 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar3 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  LVar1 = GetMessageTime();
  *(LONG *)((longlong)pvVar3 + 0xb8) = LVar1;
  DVar2 = GetMessagePos();
  *(ulonglong *)((longlong)pvVar3 + 0xbc) = CONCAT44((int)(short)(DVar2 >> 0x10),(int)(short)DVar2);
  return (longlong)pvVar3 + 0x98;
}


==================================================================

### EXPORT FUNC 1800294c4 (80 bytes) name=FUN_1800294c4

void FUN_1800294c4(longlong *param_1)

{
  void *pvVar1;
  
  pvVar1 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar1 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
                    /* WARNING: Could not recover jumptable at 0x00018002950e. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*param_1 + 0x220))
            (param_1,*(undefined4 *)((longlong)pvVar1 + 0xa0),
             *(undefined8 *)((longlong)pvVar1 + 0xa8),*(undefined8 *)((longlong)pvVar1 + 0xb0));
  return;
}


==================================================================

### EXPORT FUNC 180029518 (163 bytes) name=afxMapHWND

/* Library Function - Single Match
    class CHandleMap * __ptr64 __cdecl afxMapHWND(int)
   
   Library: Visual Studio 2008 Release */

CHandleMap * __cdecl afxMapHWND(int param_1)

{
  longlong lVar1;
  undefined *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  
  lVar1 = FUN_180022c04();
  puVar4 = (undefined8 *)0x0;
  if ((*(longlong *)(lVar1 + 0x28) == 0) && (param_1 != 0)) {
    puVar2 = FUN_18001eb64(FUN_18003067c);
    puVar3 = FUN_18001eb74(0xb8);
    if (puVar3 != (undefined8 *)0x0) {
      puVar4 = FUN_180023874(puVar3,0x180055150,0x18002915c,0x1800270a0,0x40,1);
    }
    *(undefined8 **)(lVar1 + 0x28) = puVar4;
    FUN_18001eb64(puVar2);
  }
  return *(CHandleMap **)(lVar1 + 0x28);
}


==================================================================

### EXPORT FUNC 1800295c8 (24 bytes) name=Unwind@1800295c8

void Unwind_1800295c8(undefined8 param_1,longlong param_2)

{
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x58));
  return;
}


==================================================================

### EXPORT FUNC 1800295e0 (65 bytes) name=FromHandle

/* Library Function - Single Match
    public: static class CWnd * __ptr64 __cdecl CWnd::FromHandle(struct HWND__ * __ptr64)
   
   Library: Visual Studio 2008 Release */

CWnd * __cdecl CWnd::FromHandle(HWND__ *param_1)

{
  CHandleMap *this;
  CObject *this_00;
  
  this = afxMapHWND(1);
  this_00 = CHandleMap::FromHandle(this,param_1);
  AttachControlSite((CWnd *)this_00,this);
  return (CWnd *)this_00;
}


==================================================================

### EXPORT FUNC 180029624 (43 bytes) name=FromHandlePermanent

/* Library Function - Single Match
    public: static class CWnd * __ptr64 __cdecl CWnd::FromHandlePermanent(struct HWND__ * __ptr64)
   
   Library: Visual Studio 2008 Release */

CWnd * __cdecl CWnd::FromHandlePermanent(HWND__ *param_1)

{
  longlong lVar1;
  CWnd *pCVar2;
  
  lVar1 = FUN_180022c04();
  pCVar2 = (CWnd *)0x0;
  if (*(longlong *)(lVar1 + 0x28) != 0) {
    pCVar2 = (CWnd *)FUN_180030118(*(longlong *)(lVar1 + 0x28) + 0x30,(ulonglong)param_1);
  }
  return pCVar2;
}


==================================================================

### EXPORT FUNC 180029650 (94 bytes) name=FUN_180029650

bool FUN_180029650(CWnd *param_1,ulonglong param_2)

{
  CHandleMap *pCVar1;
  undefined8 *puVar2;
  
  if (param_2 != 0) {
    pCVar1 = afxMapHWND(1);
    *(ulonglong *)(param_1 + 0x40) = param_2;
    puVar2 = FUN_18003033c((longlong)(pCVar1 + 0x30),param_2);
    *puVar2 = param_1;
    CWnd::AttachControlSite(param_1,pCVar1);
  }
  return param_2 != 0;
}


==================================================================

### EXPORT FUNC 1800296b0 (76 bytes) name=Detach

/* Library Function - Single Match
    public: struct HWND__ * __ptr64 __cdecl CWnd::Detach(void) __ptr64
   
   Library: Visual Studio 2008 Release */

HWND__ * __thiscall CWnd::Detach(CWnd *this)

{
  HWND__ *pHVar1;
  longlong lVar2;
  
  pHVar1 = *(HWND__ **)(this + 0x40);
  if (pHVar1 != (HWND__ *)0x0) {
    lVar2 = FUN_180022c04();
    if (*(longlong *)(lVar2 + 0x28) != 0) {
      CMapPtrToPtr::RemoveKey
                ((CMapPtrToPtr *)(*(longlong *)(lVar2 + 0x28) + 0x30),*(void **)(this + 0x40));
    }
    *(undefined8 *)(this + 0x40) = 0;
  }
  *(undefined8 *)(this + 0xa0) = 0;
  return pHVar1;
}


==================================================================

### EXPORT FUNC 1800296fc (96 bytes) name=FUN_1800296fc

bool FUN_1800296fc(void)

{
  void *pvVar1;
  longlong lVar2;
  bool bVar3;
  
  pvVar1 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar1 != (void *)0x0) {
    lVar2 = FUN_180022bb4();
    if ((*(char *)(lVar2 + 0x28) != '\0') && (*(HHOOK *)((longlong)pvVar1 + 0x48) != (HHOOK)0x0)) {
      UnhookWindowsHookEx(*(HHOOK *)((longlong)pvVar1 + 0x48));
      *(undefined8 *)((longlong)pvVar1 + 0x48) = 0;
    }
    bVar3 = *(longlong *)((longlong)pvVar1 + 0x28) == 0;
    if (!bVar3) {
      *(undefined8 *)((longlong)pvVar1 + 0x28) = 0;
    }
    return bVar3;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18001ed90();
}


==================================================================

### EXPORT FUNC 180029760 (88 bytes) name=OnDestroy

/* Library Function - Single Match
    protected: void __cdecl CWnd::OnDestroy(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CWnd::OnDestroy(CWnd *this)

{
  longlong *plVar1;
  
  plVar1 = *(longlong **)(this + 0x98);
  if (plVar1 != (longlong *)0x0) {
    (**(code **)(*plVar1 + 8))(plVar1,1);
  }
  plVar1 = *(longlong **)(this + 0x58);
  *(undefined8 *)(this + 0x98) = 0;
  if (plVar1 != (longlong *)0x0) {
    (**(code **)(*plVar1 + 0x18))(plVar1,0,0);
  }
  if (*(longlong **)(this + 0x50) != (longlong *)0x0) {
    (**(code **)(**(longlong **)(this + 0x50) + 0x10))();
  }
  FUN_1800294c4((longlong *)this);
  return;
}


==================================================================

### EXPORT FUNC 1800297b8 (357 bytes) name=FUN_1800297b8

void FUN_1800297b8(CWnd *param_1)

{
  bool bVar1;
  longlong lVar2;
  longlong lVar3;
  undefined7 extraout_var;
  LONG_PTR LVar4;
  LONG_PTR LVar5;
  longlong *plVar6;
  undefined4 local_58;
  undefined4 local_54;
  undefined8 local_50;
  undefined8 local_48;
  
  lVar2 = FUN_180020e40();
  if (lVar2 == 0) goto LAB_18002980e;
  if (*(CWnd **)(lVar2 + 0x40) == param_1) {
    lVar3 = FUN_180022bb4();
    if (*(char *)(lVar3 + 0x28) == '\0') {
      lVar3 = FUN_180022bb4();
      if (lVar2 == *(longlong *)(lVar3 + 8)) {
        bVar1 = FUN_180031e90();
        if ((int)CONCAT71(extraout_var,bVar1) == 0) goto LAB_1800297fe;
      }
      AfxPostQuitMessage(0);
    }
LAB_1800297fe:
    *(undefined8 *)(lVar2 + 0x40) = 0;
  }
  if (*(CWnd **)(lVar2 + 0x48) == param_1) {
    *(undefined8 *)(lVar2 + 0x48) = 0;
  }
LAB_18002980e:
  if (*(longlong **)(param_1 + 0x90) != (longlong *)0x0) {
    (**(code **)(**(longlong **)(param_1 + 0x90) + 0xa0))();
    *(undefined8 *)(param_1 + 0x90) = 0;
  }
  if (*(longlong **)(param_1 + 0x98) != (longlong *)0x0) {
    (**(code **)(**(longlong **)(param_1 + 0x98) + 8))();
  }
  *(undefined8 *)(param_1 + 0x98) = 0;
  if (((byte)param_1[0x78] & 1) != 0) {
    lVar2 = FUN_180022c04();
    lVar2 = *(longlong *)(lVar2 + 0x78);
    if ((lVar2 != 0) && (*(longlong *)(lVar2 + 0x40) != 0)) {
      FUN_1800357d0((ulonglong *)&local_58,0,0x48);
      local_50 = *(undefined8 *)(param_1 + 0x40);
      local_58 = 0x38;
      local_54 = 1;
      local_48 = local_50;
      SendMessageW(*(HWND *)(lVar2 + 0x40),0x433,0,(LPARAM)&local_58);
    }
  }
  LVar4 = GetWindowLongPtrW(*(HWND *)(param_1 + 0x40),-4);
  FUN_1800294c4((longlong *)param_1);
  LVar5 = GetWindowLongPtrW(*(HWND *)(param_1 + 0x40),-4);
  if (LVar5 == LVar4) {
    plVar6 = (longlong *)(**(code **)(*(longlong *)param_1 + 0x1e0))(param_1);
    if (*plVar6 != 0) {
      SetWindowLongPtrW(*(HWND *)(param_1 + 0x40),-4,*plVar6);
    }
  }
  CWnd::Detach(param_1);
                    /* WARNING: Could not recover jumptable at 0x000180029916. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*(longlong *)param_1 + 0x228))(param_1);
  return;
}


==================================================================

### EXPORT FUNC 180029920 (138 bytes) name=FUN_180029920

BOOL FUN_180029920(longlong param_1)

{
  BOOL BVar1;
  longlong lVar2;
  
  BVar1 = 0;
  if (*(longlong *)(param_1 + 0x40) == 0) {
    if (*(longlong *)(param_1 + 0xa0) == 0) {
      return 0;
    }
    if (*(longlong *)(param_1 + 0x40) == 0) goto LAB_180029969;
  }
  lVar2 = FUN_180022c04();
  if (*(longlong *)(lVar2 + 0x28) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  FUN_180030118(*(longlong *)(lVar2 + 0x28) + 0x30,*(ulonglong *)(param_1 + 0x40));
LAB_180029969:
  if ((*(HWND *)(param_1 + 0x40) != (HWND)0x0) || (*(longlong *)(param_1 + 0xa0) != 0)) {
    if (*(longlong *)(param_1 + 0xa0) == 0) {
      BVar1 = DestroyWindow(*(HWND *)(param_1 + 0x40));
    }
    else {
      BVar1 = (**(code **)(**(longlong **)(param_1 + 0xa0) + 0xb0))();
    }
  }
  return BVar1;
}


==================================================================

### EXPORT FUNC 1800299ac (93 bytes) name=FUN_1800299ac

void FUN_1800299ac(longlong *param_1,undefined8 param_2,undefined8 param_3)

{
  void *pvVar1;
  undefined8 local_28;
  undefined8 local_20;
  int local_18;
  
  local_28 = param_3;
  local_20 = param_2;
  pvVar1 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar1 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  local_18 = *(int *)((longlong)pvVar1 + 0xa0) + -0x132;
  (**(code **)(*param_1 + 0x210))(param_1,0x19,0,&local_28);
  return;
}


==================================================================

### EXPORT FUNC 180029a0c (170 bytes) name=FUN_180029a0c

CWnd * FUN_180029a0c(HWND param_1,int param_2,int param_3)

{
  HWND pHVar1;
  HWND pHVar2;
  CWnd *pCVar3;
  
  pHVar1 = GetDlgItem(param_1,param_2);
  if (pHVar1 != (HWND)0x0) {
    pHVar2 = GetTopWindow(pHVar1);
    if ((pHVar2 != (HWND)0x0) &&
       (pCVar3 = FUN_180029a0c(pHVar1,param_2,param_3), pCVar3 != (CWnd *)0x0)) {
      return pCVar3;
    }
    if (param_3 == 0) {
      pCVar3 = CWnd::FromHandle(pHVar1);
      return pCVar3;
    }
    pCVar3 = CWnd::FromHandlePermanent(pHVar1);
    if (pCVar3 != (CWnd *)0x0) {
      return pCVar3;
    }
  }
  pHVar1 = GetTopWindow(param_1);
  while( true ) {
    if (pHVar1 == (HWND)0x0) {
      return (CWnd *)0x0;
    }
    pCVar3 = FUN_180029a0c(pHVar1,param_2,param_3);
    if (pCVar3 != (CWnd *)0x0) break;
    pHVar1 = GetWindow(pHVar1,2);
  }
  return pCVar3;
}


==================================================================

### EXPORT FUNC 180029ab8 (109 bytes) name=WalkPreTranslateTree

/* Library Function - Single Match
    public: static int __cdecl CWnd::WalkPreTranslateTree(struct HWND__ * __ptr64,struct tagMSG *
   __ptr64)
   
   Library: Visual Studio 2008 Release */

int __cdecl CWnd::WalkPreTranslateTree(HWND__ *param_1,tagMSG *param_2)

{
  int iVar1;
  CWnd *pCVar2;
  HWND hWnd;
  
  hWnd = param_2->hwnd;
  while( true ) {
    if (hWnd == (HWND__ *)0x0) {
      return 0;
    }
    pCVar2 = FromHandlePermanent(hWnd);
    if ((pCVar2 != (CWnd *)0x0) &&
       (iVar1 = (**(code **)(*(longlong *)pCVar2 + 0x200))(pCVar2,param_2), iVar1 != 0)) break;
    if (hWnd == param_1) {
      return 0;
    }
    hWnd = GetParent(hWnd);
  }
  return 1;
}


==================================================================

### EXPORT FUNC 180029b28 (97 bytes) name=FUN_180029b28

void FUN_180029b28(longlong *param_1,undefined8 param_2)

{
  void *pvVar1;
  
  pvVar1 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar1 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  (**(code **)(*param_1 + 0x230))
            (param_1,*(undefined4 *)((longlong)pvVar1 + 0xa0),
             *(undefined8 *)((longlong)pvVar1 + 0xa8),*(undefined8 *)((longlong)pvVar1 + 0xb0),
             param_2);
  return;
}


==================================================================

### EXPORT FUNC 180029b8c (53 bytes) name=OnSetFocus

/* Library Function - Single Match
    protected: void __cdecl CWnd::OnSetFocus(class CWnd * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void __thiscall CWnd::OnSetFocus(CWnd *this,CWnd *param_1)

{
  int iVar1;
  
  if ((*(longlong *)(this + 0x98) != 0) &&
     (iVar1 = (**(code **)(**(longlong **)(this + 0x98) + 0x120))(), iVar1 != 0)) {
    return;
  }
  FUN_1800294c4((longlong *)this);
  return;
}


==================================================================

### EXPORT FUNC 180029bc4 (177 bytes) name=OnHelpInfo

/* Library Function - Single Match
    protected: int __cdecl CWnd::OnHelpInfo(struct tagHELPINFO * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

int __thiscall CWnd::OnHelpInfo(CWnd *this,tagHELPINFO *param_1)

{
  SHORT SVar1;
  ulong uVar2;
  longlong *plVar3;
  longlong lVar4;
  
  uVar2 = GetStyle(this);
  lVar4 = 0;
  if ((uVar2 >> 0x1e & 1) == 0) {
    plVar3 = (longlong *)FUN_180020e40();
    if (plVar3 != (longlong *)0x0) {
      lVar4 = (**(code **)(*plVar3 + 0xe8))(plVar3);
    }
    if ((((lVar4 != 0) && (SVar1 = GetKeyState(0x10), -1 < SVar1)) &&
        (SVar1 = GetKeyState(0x11), -1 < SVar1)) && (SVar1 = GetKeyState(0x12), -1 < SVar1)) {
      SendMessageW(*(HWND *)(lVar4 + 0x40),0x111,0xe146,0);
      return 1;
    }
  }
  lVar4 = FUN_1800294c4((longlong *)this);
  return (uint)(lVar4 != 0);
}


==================================================================

### EXPORT FUNC 180029c78 (62 bytes) name=OnGetObject

/* Library Function - Single Match
    protected: __int64 __cdecl CWnd::OnGetObject(unsigned __int64,__int64) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

__int64 __thiscall CWnd::OnGetObject(CWnd *this,__uint64 param_1,__int64 param_2)

{
  int iVar1;
  __int64 _Var2;
  
  if ((this[0x48] == (CWnd)0x0) || (iVar1 = (**(code **)(*(longlong *)this + 0x1c8))(), iVar1 < 0))
  {
    _Var2 = FUN_1800294c4((longlong *)this);
  }
  else {
    _Var2 = 0;
  }
  return _Var2;
}


==================================================================

### EXPORT FUNC 180029cb8 (42 bytes) name=FUN_180029cb8

void FUN_180029cb8(longlong *param_1,undefined8 param_2,undefined8 param_3,longlong *param_4)

{
  int iVar1;
  
  if ((param_4 != (longlong *)0x0) && (iVar1 = FUN_180029b28(param_4,0), iVar1 != 0)) {
    return;
  }
  FUN_1800294c4(param_1);
  return;
}


==================================================================

### EXPORT FUNC 180029ce4 (69 bytes) name=OnEnterIdle

/* Library Function - Single Match
    protected: void __cdecl CWnd::OnEnterIdle(unsigned int,class CWnd * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release, Visual Studio 2010 Release,
   Visual Studio 2012 Release */

void __thiscall CWnd::OnEnterIdle(CWnd *this,uint param_1,CWnd *param_2)

{
  BOOL BVar1;
  MSG local_38;
  
  while( true ) {
    BVar1 = PeekMessageW(&local_38,(HWND)0x0,0x121,0x121,1);
    if (BVar1 == 0) break;
    DispatchMessageW(&local_38);
  }
  FUN_1800294c4((longlong *)this);
  return;
}


==================================================================

### EXPORT FUNC 180029d2c (47 bytes) name=OnCtlColor

/* Library Function - Single Match
    protected: struct HBRUSH__ * __ptr64 __cdecl CWnd::OnCtlColor(class CDC * __ptr64,class CWnd *
   __ptr64,unsigned int) __ptr64
   
   Library: Visual Studio */

HBRUSH__ * __thiscall CWnd::OnCtlColor(CWnd *this,CDC *param_1,CWnd *param_2,uint param_3)

{
  int iVar1;
  HBRUSH__ *local_18 [2];
  
  iVar1 = FUN_180029b28((longlong *)param_2,local_18);
  if (iVar1 == 0) {
    local_18[0] = (HBRUSH__ *)FUN_1800294c4((longlong *)this);
  }
  return local_18[0];
}


==================================================================

### EXPORT FUNC 180029d5c (136 bytes) name=_AfxInitCommonControls

/* Library Function - Single Match
    long __cdecl _AfxInitCommonControls(struct tagINITCOMMONCONTROLSEX * __ptr64,long)
   
   Library: Visual Studio 2008 Release */

long __cdecl _AfxInitCommonControls(tagINITCOMMONCONTROLSEX *param_1,long param_2)

{
  int iVar1;
  longlong lVar2;
  longlong *plVar3;
  long lVar4;
  undefined8 local_res18 [2];
  
  lVar4 = 0;
  lVar2 = FUN_180022bb4();
  plVar3 = FUN_1800292bc(**(longlong **)(lVar2 + 200),local_res18);
  if (*plVar3 == 0) {
    if ((param_2 & 0x3fc0U) == param_2) {
      lVar2 = FUN_180022bb4();
      CComCtlWrapper::_InitCommonControls((CComCtlWrapper *)**(undefined8 **)(lVar2 + 200));
      lVar4 = 0x3fc0;
    }
  }
  else {
    lVar2 = FUN_180022bb4();
    iVar1 = CComCtlWrapper::_InitCommonControlsEx
                      ((CComCtlWrapper *)**(undefined8 **)(lVar2 + 200),param_1);
    if (iVar1 != 0) {
      lVar4 = param_2;
    }
  }
  return lVar4;
}


==================================================================

### EXPORT FUNC 180029de4 (38 bytes) name=FUN_180029de4

undefined8 * FUN_180029de4(void)

{
  undefined8 *puVar1;
  
  puVar1 = (undefined8 *)FUN_180022c84(0x18);
  if (puVar1 == (undefined8 *)0x0) {
    puVar1 = (undefined8 *)0x0;
  }
  else {
    *puVar1 = _AFX_HTMLHELP_STATE::vftable;
  }
  return puVar1;
}


==================================================================

### EXPORT FUNC 180029e0c (150 bytes) name=_AfxPostInitDialog

/* Library Function - Single Match
    void __cdecl _AfxPostInitDialog(class CWnd * __ptr64,struct tagRECT const & __ptr64,unsigned
   long)
   
   Library: Visual Studio 2008 Release */

void __cdecl _AfxPostInitDialog(CWnd *param_1,tagRECT *param_2,ulong param_3)

{
  ulong uVar1;
  int iVar2;
  HWND pHVar3;
  CWnd *this;
  tagRECT local_18;
  
  if (((((param_3 >> 0x1c & 1) == 0) && (uVar1 = CWnd::GetStyle(param_1), (uVar1 & 0x50000000) == 0)
       ) && (GetWindowRect(*(HWND *)(param_1 + 0x40),&local_18), param_2->left == local_18.left)) &&
     (param_2->top == local_18.top)) {
    pHVar3 = GetWindow(*(HWND *)(param_1 + 0x40),4);
    this = CWnd::FromHandle(pHVar3);
    if (((this == (CWnd *)0x0) || (iVar2 = CWnd::IsWindowEnabled(this), iVar2 == 0)) &&
       (iVar2 = (**(code **)(*(longlong *)param_1 + 0x238))(param_1), iVar2 != 0)) {
      FUN_180028ce8(param_1,0);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180029ea4 (340 bytes) name=FUN_180029ea4

undefined8
FUN_180029ea4(CWnd *param_1,undefined8 param_2,int param_3,undefined8 param_4,undefined8 param_5)

{
  ulong uVar1;
  void *pvVar2;
  undefined8 uVar3;
  ulong local_78 [2];
  void *local_70;
  undefined8 local_68;
  tagRECT local_60;
  undefined1 local_48 [48];
  
  local_68 = 0xfffffffffffffffe;
  pvVar2 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  local_70 = pvVar2;
  if (pvVar2 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  memcpy(local_48,(void *)((longlong)pvVar2 + 0x98),0x30);
  *(undefined8 *)((longlong)pvVar2 + 0x98) = param_2;
  *(int *)((longlong)pvVar2 + 0xa0) = param_3;
  *(undefined8 *)((longlong)pvVar2 + 0xa8) = param_4;
  *(undefined8 *)((longlong)pvVar2 + 0xb0) = param_5;
  if ((param_3 == 2) && (*(longlong *)(param_1 + 0x98) != 0)) {
    (**(code **)(**(longlong **)(param_1 + 0x98) + 0xc0))(*(longlong **)(param_1 + 0x98),0);
  }
  local_78[0] = 0;
  if (param_3 == 0x110) {
    _AfxPreInitDialog(param_1,&local_60,local_78);
  }
  uVar1 = local_78[0];
  uVar3 = (**(code **)(*(longlong *)param_1 + 0x210))(param_1,param_3,param_4,param_5);
  if (param_3 == 0x110) {
    _AfxPostInitDialog(param_1,&local_60,uVar1);
  }
  memcpy((void *)((longlong)pvVar2 + 0x98),local_48,0x30);
  return uVar3;
}


==================================================================

### EXPORT FUNC 18002a004 (75 bytes) name=Catch@18002a004

undefined * Catch_18002a004(undefined8 param_1,longlong param_2)

{
  CException *pCVar1;
  __int64 _Var2;
  
  pCVar1 = *(CException **)(param_2 + 0x48);
  _Var2 = AfxProcessWndProcException(pCVar1,(tagMSG *)(*(longlong *)(param_2 + 0x28) + 0x98));
  *(__int64 *)(param_2 + 0x20) = _Var2;
  if (pCVar1 != (CException *)0x0) {
    FUN_18001ec74((longlong *)pCVar1);
  }
  return &DAT_180029fbd;
}


==================================================================

### EXPORT FUNC 18002a050 (129 bytes) name=FUN_18002a050

LRESULT FUN_18002a050(HWND__ *param_1,UINT param_2,WPARAM param_3,LPARAM param_4)

{
  LRESULT LVar1;
  CWnd *pCVar2;
  
  if (param_2 == 0x360) {
    LVar1 = 1;
  }
  else {
    pCVar2 = CWnd::FromHandlePermanent(param_1);
    if ((pCVar2 == (CWnd *)0x0) || (*(HWND__ **)(pCVar2 + 0x40) != param_1)) {
      LVar1 = DefWindowProcW(param_1,param_2,param_3,param_4);
    }
    else {
      LVar1 = FUN_180029ea4(pCVar2,param_1,param_2,param_3,param_4);
    }
  }
  return LVar1;
}


==================================================================

### EXPORT FUNC 18002a0d4 (151 bytes) name=~CWnd

/* Library Function - Single Match
    public: virtual __cdecl CWnd::~CWnd(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CWnd::~CWnd(CWnd *this)

{
  longlong *plVar1;
  longlong lVar2;
  undefined8 in_R8;
  undefined8 in_R9;
  undefined8 uVar3;
  
  uVar3 = 0xfffffffffffffffe;
  *(undefined ***)this = vftable;
  if ((((*(longlong *)(this + 0x40) != 0) && (this != (CWnd *)&DAT_1800721e0)) &&
      (this != (CWnd *)&DAT_180072290)) &&
     ((this != (CWnd *)&DAT_180072340 && (this != (CWnd *)&DAT_1800723f0)))) {
    FUN_180029920((longlong)this);
  }
  plVar1 = *(longlong **)(this + 0x98);
  if (plVar1 != (longlong *)0x0) {
    (**(code **)(*plVar1 + 8))(plVar1,1,in_R8,in_R9,uVar3);
  }
  lVar2 = *(longlong *)(this + 0xa0);
  if ((lVar2 != 0) && (*(CWnd **)(lVar2 + 0x50) == this)) {
    *(undefined8 *)(lVar2 + 0x50) = 0;
  }
  CCmdTarget::~CCmdTarget((CCmdTarget *)this);
  return;
}


==================================================================

### EXPORT FUNC 18002a174 (24 bytes) name=Unwind@18002a174

void Unwind_18002a174(undefined8 param_1,longlong param_2)

{
  CCmdTarget::~CCmdTarget(*(CCmdTarget **)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 18002a18c (51 bytes) name=FUN_18002a18c

ulonglong FUN_18002a18c(longlong *param_1,undefined8 param_2,longlong *param_3)

{
  int iVar1;
  ulonglong uVar2;
  uint local_res18 [4];
  
  if ((param_3 != (longlong *)0x0) && (iVar1 = FUN_180029b28(param_3,local_res18), iVar1 != 0)) {
    return (ulonglong)local_res18[0];
  }
  uVar2 = FUN_1800294c4(param_1);
  return uVar2;
}


==================================================================

### EXPORT FUNC 18002a1c0 (183 bytes) name=FUN_18002a1c0

void FUN_18002a1c0(longlong *param_1,undefined8 param_2,int *param_3)

{
  int iVar1;
  void *pvVar2;
  HMENU pHVar3;
  longlong lVar4;
  CMenu *pCVar5;
  CWnd *pCVar6;
  
  if (*param_3 == 1) {
    pvVar2 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
    if (pvVar2 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    if (*(HWND *)((longlong)pvVar2 + 200) == (HWND)param_1[8]) {
      pHVar3 = *(HMENU *)((longlong)pvVar2 + 0xd0);
    }
    else {
      pHVar3 = GetMenu((HWND)param_1[8]);
    }
    lVar4 = FromHandle(pHVar3);
    if (lVar4 == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    pCVar5 = FUN_1800278a8(lVar4,param_3[2]);
    if (pCVar5 != (CMenu *)0x0) {
      (**(code **)(*(longlong *)pCVar5 + 0x20))(pCVar5,param_3);
    }
  }
  else {
    pCVar6 = FUN_180029a0c((HWND)param_1[8],param_3[1],1);
    if ((pCVar6 != (CWnd *)0x0) && (iVar1 = FUN_180029b28((longlong *)pCVar6,0), iVar1 != 0)) {
      return;
    }
  }
  FUN_1800294c4(param_1);
  return;
}


==================================================================

### EXPORT FUNC 18002a27c (77 bytes) name=GetParentFrame

/* Library Function - Single Match
    public: class CFrameWnd * __ptr64 __cdecl CWnd::GetParentFrame(void)const __ptr64
   
   Library: Visual Studio 2005 Release */

CFrameWnd * __thiscall CWnd::GetParentFrame(CWnd *this)

{
  int iVar1;
  HWND pHVar2;
  CWnd *pCVar3;
  
  if ((this != (CWnd *)0x0) && (pHVar2 = *(HWND *)(this + 0x40), pHVar2 != (HWND)0x0)) {
    while( true ) {
      pHVar2 = GetParent(pHVar2);
      pCVar3 = FromHandle(pHVar2);
      if (pCVar3 == (CWnd *)0x0) break;
      iVar1 = (**(code **)(*(longlong *)pCVar3 + 0x240))(pCVar3);
      if (iVar1 != 0) {
        return (CFrameWnd *)pCVar3;
      }
      pHVar2 = *(HWND *)(pCVar3 + 0x40);
    }
  }
  return (CFrameWnd *)0x0;
}


==================================================================

### EXPORT FUNC 18002a2cc (84 bytes) name=GetTopLevelFrame

/* Library Function - Single Match
    public: class CFrameWnd * __ptr64 __cdecl CWnd::GetTopLevelFrame(void)const __ptr64
   
   Library: Visual Studio 2005 Release */

CFrameWnd * __thiscall CWnd::GetTopLevelFrame(CWnd *this)

{
  CWnd *this_00;
  int iVar1;
  CFrameWnd *pCVar2;
  
  if ((this == (CWnd *)0x0) || (*(longlong *)(this + 0x40) == 0)) {
    this = (CWnd *)0x0;
  }
  else {
    iVar1 = (**(code **)(*(longlong *)this + 0x240))();
    pCVar2 = (CFrameWnd *)this;
    if (iVar1 == 0) {
      this = (CWnd *)GetParentFrame(this);
      pCVar2 = (CFrameWnd *)this;
    }
    while (this_00 = (CWnd *)pCVar2, this_00 != (CWnd *)0x0) {
      pCVar2 = GetParentFrame(this_00);
      this = this_00;
    }
  }
  return (CFrameWnd *)this;
}


==================================================================

### EXPORT FUNC 18002a320 (199 bytes) name=FUN_18002a320

void FUN_18002a320(HWND param_1,UINT param_2,WPARAM param_3,LPARAM param_4,int param_5,int param_6)

{
  HWND__ *hWnd;
  CWnd *pCVar1;
  HWND pHVar2;
  
  for (hWnd = GetTopWindow(param_1); hWnd != (HWND__ *)0x0; hWnd = GetWindow(hWnd,2)) {
    if (param_6 == 0) {
      SendMessageW(hWnd,param_2,param_3,param_4);
    }
    else {
      pCVar1 = CWnd::FromHandlePermanent(hWnd);
      if (pCVar1 != (CWnd *)0x0) {
        FUN_180029ea4(pCVar1,*(undefined8 *)(pCVar1 + 0x40),param_2,param_3,param_4);
      }
    }
    if ((param_5 != 0) && (pHVar2 = GetTopWindow(hWnd), pHVar2 != (HWND)0x0)) {
      FUN_18002a320(hWnd,param_2,param_3,param_4,param_5,param_6);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18002a3e8 (241 bytes) name=ReflectLastMsg

/* Library Function - Single Match
    protected: static int __cdecl CWnd::ReflectLastMsg(struct HWND__ * __ptr64,__int64 * __ptr64)
   
   Library: Visual Studio 2008 Release */

int __cdecl CWnd::ReflectLastMsg(HWND__ *param_1,__int64 *param_2)

{
  int iVar1;
  longlong lVar2;
  longlong *plVar3;
  HWND pHVar4;
  CWnd local_b8 [64];
  undefined8 local_78;
  longlong local_18;
  
  lVar2 = FUN_180022c04();
  if (*(longlong *)(lVar2 + 0x28) == 0) {
    iVar1 = 0;
  }
  else {
    lVar2 = *(longlong *)(lVar2 + 0x28) + 0x30;
    plVar3 = (longlong *)FUN_180030118(lVar2,(ulonglong)param_1);
    if (plVar3 == (longlong *)0x0) {
      pHVar4 = GetParent(param_1);
      lVar2 = FUN_180030118(lVar2,(ulonglong)pHVar4);
      if (((lVar2 != 0) && (*(longlong *)(lVar2 + 0x98) != 0)) &&
         (local_18 = FUN_180030118(*(longlong *)(lVar2 + 0x98) + 0x48,(ulonglong)param_1),
         local_18 != 0)) {
        CWnd(local_b8,param_1);
        iVar1 = FUN_180029b28((longlong *)local_b8,param_2);
        local_78 = 0;
        ~CWnd(local_b8);
        return (uint)(iVar1 != 0);
      }
      iVar1 = 0;
    }
    else {
      iVar1 = FUN_180029b28(plVar3,param_2);
    }
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 18002a4e8 (24 bytes) name=Unwind@18002a4e8

void Unwind_18002a4e8(undefined8 param_1,longlong param_2)

{
  CWnd::~CWnd((CWnd *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 18002a500 (49 bytes) name=OnParentNotify

/* Library Function - Single Match
    protected: void __cdecl CWnd::OnParentNotify(unsigned int,__int64) __ptr64
   
   Library: Visual Studio 2005 Release */

void __thiscall CWnd::OnParentNotify(CWnd *this,uint param_1,__int64 param_2)

{
  int iVar1;
  
  if ((((short)param_1 == 1) || ((short)param_1 == 2)) &&
     (iVar1 = ReflectLastMsg((HWND__ *)param_2,(__int64 *)0x0), iVar1 != 0)) {
    return;
  }
  FUN_1800294c4((longlong *)this);
  return;
}


==================================================================

### EXPORT FUNC 18002a534 (50 bytes) name=OnDragList

/* Library Function - Single Match
    protected: __int64 __cdecl CWnd::OnDragList(unsigned __int64,__int64) __ptr64
   
   Library: Visual Studio 2008 Release */

__int64 __thiscall CWnd::OnDragList(CWnd *this,__uint64 param_1,__int64 param_2)

{
  int iVar1;
  int local_res18 [4];
  
  iVar1 = ReflectLastMsg(*(HWND__ **)(param_2 + 8),(__int64 *)local_res18);
  if (iVar1 == 0) {
    local_res18[0] = FUN_1800294c4((longlong *)this);
  }
  return (longlong)local_res18[0];
}


==================================================================

### EXPORT FUNC 18002a568 (99 bytes) name=SubclassWindow

/* Library Function - Single Match
    public: int __cdecl CWnd::SubclassWindow(struct HWND__ * __ptr64) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

int __thiscall CWnd::SubclassWindow(CWnd *this,HWND__ *param_1)

{
  bool bVar1;
  int iVar2;
  undefined7 extraout_var;
  longlong *plVar3;
  LONG_PTR LVar4;
  
  bVar1 = FUN_180029650(this,(ulonglong)param_1);
  iVar2 = 0;
  if ((int)CONCAT71(extraout_var,bVar1) != 0) {
    (**(code **)(*(longlong *)this + 0xa0))(this);
    plVar3 = (longlong *)(**(code **)(*(longlong *)this + 0x1e0))(this);
    LVar4 = SetWindowLongPtrW(param_1,-4,0x18002a050);
    if (*plVar3 == 0) {
      *plVar3 = LVar4;
    }
    iVar2 = 1;
  }
  return iVar2;
}


==================================================================

### EXPORT FUNC 18002a5cc (45 bytes) name=get_accParent

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accParent(struct IDispatch * __ptr64 * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accParent
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,IDispatch **param_1)

{
  long lVar1;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_1 == (IDispatch **)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x38))();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a5fc (45 bytes) name=get_accChildCount

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accChildCount(long * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accChildCount
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,long *param_1)

{
  long lVar1;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_1 == (long *)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x40))();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a62c (77 bytes) name=get_accChild

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accChild(struct tagVARIANT,struct IDispatch * __ptr64 * __ptr64)
   __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accChild
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,tagVARIANT *param_1,IDispatch **param_2
          )

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_2 == (IDispatch **)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    local_28 = *(undefined8 *)&param_1->n1;
    local_20 = (param_1->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x48))
                      (*(longlong **)(this + 0x10),&local_28);
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a67c (77 bytes) name=get_accName

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accName(struct tagVARIANT,wchar_t * __ptr64 * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accName
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,tagVARIANT *param_1,wchar_t **param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_2 == (wchar_t **)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    local_28 = *(undefined8 *)&param_1->n1;
    local_20 = (param_1->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x50))
                      (*(longlong **)(this + 0x10),&local_28);
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a6cc (77 bytes) name=get_accValue

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accValue(struct tagVARIANT,wchar_t * __ptr64 * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accValue
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,tagVARIANT *param_1,wchar_t **param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_2 == (wchar_t **)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    local_28 = *(undefined8 *)&param_1->n1;
    local_20 = (param_1->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x58))
                      (*(longlong **)(this + 0x10),&local_28);
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a71c (77 bytes) name=get_accDescription

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accDescription(struct tagVARIANT,wchar_t * __ptr64 * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accDescription
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,tagVARIANT *param_1,wchar_t **param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_2 == (wchar_t **)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    local_28 = *(undefined8 *)&param_1->n1;
    local_20 = (param_1->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x60))
                      (*(longlong **)(this + 0x10),&local_28);
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a76c (77 bytes) name=get_accRole

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accRole(struct tagVARIANT,struct tagVARIANT * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accRole
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,tagVARIANT *param_1,tagVARIANT *param_2
          )

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_2 == (tagVARIANT *)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    local_28 = *(undefined8 *)&param_1->n1;
    local_20 = (param_1->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x68))
                      (*(longlong **)(this + 0x10),&local_28);
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a7bc (77 bytes) name=get_accState

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accState(struct tagVARIANT,struct tagVARIANT * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accState
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,tagVARIANT *param_1,tagVARIANT *param_2
          )

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_2 == (tagVARIANT *)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    local_28 = *(undefined8 *)&param_1->n1;
    local_20 = (param_1->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x70))
                      (*(longlong **)(this + 0x10),&local_28);
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a80c (77 bytes) name=get_accHelp

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accHelp(struct tagVARIANT,wchar_t * __ptr64 * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accHelp
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,tagVARIANT *param_1,wchar_t **param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_2 == (wchar_t **)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    local_28 = *(undefined8 *)&param_1->n1;
    local_20 = (param_1->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x78))
                      (*(longlong **)(this + 0x10),&local_28);
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a85c (85 bytes) name=get_accHelpTopic

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accHelpTopic(wchar_t * __ptr64 * __ptr64,struct tagVARIANT,long *
   __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accHelpTopic
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,wchar_t **param_1,tagVARIANT *param_2,
          long *param_3)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if ((param_1 == (wchar_t **)0x0) || (param_3 == (long *)0x0)) {
    lVar1 = -0x7fffbffd;
  }
  else {
    local_28 = *(undefined8 *)&param_2->n1;
    local_20 = (param_2->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_2->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x80))
                      (*(longlong **)(this + 0x10),param_1,&local_28);
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a8b4 (80 bytes) name=get_accKeyboardShortcut

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accKeyboardShortcut(struct tagVARIANT,wchar_t * __ptr64 * __ptr64)
   __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accKeyboardShortcut
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,tagVARIANT *param_1,wchar_t **param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_2 == (wchar_t **)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    local_28 = *(undefined8 *)&param_1->n1;
    local_20 = (param_1->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x88))
                      (*(longlong **)(this + 0x10),&local_28);
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a904 (48 bytes) name=get_accFocus

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accFocus(struct tagVARIANT * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accFocus
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,tagVARIANT *param_1)

{
  long lVar1;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_1 == (tagVARIANT *)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x90))();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a934 (48 bytes) name=get_accSelection

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accSelection(struct tagVARIANT * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accSelection
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,tagVARIANT *param_1)

{
  long lVar1;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_1 == (tagVARIANT *)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x98))();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a964 (80 bytes) name=get_accDefaultAction

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::get_accDefaultAction(struct tagVARIANT,wchar_t * __ptr64 * __ptr64)
   __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::get_accDefaultAction
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,tagVARIANT *param_1,wchar_t **param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_2 == (wchar_t **)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    local_28 = *(undefined8 *)&param_1->n1;
    local_20 = (param_1->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0xa0))
                      (*(longlong **)(this + 0x10),&local_28);
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a9b4 (68 bytes) name=accSelect

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::accSelect(long,struct tagVARIANT) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::accSelect
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,long param_1,tagVARIANT *param_2)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else {
    local_28 = *(undefined8 *)&param_2->n1;
    local_20 = (param_2->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_2->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0xa8))
                      (*(longlong **)(this + 0x10),param_1,&local_28);
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002a9f8 (133 bytes) name=accLocation

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::accLocation(long * __ptr64,long * __ptr64,long * __ptr64,long *
   __ptr64,struct tagVARIANT) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::accLocation
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,long *param_1,long *param_2,
          long *param_3,long *param_4,tagVARIANT *param_5)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if ((((param_1 == (long *)0x0) || (param_2 == (long *)0x0)) || (param_3 == (long *)0x0)) ||
          (param_4 == (long *)0x0)) {
    lVar1 = -0x7fffbffd;
  }
  else {
    local_28 = *(undefined8 *)&param_5->n1;
    local_20 = (param_5->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_5->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0xb0))
                      (*(longlong **)(this + 0x10),param_1,param_2,param_3,param_4,&local_28);
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002aa80 (80 bytes) name=accNavigate

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::accNavigate(long,struct tagVARIANT,struct tagVARIANT * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::accNavigate
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,long param_1,tagVARIANT *param_2,
          tagVARIANT *param_3)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_3 == (tagVARIANT *)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    local_28 = *(undefined8 *)&param_2->n1;
    local_20 = (param_2->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_2->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0xb8))
                      (*(longlong **)(this + 0x10),param_1,&local_28);
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002aad0 (48 bytes) name=accHitTest

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::accHitTest(long,long,struct tagVARIANT * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::accHitTest
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,long param_1,long param_2,
          tagVARIANT *param_3)

{
  long lVar1;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else if (param_3 == (tagVARIANT *)0x0) {
    lVar1 = -0x7fffbffd;
  }
  else {
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0xc0))();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002ab00 (68 bytes) name=accDoDefaultAction

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::accDoDefaultAction(struct tagVARIANT) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::accDoDefaultAction
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,tagVARIANT *param_1)

{
  long lVar1;
  undefined8 local_28;
  _union_1719 local_20;
  undefined8 local_18;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else {
    local_28 = *(undefined8 *)&param_1->n1;
    local_20 = (param_1->n1).decVal.u2;
    local_18 = *(undefined8 *)((longlong)&param_1->n1 + 0x10);
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 200))(*(longlong **)(this + 0x10),&local_28)
    ;
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002ab44 (20 bytes) name=FUN_18002ab44

int FUN_18002ab44(longlong param_1)

{
  return (-(uint)(*(longlong *)(param_1 + 0x10) != 0) & 0xffff3ef9) + 0x80010108;
}


==================================================================

### EXPORT FUNC 18002ab58 (11 bytes) name=FUN_18002ab58

undefined8 FUN_18002ab58(longlong param_1,undefined8 param_2,undefined8 param_3)

{
  *(undefined8 *)(param_1 + 8) = param_2;
  *(undefined8 *)(param_1 + 0x10) = param_3;
  return 0;
}


==================================================================

### EXPORT FUNC 18002ab64 (99 bytes) name=Invoke

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::Invoke(long,struct _GUID const & __ptr64,unsigned long,unsigned
   short,struct tagDISPPARAMS * __ptr64,struct tagVARIANT * __ptr64,struct tagEXCEPINFO *
   __ptr64,unsigned int * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release, Visual Studio 2010 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::Invoke
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,long param_1,_GUID *param_2,
          ulong param_3,ushort param_4,tagDISPPARAMS *param_5,tagVARIANT *param_6,
          tagEXCEPINFO *param_7,uint *param_8)

{
  long lVar1;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else {
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x30))();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002abc8 (52 bytes) name=GetIDsOfNames

/* Library Function - Single Match
    public: virtual long __cdecl ATL::IAccessibleProxyImpl<class
   ATL::CAccessibleProxy>::GetIDsOfNames(struct _GUID const & __ptr64,wchar_t * __ptr64 *
   __ptr64,unsigned int,unsigned long,long * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release, Visual Studio 2010 Release */

long __thiscall
ATL::IAccessibleProxyImpl<ATL::CAccessibleProxy>::GetIDsOfNames
          (IAccessibleProxyImpl<ATL::CAccessibleProxy> *this,_GUID *param_1,wchar_t **param_2,
          uint param_3,ulong param_4,long *param_5)

{
  long lVar1;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar1 = -0x7ffefef8;
  }
  else {
    lVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x28))();
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 18002abfc (33 bytes) name=FUN_18002abfc

undefined8 FUN_18002abfc(longlong param_1)

{
  undefined8 uVar1;
  
  if (*(longlong *)(param_1 + 0x10) == 0) {
    uVar1 = 0x80010108;
  }
  else {
    uVar1 = (**(code **)(**(longlong **)(param_1 + 0x10) + 0x18))();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 18002ac20 (33 bytes) name=FUN_18002ac20

undefined8 FUN_18002ac20(longlong param_1)

{
  undefined8 uVar1;
  
  if (*(longlong *)(param_1 + 0x10) == 0) {
    uVar1 = 0x80010108;
  }
  else {
    uVar1 = (**(code **)(**(longlong **)(param_1 + 0x10) + 0x20))();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 18002ac44 (47 bytes) name=FUN_18002ac44

CWnd * FUN_18002ac44(CWnd *param_1,uint param_2)

{
  CWnd::~CWnd(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18002ac74 (85 bytes) name=OnDrawItem

/* Library Function - Single Match
    protected: void __cdecl CWnd::OnDrawItem(int,struct tagDRAWITEMSTRUCT * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CWnd::OnDrawItem(CWnd *this,int param_1,tagDRAWITEMSTRUCT *param_2)

{
  int iVar1;
  CMenu *pCVar2;
  
  if ((*(int *)param_2 == 1) &&
     (pCVar2 = CMenu::FromHandlePermanent(*(HMENU__ **)(param_2 + 0x18)), pCVar2 != (CMenu *)0x0)) {
    (**(code **)(*(longlong *)pCVar2 + 0x18))(pCVar2,param_2);
    return;
  }
  iVar1 = ReflectLastMsg(*(HWND__ **)(param_2 + 0x18),(__int64 *)0x0);
  if (iVar1 == 0) {
    FUN_1800294c4((longlong *)this);
  }
  return;
}


==================================================================

### EXPORT FUNC 18002accc (47 bytes) name=OnCompareItem

/* Library Function - Single Match
    protected: int __cdecl CWnd::OnCompareItem(int,struct tagCOMPAREITEMSTRUCT * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

int __thiscall CWnd::OnCompareItem(CWnd *this,int param_1,tagCOMPAREITEMSTRUCT *param_2)

{
  int iVar1;
  int local_res18 [4];
  
  iVar1 = ReflectLastMsg(*(HWND__ **)(param_2 + 8),(__int64 *)local_res18);
  if (iVar1 == 0) {
    local_res18[0] = FUN_1800294c4((longlong *)this);
  }
  return local_res18[0];
}


==================================================================

### EXPORT FUNC 18002acfc (38 bytes) name=OnDeleteItem

/* Library Function - Single Match
    protected: void __cdecl CWnd::OnDeleteItem(int,struct tagDELETEITEMSTRUCT * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CWnd::OnDeleteItem(CWnd *this,int param_1,tagDELETEITEMSTRUCT *param_2)

{
  int iVar1;
  
  iVar1 = ReflectLastMsg(*(HWND__ **)(param_2 + 0x10),(__int64 *)0x0);
  if (iVar1 == 0) {
    FUN_1800294c4((longlong *)this);
  }
  return;
}


==================================================================

### EXPORT FUNC 18002ad24 (205 bytes) name=FUN_18002ad24

undefined8
FUN_18002ad24(undefined8 param_1,undefined8 param_2,undefined4 param_3,undefined8 param_4)

{
  CNoTrackObject *pCVar1;
  HMODULE hModule;
  FARPROC pFVar2;
  undefined8 uVar3;
  
  FUN_1800237a0(0xc);
  pCVar1 = CProcessLocalObject::GetData((CProcessLocalObject *)&DAT_1800724a0,FUN_180029de4);
  if (pCVar1 == (CNoTrackObject *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (*(longlong *)(pCVar1 + 0x10) == 0) {
    hModule = FID_conflict_AfxCtxLoadLibraryA("hhctrl.ocx");
    *(HMODULE *)(pCVar1 + 8) = hModule;
    if (hModule != (HMODULE)0x0) {
      pFVar2 = GetProcAddress(hModule,"HtmlHelpW");
      *(FARPROC *)(pCVar1 + 0x10) = pFVar2;
      if (pFVar2 != (FARPROC)0x0) goto LAB_18002adbe;
      FreeLibrary(*(HMODULE *)(pCVar1 + 8));
      *(undefined8 *)(pCVar1 + 8) = 0;
    }
    uVar3 = 0;
  }
  else {
LAB_18002adbe:
    FUN_180023834(0xc);
    uVar3 = (**(code **)(pCVar1 + 0x10))(param_1,param_2,param_3,param_4);
  }
  return uVar3;
}


==================================================================

### EXPORT FUNC 18002adf4 (228 bytes) name=FUN_18002adf4

undefined8 FUN_18002adf4(longlong *param_1,ulonglong param_2,HWND__ *param_3)

{
  int iVar1;
  void *pvVar2;
  undefined8 uVar3;
  int iVar4;
  ulonglong uVar5;
  uint uVar6;
  CTestCmdUI local_58 [8];
  int local_50;
  int local_18;
  
  uVar5 = param_2 & 0xffff;
  uVar6 = (uint)(param_2 >> 0x10) & 0xffff;
  iVar4 = (int)uVar5;
  if (param_3 == (HWND__ *)0x0) {
    if (iVar4 == 0) {
      return 0;
    }
    CTestCmdUI::CTestCmdUI(local_58);
    local_50 = iVar4;
    (**(code **)(*param_1 + 0x18))(param_1,uVar5,0xffffffff,local_58,0);
    if (local_18 != 0) {
      uVar6 = 0;
LAB_18002aea9:
      uVar3 = (**(code **)(*param_1 + 0x18))(param_1,uVar5,uVar6,0,0);
      return uVar3;
    }
  }
  else {
    pvVar2 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
    if (pvVar2 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    if ((*(longlong *)((longlong)pvVar2 + 0x198) != param_1[8]) &&
       (iVar1 = CWnd::ReflectLastMsg(param_3,(__int64 *)0x0), iVar1 == 0)) {
      if (iVar4 == 0) {
        return 0;
      }
      goto LAB_18002aea9;
    }
  }
  return 1;
}


==================================================================

### EXPORT FUNC 18002aedc (189 bytes) name=FUN_18002aedc

undefined8 FUN_18002aedc(longlong *param_1,undefined8 param_2,undefined8 *param_3,__int64 *param_4)

{
  uint uVar1;
  HWND__ *hWnd;
  int iVar2;
  int iVar3;
  void *pvVar4;
  undefined8 uVar5;
  __int64 *local_28;
  undefined8 *local_20;
  
  hWnd = (HWND__ *)*param_3;
  iVar2 = GetDlgCtrlID(hWnd);
  uVar1 = *(uint *)(param_3 + 2);
  pvVar4 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar4 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if ((*(longlong *)((longlong)pvVar4 + 0x198) != param_1[8]) &&
     (iVar3 = CWnd::ReflectLastMsg(hWnd,param_4), iVar3 == 0)) {
    local_28 = param_4;
    local_20 = param_3;
    uVar5 = (**(code **)(*param_1 + 0x18))
                      (param_1,(short)iVar2,uVar1 & 0xffff | 0x4e0000,&local_28,0);
    return uVar5;
  }
  return 1;
}


==================================================================

### EXPORT FUNC 18002af9c (119 bytes) name=AfxGetParentOwner

/* Library Function - Single Match
    struct HWND__ * __ptr64 __cdecl AfxGetParentOwner(struct HWND__ * __ptr64)
   
   Library: Visual Studio 2008 Release */

HWND__ * __cdecl AfxGetParentOwner(HWND__ *param_1)

{
  uint uVar1;
  CWnd *pCVar2;
  HWND__ *pHVar3;
  HWND__ *pHVar4;
  
  pCVar2 = CWnd::FromHandlePermanent(param_1);
  pHVar4 = (HWND__ *)0x0;
  if (pCVar2 == (CWnd *)0x0) {
    uVar1 = GetWindowLongW(param_1,-0x10);
    if ((uVar1 >> 0x1e & 1) == 0) {
      pHVar4 = GetWindow(param_1,4);
    }
    else {
      pHVar4 = GetParent(param_1);
    }
  }
  else {
    pHVar3 = *(HWND__ **)(pCVar2 + 0x70);
    if (pHVar3 == (HWND__ *)0x0) {
      pHVar3 = GetParent(*(HWND *)(pCVar2 + 0x40));
    }
    pCVar2 = CWnd::FromHandle(pHVar3);
    if (pCVar2 != (CWnd *)0x0) {
      pHVar4 = *(HWND__ **)(pCVar2 + 0x40);
    }
  }
  return pHVar4;
}


==================================================================

### EXPORT FUNC 18002b014 (59 bytes) name=GetTopLevelParent

/* Library Function - Single Match
    public: class CWnd * __ptr64 __cdecl CWnd::GetTopLevelParent(void)const __ptr64
   
   Library: Visual Studio 2008 Release */

CWnd * __thiscall CWnd::GetTopLevelParent(CWnd *this)

{
  HWND__ *pHVar1;
  CWnd *pCVar2;
  HWND__ *pHVar3;
  
  if ((this == (CWnd *)0x0) ||
     (pHVar1 = *(HWND__ **)(this + 0x40), *(HWND__ **)(this + 0x40) == (HWND__ *)0x0)) {
    pCVar2 = (CWnd *)0x0;
  }
  else {
    do {
      pHVar3 = pHVar1;
      pHVar1 = AfxGetParentOwner(pHVar3);
    } while (pHVar1 != (HWND__ *)0x0);
    pCVar2 = FromHandle(pHVar3);
  }
  return pCVar2;
}


==================================================================

### EXPORT FUNC 18002b050 (99 bytes) name=OnSysColorChange

/* Library Function - Single Match
    protected: void __cdecl CWnd::OnSysColorChange(void) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release, Visual Studio 2010 Release,
   Visual Studio 2012 Release */

void __thiscall CWnd::OnSysColorChange(CWnd *this)

{
  ulong uVar1;
  longlong lVar2;
  
  lVar2 = FUN_180022bb4();
  if ((*(longlong *)(lVar2 + 8) != 0) && (*(CWnd **)(*(longlong *)(lVar2 + 8) + 0x40) == this)) {
    AUX_DATA::UpdateSysColors((AUX_DATA *)&DAT_1800724c0);
  }
  uVar1 = GetStyle(this);
  if ((uVar1 >> 0x1e & 1) == 0) {
    FUN_18002a320(*(HWND *)(this + 0x40),0x15,0,0,1,1);
  }
  FUN_1800294c4((longlong *)this);
  return;
}


==================================================================

### EXPORT FUNC 18002b0b4 (107 bytes) name=OnDevModeChange

/* Library Function - Single Match
    protected: void __cdecl CWnd::OnDevModeChange(wchar_t * __ptr64) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

void __thiscall CWnd::OnDevModeChange(CWnd *this,wchar_t *param_1)

{
  CWinApp *this_00;
  ulong uVar1;
  longlong lVar2;
  
  lVar2 = FUN_180022bb4();
  this_00 = *(CWinApp **)(lVar2 + 8);
  if ((this_00 != (CWinApp *)0x0) && (*(CWnd **)(this_00 + 0x40) == this)) {
    CWinApp::DevModeChange(this_00,param_1);
  }
  uVar1 = GetStyle(this);
  if ((uVar1 >> 0x1e & 1) == 0) {
    lVar2 = FUN_18002945c();
    FUN_18002a320(*(HWND *)(this + 0x40),*(UINT *)(lVar2 + 8),*(WPARAM *)(lVar2 + 0x10),
                  *(LPARAM *)(lVar2 + 0x18),1,1);
  }
  return;
}


==================================================================

### EXPORT FUNC 18002b120 (115 bytes) name=OnDisplayChange

/* Library Function - Single Match
    protected: __int64 __cdecl CWnd::OnDisplayChange(unsigned __int64,__int64) __ptr64
   
   Library: Visual Studio 2008 Release */

__int64 __thiscall CWnd::OnDisplayChange(CWnd *this,__uint64 param_1,__int64 param_2)

{
  ulong uVar1;
  longlong *plVar2;
  CWnd *pCVar3;
  longlong lVar4;
  __int64 _Var5;
  
  plVar2 = (longlong *)FUN_180020e40();
  pCVar3 = (CWnd *)0x0;
  if (plVar2 != (longlong *)0x0) {
    pCVar3 = (CWnd *)(**(code **)(*plVar2 + 0xe8))();
  }
  if (pCVar3 == this) {
    FUN_18002fdbc(0x1800724c0);
  }
  uVar1 = GetStyle(this);
  if ((uVar1 >> 0x1e & 1) == 0) {
    lVar4 = FUN_18002945c();
    FUN_18002a320(*(HWND *)(this + 0x40),*(UINT *)(lVar4 + 8),*(WPARAM *)(lVar4 + 0x10),
                  *(LPARAM *)(lVar4 + 0x18),1,1);
  }
  _Var5 = FUN_1800294c4((longlong *)this);
  return _Var5;
}


==================================================================

### EXPORT FUNC 18002b194 (6 bytes) name=FUN_18002b194

undefined8 FUN_18002b194(void)

{
  return 0x80004001;
}


==================================================================

### EXPORT FUNC 18002b19c (282 bytes) name=FUN_18002b19c

undefined8 FUN_18002b19c(longlong param_1,undefined8 *param_2,int *param_3,undefined8 *param_4)

{
  undefined8 *puVar1;
  longlong lVar2;
  int *piVar3;
  undefined8 uVar4;
  longlong *plVar5;
  code *pcVar6;
  
  if ((param_1 == 0) || (param_2 == (undefined8 *)0x0)) {
    uVar4 = 0x80070057;
  }
  else if (param_4 == (undefined8 *)0x0) {
    uVar4 = 0x80004003;
  }
  else {
    *param_4 = 0;
    if ((((*param_3 == 0) && (param_3[1] == 0)) && (param_3[2] == 0xc0)) &&
       (param_3[3] == 0x46000000)) {
      lVar2 = param_2[1];
LAB_18002b20f:
      plVar5 = (longlong *)(param_1 + lVar2);
      (**(code **)(*plVar5 + 8))(plVar5);
      *param_4 = plVar5;
      uVar4 = 0;
    }
    else {
      pcVar6 = (code *)param_2[2];
      while (pcVar6 != (code *)0x0) {
        piVar3 = (int *)*param_2;
        if ((piVar3 == (int *)0x0) ||
           (((*piVar3 == *param_3 && (piVar3[1] == param_3[1])) &&
            ((piVar3[2] == param_3[2] && (piVar3[3] == param_3[3])))))) {
          if (pcVar6 == (code *)0x1) {
            lVar2 = param_2[1];
            goto LAB_18002b20f;
          }
          uVar4 = (*pcVar6)(param_1,param_3,param_4,param_2[1]);
          if ((int)uVar4 == 0) {
            return uVar4;
          }
          if ((piVar3 != (int *)0x0) && ((int)uVar4 < 0)) {
            return uVar4;
          }
        }
        puVar1 = param_2 + 5;
        param_2 = param_2 + 3;
        pcVar6 = (code *)*puVar1;
      }
      uVar4 = 0x80004002;
    }
  }
  return uVar4;
}


==================================================================

### EXPORT FUNC 18002b2b8 (8 bytes) name=FUN_18002b2b8

undefined4 FUN_18002b2b8(longlong param_1)

{
  *(int *)(param_1 + 0x28) = *(int *)(param_1 + 0x28) + 1;
  return *(undefined4 *)(param_1 + 0x28);
}


==================================================================

### EXPORT FUNC 18002b2c0 (43 bytes) name=Release

/* Library Function - Single Match
    public: virtual unsigned long __cdecl CMFCComObject<class ATL::CAccessibleProxy>::Release(void)
   __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

ulong __thiscall
CMFCComObject<ATL::CAccessibleProxy>::Release(CMFCComObject<ATL::CAccessibleProxy> *this)

{
  CMFCComObject<ATL::CAccessibleProxy> *pCVar1;
  ulong uVar2;
  
  pCVar1 = this + 0x28;
  *(int *)pCVar1 = *(int *)pCVar1 + -1;
  uVar2 = *(ulong *)(this + 0x28);
  if ((*(int *)pCVar1 == 0) && (this != (CMFCComObject<ATL::CAccessibleProxy> *)0x0)) {
    (**(code **)(*(longlong *)this + 0xe0))(this,1);
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 18002b2ec (18 bytes) name=FUN_18002b2ec

void FUN_18002b2ec(longlong param_1,int *param_2,undefined8 *param_3)

{
  FUN_18002b19c(param_1,&PTR_DAT_180055f60,param_2,param_3);
  return;
}


==================================================================

### EXPORT FUNC 18002b300 (104 bytes) name=`scalar_deleting_destructor'

/* Library Function - Single Match
    public: virtual void * __ptr64 __cdecl CMFCComObject<class ATL::CAccessibleProxy>::`scalar
   deleting destructor'(unsigned int) __ptr64
   
   Library: Visual Studio 2008 Release */

void * __thiscall
CMFCComObject<ATL::CAccessibleProxy>::_scalar_deleting_destructor_
          (CMFCComObject<ATL::CAccessibleProxy> *this,uint param_1)

{
  longlong *plVar1;
  
  *(undefined4 *)(this + 0x28) = 0xc0000001;
  *(undefined ***)this = vftable;
  *(undefined ***)(this + 8) = vftable;
  *(undefined ***)(this + 0x20) = vftable;
  plVar1 = *(longlong **)(this + 0x18);
  if (plVar1 != (longlong *)0x0) {
    (**(code **)(*plVar1 + 0x18))(plVar1,0);
  }
  AfxOleUnlockApp();
  if ((param_1 & 1) != 0) {
    thunk_FUN_180034a70(this);
  }
  return this;
}


==================================================================

### EXPORT FUNC 18002b368 (9 bytes) name=FUN_18002b368

void FUN_18002b368(longlong param_1)

{
  CMFCComObject<ATL::CAccessibleProxy>::Release
            ((CMFCComObject<ATL::CAccessibleProxy> *)(param_1 + -8));
  return;
}


==================================================================

### EXPORT FUNC 18002b374 (9 bytes) name=FUN_18002b374

void FUN_18002b374(longlong param_1)

{
  FUN_18002b2b8(param_1 + -8);
  return;
}


==================================================================

### EXPORT FUNC 18002b380 (9 bytes) name=FUN_18002b380

void FUN_18002b380(longlong param_1,int *param_2,undefined8 *param_3)

{
  FUN_18002b2ec(param_1 + -0x20,param_2,param_3);
  return;
}


==================================================================

### EXPORT FUNC 18002b38c (9 bytes) name=FUN_18002b38c

void FUN_18002b38c(longlong param_1,int *param_2,undefined8 *param_3)

{
  FUN_18002b2ec(param_1 + -8,param_2,param_3);
  return;
}


==================================================================

### EXPORT FUNC 18002b398 (9 bytes) name=FUN_18002b398

void FUN_18002b398(longlong param_1)

{
  CMFCComObject<ATL::CAccessibleProxy>::Release
            ((CMFCComObject<ATL::CAccessibleProxy> *)(param_1 + -0x20));
  return;
}


==================================================================

### EXPORT FUNC 18002b3a4 (9 bytes) name=FUN_18002b3a4

void FUN_18002b3a4(longlong param_1)

{
  FUN_18002b2b8(param_1 + -0x20);
  return;
}


==================================================================

### EXPORT FUNC 18002b3b0 (162 bytes) name=FUN_18002b3b0

void FUN_18002b3b0(CWnd *param_1,WPARAM param_2,CWnd *param_3)

{
  ulong uVar1;
  BOOL BVar2;
  CWnd *pCVar3;
  CWnd *pCVar4;
  undefined8 local_18;
  undefined8 local_10;
  
  uVar1 = CWnd::GetStyle(param_1);
  if (((uVar1 >> 0x1e & 1) == 0) &&
     (pCVar3 = CWnd::GetTopLevelParent(param_1), pCVar3 != (CWnd *)0x0)) {
    if ((param_3 != (CWnd *)0x0) &&
       ((BVar2 = IsWindow(*(HWND *)(param_3 + 0x40)), BVar2 != 0 &&
        (pCVar4 = CWnd::GetTopLevelParent(param_3), pCVar3 == pCVar4)))) {
      return;
    }
    local_18 = *(undefined8 *)(param_1 + 0x40);
    if (param_3 == (CWnd *)0x0) {
      local_10 = 0;
    }
    else {
      local_10 = *(undefined8 *)(param_3 + 0x40);
    }
    SendMessageW(*(HWND *)(pCVar3 + 0x40),0x36e,param_2,(LPARAM)&local_18);
  }
  return;
}


==================================================================

### EXPORT FUNC 18002b454 (130 bytes) name=_AfxHandleSetCursor

/* Library Function - Single Match
    int __cdecl _AfxHandleSetCursor(class CWnd * __ptr64,unsigned int,unsigned int)
   
   Library: Visual Studio 2005 Release */

int __cdecl _AfxHandleSetCursor(CWnd *param_1,uint param_2,uint param_3)

{
  int iVar1;
  CWnd *pCVar2;
  HWND pHVar3;
  CWnd *pCVar4;
  
  if (((param_2 == 0xfffffffe) && (((param_3 == 0x201 || (param_3 == 0x207)) || (param_3 == 0x204)))
      ) && (pCVar2 = CWnd::GetTopLevelParent(param_1), pCVar2 != (CWnd *)0x0)) {
    pHVar3 = GetLastActivePopup(*(HWND *)(pCVar2 + 0x40));
    pCVar2 = CWnd::FromHandle(pHVar3);
    if (pCVar2 != (CWnd *)0x0) {
      pHVar3 = GetForegroundWindow();
      pCVar4 = CWnd::FromHandle(pHVar3);
      if ((pCVar2 != pCVar4) && (iVar1 = CWnd::IsWindowEnabled(pCVar2), iVar1 != 0)) {
        SetForegroundWindow(*(HWND *)(pCVar2 + 0x40));
        return 1;
      }
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 18002b4d8 (392 bytes) name=_AfxActivationWndProc

/* Library Function - Single Match
    __int64 __cdecl _AfxActivationWndProc(struct HWND__ * __ptr64,unsigned int,unsigned
   __int64,__int64)
   
   Library: Visual Studio 2008 Release */

__int64 __cdecl _AfxActivationWndProc(HWND__ *param_1,uint param_2,__uint64 param_3,__int64 param_4)

{
  ATOM nAtom;
  int iVar1;
  WNDPROC lpPrevWndFunc;
  CWnd *pCVar2;
  LRESULT LVar3;
  CWnd *pCVar4;
  bool bVar5;
  WNDPROC local_98;
  undefined8 local_90;
  tagRECT local_80 [4];
  
  local_90 = 0xfffffffffffffffe;
  lpPrevWndFunc = GetPropW(param_1,L"AfxOldWndProc423");
  bVar5 = true;
  local_98 = lpPrevWndFunc;
  if (param_2 == 6) {
    pCVar2 = CWnd::FromHandle((HWND__ *)param_4);
    pCVar4 = CWnd::FromHandle(param_1);
    FUN_18002b3b0(pCVar4,param_3,pCVar2);
    lpPrevWndFunc = local_98;
  }
  else {
    if (param_2 != 0x20) {
      if (param_2 == 0x82) {
        SetWindowLongPtrW(param_1,-4,(LONG_PTR)lpPrevWndFunc);
        RemovePropW(param_1,L"AfxOldWndProc423");
        nAtom = GlobalFindAtomW(L"AfxOldWndProc423");
        GlobalDeleteAtom(nAtom);
      }
      else if (param_2 == 0x110) {
        pCVar2 = CWnd::FromHandle(param_1);
        _AfxPreInitDialog(pCVar2,local_80,(ulong *)&local_98);
        LVar3 = CallWindowProcW(lpPrevWndFunc,param_1,0x110,param_3,param_4);
        _AfxPostInitDialog(pCVar2,local_80,(ulong)local_98);
        return LVar3;
      }
      goto LAB_18002b62e;
    }
    pCVar2 = CWnd::FromHandle(param_1);
    iVar1 = _AfxHandleSetCursor(pCVar2,(int)(short)param_4,
                                (uint)((ulonglong)param_4 >> 0x10) & 0xffff);
    bVar5 = iVar1 == 0;
  }
  if (!bVar5) {
    return 0;
  }
LAB_18002b62e:
  LVar3 = CallWindowProcW(lpPrevWndFunc,param_1,param_2,param_3,param_4);
  return LVar3;
}


==================================================================

### EXPORT FUNC 18002b668 (110 bytes) name=Catch@18002b668

undefined * Catch_18002b668(undefined8 param_1,longlong param_2)

{
  CException *pCVar1;
  __int64 _Var2;
  
  *(undefined8 *)(param_2 + 0x58) = *(undefined8 *)(param_2 + 0xd0);
  *(undefined4 *)(param_2 + 0x60) = *(undefined4 *)(param_2 + 0xd8);
  *(undefined8 *)(param_2 + 0x68) = *(undefined8 *)(param_2 + 0xe0);
  *(undefined8 *)(param_2 + 0x70) = *(undefined8 *)(param_2 + 0xe8);
  pCVar1 = *(CException **)(param_2 + 0x40);
  _Var2 = AfxProcessWndProcException(pCVar1,(tagMSG *)(param_2 + 0x58));
  *(__int64 *)(param_2 + 0x30) = _Var2;
  if (pCVar1 != (CException *)0x0) {
    FUN_18001ec74((longlong *)pCVar1);
  }
  return &DAT_18002b64a;
}


==================================================================

### EXPORT FUNC 18002b6d8 (646 bytes) name=FUN_18002b6d8

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

LRESULT FUN_18002b6d8(int param_1,HWND param_2,longlong *param_3)

{
  char cVar1;
  longlong lVar2;
  CWnd *pCVar3;
  int iVar4;
  void *pvVar5;
  LRESULT LVar6;
  longlong lVar7;
  ulonglong uVar8;
  ULONG_PTR UVar9;
  HANDLE hData;
  HANDLE pvVar10;
  undefined8 *puVar11;
  code *pcVar12;
  undefined1 auStack_2c8 [32];
  AFX_MAINTAIN_STATE2 local_2a8 [8];
  int local_2a0;
  undefined8 local_298;
  tagWNDCLASSEXW local_288;
  WCHAR local_238 [255];
  undefined2 local_3a;
  ulonglong local_38;
  
  local_298 = 0xfffffffffffffffe;
  local_38 = DAT_18006cea0 ^ (ulonglong)auStack_2c8;
  pvVar5 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar5 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (param_1 != 3) {
    LVar6 = CallNextHookEx(*(HHOOK *)((longlong)pvVar5 + 0x48),param_1,(WPARAM)param_2,
                           (LPARAM)param_3);
    return LVar6;
  }
  lVar2 = *param_3;
  pCVar3 = *(CWnd **)((longlong)pvVar5 + 0x28);
  lVar7 = FUN_180022bb4();
  cVar1 = *(char *)(lVar7 + 0x28);
  if (pCVar3 != (CWnd *)0x0) {
    AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_2a8,*(AFX_MODULE_STATE **)(pCVar3 + 0x38));
    FUN_180029650(pCVar3,(ulonglong)param_2);
    (**(code **)(*(longlong *)pCVar3 + 0xa0))(pCVar3);
    puVar11 = (undefined8 *)(**(code **)(*(longlong *)pCVar3 + 0x1e0))(pCVar3);
    pcVar12 = (code *)SetWindowLongPtrW(param_2,-4,0x18002a050);
    if (pcVar12 != FUN_18002a050) {
      *puVar11 = pcVar12;
    }
    *(undefined8 *)((longlong)pvVar5 + 0x28) = 0;
    if (local_2a0 != 0) {
      FUN_180021f08();
    }
    goto LAB_18002b909;
  }
  if (((*(uint *)(lVar2 + 0x30) >> 0x1e & 1) != 0) || (cVar1 != '\0')) goto LAB_18002b909;
  if (DAT_180072498 == 0) {
    FUN_1800357d0((ulonglong *)&local_288,0,0x50);
    local_288.cbSize = 0x50;
    uVar8 = FID_conflict_AfxCtxGetClassInfoW((HINSTANCE)0x0,L"#32768",&local_288);
    DAT_180072498 = (short)uVar8;
    if (DAT_180072498 != 0) goto LAB_18002b805;
    iVar4 = GetClassNameW(param_2,local_238,0x100);
    if (iVar4 != 0) {
      local_3a = 0;
      iVar4 = FUN_1800360e0((ushort *)local_238,(ushort *)L"#32768");
      if (iVar4 == 0) goto LAB_18002b909;
    }
  }
  else {
LAB_18002b805:
    UVar9 = GetClassLongPtrW(param_2,-0x20);
    if ((short)UVar9 == DAT_180072498) goto LAB_18002b909;
  }
  hData = (HANDLE)GetWindowLongPtrW(param_2,-4);
  if ((hData != (HANDLE)0x0) &&
     (pvVar10 = GetPropW(param_2,L"AfxOldWndProc423"), pvVar10 == (HANDLE)0x0)) {
    SetPropW(param_2,L"AfxOldWndProc423",hData);
    pvVar10 = GetPropW(param_2,L"AfxOldWndProc423");
    if (pvVar10 == hData) {
      GlobalAddAtomW(L"AfxOldWndProc423");
      SetWindowLongPtrW(param_2,-4,0x18002b4d8);
    }
  }
LAB_18002b909:
  LVar6 = CallNextHookEx(*(HHOOK *)((longlong)pvVar5 + 0x48),3,(WPARAM)param_2,(LPARAM)param_3);
  if (cVar1 != '\0') {
    UnhookWindowsHookEx(*(HHOOK *)((longlong)pvVar5 + 0x48));
    *(undefined8 *)((longlong)pvVar5 + 0x48) = 0;
  }
  return LVar6;
}


==================================================================

### EXPORT FUNC 18002b968 (24 bytes) name=Unwind@18002b968

void Unwind_18002b968(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x20);
  return;
}


==================================================================

### EXPORT FUNC 18002b980 (116 bytes) name=FUN_18002b980

void FUN_18002b980(longlong param_1)

{
  DWORD dwThreadId;
  void *pvVar1;
  HHOOK pHVar2;
  
  pvVar1 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar1 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (*(longlong *)((longlong)pvVar1 + 0x28) != param_1) {
    if (*(longlong *)((longlong)pvVar1 + 0x48) == 0) {
      dwThreadId = GetCurrentThreadId();
      pHVar2 = SetWindowsHookExW(5,FUN_18002b6d8,(HINSTANCE)0x0,dwThreadId);
      *(HHOOK *)((longlong)pvVar1 + 0x48) = pHVar2;
      if (pHVar2 == (HHOOK)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed6c();
      }
    }
    *(longlong *)((longlong)pvVar1 + 0x28) = param_1;
  }
  return;
}


==================================================================

### EXPORT FUNC 18002b9f8 (441 bytes) name=FUN_18002b9f8

bool FUN_18002b9f8(longlong *param_1,DWORD param_2,LPCWSTR param_3,LPCWSTR param_4,DWORD param_5,
                  int param_6,int param_7,int param_8,int param_9,HWND param_10,HMENU param_11,
                  LPVOID param_12)

{
  bool bVar1;
  int iVar2;
  undefined7 extraout_var;
  longlong lVar3;
  HWND pHVar4;
  undefined7 extraout_var_00;
  LPVOID local_58;
  HINSTANCE local_50;
  HMENU local_48;
  HWND local_40;
  int local_38;
  int local_34;
  int local_30;
  int local_2c;
  DWORD local_28;
  LPCWSTR local_20;
  LPCWSTR local_18;
  DWORD local_10;
  
  if (param_4 != (LPCWSTR)0x0) {
    bVar1 = FUN_18002e408((longlong)param_4);
    if ((int)CONCAT71(extraout_var,bVar1) == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
  }
  local_28 = param_5;
  local_2c = param_6;
  local_30 = param_7;
  local_34 = param_8;
  local_38 = param_9;
  local_40 = param_10;
  local_48 = param_11;
  local_20 = param_4;
  local_18 = param_3;
  local_10 = param_2;
  lVar3 = FUN_180022bb4();
  local_50 = *(HINSTANCE *)(lVar3 + 0x10);
  local_58 = param_12;
  iVar2 = (**(code **)(*param_1 + 200))(param_1,&local_58);
  if (iVar2 == 0) {
    (**(code **)(*param_1 + 0x228))();
    bVar1 = false;
  }
  else {
    FUN_18002b980((longlong)param_1);
    pHVar4 = FID_conflict_AfxCtxCreateWindowExA
                       (local_10,local_18,local_20,local_28,local_2c,local_30,local_34,local_38,
                        local_40,local_48,local_50,local_58);
    bVar1 = FUN_1800296fc();
    if ((int)CONCAT71(extraout_var_00,bVar1) == 0) {
      (**(code **)(*param_1 + 0x228))(param_1);
    }
    bVar1 = pHVar4 != (HWND)0x0;
  }
  return bVar1;
}


==================================================================

### EXPORT FUNC 18002bbb4 (204 bytes) name=FUN_18002bbb4

void FUN_18002bbb4(CWnd *param_1)

{
  int iVar1;
  CWnd *pCVar2;
  HWND hWnd;
  
  iVar1 = (**(code **)(*(longlong *)param_1 + 0x240))();
  if (iVar1 != 0) {
    (**(code **)(*(longlong *)param_1 + 0x2e0))(param_1);
  }
  SendMessageW(*(HWND *)(param_1 + 0x40),0x1f,0,0);
  FUN_18002a320(*(HWND *)(param_1 + 0x40),0x1f,0,0,1,1);
  pCVar2 = CWnd::GetTopLevelParent(param_1);
  if (pCVar2 == (CWnd *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  SendMessageW(*(HWND *)(pCVar2 + 0x40),0x1f,0,0);
  FUN_18002a320(*(HWND *)(pCVar2 + 0x40),0x1f,0,0,1,1);
  hWnd = GetCapture();
  if (hWnd != (HWND)0x0) {
    SendMessageW(hWnd,0x1f,0,0);
  }
  return;
}


==================================================================

### EXPORT FUNC 18002bc84 (2964 bytes) name=FUN_18002bc84

undefined8
FUN_18002bc84(CWnd *param_1,uint param_2,HWND__ *param_3,HWND__ *param_4,ulonglong *param_5)

{
  code *pcVar1;
  short sVar2;
  int iVar3;
  uint uVar4;
  CWnd *pCVar5;
  undefined8 *puVar6;
  undefined8 uVar7;
  longlong lVar8;
  CWnd *pCVar9;
  ulonglong uVar10;
  short sVar11;
  uint *puVar12;
  uint *puVar13;
  ulonglong local_108;
  int local_100;
  int iStack_fc;
  undefined4 local_f8;
  CDC local_f0 [8];
  undefined8 local_e8;
  undefined8 local_d0;
  CWnd local_c8 [64];
  HWND__ *local_88;
  longlong local_28;
  
  local_d0 = 0xfffffffffffffffe;
  local_108 = 0;
  local_f8 = 0x7fffffff;
  if (param_2 == 0x111) {
    iVar3 = (**(code **)(*(longlong *)param_1 + 0x1d0))(param_1,param_3,param_4);
    if (iVar3 == 0) {
      return 0;
    }
    local_108 = 1;
  }
  else if (param_2 == 0x4e) {
    if ((*(longlong *)param_4 == 0) ||
       (iVar3 = (**(code **)(*(longlong *)param_1 + 0x1d8))(param_1,param_3,param_4,&local_108),
       iVar3 == 0)) {
      return 0;
    }
  }
  else {
    if (param_2 == 6) {
      pCVar5 = CWnd::FromHandle(param_4);
      FUN_18002b3b0(param_1,(WPARAM)param_3,pCVar5);
    }
    sVar11 = (short)param_4;
    if ((param_2 == 0x20) &&
       (iVar3 = _AfxHandleSetCursor(param_1,(int)sVar11,(uint)((ulonglong)param_4 >> 0x10) & 0xffff)
       , iVar3 != 0)) {
      local_108 = 1;
    }
    else if ((((*(longlong *)(param_1 + 0x98) == 0) ||
              (*(int *)(*(longlong *)(param_1 + 0x98) + 0xe0) < 1)) ||
             ((((param_2 < 0x200 || (0x209 < param_2)) && ((param_2 < 0x100 || (0x10f < param_2))))
              && (0x10 < param_2 - 0x281)))) ||
            (iVar3 = (**(code **)(**(longlong **)(param_1 + 0x98) + 0x128))
                               (*(longlong **)(param_1 + 0x98),param_2,param_3,param_4,&local_108),
            iVar3 == 0)) {
      puVar6 = (undefined8 *)(**(code **)(*(longlong *)param_1 + 0x50))(param_1);
      uVar10 = (ulonglong)(((uint)puVar6 ^ param_2) & 0x1ff);
      local_f8 = 7;
      FUN_1800237a0(7);
      if ((param_2 != *(uint *)(&DAT_18006f190 + uVar10 * 0x18)) ||
         (puVar6 != *(undefined8 **)(&DAT_18006f1a0 + uVar10 * 0x18))) {
        *(uint *)(&DAT_18006f190 + uVar10 * 0x18) = param_2;
        *(undefined8 **)(&DAT_18006f1a0 + uVar10 * 0x18) = puVar6;
        pcVar1 = (code *)*puVar6;
        do {
          if (pcVar1 == (code *)0x0) {
            *(undefined8 *)(&DAT_18006f198 + uVar10 * 0x18) = 0;
            FUN_180023834(7);
            return 0;
          }
          if (param_2 < 0xc000) {
            puVar12 = (uint *)puVar6[1];
            lVar8 = *(longlong *)(puVar12 + 4);
            for (; (puVar13 = (uint *)0x0, lVar8 != 0 &&
                   (((*puVar12 != param_2 || (puVar12[1] != 0)) ||
                    (puVar13 = puVar12, puVar12[2] != 0)))); puVar12 = puVar12 + 8) {
              lVar8 = *(longlong *)(puVar12 + 0xc);
            }
            if (puVar13 != (uint *)0x0) {
              *(uint **)(&DAT_18006f198 + uVar10 * 0x18) = puVar13;
              FUN_180023834(7);
              goto LAB_18002bf17;
            }
          }
          else {
            puVar12 = (uint *)puVar6[1];
            while( true ) {
              lVar8 = *(longlong *)(puVar12 + 4);
              for (; (puVar13 = (uint *)0x0, lVar8 != 0 &&
                     (((*puVar12 != 0xc000 || (puVar12[1] != 0)) ||
                      (puVar13 = puVar12, puVar12[2] != 0)))); puVar12 = puVar12 + 8) {
                lVar8 = *(longlong *)(puVar12 + 0xc);
              }
              if (puVar13 == (uint *)0x0) break;
              if (**(uint **)(puVar13 + 4) == param_2) {
                *(uint **)(&DAT_18006f198 + uVar10 * 0x18) = puVar13;
                FUN_180023834(7);
                goto LAB_18002c7ae;
              }
              puVar12 = puVar13 + 8;
            }
          }
          puVar6 = (undefined8 *)(*pcVar1)();
          pcVar1 = (code *)*puVar6;
        } while( true );
      }
      puVar13 = *(uint **)(&DAT_18006f198 + uVar10 * 0x18);
      FUN_180023834(7);
      if (puVar13 == (uint *)0x0) {
        return 0;
      }
      if (param_2 < 0xc000) {
LAB_18002bf17:
        local_f8 = 0x7fffffff;
        pcVar1 = *(code **)(puVar13 + 6);
        uVar10 = *(ulonglong *)(puVar13 + 4);
        sVar2 = (short)((ulonglong)param_4 >> 0x10);
        if (uVar10 < 0x1e) {
          if (uVar10 == 0x1d) {
            iVar3 = (*pcVar1)(param_1);
            local_108 = (ulonglong)iVar3;
          }
          else if (uVar10 < 0x10) {
            if (uVar10 == 0xf) {
              uVar7 = FromHandle(param_4);
              local_108 = (*pcVar1)(param_1,(ulonglong)param_3 & 0xffff,
                                    (ulonglong)param_3 >> 0x10 & 0xffff,uVar7);
            }
            else if (uVar10 < 9) {
              if (uVar10 == 8) {
                FUN_1800309d0((undefined8 *)local_f0);
                local_e8 = *(undefined8 *)(param_4 + 2);
                CWnd::CWnd(local_c8);
                local_88 = *(HWND__ **)param_4;
                iVar3 = param_4[4].unused;
                pCVar5 = CWnd::FromHandlePermanent(local_88);
                if (pCVar5 == (CWnd *)0x0) {
                  if ((*(longlong *)(param_1 + 0x98) != 0) &&
                     (lVar8 = FUN_180030118(*(longlong *)(param_1 + 0x98) + 0x48,(ulonglong)local_88
                                           ), lVar8 != 0)) {
                    local_28 = lVar8;
                  }
                  pCVar5 = local_c8;
                }
                local_108 = (*pcVar1)(param_1,local_f0,pCVar5,iVar3);
                local_e8 = 0;
                local_88 = (HWND__ *)0x0;
                CWnd::~CWnd(local_c8);
                CDC::~CDC(local_f0);
              }
              else if (uVar10 == 1) {
                uVar7 = FromHandle(param_3);
                iVar3 = (*pcVar1)(param_1,uVar7);
                local_108 = (ulonglong)iVar3;
              }
              else if (uVar10 == 2) {
                iVar3 = (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff);
                local_108 = (ulonglong)iVar3;
              }
              else if (uVar10 == 3) {
                iVar3 = (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff);
                local_108 = (ulonglong)iVar3;
              }
              else if (uVar10 == 4) {
                iVar3 = (*pcVar1)(param_1,param_3);
                local_108 = (ulonglong)iVar3;
              }
              else if (uVar10 == 5) {
                pCVar5 = CWnd::FromHandle(param_3);
                iVar3 = (*pcVar1)(param_1,pCVar5,(ulonglong)param_4 & 0xffff,
                                  (ulonglong)param_4 >> 0x10 & 0xffff);
                local_108 = (ulonglong)iVar3;
              }
              else if (uVar10 == 6) {
                pCVar5 = CWnd::FromHandle(param_3);
                iVar3 = (*pcVar1)(param_1,pCVar5,param_4);
                local_108 = (ulonglong)iVar3;
              }
              else if (uVar10 == 7) {
                iVar3 = (*pcVar1)(param_1,param_4);
                local_108 = (ulonglong)iVar3;
              }
            }
            else if (uVar10 == 9) {
              FUN_1800309d0((undefined8 *)local_f0);
              local_e8 = *(undefined8 *)(param_4 + 2);
              local_108 = (*pcVar1)(param_1,local_f0,param_4[4].unused);
              local_e8 = 0;
              CDC::~CDC(local_f0);
            }
            else if (uVar10 == 10) {
              pCVar5 = CWnd::FromHandle(param_4);
              iVar3 = (*pcVar1)(param_1,(ulonglong)param_3 & 0xffff,pCVar5,
                                (ulonglong)param_3 >> 0x10 & 0xffff);
              local_108 = (ulonglong)iVar3;
            }
            else if (uVar10 == 0xb) {
              iVar3 = (*pcVar1)(param_1,(ulonglong)param_3 & 0xffff,
                                (ulonglong)param_3 >> 0x10 & 0xffff);
              local_108 = (ulonglong)iVar3;
            }
            else if (uVar10 == 0xc) {
              pCVar5 = CWnd::FromHandle(param_3);
              iVar3 = (*pcVar1)(param_1,pCVar5,(ulonglong)param_4 & 0xffff,
                                (ulonglong)param_4 >> 0x10 & 0xffff);
              local_108 = (ulonglong)iVar3;
            }
            else if (uVar10 == 0xd) {
              iVar3 = (*pcVar1)(param_1,param_4);
              local_108 = (ulonglong)iVar3;
            }
            else if (uVar10 == 0xe) {
              local_108 = (*pcVar1)(param_1,param_3,param_4);
            }
          }
          else if (uVar10 < 0x17) {
            if (uVar10 == 0x16) {
              (*pcVar1)(param_1,(ulonglong)param_3 & 0xffff,(ulonglong)param_3 >> 0x10 & 0xffff);
            }
            else if (uVar10 == 0x10) {
              (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff,param_4);
            }
            else if (uVar10 == 0x11) {
              (*pcVar1)(param_1,param_3);
            }
            else if (uVar10 == 0x12) {
              (*pcVar1)(param_1,param_3,param_4);
            }
            else if (uVar10 == 0x13) {
              (*pcVar1)(param_1);
            }
            else if (uVar10 == 0x14) {
              (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff);
            }
            else if (uVar10 == 0x15) {
              (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff,(ulonglong)param_4 & 0xffffffff);
            }
          }
          else if (uVar10 == 0x17) {
            (*pcVar1)(param_1,(int)sVar11,(int)sVar2);
          }
          else if (uVar10 == 0x18) {
            (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff,(ulonglong)param_4 & 0xffff,
                      (ulonglong)param_4 >> 0x10 & 0xffff);
          }
          else if (uVar10 == 0x19) {
            (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff,(ulonglong)param_4 & 0xffff,
                      (ulonglong)param_4 >> 0x10 & 0xffff);
          }
          else if (uVar10 == 0x1a) {
            pCVar5 = CWnd::FromHandle(param_4);
            (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff,pCVar5);
          }
          else if (uVar10 == 0x1b) {
            iVar3 = (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff);
            local_108 = (ulonglong)iVar3;
          }
          else if (uVar10 == 0x1c) {
            uVar4 = (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff);
            local_108 = (ulonglong)uVar4;
          }
        }
        else if (uVar10 < 0x2d) {
          if (uVar10 == 0x2c) {
            (*pcVar1)(param_1,param_4);
          }
          else if (uVar10 < 0x25) {
            if (uVar10 == 0x24) {
              pCVar5 = CWnd::FromHandle(param_4);
              (*pcVar1)(param_1,pCVar5);
            }
            else if (uVar10 == 0x1e) {
              (*pcVar1)(param_1,param_3,param_4);
            }
            else if (uVar10 == 0x1f) {
              pCVar5 = CWnd::FromHandle(param_3);
              pCVar9 = CWnd::FromHandle(param_4);
              (*pcVar1)(param_1,*(HWND__ **)(param_1 + 0x40) == param_4,pCVar9,pCVar5);
            }
            else if (uVar10 == 0x20) {
              uVar7 = FromHandle(param_3);
              (*pcVar1)(param_1,uVar7);
            }
            else if (uVar10 == 0x21) {
              uVar7 = FromHandle(param_3);
              (*pcVar1)(param_1,uVar7);
            }
            else if (uVar10 == 0x22) {
              uVar7 = FromHandle(param_3);
              (*pcVar1)(param_1,uVar7,(int)sVar11,(int)sVar2);
            }
            else if (uVar10 == 0x23) {
              pCVar5 = CWnd::FromHandle(param_3);
              (*pcVar1)(param_1,pCVar5);
            }
          }
          else if (uVar10 == 0x25) {
            pCVar5 = CWnd::FromHandle(param_3);
            (*pcVar1)(param_1,pCVar5,(ulonglong)param_4 & 0xffff,(ulonglong)param_4 >> 0x10 & 0xffff
                     );
          }
          else if (uVar10 == 0x26) {
            local_100 = (int)sVar11;
            iStack_fc = (int)sVar2;
            pCVar5 = CWnd::FromHandle(param_3);
            (*pcVar1)(param_1,pCVar5,CONCAT44(iStack_fc,local_100));
          }
          else if (uVar10 == 0x27) {
            pCVar5 = CWnd::FromHandle(param_3);
            (*pcVar1)(param_1,pCVar5,param_4);
          }
          else if (uVar10 == 0x28) {
            local_108 = (*pcVar1)(param_1);
          }
          else if (uVar10 == 0x29) {
            pCVar5 = CWnd::FromHandle(param_4);
            (*pcVar1)(param_1,(ulonglong)param_3 & 0xffff,pCVar5,(ulonglong)param_3 >> 0x10 & 0xffff
                     );
          }
          else if (uVar10 == 0x2a || uVar10 == 0x2b) {
            iVar3 = (int)(short)((ulonglong)param_3 >> 0x10);
            if (uVar10 == 0x2a) {
              pCVar5 = CWnd::FromHandle(param_4);
              (*pcVar1)(param_1,(int)(short)param_3,iVar3,pCVar5);
            }
            else {
              (*pcVar1)(param_1,(int)(short)param_3,iVar3);
            }
          }
        }
        else if (uVar10 < 0x34) {
          if (uVar10 == 0x33) {
            (*pcVar1)(param_1,param_4);
          }
          else if (uVar10 == 0x2d) {
            (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff,param_4);
          }
          else if (uVar10 == 0x2e) {
            (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff,param_4);
            local_108 = 1;
          }
          else if (uVar10 == 0x2f) {
            iVar3 = (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff,param_4);
            local_108 = (ulonglong)iVar3;
          }
          else if (uVar10 == 0x30) {
            local_100 = (int)sVar11;
            iStack_fc = (int)sVar2;
            uVar4 = (*pcVar1)(param_1,CONCAT44(iStack_fc,local_100));
            local_108 = (ulonglong)uVar4;
          }
          else if (uVar10 == 0x31) {
            uVar4 = (*pcVar1)(param_1);
            local_108 = (ulonglong)uVar4;
          }
          else if (uVar10 == 0x32) {
            (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff,param_4);
          }
        }
        else if (uVar10 == 0x34) {
          (*pcVar1)(param_1,(ulonglong)param_3 & 0xffff,(ulonglong)param_3 >> 0x10 & 0xffff,param_4)
          ;
        }
        else if (uVar10 == 0x35) {
          local_100 = (int)sVar11;
          iStack_fc = (int)sVar2;
          (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff,CONCAT44(iStack_fc,local_100));
        }
        else if (uVar10 == 0x36) {
          (*pcVar1)(param_1,(ulonglong)param_3 & 0xffffffff,param_4);
          local_108 = 1;
        }
        else if (uVar10 == 0x37) {
          local_100 = (int)sVar11;
          iStack_fc = (int)sVar2;
          iVar3 = (*pcVar1)(param_1,(ulonglong)param_3 & 0xffff,(ulonglong)param_3 >> 0x10,
                            CONCAT44(iStack_fc,local_100));
          local_108 = (ulonglong)iVar3;
          if (local_108 == 0) {
            return 0;
          }
        }
        else if (uVar10 == 0x44) {
          local_108 = (*pcVar1)(param_1);
          if (local_108 != 0) {
            return 0;
          }
        }
        else if (uVar10 == 0x45) {
          local_100 = (int)sVar11;
          iStack_fc = (int)sVar2;
          local_108 = (*pcVar1)(param_1,CONCAT44(iStack_fc,local_100));
        }
      }
      else {
LAB_18002c7ae:
        local_f8 = 0x7fffffff;
        local_108 = (**(code **)(puVar13 + 6))(param_1,param_3,param_4);
      }
    }
  }
  if (param_5 != (ulonglong *)0x0) {
    *param_5 = local_108;
  }
  return 1;
}


==================================================================

### EXPORT FUNC 18002c824 (24 bytes) name=Unwind@18002c824

void Unwind_18002c824(undefined8 param_1,longlong param_2)

{
  CInternalGlobalLock::~CInternalGlobalLock((CInternalGlobalLock *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 18002c844 (24 bytes) name=Unwind@18002c844

void Unwind_18002c844(undefined8 param_1,longlong param_2)

{
  CDC::~CDC((CDC *)(param_2 + 0x48));
  return;
}


==================================================================

### EXPORT FUNC 18002c864 (24 bytes) name=Unwind@18002c864

void Unwind_18002c864(undefined8 param_1,longlong param_2)

{
  CWnd::~CWnd((CWnd *)(param_2 + 0x70));
  return;
}


==================================================================

### EXPORT FUNC 18002c884 (24 bytes) name=Unwind@18002c884

void Unwind_18002c884(undefined8 param_1,longlong param_2)

{
  CDC::~CDC((CDC *)(param_2 + 0x48));
  return;
}


==================================================================

### EXPORT FUNC 18002c89c (300 bytes) name=ReflectChildNotify

/* Library Function - Single Match
    protected: int __cdecl CWnd::ReflectChildNotify(unsigned int,unsigned __int64,__int64,__int64 *
   __ptr64) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

int __thiscall
CWnd::ReflectChildNotify(CWnd *this,uint param_1,__uint64 param_2,__int64 param_3,__int64 *param_4)

{
  uint uVar1;
  int iVar2;
  undefined8 uVar3;
  __int64 *local_28;
  __uint64 local_20;
  int local_18;
  
  if (param_1 < 0x2b) {
LAB_18002c8ea:
    if (param_1 - 0x132 < 7) {
      local_18 = param_1 - 0x132;
      local_20 = param_2;
      uVar3 = FUN_18002bc84(this,0xbc19,(HWND__ *)0x0,(HWND__ *)&local_28,(ulonglong *)param_4);
      return -(uint)(*param_4 != 0) & (uint)uVar3;
    }
LAB_18002c9c0:
    iVar2 = 0;
  }
  else {
    if ((0x2f < param_1) && (param_1 != 0x39)) {
      if (param_1 == 0x4e) {
        local_28 = param_4;
        local_20 = param_3;
        uVar1 = FUN_18002d834((longlong *)this,0,
                              (ulonglong)(*(ushort *)(param_3 + 0x10) | 0xbc4e0000),&local_28,
                              (longlong *)0x0);
        return uVar1;
      }
      if (param_1 == 0x111) {
        uVar1 = FUN_18002d834((longlong *)this,0,(ulonglong)((ushort)(param_2 >> 0x10) | 0xbd110000)
                              ,(undefined8 *)0x0,(longlong *)0x0);
        if (uVar1 != 0) {
          if (param_4 == (__int64 *)0x0) {
            return 1;
          }
          *param_4 = 1;
          return 1;
        }
        goto LAB_18002c9c0;
      }
      if ((param_1 < 0x114) || ((0x115 < param_1 && (param_1 != 0x210)))) goto LAB_18002c8ea;
    }
    uVar3 = FUN_18002bc84(this,param_1 + 0xbc00,(HWND__ *)param_2,(HWND__ *)param_3,
                          (ulonglong *)param_4);
    iVar2 = (int)uVar3;
  }
  return iVar2;
}


==================================================================

### EXPORT FUNC 18002c9c8 (65 bytes) name=OnSettingChange

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Multiple Matches With Same Base Name
    protected: void __cdecl CWnd::OnSettingChange(unsigned int,char const * __ptr64) __ptr64
    protected: void __cdecl CWnd::OnSettingChange(unsigned int,wchar_t const * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

void OnSettingChange(CWnd *param_1)

{
  _DAT_18006f180 = 0;
  if (*(longlong *)(param_1 + 0x98) != 0) {
    (**(code **)(**(longlong **)(param_1 + 0x98) + 0xa0))();
  }
  CWnd::OnDisplayChange(param_1,0,0);
  return;
}


==================================================================

### EXPORT FUNC 18002ca0c (168 bytes) name=CreateInstance

/* Library Function - Single Match
    public: static long __cdecl CMFCComObject<class ATL::CAccessibleProxy>::CreateInstance(class
   CMFCComObject<class ATL::CAccessibleProxy> * __ptr64 * __ptr64)
   
   Library: Visual Studio 2008 Release */

long __cdecl
CMFCComObject<ATL::CAccessibleProxy>::CreateInstance
          (CMFCComObject<class_ATL::CAccessibleProxy> **param_1)

{
  CMFCComObject<class_ATL::CAccessibleProxy> *pCVar1;
  CMFCComObject<class_ATL::CAccessibleProxy> *pCVar2;
  long lVar3;
  
  pCVar2 = (CMFCComObject<class_ATL::CAccessibleProxy> *)0x0;
  if (param_1 == (CMFCComObject<class_ATL::CAccessibleProxy> **)0x0) {
    lVar3 = -0x7fffbffd;
  }
  else {
    *param_1 = (CMFCComObject<class_ATL::CAccessibleProxy> *)0x0;
    pCVar1 = FUN_18001eb74(0x30);
    if (pCVar1 != (CMFCComObject<class_ATL::CAccessibleProxy> *)0x0) {
      *(undefined4 *)(pCVar1 + 0x28) = 0;
      *(undefined8 *)(pCVar1 + 0x10) = 0;
      *(undefined8 *)(pCVar1 + 0x18) = 0;
      *(undefined ***)pCVar1 = vftable;
      *(undefined ***)(pCVar1 + 8) = vftable;
      *(undefined ***)(pCVar1 + 0x20) = vftable;
      AfxOleLockApp();
      pCVar2 = pCVar1;
    }
    lVar3 = -0x7ff8fff2;
    if (pCVar2 != (CMFCComObject<class_ATL::CAccessibleProxy> *)0x0) {
      lVar3 = 0;
    }
    *param_1 = pCVar2;
  }
  return lVar3;
}


==================================================================

### EXPORT FUNC 18002cacc (24 bytes) name=Unwind@18002cacc

void Unwind_18002cacc(undefined8 param_1,longlong param_2)

{
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x78));
  return;
}


==================================================================

### EXPORT FUNC 18002caec (38 bytes) name=Catch@18002caec

undefined * Catch_18002caec(undefined8 param_1,longlong param_2)

{
  FUN_18001ec74(*(longlong **)(param_2 + 0x28));
  return &DAT_18002ca9d;
}


==================================================================

### EXPORT FUNC 18002cb14 (73 bytes) name=~CWaitCursor

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    public: __cdecl CWaitCursor::~CWaitCursor(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CWaitCursor::~CWaitCursor(CWaitCursor *this)

{
  longlong lVar1;
  undefined1 auStack_468 [64];
  undefined8 local_428;
  ulonglong local_18;
  
  local_428 = 0xfffffffffffffffe;
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_468;
  lVar1 = FUN_180022bb4();
  CCmdTarget::EndWaitCursor(*(CCmdTarget **)(lVar1 + 8));
  return;
}


==================================================================

### EXPORT FUNC 18002cb64 (253 bytes) name=Catch@18002cb64

undefined8 Catch_18002cb64(undefined8 param_1,longlong param_2)

{
  wchar_t *pwVar1;
  wchar_t *pwVar2;
  int iVar3;
  undefined **ppuVar4;
  longlong lVar5;
  
  ppuVar4 = FUN_18001fcc0();
  if (ppuVar4 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar5 = (**(code **)(*ppuVar4 + 0x18))(ppuVar4);
  *(longlong *)(param_2 + 0x30) = lVar5 + 0x18;
  iVar3 = (**(code **)(**(longlong **)(param_2 + 0x38) + 0x18))
                    (*(longlong **)(param_2 + 0x38),param_2 + 0x50,0x200,0);
  if (iVar3 == 0) {
    FUN_18001ad00((longlong *)(param_2 + 0x30),L"%s (%s:%d)","Exception thrown in destructor",
                  "f:\\sp\\vctools\\vc7libs\\ship\\atlmfc\\include\\afxwin2.inl");
  }
  else {
    FUN_18001ad00((longlong *)(param_2 + 0x30),L"%s (%s:%d)\n%s","Exception thrown in destructor",
                  "f:\\sp\\vctools\\vc7libs\\ship\\atlmfc\\include\\afxwin2.inl");
  }
  pwVar2 = *(wchar_t **)(param_2 + 0x30);
  AfxMessageBox(pwVar2,0,0);
  LOCK();
  pwVar1 = pwVar2 + -4;
  iVar3 = *(int *)pwVar1;
  *(int *)pwVar1 = *(int *)pwVar1 + -1;
  UNLOCK();
  if (iVar3 + -1 < 1) {
    (**(code **)(**(longlong **)(pwVar2 + -0xc) + 8))();
  }
  (**(code **)(**(longlong **)(param_2 + 0x38) + 8))(*(longlong **)(param_2 + 0x38),1);
  return 0x18002cb45;
}


==================================================================

### EXPORT FUNC 18002cc64 (24 bytes) name=Unwind@18002cc64

void Unwind_18002cc64(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 18002cc7c (163 bytes) name=FUN_18002cc7c

void FUN_18002cc7c(CWnd *param_1,ULONG_PTR param_2,UINT param_3)

{
  BOOL BVar1;
  longlong lVar2;
  CWnd *pCVar3;
  CWaitCursor local_res20 [8];
  
  lVar2 = FUN_180022bb4();
  lVar2 = *(longlong *)(lVar2 + 8);
  FUN_180022bb4();
  FUN_18002dac8();
  FUN_18002bbb4(param_1);
  pCVar3 = CWnd::GetTopLevelParent(param_1);
  if (pCVar3 == (CWnd *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  BVar1 = WinHelpW(*(HWND *)(pCVar3 + 0x40),*(LPCWSTR *)(lVar2 + 200),param_3,param_2);
  if (BVar1 == 0) {
    FUN_180024b20(0xf107,0,0xffffffff);
  }
  CWaitCursor::~CWaitCursor(local_res20);
  return;
}


==================================================================

### EXPORT FUNC 18002cd2c (24 bytes) name=Unwind@18002cd2c

void Unwind_18002cd2c(undefined8 param_1,longlong param_2)

{
  CWaitCursor::~CWaitCursor((CWaitCursor *)(param_2 + 0x58));
  return;
}


==================================================================

### EXPORT FUNC 18002cd44 (163 bytes) name=FUN_18002cd44

void FUN_18002cd44(CWnd *param_1,undefined8 param_2,undefined4 param_3)

{
  longlong lVar1;
  CWnd *pCVar2;
  CWaitCursor local_res20 [8];
  
  lVar1 = FUN_180022bb4();
  lVar1 = *(longlong *)(lVar1 + 8);
  FUN_180022bb4();
  FUN_18002dac8();
  FUN_18002bbb4(param_1);
  pCVar2 = CWnd::GetTopLevelParent(param_1);
  if (pCVar2 == (CWnd *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  lVar1 = FUN_18002ad24(*(undefined8 *)(pCVar2 + 0x40),*(undefined8 *)(lVar1 + 200),param_3,param_2)
  ;
  if (lVar1 == 0) {
    FUN_180024b20(0xf107,0,0xffffffff);
  }
  CWaitCursor::~CWaitCursor(local_res20);
  return;
}


==================================================================

### EXPORT FUNC 18002cdf4 (24 bytes) name=Unwind@18002cdf4

void Unwind_18002cdf4(undefined8 param_1,longlong param_2)

{
  CWaitCursor::~CWaitCursor((CWaitCursor *)(param_2 + 0x58));
  return;
}


==================================================================

### EXPORT FUNC 18002ce0c (8 bytes) name=FUN_18002ce0c

undefined ** FUN_18002ce0c(void)

{
  return &PTR_FUN_180056158;
}


==================================================================

### EXPORT FUNC 18002ce14 (94 bytes) name=OnChildNotify

/* Library Function - Single Match
    protected: virtual int __cdecl CWnd::OnChildNotify(unsigned int,unsigned __int64,__int64,__int64
   * __ptr64) __ptr64
   
   Library: Visual Studio 2005 Release */

int __thiscall
CWnd::OnChildNotify(CWnd *this,uint param_1,__uint64 param_2,__int64 param_3,__int64 *param_4)

{
  int iVar1;
  LRESULT LVar2;
  
  if (*(longlong *)(this + 0xa0) == 0) {
    iVar1 = ReflectChildNotify(this,param_1,param_2,param_3,param_4);
  }
  else {
    LVar2 = SendMessageW(*(HWND *)(this + 0x40),param_1 + 0x2000,param_2,param_3);
    if ((6 < param_1 - 0x132) || (iVar1 = 0, LVar2 != 0)) {
      if (param_4 != (__int64 *)0x0) {
        *param_4 = LVar2;
      }
      iVar1 = 1;
    }
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 18002ce74 (238 bytes) name=CreateAccessibleProxy

/* Library Function - Single Match
    public: virtual long __cdecl CWnd::CreateAccessibleProxy(unsigned __int64,__int64,__int64 *
   __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

long __thiscall
CWnd::CreateAccessibleProxy(CWnd *this,__uint64 param_1,__int64 param_2,__int64 *param_3)

{
  int iVar1;
  LRESULT LVar2;
  longlong *local_res18;
  CMFCComObject<class_ATL::CAccessibleProxy> *local_18;
  undefined8 local_10;
  
  local_10 = 0xfffffffffffffffe;
  iVar1 = -0x7fffbffb;
  if ((int)param_2 == -4) {
    iVar1 = (**(code **)(*(longlong *)this + 0x110))();
    if (-1 < iVar1) {
      if (*(LPUNKNOWN *)(this + 0x58) == (LPUNKNOWN)0x0) {
        iVar1 = CMFCComObject<ATL::CAccessibleProxy>::CreateInstance(&local_18);
        if (-1 < iVar1) {
          local_res18 = (longlong *)0x0;
          iVar1 = (*(code *)**(undefined8 **)local_18)(local_18,&DAT_180055808,&local_res18);
          if (-1 < iVar1) {
            *(longlong **)(this + 0x58) = local_res18;
            (**(code **)(*local_res18 + 0x18))(local_res18,this + 0x60,this + 0x68);
            LVar2 = LresultFromObject((IID *)&DAT_1800557f8,param_1,*(LPUNKNOWN *)(this + 0x58));
            *param_3 = LVar2;
          }
          iVar1 = 0;
          if (local_res18 != (longlong *)0x0) {
            (**(code **)(*local_res18 + 0x10))();
            iVar1 = 0;
          }
        }
      }
      else {
        LVar2 = LresultFromObject((IID *)&DAT_1800557f8,param_1,*(LPUNKNOWN *)(this + 0x58));
        *param_3 = LVar2;
        iVar1 = 0;
      }
    }
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 18002cf64 (24 bytes) name=Unwind@18002cf64

void Unwind_18002cf64(undefined8 param_1,longlong param_2)

{
  FUN_180028be0((longlong *)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 18002cf7c (188 bytes) name=FUN_18002cf7c

undefined8 FUN_18002cf7c(WNDCLASSW *param_1)

{
  LPCWSTR pWVar1;
  undefined1 uVar2;
  ulonglong uVar3;
  undefined7 extraout_var;
  longlong lVar4;
  longlong lVar5;
  undefined8 uVar6;
  int iVar7;
  tagWNDCLASSW local_68;
  
  uVar3 = FID_conflict_AfxCtxGetClassInfoW(param_1->hInstance,param_1->lpszClassName,&local_68);
  iVar7 = 0;
  if ((int)uVar3 == 0) {
    uVar2 = FUN_1800270ac(param_1);
    if ((short)CONCAT71(extraout_var,uVar2) == 0) {
      uVar6 = 0;
    }
    else {
      lVar4 = FUN_180022bb4();
      if (*(char *)(lVar4 + 0x28) != '\0') {
        FUN_1800237a0(1);
        lVar4 = FUN_180022bb4();
        pWVar1 = param_1->lpszClassName;
        if (pWVar1 != (LPCWSTR)0x0) {
          lVar5 = FUN_1800355e0(pWVar1);
          iVar7 = (int)lVar5;
        }
        FUN_18000aab0((longlong *)(lVar4 + 0x58),pWVar1,iVar7);
        FUN_180020dc0((longlong *)(lVar4 + 0x58),10);
        FUN_180023834(1);
      }
      uVar6 = 1;
    }
  }
  else {
    uVar6 = 1;
  }
  return uVar6;
}


==================================================================

### EXPORT FUNC 18002d03c (32 bytes) name=Catch@18002d03c

void Catch_18002d03c(void)

{
  FUN_180023834(1);
                    /* WARNING: Subroutine does not return */
  _CxxThrowException((void *)0x0,(ThrowInfo *)0x0);
}


==================================================================

### EXPORT FUNC 18002d064 (376 bytes) name=FUN_18002d064

int FUN_18002d064(longlong param_1,ushort *param_2)

{
  int *piVar1;
  int iVar2;
  ushort uVar3;
  uint uVar4;
  ushort uVar5;
  LRESULT LVar6;
  ushort *lParam;
  int iVar7;
  longlong local_res10;
  undefined4 local_68 [2];
  ulonglong local_60;
  longlong local_58;
  
  iVar7 = 1;
  if (param_2 != (ushort *)0x0) {
    do {
      uVar3 = *param_2;
      if (uVar3 == 0) break;
      uVar5 = param_2[1];
      uVar4 = *(uint *)(param_2 + 2);
      lParam = param_2 + 4;
      if (uVar5 == 0x1234) {
LAB_18002d107:
        FUN_1800357d0(&local_60,0,0x30);
        local_60 = 0xffffffffffffffff;
        local_68[0] = 1;
        FUN_18000b610(&local_res10,(short *)lParam);
        local_58 = local_res10;
        LVar6 = SendDlgItemMessageW(*(HWND *)(param_1 + 0x40),(uint)uVar3,0x40b,0,(LPARAM)local_68);
        if (LVar6 == -1) {
          iVar7 = 0;
        }
        LOCK();
        piVar1 = (int *)(local_res10 + -8);
        iVar2 = *piVar1;
        *piVar1 = *piVar1 + -1;
        UNLOCK();
        if (iVar2 + -1 < 1) {
          (**(code **)(**(longlong **)(local_res10 + -0x18) + 8))();
        }
      }
      else if (uVar5 == 0x401) {
        uVar5 = 0x180;
LAB_18002d0e1:
        LVar6 = SendDlgItemMessageA(*(HWND *)(param_1 + 0x40),(uint)uVar3,(uint)uVar5,0,
                                    (LPARAM)lParam);
        if (LVar6 == -1) {
          iVar7 = 0;
        }
      }
      else {
        if (uVar5 == 0x403) {
          uVar5 = 0x143;
        }
        if (uVar5 == 0x40b) goto LAB_18002d107;
        if ((uVar5 == 0x180) || (uVar5 == 0x143)) goto LAB_18002d0e1;
      }
      param_2 = (ushort *)((longlong)lParam + (ulonglong)uVar4);
    } while (iVar7 != 0);
    if (iVar7 == 0) {
      return 0;
    }
  }
  FUN_18002a320(*(HWND *)(param_1 + 0x40),0x364,0,0,0,0);
  return iVar7;
}


==================================================================

### EXPORT FUNC 18002d1dc (82 bytes) name=FUN_18002d1dc

void FUN_18002d1dc(WNDCLASSW *param_1,LPCWSTR param_2,uint param_3)

{
  longlong lVar1;
  HICON pHVar2;
  
  param_1->lpszClassName = param_2;
  lVar1 = FUN_180022bb4();
  pHVar2 = LoadIconW(*(HINSTANCE *)(lVar1 + 0x18),(LPCWSTR)(ulonglong)(param_3 & 0xffff));
  param_1->hIcon = pHVar2;
  if (pHVar2 == (HICON)0x0) {
    pHVar2 = LoadIconW((HINSTANCE)0x0,(LPCWSTR)0x7f00);
    param_1->hIcon = pHVar2;
  }
  FUN_18002cf7c(param_1);
  return;
}


==================================================================

### EXPORT FUNC 18002d230 (936 bytes) name=FUN_18002d230

bool FUN_18002d230(uint param_1)

{
  int iVar1;
  uint uVar2;
  longlong lVar3;
  longlong lVar4;
  undefined8 uVar5;
  uint uVar6;
  uint uVar7;
  bool bVar8;
  tagINITCOMMONCONTROLSEX local_res10;
  WNDCLASSW local_68;
  
  lVar3 = FUN_180022bb4();
  uVar7 = param_1 & ~*(uint *)(lVar3 + 0x2c);
  if (uVar7 == 0) {
    bVar8 = true;
  }
  else {
    FUN_1800357d0((ulonglong *)&local_68,0,0x48);
    local_68.lpfnWndProc = DefWindowProcW_exref;
    lVar4 = FUN_180022bb4();
    local_68.hInstance = *(HINSTANCE *)(lVar4 + 0x10);
    local_68.hCursor = DAT_180072510;
    local_res10.dwSize = 8;
    uVar6 = 0;
    if ((uVar7 & 1) != 0) {
      local_68.style = 0xb;
      local_68.lpszClassName = L"AfxWnd80su";
      uVar5 = FUN_18002cf7c(&local_68);
      uVar6 = 0;
      if ((int)uVar5 != 0) {
        uVar6 = 1;
      }
    }
    if ((uVar7 & 0x20) != 0) {
      local_68.style = local_68.style | 0x8b;
      local_68.lpszClassName = L"AfxOleControl80su";
      uVar5 = FUN_18002cf7c(&local_68);
      if ((int)uVar5 != 0) {
        uVar6 = uVar6 | 0x20;
      }
    }
    if ((uVar7 & 2) != 0) {
      local_68.style = 0;
      local_68.lpszClassName = L"AfxControlBar80su";
      local_68.hbrBackground = (HBRUSH)0x10;
      uVar5 = FUN_18002cf7c(&local_68);
      if ((int)uVar5 != 0) {
        uVar6 = uVar6 | 2;
      }
    }
    if ((uVar7 & 4) != 0) {
      local_68.style = 8;
      local_68.hbrBackground = (HBRUSH)0x0;
      iVar1 = FUN_18002d1dc(&local_68,L"AfxMDIFrame80su",0x7a01);
      if (iVar1 != 0) {
        uVar6 = uVar6 | 4;
      }
    }
    if ((uVar7 & 8) != 0) {
      local_68.style = 0xb;
      local_68.hbrBackground = (HBRUSH)0x6;
      iVar1 = FUN_18002d1dc(&local_68,L"AfxFrameOrView80su",0x7a02);
      if (iVar1 != 0) {
        uVar6 = uVar6 | 8;
      }
    }
    if ((uVar7 & 0x10) != 0) {
      local_res10.dwICC = 0xff;
      uVar2 = _AfxInitCommonControls(&local_res10,0x3fc0);
      uVar6 = uVar6 | uVar2;
      uVar7 = uVar7 & 0xffffc03f;
    }
    if ((uVar7 & 0x40) != 0) {
      local_res10.dwICC = 0x10;
      uVar2 = _AfxInitCommonControls(&local_res10,0x40);
      uVar6 = uVar6 | uVar2;
    }
    if ((char)uVar7 < '\0') {
      local_res10.dwICC = 2;
      uVar2 = _AfxInitCommonControls(&local_res10,0x80);
      uVar6 = uVar6 | uVar2;
    }
    if ((uVar7 >> 8 & 1) != 0) {
      local_res10.dwICC = 8;
      uVar2 = _AfxInitCommonControls(&local_res10,0x100);
      uVar6 = uVar6 | uVar2;
    }
    if ((uVar7 >> 9 & 1) != 0) {
      local_res10.dwICC = 0x20;
      uVar2 = _AfxInitCommonControls(&local_res10,0x200);
      uVar6 = uVar6 | uVar2;
    }
    if ((uVar7 >> 10 & 1) != 0) {
      local_res10.dwICC = 1;
      uVar2 = _AfxInitCommonControls(&local_res10,0x400);
      uVar6 = uVar6 | uVar2;
    }
    if ((uVar7 >> 0xb & 1) != 0) {
      local_res10.dwICC = 0x40;
      uVar2 = _AfxInitCommonControls(&local_res10,0x800);
      uVar6 = uVar6 | uVar2;
    }
    if ((uVar7 >> 0xc & 1) != 0) {
      local_res10.dwICC = 4;
      uVar2 = _AfxInitCommonControls(&local_res10,0x1000);
      uVar6 = uVar6 | uVar2;
    }
    if ((uVar7 >> 0xd & 1) != 0) {
      local_res10.dwICC = 0x80;
      uVar2 = _AfxInitCommonControls(&local_res10,0x2000);
      uVar6 = uVar6 | uVar2;
    }
    if ((uVar7 >> 0xe & 1) != 0) {
      local_res10.dwICC = 0x800;
      uVar2 = _AfxInitCommonControls(&local_res10,0x4000);
      uVar6 = uVar6 | uVar2;
    }
    if ((uVar7 >> 0xf & 1) != 0) {
      local_res10.dwICC = 0x400;
      uVar2 = _AfxInitCommonControls(&local_res10,0x8000);
      uVar6 = uVar6 | uVar2;
    }
    if ((uVar7 >> 0x10 & 1) != 0) {
      local_res10.dwICC = 0x200;
      uVar2 = _AfxInitCommonControls(&local_res10,0x10000);
      uVar6 = uVar6 | uVar2;
    }
    if ((uVar7 >> 0x11 & 1) != 0) {
      local_res10.dwICC = 0x100;
      uVar2 = _AfxInitCommonControls(&local_res10,0x20000);
      uVar6 = uVar6 | uVar2;
    }
    if ((uVar7 >> 0x12 & 1) != 0) {
      local_res10.dwICC = 0x8000;
      uVar2 = _AfxInitCommonControls(&local_res10,0x40000);
      uVar6 = uVar6 | uVar2;
    }
    *(uint *)(lVar3 + 0x2c) = *(uint *)(lVar3 + 0x2c) | uVar6;
    if ((*(uint *)(lVar3 + 0x2c) & 0x3fc0) == 0x3fc0) {
      uVar6 = uVar6 | 0x10;
      *(uint *)(lVar3 + 0x2c) = *(uint *)(lVar3 + 0x2c) | 0x10;
    }
    bVar8 = (uVar6 & uVar7) == uVar7;
  }
  return bVar8;
}


==================================================================

### EXPORT FUNC 18002d5d8 (48 bytes) name=PreCreateWindow

/* Library Function - Multiple Matches With Same Base Name
    public: virtual int __cdecl CWnd::PreCreateWindow(struct tagCREATESTRUCTA & __ptr64) __ptr64
    public: virtual int __cdecl CWnd::PreCreateWindow(struct tagCREATESTRUCTW & __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

undefined8 PreCreateWindow(undefined8 param_1,longlong param_2)

{
  if (*(longlong *)(param_2 + 0x40) == 0) {
    FUN_18002d230(1);
    *(wchar_t **)(param_2 + 0x40) = L"AfxWnd80su";
  }
  return 1;
}


==================================================================

### EXPORT FUNC 18002d608 (165 bytes) name=FUN_18002d608

int FUN_18002d608(longlong param_1,LPCWSTR param_2)

{
  HMODULE hModule;
  int iVar1;
  longlong lVar2;
  HRSRC hResInfo;
  HGLOBAL hResData;
  ushort *puVar3;
  
  puVar3 = (ushort *)0x0;
  hResData = (HGLOBAL)0x0;
  if (param_2 != (LPCWSTR)0x0) {
    lVar2 = FUN_180022bb4();
    hModule = *(HMODULE *)(lVar2 + 0x18);
    hResInfo = FindResourceW(hModule,param_2,(LPCWSTR)0xf0);
    if (hResInfo != (HRSRC)0x0) {
      hResData = LoadResource(hModule,hResInfo);
      if (hResData == (HGLOBAL)0x0) {
        return 0;
      }
      puVar3 = LockResource(hResData);
    }
  }
  iVar1 = FUN_18002d064(param_1,puVar3);
  if ((puVar3 != (ushort *)0x0) && (hResData != (HGLOBAL)0x0)) {
    FreeResource(hResData);
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 18002d6b0 (379 bytes) name=FUN_18002d6b0

uint FUN_18002d6b0(longlong param_1,ulonglong param_2,undefined8 param_3,undefined *param_4,
                  undefined8 *param_5,ulonglong param_6,longlong *param_7)

{
  uint uVar1;
  
  if (param_1 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (param_7 != (longlong *)0x0) {
    *param_7 = param_1;
    param_7[1] = (longlong)param_4;
    return 1;
  }
  if (param_6 < 0x3f) {
    if (param_6 == 0x3e) {
      if (param_5 != (undefined8 *)0x0) {
        (*(code *)param_4)(param_1,param_2,param_5[1],*param_5);
        return 1;
      }
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    if (param_6 == 0x38) {
      (*(code *)param_4)();
      return 1;
    }
    if (param_6 == 0x39) {
      uVar1 = (*(code *)param_4)();
      return uVar1;
    }
    if (param_6 == 0x3a) {
      (*(code *)param_4)();
      return 1;
    }
    if (param_6 == 0x3b) {
      uVar1 = (*(code *)param_4)();
      return uVar1;
    }
    if (param_6 == 0x3c) {
      if (param_5 != (undefined8 *)0x0) {
        (*(code *)param_4)(param_1,param_5[1],*param_5);
        return 1;
      }
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    if (param_6 == 0x3d) {
      if (param_5 != (undefined8 *)0x0) {
        uVar1 = (*(code *)param_4)(param_1,param_5[1],*param_5);
        return uVar1;
      }
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
LAB_18002d7b2:
    uVar1 = 0;
  }
  else {
    if (param_6 == 0x3f) {
      if (param_5 != (undefined8 *)0x0) {
        uVar1 = (*(code *)param_4)(param_1,param_2,param_5[1],*param_5);
        return uVar1;
      }
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    if (param_6 == 0x40) {
      if (param_5 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      (*(code *)param_4)(param_1,param_5);
    }
    else {
      if (param_6 != 0x41) {
        if (param_6 == 0x42) {
          (*(code *)param_4)(param_1,param_5);
          return 1;
        }
        if (param_6 == 0x43) {
          uVar1 = (*(code *)param_4)(param_1,param_5);
          return uVar1;
        }
        goto LAB_18002d7b2;
      }
      if (param_5 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      (*(code *)param_4)(param_1,param_5,param_2 & 0xffffffff);
    }
    uVar1 = (uint)(*(int *)((longlong)param_5 + 0x2c) == 0);
    *(undefined4 *)((longlong)param_5 + 0x2c) = 0;
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 18002d834 (384 bytes) name=FUN_18002d834

uint FUN_18002d834(longlong *param_1,uint param_2,ulonglong param_3,undefined8 *param_4,
                  longlong *param_5)

{
  void *_Buf1;
  uint uVar1;
  int iVar2;
  longlong lVar3;
  undefined8 *puVar4;
  longlong *plVar5;
  AFX_MSGMAP_ENTRY *pAVar6;
  uint uVar7;
  
  uVar1 = (uint)param_3;
  if (uVar1 == 0xfffffffe) {
    lVar3 = FUN_180022bb4();
    if (*(longlong *)(lVar3 + 0x68) != 0) {
      lVar3 = FUN_180022bb4();
      uVar1 = (**(code **)(**(longlong **)(lVar3 + 0x68) + 8))
                        (*(longlong **)(lVar3 + 0x68),param_1,param_2,param_4,param_5);
      return uVar1;
    }
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (uVar1 == 0xfffffffd) {
    uVar1 = 0;
    if (param_4 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    _Buf1 = (void *)param_4[10];
    puVar4 = (undefined8 *)(**(code **)(*param_1 + 0x58))();
    do {
      if (puVar4 == (undefined8 *)0x0) {
        return uVar1;
      }
      if (uVar1 != 0) {
        return uVar1;
      }
      plVar5 = (longlong *)puVar4[1];
      while (((*(uint *)(plVar5 + 1) != 0 && (*(int *)((longlong)plVar5 + 0xc) != 0)) &&
             (uVar1 == 0))) {
        if (param_2 == *(uint *)(plVar5 + 1)) {
          if (_Buf1 == (void *)0x0) {
            if (*plVar5 == 0) {
LAB_18002d902:
              uVar1 = 1;
              *(undefined4 *)(param_4 + 1) = *(undefined4 *)((longlong)plVar5 + 0xc);
            }
          }
          else if (((void *)*plVar5 != (void *)0x0) &&
                  (iVar2 = memcmp(_Buf1,(void *)*plVar5,0x10), iVar2 == 0)) goto LAB_18002d902;
        }
        plVar5 = plVar5 + 2;
      }
      puVar4 = (undefined8 *)*puVar4;
    } while( true );
  }
  if (uVar1 != 0xffffffff) {
    uVar1 = uVar1 & 0xffff;
    uVar7 = (uint)(param_3 >> 0x10) & 0xffff;
    if ((param_3 & 0xffff0000) != 0) goto LAB_18002d940;
  }
  uVar7 = 0x111;
LAB_18002d940:
  plVar5 = (longlong *)(**(code **)(*param_1 + 0x50))();
  while( true ) {
    if (*plVar5 == 0) {
      return 0;
    }
    pAVar6 = AfxFindMessageEntry((AFX_MSGMAP_ENTRY *)plVar5[1],uVar7,uVar1,param_2);
    if (pAVar6 != (AFX_MSGMAP_ENTRY *)0x0) break;
    plVar5 = (longlong *)(*(code *)*plVar5)();
  }
  uVar1 = FUN_18002d6b0((longlong)param_1,(ulonglong)param_2,(ulonglong)uVar1,
                        *(undefined **)(pAVar6 + 0x18),param_4,*(ulonglong *)(pAVar6 + 0x10),param_5
                       );
  return uVar1;
}


==================================================================

### EXPORT FUNC 18002d9b8 (3 bytes) name=FUN_18002d9b8

undefined8 FUN_18002d9b8(void)

{
  return 0;
}


==================================================================

### EXPORT FUNC 18002d9bc (6 bytes) name=FUN_18002d9bc

undefined8 FUN_18002d9bc(void)

{
  return 0x80029c4a;
}


==================================================================

### EXPORT FUNC 18002d9c4 (8 bytes) name=FUN_18002d9c4

undefined * FUN_18002d9c4(void)

{
  return &DAT_180056728;
}


==================================================================

### EXPORT FUNC 18002d9cc (8 bytes) name=FUN_18002d9cc

undefined * FUN_18002d9cc(void)

{
  return &DAT_180056600;
}


==================================================================

### EXPORT FUNC 18002d9d4 (8 bytes) name=FUN_18002d9d4

undefined * FUN_18002d9d4(void)

{
  return &DAT_180056668;
}


==================================================================

### EXPORT FUNC 18002d9dc (8 bytes) name=FUN_18002d9dc

undefined * FUN_18002d9dc(void)

{
  return &DAT_1800566a0;
}


==================================================================

### EXPORT FUNC 18002d9e4 (72 bytes) name=OnFinalRelease

/* Library Function - Single Match
    public: virtual void __cdecl CCmdTarget::OnFinalRelease(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CCmdTarget::OnFinalRelease(CCmdTarget *this)

{
  CTypeLibCache *this_00;
  
  FUN_1800237a0(0xd);
  this_00 = (CTypeLibCache *)(**(code **)(*(longlong *)this + 0x40))(this);
  if (this_00 != (CTypeLibCache *)0x0) {
    CTypeLibCache::Unlock(this_00);
  }
  FUN_180023834(0xd);
                    /* WARNING: Could not recover jumptable at 0x00018002da28. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*(longlong *)this + 8))(this,1);
  return;
}


==================================================================

### EXPORT FUNC 18002da2c (8 bytes) name=FUN_18002da2c

undefined * FUN_18002da2c(void)

{
  return &DAT_1800566c0;
}


==================================================================

### EXPORT FUNC 18002da34 (8 bytes) name=FUN_18002da34

undefined * FUN_18002da34(void)

{
  return &DAT_1800566e0;
}


==================================================================

### EXPORT FUNC 18002da3c (47 bytes) name=CCmdUI

/* Library Function - Single Match
    public: __cdecl CCmdUI::CCmdUI(void) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

CCmdUI * __thiscall CCmdUI::CCmdUI(CCmdUI *this)

{
  *(undefined ***)this = vftable;
  *(undefined4 *)(this + 0x30) = 0;
  *(undefined4 *)(this + 0xc) = 0;
  *(undefined4 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x38) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined4 *)(this + 0x2c) = 0;
  *(undefined4 *)(this + 0x28) = 0;
  return this;
}


==================================================================

### EXPORT FUNC 18002da6c (56 bytes) name=CCmdTarget

/* Library Function - Single Match
    public: __cdecl CCmdTarget::CCmdTarget(void) __ptr64
   
   Library: Visual Studio 2008 Release */

CCmdTarget * __thiscall CCmdTarget::CCmdTarget(CCmdTarget *this)

{
  undefined8 uVar1;
  
  uVar1 = FUN_180022bb4();
  *(undefined8 *)(this + 0x38) = uVar1;
  *(undefined4 *)(this + 8) = 1;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  *(undefined8 *)(this + 0x30) = 0;
  *(undefined4 *)(this + 0x28) = 1;
  return this;
}


==================================================================

### EXPORT FUNC 18002daa4 (35 bytes) name=~CCmdTarget

/* Library Function - Single Match
    public: virtual __cdecl CCmdTarget::~CCmdTarget(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CCmdTarget::~CCmdTarget(CCmdTarget *this)

{
  if (*(longlong *)(this + 0x20) != 0) {
    (**(code **)(*(longlong *)(this + 0x20) + 0x38))();
  }
  *(undefined8 *)(this + 0x38) = 0;
  return;
}


==================================================================

### EXPORT FUNC 18002dac8 (32 bytes) name=FUN_18002dac8

void FUN_18002dac8(void)

{
  longlong lVar1;
  
  lVar1 = FUN_180022bb4();
                    /* WARNING: Could not recover jumptable at 0x00018002dae1. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(**(longlong **)(lVar1 + 8) + 0x138))(*(longlong **)(lVar1 + 8),1);
  return;
}


==================================================================

### EXPORT FUNC 18002dae8 (30 bytes) name=EndWaitCursor

/* Library Function - Single Match
    public: void __cdecl CCmdTarget::EndWaitCursor(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

void __thiscall CCmdTarget::EndWaitCursor(CCmdTarget *this)

{
  longlong lVar1;
  
  lVar1 = FUN_180022bb4();
                    /* WARNING: Could not recover jumptable at 0x00018002daff. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(**(longlong **)(lVar1 + 8) + 0x138))(*(longlong **)(lVar1 + 8),0xffffffff);
  return;
}


==================================================================

### EXPORT FUNC 18002db08 (186 bytes) name=FUN_18002db08

void FUN_18002db08(longlong param_1,int param_2)

{
  longlong lVar1;
  HWND pHVar2;
  CWnd *pCVar3;
  
  if (*(longlong *)(param_1 + 0x10) == 0) {
    if (*(longlong *)(param_1 + 0x20) == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    if (param_2 == 0) {
      lVar1 = *(longlong *)(param_1 + 0x20);
      pHVar2 = GetFocus();
      if (pHVar2 == *(HWND *)(lVar1 + 0x40)) {
        pHVar2 = GetParent(*(HWND *)(lVar1 + 0x40));
        pCVar3 = CWnd::FromHandle(pHVar2);
        SendMessageW(*(HWND *)(pCVar3 + 0x40),0x28,0,0);
      }
    }
    CWnd::EnableWindow(*(CWnd **)(param_1 + 0x20),param_2);
  }
  else {
    if (*(longlong *)(param_1 + 0x18) != 0) {
      return;
    }
    if (*(uint *)(param_1 + 0x30) <= *(uint *)(param_1 + 0xc)) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    EnableMenuItem(*(HMENU *)(*(longlong *)(param_1 + 0x10) + 8),*(uint *)(param_1 + 0xc),
                   ~-(uint)(param_2 != 0) & 3 | 0x400);
  }
  *(undefined4 *)(param_1 + 0x28) = 1;
  return;
}


==================================================================

### EXPORT FUNC 18002dbc4 (149 bytes) name=FUN_18002dbc4

void FUN_18002dbc4(longlong param_1,int param_2)

{
  ulonglong uVar1;
  
  if (*(longlong *)(param_1 + 0x10) == 0) {
    if (*(longlong *)(param_1 + 0x20) == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    uVar1 = SendMessageW(*(HWND *)(*(longlong *)(param_1 + 0x20) + 0x40),0x87,0,0);
    if ((uVar1 >> 0xd & 1) != 0) {
      SendMessageW(*(HWND *)(*(longlong *)(param_1 + 0x20) + 0x40),0xf1,(longlong)param_2,0);
    }
  }
  else if (*(longlong *)(param_1 + 0x18) == 0) {
    if (*(uint *)(param_1 + 0x30) <= *(uint *)(param_1 + 0xc)) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    CheckMenuItem(*(HMENU *)(*(longlong *)(param_1 + 0x10) + 8),*(uint *)(param_1 + 0xc),
                  -(uint)(param_2 != 0) & 8 | 0x400);
  }
  return;
}


==================================================================

### EXPORT FUNC 18002dc5c (145 bytes) name=FUN_18002dc5c

void FUN_18002dc5c(longlong param_1,LPCWSTR param_2)

{
  UINT UVar1;
  
  if (param_2 == (LPCWSTR)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (*(longlong *)(param_1 + 0x10) == 0) {
    if (*(longlong *)(param_1 + 0x20) == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    FUN_180030548(*(HWND *)(*(longlong *)(param_1 + 0x20) + 0x40),param_2);
  }
  else if (*(longlong *)(param_1 + 0x18) == 0) {
    UVar1 = GetMenuState(*(HMENU *)(*(longlong *)(param_1 + 0x10) + 8),*(UINT *)(param_1 + 0xc),
                         0x400);
    if (*(uint *)(param_1 + 0x30) <= *(uint *)(param_1 + 0xc)) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    ModifyMenuW(*(HMENU *)(*(longlong *)(param_1 + 0x10) + 8),*(uint *)(param_1 + 0xc),
                UVar1 & 0xfffff6fb | 0x400,(ulonglong)*(uint *)(param_1 + 8),param_2);
  }
  return;
}


==================================================================

### EXPORT FUNC 18002dcf0 (339 bytes) name=FUN_18002dcf0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

void FUN_18002dcf0(void)

{
  byte bVar1;
  LONG LVar2;
  undefined1 *puVar3;
  int iVar4;
  int nWidth;
  int nHeight;
  longlong lVar5;
  ushort uVar6;
  byte *pbVar7;
  int iVar8;
  undefined1 auStackY_c8 [32];
  ulonglong local_98 [16];
  ulonglong local_18;
  
  local_18 = DAT_18006cea0 ^ (ulonglong)auStackY_c8;
  LVar2 = GetMenuCheckMarkDimensions();
  nWidth = (int)(short)LVar2;
  nHeight = (int)(short)((uint)LVar2 >> 0x10);
  if ((4 < nWidth) && (lVar5 = 5, 5 < nHeight)) {
    if (0x20 < nWidth) {
      nWidth = 0x20;
    }
    iVar4 = nWidth + 0xf >> 4;
    iVar8 = (iVar4 * 0x10 + (nWidth + -4) / 2) - nWidth;
    if (0xc < iVar8) {
      iVar8 = 0xc;
    }
    if (0x20 < nHeight) {
      nHeight = 0x20;
    }
    FUN_1800357d0(local_98,0xff,0x80);
    pbVar7 = &DAT_1800566f0;
    puVar3 = (undefined1 *)
             ((longlong)local_98 + (longlong)(nHeight + -6 >> 1) * (longlong)iVar4 * 2);
    do {
      bVar1 = *pbVar7;
      pbVar7 = pbVar7 + 1;
      uVar6 = ~((ushort)bVar1 << ((byte)iVar8 & 0x1f));
      puVar3[1] = (char)uVar6;
      *puVar3 = (char)(uVar6 >> 8);
      puVar3 = puVar3 + (longlong)iVar4 * 2;
      lVar5 = lVar5 + -1;
    } while (lVar5 != 0);
    DAT_180072530 = CreateBitmap(nWidth,nHeight,1,1,local_98);
    if (DAT_180072530 == (HBITMAP)0x0) {
      DAT_180072530 = LoadBitmapW((HINSTANCE)0x0,(LPCWSTR)0x7fe3);
    }
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18001ed90();
}


==================================================================

### EXPORT FUNC 18002de44 (118 bytes) name=FUN_18002de44

void FUN_18002de44(longlong *param_1,int param_2)

{
  (**(code **)(*param_1 + 8))(param_1,param_2 != 0);
  if ((param_1[2] != 0) && (param_1[3] == 0)) {
    if (*(uint *)(param_1 + 6) <= *(uint *)((longlong)param_1 + 0xc)) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    if ((DAT_180072530 == (HBITMAP)0x0) && (FUN_18002dcf0(), DAT_180072530 == (HBITMAP)0x0)) {
      return;
    }
    SetMenuItemBitmaps(*(HMENU *)(param_1[2] + 8),*(UINT *)((longlong)param_1 + 0xc),0x400,
                       (HBITMAP)0x0,DAT_180072530);
  }
  return;
}


==================================================================

### EXPORT FUNC 18002debc (37 bytes) name=OnOK

/* Library Function - Single Match
    protected: virtual void __cdecl CCommonDialog::OnOK(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

void __thiscall CCommonDialog::OnOK(CCommonDialog *this)

{
  int iVar1;
  
  iVar1 = CWnd::UpdateData((CWnd *)this,1);
  if (iVar1 != 0) {
    FUN_1800294c4((longlong *)this);
  }
  return;
}


==================================================================

### EXPORT FUNC 18002dee4 (5 bytes) name=thunk_FUN_1800294c4

void thunk_FUN_1800294c4(longlong *param_1)

{
  void *pvVar1;
  
  pvVar1 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
  if (pvVar1 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
                    /* WARNING: Could not recover jumptable at 0x00018002950e. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(*param_1 + 0x220))
            (param_1,*(undefined4 *)((longlong)pvVar1 + 0xa0),
             *(undefined8 *)((longlong)pvVar1 + 0xa8),*(undefined8 *)((longlong)pvVar1 + 0xb0));
  return;
}


==================================================================

### EXPORT FUNC 18002deec (24 bytes) name=FUN_18002deec

bool FUN_18002deec(longlong *param_1)

{
  longlong lVar1;
  
  lVar1 = FUN_1800294c4(param_1);
  return lVar1 != 0;
}


==================================================================

### EXPORT FUNC 18002df04 (8 bytes) name=FUN_18002df04

undefined8 FUN_18002df04(void)

{
  return 0x180056780;
}


==================================================================

### EXPORT FUNC 18002df0c (562 bytes) name=FUN_18002df0c

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

ulonglong FUN_18002df0c(HWND__ *param_1,uint param_2,ulonglong param_3,ulonglong param_4)

{
  int iVar1;
  uint uVar2;
  void *pvVar3;
  CWnd *pCVar4;
  __int64 _Var5;
  longlong lVar6;
  
  if (param_1 != (HWND__ *)0x0) {
    pvVar3 = FUN_180023520((int *)&DAT_18006ede0,CThreadLocal<_AFX_THREAD_STATE>::CreateObject);
    if (pvVar3 == (void *)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    if ((*(longlong *)((longlong)pvVar3 + 0x30) != 0) &&
       (pCVar4 = CWnd::FromHandlePermanent(param_1), pCVar4 == (CWnd *)0x0)) {
      CWnd::SubclassWindow(*(CWnd **)((longlong)pvVar3 + 0x30),param_1);
      *(undefined8 *)((longlong)pvVar3 + 0x30) = 0;
    }
    if (param_2 == 0x110) {
      DAT_1800724a8 = RegisterWindowMessageW(L"commdlg_LBSelChangedNotify");
      DAT_1800724ac = RegisterWindowMessageW(L"commdlg_ShareViolation");
      DAT_1800724b0 = RegisterWindowMessageW(L"commdlg_FileNameOK");
      DAT_1800724b4 = RegisterWindowMessageW(L"commdlg_ColorOK");
      DAT_1800724b8 = RegisterWindowMessageW(L"commdlg_help");
      _DAT_1800724bc = RegisterWindowMessageW(L"commdlg_SetRGBColor");
      _Var5 = AfxDlgProc(param_1,0x110,param_3,param_4);
      uVar2 = (uint)_Var5;
LAB_18002e011:
      return (ulonglong)uVar2;
    }
    if ((param_2 == DAT_1800724b8) || ((param_2 == 0x111 && ((short)param_3 == 0x40e)))) {
      SendMessageW(param_1,0x111,0xe146,0);
      return 1;
    }
    if (((0xbfff < param_2) && (pCVar4 = CWnd::FromHandlePermanent(param_1), pCVar4 != (CWnd *)0x0))
       && ((iVar1 = FUN_180024628((undefined8 *)pCVar4,0x180053db0), iVar1 == 0 ||
           (lVar6 = FUN_18001f004((longlong)pCVar4), (*(uint *)(lVar6 + 0x60) >> 0x13 & 1) == 0))))
    {
      if (param_2 == DAT_1800724ac) {
        uVar2 = (**(code **)(*(longlong *)pCVar4 + 0x2b8))(pCVar4,param_4);
        goto LAB_18002e011;
      }
      if (param_2 == DAT_1800724b0) {
        *(ulonglong *)(pCVar4 + 0x388) = param_4;
        iVar1 = (**(code **)(*(longlong *)pCVar4 + 0x2c0))(pCVar4);
        *(undefined8 *)(pCVar4 + 0x388) = 0;
LAB_18002e0be:
        return (longlong)iVar1;
      }
      if (param_2 == DAT_1800724a8) {
        (**(code **)(*(longlong *)pCVar4 + 0x2c8))
                  (pCVar4,param_3 & 0xffffffff,param_4 & 0xffff,param_4 >> 0x10 & 0xffff);
      }
      else if (param_2 == DAT_1800724b4) {
        iVar1 = (**(code **)(*(longlong *)pCVar4 + 0x2b8))(pCVar4);
        goto LAB_18002e0be;
      }
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 18002e140 (17 bytes) name=FUN_18002e140

void FUN_18002e140(longlong param_1)

{
                    /* WARNING: Could not recover jumptable at 0x00018002e14a. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (**(code **)(**(longlong **)(param_1 + 0x98) + 0xb0))();
  return;
}


==================================================================

### EXPORT FUNC 18002e154 (39 bytes) name=PaintWindowlessControls

/* Library Function - Single Match
    public: int __cdecl CWnd::PaintWindowlessControls(class CDC * __ptr64) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

int __thiscall CWnd::PaintWindowlessControls(CWnd *this,CDC *param_1)

{
  int iVar1;
  
  if (*(longlong *)(this + 0x98) == 0) {
    iVar1 = 0;
  }
  else {
    iVar1 = (**(code **)(**(longlong **)(this + 0x98) + 0x130))();
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 18002e17c (55 bytes) name=GetDlgItem

/* Library Function - Single Match
    public: class CWnd * __ptr64 __cdecl CWnd::GetDlgItem(int)const __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

CWnd * __thiscall CWnd::GetDlgItem(CWnd *this,int param_1)

{
  HWND pHVar1;
  CWnd *pCVar2;
  
  if (*(longlong *)(this + 0x98) == 0) {
    pHVar1 = ::GetDlgItem(*(HWND *)(this + 0x40),param_1);
    pCVar2 = FromHandle(pHVar1);
  }
  else {
    pCVar2 = (CWnd *)(**(code **)(**(longlong **)(this + 0x98) + 0xe8))();
  }
  return pCVar2;
}


==================================================================

### EXPORT FUNC 18002e1b4 (67 bytes) name=FID_conflict:IsDialogMessageW

/* Library Function - Multiple Matches With Different Base Names
    public: int __cdecl CWnd::IsDialogMessageA(struct tagMSG * __ptr64) __ptr64
    public: int __cdecl CWnd::IsDialogMessageW(struct tagMSG * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

BOOL __stdcall FID_conflict_IsDialogMessageW(HWND hDlg,LPMSG lpMsg)

{
  BOOL BVar1;
  longlong lVar2;
  
  if (((uint)hDlg[0x1e].unused >> 8 & 1) == 0) {
    BVar1 = IsDialogMessageW(*(HWND *)(hDlg + 0x10),lpMsg);
  }
  else {
    lVar2 = FUN_180022bb4();
    BVar1 = (**(code **)(**(longlong **)(lVar2 + 0x68) + 0x50))
                      (*(longlong **)(lVar2 + 0x68),hDlg,lpMsg);
  }
  return BVar1;
}


==================================================================

### EXPORT FUNC 18002e1f8 (52 bytes) name=GetStyle

/* Library Function - Single Match
    public: unsigned long __cdecl CWnd::GetStyle(void)const __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

ulong __thiscall CWnd::GetStyle(CWnd *this)

{
  ulong uVar1;
  
  if (*(longlong *)(this + 0xa0) == 0) {
    uVar1 = GetWindowLongW(*(HWND *)(this + 0x40),-0x10);
  }
  else {
    uVar1 = (**(code **)(**(longlong **)(this + 0xa0) + 0xf0))();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 18002e22c (52 bytes) name=GetExStyle

/* Library Function - Single Match
    public: unsigned long __cdecl CWnd::GetExStyle(void)const __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

ulong __thiscall CWnd::GetExStyle(CWnd *this)

{
  ulong uVar1;
  
  if (*(longlong *)(this + 0xa0) == 0) {
    uVar1 = GetWindowLongW(*(HWND *)(this + 0x40),-0x14);
  }
  else {
    uVar1 = (**(code **)(**(longlong **)(this + 0xa0) + 0xf8))();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 18002e260 (47 bytes) name=FUN_18002e260

void FUN_18002e260(longlong param_1,int param_2)

{
  if (*(longlong *)(param_1 + 0xa0) == 0) {
    ShowWindow(*(HWND *)(param_1 + 0x40),param_2);
  }
  else {
    (**(code **)(**(longlong **)(param_1 + 0xa0) + 0x140))();
  }
  return;
}


==================================================================

### EXPORT FUNC 18002e290 (47 bytes) name=IsWindowEnabled

/* Library Function - Single Match
    public: int __cdecl CWnd::IsWindowEnabled(void)const __ptr64
   
   Library: Visual Studio 2008 Release */

int __thiscall CWnd::IsWindowEnabled(CWnd *this)

{
  BOOL BVar1;
  
  if (*(longlong *)(this + 0xa0) == 0) {
    BVar1 = ::IsWindowEnabled(*(HWND *)(this + 0x40));
  }
  else {
    BVar1 = (**(code **)(**(longlong **)(this + 0xa0) + 0x148))();
  }
  return BVar1;
}


==================================================================

### EXPORT FUNC 18002e2c0 (47 bytes) name=EnableWindow

/* Library Function - Multiple Matches With Different Base Names
    public: int __cdecl CWnd::EnableWindow(int) __ptr64
    public: int __cdecl CWnd::IsWindowEnabled(void)const __ptr64
   
   Library: Visual Studio 2008 Release */

int __thiscall CWnd::EnableWindow(CWnd *this,int param_1)

{
  BOOL BVar1;
  
  if (*(longlong *)(this + 0xa0) == 0) {
    BVar1 = ::EnableWindow(*(HWND *)(this + 0x40),param_1);
  }
  else {
    BVar1 = (**(code **)(**(longlong **)(this + 0xa0) + 0x150))();
  }
  return BVar1;
}


==================================================================

### EXPORT FUNC 18002e2f0 (55 bytes) name=FUN_18002e2f0

void FUN_18002e2f0(longlong param_1)

{
  HWND pHVar1;
  
  if (*(longlong *)(param_1 + 0xa0) == 0) {
    pHVar1 = SetFocus(*(HWND *)(param_1 + 0x40));
    CWnd::FromHandle(pHVar1);
  }
  else {
    (**(code **)(**(longlong **)(param_1 + 0xa0) + 0x160))();
  }
  return;
}


==================================================================

### EXPORT FUNC 18002e328 (118 bytes) name=SetWindowPos

/* Library Function - Single Match
    public: int __cdecl CWnd::SetWindowPos(class CWnd const * __ptr64,int,int,int,int,unsigned int)
   __ptr64
   
   Library: Visual Studio 2008 Release */

int __thiscall
CWnd::SetWindowPos(CWnd *this,CWnd *param_1,int param_2,int param_3,int param_4,int param_5,
                  uint param_6)

{
  BOOL BVar1;
  HWND hWndInsertAfter;
  
  hWndInsertAfter = (HWND)0x0;
  if (*(longlong *)(this + 0xa0) == 0) {
    if (param_1 != (CWnd *)0x0) {
      hWndInsertAfter = *(HWND *)(param_1 + 0x40);
    }
    BVar1 = ::SetWindowPos(*(HWND *)(this + 0x40),hWndInsertAfter,param_2,param_3,param_4,param_5,
                           param_6);
  }
  else {
    BVar1 = (**(code **)(**(longlong **)(this + 0xa0) + 0x138))
                      (*(longlong **)(this + 0xa0),param_1,param_2,param_3,param_4,param_5,param_6);
  }
  return BVar1;
}


==================================================================

### EXPORT FUNC 18002e3a0 (101 bytes) name=AttachControlSite

/* Library Function - Single Match
    protected: void __cdecl CWnd::AttachControlSite(class CHandleMap * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CWnd::AttachControlSite(CWnd *this,CHandleMap *param_1)

{
  HWND pHVar1;
  longlong lVar2;
  
  if ((this != (CWnd *)0x0) && (*(longlong *)(this + 0xa0) == 0)) {
    pHVar1 = GetParent(*(HWND *)(this + 0x40));
    lVar2 = FUN_180030118((longlong)(param_1 + 0x30),(ulonglong)pHVar1);
    if ((lVar2 != 0) && (*(longlong *)(lVar2 + 0x98) != 0)) {
      (**(code **)(**(longlong **)(lVar2 + 0x98) + 0x138))(*(longlong **)(lVar2 + 0x98),this,0);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18002e408 (9 bytes) name=FUN_18002e408

bool FUN_18002e408(longlong param_1)

{
  return param_1 != 0;
}


==================================================================

### EXPORT FUNC 18002e414 (466 bytes) name=FUN_18002e414

int FUN_18002e414(longlong param_1,ulonglong *param_2,uint param_3)

{
  longlong *plVar1;
  uint uVar2;
  uint uVar3;
  undefined8 uVar4;
  int iVar5;
  void *pvVar6;
  uint uVar7;
  int iVar8;
  uint uVar9;
  ulonglong uVar10;
  ulonglong *puVar11;
  int iVar12;
  longlong lVar13;
  
  if ((param_3 == 0) || (param_2 == (ulonglong *)0x0)) {
    iVar12 = 0;
  }
  else {
    if ((*(byte *)(param_1 + 0x20) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18002eec0(4,*(short **)(param_1 + 0x18));
    }
    plVar1 = (longlong *)(param_1 + 0x40);
    uVar7 = *(int *)plVar1 - *(int *)(param_1 + 0x38);
    uVar10 = (ulonglong)uVar7;
    if (param_3 < uVar7) {
      uVar10 = (ulonglong)param_3;
    }
    uVar4 = FUN_180032c60(param_2,(ulonglong)param_3,*(void **)(param_1 + 0x38),uVar10);
    iVar12 = (int)uVar4;
    if (iVar12 != 0) {
      if (iVar12 == 0xc) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed6c();
      }
      if ((iVar12 == 0x16) || (iVar12 == 0x22)) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      if (iVar12 != 0x50) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
    }
    *(longlong *)(param_1 + 0x38) = *(longlong *)(param_1 + 0x38) + uVar10;
    puVar11 = (ulonglong *)((longlong)param_2 + uVar10);
    uVar7 = param_3 - (int)uVar10;
    if (uVar7 != 0) {
      iVar8 = uVar7 - uVar7 % *(uint *)(param_1 + 0x28);
      iVar5 = 0;
      iVar12 = iVar8;
      do {
        uVar2 = (**(code **)(**(longlong **)(param_1 + 0x30) + 0x68))
                          (*(longlong **)(param_1 + 0x30),puVar11,iVar12);
        iVar5 = iVar5 + uVar2;
        iVar12 = iVar12 - uVar2;
        puVar11 = (ulonglong *)((longlong)puVar11 + (ulonglong)uVar2);
        if (uVar2 == 0) break;
      } while (iVar12 != 0);
      uVar7 = uVar7 - iVar5;
      if ((uVar7 != 0) && (iVar5 == iVar8)) {
        if (*(int *)(param_1 + 0xc) == 0) {
          uVar2 = uVar7;
          if ((*(int *)(param_1 + 0x10) == 0) &&
             (uVar2 = *(uint *)(param_1 + 0x28), *(uint *)(param_1 + 0x28) < uVar7)) {
            uVar2 = uVar7;
          }
          lVar13 = *(longlong *)(param_1 + 0x48);
          uVar9 = 0;
          do {
            uVar3 = (**(code **)(**(longlong **)(param_1 + 0x30) + 0x68))
                              (*(longlong **)(param_1 + 0x30),lVar13,uVar2);
            uVar9 = uVar9 + uVar3;
            uVar2 = uVar2 - uVar3;
            lVar13 = lVar13 + (ulonglong)uVar3;
            if ((uVar3 == 0) || (uVar2 == 0)) break;
          } while (uVar9 < uVar7);
          pvVar6 = *(void **)(param_1 + 0x48);
          *plVar1 = (ulonglong)uVar9 + (longlong)pvVar6;
        }
        else {
          (**(code **)(**(longlong **)(param_1 + 0x30) + 0xa0))
                    (*(longlong **)(param_1 + 0x30),0,*(undefined4 *)(param_1 + 0x28),param_1 + 0x48
                     ,plVar1);
          pvVar6 = *(void **)(param_1 + 0x48);
        }
        uVar2 = *(int *)plVar1 - (int)pvVar6;
        *(void **)(param_1 + 0x38) = pvVar6;
        if (uVar7 < uVar2) {
          uVar2 = uVar7;
        }
        uVar4 = FUN_180032c60(puVar11,(ulonglong)uVar7,pvVar6,(ulonglong)uVar2);
        iVar12 = (int)uVar4;
        if (iVar12 != 0) {
          if (iVar12 == 0xc) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed6c();
          }
          if ((iVar12 == 0x16) || (iVar12 == 0x22)) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed90();
          }
          if (iVar12 != 0x50) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed90();
          }
        }
        *(longlong *)(param_1 + 0x38) = *(longlong *)(param_1 + 0x38) + (ulonglong)uVar2;
        uVar7 = uVar7 - uVar2;
      }
    }
    iVar12 = param_3 - uVar7;
  }
  return iVar12;
}


==================================================================

### EXPORT FUNC 18002e5f0 (191 bytes) name=Flush

/* Library Function - Single Match
    public: void __cdecl CArchive::Flush(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CArchive::Flush(CArchive *this)

{
  CArchive *pCVar1;
  longlong lVar2;
  
  if (((byte)this[0x20] & 1) == 0) {
    pCVar1 = this + 0x48;
    if (*(int *)(this + 0xc) == 0) {
      lVar2 = *(longlong *)pCVar1;
      if (*(longlong *)(this + 0x38) != lVar2) {
        (**(code **)(**(longlong **)(this + 0x30) + 0x70))
                  (*(longlong **)(this + 0x30),lVar2,*(int *)(this + 0x38) - (int)lVar2);
      }
    }
    else {
      if (*(longlong *)(this + 0x38) != *(longlong *)pCVar1) {
        (**(code **)(**(longlong **)(this + 0x30) + 0xa0))
                  (*(longlong **)(this + 0x30),2,*(int *)(this + 0x38) - *(int *)pCVar1,0,0);
      }
      (**(code **)(**(longlong **)(this + 0x30) + 0xa0))
                (*(longlong **)(this + 0x30),1,*(undefined4 *)(this + 0x28),pCVar1,this + 0x40);
    }
    lVar2 = *(longlong *)pCVar1;
  }
  else {
    if (*(longlong *)(this + 0x40) != *(longlong *)(this + 0x38)) {
      (**(code **)(**(longlong **)(this + 0x30) + 0x50))
                (*(longlong **)(this + 0x30),
                 (longlong)((int)*(longlong *)(this + 0x38) - *(int *)(this + 0x40)),1);
    }
    lVar2 = *(longlong *)(this + 0x40);
  }
  *(longlong *)(this + 0x38) = lVar2;
  return;
}


==================================================================

### EXPORT FUNC 18002e6b0 (344 bytes) name=FUN_18002e6b0

void FUN_18002e6b0(longlong param_1,int param_2)

{
  longlong *plVar1;
  errno_t eVar2;
  void *_Dst;
  uint uVar3;
  uint uVar4;
  int iVar5;
  longlong lVar6;
  uint uVar7;
  ulonglong _MaxCount;
  
  if ((*(byte *)(param_1 + 0x20) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18002eec0(4,*(short **)(param_1 + 0x18));
  }
  plVar1 = (longlong *)(param_1 + 0x40);
  uVar3 = *(int *)plVar1 - *(int *)(param_1 + 0x38);
  _MaxCount = (ulonglong)uVar3;
  uVar7 = uVar3 + param_2;
  if (*(int *)(param_1 + 0xc) == 0) {
    _Dst = *(void **)(param_1 + 0x48);
    if (_Dst < *(void **)(param_1 + 0x38)) {
      if (0 < (int)uVar3) {
        eVar2 = memmove_s(_Dst,*plVar1 - (longlong)_Dst,*(void **)(param_1 + 0x38),_MaxCount);
        if (eVar2 != 0) {
          if (eVar2 == 0xc) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed6c();
          }
          if ((eVar2 == 0x16) || (eVar2 == 0x22)) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed90();
          }
          if (eVar2 != 0x50) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed90();
          }
        }
        _Dst = *(void **)(param_1 + 0x48);
        *(void **)(param_1 + 0x38) = _Dst;
        *plVar1 = _MaxCount + (longlong)_Dst;
      }
      if (*(int *)(param_1 + 0x10) == 0) {
        param_2 = *(int *)(param_1 + 0x28);
      }
      iVar5 = param_2 - uVar3;
      lVar6 = _MaxCount + (longlong)_Dst;
      do {
        uVar3 = (**(code **)(**(longlong **)(param_1 + 0x30) + 0x68))
                          (*(longlong **)(param_1 + 0x30),lVar6,iVar5);
        uVar4 = (int)_MaxCount + uVar3;
        _MaxCount = (ulonglong)uVar4;
        iVar5 = iVar5 - uVar3;
        lVar6 = lVar6 + (ulonglong)uVar3;
        if ((uVar3 == 0) || (iVar5 == 0)) break;
      } while (uVar4 < uVar7);
      *(longlong *)(param_1 + 0x38) = *(longlong *)(param_1 + 0x48);
      *plVar1 = _MaxCount + *(longlong *)(param_1 + 0x48);
    }
  }
  else {
    if (uVar3 != 0) {
      (**(code **)(**(longlong **)(param_1 + 0x30) + 0x50))();
    }
    (**(code **)(**(longlong **)(param_1 + 0x30) + 0xa0))
              (*(longlong **)(param_1 + 0x30),0,*(undefined4 *)(param_1 + 0x28),param_1 + 0x48,
               plVar1);
    *(undefined8 *)(param_1 + 0x38) = *(undefined8 *)(param_1 + 0x48);
  }
  if ((uint)(*(int *)plVar1 - *(int *)(param_1 + 0x38)) < uVar7) {
                    /* WARNING: Subroutine does not return */
    FUN_18002eec0(3,(short *)0x0);
  }
  return;
}


==================================================================

### EXPORT FUNC 18002e810 (369 bytes) name=FUN_18002e810

void FUN_18002e810(CArchive *param_1,void *param_2,uint param_3)

{
  CArchive *pCVar1;
  int iVar2;
  undefined8 uVar3;
  uint uVar4;
  longlong lVar5;
  uint uVar6;
  
  if ((param_3 != 0) && (param_2 != (void *)0x0)) {
    if ((~*(uint *)(param_1 + 0x20) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18002eec0(2,*(short **)(param_1 + 0x18));
    }
    pCVar1 = param_1 + 0x40;
    uVar6 = *(int *)pCVar1 - *(int *)(param_1 + 0x38);
    if (param_3 < (uint)(*(int *)pCVar1 - *(int *)(param_1 + 0x38))) {
      uVar6 = param_3;
    }
    uVar3 = FUN_180032c60(*(ulonglong **)(param_1 + 0x38),
                          *(longlong *)pCVar1 - (longlong)*(ulonglong **)(param_1 + 0x38),param_2,
                          (ulonglong)uVar6);
    iVar2 = (int)uVar3;
    if (iVar2 != 0) {
      if (iVar2 == 0xc) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed6c();
      }
      if ((iVar2 == 0x16) || (iVar2 == 0x22)) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      if (iVar2 != 0x50) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
    }
    *(ulonglong *)(param_1 + 0x38) = *(longlong *)(param_1 + 0x38) + (ulonglong)uVar6;
    lVar5 = (longlong)param_2 + (ulonglong)uVar6;
    uVar6 = param_3 - uVar6;
    if (uVar6 != 0) {
      CArchive::Flush(param_1);
      uVar4 = uVar6 - uVar6 % *(uint *)(param_1 + 0x28);
      (**(code **)(**(longlong **)(param_1 + 0x30) + 0x70))
                (*(longlong **)(param_1 + 0x30),lVar5,uVar4);
      uVar6 = uVar6 - uVar4;
      if (*(int *)(param_1 + 0xc) != 0) {
        (**(code **)(**(longlong **)(param_1 + 0x30) + 0xa0))
                  (*(longlong **)(param_1 + 0x30),1,*(undefined4 *)(param_1 + 0x28),param_1 + 0x48,
                   pCVar1);
        *(undefined8 *)(param_1 + 0x38) = *(undefined8 *)(param_1 + 0x48);
      }
      if (*(uint *)(param_1 + 0x28) <= uVar6) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      if (*(ulonglong **)(param_1 + 0x38) != *(ulonglong **)(param_1 + 0x48)) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      uVar3 = FUN_180032c60(*(ulonglong **)(param_1 + 0x38),(ulonglong)uVar6,
                            (void *)(lVar5 + (ulonglong)uVar4),(ulonglong)uVar6);
      iVar2 = (int)uVar3;
      if (iVar2 != 0) {
        if (iVar2 == 0xc) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed6c();
        }
        if ((iVar2 == 0x16) || (iVar2 == 0x22)) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
        if (iVar2 != 0x50) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
      }
      *(ulonglong *)(param_1 + 0x38) = *(longlong *)(param_1 + 0x38) + (ulonglong)uVar6;
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18002e98c (328 bytes) name=FUN_18002e98c

void FUN_18002e98c(CArchive *param_1,ulonglong param_2)

{
  if (param_2 < 0xffff) {
    if ((~*(uint *)(param_1 + 0x20) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18002eec0(2,*(short **)(param_1 + 0x18));
    }
    if (*(ulonglong *)(param_1 + 0x40) < *(longlong *)(param_1 + 0x38) + 2U) {
      CArchive::Flush(param_1);
    }
    **(undefined2 **)(param_1 + 0x38) = (short)param_2;
    *(longlong *)(param_1 + 0x38) = *(longlong *)(param_1 + 0x38) + 2;
  }
  else {
    if ((~*(uint *)(param_1 + 0x20) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18002eec0(2,*(short **)(param_1 + 0x18));
    }
    if (*(ulonglong *)(param_1 + 0x40) < *(longlong *)(param_1 + 0x38) + 2U) {
      CArchive::Flush(param_1);
    }
    **(undefined2 **)(param_1 + 0x38) = 0xffff;
    *(longlong *)(param_1 + 0x38) = *(longlong *)(param_1 + 0x38) + 2;
    if (param_2 < 0xffffffff) {
      if ((~*(uint *)(param_1 + 0x20) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_18002eec0(2,*(short **)(param_1 + 0x18));
      }
      if (*(ulonglong *)(param_1 + 0x40) < *(longlong *)(param_1 + 0x38) + 4U) {
        CArchive::Flush(param_1);
      }
      **(undefined4 **)(param_1 + 0x38) = (int)param_2;
      *(longlong *)(param_1 + 0x38) = *(longlong *)(param_1 + 0x38) + 4;
    }
    else {
      if ((~*(uint *)(param_1 + 0x20) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_18002eec0(2,*(short **)(param_1 + 0x18));
      }
      if (*(ulonglong *)(param_1 + 0x40) < *(longlong *)(param_1 + 0x38) + 4U) {
        CArchive::Flush(param_1);
      }
      **(undefined4 **)(param_1 + 0x38) = 0xffffffff;
      *(longlong *)(param_1 + 0x38) = *(longlong *)(param_1 + 0x38) + 4;
      if ((~*(uint *)(param_1 + 0x20) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_18002eec0(2,*(short **)(param_1 + 0x18));
      }
      if (*(ulonglong *)(param_1 + 0x40) < *(longlong *)(param_1 + 0x38) + 8U) {
        CArchive::Flush(param_1);
      }
      **(ulonglong **)(param_1 + 0x38) = param_2;
      *(longlong *)(param_1 + 0x38) = *(longlong *)(param_1 + 0x38) + 8;
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 18002eadc (226 bytes) name=FUN_18002eadc

ulonglong FUN_18002eadc(longlong param_1)

{
  ushort uVar1;
  uint uVar2;
  ushort *puVar3;
  uint *puVar4;
  ulonglong uVar5;
  
  if ((*(byte *)(param_1 + 0x20) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18002eec0(4,*(short **)(param_1 + 0x18));
  }
  if (*(ulonglong *)(param_1 + 0x40) < *(longlong *)(param_1 + 0x38) + 2U) {
    FUN_18002e6b0(param_1,(*(int *)(param_1 + 0x38) - *(int *)(param_1 + 0x40)) + 2);
  }
  puVar3 = *(ushort **)(param_1 + 0x38);
  uVar1 = *puVar3;
  *(ushort **)(param_1 + 0x38) = puVar3 + 1;
  if (uVar1 == 0xffff) {
    if ((*(byte *)(param_1 + 0x20) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18002eec0(4,*(short **)(param_1 + 0x18));
    }
    if (*(ushort **)(param_1 + 0x40) < puVar3 + 3) {
      FUN_18002e6b0(param_1,(*(int *)(param_1 + 0x38) - *(int *)(param_1 + 0x40)) + 4);
    }
    puVar4 = *(uint **)(param_1 + 0x38);
    uVar2 = *puVar4;
    uVar5 = (ulonglong)uVar2;
    *(uint **)(param_1 + 0x38) = puVar4 + 1;
    if (uVar2 == 0xffffffff) {
      if ((*(byte *)(param_1 + 0x20) & 1) == 0) {
                    /* WARNING: Subroutine does not return */
        FUN_18002eec0(4,*(short **)(param_1 + 0x18));
      }
      if (*(uint **)(param_1 + 0x40) < puVar4 + 3) {
        FUN_18002e6b0(param_1,(*(int *)(param_1 + 0x38) - *(int *)(param_1 + 0x40)) + 8);
      }
      uVar5 = **(ulonglong **)(param_1 + 0x38);
      *(ulonglong **)(param_1 + 0x38) = *(ulonglong **)(param_1 + 0x38) + 1;
    }
  }
  else {
    uVar5 = (ulonglong)uVar1;
  }
  return uVar5;
}


==================================================================

### EXPORT FUNC 18002ebc4 (8 bytes) name=FUN_18002ebc4

undefined ** FUN_18002ebc4(void)

{
  return &PTR_s_CArchiveException_180056900;
}


==================================================================

### EXPORT FUNC 18002ebcc (354 bytes) name=FUN_18002ebcc

undefined8 FUN_18002ebcc(longlong param_1,short *param_2,uint param_3,int *param_4)

{
  int *piVar1;
  int iVar2;
  undefined **ppuVar3;
  longlong lVar4;
  longlong *plVar5;
  HMODULE pHVar6;
  undefined8 uVar7;
  longlong *plVar8;
  short *local_res10;
  longlong *local_28;
  undefined8 local_20;
  
  local_20 = 0xfffffffffffffffe;
  if (param_2 == (short *)0x0) {
    uVar7 = 0;
  }
  else {
    if (param_4 != (int *)0x0) {
      *param_4 = *(int *)(param_1 + 0x10) + 0xf1b0;
    }
    ppuVar3 = FUN_18001fcc0();
    if (ppuVar3 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7fffbffb);
    }
    lVar4 = (**(code **)(*ppuVar3 + 0x18))(ppuVar3);
    local_res10 = (short *)(lVar4 + 0x18);
    plVar5 = FUN_18000b300((longlong *)(*(longlong *)(param_1 + 0x18) + -0x18));
    plVar8 = plVar5 + 3;
    local_28 = plVar8;
    if ((int)plVar5[1] == 0) {
      pHVar6 = (HMODULE)FUN_18001fcac();
      if (pHVar6 != (HMODULE)0x0) {
        FUN_18000af50((longlong *)&local_28,pHVar6,0xf006);
        plVar8 = local_28;
      }
    }
    FUN_18003253c((longlong *)&local_res10,*(int *)(param_1 + 0x10) + 0xf1b0,plVar8);
    iVar2 = FUN_1800354c0(param_2,(ulonglong)param_3,local_res10,-1);
    if (iVar2 != 0) {
      if (iVar2 == 0xc) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed6c();
      }
      if ((iVar2 == 0x16) || (iVar2 == 0x22)) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      if (iVar2 != 0x50) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
    }
    LOCK();
    plVar5 = plVar8 + -1;
    lVar4 = *plVar5;
    *(int *)plVar5 = (int)*plVar5 + -1;
    UNLOCK();
    if ((int)lVar4 + -1 < 1) {
      (**(code **)(*(longlong *)plVar8[-3] + 8))();
    }
    LOCK();
    piVar1 = (int *)(local_res10 + -4);
    iVar2 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar2 + -1 < 1) {
      (**(code **)(**(longlong **)(local_res10 + -0xc) + 8))();
    }
    uVar7 = 1;
  }
  return uVar7;
}


==================================================================

### EXPORT FUNC 18002ed3c (24 bytes) name=Unwind@18002ed3c

void Unwind_18002ed3c(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x58));
  return;
}


==================================================================

### EXPORT FUNC 18002ed5c (24 bytes) name=Unwind@18002ed5c

void Unwind_18002ed5c(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x20));
  return;
}


==================================================================

### EXPORT FUNC 18002ed7c (28 bytes) name=Catch@18002ed7c

undefined * Catch_18002ed7c(void)

{
  return &DAT_18002ed1a;
}


==================================================================

### EXPORT FUNC 18002ed9c (162 bytes) name=FUN_18002ed9c

undefined8 * FUN_18002ed9c(undefined8 *param_1,undefined4 param_2,short *param_3)

{
  undefined **ppuVar1;
  longlong lVar2;
  int iVar3;
  
  FUN_18001ee0c((longlong)param_1);
  *param_1 = CArchiveException::vftable;
  ppuVar1 = FUN_18001fcc0();
  iVar3 = 0;
  if (ppuVar1 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar2 = (**(code **)(*ppuVar1 + 0x18))(ppuVar1);
  param_1[3] = lVar2 + 0x18;
  *(undefined4 *)(param_1 + 2) = param_2;
  if (param_3 != (short *)0x0) {
    lVar2 = FUN_1800355e0(param_3);
    iVar3 = (int)lVar2;
  }
  FUN_18000b480(param_1 + 3,param_3,iVar3);
  return param_1;
}


==================================================================

### EXPORT FUNC 18002ee4c (28 bytes) name=Unwind@18002ee4c

void Unwind_18002ee4c(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(*(longlong *)(param_2 + 0x50) + 0x18));
  return;
}


==================================================================

### EXPORT FUNC 18002ee68 (85 bytes) name=FUN_18002ee68

undefined8 * FUN_18002ee68(undefined8 *param_1,uint param_2)

{
  int *piVar1;
  int iVar2;
  longlong lVar3;
  
  lVar3 = param_1[3];
  *param_1 = CArchiveException::vftable;
  LOCK();
  piVar1 = (int *)(lVar3 + -8);
  iVar2 = *piVar1;
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (iVar2 + -1 < 1) {
    (**(code **)(**(longlong **)(lVar3 + -0x18) + 8))();
  }
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18002eec0 (83 bytes) name=FUN_18002eec0

void FUN_18002eec0(undefined4 param_1,short *param_2)

{
  undefined8 *local_res18;
  undefined8 *local_res20;
  
  local_res20 = FUN_18001eb74(0x20);
  local_res18 = (undefined8 *)0x0;
  if (local_res20 != (undefined8 *)0x0) {
    local_res18 = FUN_18002ed9c(local_res20,param_1,param_2);
  }
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(&local_res18,(ThrowInfo *)&DAT_1800687f8);
}


==================================================================

### EXPORT FUNC 18002ef20 (24 bytes) name=Unwind@18002ef20

void Unwind_18002ef20(undefined8 param_1,longlong param_2)

{
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x58));
  return;
}


==================================================================

### EXPORT FUNC 18002ef38 (708 bytes) name=OsErrorToException

/* Library Function - Single Match
    public: static int __cdecl CFileException::OsErrorToException(long)
   
   Library: Visual Studio 2005 Release */

int __cdecl CFileException::OsErrorToException(long param_1)

{
  int iVar1;
  bool bVar2;
  
  if ((uint)param_1 < 0x10c) {
    if (param_1 == 0x10b) {
      return 3;
    }
    if (0x3e < (uint)param_1) {
      if ((uint)param_1 < 0x6c) {
        if (param_1 == 0x6b) {
          return 2;
        }
        if (0x47 < (uint)param_1) {
          if (param_1 == 0x50) {
            return 5;
          }
          if (param_1 == 0x52) {
            return 5;
          }
          if (param_1 == 0x55) {
            return 3;
          }
          if (param_1 != 0x56) {
            if (param_1 == 0x58) {
              return 10;
            }
            return 1;
          }
          return 5;
        }
        if (param_1 == 0x47) {
          return 5;
        }
        if (param_1 == 0x40) {
          return 5;
        }
        if (param_1 == 0x41) {
          return 5;
        }
        if (param_1 == 0x42) {
          return 6;
        }
        if (param_1 == 0x43) {
          return 3;
        }
        iVar1 = param_1 + -0x44;
        if (iVar1 == 0) {
          return 4;
        }
      }
      else {
        if ((uint)param_1 < 0x91) {
          if (param_1 == 0x90) {
            return 3;
          }
          if ((uint)param_1 < 0x76) {
            if (param_1 == 0x75) {
              return 10;
            }
            if (param_1 == 0x6c) {
              return 0xc;
            }
            if (param_1 == 0x6f) {
              return 3;
            }
            if (param_1 == 0x70) {
              return 0xd;
            }
            iVar1 = param_1 + -0x71;
            if (iVar1 == 0) {
              return 4;
            }
            goto LAB_18002f137;
          }
          if (param_1 == 0x7b) {
            return 3;
          }
          if (param_1 == 0x7c) {
            return 3;
          }
          if (param_1 == 0x7d) {
            return 3;
          }
          iVar1 = param_1 + -0x83;
          if (iVar1 == 0) {
            return 9;
          }
LAB_18002eff0:
          if (iVar1 == 1) {
            return 9;
          }
          return 1;
        }
        if ((uint)param_1 < 0xb7) {
          if (param_1 == 0xb6) {
            return 6;
          }
          if (param_1 == 0x91) {
            return 7;
          }
          if (param_1 == 0x9a) {
            return 3;
          }
          if (param_1 == 0xa1) {
            return 3;
          }
          if (param_1 == 0xa7) {
            return 0xc;
          }
          bVar2 = param_1 == 0xaa;
          goto LAB_18002f1a4;
        }
        if (param_1 == 0xb7) {
          return 5;
        }
        if (param_1 == 0xbf) {
          return 6;
        }
        if (param_1 == 0xc1) {
          return 6;
        }
        iVar1 = param_1 + -0xce;
        if (iVar1 == 0) {
          return 3;
        }
      }
      bVar2 = iVar1 == 2;
LAB_18002ef96:
      if (bVar2) {
        return 3;
      }
      return 1;
    }
    if (param_1 == 0x3e) {
      return 8;
    }
    if ((uint)param_1 < 0x1a) {
      if (param_1 == 0x19) {
        return 9;
      }
      if ((uint)param_1 < 0x11) {
        if (param_1 == 0x10) {
          return 7;
        }
        if (param_1 == 0) {
          return 0;
        }
        if (param_1 == 2) {
          return 2;
        }
        if (param_1 == 3) {
          return 3;
        }
        if (param_1 == 4) {
          return 4;
        }
        if (param_1 == 5) {
          return 5;
        }
        if (param_1 == 6) {
          return 2;
        }
        if (param_1 == 0xb) {
          return 6;
        }
        if (param_1 == 0xc) {
          return 5;
        }
        bVar2 = param_1 == 0xf;
        goto LAB_18002ef96;
      }
      if (param_1 == 0x11) {
        return 3;
      }
      if (param_1 == 0x12) {
        return 2;
      }
      if (param_1 == 0x13) {
        return 5;
      }
      if (((param_1 != 0x14) && (param_1 != 0x15)) &&
         ((param_1 != 0x16 && (iVar1 = param_1 + -0x17, iVar1 != 0)))) goto LAB_18002eff0;
    }
    else {
      if ((uint)param_1 < 0x28) {
        if (param_1 == 0x27) {
          return 0xd;
        }
        if (param_1 == 0x1a) {
          return 6;
        }
        if (param_1 == 0x1b) {
          return 9;
        }
        if (param_1 == 0x1d) {
          return 5;
        }
        if (param_1 == 0x1e) {
          return 9;
        }
        if (param_1 == 0x20) {
          return 0xb;
        }
        if (param_1 == 0x21) {
          return 0xc;
        }
        if (param_1 != 0x22) {
          if (param_1 == 0x24) {
            return 4;
          }
          if (param_1 == 0x26) {
            return 0xe;
          }
          return 1;
        }
        return 3;
      }
      if (param_1 == 0x34) {
        return 3;
      }
      if (param_1 == 0x35) {
        return 3;
      }
      if (param_1 == 0x36) {
        return 5;
      }
      if (param_1 == 0x37) {
        return 3;
      }
      if (param_1 != 0x39) {
        if (param_1 == 0x3a) {
          return 5;
        }
        iVar1 = param_1 + -0x3b;
        if (iVar1 != 0) {
LAB_18002f137:
          if (iVar1 == 1) {
            return 6;
          }
          return 1;
        }
      }
    }
  }
  else if (((param_1 != 0x3e3) && (param_1 != 0x3e4)) && (param_1 != 0x3e5)) {
    bVar2 = param_1 == 999;
LAB_18002f1a4:
    if (bVar2) {
      return 5;
    }
    return 1;
  }
  return 10;
}


==================================================================

### EXPORT FUNC 18002f1fc (8 bytes) name=FUN_18002f1fc

undefined ** FUN_18002f1fc(void)

{
  return &PTR_s_CFileException_1800569f0;
}


==================================================================

### EXPORT FUNC 18002f204 (360 bytes) name=FUN_18002f204

undefined8 FUN_18002f204(longlong param_1,short *param_2,uint param_3,int *param_4)

{
  int *piVar1;
  int iVar2;
  undefined **ppuVar3;
  longlong lVar4;
  longlong *plVar5;
  HMODULE pHVar6;
  undefined8 uVar7;
  longlong *plVar8;
  short *local_res10;
  longlong *local_18;
  undefined8 local_10;
  
  local_10 = 0xfffffffffffffffe;
  if ((param_2 == (short *)0x0) || (param_3 == 0)) {
    uVar7 = 0;
  }
  else {
    if (param_4 != (int *)0x0) {
      *param_4 = *(int *)(param_1 + 0x10) + 0xf1a0;
    }
    ppuVar3 = FUN_18001fcc0();
    if (ppuVar3 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
      FUN_18000b170(-0x7fffbffb);
    }
    lVar4 = (**(code **)(*ppuVar3 + 0x18))(ppuVar3);
    local_res10 = (short *)(lVar4 + 0x18);
    plVar5 = FUN_18000b300((longlong *)(*(longlong *)(param_1 + 0x18) + -0x18));
    plVar8 = plVar5 + 3;
    local_18 = plVar8;
    if ((int)plVar5[1] == 0) {
      pHVar6 = (HMODULE)FUN_18001fcac();
      if (pHVar6 != (HMODULE)0x0) {
        FUN_18000af50((longlong *)&local_18,pHVar6,0xf006);
        plVar8 = local_18;
      }
    }
    FUN_18003253c((longlong *)&local_res10,*(int *)(param_1 + 0x10) + 0xf1a0,plVar8);
    iVar2 = FUN_1800354c0(param_2,(ulonglong)param_3,local_res10,-1);
    if (iVar2 != 0) {
      if (iVar2 == 0xc) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed6c();
      }
      if ((iVar2 == 0x16) || (iVar2 == 0x22)) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      if (iVar2 != 0x50) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
    }
    LOCK();
    plVar5 = plVar8 + -1;
    lVar4 = *plVar5;
    *(int *)plVar5 = (int)*plVar5 + -1;
    UNLOCK();
    if ((int)lVar4 + -1 < 1) {
      (**(code **)(*(longlong *)plVar8[-3] + 8))();
    }
    LOCK();
    piVar1 = (int *)(local_res10 + -4);
    iVar2 = *piVar1;
    *piVar1 = *piVar1 + -1;
    UNLOCK();
    if (iVar2 + -1 < 1) {
      (**(code **)(**(longlong **)(local_res10 + -0xc) + 8))();
    }
    uVar7 = 1;
  }
  return uVar7;
}


==================================================================

### EXPORT FUNC 18002f374 (24 bytes) name=Unwind@18002f374

void Unwind_18002f374(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x48));
  return;
}


==================================================================

### EXPORT FUNC 18002f394 (24 bytes) name=Unwind@18002f394

void Unwind_18002f394(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x20));
  return;
}


==================================================================

### EXPORT FUNC 18002f3ac (93 bytes) name=FUN_18002f3ac

void FUN_18002f3ac(undefined4 param_1,undefined4 param_2,short *param_3)

{
  undefined8 *puVar1;
  undefined8 *local_res20;
  
  puVar1 = FUN_18001eb74(0x20);
  local_res20 = (undefined8 *)0x0;
  if (puVar1 != (undefined8 *)0x0) {
    local_res20 = FUN_180020954(puVar1,param_1,param_2,param_3);
  }
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(&local_res20,(ThrowInfo *)&DAT_180068868);
}


==================================================================

### EXPORT FUNC 18002f40c (24 bytes) name=Unwind@18002f40c

void Unwind_18002f40c(undefined8 param_1,longlong param_2)

{
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x28));
  return;
}


==================================================================

### EXPORT FUNC 18002f424 (35 bytes) name=ThrowOsError

/* Library Function - Multiple Matches With Same Base Name
    public: static void __cdecl CFileException::ThrowOsError(long,char const * __ptr64)
    public: static void __cdecl CFileException::ThrowOsError(long,wchar_t const * __ptr64)
   
   Library: Visual Studio 2005 Release */

void ThrowOsError(long param_1,short *param_2)

{
  code *pcVar1;
  int iVar2;
  
  if (param_1 != 0) {
    iVar2 = CFileException::OsErrorToException(param_1);
    FUN_18002f3ac(iVar2,param_1,param_2);
    pcVar1 = (code *)swi(3);
    (*pcVar1)();
    return;
  }
  return;
}


==================================================================

### EXPORT FUNC 18002f448 (219 bytes) name=FUN_18002f448

longlong *
FUN_18002f448(longlong *param_1,int param_2,int param_3,int param_4,uint param_5,uint param_6,
             uint param_7,undefined4 param_8)

{
  longlong lVar1;
  uint local_38;
  uint local_34;
  uint local_30;
  int local_2c;
  int local_28;
  int local_24;
  undefined4 local_18;
  
  if (param_2 < 0x76c) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  if (0xb < param_3 - 1U) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  if (0x1e < param_4 - 1U) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  if (0x17 < param_5) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  if (0x3b < param_6) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  if (0x3b < param_7) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  local_30 = param_5;
  local_28 = param_3 + -1;
  local_34 = param_6;
  local_24 = param_2 + -0x76c;
  local_38 = param_7;
  local_18 = param_8;
  local_2c = param_4;
  lVar1 = FUN_1800365a0((int *)&local_38);
  *param_1 = lVar1;
  if (lVar1 == -1) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7ff8ffa9);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18002f52c (189 bytes) name=FUN_18002f52c

longlong * FUN_18002f52c(longlong *param_1,FILETIME *param_2,undefined4 param_3)

{
  BOOL BVar1;
  longlong lVar2;
  _FILETIME local_res20;
  longlong local_28;
  _SYSTEMTIME local_20;
  
  BVar1 = FileTimeToLocalFileTime(param_2,&local_res20);
  if (BVar1 == 0) {
    *param_1 = 0;
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7ff8ffa9);
  }
  BVar1 = FileTimeToSystemTime(&local_res20,&local_20);
  if (BVar1 == 0) {
    *param_1 = 0;
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7ff8ffa9);
  }
  lVar2 = 0;
  if (0x76b < local_20.wYear) {
    FUN_18002f448(&local_28,(uint)local_20.wYear,(uint)local_20.wMonth,(uint)local_20.wDay,
                  (uint)local_20.wHour,(uint)local_20.wMinute,(uint)local_20.wSecond,param_3);
    lVar2 = local_28;
  }
  *param_1 = lVar2;
  return param_1;
}


==================================================================

### EXPORT FUNC 18002f5ec (458 bytes) name=FUN_18002f5ec

undefined8 FUN_18002f5ec(longlong param_1,ulonglong *param_2)

{
  int iVar1;
  BOOL BVar2;
  DWORD DVar3;
  ulonglong *puVar4;
  undefined8 uVar5;
  undefined1 uVar6;
  _FILETIME local_res8;
  _FILETIME local_res10;
  _FILETIME local_res18;
  _FILETIME local_res20;
  _SYSTEMTIME local_38;
  
  FUN_1800357d0(param_2,0,0x230);
  iVar1 = FUN_1800354c0((short *)((longlong)param_2 + 0x22),0x104,*(short **)(param_1 + 0x18),-1);
  if (iVar1 != 0) {
    if (iVar1 == 0xc) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed6c();
    }
    if ((iVar1 == 0x16) || (iVar1 == 0x22)) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
    if (iVar1 != 0x50) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed90();
    }
  }
  if (*(HANDLE *)(param_1 + 8) == DAT_180054190) {
LAB_18002f7ab:
    uVar5 = 1;
  }
  else {
    BVar2 = GetFileTime(*(HANDLE *)(param_1 + 8),&local_res8,&local_res10,&local_res18);
    if (BVar2 != 0) {
      DVar3 = GetFileSize(*(HANDLE *)(param_1 + 8),(LPDWORD)0x0);
      param_2[3] = (ulonglong)DVar3;
      if ((ulonglong)DVar3 != 0xffffffff) {
        if (*(int *)(*(LPCWSTR *)(param_1 + 0x18) + -8) == 0) {
          *(undefined1 *)(param_2 + 4) = 0;
        }
        else {
          DVar3 = GetFileAttributesW(*(LPCWSTR *)(param_1 + 0x18));
          uVar6 = (char)DVar3;
          if (DVar3 == 0xffffffff) {
            uVar6 = 0;
          }
          *(undefined1 *)(param_2 + 4) = uVar6;
        }
        BVar2 = FileTimeToLocalFileTime(&local_res8,&local_res20);
        if (BVar2 == 0) {
LAB_18002f6fe:
          *param_2 = 0;
        }
        else {
          BVar2 = FileTimeToSystemTime(&local_res20,&local_38);
          if (BVar2 == 0) goto LAB_18002f6fe;
          puVar4 = (ulonglong *)FUN_18002f52c((longlong *)&local_res20,&local_res8,0xffffffff);
          *param_2 = *puVar4;
        }
        BVar2 = FileTimeToLocalFileTime(&local_res10,&local_res20);
        if (BVar2 == 0) {
LAB_18002f745:
          param_2[2] = 0;
        }
        else {
          BVar2 = FileTimeToSystemTime(&local_res20,&local_38);
          if (BVar2 == 0) goto LAB_18002f745;
          puVar4 = (ulonglong *)FUN_18002f52c((longlong *)&local_res20,&local_res10,0xffffffff);
          param_2[2] = *puVar4;
        }
        BVar2 = FileTimeToLocalFileTime(&local_res18,&local_res20);
        if (BVar2 == 0) {
LAB_18002f78d:
          param_2[1] = 0;
        }
        else {
          BVar2 = FileTimeToSystemTime(&local_res20,&local_38);
          if (BVar2 == 0) goto LAB_18002f78d;
          puVar4 = (ulonglong *)FUN_18002f52c((longlong *)&local_res20,&local_res18,0xffffffff);
          param_2[1] = *puVar4;
        }
        if (*param_2 == 0) {
          *param_2 = param_2[1];
        }
        if (param_2[2] == 0) {
          param_2[2] = param_2[1];
        }
        goto LAB_18002f7ab;
      }
    }
    uVar5 = 0;
  }
  return uVar5;
}


==================================================================

### EXPORT FUNC 18002f7bc (259 bytes) name=FUN_18002f7bc

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

longlong * FUN_18002f7bc(longlong param_1,longlong *param_2)

{
  int iVar1;
  undefined **ppuVar2;
  longlong lVar3;
  undefined1 auStack_288 [32];
  undefined4 local_268;
  undefined8 local_260;
  longlong *local_258;
  ulonglong local_248 [4];
  WCHAR local_226 [263];
  ulonglong local_18;
  
  local_260 = 0xfffffffffffffffe;
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_288;
  local_268 = 0;
  local_248[0] = 0;
  local_248[1] = 0;
  local_248[2] = 0;
  local_258 = param_2;
  FUN_18002f5ec(param_1,local_248);
  ppuVar2 = FUN_18001fcc0();
  if (ppuVar2 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar3 = (**(code **)(*ppuVar2 + 0x18))();
  *param_2 = lVar3 + 0x18;
  local_268 = 1;
  if ((int)(*(int *)(lVar3 + 0xc) - 0x100U | 1U - *(int *)(lVar3 + 0x10)) < 0) {
    FUN_18000b190(param_2,0x100);
  }
  FUN_180024240(local_226,(short *)*param_2,0x100);
  if ((short *)*param_2 == (short *)0x0) {
    iVar1 = 0;
  }
  else {
    lVar3 = FUN_1800355e0((short *)*param_2);
    iVar1 = (int)lVar3;
    if (iVar1 < 0) goto LAB_18002f89d;
  }
  if (iVar1 <= *(int *)(*param_2 + -0xc)) {
    *(int *)(*param_2 + -0x10) = iVar1;
    *(undefined2 *)(*param_2 + (longlong)iVar1 * 2) = 0;
    return param_2;
  }
LAB_18002f89d:
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8ffa9);
}


==================================================================

### EXPORT FUNC 18002f8cc (38 bytes) name=Unwind@18002f8cc

void Unwind_18002f8cc(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x20) & 1) != 0) {
    *(uint *)(param_2 + 0x20) = *(uint *)(param_2 + 0x20) & 0xfffffffe;
    FUN_18000b5e0(*(longlong **)(param_2 + 0x30));
  }
  return;
}


==================================================================

### EXPORT FUNC 18002f8f4 (259 bytes) name=FUN_18002f8f4

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

longlong * FUN_18002f8f4(longlong param_1,longlong *param_2)

{
  int iVar1;
  undefined **ppuVar2;
  longlong lVar3;
  undefined1 auStack_288 [32];
  undefined4 local_268;
  undefined8 local_260;
  longlong *local_258;
  ulonglong local_248 [4];
  wchar_t local_226 [263];
  ulonglong local_18;
  
  local_260 = 0xfffffffffffffffe;
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_288;
  local_268 = 0;
  local_248[0] = 0;
  local_248[1] = 0;
  local_248[2] = 0;
  local_258 = param_2;
  FUN_18002f5ec(param_1,local_248);
  ppuVar2 = FUN_18001fcc0();
  if (ppuVar2 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar3 = (**(code **)(*ppuVar2 + 0x18))();
  *param_2 = lVar3 + 0x18;
  local_268 = 1;
  if ((int)(*(int *)(lVar3 + 0xc) - 0x100U | 1U - *(int *)(lVar3 + 0x10)) < 0) {
    FUN_18000b190(param_2,0x100);
  }
  AfxGetFileTitle(local_226,(wchar_t *)*param_2,0x100);
  if ((short *)*param_2 == (short *)0x0) {
    iVar1 = 0;
  }
  else {
    lVar3 = FUN_1800355e0((short *)*param_2);
    iVar1 = (int)lVar3;
    if (iVar1 < 0) goto LAB_18002f9d5;
  }
  if (iVar1 <= *(int *)(*param_2 + -0xc)) {
    *(int *)(*param_2 + -0x10) = iVar1;
    *(undefined2 *)(*param_2 + (longlong)iVar1 * 2) = 0;
    return param_2;
  }
LAB_18002f9d5:
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8ffa9);
}


==================================================================

### EXPORT FUNC 18002fa04 (38 bytes) name=Unwind@18002fa04

void Unwind_18002fa04(undefined8 param_1,longlong param_2)

{
  if ((*(uint *)(param_2 + 0x20) & 1) != 0) {
    *(uint *)(param_2 + 0x20) = *(uint *)(param_2 + 0x20) & 0xfffffffe;
    FUN_18000b5e0(*(longlong **)(param_2 + 0x30));
  }
  return;
}


==================================================================

### EXPORT FUNC 18002fa2c (102 bytes) name=GetFilePath

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    public: virtual class ATL::CStringT<wchar_t,class StrTraitMFC<wchar_t,class
   ATL::ChTraitsCRT<wchar_t> > > __cdecl CFile::GetFilePath(void)const __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release, Visual Studio 2010 Release */

void __thiscall CFile::GetFilePath(CFile *this)

{
  longlong *in_RDX;
  undefined1 auStack_278 [32];
  undefined4 local_258;
  ulonglong local_248 [4];
  short local_226 [263];
  ulonglong local_18;
  
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_278;
  local_258 = 0;
  local_248[0] = 0;
  local_248[1] = 0;
  local_248[2] = 0;
  FUN_18002f5ec((longlong)this,local_248);
  FUN_18000b610(in_RDX,local_226);
  return;
}


==================================================================

### EXPORT FUNC 18002fa94 (209 bytes) name=GetInterface

/* Library Function - Single Match
    public: struct IUnknown * __ptr64 __cdecl CCmdTarget::GetInterface(void const * __ptr64) __ptr64
   
   Library: Visual Studio 2010 Release */

IUnknown * __thiscall CCmdTarget::GetInterface(CCmdTarget *this,void *param_1)

{
  int *piVar1;
  IUnknown *pIVar2;
  longlong *plVar3;
  longlong *plVar4;
  undefined8 *puVar5;
  
  pIVar2 = (IUnknown *)(**(code **)(*(longlong *)this + 0x88))();
  if (pIVar2 == (IUnknown *)0x0) {
    plVar3 = (longlong *)(**(code **)(*(longlong *)this + 0x70))(this);
    if ((((DAT_180058e68 == *(int *)param_1) && (*(int *)((longlong)param_1 + 4) == DAT_180058e6c))
        && (*(int *)((longlong)param_1 + 8) == DAT_180058e70)) &&
       (*(int *)((longlong)param_1 + 0xc) == DAT_180058e74)) {
      do {
        for (plVar4 = (longlong *)plVar3[1]; *plVar4 != 0; plVar4 = plVar4 + 2) {
          if (*(int *)(this + plVar4[1]) != 0) {
            return (IUnknown *)(this + plVar4[1]);
          }
        }
        plVar3 = (longlong *)*plVar3;
      } while (plVar3 != (longlong *)0x0);
    }
    else {
      do {
        for (puVar5 = (undefined8 *)plVar3[1]; piVar1 = (int *)*puVar5, piVar1 != (int *)0x0;
            puVar5 = puVar5 + 2) {
          if (((*piVar1 == *(int *)param_1) && (piVar1[1] == *(int *)((longlong)param_1 + 4))) &&
             ((piVar1[2] == *(int *)((longlong)param_1 + 8) &&
              ((piVar1[3] == *(int *)((longlong)param_1 + 0xc) && (*(int *)(this + puVar5[1]) != 0))
              )))) {
            return (IUnknown *)(this + puVar5[1]);
          }
        }
        plVar3 = (longlong *)*plVar3;
      } while (plVar3 != (longlong *)0x0);
    }
    pIVar2 = (IUnknown *)0x0;
  }
  return pIVar2;
}


==================================================================

### EXPORT FUNC 18002fb68 (143 bytes) name=QueryAggregates

/* Library Function - Single Match
    public: struct IUnknown * __ptr64 __cdecl CCmdTarget::QueryAggregates(void const * __ptr64)
   __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

IUnknown * __thiscall CCmdTarget::QueryAggregates(CCmdTarget *this,void *param_1)

{
  undefined8 *puVar1;
  int iVar2;
  longlong *plVar3;
  longlong *plVar4;
  IUnknown *local_res8;
  
  plVar3 = (longlong *)(**(code **)(*(longlong *)this + 0x70))();
  do {
    for (plVar4 = (longlong *)plVar3[1]; *plVar4 != 0; plVar4 = plVar4 + 2) {
    }
    for (plVar4 = plVar4 + 1; *plVar4 != -1; plVar4 = plVar4 + 2) {
      puVar1 = *(undefined8 **)(this + *plVar4);
      if (puVar1 != (undefined8 *)0x0) {
        local_res8 = (IUnknown *)0x0;
        iVar2 = (**(code **)*puVar1)(puVar1,param_1,&local_res8);
        if ((iVar2 == 0) && (local_res8 != (IUnknown *)0x0)) {
          return local_res8;
        }
      }
    }
    plVar3 = (longlong *)*plVar3;
    if (plVar3 == (longlong *)0x0) {
      return (IUnknown *)0x0;
    }
  } while( true );
}


==================================================================

### EXPORT FUNC 18002fbf8 (41 bytes) name=ExternalAddRef

/* Library Function - Single Match
    public: unsigned long __cdecl CCmdTarget::ExternalAddRef(void) __ptr64
   
   Library: Visual Studio 2005 Release */

ulong __thiscall CCmdTarget::ExternalAddRef(CCmdTarget *this)

{
  CCmdTarget *pCVar1;
  int iVar2;
  ulong uVar3;
  
  if (*(longlong *)(this + 0x10) == 0) {
    LOCK();
    pCVar1 = this + 8;
    iVar2 = *(int *)pCVar1;
    *(int *)pCVar1 = *(int *)pCVar1 + 1;
    UNLOCK();
    uVar3 = iVar2 + 1;
  }
  else {
    uVar3 = (**(code **)(**(longlong **)(this + 0x10) + 8))();
  }
  return uVar3;
}


==================================================================

### EXPORT FUNC 18002fc24 (102 bytes) name=InternalRelease

/* Library Function - Single Match
    public: unsigned long __cdecl CCmdTarget::InternalRelease(void) __ptr64
   
   Library: Visual Studio 2008 Release */

ulong __thiscall CCmdTarget::InternalRelease(CCmdTarget *this)

{
  CCmdTarget *pCVar1;
  int iVar2;
  ulong uVar3;
  AFX_MAINTAIN_STATE2 local_20 [8];
  int local_18;
  
  if (*(int *)(this + 8) == 0) {
    uVar3 = 0;
  }
  else {
    LOCK();
    pCVar1 = this + 8;
    iVar2 = *(int *)pCVar1;
    *(int *)pCVar1 = *(int *)pCVar1 + -1;
    UNLOCK();
    uVar3 = iVar2 - 1;
    if (uVar3 == 0) {
      AFX_MAINTAIN_STATE2::AFX_MAINTAIN_STATE2(local_20,*(AFX_MODULE_STATE **)(this + 0x38));
      (**(code **)(*(longlong *)this + 0x20))(this);
      if (local_18 != 0) {
        FUN_180021f08();
      }
    }
  }
  return uVar3;
}


==================================================================

### EXPORT FUNC 18002fc94 (24 bytes) name=Unwind@18002fc94

void Unwind_18002fc94(undefined8 param_1,longlong param_2)

{
  FUN_1800275f0(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 18002fcac (33 bytes) name=ExternalRelease

/* Library Function - Single Match
    public: unsigned long __cdecl CCmdTarget::ExternalRelease(void) __ptr64
   
   Library: Visual Studio 2008 Release */

ulong __thiscall CCmdTarget::ExternalRelease(CCmdTarget *this)

{
  ulong uVar1;
  
  if (*(longlong *)(this + 0x10) == 0) {
    uVar1 = InternalRelease(this);
  }
  else {
    uVar1 = (**(code **)(**(longlong **)(this + 0x10) + 0x10))();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 18002fcd0 (88 bytes) name=FUN_18002fcd0

uint FUN_18002fcd0(CCmdTarget *param_1,void *param_2,undefined8 *param_3)

{
  uint uVar1;
  IUnknown *pIVar2;
  
  pIVar2 = CCmdTarget::GetInterface(param_1,param_2);
  *param_3 = pIVar2;
  if (pIVar2 == (IUnknown *)0x0) {
    pIVar2 = CCmdTarget::QueryAggregates(param_1,param_2);
    *param_3 = pIVar2;
    uVar1 = ~-(uint)(pIVar2 != (IUnknown *)0x0) & 0x80004002;
  }
  else {
    CCmdTarget::ExternalAddRef(param_1);
    uVar1 = 0;
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 18002fd28 (32 bytes) name=ExternalQueryInterface

/* Library Function - Single Match
    public: unsigned long __cdecl CCmdTarget::ExternalQueryInterface(void const * __ptr64,void *
   __ptr64 * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

ulong __thiscall CCmdTarget::ExternalQueryInterface(CCmdTarget *this,void *param_1,void **param_2)

{
  uint uVar1;
  
  if (*(longlong *)(this + 0x10) == 0) {
    uVar1 = FUN_18002fcd0(this,param_1,param_2);
  }
  else {
    uVar1 = (**(code **)**(undefined8 **)(this + 0x10))();
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 18002fd48 (115 bytes) name=UpdateSysColors

/* Library Function - Single Match
    public: void __cdecl AUX_DATA::UpdateSysColors(void) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release, Visual Studio 2010 Release,
   Visual Studio 2012 Release */

void __thiscall AUX_DATA::UpdateSysColors(AUX_DATA *this)

{
  DWORD DVar1;
  HBRUSH pHVar2;
  
  DVar1 = GetSysColor(0xf);
  *(DWORD *)(this + 0x30) = DVar1;
  DVar1 = GetSysColor(0x10);
  *(DWORD *)(this + 0x34) = DVar1;
  DVar1 = GetSysColor(0x14);
  *(DWORD *)(this + 0x38) = DVar1;
  DVar1 = GetSysColor(0x12);
  *(DWORD *)(this + 0x3c) = DVar1;
  DVar1 = GetSysColor(6);
  *(DWORD *)(this + 0x40) = DVar1;
  pHVar2 = GetSysColorBrush(0xf);
  *(HBRUSH *)(this + 0x28) = pHVar2;
  pHVar2 = GetSysColorBrush(6);
  *(HBRUSH *)(this + 0x20) = pHVar2;
  return;
}


==================================================================

### EXPORT FUNC 18002fdbc (148 bytes) name=FUN_18002fdbc

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

void FUN_18002fdbc(longlong param_1)

{
  int iVar1;
  HDC hdc;
  
  iVar1 = GetSystemMetrics(0xb);
  *(int *)(param_1 + 8) = iVar1;
  iVar1 = GetSystemMetrics(0xc);
  *(int *)(param_1 + 0xc) = iVar1;
  _DAT_1800724c0 = GetSystemMetrics(2);
  _DAT_1800724c0 = _DAT_1800724c0 + 1;
  _DAT_1800724c4 = GetSystemMetrics(3);
  _DAT_1800724c4 = _DAT_1800724c4 + 1;
  hdc = GetDC((HWND)0x0);
  iVar1 = GetDeviceCaps(hdc,0x58);
  *(int *)(param_1 + 0x18) = iVar1;
  iVar1 = GetDeviceCaps(hdc,0x5a);
  *(int *)(param_1 + 0x1c) = iVar1;
                    /* WARNING: Could not recover jumptable at 0x00018002fe49. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  ReleaseDC((HWND)0x0,hdc);
  return;
}


==================================================================

### EXPORT FUNC 18002fe50 (106 bytes) name=FUN_18002fe50

AUX_DATA * FUN_18002fe50(AUX_DATA *param_1)

{
  DWORD DVar1;
  HCURSOR pHVar2;
  
  DVar1 = GetVersion();
  *(DWORD *)(param_1 + 0x78) = DVar1 >> 0x1f;
  FUN_18002fdbc((longlong)param_1);
  *(undefined8 *)(param_1 + 0x28) = 0;
  AUX_DATA::UpdateSysColors(param_1);
  pHVar2 = LoadCursorW((HINSTANCE)0x0,(LPCWSTR)0x7f02);
  *(HCURSOR *)(param_1 + 0x48) = pHVar2;
  pHVar2 = LoadCursorW((HINSTANCE)0x0,(LPCWSTR)0x7f00);
  *(undefined8 *)(param_1 + 0x70) = 0;
  *(undefined8 *)(param_1 + 0x58) = 0;
  *(HCURSOR *)(param_1 + 0x50) = pHVar2;
  *(undefined4 *)(param_1 + 0x10) = 2;
  *(undefined4 *)(param_1 + 0x14) = 2;
  return param_1;
}


==================================================================

### EXPORT FUNC 18002febc (68 bytes) name=FUN_18002febc

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

void FUN_18002febc(longlong param_1)

{
  undefined1 auStack_468 [64];
  undefined8 local_428;
  ulonglong local_18;
  
  local_428 = 0xfffffffffffffffe;
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_468;
  FUN_18003060c((undefined8 *)(param_1 + 0x70));
  return;
}


==================================================================

### EXPORT FUNC 18002ff0c (253 bytes) name=Catch@18002ff0c

undefined8 Catch_18002ff0c(undefined8 param_1,longlong param_2)

{
  wchar_t *pwVar1;
  wchar_t *pwVar2;
  int iVar3;
  undefined **ppuVar4;
  longlong lVar5;
  
  ppuVar4 = FUN_18001fcc0();
  if (ppuVar4 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar5 = (**(code **)(*ppuVar4 + 0x18))(ppuVar4);
  *(longlong *)(param_2 + 0x30) = lVar5 + 0x18;
  iVar3 = (**(code **)(**(longlong **)(param_2 + 0x38) + 0x18))
                    (*(longlong **)(param_2 + 0x38),param_2 + 0x50,0x200,0);
  if (iVar3 == 0) {
    FUN_18001ad00((longlong *)(param_2 + 0x30),L"%s (%s:%d)","Exception thrown in destructor",
                  "f:\\sp\\vctools\\vc7libs\\ship\\atlmfc\\src\\mfc\\auxdata.cpp");
  }
  else {
    FUN_18001ad00((longlong *)(param_2 + 0x30),L"%s (%s:%d)\n%s","Exception thrown in destructor",
                  "f:\\sp\\vctools\\vc7libs\\ship\\atlmfc\\src\\mfc\\auxdata.cpp");
  }
  pwVar2 = *(wchar_t **)(param_2 + 0x30);
  AfxMessageBox(pwVar2,0,0);
  LOCK();
  pwVar1 = pwVar2 + -4;
  iVar3 = *(int *)pwVar1;
  *(int *)pwVar1 = *(int *)pwVar1 + -1;
  UNLOCK();
  if (iVar3 + -1 < 1) {
    (**(code **)(**(longlong **)(pwVar2 + -0xc) + 8))();
  }
  (**(code **)(**(longlong **)(param_2 + 0x38) + 8))(*(longlong **)(param_2 + 0x38),1);
  return 0x18002fee8;
}


==================================================================

### EXPORT FUNC 18003000c (24 bytes) name=Unwind@18003000c

void Unwind_18003000c(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 180030024 (125 bytes) name=InitHashTable

/* Library Function - Multiple Matches With Same Base Name
    public: void __cdecl CMapPtrToPtr::InitHashTable(unsigned int,int) __ptr64
    public: void __cdecl CMapPtrToWord::InitHashTable(unsigned int,int) __ptr64
    public: void __cdecl CMapStringToOb::InitHashTable(unsigned int,int) __ptr64
    public: void __cdecl CMapStringToPtr::InitHashTable(unsigned int,int) __ptr64
     7 names - too many to list
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

void InitHashTable(longlong param_1,uint param_2,int param_3)

{
  size_t sVar1;
  ulonglong *puVar2;
  
  if (param_2 == 0) {
    param_2 = 0x11;
  }
  if (*(LPVOID *)(param_1 + 8) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(param_1 + 8));
    *(undefined8 *)(param_1 + 8) = 0;
  }
  if (param_3 != 0) {
    sVar1 = SUB168(ZEXT816(8) * ZEXT416(param_2),0);
    if (SUB168(ZEXT816(8) * ZEXT416(param_2),8) != 0) {
      sVar1 = 0xffffffffffffffff;
    }
    puVar2 = FUN_18001eb74(sVar1);
    *(ulonglong **)(param_1 + 8) = puVar2;
    FUN_1800357d0(puVar2,0,(ulonglong)param_2 << 3);
  }
  *(uint *)(param_1 + 0x10) = param_2;
  return;
}


==================================================================

### EXPORT FUNC 1800300a4 (58 bytes) name=RemoveAll

/* Library Function - Single Match
    public: void __cdecl CMapPtrToPtr::RemoveAll(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CMapPtrToPtr::RemoveAll(CMapPtrToPtr *this)

{
  if (*(LPVOID *)(this + 8) != (LPVOID)0x0) {
    thunk_FUN_180034a70(*(LPVOID *)(this + 8));
    *(undefined8 *)(this + 8) = 0;
  }
  *(undefined8 *)(this + 0x18) = 0;
  *(undefined8 *)(this + 0x20) = 0;
  FUN_180032594(*(undefined8 **)(this + 0x28));
  *(undefined8 *)(this + 0x28) = 0;
  return;
}


==================================================================

### EXPORT FUNC 1800300e0 (53 bytes) name=GetAssocAt

/* Library Function - Multiple Matches With Same Base Name
    protected: struct CMapPtrToPtr::CAssoc * __ptr64 __cdecl CMapPtrToPtr::GetAssocAt(void *
   __ptr64,unsigned int & __ptr64,unsigned int & __ptr64)const __ptr64
    protected: struct CMapPtrToWord::CAssoc * __ptr64 __cdecl CMapPtrToWord::GetAssocAt(void *
   __ptr64,unsigned int & __ptr64,unsigned int & __ptr64)const __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

undefined8 * GetAssocAt(longlong param_1,ulonglong param_2,undefined4 *param_3,undefined4 *param_4)

{
  ulonglong uVar1;
  undefined8 *puVar2;
  
  *param_4 = (int)(param_2 >> 4);
  uVar1 = (param_2 >> 4 & 0xffffffff) % (ulonglong)*(uint *)(param_1 + 0x10);
  *param_3 = (int)uVar1;
  if (*(longlong *)(param_1 + 8) != 0) {
    for (puVar2 = *(undefined8 **)(*(longlong *)(param_1 + 8) + uVar1 * 8);
        puVar2 != (undefined8 *)0x0; puVar2 = (undefined8 *)*puVar2) {
      if (puVar2[1] == param_2) {
        return puVar2;
      }
    }
  }
  return (undefined8 *)0x0;
}


==================================================================

### EXPORT FUNC 180030118 (71 bytes) name=FUN_180030118

undefined8 FUN_180030118(longlong param_1,ulonglong param_2)

{
  undefined8 *puVar1;
  
  if (param_1 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (*(longlong *)(param_1 + 8) != 0) {
    for (puVar1 = *(undefined8 **)
                   (*(longlong *)(param_1 + 8) +
                   ((param_2 >> 4 & 0xffffffff) % (ulonglong)*(uint *)(param_1 + 0x10)) * 8);
        puVar1 != (undefined8 *)0x0; puVar1 = (undefined8 *)*puVar1) {
      if (puVar1[1] == param_2) {
        return puVar1[2];
      }
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180030160 (103 bytes) name=RemoveKey

/* Library Function - Single Match
    public: int __cdecl CMapPtrToPtr::RemoveKey(void * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

int __thiscall CMapPtrToPtr::RemoveKey(CMapPtrToPtr *this,void *param_1)

{
  CMapPtrToPtr *pCVar1;
  undefined8 *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  
  if (*(longlong *)(this + 8) != 0) {
    puVar4 = (undefined8 *)
             (*(longlong *)(this + 8) +
             (((ulonglong)param_1 >> 4 & 0xffffffff) % (ulonglong)*(uint *)(this + 0x10)) * 8);
    puVar2 = (undefined8 *)*puVar4;
    while (puVar3 = puVar2, puVar3 != (undefined8 *)0x0) {
      if ((void *)puVar3[1] == param_1) {
        *puVar4 = *puVar3;
        *puVar3 = *(undefined8 *)(this + 0x20);
        pCVar1 = this + 0x18;
        *(longlong *)pCVar1 = *(longlong *)pCVar1 + -1;
        *(undefined8 **)(this + 0x20) = puVar3;
        if (*(longlong *)pCVar1 == 0) {
          RemoveAll(this);
        }
        return 1;
      }
      puVar4 = puVar3;
      puVar2 = (undefined8 *)*puVar3;
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 1800301c8 (182 bytes) name=FUN_1800301c8

void FUN_1800301c8(longlong param_1,longlong *param_2,longlong *param_3,longlong *param_4)

{
  longlong *plVar1;
  longlong lVar2;
  uint uVar3;
  uint uVar4;
  longlong *plVar5;
  
  plVar5 = (longlong *)*param_2;
  if (plVar5 != (longlong *)0x0) {
    if ((plVar5 == (longlong *)0xffffffffffffffff) && (uVar4 = 0, *(int *)(param_1 + 0x10) != 0)) {
      plVar1 = *(longlong **)(param_1 + 8);
      while (plVar5 = (longlong *)*plVar1, plVar5 == (longlong *)0x0) {
        uVar4 = uVar4 + 1;
        plVar1 = plVar1 + 1;
        if (*(uint *)(param_1 + 0x10) <= uVar4) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
      }
    }
    lVar2 = *plVar5;
    if (lVar2 == 0) {
      uVar4 = *(uint *)(param_1 + 0x10);
      uVar3 = (int)(((ulonglong)plVar5[1] >> 4 & 0xffffffff) % (ulonglong)uVar4) + 1;
      if (uVar3 < uVar4) {
        plVar1 = (longlong *)(*(longlong *)(param_1 + 8) + (longlong)(int)uVar3 * 8);
        do {
          lVar2 = *plVar1;
          if (lVar2 != 0) break;
          uVar3 = uVar3 + 1;
          plVar1 = plVar1 + 1;
        } while (uVar3 < uVar4);
      }
    }
    *param_2 = lVar2;
    *param_3 = plVar5[1];
    *param_4 = plVar5[2];
  }
  return;
}


==================================================================

### EXPORT FUNC 180030280 (8 bytes) name=FUN_180030280

undefined ** FUN_180030280(void)

{
  return &PTR_s_CMapPtrToPtr_180056b58;
}


==================================================================

### EXPORT FUNC 180030288 (56 bytes) name=FUN_180030288

undefined8 * FUN_180030288(undefined8 *param_1,longlong param_2)

{
  *(undefined4 *)(param_1 + 2) = 0x11;
  *param_1 = CMapPtrToPtr::vftable;
  if (param_2 < 1) {
    param_2 = 10;
  }
  param_1[1] = 0;
  param_1[3] = 0;
  param_1[4] = 0;
  param_1[5] = 0;
  param_1[6] = param_2;
  return param_1;
}


==================================================================

### EXPORT FUNC 1800302c0 (15 bytes) name=FUN_1800302c0

void FUN_1800302c0(CMapPtrToPtr *param_1)

{
  *(undefined ***)param_1 = CMapPtrToPtr::vftable;
  CMapPtrToPtr::RemoveAll(param_1);
  return;
}


==================================================================

### EXPORT FUNC 1800302d0 (107 bytes) name=FUN_1800302d0

void FUN_1800302d0(longlong param_1)

{
  longlong lVar1;
  undefined8 uVar2;
  longlong lVar3;
  undefined8 *puVar4;
  
  if (*(longlong *)(param_1 + 0x20) == 0) {
    lVar3 = FUN_18003255c((undefined8 *)(param_1 + 0x28),*(longlong *)(param_1 + 0x30),0x18);
    lVar1 = *(longlong *)(param_1 + 0x30);
    puVar4 = (undefined8 *)(lVar3 + -0x10 + lVar1 * 0x18);
    while (lVar1 = lVar1 + -1, -1 < lVar1) {
      *puVar4 = *(undefined8 *)(param_1 + 0x20);
      *(undefined8 **)(param_1 + 0x20) = puVar4;
      puVar4 = puVar4 + -3;
    }
  }
  puVar4 = *(undefined8 **)(param_1 + 0x20);
  uVar2 = *puVar4;
  *(longlong *)(param_1 + 0x18) = *(longlong *)(param_1 + 0x18) + 1;
  *(undefined8 *)(param_1 + 0x20) = uVar2;
  puVar4[1] = 0;
  puVar4[2] = 0;
  return;
}


==================================================================

### EXPORT FUNC 18003033c (110 bytes) name=FUN_18003033c

undefined8 * FUN_18003033c(longlong param_1,ulonglong param_2)

{
  undefined8 *puVar1;
  longlong lVar2;
  uint local_res18 [2];
  undefined4 local_res20 [2];
  
  lVar2 = param_1;
  puVar1 = GetAssocAt(param_1,param_2,local_res18,local_res20);
  if (puVar1 == (undefined8 *)0x0) {
    if (*(longlong *)(lVar2 + 8) == 0) {
      InitHashTable(lVar2,*(uint *)(lVar2 + 0x10),1);
    }
    puVar1 = (undefined8 *)FUN_1800302d0(param_1);
    puVar1[1] = param_2;
    *puVar1 = *(undefined8 *)(*(longlong *)(param_1 + 8) + (ulonglong)local_res18[0] * 8);
    *(undefined8 **)(*(longlong *)(param_1 + 8) + (ulonglong)local_res18[0] * 8) = puVar1;
  }
  return puVar1 + 2;
}


==================================================================

### EXPORT FUNC 1800303ac (57 bytes) name=FUN_1800303ac

CMapPtrToPtr * FUN_1800303ac(CMapPtrToPtr *param_1,uint param_2)

{
  *(undefined ***)param_1 = CMapPtrToPtr::vftable;
  CMapPtrToPtr::RemoveAll(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 1800303e8 (49 bytes) name=RemoveAll

/* Library Function - Multiple Matches With Same Base Name
    public: void __cdecl CObList::RemoveAll(void) __ptr64
    public: void __cdecl CPtrList::RemoveAll(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

void RemoveAll(longlong param_1)

{
  *(undefined8 *)(param_1 + 0x18) = 0;
  *(undefined8 *)(param_1 + 0x20) = 0;
  *(undefined8 *)(param_1 + 0x10) = 0;
  *(undefined8 *)(param_1 + 8) = 0;
  FUN_180032594(*(undefined8 **)(param_1 + 0x28));
  *(undefined8 *)(param_1 + 0x28) = 0;
  return;
}


==================================================================

### EXPORT FUNC 18003041c (42 bytes) name=FUN_18003041c

void FUN_18003041c(longlong param_1,undefined8 *param_2)

{
  longlong *plVar1;
  
  if (param_2 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  *param_2 = *(undefined8 *)(param_1 + 0x20);
  plVar1 = (longlong *)(param_1 + 0x18);
  *plVar1 = *plVar1 + -1;
  *(undefined8 **)(param_1 + 0x20) = param_2;
  if (*plVar1 == 0) {
    RemoveAll(param_1);
  }
  return;
}


==================================================================

### EXPORT FUNC 180030448 (72 bytes) name=FUN_180030448

longlong FUN_180030448(longlong param_1)

{
  longlong *plVar1;
  longlong lVar2;
  longlong lVar3;
  
  if (param_1 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  plVar1 = *(longlong **)(param_1 + 8);
  if (plVar1 == (longlong *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  lVar2 = *plVar1;
  lVar3 = plVar1[2];
  *(longlong *)(param_1 + 8) = lVar2;
  if (lVar2 == 0) {
    *(undefined8 *)(param_1 + 0x10) = 0;
  }
  else {
    *(undefined8 *)(lVar2 + 8) = 0;
  }
  FUN_18003041c(param_1,plVar1);
  return lVar3;
}


==================================================================

### EXPORT FUNC 180030494 (43 bytes) name=CFixedAllocNoSync

/* Library Function - Single Match
    public: __cdecl CFixedAllocNoSync::CFixedAllocNoSync(unsigned int,unsigned int) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

CFixedAllocNoSync * __thiscall
CFixedAllocNoSync::CFixedAllocNoSync(CFixedAllocNoSync *this,uint param_1,uint param_2)

{
  if (param_1 < 8) {
    param_1 = 8;
  }
  if (param_2 < 2) {
    param_2 = 0x40;
  }
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined8 *)(this + 8) = 0;
  *(uint *)(this + 4) = param_2;
  *(uint *)this = param_1;
  return this;
}


==================================================================

### EXPORT FUNC 1800304c0 (34 bytes) name=FreeAll

/* Library Function - Single Match
    public: void __cdecl CFixedAllocNoSync::FreeAll(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

void __thiscall CFixedAllocNoSync::FreeAll(CFixedAllocNoSync *this)

{
  FUN_180032594(*(undefined8 **)(this + 8));
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  return;
}


==================================================================

### EXPORT FUNC 1800304e4 (5 bytes) name=FreeAll

void __thiscall CFixedAllocNoSync::FreeAll(CFixedAllocNoSync *this)

{
  FUN_180032594(*(undefined8 **)(this + 8));
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  return;
}


==================================================================

### EXPORT FUNC 1800304ec (90 bytes) name=Alloc

/* Library Function - Single Match
    public: void * __ptr64 __cdecl CFixedAllocNoSync::Alloc(void) __ptr64
   
   Library: Visual Studio 2005 Release */

void * __thiscall CFixedAllocNoSync::Alloc(CFixedAllocNoSync *this)

{
  int iVar1;
  longlong lVar2;
  undefined8 *puVar3;
  
  if (*(longlong *)(this + 0x10) == 0) {
    lVar2 = FUN_18003255c((undefined8 *)(this + 8),(ulonglong)*(uint *)(this + 4),
                          (ulonglong)*(uint *)this);
    iVar1 = *(int *)(this + 4);
    puVar3 = (undefined8 *)(lVar2 + 8 + (ulonglong)(uint)((iVar1 + -1) * *(int *)this));
    while (iVar1 = iVar1 + -1, -1 < iVar1) {
      *puVar3 = *(undefined8 *)(this + 0x10);
      *(undefined8 **)(this + 0x10) = puVar3;
      puVar3 = (undefined8 *)((longlong)puVar3 - (ulonglong)*(uint *)this);
    }
  }
  puVar3 = *(undefined8 **)(this + 0x10);
  *(undefined8 *)(this + 0x10) = *puVar3;
  return puVar3;
}


==================================================================

### EXPORT FUNC 180030548 (193 bytes) name=FUN_180030548

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

void FUN_180030548(HWND param_1,LPCWSTR param_2)

{
  uint uVar1;
  uint uVar2;
  int iVar3;
  undefined1 auStack_238 [32];
  WCHAR local_218;
  ulonglong local_216 [63];
  ulonglong local_18;
  
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_238;
  if (param_1 == (HWND)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (param_2 != (LPCWSTR)0x0) {
    uVar1 = lstrlenW(param_2);
    local_218 = L'\0';
    FUN_1800357d0(local_216,0,0x1fe);
    if (((uVar1 < 0x101) && (uVar2 = GetWindowTextW(param_1,&local_218,0x100), uVar2 == uVar1)) &&
       (iVar3 = lstrcmpW(&local_218,param_2), iVar3 == 0)) {
      return;
    }
    SetWindowTextW(param_1,param_2);
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18001ed90();
}


==================================================================

### EXPORT FUNC 18003060c (43 bytes) name=FUN_18003060c

void FUN_18003060c(undefined8 *param_1)

{
  if (param_1 == (undefined8 *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if ((HGDIOBJ)*param_1 != (HGDIOBJ)0x0) {
    DeleteObject((HGDIOBJ)*param_1);
    *param_1 = 0;
  }
  return;
}


==================================================================

### EXPORT FUNC 180030638 (65 bytes) name=FUN_180030638

void FUN_180030638(HGLOBAL param_1)

{
  UINT UVar1;
  uint uVar2;
  
  if (param_1 != (HGLOBAL)0x0) {
    UVar1 = GlobalFlags(param_1);
    uVar2 = UVar1 & 0xff;
    if ((char)UVar1 != '\0') {
      do {
        GlobalUnlock(param_1);
        uVar2 = uVar2 - 1;
      } while (uVar2 != 0);
    }
    GlobalFree(param_1);
  }
  return;
}


==================================================================

### EXPORT FUNC 18003067c (98 bytes) name=FUN_18003067c

undefined8 FUN_18003067c(longlong param_1)

{
  longlong lVar1;
  SIZE_T SVar2;
  
  lVar1 = FUN_1800222f4();
  if ((lVar1 != 0) && (*(LPCVOID *)(lVar1 + 0x18) != (LPCVOID)0x0)) {
    SVar2 = FUN_180035e80(*(LPCVOID *)(lVar1 + 0x18));
    if (param_1 + 4U < SVar2) {
      FUN_1800365b0(*(LPVOID *)(lVar1 + 0x18),(SVar2 - param_1) - 4);
    }
    else {
      FUN_180034a70(*(LPVOID *)(lVar1 + 0x18));
      *(undefined8 *)(lVar1 + 0x18) = 0;
    }
    return 1;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18001ed6c();
}


==================================================================

### EXPORT FUNC 1800306e0 (111 bytes) name=_AfxCompareClassName

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    int __cdecl _AfxCompareClassName(struct HWND__ * __ptr64,wchar_t const * __ptr64)
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

int __cdecl _AfxCompareClassName(HWND__ *param_1,wchar_t *param_2)

{
  int iVar1;
  undefined1 auStackY_88 [32];
  WCHAR local_58 [32];
  ulonglong local_18;
  
  local_18 = DAT_18006cea0 ^ (ulonglong)auStackY_88;
  GetClassNameW(param_1,local_58,0x20);
  iVar1 = CompareStringW(0x409,1,local_58,-1,param_2,-1);
  return (int)(iVar1 == 2);
}


==================================================================

### EXPORT FUNC 180030750 (134 bytes) name=_AfxChildWindowFromPoint

/* Library Function - Single Match
    struct HWND__ * __ptr64 __cdecl _AfxChildWindowFromPoint(struct HWND__ * __ptr64,struct
   tagPOINT)
   
   Library: Visual Studio 2005 Release */

HWND__ * __cdecl _AfxChildWindowFromPoint(HWND__ *param_1,tagPOINT param_2)

{
  int iVar1;
  uint uVar2;
  BOOL BVar3;
  UINT uCmd;
  tagPOINT local_res10 [3];
  tagRECT local_18;
  
  local_res10[0] = param_2;
  ClientToScreen(param_1,local_res10);
  uCmd = 5;
  do {
    param_1 = GetWindow(param_1,uCmd);
    if (param_1 == (HWND)0x0) {
      return (HWND__ *)0x0;
    }
    iVar1 = GetDlgCtrlID(param_1);
    if (((short)iVar1 != 0) && (uVar2 = GetWindowLongW(param_1,-0x10), (uVar2 >> 0x1c & 1) != 0)) {
      GetWindowRect(param_1,&local_18);
      BVar3 = PtInRect(&local_18,local_res10[0]);
      if (BVar3 != 0) {
        return param_1;
      }
    }
    uCmd = 2;
  } while( true );
}


==================================================================

### EXPORT FUNC 1800307d8 (5 bytes) name=FUN_1800307d8

void FUN_1800307d8(longlong param_1,undefined8 param_2)

{
  *(undefined8 *)(param_1 + 0x10) = param_2;
  return;
}


==================================================================

### EXPORT FUNC 1800307e0 (5 bytes) name=FUN_1800307e0

void FUN_1800307e0(longlong param_1,undefined8 param_2)

{
  *(undefined8 *)(param_1 + 8) = param_2;
  return;
}


==================================================================

### EXPORT FUNC 1800307e8 (6 bytes) name=FUN_1800307e8

void FUN_1800307e8(longlong param_1)

{
  *(undefined8 *)(param_1 + 0x10) = 0;
  return;
}


==================================================================

### EXPORT FUNC 1800307f0 (6 bytes) name=FUN_1800307f0

void FUN_1800307f0(longlong param_1)

{
  *(undefined8 *)(param_1 + 8) = 0;
  return;
}


==================================================================

### EXPORT FUNC 1800307f8 (69 bytes) name=SaveDC

/* Library Function - Single Match
    public: virtual int __cdecl CDC::SaveDC(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

int __thiscall CDC::SaveDC(CDC *this)

{
  int iVar1;
  int iVar2;
  
  iVar1 = 0;
  if (*(HDC *)(this + 0x10) != (HDC)0x0) {
    iVar1 = ::SaveDC(*(HDC *)(this + 0x10));
  }
  if (*(HDC *)(this + 8) != *(HDC *)(this + 0x10)) {
    iVar2 = ::SaveDC(*(HDC *)(this + 8));
    if (iVar2 != 0) {
      iVar1 = -1;
    }
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 180030840 (81 bytes) name=FUN_180030840

int FUN_180030840(longlong param_1,int param_2)

{
  int iVar1;
  BOOL BVar2;
  
  iVar1 = 1;
  if (*(HDC *)(param_1 + 8) != *(HDC *)(param_1 + 0x10)) {
    iVar1 = RestoreDC(*(HDC *)(param_1 + 8),param_2);
  }
  if (*(HDC *)(param_1 + 0x10) != (HDC)0x0) {
    if ((iVar1 != 0) && (BVar2 = RestoreDC(*(HDC *)(param_1 + 0x10),param_2), BVar2 != 0)) {
      return 1;
    }
    iVar1 = 0;
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 180030894 (62 bytes) name=FUN_180030894

COLORREF FUN_180030894(longlong param_1,COLORREF param_2)

{
  COLORREF CVar1;
  
  CVar1 = 0xffffffff;
  if (*(HDC *)(param_1 + 8) != *(HDC *)(param_1 + 0x10)) {
    CVar1 = SetBkColor(*(HDC *)(param_1 + 8),param_2);
  }
  if (*(HDC *)(param_1 + 0x10) != (HDC)0x0) {
    CVar1 = SetBkColor(*(HDC *)(param_1 + 0x10),param_2);
  }
  return CVar1;
}


==================================================================

### EXPORT FUNC 1800308d4 (62 bytes) name=FUN_1800308d4

COLORREF FUN_1800308d4(longlong param_1,COLORREF param_2)

{
  COLORREF CVar1;
  
  CVar1 = 0xffffffff;
  if (*(HDC *)(param_1 + 8) != *(HDC *)(param_1 + 0x10)) {
    CVar1 = SetTextColor(*(HDC *)(param_1 + 8),param_2);
  }
  if (*(HDC *)(param_1 + 0x10) != (HDC)0x0) {
    CVar1 = SetTextColor(*(HDC *)(param_1 + 0x10),param_2);
  }
  return CVar1;
}


==================================================================

### EXPORT FUNC 180030914 (61 bytes) name=FUN_180030914

int FUN_180030914(longlong param_1,int param_2)

{
  int iVar1;
  
  iVar1 = 0;
  if (*(HDC *)(param_1 + 8) != *(HDC *)(param_1 + 0x10)) {
    iVar1 = SetMapMode(*(HDC *)(param_1 + 8),param_2);
  }
  if (*(HDC *)(param_1 + 0x10) != (HDC)0x0) {
    iVar1 = SetMapMode(*(HDC *)(param_1 + 0x10),param_2);
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 180030954 (11 bytes) name=FUN_180030954

void FUN_180030954(longlong param_1)

{
                    /* WARNING: Could not recover jumptable at 0x000180030958. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  GetClipBox(*(undefined8 *)(param_1 + 8));
  return;
}


==================================================================

### EXPORT FUNC 180030960 (8 bytes) name=FUN_180030960

undefined ** FUN_180030960(void)

{
  return &PTR_s_CResourceException_180056bf0;
}


==================================================================

### EXPORT FUNC 180030968 (8 bytes) name=FUN_180030968

undefined ** FUN_180030968(void)

{
  return &PTR_s_CUserException_180056c20;
}


==================================================================

### EXPORT FUNC 180030970 (8 bytes) name=FUN_180030970

undefined ** FUN_180030970(void)

{
  return &PTR_DAT_180056c50;
}


==================================================================

### EXPORT FUNC 180030978 (8 bytes) name=FUN_180030978

undefined ** FUN_180030978(void)

{
  return &PTR_s_CPaintDC_180056c80;
}


==================================================================

### EXPORT FUNC 180030980 (8 bytes) name=FUN_180030980

undefined ** FUN_180030980(void)

{
  return &PTR_s_CGdiObject_180056cb0;
}


==================================================================

### EXPORT FUNC 180030988 (33 bytes) name=FUN_180030988

void FUN_180030988(void)

{
  undefined *local_res8 [4];
  
  local_res8[0] = &DAT_180072540;
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(local_res8,(ThrowInfo *)&DAT_1800688d8);
}


==================================================================

### EXPORT FUNC 1800309ac (33 bytes) name=FUN_1800309ac

void FUN_1800309ac(void)

{
  undefined *local_res8 [4];
  
  local_res8[0] = &DAT_180072660;
                    /* WARNING: Subroutine does not return */
  _CxxThrowException(local_res8,(ThrowInfo *)&DAT_180068950);
}


==================================================================

### EXPORT FUNC 1800309d0 (27 bytes) name=FUN_1800309d0

undefined8 * FUN_1800309d0(undefined8 *param_1)

{
  *param_1 = CDC::vftable;
  param_1[1] = 0;
  param_1[2] = 0;
  *(undefined4 *)(param_1 + 3) = 0;
  return param_1;
}


==================================================================

### EXPORT FUNC 1800309ec (11 bytes) name=FUN_1800309ec

void FUN_1800309ec(longlong param_1)

{
                    /* WARNING: Could not recover jumptable at 0x0001800309f0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  PtVisible(*(undefined8 *)(param_1 + 8));
  return;
}


==================================================================

### EXPORT FUNC 1800309f8 (11 bytes) name=FUN_1800309f8

void FUN_1800309f8(longlong param_1)

{
                    /* WARNING: Could not recover jumptable at 0x0001800309fc. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  RectVisible(*(undefined8 *)(param_1 + 8));
  return;
}


==================================================================

### EXPORT FUNC 180030a04 (27 bytes) name=FUN_180030a04

void FUN_180030a04(longlong param_1,int param_2,int param_3,LPCWSTR param_4,int param_5)

{
  TextOutW(*(HDC *)(param_1 + 8),param_2,param_3,param_4,param_5);
  return;
}


==================================================================

### EXPORT FUNC 180030a20 (63 bytes) name=FUN_180030a20

void FUN_180030a20(longlong param_1,int param_2,int param_3,UINT param_4,RECT *param_5,
                  LPCWSTR param_6,UINT param_7,INT *param_8)

{
  ExtTextOutW(*(HDC *)(param_1 + 8),param_2,param_3,param_4,param_5,param_6,param_7,param_8);
  return;
}


==================================================================

### EXPORT FUNC 180030a60 (100 bytes) name=FID_conflict:TabbedTextOutA

/* Library Function - Multiple Matches With Different Base Names
    public: virtual class CSize __cdecl CDC::TabbedTextOutA(int,int,char const * __ptr64,int,int,int
   * __ptr64,int) __ptr64
    public: virtual class CSize __cdecl CDC::TabbedTextOutW(int,int,wchar_t const *
   __ptr64,int,int,int * __ptr64,int) __ptr64
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release, Visual Studio 2010 Release,
   Visual Studio 2012 Release */

LONG __stdcall
FID_conflict_TabbedTextOutA
          (HDC hdc,int x,int y,LPCSTR lpString,int chCount,int nTabPositions,
          INT *lpnTabStopPositions,int nTabOrigin)

{
  LONG LVar1;
  undefined4 in_register_00000014;
  undefined4 in_stack_0000002c;
  undefined4 in_stack_00000044;
  int in_stack_00000048;
  
  LVar1 = TabbedTextOutW(*(HDC *)(hdc + 2),y,(int)lpString,
                         (LPCWSTR)CONCAT44(in_stack_0000002c,chCount),nTabPositions,
                         (int)lpnTabStopPositions,(INT *)CONCAT44(in_stack_00000044,nTabOrigin),
                         in_stack_00000048);
  *(int *)CONCAT44(in_register_00000014,x) = (int)(short)LVar1;
  ((int *)CONCAT44(in_register_00000014,x))[1] = (int)(short)((uint)LVar1 >> 0x10);
  return x;
}


==================================================================

### EXPORT FUNC 180030ac4 (27 bytes) name=FUN_180030ac4

void FUN_180030ac4(longlong param_1,LPCWSTR param_2,int param_3,LPRECT param_4,UINT param_5)

{
  DrawTextW(*(HDC *)(param_1 + 8),param_2,param_3,param_4,param_5);
  return;
}


==================================================================

### EXPORT FUNC 180030ae0 (37 bytes) name=FUN_180030ae0

void FUN_180030ae0(longlong param_1,LPWSTR param_2,int param_3,LPRECT param_4,UINT param_5,
                  LPDRAWTEXTPARAMS param_6)

{
  DrawTextExW(*(HDC *)(param_1 + 8),param_2,param_3,param_4,param_5,param_6);
  return;
}


==================================================================

### EXPORT FUNC 180030b08 (88 bytes) name=FUN_180030b08

void FUN_180030b08(longlong param_1,longlong param_2,GRAYSTRINGPROC param_3,LPARAM param_4,
                  int param_5,int param_6,int param_7,int param_8,int param_9)

{
  HBRUSH hBrush;
  
  hBrush = (HBRUSH)0x0;
  if (param_2 != 0) {
    hBrush = *(HBRUSH *)(param_2 + 8);
  }
  GrayStringW(*(HDC *)(param_1 + 8),hBrush,param_3,param_4,param_5,param_6,param_7,param_8,param_9);
  return;
}


==================================================================

### EXPORT FUNC 180030b60 (29 bytes) name=FUN_180030b60

void FUN_180030b60(longlong param_1,int param_2,int param_3,LPCSTR param_4,LPVOID param_5)

{
  Escape(*(HDC *)(param_1 + 8),param_2,param_3,param_4,param_5);
  return;
}


==================================================================

### EXPORT FUNC 180030b80 (103 bytes) name=FUN_180030b80

LPPOINT FUN_180030b80(longlong param_1,LPPOINT param_2,int param_3,int param_4)

{
  if (*(HDC *)(param_1 + 8) != *(HDC *)(param_1 + 0x10)) {
    SetViewportOrgEx(*(HDC *)(param_1 + 8),param_3,param_4,param_2);
  }
  if (*(HDC *)(param_1 + 0x10) != (HDC)0x0) {
    SetViewportOrgEx(*(HDC *)(param_1 + 0x10),param_3,param_4,param_2);
  }
  return param_2;
}


==================================================================

### EXPORT FUNC 180030be8 (103 bytes) name=FUN_180030be8

LPPOINT FUN_180030be8(longlong param_1,LPPOINT param_2,int param_3,int param_4)

{
  if (*(HDC *)(param_1 + 8) != *(HDC *)(param_1 + 0x10)) {
    OffsetViewportOrgEx(*(HDC *)(param_1 + 8),param_3,param_4,param_2);
  }
  if (*(HDC *)(param_1 + 0x10) != (HDC)0x0) {
    OffsetViewportOrgEx(*(HDC *)(param_1 + 0x10),param_3,param_4,param_2);
  }
  return param_2;
}


==================================================================

### EXPORT FUNC 180030c50 (103 bytes) name=FUN_180030c50

LPSIZE FUN_180030c50(longlong param_1,LPSIZE param_2,int param_3,int param_4)

{
  if (*(HDC *)(param_1 + 8) != *(HDC *)(param_1 + 0x10)) {
    SetViewportExtEx(*(HDC *)(param_1 + 8),param_3,param_4,param_2);
  }
  if (*(HDC *)(param_1 + 0x10) != (HDC)0x0) {
    SetViewportExtEx(*(HDC *)(param_1 + 0x10),param_3,param_4,param_2);
  }
  return param_2;
}


==================================================================

### EXPORT FUNC 180030cb8 (141 bytes) name=FUN_180030cb8

LPSIZE FUN_180030cb8(longlong param_1,LPSIZE param_2,int param_3,int param_4,int param_5,int param_6
                    )

{
  if (*(HDC *)(param_1 + 8) != *(HDC *)(param_1 + 0x10)) {
    ScaleViewportExtEx(*(HDC *)(param_1 + 8),param_3,param_4,param_5,param_6,param_2);
  }
  if (*(HDC *)(param_1 + 0x10) != (HDC)0x0) {
    ScaleViewportExtEx(*(HDC *)(param_1 + 0x10),param_3,param_4,param_5,param_6,param_2);
  }
  return param_2;
}


==================================================================

### EXPORT FUNC 180030d48 (103 bytes) name=FUN_180030d48

LPSIZE FUN_180030d48(longlong param_1,LPSIZE param_2,int param_3,int param_4)

{
  if (*(HDC *)(param_1 + 8) != *(HDC *)(param_1 + 0x10)) {
    SetWindowExtEx(*(HDC *)(param_1 + 8),param_3,param_4,param_2);
  }
  if (*(HDC *)(param_1 + 0x10) != (HDC)0x0) {
    SetWindowExtEx(*(HDC *)(param_1 + 0x10),param_3,param_4,param_2);
  }
  return param_2;
}


==================================================================

### EXPORT FUNC 180030db0 (141 bytes) name=FUN_180030db0

LPSIZE FUN_180030db0(longlong param_1,LPSIZE param_2,int param_3,int param_4,int param_5,int param_6
                    )

{
  if (*(HDC *)(param_1 + 8) != *(HDC *)(param_1 + 0x10)) {
    ScaleWindowExtEx(*(HDC *)(param_1 + 8),param_3,param_4,param_5,param_6,param_2);
  }
  if (*(HDC *)(param_1 + 0x10) != (HDC)0x0) {
    ScaleWindowExtEx(*(HDC *)(param_1 + 0x10),param_3,param_4,param_5,param_6,param_2);
  }
  return param_2;
}


==================================================================

### EXPORT FUNC 180030e40 (52 bytes) name=CreateObject

/* Library Function - Single Match
    public: static class CObject * __ptr64 __cdecl CDC::CreateObject(void)
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

CObject * __cdecl CDC::CreateObject(void)

{
  CObject *pCVar1;
  CObject *pCVar2;
  
  pCVar1 = FUN_18001eb74(0x20);
  pCVar2 = (CObject *)0x0;
  if (pCVar1 != (CObject *)0x0) {
    *(undefined8 *)(pCVar1 + 8) = 0;
    *(undefined8 *)(pCVar1 + 0x10) = 0;
    *(undefined ***)pCVar1 = vftable;
    *(undefined4 *)(pCVar1 + 0x18) = 0;
    pCVar2 = pCVar1;
  }
  return pCVar2;
}


==================================================================

### EXPORT FUNC 180030e74 (43 bytes) name=FUN_180030e74

undefined8 * FUN_180030e74(void)

{
  undefined8 *puVar1;
  
  puVar1 = FUN_18001eb74(0x10);
  if (puVar1 == (undefined8 *)0x0) {
    puVar1 = (undefined8 *)0x0;
  }
  else {
    puVar1[1] = 0;
    *puVar1 = CGdiObject::vftable;
  }
  return puVar1;
}


==================================================================

### EXPORT FUNC 180030ed8 (38 bytes) name=FUN_180030ed8

undefined8 * FUN_180030ed8(undefined8 *param_1,byte param_2)

{
  *param_1 = CResourceException::vftable;
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180030f00 (38 bytes) name=FUN_180030f00

undefined8 * FUN_180030f00(undefined8 *param_1,byte param_2)

{
  *param_1 = CUserException::vftable;
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180030f28 (163 bytes) name=afxMapHDC

/* Library Function - Single Match
    class CHandleMap * __ptr64 __cdecl afxMapHDC(int)
   
   Library: Visual Studio 2008 Release */

CHandleMap * __cdecl afxMapHDC(int param_1)

{
  longlong lVar1;
  undefined *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  
  lVar1 = FUN_180022c04();
  puVar4 = (undefined8 *)0x0;
  if ((*(longlong *)(lVar1 + 0x38) == 0) && (param_1 != 0)) {
    puVar2 = FUN_18001eb64(FUN_18003067c);
    puVar3 = FUN_18001eb74(0xb8);
    if (puVar3 != (undefined8 *)0x0) {
      puVar4 = FUN_180023874(puVar3,0x180056c50,0x180030ea0,0x1800270a0,8,2);
    }
    *(undefined8 **)(lVar1 + 0x38) = puVar4;
    FUN_18001eb64(puVar2);
  }
  return *(CHandleMap **)(lVar1 + 0x38);
}


==================================================================

### EXPORT FUNC 180030fd8 (24 bytes) name=Unwind@180030fd8

void Unwind_180030fd8(undefined8 param_1,longlong param_2)

{
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x58));
  return;
}


==================================================================

### EXPORT FUNC 180030ff0 (35 bytes) name=FromHandle

/* Library Function - Multiple Matches With Same Base Name
    public: static class CDC * __ptr64 __cdecl CDC::FromHandle(struct HDC__ * __ptr64)
    public: static class CGdiObject * __ptr64 __cdecl CGdiObject::FromHandle(void * __ptr64)
    public: static class CImageList * __ptr64 __cdecl CImageList::FromHandle(struct _IMAGELIST *
   __ptr64)
    public: static class CMenu * __ptr64 __cdecl CMenu::FromHandle(struct HMENU__ * __ptr64)
   
   Library: Visual Studio 2008 Release */

void FromHandle(void *param_1)

{
  CHandleMap *this;
  
  this = afxMapHDC(1);
  CHandleMap::FromHandle(this,param_1);
  return;
}


==================================================================

### EXPORT FUNC 180031014 (73 bytes) name=Attach

/* Library Function - Single Match
    public: int __cdecl CDC::Attach(struct HDC__ * __ptr64) __ptr64
   
   Library: Visual Studio 2005 Release */

int __thiscall CDC::Attach(CDC *this,HDC__ *param_1)

{
  CHandleMap *pCVar1;
  undefined8 *puVar2;
  
  if (param_1 != (HDC__ *)0x0) {
    *(HDC__ **)(this + 8) = param_1;
    pCVar1 = afxMapHDC(1);
    puVar2 = FUN_18003033c((longlong)(pCVar1 + 0x30),*(ulonglong *)(this + 8));
    *puVar2 = this;
    (**(code **)(*(longlong *)this + 0x18))(this,*(undefined8 *)(this + 8));
  }
  return (uint)(param_1 != (HDC__ *)0x0);
}


==================================================================

### EXPORT FUNC 180031060 (77 bytes) name=Detach

/* Library Function - Single Match
    public: struct HDC__ * __ptr64 __cdecl CDC::Detach(void) __ptr64
   
   Library: Visual Studio 2008 Release */

HDC__ * __thiscall CDC::Detach(CDC *this)

{
  HDC__ *pHVar1;
  longlong lVar2;
  
  pHVar1 = *(HDC__ **)(this + 8);
  if (pHVar1 != (HDC__ *)0x0) {
    lVar2 = FUN_180022c04();
    if (*(longlong *)(lVar2 + 0x38) != 0) {
      CMapPtrToPtr::RemoveKey
                ((CMapPtrToPtr *)(*(longlong *)(lVar2 + 0x38) + 0x30),*(void **)(this + 8));
    }
  }
  (**(code **)(*(longlong *)this + 0x28))(this);
  *(undefined8 *)(this + 8) = 0;
  return pHVar1;
}


==================================================================

### EXPORT FUNC 1800310b0 (40 bytes) name=~CDC

/* Library Function - Single Match
    public: virtual __cdecl CDC::~CDC(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CDC::~CDC(CDC *this)

{
  HDC__ *hdc;
  
  *(undefined ***)this = vftable;
  if (*(longlong *)(this + 8) != 0) {
    hdc = Detach(this);
    DeleteDC(hdc);
  }
  return;
}


==================================================================

### EXPORT FUNC 1800310d8 (94 bytes) name=CPaintDC

/* Library Function - Single Match
    public: __cdecl CPaintDC::CPaintDC(class CWnd * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

CPaintDC * __thiscall CPaintDC::CPaintDC(CPaintDC *this,CWnd *param_1)

{
  HWND hWnd;
  int iVar1;
  HDC pHVar2;
  
  *(undefined8 *)(this + 8) = 0;
  *(undefined8 *)(this + 0x10) = 0;
  *(undefined4 *)(this + 0x18) = 0;
  *(undefined ***)this = vftable;
  hWnd = *(HWND *)(param_1 + 0x40);
  *(HWND *)(this + 0x20) = hWnd;
  pHVar2 = BeginPaint(hWnd,(LPPAINTSTRUCT)(this + 0x28));
  iVar1 = CDC::Attach((CDC *)this,pHVar2);
  if (iVar1 == 0) {
    FUN_180030988();
  }
  return this;
}


==================================================================

### EXPORT FUNC 180031138 (24 bytes) name=Unwind@180031138

void Unwind_180031138(undefined8 param_1,longlong param_2)

{
  CDC::~CDC(*(CDC **)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 180031150 (68 bytes) name=~CPaintDC

/* Library Function - Single Match
    public: virtual __cdecl CPaintDC::~CPaintDC(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CPaintDC::~CPaintDC(CPaintDC *this)

{
  *(undefined ***)this = vftable;
  EndPaint(*(HWND *)(this + 0x20),(PAINTSTRUCT *)(this + 0x28));
  CDC::Detach((CDC *)this);
  CDC::~CDC((CDC *)this);
  return;
}


==================================================================

### EXPORT FUNC 1800311a0 (24 bytes) name=Unwind@1800311a0

void Unwind_1800311a0(undefined8 param_1,longlong param_2)

{
  CDC::~CDC(*(CDC **)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 1800311b8 (163 bytes) name=afxMapHGDIOBJ

/* Library Function - Single Match
    class CHandleMap * __ptr64 __cdecl afxMapHGDIOBJ(int)
   
   Library: Visual Studio 2008 Release */

CHandleMap * __cdecl afxMapHGDIOBJ(int param_1)

{
  longlong lVar1;
  undefined *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  
  lVar1 = FUN_180022c04();
  puVar4 = (undefined8 *)0x0;
  if ((*(longlong *)(lVar1 + 0x40) == 0) && (param_1 != 0)) {
    puVar2 = FUN_18001eb64(FUN_18003067c);
    puVar3 = FUN_18001eb74(0xb8);
    if (puVar3 != (undefined8 *)0x0) {
      puVar4 = FUN_180023874(puVar3,0x180056cb0,0x180030ec0,0x1800270a0,8,1);
    }
    *(undefined8 **)(lVar1 + 0x40) = puVar4;
    FUN_18001eb64(puVar2);
  }
  return *(CHandleMap **)(lVar1 + 0x40);
}


==================================================================

### EXPORT FUNC 180031268 (24 bytes) name=Unwind@180031268

void Unwind_180031268(undefined8 param_1,longlong param_2)

{
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x58));
  return;
}


==================================================================

### EXPORT FUNC 180031280 (35 bytes) name=FromHandle

/* Library Function - Single Match
    public: static class CGdiObject * __ptr64 __cdecl CGdiObject::FromHandle(void * __ptr64)
   
   Library: Visual Studio 2008 Release */

CGdiObject * __cdecl CGdiObject::FromHandle(void *param_1)

{
  CHandleMap *this;
  CObject *pCVar1;
  
  this = afxMapHGDIOBJ(1);
  pCVar1 = CHandleMap::FromHandle(this,param_1);
  return (CGdiObject *)pCVar1;
}


==================================================================

### EXPORT FUNC 1800312a4 (68 bytes) name=Detach

/* Library Function - Single Match
    public: void * __ptr64 __cdecl CGdiObject::Detach(void) __ptr64
   
   Library: Visual Studio 2008 Release */

void * __thiscall CGdiObject::Detach(CGdiObject *this)

{
  void *pvVar1;
  longlong lVar2;
  
  pvVar1 = *(void **)(this + 8);
  if (pvVar1 != (void *)0x0) {
    lVar2 = FUN_180022c04();
    if (*(longlong *)(lVar2 + 0x40) != 0) {
      CMapPtrToPtr::RemoveKey
                ((CMapPtrToPtr *)(*(longlong *)(lVar2 + 0x40) + 0x30),*(void **)(this + 8));
    }
  }
  *(undefined8 *)(this + 8) = 0;
  return pvVar1;
}


==================================================================

### EXPORT FUNC 1800312e8 (34 bytes) name=DeleteObject

/* Library Function - Single Match
    public: int __cdecl CGdiObject::DeleteObject(void) __ptr64
   
   Library: Visual Studio 2008 Release */

int __thiscall CGdiObject::DeleteObject(CGdiObject *this)

{
  BOOL BVar1;
  void *ho;
  
  if (*(longlong *)(this + 8) == 0) {
    BVar1 = 0;
  }
  else {
    ho = Detach(this);
    BVar1 = ::DeleteObject(ho);
  }
  return BVar1;
}


==================================================================

### EXPORT FUNC 18003130c (47 bytes) name=FUN_18003130c

CDC * FUN_18003130c(CDC *param_1,uint param_2)

{
  CDC::~CDC(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18003133c (81 bytes) name=SelectStockObject

/* Library Function - Single Match
    public: virtual class CGdiObject * __ptr64 __cdecl CDC::SelectStockObject(int) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release */

CGdiObject * __thiscall CDC::SelectStockObject(CDC *this,int param_1)

{
  HGDIOBJ h;
  void *pvVar1;
  CGdiObject *pCVar2;
  
  h = GetStockObject(param_1);
  pvVar1 = (HGDIOBJ)0x0;
  if (*(HDC *)(this + 8) != *(HDC *)(this + 0x10)) {
    pvVar1 = SelectObject(*(HDC *)(this + 8),h);
  }
  if (*(HDC *)(this + 0x10) != (HDC)0x0) {
    pvVar1 = SelectObject(*(HDC *)(this + 0x10),h);
  }
  pCVar2 = CGdiObject::FromHandle(pvVar1);
  return pCVar2;
}


==================================================================

### EXPORT FUNC 180031390 (106 bytes) name=FUN_180031390

void FUN_180031390(longlong param_1,longlong param_2)

{
  HGDIOBJ pvVar1;
  HGDIOBJ h;
  
  h = (HGDIOBJ)0x0;
  pvVar1 = h;
  if (*(HDC *)(param_1 + 8) != *(HDC *)(param_1 + 0x10)) {
    if (param_2 != 0) {
      pvVar1 = *(HGDIOBJ *)(param_2 + 8);
    }
    pvVar1 = SelectObject(*(HDC *)(param_1 + 8),pvVar1);
  }
  if (*(HDC *)(param_1 + 0x10) != (HDC)0x0) {
    if (param_2 != 0) {
      h = *(HGDIOBJ *)(param_2 + 8);
    }
    pvVar1 = SelectObject(*(HDC *)(param_1 + 0x10),h);
  }
  CGdiObject::FromHandle(pvVar1);
  return;
}


==================================================================

### EXPORT FUNC 1800313fc (47 bytes) name=FUN_1800313fc

CPaintDC * FUN_1800313fc(CPaintDC *param_1,uint param_2)

{
  CPaintDC::~CPaintDC(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 18003142c (74 bytes) name=~CImageList

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    public: virtual __cdecl CImageList::~CImageList(void) __ptr64
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

void __thiscall CImageList::~CImageList(CImageList *this)

{
  undefined1 auStack_468 [64];
  undefined8 local_428;
  ulonglong local_18;
  
  local_428 = 0xfffffffffffffffe;
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_468;
  *(undefined ***)this = CGdiObject::vftable;
  CGdiObject::DeleteObject((CGdiObject *)this);
  return;
}


==================================================================

### EXPORT FUNC 18003147c (253 bytes) name=Catch@18003147c

undefined8 Catch_18003147c(undefined8 param_1,longlong param_2)

{
  wchar_t *pwVar1;
  wchar_t *pwVar2;
  int iVar3;
  undefined **ppuVar4;
  longlong lVar5;
  
  ppuVar4 = FUN_18001fcc0();
  if (ppuVar4 == (undefined **)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18000b170(-0x7fffbffb);
  }
  lVar5 = (**(code **)(*ppuVar4 + 0x18))(ppuVar4);
  *(longlong *)(param_2 + 0x30) = lVar5 + 0x18;
  iVar3 = (**(code **)(**(longlong **)(param_2 + 0x38) + 0x18))
                    (*(longlong **)(param_2 + 0x38),param_2 + 0x50,0x200,0);
  if (iVar3 == 0) {
    FUN_18001ad00((longlong *)(param_2 + 0x30),L"%s (%s:%d)","Exception thrown in destructor",
                  "f:\\sp\\vctools\\vc7libs\\ship\\atlmfc\\include\\afxwin1.inl");
  }
  else {
    FUN_18001ad00((longlong *)(param_2 + 0x30),L"%s (%s:%d)\n%s","Exception thrown in destructor",
                  "f:\\sp\\vctools\\vc7libs\\ship\\atlmfc\\include\\afxwin1.inl");
  }
  pwVar2 = *(wchar_t **)(param_2 + 0x30);
  AfxMessageBox(pwVar2,0,0);
  LOCK();
  pwVar1 = pwVar2 + -4;
  iVar3 = *(int *)pwVar1;
  *(int *)pwVar1 = *(int *)pwVar1 + -1;
  UNLOCK();
  if (iVar3 + -1 < 1) {
    (**(code **)(**(longlong **)(pwVar2 + -0xc) + 8))();
  }
  (**(code **)(**(longlong **)(param_2 + 0x38) + 8))(*(longlong **)(param_2 + 0x38),1);
  return 0x18003145e;
}


==================================================================

### EXPORT FUNC 18003157c (24 bytes) name=Unwind@18003157c

void Unwind_18003157c(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 180031594 (47 bytes) name=FUN_180031594

CImageList * FUN_180031594(CImageList *param_1,uint param_2)

{
  CImageList::~CImageList(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 1800315c4 (23 bytes) name=FUN_1800315c4

void FUN_1800315c4(undefined8 *param_1)

{
  if ((HGLOBAL)*param_1 != (HGLOBAL)0x0) {
    GlobalFree((HGLOBAL)*param_1);
  }
  return;
}


==================================================================

### EXPORT FUNC 1800315dc (8 bytes) name=FUN_1800315dc

undefined8 FUN_1800315dc(undefined8 *param_1)

{
  undefined8 uVar1;
  
  uVar1 = *param_1;
  *param_1 = 0;
  return uVar1;
}


==================================================================

### EXPORT FUNC 1800315e4 (85 bytes) name=FUN_1800315e4

short * FUN_1800315e4(longlong param_1)

{
  short sVar1;
  short *psVar2;
  
  psVar2 = (short *)(param_1 + 0x1a);
  if (*(short *)(param_1 + 2) != -1) {
    psVar2 = (short *)(param_1 + 0x12);
  }
  if (*psVar2 == -1) {
    psVar2 = psVar2 + 2;
  }
  else {
    do {
      sVar1 = *psVar2;
      psVar2 = psVar2 + 1;
    } while (sVar1 != 0);
  }
  if (*psVar2 == -1) {
    psVar2 = psVar2 + 2;
  }
  else {
    do {
      sVar1 = *psVar2;
      psVar2 = psVar2 + 1;
    } while (sVar1 != 0);
  }
  do {
    sVar1 = *psVar2;
    psVar2 = psVar2 + 1;
  } while (sVar1 != 0);
  return psVar2;
}


==================================================================

### EXPORT FUNC 18003163c (239 bytes) name=FUN_18003163c

ulonglong FUN_18003163c(uint *param_1)

{
  ushort uVar1;
  uint uVar2;
  short *psVar3;
  longlong lVar4;
  ushort *puVar5;
  short sVar6;
  bool bVar7;
  
  bVar7 = *(short *)((longlong)param_1 + 2) == -1;
  psVar3 = FUN_1800315e4((longlong)param_1);
  if (*(short *)((longlong)param_1 + 2) == -1) {
    uVar2 = param_1[3];
  }
  else {
    uVar2 = *param_1;
  }
  if ((uVar2 & 0x40) != 0) {
    psVar3 = (short *)((longlong)psVar3 + (longlong)(int)(((-(uint)bVar7 & 2) + 1) * 2));
    lVar4 = FUN_1800355e0(psVar3);
    psVar3 = psVar3 + lVar4 + 1;
  }
  if (bVar7) {
    sVar6 = (short)param_1[4];
  }
  else {
    sVar6 = (short)param_1[2];
  }
  if (sVar6 != 0) {
    do {
      puVar5 = (ushort *)
               (((longlong)psVar3 + 3U & 0xfffffffffffffffc) + (ulonglong)(-(uint)bVar7 & 6) + 0x12)
      ;
      if (*puVar5 == 0xffff) {
        puVar5 = puVar5 + 2;
      }
      else {
        do {
          uVar1 = *puVar5;
          puVar5 = puVar5 + 1;
        } while (uVar1 != 0);
      }
      if (*puVar5 == 0xffff) {
        puVar5 = puVar5 + 2;
      }
      else {
        do {
          uVar1 = *puVar5;
          puVar5 = puVar5 + 1;
        } while (uVar1 != 0);
      }
      uVar1 = *puVar5;
      if ((uVar1 != 0) && (!bVar7)) {
        uVar1 = uVar1 - 2;
      }
      sVar6 = sVar6 + -1;
      psVar3 = (short *)((longlong)puVar5 + (ulonglong)uVar1 + 2);
    } while (sVar6 != 0);
  }
  return (longlong)psVar3 - (longlong)param_1 & 0xffffffff;
}


==================================================================

### EXPORT FUNC 18003172c (187 bytes) name=FUN_18003172c

undefined8 FUN_18003172c(undefined8 *param_1,void *param_2,ulonglong param_3)

{
  int iVar1;
  uint uVar2;
  HGLOBAL hMem;
  ulonglong *puVar3;
  undefined8 uVar4;
  ulonglong dwBytes;
  
  dwBytes = (ulonglong)((int)param_3 + 0x40);
  *(int *)(param_1 + 1) = (int)param_3;
  if ((param_3 & 0xffffffff) <= dwBytes) {
    hMem = GlobalAlloc(0x40,dwBytes);
    *param_1 = hMem;
    if (hMem != (HGLOBAL)0x0) {
      puVar3 = GlobalLock(hMem);
      uVar4 = FUN_180032c60(puVar3,(ulonglong)*(uint *)(param_1 + 1),param_2,
                            (ulonglong)*(uint *)(param_1 + 1));
      iVar1 = (int)uVar4;
      if (iVar1 != 0) {
        if (iVar1 == 0xc) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed6c();
        }
        if ((iVar1 == 0x16) || (iVar1 == 0x22)) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
        if (iVar1 != 0x50) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
      }
      if (*(short *)((longlong)puVar3 + 2) == -1) {
        uVar2 = *(uint *)((longlong)puVar3 + 0xc);
      }
      else {
        uVar2 = (uint)*puVar3;
      }
      *(uint *)((longlong)param_1 + 0xc) = ~(uVar2 >> 6) & 1;
      GlobalUnlock((HGLOBAL)*param_1);
      return 1;
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 1800317ec (422 bytes) name=FUN_1800317ec

undefined8 FUN_1800317ec(undefined8 *param_1,LPCWSTR param_2,short param_3)

{
  int iVar1;
  short sVar2;
  int iVar3;
  errno_t eVar4;
  uint *puVar5;
  short *psVar6;
  longlong lVar7;
  int iVar8;
  rsize_t rVar9;
  uint uVar10;
  void *_Dst;
  int iVar11;
  void *_Src;
  bool bVar12;
  
  if (*(int *)(param_1 + 1) != 0) {
    puVar5 = GlobalLock((HGLOBAL)*param_1);
    bVar12 = *(short *)((longlong)puVar5 + 2) == -1;
    if (*(short *)((longlong)puVar5 + 2) == -1) {
      uVar10 = puVar5[3];
    }
    else {
      uVar10 = *puVar5;
    }
    iVar11 = (-(uint)bVar12 & 2) + 1;
    iVar1 = iVar11 * 2;
    if (bVar12) {
      puVar5[3] = puVar5[3] | 0x40;
    }
    else {
      *puVar5 = *puVar5 | 0x40;
    }
    iVar3 = lstrlenW(param_2);
    if ((iVar3 < 0x20) && (iVar3 = iVar1 + 2 + iVar3 * 2, iVar1 <= iVar3)) {
      psVar6 = FUN_1800315e4((longlong)puVar5);
      if ((uVar10 & 0x40) == 0) {
        iVar8 = 0;
      }
      else {
        lVar7 = FUN_1800355e0((short *)((longlong)iVar1 + (longlong)psVar6));
        iVar8 = iVar1 + 2 + (int)lVar7 * 2;
      }
      _Src = (void *)((longlong)iVar8 + 3 + (longlong)psVar6 & 0xfffffffffffffffc);
      _Dst = (void *)((longlong)iVar3 + 3 + (longlong)psVar6 & 0xfffffffffffffffc);
      if (bVar12) {
        sVar2 = (short)puVar5[4];
      }
      else {
        sVar2 = (short)puVar5[2];
      }
      if ((iVar3 != iVar8) && (sVar2 != 0)) {
        rVar9 = ((ulonglong)*(uint *)(param_1 + 1) - (longlong)_Src) + (longlong)puVar5;
        if (*(uint *)(param_1 + 1) < rVar9) {
          return 0;
        }
        eVar4 = memmove_s(_Dst,rVar9,_Src,rVar9);
        if (eVar4 != 0) {
          if (eVar4 == 0xc) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed6c();
          }
          if ((eVar4 == 0x16) || (eVar4 == 0x22)) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed90();
          }
          if (eVar4 != 0x50) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed90();
          }
        }
      }
      rVar9 = (rsize_t)(iVar3 + iVar11 * -2);
      *psVar6 = param_3;
      eVar4 = memmove_s((void *)((longlong)iVar1 + (longlong)psVar6),rVar9,param_2,rVar9);
      if (eVar4 != 0) {
        if (eVar4 == 0xc) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed6c();
        }
        if ((eVar4 == 0x16) || (eVar4 == 0x22)) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
        if (eVar4 != 0x50) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
      }
      *(int *)(param_1 + 1) = *(int *)(param_1 + 1) + ((int)_Dst - (int)_Src);
      GlobalUnlock((HGLOBAL)*param_1);
      *(undefined4 *)((longlong)param_1 + 0xc) = 0;
      return 1;
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180031998 (246 bytes) name=FUN_180031998

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

void FUN_180031998(undefined8 *param_1,short param_2)

{
  int iVar1;
  HANDLE h;
  HDC hdc;
  short sVar2;
  wchar_t *pwVar3;
  undefined1 auStack_a8 [32];
  int local_88 [7];
  WCHAR local_6c [34];
  ulonglong local_28;
  
  local_28 = DAT_18006cea0 ^ (ulonglong)auStack_a8;
  pwVar3 = L"System";
  sVar2 = 10;
  h = GetStockObject(0x11);
  if (h == (HGDIOBJ)0x0) {
    h = GetStockObject(0xd);
    if (h == (HGDIOBJ)0x0) goto LAB_180031a50;
  }
  iVar1 = GetObjectW(h,0x5c,local_88);
  if (iVar1 != 0) {
    pwVar3 = local_6c;
    hdc = GetDC((HWND)0x0);
    if (local_88[0] < 0) {
      local_88[0] = -local_88[0];
    }
    iVar1 = GetDeviceCaps(hdc,0x5a);
    iVar1 = MulDiv(local_88[0],0x48,iVar1);
    sVar2 = (short)iVar1;
    ReleaseDC((HWND)0x0,hdc);
  }
LAB_180031a50:
  if (param_2 == 0) {
    param_2 = sVar2;
  }
  FUN_1800317ec(param_1,pwVar3,param_2);
  return;
}


==================================================================

### EXPORT FUNC 180031a90 (75 bytes) name=FUN_180031a90

undefined8 * FUN_180031a90(undefined8 *param_1,uint *param_2)

{
  ulonglong uVar1;
  undefined8 uVar2;
  
  if (param_2 == (uint *)0x0) {
    *param_1 = 0;
    *(undefined4 *)(param_1 + 1) = 0;
    *(undefined4 *)((longlong)param_1 + 0xc) = 0;
  }
  else {
    uVar1 = FUN_18003163c(param_2);
    uVar2 = FUN_18003172c(param_1,param_2,uVar1 & 0xffffffff);
    if ((int)uVar2 == 0) {
                    /* WARNING: Subroutine does not return */
      FUN_18001ed6c();
    }
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180031adc (130 bytes) name=FUN_180031adc

undefined8 FUN_180031adc(uint *param_1,longlong *param_2,short *param_3)

{
  uint uVar1;
  int iVar2;
  short *psVar3;
  longlong lVar4;
  undefined8 uVar5;
  short sVar6;
  
  sVar6 = -1;
  if (*(short *)((longlong)param_1 + 2) == -1) {
    uVar1 = param_1[3];
  }
  else {
    uVar1 = *param_1;
  }
  if ((uVar1 & 0x40) == 0) {
    uVar5 = 0;
  }
  else {
    psVar3 = FUN_1800315e4((longlong)param_1);
    *param_3 = *psVar3;
    iVar2 = 1;
    if (*(short *)((longlong)param_1 + 2) == sVar6) {
      iVar2 = 3;
    }
    psVar3 = (short *)((longlong)psVar3 + (longlong)(iVar2 * 2));
    if (psVar3 == (short *)0x0) {
      iVar2 = 0;
    }
    else {
      lVar4 = FUN_1800355e0(psVar3);
      iVar2 = (int)lVar4;
    }
    FUN_18000b480(param_2,psVar3,iVar2);
    uVar5 = 1;
  }
  return uVar5;
}


==================================================================

### EXPORT FUNC 180031b60 (8 bytes) name=FUN_180031b60

undefined ** FUN_180031b60(void)

{
  return &PTR_s_CMenu_180057080;
}


==================================================================

### EXPORT FUNC 180031b68 (43 bytes) name=FUN_180031b68

undefined8 * FUN_180031b68(void)

{
  undefined8 *puVar1;
  
  puVar1 = FUN_18001eb74(0x10);
  if (puVar1 == (undefined8 *)0x0) {
    puVar1 = (undefined8 *)0x0;
  }
  else {
    puVar1[1] = 0;
    *puVar1 = CMenu::vftable;
  }
  return puVar1;
}


==================================================================

### EXPORT FUNC 180031bac (163 bytes) name=afxMapHMENU

/* Library Function - Single Match
    class CHandleMap * __ptr64 __cdecl afxMapHMENU(int)
   
   Library: Visual Studio 2008 Release */

CHandleMap * __cdecl afxMapHMENU(int param_1)

{
  longlong lVar1;
  undefined *puVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  
  lVar1 = FUN_180022c04();
  puVar4 = (undefined8 *)0x0;
  if ((*(longlong *)(lVar1 + 0x30) == 0) && (param_1 != 0)) {
    puVar2 = FUN_18001eb64(FUN_18003067c);
    puVar3 = FUN_18001eb74(0xb8);
    if (puVar3 != (undefined8 *)0x0) {
      puVar4 = FUN_180023874(puVar3,0x180057080,0x180031b94,0x1800270a0,8,1);
    }
    *(undefined8 **)(lVar1 + 0x30) = puVar4;
    FUN_18001eb64(puVar2);
  }
  return *(CHandleMap **)(lVar1 + 0x30);
}


==================================================================

### EXPORT FUNC 180031c5c (24 bytes) name=Unwind@180031c5c

void Unwind_180031c5c(undefined8 param_1,longlong param_2)

{
  thunk_FUN_180034a70(*(LPVOID *)(param_2 + 0x58));
  return;
}


==================================================================

### EXPORT FUNC 180031c74 (35 bytes) name=FromHandle

/* Library Function - Multiple Matches With Same Base Name
    public: static class CDC * __ptr64 __cdecl CDC::FromHandle(struct HDC__ * __ptr64)
    public: static class CGdiObject * __ptr64 __cdecl CGdiObject::FromHandle(void * __ptr64)
    public: static class CImageList * __ptr64 __cdecl CImageList::FromHandle(struct _IMAGELIST *
   __ptr64)
    public: static class CMenu * __ptr64 __cdecl CMenu::FromHandle(struct HMENU__ * __ptr64)
   
   Library: Visual Studio 2008 Release */

void FromHandle(void *param_1)

{
  CHandleMap *this;
  
  this = afxMapHMENU(1);
  CHandleMap::FromHandle(this,param_1);
  return;
}


==================================================================

### EXPORT FUNC 180031c98 (43 bytes) name=FromHandlePermanent

/* Library Function - Single Match
    public: static class CMenu * __ptr64 __cdecl CMenu::FromHandlePermanent(struct HMENU__ *
   __ptr64)
   
   Library: Visual Studio 2008 Release */

CMenu * __cdecl CMenu::FromHandlePermanent(HMENU__ *param_1)

{
  longlong lVar1;
  CMenu *pCVar2;
  
  lVar1 = FUN_180022c04();
  pCVar2 = (CMenu *)0x0;
  if (*(longlong *)(lVar1 + 0x30) != 0) {
    pCVar2 = (CMenu *)FUN_180030118(*(longlong *)(lVar1 + 0x30) + 0x30,(ulonglong)param_1);
  }
  return pCVar2;
}


==================================================================

### EXPORT FUNC 180031cc4 (68 bytes) name=Detach

/* Library Function - Single Match
    public: struct HMENU__ * __ptr64 __cdecl CMenu::Detach(void) __ptr64
   
   Library: Visual Studio 2008 Release */

HMENU__ * __thiscall CMenu::Detach(CMenu *this)

{
  HMENU__ *pHVar1;
  longlong lVar2;
  
  pHVar1 = *(HMENU__ **)(this + 8);
  if (pHVar1 != (HMENU__ *)0x0) {
    lVar2 = FUN_180022c04();
    if (*(longlong *)(lVar2 + 0x30) != 0) {
      CMapPtrToPtr::RemoveKey
                ((CMapPtrToPtr *)(*(longlong *)(lVar2 + 0x30) + 0x30),*(void **)(this + 8));
    }
  }
  *(undefined8 *)(this + 8) = 0;
  return pHVar1;
}


==================================================================

### EXPORT FUNC 180031d08 (34 bytes) name=DestroyMenu

/* Library Function - Single Match
    public: int __cdecl CMenu::DestroyMenu(void) __ptr64
   
   Library: Visual Studio 2008 Release */

int __thiscall CMenu::DestroyMenu(CMenu *this)

{
  BOOL BVar1;
  HMENU__ *hMenu;
  
  if (*(longlong *)(this + 8) == 0) {
    BVar1 = 0;
  }
  else {
    hMenu = Detach(this);
    BVar1 = ::DestroyMenu(hMenu);
  }
  return BVar1;
}


==================================================================

### EXPORT FUNC 180031d2c (57 bytes) name=FUN_180031d2c

CMenu * FUN_180031d2c(CMenu *param_1,uint param_2)

{
  *(undefined ***)param_1 = CMenu::vftable;
  CMenu::DestroyMenu(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180031d68 (50 bytes) name=AfxPostQuitMessage

/* Library Function - Single Match
    void __cdecl AfxPostQuitMessage(int)
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void __cdecl AfxPostQuitMessage(int param_1)

{
  longlong lVar1;
  
  lVar1 = FUN_180020e40();
  if ((lVar1 != 0) && (*(code **)(lVar1 + 0x78) != (code *)0x0)) {
    (**(code **)(lVar1 + 0x78))(1,1);
  }
                    /* WARNING: Could not recover jumptable at 0x000180031d93. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  PostQuitMessage(param_1);
  return;
}


==================================================================

### EXPORT FUNC 180031d9c (242 bytes) name=DevModeChange

/* Library Function - Single Match
    public: void __cdecl CWinApp::DevModeChange(wchar_t * __ptr64) __ptr64
   
   Library: Visual Studio 2008 Release */

void __thiscall CWinApp::DevModeChange(CWinApp *this,wchar_t *param_1)

{
  int iVar1;
  BOOL BVar2;
  LONG LVar3;
  LPVOID pvVar4;
  HGLOBAL hMem;
  PDEVMODEW pDevModeOutput;
  HANDLE local_res8;
  
  if (*(HGLOBAL *)(this + 0xe8) != (HGLOBAL)0x0) {
    pvVar4 = GlobalLock(*(HGLOBAL *)(this + 0xe8));
    iVar1 = lstrcmpW((LPCWSTR)((longlong)pvVar4 + (ulonglong)*(ushort *)((longlong)pvVar4 + 2) * 2),
                     param_1);
    if (iVar1 == 0) {
      BVar2 = OpenPrinterW(param_1,&local_res8,(LPPRINTER_DEFAULTSW)0x0);
      if (BVar2 != 0) {
        if (*(HGLOBAL *)(this + 0xe0) != (HGLOBAL)0x0) {
          FUN_180030638(*(HGLOBAL *)(this + 0xe0));
        }
        LVar3 = DocumentPropertiesW((HWND)0x0,local_res8,param_1,(PDEVMODEW)0x0,(PDEVMODEW)0x0,0);
        hMem = GlobalAlloc(0x42,(longlong)LVar3);
        *(HGLOBAL *)(this + 0xe0) = hMem;
        pDevModeOutput = GlobalLock(hMem);
        LVar3 = DocumentPropertiesW((HWND)0x0,local_res8,param_1,pDevModeOutput,(PDEVMODEW)0x0,2);
        if (LVar3 != 1) {
          FUN_180030638(*(HGLOBAL *)(this + 0xe0));
          *(undefined8 *)(this + 0xe0) = 0;
        }
        ClosePrinter(local_res8);
      }
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180031e90 (24 bytes) name=FUN_180031e90

bool FUN_180031e90(void)

{
  longlong lVar1;
  
  lVar1 = FUN_180022bb4();
  return *(int *)(lVar1 + 0x50) == 0;
}


==================================================================

### EXPORT FUNC 180031ea8 (19 bytes) name=AfxOleLockApp

/* Library Function - Single Match
    void __cdecl AfxOleLockApp(void)
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void __cdecl AfxOleLockApp(void)

{
  longlong lVar1;
  
  lVar1 = FUN_180022bb4();
  LOCK();
  *(int *)(lVar1 + 0x50) = *(int *)(lVar1 + 0x50) + 1;
  UNLOCK();
  return;
}


==================================================================

### EXPORT FUNC 180031ebc (100 bytes) name=AfxOleOnReleaseAllObjects

/* Library Function - Single Match
    void __cdecl AfxOleOnReleaseAllObjects(void)
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void __cdecl AfxOleOnReleaseAllObjects(void)

{
  int iVar1;
  longlong lVar2;
  
  lVar2 = FUN_180022bb4();
  if (*(int *)(lVar2 + 0x54) == 0) {
    lVar2 = FUN_180022bb4();
    *(undefined4 *)(lVar2 + 0x54) = 1;
    lVar2 = FUN_180022bb4();
    lVar2 = *(longlong *)(lVar2 + 8);
    if ((lVar2 == 0) || (*(CWnd **)(lVar2 + 0x40) == (CWnd *)0x0)) {
      lVar2 = FUN_180022bb4();
      if (*(char *)(lVar2 + 0x28) == '\0') {
        AfxPostQuitMessage(0);
      }
    }
    else {
      iVar1 = CWnd::IsWindowEnabled(*(CWnd **)(lVar2 + 0x40));
      if (iVar1 != 0) {
        (**(code **)(**(longlong **)(lVar2 + 0x40) + 0xc0))();
      }
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180031f20 (26 bytes) name=AfxOleUnlockApp

/* Library Function - Single Match
    void __cdecl AfxOleUnlockApp(void)
   
   Library: Visual Studio 2008 Release */

void __cdecl AfxOleUnlockApp(void)

{
  int *piVar1;
  longlong lVar2;
  
  lVar2 = FUN_180022bb4();
  LOCK();
  piVar1 = (int *)(lVar2 + 0x50);
  *piVar1 = *piVar1 + -1;
  UNLOCK();
  if (*piVar1 == 0) {
    AfxOleOnReleaseAllObjects();
  }
  return;
}


==================================================================

### EXPORT FUNC 180031f3c (8 bytes) name=FUN_180031f3c

undefined ** FUN_180031f3c(void)

{
  return &PTR_s_CByteArray_18006ce20;
}


==================================================================

### EXPORT FUNC 180031f44 (389 bytes) name=FUN_180031f44

void FUN_180031f44(longlong param_1,ulonglong param_2,longlong param_3)

{
  LPVOID pvVar1;
  longlong lVar2;
  int iVar3;
  ulonglong *puVar4;
  longlong lVar5;
  longlong lVar6;
  undefined8 uVar7;
  ulonglong uVar8;
  
  if ((longlong)param_2 < 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (-1 < param_3) {
    *(longlong *)(param_1 + 0x20) = param_3;
  }
  pvVar1 = *(LPVOID *)(param_1 + 8);
  if (param_2 == 0) {
    thunk_FUN_180034a70(pvVar1);
    *(undefined8 *)(param_1 + 8) = 0;
    *(undefined8 *)(param_1 + 0x18) = 0;
    *(undefined8 *)(param_1 + 0x10) = 0;
  }
  else {
    if (pvVar1 == (LPVOID)0x0) {
      if (0xffffffff < param_2) {
                    /* WARNING: Subroutine does not return */
        FUN_18001ed90();
      }
      puVar4 = FUN_18001eb74(param_2);
      *(ulonglong **)(param_1 + 8) = puVar4;
      FUN_1800357d0(puVar4,0,param_2);
      *(ulonglong *)(param_1 + 0x18) = param_2;
    }
    else {
      lVar2 = *(longlong *)(param_1 + 0x18);
      if (lVar2 < (longlong)param_2) {
        lVar6 = *(longlong *)(param_1 + 0x20);
        if ((*(longlong *)(param_1 + 0x20) == 0) &&
           (((lVar5 = (longlong)
                      (*(longlong *)(param_1 + 0x10) +
                      (ulonglong)((uint)(*(longlong *)(param_1 + 0x10) >> 0x3f) & 7)) >> 3,
             lVar5 < 4 || (lVar6 = 0x400, lVar5 < 0x401)) && (lVar6 = lVar5, lVar5 < 4)))) {
          lVar6 = 4;
        }
        uVar8 = param_2;
        if ((longlong)param_2 < lVar6 + lVar2) {
          uVar8 = lVar6 + lVar2;
        }
        if ((longlong)uVar8 < lVar2) {
                    /* WARNING: Subroutine does not return */
          FUN_18001ed90();
        }
        puVar4 = FUN_18001eb74(uVar8);
        uVar7 = FUN_180032c60(puVar4,uVar8,*(void **)(param_1 + 8),*(ulonglong *)(param_1 + 0x10));
        iVar3 = (int)uVar7;
        if (iVar3 != 0) {
          if (iVar3 == 0xc) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed6c();
          }
          if ((iVar3 == 0x16) || (iVar3 == 0x22)) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed90();
          }
          if (iVar3 != 0x50) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed90();
          }
        }
        FUN_1800357d0((ulonglong *)(*(longlong *)(param_1 + 0x10) + (longlong)puVar4),0,
                      param_2 - *(longlong *)(param_1 + 0x10));
        thunk_FUN_180034a70(*(LPVOID *)(param_1 + 8));
        *(ulonglong **)(param_1 + 8) = puVar4;
        *(ulonglong *)(param_1 + 0x18) = uVar8;
      }
      else {
        lVar2 = *(longlong *)(param_1 + 0x10);
        if (lVar2 < (longlong)param_2) {
          FUN_1800357d0((ulonglong *)((longlong)pvVar1 + lVar2),0,param_2 - lVar2);
        }
      }
    }
    *(ulonglong *)(param_1 + 0x10) = param_2;
  }
  return;
}


==================================================================

### EXPORT FUNC 1800320d0 (210 bytes) name=FUN_1800320d0

void FUN_1800320d0(longlong param_1,CArchive *param_2)

{
  uint uVar1;
  ulonglong *puVar2;
  ulonglong uVar3;
  void *pvVar4;
  ulonglong uVar5;
  
  if ((~*(uint *)(param_2 + 0x20) & 1) == 0) {
    uVar3 = FUN_18002eadc((longlong)param_2);
    FUN_180031f44(param_1,uVar3,-1);
    puVar2 = *(ulonglong **)(param_1 + 8);
    for (uVar3 = *(ulonglong *)(param_1 + 0x10); uVar3 != 0; uVar3 = uVar3 - uVar5) {
      uVar5 = 0x7fffffff;
      if (uVar3 < 0x7fffffff) {
        uVar5 = uVar3 & 0xffffffff;
      }
      uVar1 = FUN_18002e414((longlong)param_2,puVar2,(uint)uVar5);
      if (uVar1 != (uint)uVar5) {
                    /* WARNING: Subroutine does not return */
        FUN_18002eec0(3,(short *)0x0);
      }
      puVar2 = (ulonglong *)((longlong)puVar2 + uVar5);
    }
  }
  else {
    FUN_18002e98c(param_2,*(ulonglong *)(param_1 + 0x10));
    pvVar4 = *(void **)(param_1 + 8);
    for (uVar3 = *(ulonglong *)(param_1 + 0x10); uVar3 != 0; uVar3 = uVar3 - uVar1) {
      uVar1 = 0x7fffffff;
      if (uVar3 < 0x7fffffff) {
        uVar1 = (uint)uVar3;
      }
      FUN_18002e810(param_2,pvVar4,uVar1);
      pvVar4 = (void *)((longlong)pvVar4 + (ulonglong)uVar1);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 1800321a4 (57 bytes) name=CreateObject

/* Library Function - Multiple Matches With Same Base Name
    public: static class CObject * __ptr64 __cdecl CByteArray::CreateObject(void)
    public: static class CObject * __ptr64 __cdecl CDWordArray::CreateObject(void)
    public: static class CObject * __ptr64 __cdecl CObArray::CreateObject(void)
    public: static class CObject * __ptr64 __cdecl CStringArray::CreateObject(void)
     5 names - too many to list
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

undefined8 * CreateObject(void)

{
  undefined8 *puVar1;
  undefined8 *puVar2;
  
  puVar1 = FUN_18001eb74(0x28);
  puVar2 = (undefined8 *)0x0;
  if (puVar1 != (undefined8 *)0x0) {
    puVar1[1] = 0;
    puVar1[4] = 0;
    puVar1[3] = 0;
    puVar1[2] = 0;
    *puVar1 = CByteArray::vftable;
    puVar2 = puVar1;
  }
  return puVar2;
}


==================================================================

### EXPORT FUNC 1800321e0 (61 bytes) name=FUN_1800321e0

undefined8 * FUN_1800321e0(undefined8 *param_1,uint param_2)

{
  *param_1 = CByteArray::vftable;
  thunk_FUN_180034a70((LPVOID)param_1[1]);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180032220 (510 bytes) name=FUN_180032220

void FUN_180032220(longlong *param_1,wchar_t *param_2,longlong param_3,int param_4)

{
  wchar_t wVar1;
  LPCWSTR pWVar2;
  short *psVar3;
  int iVar4;
  errno_t eVar5;
  longlong lVar6;
  int iVar7;
  wchar_t *pwVar8;
  int iVar9;
  
  iVar9 = 0;
  if (param_2 == (wchar_t *)0x0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  if (param_3 == 0) {
                    /* WARNING: Subroutine does not return */
    FUN_18001ed90();
  }
  wVar1 = *param_2;
  pwVar8 = param_2;
  while (wVar1 != L'\0') {
    if (*pwVar8 == L'%') {
      wVar1 = pwVar8[1];
      if (((ushort)wVar1 < 0x31) || (0x39 < (ushort)wVar1)) {
        if (((ushort)wVar1 < 0x41) || (0x5a < (ushort)wVar1)) goto LAB_1800322c2;
        if ((ushort)wVar1 < 0x3a) goto LAB_18003229d;
        iVar7 = (ushort)wVar1 - 0x38;
      }
      else {
LAB_18003229d:
        iVar7 = (ushort)wVar1 - 0x31;
      }
      pwVar8 = pwVar8 + 2;
      if (param_4 <= iVar7) goto LAB_1800322c6;
      pWVar2 = *(LPCWSTR *)(param_3 + (longlong)iVar7 * 8);
      if (pWVar2 != (LPCWSTR)0x0) {
        iVar7 = lstrlenW(pWVar2);
        iVar9 = iVar9 + iVar7;
      }
    }
    else {
LAB_1800322c2:
      pwVar8 = pwVar8 + 1;
LAB_1800322c6:
      iVar9 = iVar9 + 1;
    }
    wVar1 = *pwVar8;
  }
  if ((int)(1U - *(int *)(*param_1 + -8) | *(int *)(*param_1 + -0xc) - iVar9) < 0) {
    FUN_18000b190(param_1,iVar9);
  }
  pwVar8 = (wchar_t *)*param_1;
  while (*param_2 != L'\0') {
    if (*param_2 == L'%') {
      wVar1 = param_2[1];
      if (((ushort)wVar1 < 0x31) || (0x39 < (ushort)wVar1)) {
        if (((ushort)wVar1 < 0x41) || (0x5a < (ushort)wVar1)) goto LAB_18003239a;
        if ((ushort)wVar1 < 0x3a) goto LAB_180032333;
        iVar7 = (ushort)wVar1 - 0x38;
      }
      else {
LAB_180032333:
        iVar7 = (ushort)wVar1 - 0x31;
      }
      param_2 = param_2 + 2;
      if (param_4 <= iVar7) {
        *pwVar8 = L'?';
        goto LAB_1800323a1;
      }
      pWVar2 = *(LPCWSTR *)(param_3 + (longlong)iVar7 * 8);
      if (pWVar2 != (LPCWSTR)0x0) {
        iVar4 = lstrlenW(pWVar2);
        eVar5 = wcscpy_s(pwVar8,(longlong)(iVar9 + 1),*(wchar_t **)(param_3 + (longlong)iVar7 * 8));
        if (eVar5 != 0) {
          if (eVar5 == 0xc) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed6c();
          }
          if ((eVar5 == 0x16) || (eVar5 == 0x22)) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed90();
          }
          if (eVar5 != 0x50) {
                    /* WARNING: Subroutine does not return */
            FUN_18001ed90();
          }
        }
        iVar9 = iVar9 - iVar4;
        pwVar8 = pwVar8 + iVar4;
      }
    }
    else {
LAB_18003239a:
      *pwVar8 = *param_2;
      param_2 = param_2 + 1;
LAB_1800323a1:
      pwVar8 = pwVar8 + 1;
      iVar9 = iVar9 + -1;
    }
  }
  psVar3 = (short *)*param_1;
  iVar9 = (int)((longlong)pwVar8 - (longlong)psVar3 >> 1);
  iVar7 = 0;
  if (iVar9 == -1) {
    if (psVar3 != (short *)0x0) {
      lVar6 = FUN_1800355e0(psVar3);
      iVar9 = (int)lVar6;
      goto LAB_1800323df;
    }
  }
  else {
LAB_1800323df:
    iVar7 = iVar9;
    if (iVar7 < 0) goto LAB_180032419;
  }
  if (iVar7 <= *(int *)(*param_1 + -0xc)) {
    *(int *)(*param_1 + -0x10) = iVar7;
    *(undefined2 *)(*param_1 + (longlong)iVar7 * 2) = 0;
    return;
  }
LAB_180032419:
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7ff8ffa9);
}


==================================================================

### EXPORT FUNC 180032424 (240 bytes) name=FUN_180032424

void FUN_180032424(longlong *param_1,uint param_2,longlong param_3,int param_4)

{
  wchar_t *pwVar1;
  int iVar2;
  undefined **ppuVar3;
  longlong lVar4;
  HMODULE pHVar5;
  undefined8 uVar6;
  wchar_t *pwVar7;
  wchar_t *local_18;
  undefined8 local_10;
  
  local_10 = 0xfffffffffffffffe;
  ppuVar3 = FUN_18001fcc0();
  if (ppuVar3 != (undefined **)0x0) {
    lVar4 = (**(code **)(*ppuVar3 + 0x18))(ppuVar3);
    local_18 = (wchar_t *)(lVar4 + 0x18);
    pHVar5 = (HMODULE)FUN_18001fcac();
    pwVar7 = (wchar_t *)(lVar4 + 0x18);
    if ((pHVar5 == (HMODULE)0x0) ||
       (uVar6 = FUN_18000af50((longlong *)&local_18,pHVar5,param_2), pwVar7 = local_18,
       (int)uVar6 == 0)) {
      LOCK();
      pwVar1 = pwVar7 + -4;
      iVar2 = *(int *)pwVar1;
      *(int *)pwVar1 = *(int *)pwVar1 + -1;
      UNLOCK();
      if (iVar2 + -1 < 1) {
        (**(code **)(**(longlong **)(pwVar7 + -0xc) + 8))();
      }
    }
    else {
      FUN_180032220(param_1,local_18,param_3,param_4);
      LOCK();
      pwVar1 = pwVar7 + -4;
      iVar2 = *(int *)pwVar1;
      *(int *)pwVar1 = *(int *)pwVar1 + -1;
      UNLOCK();
      if (iVar2 + -1 < 1) {
        (**(code **)(**(longlong **)(pwVar7 + -0xc) + 8))();
      }
    }
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18000b170(-0x7fffbffb);
}


==================================================================

### EXPORT FUNC 180032524 (24 bytes) name=Unwind@180032524

void Unwind_180032524(undefined8 param_1,longlong param_2)

{
  FUN_18000b5e0((longlong *)(param_2 + 0x20));
  return;
}


==================================================================

### EXPORT FUNC 18003253c (30 bytes) name=FUN_18003253c

void FUN_18003253c(longlong *param_1,uint param_2,undefined8 param_3)

{
  undefined8 local_res18 [2];
  
  local_res18[0] = param_3;
  FUN_180032424(param_1,param_2,(longlong)local_res18,1);
  return;
}


==================================================================

### EXPORT FUNC 18003255c (52 bytes) name=FUN_18003255c

void FUN_18003255c(undefined8 *param_1,longlong param_2,longlong param_3)

{
  undefined8 *puVar1;
  
  if ((param_2 != 0) && (param_3 != 0)) {
    puVar1 = FUN_18001eb74(param_2 * param_3 + 8);
    *puVar1 = *param_1;
    *param_1 = puVar1;
    return;
  }
                    /* WARNING: Subroutine does not return */
  FUN_18001ed90();
}


==================================================================

### EXPORT FUNC 180032594 (32 bytes) name=FUN_180032594

void FUN_180032594(undefined8 *param_1)

{
  undefined8 *puVar1;
  
  while (param_1 != (undefined8 *)0x0) {
    puVar1 = (undefined8 *)*param_1;
    thunk_FUN_180034a70(param_1);
    param_1 = puVar1;
  }
  return;
}


==================================================================

### EXPORT FUNC 1800325c0 (57 bytes) name=FUN_1800325c0

undefined8 * FUN_1800325c0(undefined8 *param_1,uint param_2)

{
  *param_1 = type_info::vftable;
  FID_conflict__Type_info_dtor((longlong)param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180032600 (42 bytes) name=operator==

/* Library Function - Single Match
    public: bool __cdecl type_info::operator==(class type_info const & __ptr64)const __ptr64
   
   Library: Visual Studio 2005 Release */

bool __thiscall type_info::operator==(type_info *this,type_info *param_1)

{
  type_info tVar1;
  type_info tVar2;
  longlong lVar3;
  type_info *ptVar4;
  
  ptVar4 = param_1 + 0x11;
  lVar3 = 0x11 - (longlong)ptVar4;
  do {
    tVar1 = *ptVar4;
    tVar2 = ptVar4[(longlong)(this + lVar3)];
    if (tVar1 != tVar2) break;
    ptVar4 = ptVar4 + 1;
  } while (tVar2 != (type_info)0x0);
  return tVar1 == tVar2;
}


==================================================================

### EXPORT FUNC 180032640 (31 bytes) name=__security_check_cookie

/* WARNING: This is an inlined function */
/* Library Function - Single Match
    __security_check_cookie
   
   Libraries: Visual Studio 2005 Debug, Visual Studio 2005 Release, Visual Studio 2010 Debug, Visual
   Studio 2010 Release */

void __cdecl __security_check_cookie(uintptr_t _StackCookie)

{
  if ((_StackCookie == DAT_18006cea0) && ((short)(_StackCookie >> 0x30) == 0)) {
    return;
  }
                    /* WARNING: Subroutine does not return */
  __report_gsfailure(_StackCookie);
}


==================================================================

### EXPORT FUNC 180032660 (1010 bytes) name=FUN_180032660

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

ulonglong FUN_180032660(LPSTR param_1,LPCWSTR param_2,ulonglong param_3,undefined8 *param_4)

{
  WCHAR WVar1;
  char cVar2;
  undefined *puVar3;
  bool bVar4;
  LPCWSTR pWVar5;
  int iVar6;
  DWORD DVar7;
  uint uVar8;
  DWORD *pDVar9;
  pthreadlocinfo ptVar10;
  DWORD *pDVar11;
  ulonglong uVar12;
  longlong lVar13;
  ulonglong uVar14;
  ulonglong uVar15;
  undefined1 auStackY_c8 [32];
  BOOL local_88 [2];
  pthreadlocinfo local_80;
  undefined8 local_78;
  DWORD *local_70;
  undefined1 local_68;
  CHAR local_60 [8];
  ulonglong local_58;
  
  local_58 = DAT_18006cea0 ^ (ulonglong)auStackY_c8;
  uVar14 = 0;
  local_88[0] = 0;
  if ((param_1 != (LPSTR)0x0) && (param_3 == 0)) {
    return 0;
  }
  if ((param_2 == (LPCWSTR)0x0) || (0x7fffffff < param_3)) {
    pDVar9 = FUN_180035b40();
    *pDVar9 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffffffffffff;
  }
  bVar4 = false;
  local_68 = 0;
  if (param_4 == (undefined8 *)0x0) {
    pDVar9 = FUN_1800380a0();
    ptVar10 = *(pthreadlocinfo *)(pDVar9 + 0x30);
    puVar3 = *(undefined **)(pDVar9 + 0x2e);
    if ((ptVar10 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & pDVar9[0x32]) == 0)) {
      ptVar10 = __updatetlocinfo();
    }
    if ((puVar3 != PTR_DAT_18006d470) && ((_DAT_18006d578 & pDVar9[0x32]) == 0)) {
      __updatetmbcinfo();
    }
    if ((pDVar9[0x32] & 2) == 0) {
      bVar4 = true;
      pDVar9[0x32] = pDVar9[0x32] | 2;
    }
  }
  else {
    ptVar10 = (pthreadlocinfo)*param_4;
    local_78 = param_4[1];
    bVar4 = false;
    pDVar9 = local_70;
    local_80 = ptVar10;
  }
  if (param_1 == (LPSTR)0x0) {
    if (*(int *)((longlong)&ptVar10->lc_category[0].locale + 4) == 0) {
      uVar14 = 0xffffffffffffffff;
      do {
        if (uVar14 == 0) break;
        uVar14 = uVar14 - 1;
        WVar1 = *param_2;
        param_2 = param_2 + 1;
      } while (WVar1 != L'\0');
      if (bVar4) {
        pDVar9[0x32] = pDVar9[0x32] & 0xfffffffd;
      }
      return ~uVar14 - 1;
    }
    iVar6 = WideCharToMultiByte(ptVar10->lc_codepage,0,param_2,-1,(LPSTR)0x0,0,(LPCSTR)0x0,local_88)
    ;
    if (((longlong)iVar6 != 0) && (local_88[0] == 0)) {
      uVar14 = (longlong)iVar6 - 1;
LAB_1800329ee:
      if (!bVar4) {
        return uVar14;
      }
      pDVar9[0x32] = pDVar9[0x32] & 0xfffffffd;
      return uVar14;
    }
    pDVar11 = FUN_180035b40();
    *pDVar11 = 0x2a;
  }
  else {
    if (*(int *)((longlong)&ptVar10->lc_category[0].locale + 4) == 0) {
      if (param_3 != 0) {
        do {
          if (0xff < (ushort)*param_2) goto LAB_18003297b;
          param_1[uVar14] = (CHAR)*param_2;
        } while ((*param_2 != L'\0') &&
                (uVar14 = uVar14 + 1, param_2 = param_2 + 1, uVar14 < param_3));
      }
      if (!bVar4) {
        return uVar14;
      }
      pDVar9[0x32] = pDVar9[0x32] & 0xfffffffd;
      return uVar14;
    }
    pWVar5 = param_2;
    uVar15 = param_3;
    if (*(int *)((longlong)&ptVar10->pctype + 4) == 1) {
      for (; uVar15 != 0; uVar15 = uVar15 - 1) {
        if (*pWVar5 == L'\0') {
          if ((uVar15 != 0) && (*pWVar5 == L'\0')) {
            param_3 = ((longlong)pWVar5 - (longlong)param_2 >> 1) + 1;
          }
          break;
        }
        pWVar5 = pWVar5 + 1;
      }
      iVar6 = WideCharToMultiByte(ptVar10->lc_codepage,0,param_2,(int)param_3,param_1,(int)param_3,
                                  (LPCSTR)0x0,local_88);
      uVar14 = (ulonglong)iVar6;
      if ((uVar14 != 0) && (local_88[0] == 0)) {
        if (param_1[uVar14 - 1] == '\0') {
          uVar14 = uVar14 - 1;
        }
        goto LAB_1800329ee;
      }
    }
    else {
      iVar6 = WideCharToMultiByte(ptVar10->lc_codepage,0,param_2,-1,param_1,(int)param_3,(LPCSTR)0x0
                                  ,local_88);
      if (iVar6 == 0) {
        if ((local_88[0] == 0) && (DVar7 = GetLastError(), DVar7 == 0x7a)) {
          uVar15 = 0;
          if (param_3 != 0) {
            do {
              uVar8 = WideCharToMultiByte(ptVar10->lc_codepage,0,param_2,1,local_60,
                                          *(int *)((longlong)&ptVar10->pctype + 4),(LPCSTR)0x0,
                                          local_88);
              if ((((uVar8 == 0) || (local_88[0] != 0)) || ((int)uVar8 < 0)) || (5 < uVar8))
              goto LAB_18003297b;
              lVar13 = (longlong)(int)uVar8;
              if (param_3 < lVar13 + uVar15) break;
              uVar12 = uVar14;
              if (0 < lVar13) {
                do {
                  cVar2 = local_60[uVar12];
                  param_1[uVar15] = cVar2;
                  if (cVar2 == '\0') goto LAB_180032967;
                  uVar12 = uVar12 + 1;
                  uVar15 = uVar15 + 1;
                } while ((longlong)uVar12 < lVar13);
              }
              param_2 = param_2 + 1;
            } while (uVar15 < param_3);
          }
LAB_180032967:
          if (!bVar4) {
            return uVar15;
          }
          pDVar9[0x32] = pDVar9[0x32] & 0xfffffffd;
          return uVar15;
        }
      }
      else if (local_88[0] == 0) {
        uVar14 = (longlong)iVar6 - 1;
        goto LAB_1800329ee;
      }
    }
LAB_18003297b:
    pDVar11 = FUN_180035b40();
    *pDVar11 = 0x2a;
  }
  if (bVar4) {
    pDVar9[0x32] = pDVar9[0x32] & 0xfffffffd;
  }
  return 0xffffffffffffffff;
}


==================================================================

### EXPORT FUNC 180032a60 (8 bytes) name=FUN_180032a60

void FUN_180032a60(LPSTR param_1,LPCWSTR param_2,ulonglong param_3)

{
  FUN_180032660(param_1,param_2,param_3,(undefined8 *)0x0);
  return;
}


==================================================================

### EXPORT FUNC 180032a70 (265 bytes) name=FUN_180032a70

DWORD FUN_180032a70(ulonglong *param_1,LPSTR param_2,ulonglong param_3,LPCWSTR param_4,
                   ulonglong param_5,undefined8 *param_6)

{
  DWORD DVar1;
  ulonglong uVar2;
  DWORD *pDVar3;
  
  DVar1 = 0;
  if (param_2 == (LPSTR)0x0) {
    if (param_3 != 0) goto LAB_180032ae2;
  }
  else {
    if (param_3 == 0) {
LAB_180032ae2:
      pDVar3 = FUN_180035b40();
      *pDVar3 = 0x16;
      FUN_1800384e0(0,0,0,0,0);
      return 0x16;
    }
    *param_2 = '\0';
  }
  if (param_1 != (ulonglong *)0x0) {
    *param_1 = 0;
  }
  uVar2 = param_5;
  if (param_3 < param_5) {
    uVar2 = param_3;
  }
  uVar2 = FUN_180032660(param_2,param_4,uVar2,param_6);
  if (uVar2 == 0xffffffffffffffff) {
    if (param_2 != (LPSTR)0x0) {
      *param_2 = '\0';
    }
    pDVar3 = FUN_180035b40();
    DVar1 = *pDVar3;
  }
  else {
    uVar2 = uVar2 + 1;
    if (param_2 != (LPSTR)0x0) {
      DVar1 = 0;
      if (param_3 < uVar2) {
        if ((param_5 != 0xffffffffffffffff) && (*param_2 = '\0', param_3 <= uVar2)) {
          pDVar3 = FUN_180035b40();
          *pDVar3 = 0x22;
          FUN_1800384e0(0,0,0,0,0);
          return 0x22;
        }
        DVar1 = 0x50;
        uVar2 = param_3;
      }
      param_2[uVar2 - 1] = '\0';
    }
    if (param_1 != (ulonglong *)0x0) {
      *param_1 = uVar2;
    }
  }
  return DVar1;
}


==================================================================

### EXPORT FUNC 180032b80 (33 bytes) name=FUN_180032b80

void FUN_180032b80(ulonglong *param_1,LPSTR param_2,ulonglong param_3,LPCWSTR param_4,
                  ulonglong param_5)

{
  FUN_180032a70(param_1,param_2,param_3,param_4,param_5,(undefined8 *)0x0);
  return;
}


==================================================================

### EXPORT FUNC 180032bb0 (175 bytes) name=FUN_180032bb0

uint FUN_180032bb0(char *param_1,byte *param_2,undefined8 param_3,undefined8 param_4)

{
  uint uVar1;
  DWORD *pDVar2;
  undefined8 local_res18;
  undefined8 local_res20;
  FILE local_38;
  
  local_res18 = param_3;
  local_res20 = param_4;
  if ((param_2 != (byte *)0x0) && (param_1 != (char *)0x0)) {
    local_38._cnt = 0x7fffffff;
    local_38._flag = 0x42;
    local_38._ptr = param_1;
    local_38._base = param_1;
    uVar1 = FUN_180038850(&local_38,param_2,(longlong *)0x0,(WCHAR *)&local_res18);
    local_38._cnt = local_38._cnt + -1;
    if (-1 < local_38._cnt) {
      *local_38._ptr = '\0';
      return uVar1;
    }
    FUN_1800385f0(0,&local_38);
    return uVar1;
  }
  pDVar2 = FUN_180035b40();
  *pDVar2 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 180032c60 (205 bytes) name=FUN_180032c60

undefined8 FUN_180032c60(ulonglong *param_1,ulonglong param_2,void *param_3,ulonglong param_4)

{
  DWORD *pDVar1;
  
  if (param_4 == 0) {
    return 0;
  }
  if (param_1 != (ulonglong *)0x0) {
    if ((param_3 != (void *)0x0) && (param_4 <= param_2)) {
      memcpy(param_1,param_3,param_4);
      return 0;
    }
    FUN_1800357d0(param_1,0,param_2);
    if (param_3 != (void *)0x0) {
      if (param_4 <= param_2) {
        return 0x16;
      }
      pDVar1 = FUN_180035b40();
      *pDVar1 = 0x22;
      FUN_1800384e0(0,0,0,0,0);
      return 0x22;
    }
  }
  pDVar1 = FUN_180035b40();
  *pDVar1 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0x16;
}


==================================================================

### EXPORT FUNC 180032d30 (135 bytes) name=memmove_s

/* Library Function - Single Match
    memmove_s
   
   Library: Visual Studio 2005 Release */

errno_t __cdecl memmove_s(void *_Dst,rsize_t _DstSize,void *_Src,rsize_t _MaxCount)

{
  DWORD *pDVar1;
  
  if (_MaxCount != 0) {
    if ((_Dst == (void *)0x0) || (_Src == (void *)0x0)) {
      pDVar1 = FUN_180035b40();
      *pDVar1 = 0x16;
      FUN_1800384e0(0,0,0,0,0);
      return 0x16;
    }
    if (_DstSize < _MaxCount) {
      pDVar1 = FUN_180035b40();
      *pDVar1 = 0x22;
      FUN_1800384e0(0,0,0,0,0);
      return 0x22;
    }
    memcpy(_Dst,_Src,_MaxCount);
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180032dd0 (354 bytes) name=strncpy

/* Library Function - Single Match
    strncpy
   
   Libraries: Visual Studio 2005, Visual Studio 2008, Visual Studio 2019 */

char * __cdecl strncpy(char *_Dest,char *_Source,size_t _Count)

{
  ulonglong uVar1;
  char cVar2;
  longlong lVar3;
  char *pcVar4;
  ulonglong *puVar5;
  size_t sVar6;
  bool bVar7;
  
  if (_Count != 0) {
    lVar3 = (longlong)_Dest - (longlong)_Source;
    do {
      if (((ulonglong)_Source & 7) == 0) goto LAB_180032e08;
      uVar1 = *(ulonglong *)_Source;
      *(char *)(lVar3 + (longlong)_Source) = (char)uVar1;
      puVar5 = (ulonglong *)_Source;
      sVar6 = _Count;
      if ((char)uVar1 == '\0') goto LAB_180032ed0;
      _Source = (char *)((longlong)_Source + 1);
      _Count = _Count - 1;
    } while (_Count != 0);
  }
  return _Dest;
LAB_180032e08:
  while( true ) {
    uVar1 = *(ulonglong *)_Source;
    if ((_Count < 8) ||
       (((uVar1 ^ 0xffffffffffffffff ^ uVar1 + 0x7efefefefefefeff) & 0x8101010101010100) != 0))
    break;
    *(ulonglong *)(lVar3 + (longlong)_Source) = uVar1;
    _Source = (char *)((longlong)_Source + 8);
    _Count = _Count - 8;
  }
  if (_Count == 0) {
    return _Dest;
  }
  *(char *)(lVar3 + (longlong)_Source) = (char)uVar1;
  puVar5 = (ulonglong *)_Source;
  sVar6 = _Count;
  if ((char)uVar1 == '\0') {
LAB_180032ed0:
    pcVar4 = (char *)(lVar3 + (longlong)puVar5);
    if (0xf < sVar6) {
      while (((ulonglong)pcVar4 & 7) != 0) {
        pcVar4 = pcVar4 + 1;
        *pcVar4 = '\0';
        sVar6 = sVar6 - 1;
      }
      while (0x1f < sVar6) {
        pcVar4[0] = '\0';
        pcVar4[1] = '\0';
        pcVar4[2] = '\0';
        pcVar4[3] = '\0';
        pcVar4[4] = '\0';
        pcVar4[5] = '\0';
        pcVar4[6] = '\0';
        pcVar4[7] = '\0';
        pcVar4[8] = '\0';
        pcVar4[9] = '\0';
        pcVar4[10] = '\0';
        pcVar4[0xb] = '\0';
        pcVar4[0xc] = '\0';
        pcVar4[0xd] = '\0';
        pcVar4[0xe] = '\0';
        pcVar4[0xf] = '\0';
        pcVar4[0x10] = '\0';
        pcVar4[0x11] = '\0';
        pcVar4[0x12] = '\0';
        pcVar4[0x13] = '\0';
        pcVar4[0x14] = '\0';
        pcVar4[0x15] = '\0';
        pcVar4[0x16] = '\0';
        pcVar4[0x17] = '\0';
        pcVar4[0x18] = '\0';
        pcVar4[0x19] = '\0';
        pcVar4[0x1a] = '\0';
        pcVar4[0x1b] = '\0';
        pcVar4[0x1c] = '\0';
        pcVar4[0x1d] = '\0';
        pcVar4[0x1e] = '\0';
        pcVar4[0x1f] = '\0';
        pcVar4 = pcVar4 + 0x20;
        sVar6 = sVar6 - 0x20;
      }
      while (7 < sVar6) {
        pcVar4[0] = '\0';
        pcVar4[1] = '\0';
        pcVar4[2] = '\0';
        pcVar4[3] = '\0';
        pcVar4[4] = '\0';
        pcVar4[5] = '\0';
        pcVar4[6] = '\0';
        pcVar4[7] = '\0';
        pcVar4 = pcVar4 + 8;
        sVar6 = sVar6 - 8;
      }
    }
    while (bVar7 = sVar6 != 0, sVar6 = sVar6 - 1, bVar7) {
      *pcVar4 = '\0';
      pcVar4 = pcVar4 + 1;
    }
    return _Dest;
  }
  puVar5 = (ulonglong *)((longlong)_Source + 1);
  sVar6 = _Count - 1;
  if (sVar6 == 0) {
    return _Dest;
  }
  cVar2 = (char)(uVar1 >> 8);
  *(char *)(lVar3 + (longlong)puVar5) = cVar2;
  if (cVar2 == '\0') goto LAB_180032ed0;
  puVar5 = (ulonglong *)((longlong)_Source + 2);
  sVar6 = _Count - 2;
  if (sVar6 == 0) {
    return _Dest;
  }
  cVar2 = (char)(uVar1 >> 0x10);
  *(char *)(lVar3 + (longlong)puVar5) = cVar2;
  if (cVar2 == '\0') goto LAB_180032ed0;
  puVar5 = (ulonglong *)((longlong)_Source + 3);
  sVar6 = _Count - 3;
  if (sVar6 == 0) {
    return _Dest;
  }
  cVar2 = (char)(uVar1 >> 0x18);
  *(char *)(lVar3 + (longlong)puVar5) = cVar2;
  if (cVar2 == '\0') goto LAB_180032ed0;
  puVar5 = (ulonglong *)((longlong)_Source + 4);
  sVar6 = _Count - 4;
  if (sVar6 == 0) {
    return _Dest;
  }
  cVar2 = (char)(uVar1 >> 0x20);
  *(char *)(lVar3 + (longlong)puVar5) = cVar2;
  if (cVar2 == '\0') goto LAB_180032ed0;
  puVar5 = (ulonglong *)((longlong)_Source + 5);
  sVar6 = _Count - 5;
  if (sVar6 == 0) {
    return _Dest;
  }
  cVar2 = (char)(uVar1 >> 0x28);
  *(char *)(lVar3 + (longlong)puVar5) = cVar2;
  if (cVar2 == '\0') goto LAB_180032ed0;
  puVar5 = (ulonglong *)((longlong)_Source + 6);
  sVar6 = _Count - 6;
  if (sVar6 == 0) {
    return _Dest;
  }
  cVar2 = (char)(uVar1 >> 0x30);
  *(char *)(lVar3 + (longlong)puVar5) = cVar2;
  if (cVar2 == '\0') goto LAB_180032ed0;
  puVar5 = (ulonglong *)((longlong)_Source + 7);
  sVar6 = _Count - 7;
  if (sVar6 == 0) {
    return _Dest;
  }
  cVar2 = (char)(uVar1 >> 0x38);
  *(char *)(lVar3 + (longlong)puVar5) = cVar2;
  if (cVar2 == '\0') goto LAB_180032ed0;
  _Source = (char *)((longlong)_Source + 8);
  _Count = _Count - 8;
  if (_Count == 0) {
    return _Dest;
  }
  goto LAB_180032e08;
}


==================================================================

### EXPORT FUNC 180032f40 (72 bytes) name=_time64

/* Library Function - Single Match
    _time64
   
   Library: Visual Studio 2005 Release */

__time64_t __cdecl _time64(__time64_t *_Time)

{
  ulonglong uVar1;
  _FILETIME local_res8 [4];
  
  GetSystemTimeAsFileTime(local_res8);
  uVar1 = ((longlong)local_res8[0] + 0xfe624e212ac18000U) / 10000000;
  if (_Time != (__time64_t *)0x0) {
    *_Time = uVar1;
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180032f90 (155 bytes) name=strcpy_s

/* Library Function - Single Match
    strcpy_s
   
   Library: Visual Studio 2005 Release */

errno_t __cdecl strcpy_s(char *_Dst,rsize_t _SizeInBytes,char *_Src)

{
  char cVar1;
  DWORD *pDVar2;
  char *pcVar3;
  
  if ((_Dst != (char *)0x0) && (_SizeInBytes != 0)) {
    pcVar3 = _Dst;
    if (_Src != (char *)0x0) {
      do {
        cVar1 = *_Src;
        _Src = _Src + 1;
        *pcVar3 = cVar1;
        if (cVar1 == '\0') break;
        _SizeInBytes = _SizeInBytes - 1;
        pcVar3 = pcVar3 + 1;
      } while (_SizeInBytes != 0);
      if (_SizeInBytes == 0) {
        *_Dst = '\0';
        pDVar2 = FUN_180035b40();
        *pDVar2 = 0x22;
        FUN_1800384e0(0,0,0,0,0);
        return 0x22;
      }
      return 0;
    }
    *_Dst = '\0';
  }
  pDVar2 = FUN_180035b40();
  *pDVar2 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0x16;
}


==================================================================

### EXPORT FUNC 180033040 (102 bytes) name=FUN_180033040

ulonglong FUN_180033040(WCHAR *param_1,WCHAR *param_2)

{
  DWORD *pDVar1;
  ulonglong uVar2;
  FILE local_38;
  
  if (param_1 == (WCHAR *)0x0) {
    pDVar1 = FUN_180035b40();
    *pDVar1 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffff;
  }
  local_38._cnt = 0x7fffffff;
  local_38._flag = 0x42;
  local_38._base = (char *)0x0;
  local_38._ptr = (char *)0x0;
  uVar2 = FUN_1800398f0(&local_38,param_1,(longlong *)0x0,param_2);
  return uVar2;
}


==================================================================

### EXPORT FUNC 1800330b0 (327 bytes) name=FUN_1800330b0

ulonglong FUN_1800330b0(undefined *param_1,char *param_2,ulonglong param_3,longlong param_4,
                       undefined8 param_5,undefined8 param_6)

{
  DWORD *pDVar1;
  ulonglong uVar2;
  ulonglong uVar3;
  FILE local_38;
  
  if ((param_4 == 0) || ((param_3 != 0 && (param_2 == (char *)0x0)))) {
    pDVar1 = FUN_180035b40();
    *pDVar1 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffff;
  }
  local_38._flag = 0x42;
  if (param_3 < 0x40000000) {
    local_38._cnt = (int)param_3 * 2;
  }
  else {
    local_38._cnt = 0x7fffffff;
  }
  local_38._ptr = param_2;
  local_38._base = param_2;
  uVar2 = (*(code *)param_1)(&local_38,param_4,param_5,param_6);
  if (param_2 == (char *)0x0) {
    return uVar2;
  }
  if (-1 < (int)uVar2) {
    local_38._cnt = local_38._cnt + -1;
    if (local_38._cnt < 0) {
      uVar3 = FUN_1800385f0(0,&local_38);
      if ((int)uVar3 == -1) goto LAB_1800331d4;
    }
    else {
      *local_38._ptr = '\0';
      local_38._ptr = local_38._ptr + 1;
    }
    local_38._cnt = local_38._cnt + -1;
    if (-1 < local_38._cnt) {
      *local_38._ptr = '\0';
      return uVar2 & 0xffffffff;
    }
    uVar3 = FUN_1800385f0(0,&local_38);
    if ((int)uVar3 != -1) {
      return uVar2 & 0xffffffff;
    }
  }
LAB_1800331d4:
  (param_2 + param_3 * 2 + -2)[0] = '\0';
  (param_2 + param_3 * 2 + -2)[1] = '\0';
  return (ulonglong)((-1 < local_38._cnt) - 2);
}


==================================================================

### EXPORT FUNC 180033200 (130 bytes) name=FUN_180033200

ulonglong FUN_180033200(char *param_1,ulonglong param_2,longlong param_3,undefined8 param_4)

{
  ulonglong uVar1;
  DWORD *pDVar2;
  
  if (((param_3 == 0) || (param_1 == (char *)0x0)) || (param_2 == 0)) {
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x16;
  }
  else {
    uVar1 = FUN_1800330b0(FUN_18003a830,param_1,param_2,param_3,0,param_4);
    if ((int)uVar1 < 0) {
      param_1[0] = '\0';
      param_1[1] = '\0';
    }
    if ((int)uVar1 != -2) {
      return uVar1;
    }
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x22;
  }
  FUN_1800384e0(0,0,0,0,0);
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 180033290 (159 bytes) name=wcscpy_s

/* Library Function - Single Match
    wcscpy_s
   
   Library: Visual Studio 2005 Release */

errno_t __cdecl wcscpy_s(wchar_t *_Dst,rsize_t _SizeInWords,wchar_t *_Src)

{
  wchar_t wVar1;
  DWORD *pDVar2;
  wchar_t *pwVar3;
  
  if ((_Dst != (wchar_t *)0x0) && (_SizeInWords != 0)) {
    pwVar3 = _Dst;
    if (_Src != (wchar_t *)0x0) {
      do {
        wVar1 = *_Src;
        _Src = _Src + 1;
        *pwVar3 = wVar1;
        if (wVar1 == L'\0') break;
        _SizeInWords = _SizeInWords - 1;
        pwVar3 = pwVar3 + 1;
      } while (_SizeInWords != 0);
      if (_SizeInWords == 0) {
        *_Dst = L'\0';
        pDVar2 = FUN_180035b40();
        *pDVar2 = 0x22;
        FUN_1800384e0(0,0,0,0,0);
        return 0x22;
      }
      return 0;
    }
    *_Dst = L'\0';
  }
  pDVar2 = FUN_180035b40();
  *pDVar2 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0x16;
}


==================================================================

### EXPORT FUNC 180033340 (180 bytes) name=FUN_180033340

undefined8 FUN_180033340(short *param_1,WCHAR *param_2,undefined8 param_3,undefined8 param_4)

{
  short sVar1;
  DWORD *pDVar2;
  undefined8 extraout_RAX;
  undefined8 extraout_RAX_00;
  ulonglong uVar3;
  short *psVar4;
  undefined8 local_res18;
  undefined8 local_res20;
  FILE local_38;
  
  uVar3 = 0xffffffffffffffff;
  psVar4 = param_1;
  do {
    if (uVar3 == 0) break;
    uVar3 = uVar3 - 1;
    sVar1 = *psVar4;
    psVar4 = psVar4 + 1;
  } while (sVar1 != 0);
  local_res18 = param_3;
  local_res20 = param_4;
  if ((param_1 != (short *)0x0) && (param_2 != (WCHAR *)0x0)) {
    local_38._flag = 0x49;
    local_38._ptr = (char *)param_1;
    local_38._base = (char *)param_1;
    if (0x3fffffff < ~uVar3 - 1) {
      local_38._cnt = 0x7fffffff;
      FUN_18003b840(&local_38,param_2,(longlong *)0x0,&local_res18);
      return extraout_RAX;
    }
    local_38._cnt = (int)(~uVar3 - 1) * 2;
    FUN_18003b840(&local_38,param_2,(longlong *)0x0,&local_res18);
    return extraout_RAX_00;
  }
  pDVar2 = FUN_180035b40();
  *pDVar2 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 180033410 (720 bytes) name=memcpy

/* Library Function - Single Match
    memcpy
   
   Libraries: Visual Studio 2005, Visual Studio 2008, Visual Studio 2010 */

void * __cdecl memcpy(void *_Dst,void *_Src,size_t _Size)

{
  undefined8 uVar1;
  int iVar2;
  undefined8 *puVar3;
  undefined8 *puVar4;
  ulonglong uVar5;
  ulonglong uVar6;
  
  uVar5 = (longlong)_Src - (longlong)_Dst;
  if (_Src < _Dst) {
    puVar4 = (undefined8 *)((longlong)_Dst + _Size);
    puVar3 = puVar4;
    if (_Size < 8) goto LAB_180033624;
    if (((ulonglong)puVar4 & 7) != 0) {
      if (((ulonglong)puVar4 & 1) != 0) {
        puVar4 = (undefined8 *)((longlong)puVar4 + -1);
        _Size = _Size - 1;
        *(undefined1 *)puVar4 = *(undefined1 *)(uVar5 + (longlong)puVar4);
      }
      if (((ulonglong)puVar4 & 2) != 0) {
        puVar4 = (undefined8 *)((longlong)puVar4 + -2);
        _Size = _Size - 2;
        *(undefined2 *)puVar4 = *(undefined2 *)(uVar5 + (longlong)puVar4);
      }
      if (((ulonglong)puVar4 & 4) != 0) {
        puVar4 = (undefined8 *)((longlong)puVar4 + -4);
        _Size = _Size - 4;
        *(undefined4 *)puVar4 = *(undefined4 *)(uVar5 + (longlong)puVar4);
      }
    }
    while (uVar6 = _Size >> 5, puVar3 = puVar4, uVar6 != 0) {
      if ((uVar6 < 0x2000) || (0xfffffffffffff000 < uVar5)) goto LAB_180033660;
      do {
        iVar2 = 0x20;
        do {
          puVar3 = puVar4;
          iVar2 = iVar2 + -1;
          puVar4 = puVar3 + -0x10;
        } while (iVar2 != 0);
        iVar2 = 0x40;
        puVar3 = puVar3 + 0x1f0;
        do {
          uVar1 = *(undefined8 *)((uVar5 - 0x10) + (longlong)puVar3);
          puVar3[-1] = *(undefined8 *)((uVar5 - 8) + (longlong)puVar3);
          puVar3[-2] = uVar1;
          uVar1 = *(undefined8 *)((uVar5 - 0x20) + (longlong)puVar3);
          puVar3[-3] = *(undefined8 *)((uVar5 - 0x18) + (longlong)puVar3);
          puVar3[-4] = uVar1;
          uVar1 = *(undefined8 *)((uVar5 - 0x30) + (longlong)puVar3);
          puVar4 = puVar3 + -8;
          puVar3[-5] = *(undefined8 *)((uVar5 - 0x28) + (longlong)puVar3);
          puVar3[-6] = uVar1;
          uVar1 = *(undefined8 *)(uVar5 + (longlong)puVar4);
          iVar2 = iVar2 + -1;
          puVar3[-7] = *(undefined8 *)(uVar5 + 8 + (longlong)puVar4);
          *puVar4 = uVar1;
          puVar3 = puVar4;
        } while (iVar2 != 0);
        _Size = _Size - 0x1000;
      } while (0xfff < _Size);
      LOCK();
      UNLOCK();
    }
    goto LAB_180033607;
  }
  puVar4 = _Dst;
  if (_Size < 8) goto LAB_180033483;
  puVar3 = _Dst;
  if (((ulonglong)_Dst & 7) != 0) {
    if (((ulonglong)_Dst & 1) != 0) {
      _Size = _Size - 1;
      *(undefined1 *)_Dst = *(undefined1 *)(uVar5 + (longlong)_Dst);
      puVar3 = (undefined8 *)((longlong)_Dst + 1);
    }
    if (((ulonglong)puVar3 & 2) != 0) {
      _Size = _Size - 2;
      *(undefined2 *)puVar3 = *(undefined2 *)(uVar5 + (longlong)puVar3);
      puVar3 = (undefined8 *)((longlong)puVar3 + 2);
    }
    if (((ulonglong)puVar3 & 4) != 0) {
      _Size = _Size - 4;
      *(undefined4 *)puVar3 = *(undefined4 *)(uVar5 + (longlong)puVar3);
      puVar3 = (undefined8 *)((longlong)puVar3 + 4);
    }
  }
  while (uVar6 = _Size >> 5, puVar4 = puVar3, uVar6 != 0) {
    if ((uVar6 < 0x2000) || (uVar5 < 0x1000)) goto LAB_1800334c0;
    do {
      iVar2 = 0x20;
      do {
        puVar4 = puVar3;
        iVar2 = iVar2 + -1;
        puVar3 = puVar4 + 0x10;
      } while (iVar2 != 0);
      iVar2 = 0x40;
      puVar4 = puVar4 + -0x1f0;
      do {
        uVar1 = *(undefined8 *)(uVar5 + 8 + (longlong)puVar4);
        *puVar4 = *(undefined8 *)(uVar5 + (longlong)puVar4);
        puVar4[1] = uVar1;
        uVar1 = *(undefined8 *)(uVar5 + 0x18 + (longlong)puVar4);
        puVar4[2] = *(undefined8 *)(uVar5 + 0x10 + (longlong)puVar4);
        puVar4[3] = uVar1;
        uVar1 = *(undefined8 *)(uVar5 + 0x28 + (longlong)puVar4);
        puVar3 = puVar4 + 8;
        puVar4[4] = *(undefined8 *)(uVar5 + 0x20 + (longlong)puVar4);
        puVar4[5] = uVar1;
        uVar1 = *(undefined8 *)((uVar5 - 8) + (longlong)puVar3);
        iVar2 = iVar2 + -1;
        puVar4[6] = *(undefined8 *)((uVar5 - 0x10) + (longlong)puVar3);
        puVar4[7] = uVar1;
        puVar4 = puVar3;
      } while (iVar2 != 0);
      _Size = _Size - 0x1000;
    } while (0xfff < _Size);
    LOCK();
    UNLOCK();
  }
  goto LAB_180033466;
LAB_180033660:
  do {
    uVar1 = *(undefined8 *)((uVar5 - 0x10) + (longlong)puVar4);
    puVar3 = puVar4 + -4;
    puVar4[-1] = *(undefined8 *)((uVar5 - 8) + (longlong)puVar4);
    puVar4[-2] = uVar1;
    uVar1 = *(undefined8 *)(uVar5 + (longlong)puVar3);
    uVar6 = uVar6 - 1;
    puVar4[-3] = *(undefined8 *)(uVar5 + 8 + (longlong)puVar3);
    *puVar3 = uVar1;
    puVar4 = puVar3;
  } while (uVar6 != 0);
  _Size = _Size & 0x1f;
LAB_180033607:
  uVar6 = _Size >> 3;
  if (uVar6 != 0) {
    do {
      puVar3 = puVar3 + -1;
      uVar6 = uVar6 - 1;
      *puVar3 = *(undefined8 *)(uVar5 + (longlong)puVar3);
    } while (uVar6 != 0);
    _Size = _Size & 7;
  }
LAB_180033624:
  if (_Size == 0) {
    return _Dst;
  }
  do {
    puVar3 = (undefined8 *)((longlong)puVar3 + -1);
    _Size = _Size - 1;
    *(undefined1 *)puVar3 = *(undefined1 *)(uVar5 + (longlong)puVar3);
  } while (_Size != 0);
  return _Dst;
LAB_1800334c0:
  do {
    uVar1 = *(undefined8 *)(uVar5 + 8 + (longlong)puVar3);
    puVar4 = puVar3 + 4;
    *puVar3 = *(undefined8 *)(uVar5 + (longlong)puVar3);
    puVar3[1] = uVar1;
    uVar1 = *(undefined8 *)((uVar5 - 8) + (longlong)puVar4);
    uVar6 = uVar6 - 1;
    puVar3[2] = *(undefined8 *)((uVar5 - 0x10) + (longlong)puVar4);
    puVar3[3] = uVar1;
    puVar3 = puVar4;
  } while (uVar6 != 0);
  _Size = _Size & 0x1f;
LAB_180033466:
  uVar6 = _Size >> 3;
  if (uVar6 != 0) {
    do {
      *puVar4 = *(undefined8 *)(uVar5 + (longlong)puVar4);
      puVar4 = puVar4 + 1;
      uVar6 = uVar6 - 1;
    } while (uVar6 != 0);
    _Size = _Size & 7;
  }
LAB_180033483:
  if (_Size == 0) {
    return _Dst;
  }
  do {
    *(undefined1 *)puVar4 = *(undefined1 *)(uVar5 + (longlong)puVar4);
    puVar4 = (undefined8 *)((longlong)puVar4 + 1);
    _Size = _Size - 1;
  } while (_Size != 0);
  return _Dst;
}


==================================================================

### EXPORT FUNC 180033750 (38 bytes) name=wcschr

/* Library Function - Single Match
    wcschr
   
   Library: Visual Studio 2005 Release */

wchar_t * __cdecl wcschr(wchar_t *_Str,wchar_t _Ch)

{
  wchar_t *pwVar1;
  wchar_t wVar2;
  
  wVar2 = *_Str;
  while (wVar2 != L'\0') {
    if (wVar2 == _Ch) {
      return _Str;
    }
    pwVar1 = _Str + 1;
    _Str = _Str + 1;
    wVar2 = *pwVar1;
  }
  if (*_Str == _Ch) {
    return _Str;
  }
  return (wchar_t *)0x0;
}


==================================================================

### EXPORT FUNC 180033780 (679 bytes) name=FUN_180033780

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */

ulonglong FUN_180033780(LPWSTR param_1,ulonglong param_2,LPCWSTR param_3,int *param_4,
                       undefined8 param_5)

{
  ulonglong uVar1;
  ulonglong uVar2;
  WCHAR WVar3;
  DWORD DVar4;
  DWORD *pDVar5;
  ulonglong uVar6;
  byte *pbVar7;
  undefined4 *puVar8;
  longlong lVar9;
  ulonglong uVar10;
  undefined1 *puVar11;
  undefined1 *puVar12;
  LPCWSTR pWVar13;
  LPSTR pCVar14;
  undefined1 auStackY_68 [32];
  ulonglong local_38;
  ulonglong local_30;
  
  local_30 = DAT_18006cea0 ^ (ulonglong)&local_38;
  local_38 = 0;
  if (((param_1 == (LPWSTR)0x0) || (param_2 == 0)) || (*param_1 = L'\0', param_3 == (LPCWSTR)0x0)) {
    pDVar5 = FUN_180035b40();
    *pDVar5 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    puVar12 = auStackY_68;
  }
  else {
    uVar10 = 0xffffffffffffffff;
    pWVar13 = param_3;
    do {
      if (uVar10 == 0) break;
      uVar10 = uVar10 - 1;
      WVar3 = *pWVar13;
      pWVar13 = pWVar13 + 1;
    } while (WVar3 != L'\0');
    uVar10 = ~uVar10;
    uVar1 = uVar10 - 1;
    puVar12 = auStackY_68;
    if (param_2 - 1 < 0x7ffffffffffffff0) {
      uVar2 = param_2 * 2 + 0x10;
      if (uVar2 < 0x401) {
        uVar6 = param_2 * 2 + 0x1f;
        if (uVar6 <= uVar2) {
          uVar6 = 0xffffffffffffff0;
        }
        lVar9 = -(uVar6 & 0xfffffffffffffff0);
        puVar12 = auStackY_68 + lVar9;
        if ((undefined4 *)((longlong)&local_38 + lVar9) == (undefined4 *)0x0) goto LAB_1800337e3;
        *(undefined4 *)((longlong)&local_38 + lVar9) = 0xcccc;
        pbVar7 = &stack0xffffffffffffffd8 + lVar9;
        puVar11 = auStackY_68 + lVar9;
      }
      else {
        pbVar7 = FUN_1800349a0(uVar2);
        puVar11 = auStackY_68;
        if (pbVar7 != (byte *)0x0) {
          pbVar7[0] = 0xdd;
          pbVar7[1] = 0xdd;
          pbVar7[2] = 0;
          pbVar7[3] = 0;
          pbVar7 = pbVar7 + 0x10;
          puVar11 = auStackY_68;
        }
      }
      puVar12 = puVar11;
      if (pbVar7 != (byte *)0x0) {
        if (uVar1 < 0x7ffffffffffffff0) {
          uVar2 = uVar10 + 0x11 + uVar1;
          if (uVar2 < 0x401) {
            uVar6 = uVar2 + 0xf;
            if (uVar6 <= uVar2) {
              uVar6 = 0xffffffffffffff0;
            }
            *(undefined8 *)(puVar11 + -8) = 0x1800338de;
            lVar9 = -(uVar6 & 0xfffffffffffffff0);
            puVar12 = puVar11 + lVar9;
            puVar8 = (undefined4 *)(puVar11 + lVar9 + 0x30);
            if (puVar8 == (undefined4 *)0x0) goto LAB_1800339f3;
            *puVar8 = 0xcccc;
            puVar11 = puVar11 + lVar9;
LAB_18003390a:
            pCVar14 = (LPSTR)(puVar8 + 4);
            puVar12 = puVar11;
          }
          else {
            *(undefined8 *)(puVar11 + -8) = 0x1800338fc;
            puVar8 = FUN_1800349a0(uVar2);
            pCVar14 = (LPSTR)0x0;
            if (puVar8 != (undefined4 *)0x0) {
              *puVar8 = 0xdddd;
              goto LAB_18003390a;
            }
          }
          if (pCVar14 != (LPSTR)0x0) {
            uVar1 = uVar10 + 1 + uVar1;
            *(undefined8 *)(puVar12 + 0x28) = param_5;
            *(ulonglong *)(puVar12 + 0x20) = uVar1 - 1;
            *(undefined8 *)(puVar12 + -8) = 0x18003393b;
            DVar4 = FUN_180032a70((ulonglong *)0x0,pCVar14,uVar1,param_3,
                                  *(ulonglong *)(puVar12 + 0x20),*(undefined8 **)(puVar12 + 0x28));
            if (DVar4 == 0) {
              *(undefined8 *)(puVar12 + 0x28) = param_5;
              *(undefined8 *)(puVar12 + 0x20) = 0;
              *(undefined8 *)(puVar12 + -8) = 0x180033985;
              lVar9 = FUN_18003e1d0((char *)pbVar7,param_2 * 2,pCVar14,param_4,
                                    *(longlong *)(puVar12 + 0x20),*(undefined8 **)(puVar12 + 0x28));
              if (lVar9 != 0) {
                *(undefined8 *)(puVar12 + 0x28) = param_5;
                *(undefined8 *)(puVar12 + 0x20) = 0xffffffffffffffff;
                *(undefined8 *)(puVar12 + -8) = 0x1800339aa;
                DVar4 = FUN_18003d240(&local_38,param_1,param_2,pbVar7,
                                      *(ulonglong *)(puVar12 + 0x20),*(longlong **)(puVar12 + 0x28))
                ;
                if (DVar4 == 0) {
                  if (local_38 != 0) {
                    local_38 = local_38 - 1;
                  }
                  goto LAB_1800339e1;
                }
                if ((DVar4 == 0x16) || (DVar4 == 0x22)) {
                  *(undefined8 *)(puVar12 + 0x20) = 0;
                    /* WARNING: Subroutine does not return */
                  *(undefined8 *)(puVar12 + -8) = 0x1800339cc;
                  FID_conflict__invoke_watson
                            ((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,
                             *(uintptr_t *)(puVar12 + 0x20));
                }
                if (param_2 <= local_38) {
                  *(undefined8 *)(puVar12 + -8) = 0x1800339d7;
                  pDVar5 = FUN_180035b40();
                  *pDVar5 = 0x22;
                }
              }
              local_38 = 0;
            }
            else if ((DVar4 == 0x16) || (DVar4 == 0x22)) {
              *(undefined8 *)(puVar12 + 0x20) = 0;
                    /* WARNING: Subroutine does not return */
              *(undefined **)(puVar12 + -8) = &UNK_180033964;
              FID_conflict__invoke_watson
                        ((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,
                         *(uintptr_t *)(puVar12 + 0x20));
            }
LAB_1800339e1:
            if (*(int *)(pCVar14 + -0x10) == 0xdddd) {
              *(undefined8 *)(puVar12 + -8) = 0x1800339f3;
              FUN_180034a70(pCVar14 + -0x10);
            }
          }
        }
LAB_1800339f3:
        if (*(int *)(pbVar7 + -0x10) == 0xdddd) {
          *(undefined8 *)(puVar12 + -8) = 0x180033a05;
          FUN_180034a70(pbVar7 + -0x10);
        }
        uVar10 = local_38;
        if (local_38 == 0) {
          *param_1 = L'\0';
        }
        goto LAB_1800337e5;
      }
    }
  }
LAB_1800337e3:
  uVar10 = 0;
LAB_1800337e5:
  *(undefined8 *)(puVar12 + -8) = 0x1800337f1;
  return uVar10;
}


==================================================================

### EXPORT FUNC 180033a30 (248 bytes) name=FUN_180033a30

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

void FUN_180033a30(LPWSTR param_1,ulonglong param_2,LPCWSTR param_3,int *param_4)

{
  pthreadlocinfo local_28;
  pthreadmbcinfo local_20;
  DWORD *local_18;
  char local_10;
  
  local_10 = '\0';
  local_18 = FUN_1800380a0();
  local_28 = *(pthreadlocinfo *)(local_18 + 0x30);
  local_20 = *(pthreadmbcinfo *)(local_18 + 0x2e);
  if ((local_28 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
    local_28 = __updatetlocinfo();
  }
  if ((local_20 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
    local_20 = __updatetmbcinfo();
  }
  if ((local_18[0x32] & 2) == 0) {
    local_18[0x32] = local_18[0x32] | 2;
    local_10 = '\x01';
  }
  FUN_180033780(param_1,param_2,param_3,param_4,&local_28);
  if (local_10 != '\0') {
    local_18[0x32] = local_18[0x32] & 0xfffffffd;
  }
  return;
}


==================================================================

### EXPORT FUNC 180033b30 (885 bytes) name=FUN_180033b30

undefined8 FUN_180033b30(int *param_1,longlong *param_2)

{
  int iVar1;
  DWORD *pDVar2;
  undefined8 uVar3;
  ulonglong uVar4;
  longlong lVar5;
  longlong lVar6;
  int local_res8 [4];
  int local_res18 [2];
  int local_res20 [2];
  longlong local_28 [2];
  
  local_res18[0] = 0;
  local_res20[0] = 0;
  local_res8[0] = 0;
  if (param_1 != (int *)0x0) {
    *param_1 = -1;
    param_1[1] = -1;
    param_1[2] = -1;
    param_1[3] = -1;
    param_1[4] = -1;
    param_1[5] = -1;
    param_1[6] = -1;
    param_1[7] = -1;
    param_1[8] = -1;
    if (param_2 != (longlong *)0x0) {
      if (*param_2 < 0) {
        pDVar2 = FUN_180035b40();
        *pDVar2 = 0x16;
        return 0x16;
      }
      if (*param_2 < 0x793407000) {
        __tzset();
        uVar3 = FUN_18003f680(local_res18);
        if ((int)uVar3 != 0) {
                    /* WARNING: Subroutine does not return */
          FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
        }
        uVar3 = FUN_18003f6d0(local_res20);
        if ((int)uVar3 != 0) {
                    /* WARNING: Subroutine does not return */
          FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
        }
        uVar3 = FUN_18003f720(local_res8);
        if ((int)uVar3 != 0) {
                    /* WARNING: Subroutine does not return */
          FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
        }
        if (*param_2 < 0x3f481) {
          uVar3 = FUN_18003f350(param_1,param_2);
          if ((int)uVar3 != 0) {
            return uVar3;
          }
          if ((local_res18[0] != 0) && (uVar4 = FUN_18003f300(param_1), (int)uVar4 != 0)) {
            param_1[8] = 1;
            local_res8[0] = local_res8[0] + local_res20[0];
          }
          lVar5 = (longlong)*param_1 - (longlong)local_res8[0];
          lVar6 = SUB168(SEXT816(-0x7777777777777777) * SEXT816(lVar5),8) + lVar5;
          iVar1 = (int)lVar5 + ((int)(lVar6 >> 5) - (int)(lVar6 >> 0x3f)) * -0x3c;
          *param_1 = iVar1;
          if (iVar1 < 0) {
            lVar5 = lVar5 + -0x3c;
            *param_1 = iVar1 + 0x3c;
          }
          lVar5 = lVar5 + SUB168(SEXT816(-0x7777777777777777) * SEXT816(lVar5),8);
          lVar5 = ((lVar5 >> 5) - (lVar5 >> 0x3f)) + (longlong)param_1[1];
          lVar6 = SUB168(SEXT816(-0x7777777777777777) * SEXT816(lVar5),8) + lVar5;
          iVar1 = (int)lVar5 + ((int)(lVar6 >> 5) - (int)(lVar6 >> 0x3f)) * -0x3c;
          param_1[1] = iVar1;
          if (iVar1 < 0) {
            lVar5 = lVar5 + -0x3c;
            param_1[1] = iVar1 + 0x3c;
          }
          lVar5 = lVar5 + SUB168(SEXT816(-0x7777777777777777) * SEXT816(lVar5),8);
          lVar5 = ((lVar5 >> 5) - (lVar5 >> 0x3f)) + (longlong)param_1[2];
          iVar1 = (int)lVar5 + (int)(lVar5 / 0x18) * -0x18;
          param_1[2] = iVar1;
          if (iVar1 < 0) {
            lVar5 = lVar5 + -0x18;
            param_1[2] = iVar1 + 0x18;
          }
          lVar5 = lVar5 / 6 + (lVar5 >> 0x3f);
          lVar5 = (lVar5 >> 2) - (lVar5 >> 0x3f);
          iVar1 = (int)lVar5;
          if (lVar5 < 1) {
            if (-1 < lVar5) {
              return 0;
            }
            param_1[3] = param_1[3] + iVar1;
            param_1[6] = (iVar1 + 7 + param_1[6]) % 7;
            if (param_1[3] < 1) {
              param_1[5] = param_1[5] + -1;
              param_1[4] = 0xb;
              param_1[3] = param_1[3] + 0x1f;
              param_1[7] = param_1[7] + iVar1 + 0x16d;
              return 0;
            }
          }
          else {
            param_1[3] = param_1[3] + iVar1;
            param_1[6] = (iVar1 + param_1[6]) % 7;
          }
          param_1[7] = param_1[7] + iVar1;
        }
        else {
          local_28[0] = *param_2 - (longlong)local_res8[0];
          uVar3 = FUN_18003f350(param_1,local_28);
          if ((int)uVar3 != 0) {
            return uVar3;
          }
          if ((local_res18[0] != 0) && (uVar4 = FUN_18003f300(param_1), (int)uVar4 != 0)) {
            local_28[0] = local_28[0] - local_res20[0];
            uVar3 = FUN_18003f350(param_1,local_28);
            if ((int)uVar3 == 0) {
              param_1[8] = 1;
              return uVar3;
            }
            return uVar3;
          }
        }
        return 0;
      }
    }
  }
  pDVar2 = FUN_180035b40();
  *pDVar2 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0x16;
}


==================================================================

### EXPORT FUNC 180033eb0 (103 bytes) name=wcsstr

/* Library Function - Single Match
    wcsstr
   
   Library: Visual Studio 2005 Release */

wchar_t * __cdecl wcsstr(wchar_t *_Str,wchar_t *_SubStr)

{
  wchar_t wVar1;
  wchar_t *pwVar2;
  longlong lVar3;
  
  if (*_SubStr == L'\0') {
    return _Str;
  }
  wVar1 = *_Str;
  if (wVar1 != L'\0') {
    lVar3 = (longlong)_Str - (longlong)_SubStr;
    pwVar2 = _SubStr;
joined_r0x000180033ed6:
    do {
      if (wVar1 != L'\0') {
        if (*pwVar2 == L'\0') {
          return _Str;
        }
        if (*(wchar_t *)(lVar3 + (longlong)pwVar2) == *pwVar2) {
          wVar1 = *(wchar_t *)(lVar3 + (longlong)(pwVar2 + 1));
          pwVar2 = pwVar2 + 1;
          goto joined_r0x000180033ed6;
        }
      }
      if (*pwVar2 == L'\0') {
        return _Str;
      }
      wVar1 = _Str[1];
      _Str = _Str + 1;
      lVar3 = lVar3 + 2;
      pwVar2 = _SubStr;
    } while (wVar1 != L'\0');
  }
  return (wchar_t *)0x0;
}


==================================================================

### EXPORT FUNC 180033f20 (568 bytes) name=FUN_180033f20

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */

DWORD FUN_180033f20(wchar_t *param_1,size_t param_2,longlong *param_3)

{
  ulonglong uVar1;
  wchar_t wVar2;
  LCID LVar3;
  undefined1 auVar4 [16];
  longlong lVar5;
  DWORD DVar6;
  int iVar7;
  size_t sVar8;
  DWORD *pDVar9;
  undefined4 *puVar10;
  undefined1 *puVar11;
  undefined1 *puVar12;
  wchar_t *_Src;
  ulonglong uVar13;
  undefined1 auStackY_68 [32];
  ulonglong local_28 [2];
  
  puVar11 = auStackY_68;
  puVar12 = auStackY_68;
  local_28[0] = DAT_18006cea0 ^ (ulonglong)local_28;
  if (param_1 != (wchar_t *)0x0) {
    sVar8 = wcsnlen(param_1,param_2);
    if (sVar8 < param_2) {
      LVar3 = *(LCID *)(*param_3 + 0x14);
      if (LVar3 == 0) {
        wVar2 = *param_1;
        while (wVar2 != L'\0') {
          wVar2 = *param_1;
          if ((0x60 < (ushort)wVar2) && ((ushort)wVar2 < 0x7b)) {
            *param_1 = wVar2 + L'￠';
          }
          param_1 = param_1 + 1;
          wVar2 = *param_1;
        }
        DVar6 = 0;
        puVar12 = auStackY_68;
        goto LAB_180034136;
      }
      iVar7 = FUN_18003fb70(param_3,LVar3,0x200,param_1,-1,(LPWSTR)0x0,0,*(UINT *)(*param_3 + 4));
      uVar13 = (ulonglong)iVar7;
      if (iVar7 == 0) {
        pDVar9 = FUN_180035b40();
        *pDVar9 = 0x2a;
        puVar12 = auStackY_68;
      }
      else {
        if (param_2 < uVar13) {
          *param_1 = L'\0';
          pDVar9 = FUN_180035b40();
          *pDVar9 = 0x22;
          FUN_1800384e0(0,0,0,0,0);
          DVar6 = 0x22;
          goto LAB_180034136;
        }
        puVar12 = auStackY_68;
        if ((0 < iVar7) &&
           (auVar4._8_8_ = 0, auVar4._0_8_ = uVar13, puVar12 = auStackY_68,
           1 < SUB168((ZEXT816(0) << 0x40 | ZEXT816(0xffffffffffffffe0)) / auVar4,0))) {
          uVar1 = uVar13 * 2 + 0x10;
          if (uVar1 < 0x401) {
            uVar13 = uVar13 * 2 + 0x1f;
            if (uVar13 <= uVar1) {
              uVar13 = 0xffffffffffffff0;
            }
            lVar5 = -(uVar13 & 0xfffffffffffffff0);
            puVar12 = auStackY_68 + lVar5;
            puVar11 = auStackY_68 + lVar5;
            puVar10 = (undefined4 *)((longlong)local_28 + lVar5);
            if (puVar10 == (undefined4 *)0x0) goto LAB_180034124;
            *puVar10 = 0xcccc;
LAB_1800340b2:
            _Src = (wchar_t *)(puVar10 + 4);
            puVar12 = puVar11;
          }
          else {
            puVar10 = FUN_1800349a0(uVar1);
            _Src = (wchar_t *)0x0;
            puVar12 = auStackY_68;
            if (puVar10 != (undefined4 *)0x0) {
              *puVar10 = 0xdddd;
              goto LAB_1800340b2;
            }
          }
          if (_Src != (wchar_t *)0x0) {
            LVar3 = *(LCID *)(*param_3 + 0x14);
            *(undefined4 *)(puVar12 + 0x38) = *(undefined4 *)(*param_3 + 4);
            *(int *)(puVar12 + 0x30) = iVar7;
            *(wchar_t **)(puVar12 + 0x28) = _Src;
            *(undefined4 *)(puVar12 + 0x20) = 0xffffffff;
            *(undefined8 *)(puVar12 + -8) = 0x1800340ec;
            iVar7 = FUN_18003fb70(param_3,LVar3,0x200,param_1,*(int *)(puVar12 + 0x20),
                                  *(LPWSTR *)(puVar12 + 0x28),*(int *)(puVar12 + 0x30),
                                  *(UINT *)(puVar12 + 0x38));
            if (iVar7 == 0) {
              *(undefined8 *)(puVar12 + -8) = 0x180034107;
              pDVar9 = FUN_180035b40();
              DVar6 = 0x2a;
              *pDVar9 = 0x2a;
            }
            else {
              *(undefined8 *)(puVar12 + -8) = 0x1800340fe;
              DVar6 = wcscpy_s(param_1,param_2,_Src);
            }
            if (*(int *)(_Src + -8) == 0xdddd) {
              *(undefined8 *)(puVar12 + -8) = 0x180034120;
              FUN_180034a70(_Src + -8);
            }
            goto LAB_180034136;
          }
        }
LAB_180034124:
        *(undefined8 *)(puVar12 + -8) = 0x180034129;
        pDVar9 = FUN_180035b40();
        *pDVar9 = 0xc;
      }
      *(undefined8 *)(puVar12 + -8) = 0x180034134;
      pDVar9 = FUN_180035b40();
      DVar6 = *pDVar9;
      goto LAB_180034136;
    }
    *param_1 = L'\0';
  }
  pDVar9 = FUN_180035b40();
  *pDVar9 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  DVar6 = 0x16;
  puVar12 = auStackY_68;
LAB_180034136:
  *(undefined8 *)(puVar12 + -8) = 0x180034142;
  return DVar6;
}


==================================================================

### EXPORT FUNC 180034160 (211 bytes) name=FUN_180034160

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

void FUN_180034160(wchar_t *param_1,size_t param_2)

{
  pthreadlocinfo local_28;
  pthreadmbcinfo local_20;
  DWORD *local_18;
  char local_10;
  
  local_10 = '\0';
  local_18 = FUN_1800380a0();
  local_28 = *(pthreadlocinfo *)(local_18 + 0x30);
  local_20 = *(pthreadmbcinfo *)(local_18 + 0x2e);
  if ((local_28 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
    local_28 = __updatetlocinfo();
  }
  if ((local_20 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
    local_20 = __updatetmbcinfo();
  }
  if ((local_18[0x32] & 2) == 0) {
    local_18[0x32] = local_18[0x32] | 2;
    local_10 = '\x01';
  }
  FUN_180033f20(param_1,param_2,(longlong *)&local_28);
  if (local_10 != '\0') {
    local_18[0x32] = local_18[0x32] & 0xfffffffd;
  }
  return;
}


==================================================================

### EXPORT FUNC 180034240 (102 bytes) name=FUN_180034240

uint FUN_180034240(byte *param_1,WCHAR *param_2)

{
  uint uVar1;
  DWORD *pDVar2;
  FILE local_38;
  
  if (param_1 == (byte *)0x0) {
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffff;
  }
  local_38._cnt = 0x7fffffff;
  local_38._flag = 0x42;
  local_38._base = (char *)0x0;
  local_38._ptr = (char *)0x0;
  uVar1 = FUN_180038850(&local_38,param_1,(longlong *)0x0,param_2);
  return uVar1;
}


==================================================================

### EXPORT FUNC 1800342b0 (264 bytes) name=FUN_1800342b0

ulonglong FUN_1800342b0(undefined *param_1,char *param_2,ulonglong param_3,longlong param_4,
                       undefined8 param_5,undefined8 param_6)

{
  DWORD *pDVar1;
  ulonglong uVar2;
  ulonglong uVar3;
  FILE local_38;
  
  if ((param_4 == 0) || ((param_3 != 0 && (param_2 == (char *)0x0)))) {
    pDVar1 = FUN_180035b40();
    *pDVar1 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffff;
  }
  local_38._cnt = (int)param_3;
  if (0x7fffffff < param_3) {
    local_38._cnt = 0x7fffffff;
  }
  local_38._flag = 0x42;
  local_38._ptr = param_2;
  local_38._base = param_2;
  uVar2 = (*(code *)param_1)(&local_38,param_4,param_5,param_6);
  if (param_2 != (char *)0x0) {
    if (-1 < (int)uVar2) {
      local_38._cnt = local_38._cnt + -1;
      if (-1 < local_38._cnt) {
        *local_38._ptr = '\0';
        return uVar2 & 0xffffffff;
      }
      uVar3 = FUN_1800385f0(0,&local_38);
      if ((int)uVar3 != -1) {
        return uVar2 & 0xffffffff;
      }
    }
    param_2[param_3 - 1] = '\0';
    uVar2 = (ulonglong)((-1 < local_38._cnt) - 2);
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 1800343c0 (128 bytes) name=FUN_1800343c0

ulonglong FUN_1800343c0(char *param_1,ulonglong param_2,longlong param_3,undefined8 param_4)

{
  ulonglong uVar1;
  DWORD *pDVar2;
  
  if (((param_3 == 0) || (param_1 == (char *)0x0)) || (param_2 == 0)) {
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x16;
  }
  else {
    uVar1 = FUN_1800342b0(FUN_18003fdd0,param_1,param_2,param_3,0,param_4);
    if ((int)uVar1 < 0) {
      *param_1 = '\0';
    }
    if ((int)uVar1 != -2) {
      return uVar1;
    }
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x22;
  }
  FUN_1800384e0(0,0,0,0,0);
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 180034440 (564 bytes) name=FUN_180034440

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

undefined4 FUN_180034440(undefined8 param_1,int param_2,longlong param_3)

{
  DWORD DVar1;
  DWORD DVar2;
  BOOL BVar3;
  int iVar4;
  DWORD DVar5;
  HANDLE pvVar6;
  LPOSVERSIONINFOA lpVersionInformation;
  undefined8 uVar7;
  DWORD *lpFlsData;
  uint uVar8;
  
  if (param_2 == 1) {
    pvVar6 = GetProcessHeap();
    lpVersionInformation = HeapAlloc(pvVar6,0,0x94);
    if (lpVersionInformation != (LPOSVERSIONINFOA)0x0) {
      lpVersionInformation->dwOSVersionInfoSize = 0x94;
      BVar3 = GetVersionExA(lpVersionInformation);
      if (BVar3 == 0) {
        pvVar6 = GetProcessHeap();
        HeapFree(pvVar6,0,lpVersionInformation);
      }
      else {
        DVar5 = lpVersionInformation->dwMinorVersion;
        DVar1 = lpVersionInformation->dwMajorVersion;
        DVar2 = lpVersionInformation->dwPlatformId;
        uVar8 = lpVersionInformation->dwBuildNumber & 0x7fff;
        pvVar6 = GetProcessHeap();
        HeapFree(pvVar6,0,lpVersionInformation);
        if (DVar2 != 2) {
          uVar8 = uVar8 | 0x8000;
        }
        _DAT_1800727e4 = DVar1 * 0x100 + DVar5;
        DAT_1800727dc = DVar2;
        _DAT_1800727e0 = uVar8;
        DAT_1800727e8 = DVar1;
        _DAT_1800727ec = DVar5;
        iVar4 = _heap_init();
        if (iVar4 != 0) {
          uVar7 = FUN_180038310();
          if ((int)uVar7 != 0) {
            FUN_180041ad0();
            DAT_1800db708 = GetCommandLineA();
            DAT_1800727c0 = FUN_180041900();
            uVar7 = FUN_1800410a0();
            if (-1 < (int)uVar7) {
              uVar7 = FUN_1800417f0();
              if (((-1 < (int)uVar7) && (uVar7 = FUN_180041460(), -1 < (int)uVar7)) &&
                 (uVar7 = FUN_180036810(), (int)uVar7 == 0)) {
                DAT_1800727b8 = DAT_1800727b8 + 1;
                return 1;
              }
              FUN_1800413d0();
            }
            FUN_180037e30();
          }
          FUN_180041070();
          return 0;
        }
      }
    }
  }
  else if (param_2 == 0) {
    if (0 < DAT_1800727b8) {
      DAT_1800727b8 = DAT_1800727b8 + -1;
      if (DAT_180072838 == 0) {
        FUN_180036a30();
      }
      if (param_3 != 0) {
        return 1;
      }
      FUN_1800413d0();
      FUN_180037e30();
      FUN_180041070();
      return 1;
    }
  }
  else {
    if (param_2 != 2) {
      if (param_2 != 3) {
        return 1;
      }
      _freeptd((_ptiddata)0x0);
      return 1;
    }
    FUN_180037e10();
    lpFlsData = FUN_180040e50(1,0x2d8);
    if (lpFlsData != (DWORD *)0x0) {
      BVar3 = FlsSetValue(DAT_18006d710,lpFlsData);
      if (BVar3 == 0) {
        FUN_180034a70(lpFlsData);
        return 0;
      }
      FUN_180037e80((longlong)lpFlsData,0);
      DVar5 = GetCurrentThreadId();
      lpFlsData[2] = 0xffffffff;
      lpFlsData[3] = 0xffffffff;
      *lpFlsData = DVar5;
      return 1;
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180034680 (280 bytes) name=FUN_180034680

ulonglong FUN_180034680(HINSTANCE__ *param_1,uint param_2,longlong param_3,undefined *param_4)

{
  undefined4 uVar1;
  int iVar2;
  uint uVar3;
  ulonglong uVar4;
  ulonglong uVar5;
  undefined4 extraout_var;
  
  uVar4 = 1;
  if ((param_2 == 0) && (DAT_1800727b8 == 0)) {
    uVar5 = 0;
  }
  else {
    if ((param_2 == 1) || (param_2 == 2)) {
      param_4 = PTR_180057180;
      if (PTR_180057180 != (undefined *)0x0) {
        uVar4 = (*(code *)PTR_180057180)();
      }
      if ((int)uVar4 != 0) {
        uVar1 = FUN_180034440(param_1,param_2,param_3);
        uVar4 = CONCAT44(extraout_var,uVar1);
      }
      if ((int)uVar4 == 0) {
        return uVar4;
      }
    }
    uVar4 = DllMain(param_1,(ulonglong)param_2,param_3,param_4);
    uVar5 = uVar4 & 0xffffffff;
    if ((param_2 == 1) && ((int)uVar4 == 0)) {
      DllMain(param_1,0,param_3,param_4);
      FUN_180034440(param_1,0,param_3);
      if (PTR_180057180 != (undefined *)0x0) {
        (*(code *)PTR_180057180)(param_1,0,param_3);
      }
    }
    if ((param_2 == 0) || (param_2 == 3)) {
      iVar2 = FUN_180034440(param_1,param_2,param_3);
      if (iVar2 == 0) {
        uVar5 = 0;
      }
      else if (((int)uVar4 != 0) && (PTR_180057180 != (undefined *)0x0)) {
        uVar3 = (*(code *)PTR_180057180)(param_1,param_2,param_3);
        uVar5 = (ulonglong)uVar3;
      }
    }
  }
  return uVar5;
}


==================================================================

### EXPORT FUNC 1800347a0 (28 bytes) name=FUN_1800347a0

void FUN_1800347a0(undefined8 *param_1)

{
  FUN_180041d60(*(int *)*param_1,param_1);
  return;
}


==================================================================

### EXPORT FUNC 1800347c0 (61 bytes) name=entry

void entry(HINSTANCE__ *param_1,uint param_2,longlong param_3,undefined *param_4)

{
  if (param_2 == 1) {
    FUN_180041d70();
  }
  FUN_180034680(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### EXPORT FUNC 180034800 (73 bytes) name=__onexitinit

/* Library Function - Single Match
    __onexitinit
   
   Library: Visual Studio 2005 Release */

undefined4 __onexitinit(void)

{
  undefined8 *puVar1;
  
  puVar1 = FUN_180040e50(0x20,8);
  DAT_1800db6e8 = FUN_180037b60((INT_PTR)puVar1);
  DAT_1800db6f0 = DAT_1800db6e8;
  if (puVar1 == (undefined8 *)0x0) {
    return 0x18;
  }
  *puVar1 = 0;
  return 0;
}


==================================================================

### EXPORT FUNC 180034850 (259 bytes) name=FUN_180034850

INT_PTR FUN_180034850(INT_PTR param_1)

{
  ulonglong uVar1;
  INT_PTR *pIVar2;
  INT_PTR *pIVar3;
  SIZE_T SVar4;
  LPVOID pvVar5;
  INT_PTR IVar6;
  SIZE_T SVar7;
  
  FUN_180036710();
  pIVar2 = (INT_PTR *)FUN_180037d20(DAT_1800db6f0);
  pIVar3 = (INT_PTR *)FUN_180037d20(DAT_1800db6e8);
  if (pIVar2 <= pIVar3) {
    uVar1 = ((longlong)pIVar3 - (longlong)pIVar2) + 8;
    if (7 < uVar1) {
      SVar4 = FUN_180035e80(pIVar2);
      if (SVar4 < uVar1) {
        SVar7 = 0x1000;
        if (SVar4 < 0x1000) {
          SVar7 = SVar4;
        }
        if (SVar7 + SVar4 < SVar4) {
LAB_1800348de:
          if (SVar4 <= SVar4 + 0x20) {
            pvVar5 = FUN_180040ee0(pIVar2,SVar4 + 0x20);
            if (pvVar5 != (LPVOID)0x0) goto LAB_1800348f5;
          }
          param_1 = 0;
          goto LAB_180034931;
        }
        pvVar5 = FUN_180040ee0(pIVar2,SVar7 + SVar4);
        if (pvVar5 == (LPVOID)0x0) goto LAB_1800348de;
LAB_1800348f5:
        pIVar3 = (INT_PTR *)((longlong)pvVar5 + ((longlong)pIVar3 - (longlong)pIVar2 >> 3) * 8);
        DAT_1800db6f0 = FUN_180037b60((INT_PTR)pvVar5);
      }
      IVar6 = FUN_180037b60(param_1);
      *pIVar3 = IVar6;
      DAT_1800db6e8 = FUN_180037b60((INT_PTR)(pIVar3 + 1));
      goto LAB_180034931;
    }
  }
  param_1 = 0;
LAB_180034931:
  FUN_180036720();
  return param_1;
}


==================================================================

### EXPORT FUNC 180034960 (20 bytes) name=FUN_180034960

void FUN_180034960(void)

{
  FUN_180036720();
  return;
}


==================================================================

### EXPORT FUNC 180034980 (24 bytes) name=FUN_180034980

int FUN_180034980(INT_PTR param_1)

{
  INT_PTR IVar1;
  
  IVar1 = FUN_180034850(param_1);
  return (IVar1 != 0) - 1;
}


==================================================================

### EXPORT FUNC 1800349a0 (198 bytes) name=FUN_1800349a0

LPVOID FUN_1800349a0(size_t param_1)

{
  int iVar1;
  LPVOID pvVar2;
  DWORD *pDVar3;
  SIZE_T dwBytes;
  
  if (0xffffffffffffffe0 < param_1) {
    _callnewh(param_1);
    pDVar3 = FUN_180035b40();
    *pDVar3 = 0xc;
    return (LPVOID)0x0;
  }
  dwBytes = 1;
  if (param_1 != 0) {
    dwBytes = param_1;
  }
  while( true ) {
    if (DAT_180072ed8 == (HANDLE)0x0) {
      FUN_180042070();
      FUN_180041e30(0x1e);
      FUN_1800366d0(0xff);
    }
    pvVar2 = HeapAlloc(DAT_180072ed8,0,dwBytes);
    if (pvVar2 != (LPVOID)0x0) {
      return pvVar2;
    }
    if (DAT_180073310 == 0) break;
    iVar1 = _callnewh(param_1);
    if (iVar1 == 0) {
LAB_180034a30:
      pDVar3 = FUN_180035b40();
      *pDVar3 = 0xc;
      return (LPVOID)0x0;
    }
  }
  pDVar3 = FUN_180035b40();
  *pDVar3 = 0xc;
  goto LAB_180034a30;
}


==================================================================

### EXPORT FUNC 180034a70 (69 bytes) name=FUN_180034a70

void FUN_180034a70(LPVOID param_1)

{
  BOOL BVar1;
  DWORD DVar2;
  DWORD *pDVar3;
  
  if (param_1 != (LPVOID)0x0) {
    BVar1 = HeapFree(DAT_180072ed8,0,param_1);
    if (BVar1 == 0) {
      pDVar3 = FUN_180035b40();
      DVar2 = GetLastError();
      DVar2 = FUN_180035af0(DVar2);
      *pDVar3 = DVar2;
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180034ac0 (54 bytes) name=_purecall

/* Library Function - Single Match
    _purecall
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void _purecall(void)

{
  code *pcVar1;
  
  pcVar1 = (code *)FUN_180037d20(DAT_180073320);
  if (pcVar1 != (code *)0x0) {
    (*pcVar1)();
  }
  FUN_180041e30(0x19);
  _set_abort_behavior(0,1);
                    /* WARNING: Subroutine does not return */
  abort();
}


==================================================================

### EXPORT FUNC 180034b00 (101 bytes) name=__GSHandlerCheckCommon

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    __GSHandlerCheckCommon
   
   Library: Visual Studio 2005 Release */

byte __GSHandlerCheckCommon(undefined8 param_1,longlong param_2)

{
  byte bVar1;
  
  bVar1 = *(byte *)((ulonglong)*(uint *)(*(longlong *)(param_2 + 0x10) + 8) +
                    *(longlong *)(param_2 + 8) + 3);
  if ((bVar1 & 0xf) != 0) {
    bVar1 = bVar1 & 0xf0;
  }
  return bVar1;
}


==================================================================

### EXPORT FUNC 180034b70 (103 bytes) name=__GSHandlerCheck

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    __GSHandlerCheck
   
   Library: Visual Studio 2005 Release */

undefined8 __GSHandlerCheck(void)

{
  return 1;
}


==================================================================

### EXPORT FUNC 180034be0 (202 bytes) name=_CxxThrowException

/* Library Function - Single Match
    _CxxThrowException
   
   Library: Visual Studio 2005 Release */

void __stdcall _CxxThrowException(void *pExceptionObject,ThrowInfo *pThrowInfo)

{
  undefined8 uVar1;
  undefined8 uVar2;
  PVOID local_res8 [4];
  DWORD local_48;
  DWORD DStack_44;
  DWORD local_30;
  ULONG_PTR local_28;
  void *local_20;
  ThrowInfo *local_18;
  PVOID local_10;
  
  uVar2 = DAT_1800571a8;
  uVar1 = DAT_180057190;
  local_28 = DAT_1800571b0;
  local_10 = (PVOID)DAT_1800571c8;
  local_20 = pExceptionObject;
  local_18 = pThrowInfo;
  local_res8[0] = RtlPcToFileHeader(pThrowInfo,local_res8);
  if (pThrowInfo != (ThrowInfo *)0x0) {
    if ((pThrowInfo->attributes & 8) == 0) {
      if (local_res8[0] == (PVOID)0x0) {
        local_28._0_4_ = 0x1994000;
      }
    }
    else {
      local_28 = CONCAT44(local_28._4_4_,0x1994000);
    }
  }
  local_30 = (DWORD)uVar2;
  DStack_44 = (DWORD)((ulonglong)uVar1 >> 0x20);
  local_48 = (DWORD)uVar1;
  local_10 = local_res8[0];
  RaiseException(local_48,DStack_44,local_30,&local_28);
  return;
}


==================================================================

### EXPORT FUNC 180034cb0 (271 bytes) name=FUN_180034cb0

longlong * FUN_180034cb0(longlong *param_1,DWORD64 *param_2,longlong param_3,longlong *param_4)

{
  int iVar1;
  int iVar2;
  PRUNTIME_FUNCTION p_Var3;
  int *piVar4;
  uint uVar5;
  ulonglong uVar6;
  longlong lVar7;
  longlong lVar8;
  uint uVar9;
  ulonglong uVar10;
  ulonglong local_res8;
  
  iVar1 = *(int *)(param_3 + 0xc);
  uVar10 = (ulonglong)iVar1;
  iVar2 = FUN_180042320(param_3,(longlong *)param_2);
  *param_4 = *param_1;
  if (iVar1 == 0) {
    return param_4;
  }
  lVar8 = uVar10 * 0x14;
  do {
    lVar8 = lVar8 + -0x14;
    lVar7 = (longlong)*(int *)(param_3 + 0x10) + param_2[1] + lVar8;
    if ((*(int *)(lVar7 + 4) < iVar2) && (iVar2 <= *(int *)(lVar7 + 8))) {
      p_Var3 = RtlLookupFunctionEntry(*param_2,&local_res8,(PUNWIND_HISTORY_TABLE)0x0);
      uVar9 = *(uint *)(lVar7 + 0xc);
      lVar7 = (longlong)*(int *)(lVar7 + 0x10) + local_res8;
      uVar6 = 0;
      if (uVar9 != 0) {
        piVar4 = (int *)(lVar7 + 0xc);
        do {
          if ((longlong)*piVar4 == (ulonglong)p_Var3->BeginAddress) break;
          uVar5 = (int)uVar6 + 1;
          uVar6 = (ulonglong)uVar5;
          piVar4 = piVar4 + 5;
        } while (uVar5 < uVar9);
      }
      if ((uint)uVar6 < uVar9) {
        *param_4 = *(longlong *)((longlong)*(int *)(lVar7 + 0x10 + uVar6 * 0x14) + *param_1);
        return param_4;
      }
    }
    uVar9 = (int)uVar10 - 1;
    uVar10 = (ulonglong)uVar9;
    if (uVar9 == 0) {
      return param_4;
    }
  } while( true );
}


==================================================================

### EXPORT FUNC 180034dc0 (21 bytes) name=FUN_180034dc0

undefined8 FUN_180034dc0(void)

{
  DWORD *pDVar1;
  
  pDVar1 = FUN_1800380a0();
  return *(undefined8 *)(pDVar1 + 0x4a);
}


==================================================================

### EXPORT FUNC 180034de0 (21 bytes) name=FUN_180034de0

undefined8 FUN_180034de0(void)

{
  DWORD *pDVar1;
  
  pDVar1 = FUN_1800380a0();
  return *(undefined8 *)(pDVar1 + 0x4c);
}


==================================================================

### EXPORT FUNC 180034e00 (27 bytes) name=FUN_180034e00

void FUN_180034e00(undefined8 param_1)

{
  DWORD *pDVar1;
  
  pDVar1 = FUN_1800380a0();
  *(undefined8 *)(pDVar1 + 0x4a) = param_1;
  return;
}


==================================================================

### EXPORT FUNC 180034e20 (27 bytes) name=FUN_180034e20

void FUN_180034e20(undefined8 param_1)

{
  DWORD *pDVar1;
  
  pDVar1 = FUN_1800380a0();
  *(undefined8 *)(pDVar1 + 0x4c) = param_1;
  return;
}


==================================================================

### EXPORT FUNC 180034e40 (330 bytes) name=FUN_180034e40

void FUN_180034e40(longlong *param_1,DWORD64 *param_2,longlong param_3)

{
  int iVar1;
  int iVar2;
  PRUNTIME_FUNCTION p_Var3;
  DWORD *pDVar4;
  int *piVar5;
  uint uVar6;
  ulonglong uVar7;
  longlong lVar8;
  longlong lVar9;
  uint uVar10;
  ulonglong uVar11;
  longlong local_res8;
  ulonglong local_res18;
  
  iVar2 = *(int *)(param_3 + 0xc);
  uVar11 = (ulonglong)iVar2;
  iVar1 = FUN_180042320(param_3,(longlong *)param_2);
  local_res8 = *param_1;
  if (iVar2 != 0) {
    lVar9 = uVar11 * 0x14;
    do {
      lVar9 = lVar9 + -0x14;
      lVar8 = (longlong)*(int *)(param_3 + 0x10) + param_2[1] + lVar9;
      if ((*(int *)(lVar8 + 4) < iVar1) && (iVar1 <= *(int *)(lVar8 + 8))) {
        p_Var3 = RtlLookupFunctionEntry(*param_2,&local_res18,(PUNWIND_HISTORY_TABLE)0x0);
        uVar10 = *(uint *)(lVar8 + 0xc);
        lVar8 = (longlong)*(int *)(lVar8 + 0x10) + local_res18;
        uVar7 = 0;
        if (uVar10 != 0) {
          piVar5 = (int *)(lVar8 + 0xc);
          do {
            if ((longlong)*piVar5 == (ulonglong)p_Var3->BeginAddress) break;
            uVar6 = (int)uVar7 + 1;
            uVar7 = (ulonglong)uVar6;
            piVar5 = piVar5 + 5;
          } while (uVar6 < uVar10);
        }
        if ((uint)uVar7 < uVar10) {
          local_res8 = *(longlong *)((longlong)*(int *)(lVar8 + 0x10 + uVar7 * 0x14) + *param_1);
          break;
        }
      }
      uVar10 = (int)uVar11 - 1;
      uVar11 = (ulonglong)uVar10;
    } while (uVar10 != 0);
  }
  iVar2 = FUN_180042320(param_3,(longlong *)param_2);
  uVar11 = (ulonglong)*(int *)(param_3 + 0xc);
  if (*(int *)(param_3 + 0xc) != 0) {
    lVar9 = uVar11 * 0x14;
    do {
      lVar9 = lVar9 + -0x14;
      pDVar4 = FUN_1800380a0();
      lVar8 = *(longlong *)(pDVar4 + 0x4a) + (longlong)*(int *)(param_3 + 0x10);
      if ((*(int *)(lVar8 + 4 + lVar9) < iVar2) && (iVar2 <= *(int *)(lVar8 + 8 + lVar9))) {
        iVar2 = *(int *)(lVar8 + 4 + lVar9);
        goto LAB_180034f5c;
      }
      uVar10 = (int)uVar11 - 1;
      uVar11 = (ulonglong)uVar10;
    } while (uVar10 != 0);
  }
  iVar2 = -1;
LAB_180034f5c:
  FUN_180042570(&local_res8,(longlong *)param_2,param_3,iVar2);
  return;
}


==================================================================

### EXPORT FUNC 180034f90 (135 bytes) name=FID_conflict:__CxxFrameHandler

/* Library Function - Multiple Matches With Different Base Names
    __CxxFrameHandler
    __CxxFrameHandler3
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

void FID_conflict___CxxFrameHandler
               (int *param_1,__uint64 param_2,ULONG_PTR param_3,_xDISPATCHER_CONTEXT *param_4)

{
  DWORD *pDVar1;
  __uint64 local_res8;
  
  local_res8 = param_2;
  pDVar1 = FUN_1800380a0();
  *(undefined8 *)(pDVar1 + 0x4a) = *(undefined8 *)(param_4 + 8);
  pDVar1 = FUN_1800380a0();
  *(undefined8 *)(pDVar1 + 0x4c) = *(undefined8 *)(param_1 + 0xe);
  pDVar1 = FUN_1800380a0();
  FUN_180043a70(param_1,&local_res8,param_3,param_4,
                (_s_FuncInfo *)
                ((ulonglong)**(uint **)(param_4 + 0x38) + *(longlong *)(pDVar1 + 0x4a)),0,0,0);
  return;
}


==================================================================

### EXPORT FUNC 180035020 (161 bytes) name=__SehTransFilter

/* Library Function - Single Match
    int __cdecl __SehTransFilter(struct _EXCEPTION_POINTERS * __ptr64,struct EHExceptionRecord *
   __ptr64,unsigned __int64 * __ptr64,struct _CONTEXT * __ptr64,struct _xDISPATCHER_CONTEXT *
   __ptr64,struct _s_FuncInfo const * __ptr64,int * __ptr64)
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

int __cdecl
__SehTransFilter(_EXCEPTION_POINTERS *param_1,EHExceptionRecord *param_2,__uint64 *param_3,
                _CONTEXT *param_4,_xDISPATCHER_CONTEXT *param_5,_s_FuncInfo *param_6,int *param_7)

{
  PEXCEPTION_RECORD pEVar1;
  DWORD *pDVar2;
  
  pDVar2 = FUN_1800380a0();
  *(EHExceptionRecord **)(pDVar2 + 0x4e) = param_2;
  pEVar1 = param_1->ExceptionRecord;
  pDVar2 = FUN_1800380a0();
  *(ULONG_PTR *)(pDVar2 + 0x4c) = pEVar1->ExceptionInformation[3];
  FUN_180043a70((int *)param_1->ExceptionRecord,param_3,(ULONG_PTR)param_4,param_5,param_6,0,0,1);
  pDVar2 = FUN_1800380a0();
  pDVar2[0x4e] = 0;
  pDVar2[0x4f] = 0;
  *param_7 = 1;
  return 1;
}


==================================================================

### EXPORT FUNC 1800350d0 (84 bytes) name=FUN_1800350d0

undefined4 FUN_1800350d0(undefined4 *param_1,undefined8 param_2,undefined8 param_3)

{
  DWORD *pDVar1;
  undefined4 *local_20;
  undefined8 local_18;
  
  local_20 = param_1;
  local_18 = param_3;
  pDVar1 = FUN_1800380a0();
  (**(code **)(pDVar1 + 0x38))(*param_1,&local_20);
  return 0;
}


==================================================================

### EXPORT FUNC 180035130 (68 bytes) name=_CallSETranslator$filt$0

/* Library Function - Single Match
    _CallSETranslator$filt$0
   
   Library: Visual Studio 2005 Release */

void _CallSETranslator_filt_0(_EXCEPTION_POINTERS *param_1,longlong param_2)

{
  __SehTransFilter(param_1,*(EHExceptionRecord **)(param_2 + 0x70),*(__uint64 **)(param_2 + 0x78),
                   *(_CONTEXT **)(param_2 + 0x80),*(_xDISPATCHER_CONTEXT **)(param_2 + 0x88),
                   *(_s_FuncInfo **)(param_2 + 0x90),(int *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 180035180 (311 bytes) name=FUN_180035180

longlong FUN_180035180(undefined8 param_1,longlong param_2,undefined8 param_3,int param_4,
                      uint *param_5,int *param_6,longlong *param_7)

{
  uint uVar1;
  int iVar2;
  int *piVar3;
  longlong lVar4;
  uint uVar5;
  longlong lVar6;
  
  uVar1 = *(uint *)(param_2 + 0xc);
  lVar4 = 0;
  iVar2 = FUN_180042320(param_2,param_7);
  if (uVar1 == 0) {
    FUN_180043cc0();
  }
  *param_6 = -1;
  *param_5 = 0xffffffff;
  uVar5 = uVar1;
  if (uVar1 != 0) {
    piVar3 = (int *)((longlong)*(int *)(param_2 + 0x10) + (longlong)(int)uVar1 * 0x14 + -0xc +
                    param_7[1]);
    do {
      if ((piVar3[-1] < iVar2) && (iVar2 <= *piVar3)) break;
      piVar3 = piVar3 + -5;
      uVar5 = uVar5 - 1;
    } while (uVar5 != 0);
  }
  if (uVar5 != 0) {
    lVar4 = (longlong)*(int *)(param_2 + 0x10) + (ulonglong)(uVar5 - 1) * 0x14 + param_7[1];
  }
  uVar5 = 0;
  if (uVar1 != 0) {
    lVar6 = 0;
    do {
      piVar3 = (int *)((longlong)*(int *)(param_2 + 0x10) + param_7[1] + lVar6);
      if ((((lVar4 == 0) || ((*(int *)(lVar4 + 4) < *piVar3 && (piVar3[1] <= *(int *)(lVar4 + 8)))))
          && (*piVar3 <= param_4)) && (param_4 <= piVar3[1])) {
        if (*param_5 == 0xffffffff) {
          *param_5 = uVar5;
        }
        *param_6 = uVar5 + 1;
      }
      uVar5 = uVar5 + 1;
      lVar6 = lVar6 + 0x14;
    } while (uVar5 < uVar1);
    if (*param_5 != 0xffffffff) {
      return (longlong)*(int *)(param_2 + 0x10) + (ulonglong)*param_5 * 0x14 + param_7[1];
    }
  }
  *param_5 = 0;
  *param_6 = 0;
  return 0;
}


==================================================================

### EXPORT FUNC 1800352c0 (67 bytes) name=_CreateFrameInfo

/* Library Function - Single Match
    _CreateFrameInfo
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release, Visual Studio 2010 Release,
   Visual Studio 2012 Release */

undefined8 * _CreateFrameInfo(undefined8 *param_1,undefined8 param_2)

{
  DWORD *pDVar1;
  undefined8 uVar2;
  
  *param_1 = param_2;
  pDVar1 = FUN_1800380a0();
  if (param_1 < *(undefined8 **)(pDVar1 + 0x48)) {
    pDVar1 = FUN_1800380a0();
    uVar2 = *(undefined8 *)(pDVar1 + 0x48);
  }
  else {
    uVar2 = 0;
  }
  param_1[1] = uVar2;
  pDVar1 = FUN_1800380a0();
  *(undefined8 **)(pDVar1 + 0x48) = param_1;
  return param_1;
}


==================================================================

### EXPORT FUNC 180035310 (65 bytes) name=_IsExceptionObjectToBeDestroyed

/* Library Function - Single Match
    _IsExceptionObjectToBeDestroyed
   
   Library: Visual Studio 2005 Release */

undefined8 _IsExceptionObjectToBeDestroyed(longlong param_1)

{
  longlong *plVar1;
  DWORD *pDVar2;
  
  pDVar2 = FUN_1800380a0();
  plVar1 = *(longlong **)(pDVar2 + 0x48);
  while( true ) {
    if (plVar1 == (longlong *)0x0) {
      return 1;
    }
    if (*plVar1 == param_1) break;
    plVar1 = (longlong *)plVar1[1];
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180035360 (105 bytes) name=FUN_180035360

void FUN_180035360(longlong param_1)

{
  longlong lVar1;
  DWORD *pDVar2;
  
  pDVar2 = FUN_1800380a0();
  if (param_1 != *(longlong *)(pDVar2 + 0x48)) {
    FUN_180043cc0();
  }
  pDVar2 = FUN_1800380a0();
  lVar1 = *(longlong *)(pDVar2 + 0x48);
  while( true ) {
    if (lVar1 == 0) {
      FUN_180043cc0();
      return;
    }
    if (param_1 == lVar1) break;
    lVar1 = *(longlong *)(lVar1 + 8);
  }
  pDVar2 = FUN_1800380a0();
  *(undefined8 *)(pDVar2 + 0x48) = *(undefined8 *)(lVar1 + 8);
  return;
}


==================================================================

### EXPORT FUNC 1800353d0 (230 bytes) name=_UnwindNestedFrames

/* Library Function - Single Match
    _UnwindNestedFrames
   
   Library: Visual Studio 2008 Release */

void _UnwindNestedFrames(undefined8 *param_1,ULONG_PTR param_2,ULONG_PTR param_3,ULONG_PTR param_4,
                        ULONG_PTR param_5,int param_6,ULONG_PTR param_7,undefined8 *param_8,
                        byte param_9)

{
  EXCEPTION_RECORD local_578;
  _CONTEXT local_4d8;
  
  memcpy(&local_578,&DAT_1800571d0,0x98);
  local_578.ExceptionInformation[2] = param_5;
  local_578.ExceptionInformation[3] = (ULONG_PTR)param_6;
  local_578.ExceptionInformation[5] = param_7;
  local_578.ExceptionInformation[7] = (ULONG_PTR)param_9;
  local_578.ExceptionInformation[0] = (ULONG_PTR)FUN_180042b90;
  local_578.ExceptionInformation[8] = 0x19930520;
  local_578.ExceptionInformation[1] = param_4;
  local_578.ExceptionInformation[4] = param_3;
  local_578.ExceptionInformation[6] = param_2;
  RtlUnwindEx((PVOID)*param_1,(PVOID)*param_8,&local_578,(PVOID)0x0,&local_4d8,
              (PUNWIND_HISTORY_TABLE)param_8[8]);
  return;
}


==================================================================

### EXPORT FUNC 1800354c0 (279 bytes) name=FUN_1800354c0

undefined4 FUN_1800354c0(short *param_1,longlong param_2,short *param_3,longlong param_4)

{
  short sVar1;
  DWORD *pDVar2;
  longlong lVar3;
  short *psVar4;
  short *psVar5;
  
  if (param_4 == 0) {
    if (param_1 == (short *)0x0) {
      if (param_2 == 0) {
        return 0;
      }
      goto LAB_180035503;
    }
  }
  else if (param_1 == (short *)0x0) goto LAB_180035503;
  if (param_2 != 0) {
    if (param_4 == 0) {
      *param_1 = 0;
      return 0;
    }
    if (param_3 != (short *)0x0) {
      lVar3 = param_2;
      psVar4 = param_1;
      if (param_4 == -1) {
        do {
          sVar1 = *param_3;
          param_3 = param_3 + 1;
          *psVar4 = sVar1;
          if (sVar1 == 0) break;
          lVar3 = lVar3 + -1;
          psVar4 = psVar4 + 1;
        } while (lVar3 != 0);
      }
      else {
        do {
          sVar1 = *param_3;
          psVar5 = psVar4 + 1;
          param_3 = param_3 + 1;
          *psVar4 = sVar1;
          if ((sVar1 == 0) || (lVar3 = lVar3 + -1, lVar3 == 0)) break;
          param_4 = param_4 + -1;
          psVar4 = psVar5;
        } while (param_4 != 0);
        if (param_4 == 0) {
          *psVar5 = 0;
        }
      }
      if (lVar3 != 0) {
        return 0;
      }
      if (param_4 == -1) {
        param_1[param_2 + -1] = 0;
        return 0x50;
      }
      *param_1 = 0;
      pDVar2 = FUN_180035b40();
      *pDVar2 = 0x22;
      FUN_1800384e0(0,0,0,0,0);
      return 0x22;
    }
    *param_1 = 0;
  }
LAB_180035503:
  pDVar2 = FUN_180035b40();
  *pDVar2 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0x16;
}


==================================================================

### EXPORT FUNC 1800355e0 (26 bytes) name=FUN_1800355e0

longlong FUN_1800355e0(short *param_1)

{
  short sVar1;
  short *psVar2;
  
  psVar2 = param_1;
  do {
    sVar1 = *psVar2;
    psVar2 = psVar2 + 1;
  } while (sVar1 != 0);
  return ((longlong)psVar2 - (longlong)param_1 >> 1) + -1;
}


==================================================================

### EXPORT FUNC 180035600 (438 bytes) name=FUN_180035600

undefined8
FUN_180035600(PEXCEPTION_RECORD param_1,PVOID param_2,undefined8 param_3,longlong *param_4)

{
  uint uVar1;
  longlong lVar2;
  uint *puVar3;
  int iVar4;
  BOOL BVar5;
  ulonglong uVar6;
  uint *puVar7;
  ulonglong uVar8;
  ulonglong uVar9;
  uint uVar10;
  PEXCEPTION_RECORD local_38;
  undefined8 local_30;
  
  lVar2 = param_4[1];
  puVar3 = (uint *)param_4[7];
  uVar8 = *param_4 - lVar2;
  uVar10 = 0;
  if ((param_1->ExceptionFlags & 0x66) == 0) {
    if (*puVar3 != 0) {
      puVar7 = puVar3 + 3;
      local_38 = param_1;
      local_30 = param_3;
      do {
        if (((puVar7[-2] <= uVar8) && (uVar8 < puVar7[-1])) && (puVar7[1] != 0)) {
          if (*puVar7 != 1) {
            iVar4 = (*(code *)((ulonglong)*puVar7 + lVar2))(&local_38,param_2);
            if (iVar4 < 0) {
              return 0;
            }
            if (iVar4 < 1) goto LAB_180035713;
          }
          if (((param_1->ExceptionCode == 0xe06d7363) &&
              (PTR___DestructExceptionObject_180057bf0 != (undefined *)0x0)) &&
             (BVar5 = _IsNonwritableInCurrentImage((PBYTE)&PTR___DestructExceptionObject_180057bf0),
             BVar5 != 0)) {
            (*(code *)PTR___DestructExceptionObject_180057bf0)(param_1,1);
          }
          FUN_180043d50();
          RtlUnwindEx(param_2,(PVOID)((ulonglong)puVar7[1] + lVar2),param_1,
                      (PVOID)(longlong)(int)param_1->ExceptionCode,(PCONTEXT)param_4[5],
                      (PUNWIND_HISTORY_TABLE)param_4[8]);
          FUN_180043d80();
        }
LAB_180035713:
        uVar10 = uVar10 + 1;
        puVar7 = puVar7 + 4;
      } while (uVar10 < *puVar3);
    }
  }
  else {
    uVar9 = param_4[4] - lVar2;
    puVar7 = puVar3;
    if (*puVar3 != 0) {
      do {
        if ((puVar7[1] <= uVar8) && (uVar6 = (ulonglong)puVar7[2], uVar8 < uVar6)) {
          if ((puVar7[1] <= uVar9) && ((uVar9 <= uVar6 && ((param_1->ExceptionFlags & 0x20) != 0))))
          {
            return 1;
          }
          uVar1 = puVar7[4];
          if (uVar1 == 0) {
            *param_4 = uVar6 + lVar2;
            (*(code *)((ulonglong)puVar7[3] + lVar2))(1,param_2);
          }
          else if (uVar9 == uVar1) {
            return 1;
          }
        }
        uVar10 = uVar10 + 1;
        puVar7 = puVar7 + 4;
      } while (uVar10 < *puVar3);
    }
  }
  return 1;
}


==================================================================

### EXPORT FUNC 1800357d0 (217 bytes) name=FUN_1800357d0

void FUN_1800357d0(ulonglong *param_1,ulonglong param_2,ulonglong param_3)

{
  uint uVar1;
  ulonglong *puVar2;
  ulonglong uVar3;
  ulonglong uVar4;
  
  uVar3 = param_3;
  if (7 < param_3) {
    param_2 = (param_2 & 0xff) * 0x101010101010101;
    if (0x3f < param_3) {
      uVar1 = -(int)param_1 & 7;
      if (uVar1 != 0) {
        uVar3 = param_3 - uVar1;
        *param_1 = param_2;
      }
      param_1 = (ulonglong *)((ulonglong)uVar1 + (longlong)param_1);
      param_3 = uVar3 & 0x3f;
      uVar3 = uVar3 >> 6;
      if (uVar3 != 0) {
        puVar2 = param_1;
        if (uVar3 < 0x1c00) {
          do {
            *puVar2 = param_2;
            puVar2[1] = param_2;
            puVar2[2] = param_2;
            param_1 = puVar2 + 8;
            puVar2[3] = param_2;
            puVar2[4] = param_2;
            uVar3 = uVar3 - 1;
            puVar2[5] = param_2;
            puVar2[6] = param_2;
            puVar2[7] = param_2;
            puVar2 = param_1;
          } while (uVar3 != 0);
        }
        else {
          do {
            *puVar2 = param_2;
            puVar2[1] = param_2;
            puVar2[2] = param_2;
            param_1 = puVar2 + 8;
            puVar2[3] = param_2;
            puVar2[4] = param_2;
            uVar3 = uVar3 - 1;
            puVar2[5] = param_2;
            puVar2[6] = param_2;
            puVar2[7] = param_2;
            puVar2 = param_1;
          } while (uVar3 != 0);
          LOCK();
          UNLOCK();
        }
      }
    }
    uVar3 = param_3 & 7;
    for (uVar4 = param_3 >> 3; uVar4 != 0; uVar4 = uVar4 - 1) {
      *param_1 = param_2;
      param_1 = param_1 + 1;
    }
  }
  for (; uVar3 != 0; uVar3 = uVar3 - 1) {
    *(char *)param_1 = (char)param_2;
    param_1 = (ulonglong *)((longlong)param_1 + 1);
  }
  return;
}


==================================================================

### EXPORT FUNC 1800358c0 (133 bytes) name=FUN_1800358c0

undefined8
FUN_1800358c0(int *param_1,__uint64 param_2,ULONG_PTR param_3,_xDISPATCHER_CONTEXT *param_4)

{
  longlong lVar1;
  undefined8 uVar2;
  uint uVar3;
  
  lVar1 = *(longlong *)(param_4 + 0x38);
  __GSHandlerCheckCommon(param_2,(longlong)param_4);
  if ((*(byte *)(param_1 + 1) & 0x66) == 0) {
    uVar3 = *(uint *)(lVar1 + 4) & 1;
  }
  else {
    uVar3 = *(uint *)(lVar1 + 4) & 2;
  }
  if (uVar3 == 0) {
    uVar2 = 1;
  }
  else {
    uVar2 = FID_conflict___CxxFrameHandler(param_1,param_2,param_3,param_4);
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 180035950 (240 bytes) name=FUN_180035950

LPVOID FUN_180035950(LPVOID param_1,ulonglong param_2)

{
  int iVar1;
  DWORD DVar2;
  LPVOID pvVar3;
  DWORD *pDVar4;
  
  if (param_1 == (LPVOID)0x0) {
    pvVar3 = FUN_1800349a0(param_2);
    return pvVar3;
  }
  if (param_2 == 0) {
    FUN_180034a70(param_1);
    return (LPVOID)0x0;
  }
  do {
    if (0xffffffffffffffe0 < param_2) {
      _callnewh(param_2);
      pDVar4 = FUN_180035b40();
      *pDVar4 = 0xc;
      return (LPVOID)0x0;
    }
    if (param_2 == 0) {
      param_2 = 1;
    }
    pvVar3 = HeapReAlloc(DAT_180072ed8,0,param_1,param_2);
    if (pvVar3 != (LPVOID)0x0) {
      return pvVar3;
    }
    if (DAT_180073310 == 0) {
      pDVar4 = FUN_180035b40();
      DVar2 = GetLastError();
      DVar2 = FUN_180035af0(DVar2);
      *pDVar4 = DVar2;
      return (LPVOID)0x0;
    }
    iVar1 = _callnewh(param_2);
  } while (iVar1 != 0);
  pDVar4 = FUN_180035b40();
  DVar2 = GetLastError();
  DVar2 = FUN_180035af0(DVar2);
  *pDVar4 = DVar2;
  return (LPVOID)0x0;
}


==================================================================

### EXPORT FUNC 180035a40 (171 bytes) name=FUN_180035a40

LPVOID FUN_180035a40(LPCVOID param_1,ulonglong param_2,ulonglong param_3)

{
  undefined1 auVar1 [16];
  DWORD *pDVar2;
  SIZE_T SVar3;
  LPVOID pvVar4;
  ulonglong uVar5;
  
  SVar3 = 0;
  if ((param_2 != 0) &&
     (auVar1._8_8_ = 0, auVar1._0_8_ = param_2,
     SUB168((ZEXT816(0) << 0x40 | ZEXT816(0xffffffffffffffe0)) / auVar1,0) < param_3)) {
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0xc;
    FUN_1800384e0(0,0,0,0,0);
    return (LPVOID)0x0;
  }
  uVar5 = param_2 * param_3;
  if (param_1 != (LPCVOID)0x0) {
    SVar3 = FUN_180035e80(param_1);
  }
  pvVar4 = FUN_180035950(param_1,uVar5);
  if ((pvVar4 != (LPVOID)0x0) && (SVar3 < uVar5)) {
    FUN_1800357d0((ulonglong *)(SVar3 + (longlong)pvVar4),0,uVar5 - SVar3);
  }
  return pvVar4;
}


==================================================================

### EXPORT FUNC 180035af0 (78 bytes) name=FUN_180035af0

undefined4 FUN_180035af0(int param_1)

{
  undefined4 uVar1;
  int *piVar2;
  uint uVar3;
  
  uVar3 = 0;
  piVar2 = &DAT_18006ceb0;
  do {
    if (param_1 == *piVar2) {
      return *(undefined4 *)(&DAT_18006ceb4 + (longlong)(int)uVar3 * 8);
    }
    uVar3 = uVar3 + 1;
    piVar2 = piVar2 + 2;
  } while (uVar3 < 0x2d);
  if (param_1 - 0x13U < 0x12) {
    return 0xd;
  }
  uVar1 = 0x16;
  if (param_1 - 0xbcU < 0xf) {
    uVar1 = 8;
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180035b40 (35 bytes) name=FUN_180035b40

DWORD * FUN_180035b40(void)

{
  DWORD *pDVar1;
  
  pDVar1 = FUN_180038010();
  if (pDVar1 == (DWORD *)0x0) {
    return (DWORD *)&DAT_18006d018;
  }
  return pDVar1 + 4;
}


==================================================================

### EXPORT FUNC 180035b70 (35 bytes) name=FUN_180035b70

DWORD * FUN_180035b70(void)

{
  DWORD *pDVar1;
  
  pDVar1 = FUN_180038010();
  if (pDVar1 == (DWORD *)0x0) {
    return &DAT_18006d01c;
  }
  return pDVar1 + 5;
}


==================================================================

### EXPORT FUNC 180035ba0 (141 bytes) name=_dosmaperr

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Single Match
    _dosmaperr
   
   Library: Visual Studio 2005 Release */

void __cdecl _dosmaperr(ulong param_1)

{
  DWORD *pDVar1;
  ulong *puVar2;
  uint uVar3;
  DWORD DVar4;
  
  pDVar1 = FUN_180038010();
  if (pDVar1 == (DWORD *)0x0) {
    pDVar1 = &DAT_18006d01c;
  }
  else {
    pDVar1 = pDVar1 + 5;
  }
  *pDVar1 = param_1;
  uVar3 = 0;
  puVar2 = &DAT_18006ceb0;
  do {
    if (param_1 == *puVar2) {
      DVar4 = *(DWORD *)(&DAT_18006ceb4 + (longlong)(int)uVar3 * 8);
      goto LAB_180035c0e;
    }
    uVar3 = uVar3 + 1;
    puVar2 = puVar2 + 2;
  } while (uVar3 < 0x2d);
  if (param_1 - 0x13 < 0x12) {
    DVar4 = 0xd;
  }
  else {
    DVar4 = 0x16;
    if (param_1 - 0xbc < 0xf) {
      DVar4 = 8;
    }
  }
LAB_180035c0e:
  pDVar1 = FUN_180038010();
  if (pDVar1 != (DWORD *)0x0) {
    pDVar1[4] = DVar4;
    return;
  }
  _DAT_18006d018 = DVar4;
  return;
}


==================================================================

### EXPORT FUNC 180035c30 (66 bytes) name=_endthreadex

/* Library Function - Single Match
    _endthreadex
   
   Library: Visual Studio 2005 Release */

void __cdecl _endthreadex(uint _Retval)

{
  BOOL BVar1;
  _ptiddata _Ptd;
  
  if (PTR_FUN_180057278 != (undefined *)0x0) {
    BVar1 = _IsNonwritableInCurrentImage((PBYTE)&PTR_FUN_180057278);
    if (BVar1 != 0) {
      (*(code *)PTR_FUN_180057278)();
    }
  }
  _Ptd = (_ptiddata)FUN_180038010();
  if (_Ptd != (_ptiddata)0x0) {
    _freeptd(_Ptd);
  }
                    /* WARNING: Subroutine does not return */
  ExitThread(_Retval);
}


==================================================================

### EXPORT FUNC 180035c80 (44 bytes) name=_callthreadstartex

/* Library Function - Single Match
    _callthreadstartex
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void _callthreadstartex(void)

{
  uint _Retval;
  uint extraout_EAX;
  DWORD *pDVar1;
  
  pDVar1 = FUN_1800380a0();
  _Retval = (**(code **)(pDVar1 + 0x24))(*(undefined8 *)(pDVar1 + 0x26));
  _endthreadex(_Retval);
  FUN_180036a20(extraout_EAX);
  return;
}


==================================================================

### EXPORT FUNC 180035cb0 (28 bytes) name=FUN_180035cb0

void FUN_180035cb0(undefined8 *param_1)

{
  FUN_180041b50(*(int *)*param_1,param_1);
  return;
}


==================================================================

### EXPORT FUNC 180035cd0 (159 bytes) name=FUN_180035cd0

void FUN_180035cd0(DWORD *param_1)

{
  code *pcVar1;
  DWORD DVar2;
  BOOL BVar3;
  PVOID pvVar4;
  
  FUN_180037e10();
  DVar2 = FUN_180037e00();
  pvVar4 = FlsGetValue(DVar2);
  if (pvVar4 == (PVOID)0x0) {
    DVar2 = FUN_180037e00();
    BVar3 = FlsSetValue(DVar2,param_1);
    if (BVar3 == 0) {
      DVar2 = GetLastError();
                    /* WARNING: Subroutine does not return */
      ExitThread(DVar2);
    }
    DVar2 = GetCurrentThreadId();
    *param_1 = DVar2;
  }
  else {
    *(undefined8 *)((longlong)pvVar4 + 0x90) = *(undefined8 *)(param_1 + 0x24);
    *(undefined8 *)((longlong)pvVar4 + 0x98) = *(undefined8 *)(param_1 + 0x26);
    *(undefined8 *)((longlong)pvVar4 + 8) = *(undefined8 *)(param_1 + 2);
    FUN_180038140(param_1);
  }
  if (PTR_FUN_180057270 != (undefined *)0x0) {
    BVar3 = _IsNonwritableInCurrentImage((PBYTE)&PTR_FUN_180057270);
    if (BVar3 != 0) {
      (*(code *)PTR_FUN_180057270)();
    }
  }
  _callthreadstartex();
  pcVar1 = (code *)swi(3);
  (*pcVar1)();
  return;
}


==================================================================

### EXPORT FUNC 180035d70 (262 bytes) name=FUN_180035d70

HANDLE FUN_180035d70(LPSECURITY_ATTRIBUTES param_1,ulonglong param_2,longlong param_3,
                    undefined8 param_4,DWORD param_5,LPDWORD param_6)

{
  DWORD DVar1;
  DWORD *pDVar2;
  LPVOID lpParameter;
  HANDLE pvVar3;
  DWORD local_res18 [2];
  
  DVar1 = 0;
  if (param_3 == 0) {
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
  }
  else {
    FUN_180037e10();
    lpParameter = FUN_180040e50(1,0x2d8);
    if (lpParameter != (LPVOID)0x0) {
      pDVar2 = FUN_1800380a0();
      FUN_180037e80((longlong)lpParameter,*(longlong *)(pDVar2 + 0x30));
      pDVar2 = local_res18;
      if (param_6 != (LPDWORD)0x0) {
        pDVar2 = param_6;
      }
      *(longlong *)((longlong)lpParameter + 0x90) = param_3;
      *(undefined8 *)((longlong)lpParameter + 0x98) = param_4;
      *(undefined8 *)((longlong)lpParameter + 8) = 0xffffffffffffffff;
      pvVar3 = CreateThread(param_1,param_2 & 0xffffffff,FUN_180035cd0,lpParameter,param_5,pDVar2);
      if (pvVar3 != (HANDLE)0x0) {
        return pvVar3;
      }
      DVar1 = GetLastError();
    }
    FUN_180034a70(lpParameter);
    if (DVar1 != 0) {
      _dosmaperr(DVar1);
    }
  }
  return (HANDLE)0x0;
}


==================================================================

### EXPORT FUNC 180035e80 (76 bytes) name=FUN_180035e80

SIZE_T FUN_180035e80(LPCVOID param_1)

{
  DWORD *pDVar1;
  SIZE_T SVar2;
  
  if (param_1 == (LPCVOID)0x0) {
    pDVar1 = FUN_180035b40();
    *pDVar1 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffffffffffff;
  }
                    /* WARNING: Could not recover jumptable at 0x000180035ec5. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  SVar2 = HeapSize(DAT_180072ed8,0,param_1);
  return SVar2;
}


==================================================================

### EXPORT FUNC 180035ed0 (77 bytes) name=wcsspn

/* Library Function - Single Match
    wcsspn
   
   Library: Visual Studio 2005 Release */

size_t __cdecl wcsspn(wchar_t *_Str,wchar_t *_Control)

{
  wchar_t wVar1;
  wchar_t *pwVar2;
  wchar_t *pwVar3;
  wchar_t wVar4;
  
  wVar4 = *_Str;
  pwVar3 = _Str;
  if (wVar4 != L'\0') {
    wVar1 = *_Control;
    pwVar2 = _Control;
    do {
      while (wVar1 != wVar4) {
        if (wVar1 == L'\0') goto LAB_180035f13;
        wVar1 = pwVar2[1];
        pwVar2 = pwVar2 + 1;
      }
      wVar4 = pwVar3[1];
      pwVar3 = pwVar3 + 1;
      wVar1 = *_Control;
      pwVar2 = _Control;
    } while (wVar4 != L'\0');
  }
LAB_180035f13:
  return (longlong)pwVar3 - (longlong)_Str >> 1;
}


==================================================================

### EXPORT FUNC 180035f20 (71 bytes) name=wcscspn

/* Library Function - Single Match
    wcscspn
   
   Library: Visual Studio 2005 Release */

size_t __cdecl wcscspn(wchar_t *_Str,wchar_t *_Control)

{
  wchar_t *pwVar1;
  wchar_t wVar2;
  wchar_t *pwVar3;
  
  pwVar1 = _Str;
  if (*_Str != L'\0') {
    do {
      if (*_Control != L'\0') {
        pwVar3 = _Control;
        wVar2 = *_Control;
        do {
          if (wVar2 == *pwVar1) goto LAB_180035f60;
          wVar2 = pwVar3[1];
          pwVar3 = pwVar3 + 1;
        } while (wVar2 != L'\0');
      }
      pwVar1 = pwVar1 + 1;
    } while (*pwVar1 != L'\0');
  }
LAB_180035f60:
  return (longlong)pwVar1 - (longlong)_Str >> 1;
}


==================================================================

### EXPORT FUNC 180035f70 (186 bytes) name=wcscat_s

/* Library Function - Single Match
    wcscat_s
   
   Library: Visual Studio 2005 Release */

errno_t __cdecl wcscat_s(wchar_t *_Dst,rsize_t _SizeInWords,wchar_t *_Src)

{
  wchar_t wVar1;
  DWORD *pDVar2;
  wchar_t *pwVar3;
  
  if ((_Dst != (wchar_t *)0x0) && (_SizeInWords != 0)) {
    pwVar3 = _Dst;
    if (_Src == (wchar_t *)0x0) {
      *_Dst = L'\0';
    }
    else {
      do {
        if (*pwVar3 == L'\0') break;
        pwVar3 = pwVar3 + 1;
        _SizeInWords = _SizeInWords - 1;
      } while (_SizeInWords != 0);
      if (_SizeInWords != 0) {
        do {
          wVar1 = *_Src;
          _Src = _Src + 1;
          *pwVar3 = wVar1;
          if (wVar1 == L'\0') break;
          _SizeInWords = _SizeInWords - 1;
          pwVar3 = pwVar3 + 1;
        } while (_SizeInWords != 0);
        if (_SizeInWords == 0) {
          *_Dst = L'\0';
          pDVar2 = FUN_180035b40();
          *pDVar2 = 0x22;
          FUN_1800384e0(0,0,0,0,0);
          return 0x22;
        }
        return 0;
      }
      *_Dst = L'\0';
    }
  }
  pDVar2 = FUN_180035b40();
  *pDVar2 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0x16;
}


==================================================================

### EXPORT FUNC 180036040 (147 bytes) name=FUN_180036040

wchar_t * FUN_180036040(wchar_t *param_1)

{
  wchar_t wVar1;
  errno_t eVar2;
  wchar_t *pwVar3;
  ulonglong uVar4;
  
  if (param_1 == (wchar_t *)0x0) {
    return (wchar_t *)0x0;
  }
  uVar4 = 0xffffffffffffffff;
  pwVar3 = param_1;
  do {
    if (uVar4 == 0) break;
    uVar4 = uVar4 - 1;
    wVar1 = *pwVar3;
    pwVar3 = pwVar3 + 1;
  } while (wVar1 != L'\0');
  pwVar3 = FUN_180043f50(~uVar4,2);
  if (pwVar3 == (wchar_t *)0x0) {
    return (wchar_t *)0x0;
  }
  eVar2 = wcscpy_s(pwVar3,~uVar4,param_1);
  if (eVar2 != 0) {
                    /* WARNING: Subroutine does not return */
    FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
  }
  return pwVar3;
}


==================================================================

### EXPORT FUNC 1800360e0 (63 bytes) name=FUN_1800360e0

int FUN_1800360e0(ushort *param_1,ushort *param_2)

{
  ushort *puVar1;
  ushort uVar2;
  int iVar3;
  
  uVar2 = *param_2;
  iVar3 = (uint)*param_1 - (uint)uVar2;
  while ((iVar3 == 0 && (uVar2 != 0))) {
    uVar2 = param_2[1];
    puVar1 = param_1 + 1;
    param_1 = param_1 + 1;
    param_2 = param_2 + 1;
    iVar3 = (uint)*puVar1 - (uint)uVar2;
  }
  if (-1 < iVar3) {
    if (0 < iVar3) {
      iVar3 = 1;
    }
    return iVar3;
  }
  return -1;
}


==================================================================

### EXPORT FUNC 180036130 (198 bytes) name=memcmp

/* Library Function - Single Match
    memcmp
   
   Library: Visual Studio */

int __cdecl memcmp(void *_Buf1,void *_Buf2,size_t _Size)

{
  uint uVar1;
  ulonglong uVar2;
  longlong lVar3;
  ulonglong uVar4;
  bool bVar5;
  
  lVar3 = (longlong)_Buf2 - (longlong)_Buf1;
  if (7 < _Size) {
    for (; ((ulonglong)_Buf1 & 7) != 0; _Buf1 = (void *)((longlong)_Buf1 + 1)) {
      bVar5 = (byte)*(ulonglong *)_Buf1 < *(byte *)(lVar3 + (longlong)_Buf1);
      if ((byte)*(ulonglong *)_Buf1 != *(byte *)(lVar3 + (longlong)_Buf1)) goto LAB_180036173;
      _Size = _Size - 1;
    }
    if (_Size >> 3 != 0) {
      uVar4 = _Size >> 5;
      if (uVar4 != 0) {
        do {
          uVar2 = *(ulonglong *)_Buf1;
          if (uVar2 != *(ulonglong *)(lVar3 + (longlong)_Buf1)) goto LAB_1800361e4;
          uVar2 = *(ulonglong *)((longlong)_Buf1 + 8);
          if (uVar2 != *(ulonglong *)(lVar3 + 8 + (longlong)_Buf1)) {
LAB_1800361e0:
            _Buf1 = (void *)((longlong)_Buf1 + 8);
            goto LAB_1800361e4;
          }
          uVar2 = *(ulonglong *)((longlong)_Buf1 + 0x10);
          if (uVar2 != *(ulonglong *)(lVar3 + 0x10 + (longlong)_Buf1)) {
LAB_1800361dc:
            _Buf1 = (void *)((longlong)_Buf1 + 8);
            goto LAB_1800361e0;
          }
          uVar2 = *(ulonglong *)((longlong)_Buf1 + 0x18);
          if (uVar2 != *(ulonglong *)(lVar3 + 0x18 + (longlong)_Buf1)) {
            _Buf1 = (void *)((longlong)_Buf1 + 8);
            goto LAB_1800361dc;
          }
          _Buf1 = (void *)((longlong)_Buf1 + 0x20);
          uVar4 = uVar4 - 1;
        } while (uVar4 != 0);
        _Size = _Size & 0x1f;
      }
      uVar4 = _Size >> 3;
      if (uVar4 != 0) {
        do {
          uVar2 = *(ulonglong *)_Buf1;
          if (uVar2 != *(ulonglong *)(lVar3 + (longlong)_Buf1)) {
LAB_1800361e4:
            uVar4 = *(ulonglong *)((longlong)_Buf1 + lVar3);
            uVar1 = (uint)((uVar2 >> 0x38 | (uVar2 & 0xff000000000000) >> 0x28 |
                            (uVar2 & 0xff0000000000) >> 0x18 | (uVar2 & 0xff00000000) >> 8 |
                            (uVar2 & 0xff000000) << 8 | (uVar2 & 0xff0000) << 0x18 |
                            (uVar2 & 0xff00) << 0x28 | uVar2 << 0x38) <
                          (uVar4 >> 0x38 | (uVar4 & 0xff000000000000) >> 0x28 |
                           (uVar4 & 0xff0000000000) >> 0x18 | (uVar4 & 0xff00000000) >> 8 |
                           (uVar4 & 0xff000000) << 8 | (uVar4 & 0xff0000) << 0x18 |
                           (uVar4 & 0xff00) << 0x28 | uVar4 << 0x38));
            return (1 - uVar1) - (uint)(uVar1 != 0);
          }
          _Buf1 = (void *)((longlong)_Buf1 + 8);
          uVar4 = uVar4 - 1;
        } while (uVar4 != 0);
        _Size = _Size & 7;
      }
    }
  }
  while( true ) {
    if (_Size == 0) {
      return 0;
    }
    bVar5 = (byte)*(ulonglong *)_Buf1 < *(byte *)(lVar3 + (longlong)_Buf1);
    if ((byte)*(ulonglong *)_Buf1 != *(byte *)(lVar3 + (longlong)_Buf1)) break;
    _Buf1 = (void *)((longlong)_Buf1 + 1);
    _Size = _Size - 1;
  }
LAB_180036173:
  return (1 - (uint)bVar5) - (uint)(bVar5 != 0);
}


==================================================================

### EXPORT FUNC 180036200 (134 bytes) name=FUN_180036200

void FUN_180036200(void)

{
  PTR_LAB_18006dc48 = &LAB_1800443c0;
  PTR_LAB_18006dc40 = _cfltcvt;
  PTR_LAB_18006dc50 = _fassign;
  PTR_LAB_18006dc68 = _cfltcvt;
  PTR_LAB_18006dc58 = &LAB_1800443b0;
  PTR_LAB_18006dc60 = &LAB_1800442f0;
  PTR_LAB_18006dc70 = _cfltcvt_l;
  PTR_LAB_18006dc78 = _fassign_l;
  PTR_LAB_18006dc80 = FUN_180044180;
  DAT_18006dc88 = FUN_180044040;
  return;
}


==================================================================

### EXPORT FUNC 180036290 (780 bytes) name=FUN_180036290

longlong FUN_180036290(int *param_1,int param_2)

{
  int iVar1;
  DWORD *pDVar2;
  undefined8 uVar3;
  int iVar4;
  uint uVar5;
  longlong lVar6;
  longlong lVar7;
  longlong lVar8;
  longlong lVar9;
  int local_res8 [2];
  int local_res18 [2];
  longlong local_res20;
  int local_48;
  int local_44;
  int local_40;
  int local_3c;
  int local_38;
  int local_34;
  int local_30;
  int local_2c;
  int local_28;
  
  local_res18[0] = 0;
  local_res8[0] = 0;
  if (param_1 == (int *)0x0) {
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return -1;
  }
  local_res20 = (longlong)param_1[5];
  if (local_res20 - 0x45U < 0x409) {
    iVar1 = param_1[4];
    if ((iVar1 < 0) || (0xb < iVar1)) {
      iVar4 = iVar1 % 0xc;
      local_res20 = local_res20 + iVar1 / 0xc;
      param_1[4] = iVar4;
      if (iVar4 < 0) {
        local_res20 = local_res20 + -1;
        param_1[4] = iVar4 + 0xc;
      }
      if (0x408 < local_res20 - 0x45U) goto LAB_180036526;
    }
    lVar9 = (longlong)*(int *)(&DAT_18006dcc8 + (longlong)param_1[4] * 4);
    uVar5 = (uint)(local_res20 >> 0x3f) & 3;
    if ((((((int)local_res20 + uVar5 & 3) == uVar5) &&
         (lVar6 = SUB168(SEXT816(-0x5c28f5c28f5c28f5) * SEXT816(local_res20),8) + local_res20,
         local_res20 != ((lVar6 >> 6) - (lVar6 >> 0x3f)) * 100)) ||
        (lVar6 = local_res20 + 0x76c,
        lVar7 = SUB168(SEXT816(-0x5c28f5c28f5c28f5) * SEXT816(lVar6),8) + lVar6,
        lVar6 == ((lVar7 >> 8) - (lVar7 >> 0x3f)) * 400)) && (1 < param_1[4])) {
      lVar9 = lVar9 + 1;
    }
    lVar6 = local_res20 + -1;
    lVar7 = local_res20 + 299 + SUB168(SEXT816(-0x5c28f5c28f5c28f5) * SEXT816(local_res20 + 299),8);
    lVar8 = SUB168(SEXT816(-0x5c28f5c28f5c28f5) * SEXT816(lVar6),8) + lVar6;
    local_res20 = (longlong)*param_1 +
                  ((longlong)param_1[1] +
                  ((longlong)param_1[2] +
                  (local_res20 * 0x16d + -0x63df +
                  ((longlong)(lVar6 + (ulonglong)((uint)(lVar6 >> 0x3f) & 3)) >> 2) + lVar9 +
                  ((((lVar7 >> 8) - (lVar7 >> 0x3f)) + (longlong)param_1[3]) -
                  ((lVar8 >> 6) - (lVar8 >> 0x3f)))) * 0x18) * 0x3c) * 0x3c;
    if (param_2 == 0) {
      uVar3 = FUN_18003f350(&local_48,&local_res20);
      if ((int)uVar3 == 0) goto LAB_180036553;
    }
    else {
      __tzset();
      uVar3 = FUN_18003f6d0(local_res18);
      if ((int)uVar3 != 0) {
                    /* WARNING: Subroutine does not return */
        FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
      }
      uVar3 = FUN_18003f720(local_res8);
      if ((int)uVar3 != 0) {
                    /* WARNING: Subroutine does not return */
        FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
      }
      local_res20 = local_res20 + local_res8[0];
      uVar3 = FUN_180033b30(&local_48,&local_res20);
      if ((int)uVar3 == 0) {
        if ((0 < param_1[8]) || ((param_1[8] < 0 && (0 < local_28)))) {
          local_res20 = local_res20 + local_res18[0];
          uVar3 = FUN_180033b30(&local_48,&local_res20);
          if ((int)uVar3 != 0) goto LAB_180036526;
        }
LAB_180036553:
        *param_1 = local_48;
        param_1[1] = local_44;
        param_1[2] = local_40;
        param_1[3] = local_3c;
        param_1[4] = local_38;
        param_1[5] = local_34;
        param_1[6] = local_30;
        param_1[7] = local_2c;
        param_1[8] = local_28;
        return local_res20;
      }
    }
  }
LAB_180036526:
  pDVar2 = FUN_180035b40();
  *pDVar2 = 0x16;
  return -1;
}


==================================================================

### EXPORT FUNC 1800365a0 (10 bytes) name=FUN_1800365a0

void FUN_1800365a0(int *param_1)

{
  FUN_180036290(param_1,1);
  return;
}


==================================================================

### EXPORT FUNC 1800365b0 (233 bytes) name=FUN_1800365b0

LPVOID FUN_1800365b0(LPCVOID param_1,ulonglong param_2)

{
  DWORD DVar1;
  DWORD *pDVar2;
  SIZE_T SVar3;
  LPVOID pvVar4;
  LPVOID pvVar5;
  
  if (param_1 == (LPCVOID)0x0) {
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return (LPVOID)0x0;
  }
  if (param_2 < 0xffffffffffffffe1) {
    if (param_2 == 0) {
      param_2 = 1;
    }
    SVar3 = HeapSize(DAT_180072ed8,0,param_1);
    pvVar4 = HeapReAlloc(DAT_180072ed8,0x10,param_1,param_2);
    pvVar5 = pvVar4;
    if ((pvVar4 == (LPVOID)0x0) &&
       ((SVar3 == 0xffffffffffffffff || (pvVar5 = param_1, SVar3 < param_2)))) {
      pDVar2 = FUN_180035b40();
      DVar1 = GetLastError();
      DVar1 = FUN_180035af0(DVar1);
      *pDVar2 = DVar1;
      pvVar5 = pvVar4;
    }
    return pvVar5;
  }
  pDVar2 = FUN_180035b40();
  *pDVar2 = 0xc;
  return (LPVOID)0x0;
}


==================================================================

### EXPORT FUNC 1800366a0 (45 bytes) name=_amsg_exit

/* Library Function - Single Match
    _amsg_exit
   
   Library: Visual Studio 2008 Release */

void __cdecl _amsg_exit(int param_1)

{
  code *UNRECOVERED_JUMPTABLE;
  
  FUN_180042070();
  FUN_180041e30(param_1);
  UNRECOVERED_JUMPTABLE = (code *)FUN_180037d20((INT_PTR)PTR_FUN_18006d028);
                    /* WARNING: Could not recover jumptable at 0x0001800366ca. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (*UNRECOVERED_JUMPTABLE)(0xff);
  return;
}


==================================================================

### EXPORT FUNC 1800366d0 (59 bytes) name=FUN_1800366d0

void FUN_1800366d0(uint param_1)

{
  HMODULE hModule;
  FARPROC pFVar1;
  
  hModule = GetModuleHandleA("mscoree.dll");
  if (hModule != (HMODULE)0x0) {
    pFVar1 = GetProcAddress(hModule,"CorExitProcess");
    if (pFVar1 != (FARPROC)0x0) {
      (*pFVar1)((ulonglong)param_1);
    }
  }
                    /* WARNING: Subroutine does not return */
  ExitProcess(param_1);
}


==================================================================

### EXPORT FUNC 180036710 (10 bytes) name=FUN_180036710

void FUN_180036710(void)

{
  _lock(8);
  return;
}


==================================================================

### EXPORT FUNC 180036720 (10 bytes) name=FUN_180036720

void FUN_180036720(void)

{
  FUN_180045470(8);
  return;
}


==================================================================

### EXPORT FUNC 180036730 (53 bytes) name=FUN_180036730

void FUN_180036730(undefined8 *param_1,undefined8 *param_2)

{
  for (; param_1 < param_2; param_1 = param_1 + 1) {
    if ((code *)*param_1 != (code *)0x0) {
      (*(code *)*param_1)();
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180036770 (73 bytes) name=_get_osplatform

/* Library Function - Single Match
    _get_osplatform
   
   Library: Visual Studio 2005 Release */

undefined8 _get_osplatform(int *param_1)

{
  DWORD *pDVar1;
  
  if ((param_1 != (int *)0x0) && (DAT_1800727dc != 0)) {
    *param_1 = DAT_1800727dc;
    return 0;
  }
  pDVar1 = FUN_180035b40();
  *pDVar1 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0x16;
}


==================================================================

### EXPORT FUNC 1800367c0 (78 bytes) name=FUN_1800367c0

undefined8 FUN_1800367c0(undefined4 *param_1)

{
  DWORD *pDVar1;
  
  if ((param_1 != (undefined4 *)0x0) && (DAT_1800727dc != 0)) {
    *param_1 = DAT_1800727e8;
    return 0;
  }
  pDVar1 = FUN_180035b40();
  *pDVar1 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0x16;
}


==================================================================

### EXPORT FUNC 180036810 (203 bytes) name=FUN_180036810

undefined8 FUN_180036810(void)

{
  BOOL BVar1;
  undefined8 uVar2;
  undefined4 in_ECX;
  undefined8 *puVar3;
  
  if ((PTR_FUN_180057268 != (undefined *)0x0) &&
     (BVar1 = _IsNonwritableInCurrentImage((PBYTE)&PTR_FUN_180057268), BVar1 != 0)) {
    (*(code *)PTR_FUN_180057268)(in_ECX);
  }
  FUN_1800452f0();
  puVar3 = &DAT_180053a78;
  uVar2 = 0;
  do {
    if ((int)uVar2 != 0) {
      return uVar2;
    }
    if ((code *)*puVar3 != (code *)0x0) {
      uVar2 = (*(code *)*puVar3)();
    }
    puVar3 = puVar3 + 1;
  } while (puVar3 < &DAT_180053a98);
  if ((int)uVar2 == 0) {
    FUN_180034980(0x180041b10);
    puVar3 = &DAT_1800539d8;
    do {
      if ((code *)*puVar3 != (code *)0x0) {
        (*(code *)*puVar3)();
      }
      puVar3 = puVar3 + 1;
    } while (puVar3 < &DAT_180053a70);
    if ((DAT_1800db700 != (code *)0x0) &&
       (BVar1 = _IsNonwritableInCurrentImage((PBYTE)&DAT_1800db700), BVar1 != 0)) {
      (*DAT_1800db700)(0,2);
    }
    uVar2 = 0;
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 1800368e0 (281 bytes) name=FUN_1800368e0

void FUN_1800368e0(uint param_1,int param_2,int param_3)

{
  longlong lVar1;
  longlong *plVar2;
  longlong *plVar3;
  INT_PTR IVar4;
  code *pcVar5;
  
  _lock(8);
  if (DAT_18007283c != 1) {
    DAT_180072838 = 1;
    DAT_1800727f4 = (undefined1)param_3;
    if (param_2 == 0) {
      plVar2 = (longlong *)FUN_180037d20(DAT_1800db6f0);
      plVar3 = (longlong *)FUN_180037d20(DAT_1800db6e8);
      if (plVar2 != (longlong *)0x0) {
        while (plVar3 = plVar3 + -1, plVar2 <= plVar3) {
          if (*plVar3 != 0) {
            lVar1 = *plVar3;
            IVar4 = FUN_180037c30();
            if (lVar1 != IVar4) {
              pcVar5 = (code *)FUN_180037d20(lVar1);
              (*pcVar5)();
            }
          }
        }
      }
      FUN_180036730((undefined8 *)&DAT_180053aa0,(undefined8 *)&DAT_180053ab8);
    }
    FUN_180036730((undefined8 *)&DAT_180053ac0,(undefined8 *)&DAT_180053ac8);
  }
  if (param_3 != 0) {
    FUN_180045470(8);
    return;
  }
  DAT_18007283c = 1;
  FUN_180045470(8);
  FUN_1800366d0(param_1);
  pcVar5 = (code *)swi(3);
  (*pcVar5)();
  return;
}


==================================================================

### EXPORT FUNC 180036a00 (31 bytes) name=FUN_180036a00

void FUN_180036a00(undefined8 param_1,longlong param_2)

{
  if (*(int *)(param_2 + 0x60) != 0) {
    FUN_180045470(8);
  }
  return;
}


==================================================================

### EXPORT FUNC 180036a20 (12 bytes) name=FUN_180036a20

void FUN_180036a20(uint param_1)

{
  FUN_1800368e0(param_1,1,0);
  return;
}


==================================================================

### EXPORT FUNC 180036a30 (13 bytes) name=FUN_180036a30

void FUN_180036a30(void)

{
  FUN_1800368e0(0,0,1);
  return;
}


==================================================================

### EXPORT FUNC 180036a40 (103 bytes) name=_init_pointers

/* Library Function - Single Match
    _init_pointers
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void __cdecl _init_pointers(void)

{
  INT_PTR IVar1;
  
  IVar1 = FUN_180037c30();
  FUN_180042160(IVar1);
  FUN_1800458e0(IVar1);
  FUN_180038430(IVar1);
  FUN_180042280(IVar1);
  FUN_1800458d0(IVar1);
  _initp_misc_winsig(IVar1);
  FUN_180001e20();
  _initp_eh_hooks();
  PTR_FUN_18006d028 = (undefined *)FUN_180037b60(0x180036a20);
  return;
}


==================================================================

### EXPORT FUNC 180036ab0 (116 bytes) name=FID_conflict:_Type_info_dtor

/* Library Function - Multiple Matches With Different Base Names
    private: static void __cdecl type_info::_Type_info_dtor(class type_info * __ptr64)
    private: static void __cdecl type_info::_Type_info_dtor_internal(class type_info * __ptr64)
   
   Library: Visual Studio 2005 Release */

void FID_conflict__Type_info_dtor(longlong param_1)

{
  longlong *plVar1;
  longlong *plVar2;
  longlong *plVar3;
  
  _lock(0xe);
  plVar1 = DAT_180072848;
  if (*(longlong *)(param_1 + 8) != 0) {
    plVar2 = (longlong *)&DAT_180072840;
    do {
      plVar3 = plVar2;
      if (DAT_180072848 == (longlong *)0x0) goto LAB_180036b03;
      plVar2 = DAT_180072848;
    } while (*DAT_180072848 != *(longlong *)(param_1 + 8));
    plVar3[1] = DAT_180072848[1];
    FUN_180034a70(plVar1);
LAB_180036b03:
    FUN_180034a70(*(LPVOID *)(param_1 + 8));
    *(undefined8 *)(param_1 + 8) = 0;
  }
  FUN_180045470(0xe);
  return;
}


==================================================================

### EXPORT FUNC 180036b30 (25 bytes) name=FUN_180036b30

void FUN_180036b30(void)

{
  FUN_180045470(0xe);
  return;
}


==================================================================

### EXPORT FUNC 180036b50 (330 bytes) name=__report_gsfailure

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Single Match
    __report_gsfailure
   
   Libraries: Visual Studio 2005 Debug, Visual Studio 2005 Release, Visual Studio 2010 Debug, Visual
   Studio 2010 Release */

void __cdecl __report_gsfailure(uintptr_t _StackCookie)

{
  HANDLE hProcess;
  DWORD64 unaff_retaddr;
  uintptr_t local_res8 [4];
  PVOID local_48;
  ulonglong local_40;
  PRUNTIME_FUNCTION local_38;
  DWORD64 local_30;
  DWORD64 local_28;
  undefined8 local_20;
  undefined8 local_18;
  
  local_res8[0] = _StackCookie;
  RtlCaptureContext(&DAT_1800728f0);
  local_30 = DAT_1800729e8;
  local_38 = RtlLookupFunctionEntry(DAT_1800729e8,&local_28,(PUNWIND_HISTORY_TABLE)0x0);
  if (local_38 == (PRUNTIME_FUNCTION)0x0) {
    _DAT_180072988 = local_res8;
    DAT_1800729e8 = unaff_retaddr;
  }
  else {
    RtlVirtualUnwind(0,local_28,local_30,local_38,(PCONTEXT)&DAT_1800728f0,&local_48,&local_40,
                     (PKNONVOLATILE_CONTEXT_POINTERS)0x0);
  }
  _DAT_180072860 = DAT_1800729e8;
  _DAT_180072970 = local_res8[0];
  _DAT_180072850 = 0xc0000409;
  _DAT_180072854 = 1;
  local_20 = DAT_18006cea0;
  local_18 = DAT_18006cea8;
  DAT_1800728e8 = IsDebuggerPresent();
  FUN_180045a30();
  SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)0x0);
  UnhandledExceptionFilter((_EXCEPTION_POINTERS *)&PTR_DAT_1800572a0);
  if (DAT_1800728e8 == 0) {
    FUN_180045a30();
  }
  hProcess = GetCurrentProcess();
  TerminateProcess(hProcess,0xc0000409);
  return;
}


==================================================================

### EXPORT FUNC 180036ca0 (171 bytes) name=FUN_180036ca0

void FUN_180036ca0(longlong param_1)

{
  undefined1 *puVar1;
  ulonglong *puVar2;
  longlong lVar3;
  
  lVar3 = 0x101;
  FUN_1800357d0((ulonglong *)(param_1 + 0x1c),0,0x101);
  *(undefined4 *)(param_1 + 4) = 0;
  *(undefined4 *)(param_1 + 8) = 0;
  *(undefined4 *)(param_1 + 0xc) = 0;
  *(undefined8 *)(param_1 + 0x10) = 0;
  *(undefined4 *)(param_1 + 0x18) = 0;
  puVar2 = (ulonglong *)(param_1 + 0x1c);
  do {
    lVar3 = lVar3 + -1;
    *(undefined1 *)puVar2 = *(undefined1 *)(((longlong)&DAT_18006d040 - param_1) + (longlong)puVar2)
    ;
    puVar2 = (ulonglong *)((longlong)puVar2 + 1);
  } while (lVar3 != 0);
  lVar3 = 0x80;
  puVar1 = (undefined1 *)(param_1 + 0x11d);
  do {
    lVar3 = lVar3 + -1;
    *puVar1 = puVar1[(longlong)&DAT_18006d040 - param_1];
    puVar1[1] = (puVar1 + 2)[0x18006d03f - param_1];
    puVar1 = puVar1 + 2;
  } while (lVar3 != 0);
  return;
}


==================================================================

### EXPORT FUNC 180036d50 (531 bytes) name=FUN_180036d50

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

void FUN_180036d50(longlong param_1)

{
  BYTE *pBVar1;
  byte bVar2;
  BOOL BVar3;
  uint uVar4;
  byte *pbVar6;
  int iVar7;
  ulonglong *puVar8;
  ulonglong uVar9;
  BYTE *pBVar10;
  longlong lVar11;
  ushort *puVar12;
  undefined1 auStackY_588 [32];
  _cpinfo local_538;
  ulonglong local_518 [32];
  byte local_418 [256];
  byte local_318 [256];
  WORD local_218 [256];
  ulonglong local_18;
  ulonglong uVar5;
  
  local_18 = DAT_18006cea0 ^ (ulonglong)auStackY_588;
  BVar3 = GetCPInfo(*(UINT *)(param_1 + 4),&local_538);
  if (BVar3 == 0) {
    uVar4 = 0;
    pbVar6 = (byte *)(param_1 + 0x1d);
    do {
      if (uVar4 - 0x41 < 0x1a) {
        *pbVar6 = *pbVar6 | 0x10;
        pbVar6[0x100] = (char)uVar4 + 0x20;
      }
      else if (uVar4 - 0x61 < 0x1a) {
        *pbVar6 = *pbVar6 | 0x20;
        pbVar6[0x100] = (char)uVar4 - 0x20;
      }
      else {
        pbVar6[0x100] = 0;
      }
      uVar4 = uVar4 + 1;
      pbVar6 = pbVar6 + 1;
    } while (uVar4 < 0x100);
  }
  else {
    uVar9 = 0;
    puVar8 = local_518;
    lVar11 = 0x100;
    uVar5 = uVar9;
    do {
      *(char *)puVar8 = (char)uVar5;
      uVar4 = (int)uVar5 + 1;
      uVar5 = (ulonglong)uVar4;
      puVar8 = (ulonglong *)((longlong)puVar8 + 1);
    } while (uVar4 < 0x100);
    local_518[0]._0_1_ = 0x20;
    pBVar10 = local_538.LeadByte;
    while (local_538.LeadByte[0] != 0) {
      if ((uint)local_538.LeadByte[0] <= (uint)pBVar10[1]) {
        iVar7 = (uint)pBVar10[1] - (uint)local_538.LeadByte[0];
        FUN_1800357d0((ulonglong *)((longlong)local_518 + (ulonglong)local_538.LeadByte[0]),
                      CONCAT71((uint7)(uint3)((uint)iVar7 >> 8),0x20),(ulonglong)(iVar7 + 1));
      }
      pBVar1 = pBVar10 + 2;
      pBVar10 = pBVar10 + 2;
      local_538.LeadByte[0] = *pBVar1;
    }
    FUN_180046340((longlong *)0x0,1,(LPCSTR)local_518,0x100,local_218,*(UINT *)(param_1 + 4),
                  *(LCID *)(param_1 + 0xc),0);
    FUN_180045f80((longlong *)0x0,*(LCID *)(param_1 + 0xc),0x100,(LPCSTR)local_518,0x100,
                  (LPSTR)local_418,0x100,*(UINT *)(param_1 + 4),0);
    FUN_180045f80((longlong *)0x0,*(LCID *)(param_1 + 0xc),0x200,(LPCSTR)local_518,0x100,
                  (LPSTR)local_318,0x100,*(UINT *)(param_1 + 4),0);
    puVar12 = local_218;
    pbVar6 = (byte *)(param_1 + 0x1d);
    do {
      if ((*puVar12 & 1) == 0) {
        if ((*puVar12 & 2) == 0) {
          pbVar6[0x100] = 0;
        }
        else {
          bVar2 = local_318[uVar9];
          *pbVar6 = *pbVar6 | 0x20;
          pbVar6[0x100] = bVar2;
        }
      }
      else {
        bVar2 = local_418[uVar9];
        *pbVar6 = *pbVar6 | 0x10;
        pbVar6[0x100] = bVar2;
      }
      pbVar6 = pbVar6 + 1;
      uVar9 = uVar9 + 1;
      puVar12 = puVar12 + 1;
      lVar11 = lVar11 + -1;
    } while (lVar11 != 0);
  }
  return;
}


==================================================================

### EXPORT FUNC 180036f70 (188 bytes) name=__updatetmbcinfo

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Single Match
    __updatetmbcinfo
   
   Library: Visual Studio 2008 Release */

pthreadmbcinfo __cdecl __updatetmbcinfo(void)

{
  DWORD *pDVar1;
  pthreadmbcinfo ptVar2;
  
  pDVar1 = FUN_1800380a0();
  if (((_DAT_18006d578 & pDVar1[0x32]) == 0) || (*(longlong *)(pDVar1 + 0x30) == 0)) {
    _lock(0xd);
    ptVar2 = *(pthreadmbcinfo *)(pDVar1 + 0x2e);
    if (ptVar2 != (pthreadmbcinfo)PTR_DAT_18006d470) {
      if (ptVar2 != (pthreadmbcinfo)0x0) {
        LOCK();
        ptVar2->refcount = ptVar2->refcount + -1;
        UNLOCK();
        if ((ptVar2->refcount == 0) && (ptVar2 != (pthreadmbcinfo)&DAT_18006d040)) {
          FUN_180034a70(ptVar2);
        }
      }
      *(undefined **)(pDVar1 + 0x2e) = PTR_DAT_18006d470;
      ptVar2 = (pthreadmbcinfo)PTR_DAT_18006d470;
      LOCK();
      *(int *)PTR_DAT_18006d470 = *(int *)PTR_DAT_18006d470 + 1;
      UNLOCK();
    }
    FUN_180045470(0xd);
  }
  else {
    ptVar2 = *(pthreadmbcinfo *)(pDVar1 + 0x2e);
  }
  if (ptVar2 == (pthreadmbcinfo)0x0) {
    _amsg_exit(0x20);
  }
  return ptVar2;
}


==================================================================

### EXPORT FUNC 180037030 (25 bytes) name=FUN_180037030

void FUN_180037030(void)

{
  FUN_180045470(0xd);
  return;
}


==================================================================

### EXPORT FUNC 180037050 (266 bytes) name=FUN_180037050

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

UINT FUN_180037050(UINT param_1)

{
  undefined *puVar1;
  UINT UVar2;
  DWORD *pDVar3;
  pthreadlocinfo ptVar4;
  bool bVar5;
  
  pDVar3 = FUN_1800380a0();
  ptVar4 = *(pthreadlocinfo *)(pDVar3 + 0x30);
  puVar1 = *(undefined **)(pDVar3 + 0x2e);
  if ((ptVar4 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & pDVar3[0x32]) == 0)) {
    ptVar4 = __updatetlocinfo();
  }
  if ((puVar1 != PTR_DAT_18006d470) && ((_DAT_18006d578 & pDVar3[0x32]) == 0)) {
    __updatetmbcinfo();
  }
  bVar5 = (pDVar3[0x32] & 2) == 0;
  if (bVar5) {
    pDVar3[0x32] = pDVar3[0x32] | 2;
  }
  DAT_180072dc0 = 0;
  if (param_1 == 0xfffffffe) {
    DAT_180072dc0 = 1;
    UVar2 = GetOEMCP();
  }
  else if (param_1 == 0xfffffffd) {
    DAT_180072dc0 = 1;
    UVar2 = GetACP();
  }
  else {
    if (param_1 != 0xfffffffc) {
      if (!bVar5) {
        DAT_180072dc0 = 0;
        return param_1;
      }
      pDVar3[0x32] = pDVar3[0x32] & 0xfffffffd;
      return param_1;
    }
    UVar2 = ptVar4->lc_codepage;
    DAT_180072dc0 = 1;
  }
  if (bVar5) {
    pDVar3[0x32] = pDVar3[0x32] & 0xfffffffd;
  }
  return UVar2;
}


==================================================================

### EXPORT FUNC 180037160 (956 bytes) name=FUN_180037160

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8 FUN_180037160(UINT param_1,longlong param_2)

{
  byte bVar1;
  byte bVar2;
  int iVar3;
  UINT CodePage;
  BOOL BVar4;
  UINT *pUVar5;
  byte *pbVar6;
  undefined8 uVar7;
  uint uVar8;
  undefined1 *puVar9;
  byte *pbVar11;
  BYTE *pBVar12;
  undefined4 uVar13;
  longlong lVar14;
  ulonglong *puVar15;
  byte *pbVar16;
  byte *pbVar17;
  ulonglong uVar18;
  undefined1 auStack_68 [32];
  _cpinfo local_48;
  ulonglong local_30;
  ulonglong uVar10;
  
  local_30 = DAT_18006cea0 ^ (ulonglong)auStack_68;
  CodePage = FUN_180037050(param_1);
  if (CodePage == 0) {
    lVar14 = 0x101;
    FUN_1800357d0((ulonglong *)(param_2 + 0x1c),0,0x101);
    *(undefined4 *)(param_2 + 4) = 0;
    *(undefined4 *)(param_2 + 8) = 0;
    *(undefined4 *)(param_2 + 0xc) = 0;
    *(undefined8 *)(param_2 + 0x10) = 0;
    *(undefined4 *)(param_2 + 0x18) = 0;
    puVar15 = (ulonglong *)(param_2 + 0x1c);
    do {
      lVar14 = lVar14 + -1;
      *(undefined1 *)puVar15 =
           *(undefined1 *)(((longlong)&DAT_18006d040 - param_2) + (longlong)puVar15);
      puVar15 = (ulonglong *)((longlong)puVar15 + 1);
    } while (lVar14 != 0);
    lVar14 = 0x80;
    puVar9 = (undefined1 *)(param_2 + 0x11d);
    do {
      lVar14 = lVar14 + -1;
      *puVar9 = puVar9[(longlong)&DAT_18006d040 - param_2];
      puVar9[1] = (puVar9 + 2)[0x18006d03f - param_2];
      puVar9 = puVar9 + 2;
    } while (lVar14 != 0);
    return 0;
  }
  uVar10 = 0;
  uVar13 = 0;
  pUVar5 = &DAT_18006d480;
  uVar18 = uVar10;
LAB_180037230:
  if (*pUVar5 != CodePage) goto code_r0x000180037238;
  FUN_1800357d0((ulonglong *)(param_2 + 0x1c),0,0x101);
  pbVar17 = &DAT_18006d478;
  lVar14 = 4;
  pbVar6 = &DAT_18006d490 + uVar18 * 0x30;
  do {
    bVar1 = *pbVar6;
    pbVar16 = pbVar6;
    while ((bVar1 != 0 && (pbVar16[1] != 0))) {
      uVar10 = (ulonglong)*pbVar16;
      if (*pbVar16 <= pbVar16[1]) {
        pbVar11 = (byte *)(uVar10 + 0x1d + param_2);
        do {
          uVar8 = (int)uVar10 + 1;
          uVar10 = (ulonglong)uVar8;
          *pbVar11 = *pbVar11 | *pbVar17;
          pbVar11 = pbVar11 + 1;
        } while (uVar8 <= pbVar16[1]);
      }
      pbVar16 = pbVar16 + 2;
      bVar1 = *pbVar16;
    }
    pbVar6 = pbVar6 + 8;
    pbVar17 = pbVar17 + 1;
    lVar14 = lVar14 + -1;
  } while (lVar14 != 0);
  *(UINT *)(param_2 + 4) = CodePage;
  *(undefined4 *)(param_2 + 8) = 1;
  if (CodePage == 0x3a4) {
    uVar13 = 0x411;
  }
  else if (CodePage == 0x3a8) {
    uVar13 = 0x804;
  }
  else if (CodePage == 0x3b5) {
    uVar13 = 0x412;
  }
  else if (CodePage == 0x3b6) {
    uVar13 = 0x404;
  }
  *(undefined4 *)(param_2 + 0xc) = uVar13;
  *(undefined2 *)(param_2 + 0x10) = *(undefined2 *)(uVar18 * 0x30 + 0x18006d484);
  *(undefined2 *)(param_2 + 0x12) = *(undefined2 *)(uVar18 * 0x30 + 0x18006d486);
  *(undefined2 *)(param_2 + 0x14) = *(undefined2 *)(uVar18 * 0x30 + 0x18006d488);
  *(undefined2 *)(param_2 + 0x16) = *(undefined2 *)(uVar18 * 0x30 + 0x18006d48a);
  *(undefined2 *)(param_2 + 0x18) = *(undefined2 *)(uVar18 * 0x30 + 0x18006d48c);
  *(undefined2 *)(param_2 + 0x1a) = *(undefined2 *)(uVar18 * 0x30 + 0x18006d48e);
  goto LAB_1800374ef;
code_r0x000180037238:
  uVar8 = (int)uVar10 + 1;
  uVar10 = (ulonglong)uVar8;
  uVar18 = uVar18 + 1;
  pUVar5 = pUVar5 + 0xc;
  if (4 < uVar8) goto code_r0x000180037248;
  goto LAB_180037230;
code_r0x000180037248:
  if (((CodePage == 65000) || (CodePage == 0xfde9)) ||
     (BVar4 = IsValidCodePage(CodePage & 0xffff), BVar4 == 0)) {
LAB_1800373d3:
    uVar7 = 0xffffffff;
  }
  else {
    BVar4 = GetCPInfo(CodePage,&local_48);
    if (BVar4 == 0) {
      if (DAT_180072dc0 == 0) goto LAB_1800373d3;
      FUN_180036ca0(param_2);
    }
    else {
      FUN_1800357d0((ulonglong *)(param_2 + 0x1c),0,0x101);
      *(UINT *)(param_2 + 4) = CodePage;
      *(undefined4 *)(param_2 + 0xc) = 0;
      if (local_48.MaxCharSize < 2) {
        *(undefined4 *)(param_2 + 8) = 0;
        *(undefined8 *)(param_2 + 0x10) = 0;
        *(undefined4 *)(param_2 + 0x18) = 0;
      }
      else {
        pBVar12 = local_48.LeadByte;
        while ((local_48.LeadByte[0] != 0 && (bVar1 = pBVar12[1], bVar1 != 0))) {
          bVar2 = *pBVar12;
          if ((uint)bVar2 <= (uint)bVar1) {
            pbVar6 = (byte *)((ulonglong)bVar2 + 0x1d + param_2);
            uVar18 = (ulonglong)(((uint)bVar1 - (uint)bVar2) + 1);
            do {
              *pbVar6 = *pbVar6 | 4;
              pbVar6 = pbVar6 + 1;
              uVar18 = uVar18 - 1;
            } while (uVar18 != 0);
          }
          pBVar12 = pBVar12 + 2;
          local_48.LeadByte[0] = *pBVar12;
        }
        pbVar6 = (byte *)(param_2 + 0x1f);
        lVar14 = 0x7f;
        do {
          pbVar6[-1] = pbVar6[-1] | 8;
          *pbVar6 = *pbVar6 | 8;
          pbVar6 = pbVar6 + 2;
          lVar14 = lVar14 + -1;
        } while (lVar14 != 0);
        iVar3 = *(int *)(param_2 + 4);
        if (iVar3 == 0x3a4) {
          *(undefined4 *)(param_2 + 8) = 1;
          *(undefined4 *)(param_2 + 0xc) = 0x411;
          *(undefined8 *)(param_2 + 0x10) = 0;
          *(undefined4 *)(param_2 + 0x18) = 0;
        }
        else if (iVar3 == 0x3a8) {
          *(undefined4 *)(param_2 + 8) = 1;
          *(undefined4 *)(param_2 + 0xc) = 0x804;
          *(undefined8 *)(param_2 + 0x10) = 0;
          *(undefined4 *)(param_2 + 0x18) = 0;
        }
        else if (iVar3 == 0x3b5) {
          *(undefined4 *)(param_2 + 8) = 1;
          *(undefined4 *)(param_2 + 0xc) = 0x412;
          *(undefined8 *)(param_2 + 0x10) = 0;
          *(undefined4 *)(param_2 + 0x18) = 0;
        }
        else if (iVar3 == 0x3b6) {
          *(undefined4 *)(param_2 + 8) = 1;
          *(undefined4 *)(param_2 + 0xc) = 0x404;
          *(undefined8 *)(param_2 + 0x10) = 0;
          *(undefined4 *)(param_2 + 0x18) = 0;
        }
        else {
          *(undefined4 *)(param_2 + 8) = 1;
          *(undefined4 *)(param_2 + 0xc) = 0;
          *(undefined8 *)(param_2 + 0x10) = 0;
          *(undefined4 *)(param_2 + 0x18) = 0;
        }
      }
LAB_1800374ef:
      FUN_180036d50(param_2);
    }
    uVar7 = 0;
  }
  return uVar7;
}


==================================================================

### EXPORT FUNC 180037520 (513 bytes) name=FUN_180037520

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

ulonglong FUN_180037520(UINT param_1)

{
  longlong lVar1;
  int *piVar2;
  undefined *puVar3;
  UINT UVar4;
  DWORD *pDVar5;
  int *_Dst;
  ulonglong uVar6;
  int iVar7;
  int iVar8;
  ulonglong uVar9;
  
  uVar9 = 0xffffffff;
  pDVar5 = FUN_1800380a0();
  __updatetmbcinfo();
  lVar1 = *(longlong *)(pDVar5 + 0x2e);
  UVar4 = FUN_180037050(param_1);
  if (UVar4 == *(UINT *)(lVar1 + 4)) {
    uVar9 = 0;
  }
  else {
    _Dst = (int *)FUN_180040de0(0x220);
    if (_Dst != (int *)0x0) {
      memcpy(_Dst,*(void **)(pDVar5 + 0x2e),0x220);
      iVar8 = 0;
      *_Dst = 0;
      uVar6 = FUN_180037160(UVar4,(longlong)_Dst);
      uVar9 = uVar6 & 0xffffffff;
      if ((int)uVar6 == 0) {
        piVar2 = *(int **)(pDVar5 + 0x2e);
        LOCK();
        *piVar2 = *piVar2 + -1;
        UNLOCK();
        if ((*piVar2 == 0) && (*(undefined4 **)(pDVar5 + 0x2e) != &DAT_18006d040)) {
          FUN_180034a70(*(undefined4 **)(pDVar5 + 0x2e));
        }
        *(int **)(pDVar5 + 0x2e) = _Dst;
        LOCK();
        *_Dst = *_Dst + 1;
        UNLOCK();
        if (((pDVar5[0x32] & 2) == 0) && ((DAT_18006d578 & 1) == 0)) {
          _lock(0xd);
          _DAT_180072dd4 = _Dst[1];
          _DAT_180072dd8 = _Dst[2];
          _DAT_180072ddc = _Dst[3];
          for (iVar7 = 0; iVar7 < 5; iVar7 = iVar7 + 1) {
            *(undefined2 *)(&DAT_180072dc8 + (longlong)iVar7 * 2) =
                 *(undefined2 *)((longlong)_Dst + (longlong)iVar7 * 2 + 0x10);
          }
          for (iVar7 = 0; iVar7 < 0x101; iVar7 = iVar7 + 1) {
            (&DAT_18006d260)[iVar7] = *(undefined1 *)((longlong)iVar7 + 0x1c + (longlong)_Dst);
          }
          for (; puVar3 = PTR_DAT_18006d470, iVar8 < 0x100; iVar8 = iVar8 + 1) {
            (&DAT_18006d370)[iVar8] = *(undefined1 *)((longlong)iVar8 + 0x11d + (longlong)_Dst);
          }
          LOCK();
          *(int *)PTR_DAT_18006d470 = *(int *)PTR_DAT_18006d470 + -1;
          UNLOCK();
          if ((*(int *)puVar3 == 0) && ((undefined4 *)PTR_DAT_18006d470 != &DAT_18006d040)) {
            FUN_180034a70(PTR_DAT_18006d470);
          }
          LOCK();
          PTR_DAT_18006d470 = (undefined *)_Dst;
          *_Dst = *_Dst + 1;
          UNLOCK();
          FUN_180045470(0xd);
        }
      }
      else if ((int)uVar6 == -1) {
        if (_Dst != &DAT_18006d040) {
          FUN_180034a70(_Dst);
        }
        pDVar5 = FUN_180035b40();
        *pDVar5 = 0x16;
      }
    }
  }
  return uVar9;
}


==================================================================

### EXPORT FUNC 180037730 (25 bytes) name=FUN_180037730

void FUN_180037730(void)

{
  FUN_180045470(0xd);
  return;
}


==================================================================

### EXPORT FUNC 180037750 (40 bytes) name=FUN_180037750

undefined8 FUN_180037750(void)

{
  if (DAT_1800db6f8 == 0) {
    FUN_180037520(0xfffffffd);
    DAT_1800db6f8 = 1;
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180037780 (392 bytes) name=FUN_180037780

void FUN_180037780(LPVOID param_1)

{
  int *piVar1;
  undefined **ppuVar2;
  undefined8 *puVar3;
  longlong lVar4;
  
  if ((((*(undefined ***)((longlong)param_1 + 0x128) != (undefined **)0x0) &&
       (*(undefined ***)((longlong)param_1 + 0x128) != &PTR_DAT_18006df60)) &&
      (*(int **)((longlong)param_1 + 0x110) != (int *)0x0)) &&
     (**(int **)((longlong)param_1 + 0x110) == 0)) {
    piVar1 = *(int **)((longlong)param_1 + 0x120);
    if ((piVar1 != (int *)0x0) && (*piVar1 == 0)) {
      FUN_180034a70(piVar1);
      __free_lconv_mon(*(longlong *)((longlong)param_1 + 0x128));
    }
    piVar1 = *(int **)((longlong)param_1 + 0x118);
    if ((piVar1 != (int *)0x0) && (*piVar1 == 0)) {
      FUN_180034a70(piVar1);
      __free_lconv_num(*(undefined8 **)((longlong)param_1 + 0x128));
    }
    FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x110));
    FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x128));
  }
  if ((*(int **)((longlong)param_1 + 0x130) != (int *)0x0) &&
     (**(int **)((longlong)param_1 + 0x130) == 0)) {
    FUN_180034a70((LPVOID)(*(longlong *)((longlong)param_1 + 0x138) + -0xfe));
    FUN_180034a70((LPVOID)(*(longlong *)((longlong)param_1 + 0x148) + -0x80));
    FUN_180034a70((LPVOID)(*(longlong *)((longlong)param_1 + 0x150) + -0x80));
    FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x130));
  }
  ppuVar2 = *(undefined ***)((longlong)param_1 + 0x158);
  if ((ppuVar2 != &PTR_DAT_18006d730) && (*(int *)(ppuVar2 + 0x2c) == 0)) {
    __free_lc_time(ppuVar2);
    FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x158));
  }
  puVar3 = (undefined8 *)((longlong)param_1 + 0x58);
  lVar4 = 6;
  do {
    if ((((undefined *)puVar3[-2] != &DAT_18006d580) &&
        (piVar1 = (int *)*puVar3, piVar1 != (int *)0x0)) && (*piVar1 == 0)) {
      FUN_180034a70(piVar1);
    }
    if (((puVar3[-1] != 0) && (piVar1 = (int *)puVar3[1], piVar1 != (int *)0x0)) && (*piVar1 == 0))
    {
      FUN_180034a70(piVar1);
    }
    puVar3 = puVar3 + 4;
    lVar4 = lVar4 + -1;
  } while (lVar4 != 0);
  FUN_180034a70(param_1);
  return;
}


==================================================================

### EXPORT FUNC 180037910 (152 bytes) name=__addlocaleref

/* Library Function - Single Match
    __addlocaleref
   
   Library: Visual Studio 2005 Release */

void __addlocaleref(int *param_1)

{
  int *piVar1;
  int *piVar2;
  longlong lVar3;
  
  LOCK();
  *param_1 = *param_1 + 1;
  UNLOCK();
  piVar2 = *(int **)(param_1 + 0x44);
  if (piVar2 != (int *)0x0) {
    LOCK();
    *piVar2 = *piVar2 + 1;
    UNLOCK();
  }
  piVar2 = *(int **)(param_1 + 0x48);
  if (piVar2 != (int *)0x0) {
    LOCK();
    *piVar2 = *piVar2 + 1;
    UNLOCK();
  }
  piVar2 = *(int **)(param_1 + 0x46);
  if (piVar2 != (int *)0x0) {
    LOCK();
    *piVar2 = *piVar2 + 1;
    UNLOCK();
  }
  piVar2 = *(int **)(param_1 + 0x4c);
  if (piVar2 != (int *)0x0) {
    LOCK();
    *piVar2 = *piVar2 + 1;
    UNLOCK();
  }
  piVar2 = param_1 + 0x16;
  lVar3 = 6;
  do {
    if ((*(undefined **)(piVar2 + -4) != &DAT_18006d580) &&
       (piVar1 = *(int **)piVar2, piVar1 != (int *)0x0)) {
      LOCK();
      *piVar1 = *piVar1 + 1;
      UNLOCK();
    }
    if ((*(longlong *)(piVar2 + -2) != 0) && (piVar1 = *(int **)(piVar2 + 2), piVar1 != (int *)0x0))
    {
      LOCK();
      *piVar1 = *piVar1 + 1;
      UNLOCK();
    }
    piVar2 = piVar2 + 8;
    lVar3 = lVar3 + -1;
  } while (lVar3 != 0);
  LOCK();
  *(int *)(*(longlong *)(param_1 + 0x56) + 0x160) =
       *(int *)(*(longlong *)(param_1 + 0x56) + 0x160) + 1;
  UNLOCK();
  return;
}


==================================================================

### EXPORT FUNC 1800379b0 (163 bytes) name=__removelocaleref

/* Library Function - Single Match
    __removelocaleref
   
   Library: Visual Studio 2005 Release */

int * __removelocaleref(int *param_1)

{
  int *piVar1;
  int *piVar2;
  longlong lVar3;
  
  if (param_1 != (int *)0x0) {
    LOCK();
    *param_1 = *param_1 + -1;
    UNLOCK();
    piVar2 = *(int **)(param_1 + 0x44);
    if (piVar2 != (int *)0x0) {
      LOCK();
      *piVar2 = *piVar2 + -1;
      UNLOCK();
    }
    piVar2 = *(int **)(param_1 + 0x48);
    if (piVar2 != (int *)0x0) {
      LOCK();
      *piVar2 = *piVar2 + -1;
      UNLOCK();
    }
    piVar2 = *(int **)(param_1 + 0x46);
    if (piVar2 != (int *)0x0) {
      LOCK();
      *piVar2 = *piVar2 + -1;
      UNLOCK();
    }
    piVar2 = *(int **)(param_1 + 0x4c);
    if (piVar2 != (int *)0x0) {
      LOCK();
      *piVar2 = *piVar2 + -1;
      UNLOCK();
    }
    piVar2 = param_1 + 0x16;
    lVar3 = 6;
    do {
      if ((*(undefined **)(piVar2 + -4) != &DAT_18006d580) &&
         (piVar1 = *(int **)piVar2, piVar1 != (int *)0x0)) {
        LOCK();
        *piVar1 = *piVar1 + -1;
        UNLOCK();
      }
      if ((*(longlong *)(piVar2 + -2) != 0) &&
         (piVar1 = *(int **)(piVar2 + 2), piVar1 != (int *)0x0)) {
        LOCK();
        *piVar1 = *piVar1 + -1;
        UNLOCK();
      }
      piVar2 = piVar2 + 8;
      lVar3 = lVar3 + -1;
    } while (lVar3 != 0);
    LOCK();
    *(int *)(*(longlong *)(param_1 + 0x56) + 0x160) =
         *(int *)(*(longlong *)(param_1 + 0x56) + 0x160) + -1;
    UNLOCK();
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180037a60 (91 bytes) name=_updatetlocinfoEx_nolock

/* Library Function - Single Match
    _updatetlocinfoEx_nolock
   
   Library: Visual Studio 2005 Release */

int * _updatetlocinfoEx_nolock(longlong *param_1,int *param_2)

{
  int *piVar1;
  int *piVar2;
  
  if ((param_2 != (int *)0x0) && (param_1 != (longlong *)0x0)) {
    piVar1 = (int *)*param_1;
    if (piVar1 != param_2) {
      *param_1 = (longlong)param_2;
      __addlocaleref(param_2);
      if (piVar1 != (int *)0x0) {
        piVar2 = piVar1;
        __removelocaleref(piVar1);
        if ((*piVar2 == 0) && (piVar2 != (int *)&DAT_18006d590)) {
          FUN_180037780(piVar1);
        }
      }
    }
    return param_2;
  }
  return (int *)0x0;
}


==================================================================

### EXPORT FUNC 180037ac0 (117 bytes) name=__updatetlocinfo

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Single Match
    __updatetlocinfo
   
   Library: Visual Studio 2005 Release */

pthreadlocinfo __cdecl __updatetlocinfo(void)

{
  DWORD *pDVar1;
  pthreadlocinfo ptVar2;
  
  pDVar1 = FUN_1800380a0();
  if (((_DAT_18006d578 & pDVar1[0x32]) == 0) || (*(longlong *)(pDVar1 + 0x30) == 0)) {
    _lock(0xc);
    ptVar2 = (pthreadlocinfo)
             _updatetlocinfoEx_nolock((longlong *)(pDVar1 + 0x30),(int *)PTR_DAT_18006d6f0);
    FUN_180045470(0xc);
  }
  else {
    pDVar1 = FUN_1800380a0();
    ptVar2 = *(pthreadlocinfo *)(pDVar1 + 0x30);
  }
  if (ptVar2 == (pthreadlocinfo)0x0) {
    _amsg_exit(0x20);
  }
  return ptVar2;
}


==================================================================

### EXPORT FUNC 180037b40 (25 bytes) name=FUN_180037b40

void FUN_180037b40(void)

{
  FUN_180045470(0xc);
  return;
}


==================================================================

### EXPORT FUNC 180037b60 (208 bytes) name=FUN_180037b60

INT_PTR FUN_180037b60(INT_PTR param_1)

{
  ushort uVar1;
  int iVar2;
  PVOID pvVar3;
  HMODULE hModule;
  HMODULE pHVar4;
  FARPROC pFVar5;
  longlong lVar6;
  char *pcVar7;
  uint uVar8;
  char *pcVar9;
  char *pcVar10;
  bool bVar11;
  int local_res8 [2];
  
  if ((DAT_18006d710 == 0xffffffff) || (pvVar3 = FlsGetValue(DAT_18006d710), pvVar3 == (PVOID)0x0))
  {
    hModule = GetModuleHandleA("KERNEL32.DLL");
    if (hModule == (HMODULE)0x0) {
      return param_1;
    }
    uVar8 = 0;
    local_res8[0] = 0;
    FUN_1800367c0(local_res8);
    if (local_res8[0] < 6) {
      pHVar4 = GetModuleHandleA((LPCSTR)0x0);
      iVar2 = pHVar4[0xf].unused;
      pcVar7 = (char *)((longlong)&pHVar4[6].unused +
                       (longlong)iVar2 +
                       (ulonglong)*(ushort *)((longlong)&pHVar4[5].unused + (longlong)iVar2));
      uVar1 = *(ushort *)((longlong)&pHVar4[1].unused + (longlong)iVar2 + 2);
      bVar11 = uVar1 == 0;
      if (!bVar11) {
        do {
          lVar6 = 8;
          pcVar9 = ".mixcrt";
          pcVar10 = pcVar7;
          do {
            if (lVar6 == 0) break;
            lVar6 = lVar6 + -1;
            bVar11 = *pcVar9 == *pcVar10;
            pcVar9 = pcVar9 + 1;
            pcVar10 = pcVar10 + 1;
          } while (bVar11);
          if (bVar11) {
            return param_1;
          }
          uVar8 = uVar8 + 1;
          pcVar7 = pcVar7 + 0x28;
          bVar11 = uVar8 == uVar1;
        } while (uVar8 < uVar1);
      }
    }
    pFVar5 = GetProcAddress(hModule,"EncodePointer");
  }
  else {
    pFVar5 = *(FARPROC *)((longlong)pvVar3 + 0x2a8);
  }
  if (pFVar5 != (FARPROC)0x0) {
    param_1 = (*pFVar5)(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180037c30 (233 bytes) name=FUN_180037c30

INT_PTR FUN_180037c30(void)

{
  ushort uVar1;
  int iVar2;
  PVOID pvVar3;
  HMODULE hModule;
  HMODULE pHVar4;
  FARPROC pFVar5;
  INT_PTR IVar6;
  longlong lVar7;
  uint uVar8;
  char *pcVar9;
  char *pcVar10;
  char *pcVar11;
  bool bVar12;
  int local_res8 [2];
  
  if ((DAT_18006d710 == 0xffffffff) || (pvVar3 = FlsGetValue(DAT_18006d710), pvVar3 == (PVOID)0x0))
  {
    hModule = GetModuleHandleA("KERNEL32.DLL");
    if (hModule == (HMODULE)0x0) {
      return 0;
    }
    local_res8[0] = 0;
    FUN_1800367c0(local_res8);
    if (local_res8[0] < 6) {
      pHVar4 = GetModuleHandleA((LPCSTR)0x0);
      uVar8 = 0;
      iVar2 = pHVar4[0xf].unused;
      pcVar11 = (char *)((longlong)&pHVar4[6].unused +
                        (longlong)iVar2 +
                        (ulonglong)*(ushort *)((longlong)&pHVar4[5].unused + (longlong)iVar2));
      uVar1 = *(ushort *)((longlong)&pHVar4[1].unused + (longlong)iVar2 + 2);
      bVar12 = uVar1 == 0;
      if (!bVar12) {
        do {
          lVar7 = 8;
          pcVar9 = ".mixcrt";
          pcVar10 = pcVar11;
          do {
            if (lVar7 == 0) break;
            lVar7 = lVar7 + -1;
            bVar12 = *pcVar9 == *pcVar10;
            pcVar9 = pcVar9 + 1;
            pcVar10 = pcVar10 + 1;
          } while (bVar12);
          if (bVar12) {
            return 0;
          }
          uVar8 = uVar8 + 1;
          pcVar11 = pcVar11 + 0x28;
          bVar12 = uVar8 == uVar1;
        } while (uVar8 < uVar1);
      }
    }
    pFVar5 = GetProcAddress(hModule,"EncodePointer");
  }
  else {
    pFVar5 = *(FARPROC *)((longlong)pvVar3 + 0x2a8);
  }
  if (pFVar5 == (FARPROC)0x0) {
    return 0;
  }
  IVar6 = (*pFVar5)(0);
  return IVar6;
}


==================================================================

### EXPORT FUNC 180037d20 (208 bytes) name=FUN_180037d20

INT_PTR FUN_180037d20(INT_PTR param_1)

{
  ushort uVar1;
  int iVar2;
  PVOID pvVar3;
  HMODULE hModule;
  HMODULE pHVar4;
  FARPROC pFVar5;
  longlong lVar6;
  char *pcVar7;
  uint uVar8;
  char *pcVar9;
  char *pcVar10;
  bool bVar11;
  int local_res8 [2];
  
  if ((DAT_18006d710 == 0xffffffff) || (pvVar3 = FlsGetValue(DAT_18006d710), pvVar3 == (PVOID)0x0))
  {
    hModule = GetModuleHandleA("KERNEL32.DLL");
    if (hModule == (HMODULE)0x0) {
      return param_1;
    }
    uVar8 = 0;
    local_res8[0] = 0;
    FUN_1800367c0(local_res8);
    if (local_res8[0] < 6) {
      pHVar4 = GetModuleHandleA((LPCSTR)0x0);
      iVar2 = pHVar4[0xf].unused;
      pcVar7 = (char *)((longlong)&pHVar4[6].unused +
                       (longlong)iVar2 +
                       (ulonglong)*(ushort *)((longlong)&pHVar4[5].unused + (longlong)iVar2));
      uVar1 = *(ushort *)((longlong)&pHVar4[1].unused + (longlong)iVar2 + 2);
      bVar11 = uVar1 == 0;
      if (!bVar11) {
        do {
          lVar6 = 8;
          pcVar9 = ".mixcrt";
          pcVar10 = pcVar7;
          do {
            if (lVar6 == 0) break;
            lVar6 = lVar6 + -1;
            bVar11 = *pcVar9 == *pcVar10;
            pcVar9 = pcVar9 + 1;
            pcVar10 = pcVar10 + 1;
          } while (bVar11);
          if (bVar11) {
            return param_1;
          }
          uVar8 = uVar8 + 1;
          pcVar7 = pcVar7 + 0x28;
          bVar11 = uVar8 == uVar1;
        } while (uVar8 < uVar1);
      }
    }
    pFVar5 = GetProcAddress(hModule,"DecodePointer");
  }
  else {
    pFVar5 = *(FARPROC *)((longlong)pvVar3 + 0x2b0);
  }
  if (pFVar5 != (FARPROC)0x0) {
    param_1 = (*pFVar5)(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180037df0 (7 bytes) name=FlsGetValue

PVOID __stdcall FlsGetValue(DWORD dwFlsIndex)

{
  PVOID pvVar1;
  
                    /* WARNING: Could not recover jumptable at 0x000180037df0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  pvVar1 = FlsGetValue(dwFlsIndex);
  return pvVar1;
}


==================================================================

### EXPORT FUNC 180037e00 (7 bytes) name=FUN_180037e00

undefined4 FUN_180037e00(void)

{
  return DAT_18006d710;
}


==================================================================

### EXPORT FUNC 180037e10 (3 bytes) name=FUN_180037e10

undefined8 FUN_180037e10(void)

{
  return 0;
}


==================================================================

### EXPORT FUNC 180037e20 (7 bytes) name=FlsSetValue

BOOL __stdcall FlsSetValue(DWORD dwFlsIndex,PVOID lpFlsData)

{
  BOOL BVar1;
  
                    /* WARNING: Could not recover jumptable at 0x000180037e20. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  BVar1 = FlsSetValue(dwFlsIndex,lpFlsData);
  return BVar1;
}


==================================================================

### EXPORT FUNC 180037e30 (67 bytes) name=FUN_180037e30

void FUN_180037e30(void)

{
  if (DAT_18006d710 != 0xffffffff) {
    FlsFree(DAT_18006d710);
    DAT_18006d710 = 0xffffffff;
  }
  if (DAT_18006d714 != 0xffffffff) {
    TlsFree(DAT_18006d714);
    DAT_18006d714 = 0xffffffff;
  }
  FUN_1800453d0();
  return;
}


==================================================================

### EXPORT FUNC 180037e80 (364 bytes) name=FUN_180037e80

void FUN_180037e80(longlong param_1,longlong param_2)

{
  ushort uVar1;
  int iVar2;
  HMODULE hModule;
  HMODULE pHVar3;
  FARPROC pFVar4;
  longlong lVar5;
  char *pcVar6;
  uint uVar7;
  char *pcVar8;
  char *pcVar9;
  bool bVar10;
  int local_res8 [2];
  
  hModule = GetModuleHandleA("KERNEL32.DLL");
  *(undefined **)(param_1 + 0xa0) = &DAT_18006d9c0;
  *(undefined4 *)(param_1 + 0x1c) = 1;
  if (hModule != (HMODULE)0x0) {
    uVar7 = 0;
    local_res8[0] = 0;
    FUN_1800367c0(local_res8);
    if (local_res8[0] < 6) {
      pHVar3 = GetModuleHandleA((LPCSTR)0x0);
      iVar2 = pHVar3[0xf].unused;
      pcVar6 = (char *)((longlong)&pHVar3[6].unused +
                       (longlong)iVar2 +
                       (ulonglong)*(ushort *)((longlong)&pHVar3[5].unused + (longlong)iVar2));
      uVar1 = *(ushort *)((longlong)&pHVar3[1].unused + (longlong)iVar2 + 2);
      bVar10 = uVar1 == 0;
      if (!bVar10) {
        do {
          lVar5 = 8;
          pcVar8 = ".mixcrt";
          pcVar9 = pcVar6;
          do {
            if (lVar5 == 0) break;
            lVar5 = lVar5 + -1;
            bVar10 = *pcVar8 == *pcVar9;
            pcVar8 = pcVar8 + 1;
            pcVar9 = pcVar9 + 1;
          } while (bVar10);
          if (bVar10) goto LAB_180037f5e;
          uVar7 = uVar7 + 1;
          pcVar6 = pcVar6 + 0x28;
          bVar10 = uVar7 == uVar1;
        } while (uVar7 < uVar1);
      }
    }
    pFVar4 = GetProcAddress(hModule,"EncodePointer");
    *(FARPROC *)(param_1 + 0x2a8) = pFVar4;
    pFVar4 = GetProcAddress(hModule,"DecodePointer");
    *(FARPROC *)(param_1 + 0x2b0) = pFVar4;
  }
LAB_180037f5e:
  *(undefined4 *)(param_1 + 200) = 1;
  *(undefined1 *)(param_1 + 0x174) = 0x43;
  *(undefined1 *)(param_1 + 0x1f7) = 0x43;
  *(int **)(param_1 + 0xb8) = &DAT_18006d040;
  LOCK();
  DAT_18006d040 = DAT_18006d040 + 1;
  UNLOCK();
  _lock(0xc);
  *(longlong *)(param_1 + 0xc0) = param_2;
  if (param_2 == 0) {
    *(undefined **)(param_1 + 0xc0) = PTR_DAT_18006d6f0;
  }
  __addlocaleref(*(int **)(param_1 + 0xc0));
  FUN_180045470(0xc);
  return;
}


==================================================================

### EXPORT FUNC 180037ff0 (25 bytes) name=FUN_180037ff0

void FUN_180037ff0(void)

{
  FUN_180045470(0xc);
  return;
}


==================================================================

### EXPORT FUNC 180038010 (135 bytes) name=FUN_180038010

DWORD * FUN_180038010(void)

{
  DWORD dwErrCode;
  BOOL BVar1;
  DWORD DVar2;
  DWORD *lpFlsData;
  
  dwErrCode = GetLastError();
  lpFlsData = FlsGetValue(DAT_18006d710);
  if (lpFlsData == (DWORD *)0x0) {
    lpFlsData = FUN_180040e50(1,0x2d8);
    if (lpFlsData != (DWORD *)0x0) {
      BVar1 = FlsSetValue(DAT_18006d710,lpFlsData);
      if (BVar1 == 0) {
        FUN_180034a70(lpFlsData);
        lpFlsData = (DWORD *)0x0;
      }
      else {
        FUN_180037e80((longlong)lpFlsData,0);
        DVar2 = GetCurrentThreadId();
        lpFlsData[2] = 0xffffffff;
        lpFlsData[3] = 0xffffffff;
        *lpFlsData = DVar2;
      }
    }
  }
  SetLastError(dwErrCode);
  return lpFlsData;
}


==================================================================

### EXPORT FUNC 1800380a0 (148 bytes) name=FUN_1800380a0

DWORD * FUN_1800380a0(void)

{
  DWORD dwErrCode;
  BOOL BVar1;
  DWORD DVar2;
  DWORD *lpFlsData;
  
  dwErrCode = GetLastError();
  lpFlsData = FlsGetValue(DAT_18006d710);
  if (lpFlsData == (DWORD *)0x0) {
    lpFlsData = FUN_180040e50(1,0x2d8);
    if (lpFlsData != (DWORD *)0x0) {
      BVar1 = FlsSetValue(DAT_18006d710,lpFlsData);
      if (BVar1 == 0) {
        FUN_180034a70(lpFlsData);
        lpFlsData = (DWORD *)0x0;
      }
      else {
        FUN_180037e80((longlong)lpFlsData,0);
        DVar2 = GetCurrentThreadId();
        lpFlsData[2] = 0xffffffff;
        lpFlsData[3] = 0xffffffff;
        *lpFlsData = DVar2;
      }
    }
  }
  SetLastError(dwErrCode);
  if (lpFlsData == (DWORD *)0x0) {
    _amsg_exit(0x10);
  }
  return lpFlsData;
}


==================================================================

### EXPORT FUNC 180038140 (297 bytes) name=FUN_180038140

void FUN_180038140(LPVOID param_1)

{
  int *piVar1;
  
  if (param_1 != (LPVOID)0x0) {
    if (*(LPVOID *)((longlong)param_1 + 0x38) != (LPVOID)0x0) {
      FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x38));
    }
    if (*(LPVOID *)((longlong)param_1 + 0x48) != (LPVOID)0x0) {
      FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x48));
    }
    if (*(LPVOID *)((longlong)param_1 + 0x58) != (LPVOID)0x0) {
      FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x58));
    }
    if (*(LPVOID *)((longlong)param_1 + 0x68) != (LPVOID)0x0) {
      FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x68));
    }
    if (*(LPVOID *)((longlong)param_1 + 0x78) != (LPVOID)0x0) {
      FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x78));
    }
    if (*(LPVOID *)((longlong)param_1 + 0x80) != (LPVOID)0x0) {
      FUN_180034a70(*(LPVOID *)((longlong)param_1 + 0x80));
    }
    if (*(undefined **)((longlong)param_1 + 0xa0) != &DAT_18006d9c0) {
      FUN_180034a70(*(undefined **)((longlong)param_1 + 0xa0));
    }
    _lock(0xd);
    piVar1 = *(int **)((longlong)param_1 + 0xb8);
    if (piVar1 != (int *)0x0) {
      LOCK();
      *piVar1 = *piVar1 + -1;
      UNLOCK();
      if ((*piVar1 == 0) && (piVar1 != &DAT_18006d040)) {
        FUN_180034a70(piVar1);
      }
    }
    FUN_180045470(0xd);
    _lock(0xc);
    piVar1 = *(int **)((longlong)param_1 + 0xc0);
    if (piVar1 != (int *)0x0) {
      __removelocaleref(piVar1);
      if (((piVar1 != (int *)PTR_DAT_18006d6f0) && (piVar1 != (int *)&DAT_18006d590)) &&
         (*piVar1 == 0)) {
        FUN_180037780(piVar1);
      }
    }
    FUN_180045470(0xc);
    FUN_180034a70(param_1);
  }
  return;
}


==================================================================

### EXPORT FUNC 180038270 (25 bytes) name=FUN_180038270

void FUN_180038270(void)

{
  FUN_180045470(0xd);
  return;
}


==================================================================

### EXPORT FUNC 180038290 (25 bytes) name=FUN_180038290

void FUN_180038290(void)

{
  FUN_180045470(0xc);
  return;
}


==================================================================

### EXPORT FUNC 1800382b0 (81 bytes) name=_freeptd

/* Library Function - Single Match
    _freeptd
   
   Library: Visual Studio 2005 Release */

void __cdecl _freeptd(_ptiddata _Ptd)

{
  if (DAT_18006d710 != 0xffffffff) {
    if (_Ptd == (_ptiddata)0x0) {
      _Ptd = FlsGetValue(DAT_18006d710);
    }
    FlsSetValue(DAT_18006d710,(PVOID)0x0);
    FUN_180038140(_Ptd);
  }
  if (DAT_18006d714 != 0xffffffff) {
    TlsSetValue(DAT_18006d714,(LPVOID)0x0);
  }
  return;
}


==================================================================

### EXPORT FUNC 180038310 (279 bytes) name=FUN_180038310

undefined8 FUN_180038310(void)

{
  BOOL BVar1;
  DWORD DVar2;
  undefined8 uVar3;
  DWORD *lpFlsData;
  
  _init_pointers();
  uVar3 = FUN_180045330();
  if ((int)uVar3 == 0) {
    if (DAT_18006d710 != 0xffffffff) {
      FlsFree(DAT_18006d710);
      DAT_18006d710 = 0xffffffff;
    }
  }
  else {
    DAT_18006d710 = FlsAlloc(FUN_180038140);
    if (DAT_18006d710 != 0xffffffff) {
      lpFlsData = FUN_180040e50(1,0x2d8);
      if ((lpFlsData != (DWORD *)0x0) && (BVar1 = FlsSetValue(DAT_18006d710,lpFlsData), BVar1 != 0))
      {
        FUN_180037e80((longlong)lpFlsData,0);
        DVar2 = GetCurrentThreadId();
        lpFlsData[2] = 0xffffffff;
        lpFlsData[3] = 0xffffffff;
        *lpFlsData = DVar2;
        return 1;
      }
      if (DAT_18006d710 != 0xffffffff) {
        FlsFree(DAT_18006d710);
        DAT_18006d710 = 0xffffffff;
      }
      if (DAT_18006d714 != 0xffffffff) {
        TlsFree(DAT_18006d714);
        DAT_18006d714 = 0xffffffff;
      }
      FUN_1800453d0();
      return 0;
    }
    DAT_18006d710 = 0xffffffff;
  }
  if (DAT_18006d714 != 0xffffffff) {
    TlsFree(DAT_18006d714);
    DAT_18006d714 = 0xffffffff;
  }
  FUN_1800453d0();
  return 0;
}


==================================================================

### EXPORT FUNC 180038430 (8 bytes) name=FUN_180038430

void FUN_180038430(undefined8 param_1)

{
  DAT_180072e08 = param_1;
  return;
}


==================================================================

### EXPORT FUNC 180038440 (157 bytes) name=FID_conflict:_invoke_watson

/* Library Function - Multiple Matches With Different Base Names
    void __cdecl _invoke_watson(unsigned short const * __ptr64,unsigned short const *
   __ptr64,unsigned short const * __ptr64,unsigned int,unsigned __int64)
    _invoke_watson
   
   Library: Visual Studio 2005 Release */

void __cdecl
FID_conflict__invoke_watson
          (wchar_t *param_1,wchar_t *param_2,wchar_t *param_3,uint param_4,uintptr_t param_5)

{
  BOOL BVar1;
  LONG LVar2;
  HANDLE hProcess;
  _EXCEPTION_POINTERS local_588;
  EXCEPTION_RECORD local_578;
  _CONTEXT local_4d8;
  
  RtlCaptureContext(&local_4d8);
  FUN_1800357d0((ulonglong *)&local_578,0,0x98);
  local_578.ExceptionCode = 0xc000000d;
  local_588.ExceptionRecord = &local_578;
  local_588.ContextRecord = &local_4d8;
  BVar1 = IsDebuggerPresent();
  SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)0x0);
  LVar2 = UnhandledExceptionFilter(&local_588);
  if ((LVar2 == 0) && (BVar1 == 0)) {
    FUN_180045a30();
  }
  hProcess = GetCurrentProcess();
  TerminateProcess(hProcess,0xc000000d);
  return;
}


==================================================================

### EXPORT FUNC 1800384e0 (258 bytes) name=FUN_1800384e0

void FUN_1800384e0(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined4 param_4,
                  undefined8 param_5)

{
  BOOL BVar1;
  LONG LVar2;
  code *pcVar3;
  HANDLE hProcess;
  _EXCEPTION_POINTERS local_588;
  EXCEPTION_RECORD local_578;
  _CONTEXT local_4d8;
  
  pcVar3 = (code *)FUN_180037d20(DAT_180072e08);
  if (pcVar3 == (code *)0x0) {
    FUN_180045a30();
    RtlCaptureContext(&local_4d8);
    FUN_1800357d0((ulonglong *)&local_578,0,0x98);
    local_578.ExceptionCode = 0xc000000d;
    local_588.ExceptionRecord = &local_578;
    local_588.ContextRecord = &local_4d8;
    BVar1 = IsDebuggerPresent();
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)0x0);
    LVar2 = UnhandledExceptionFilter(&local_588);
    if ((LVar2 == 0) && (BVar1 == 0)) {
      FUN_180045a30();
    }
    hProcess = GetCurrentProcess();
    TerminateProcess(hProcess,0xc000000d);
  }
  else {
    (*pcVar3)(param_1,param_2,param_3,param_4,param_5);
  }
  return;
}


==================================================================

### EXPORT FUNC 1800385f0 (454 bytes) name=FUN_1800385f0

ulonglong FUN_1800385f0(undefined4 param_1,FILE *param_2)

{
  byte bVar1;
  uint uVar2;
  uint uVar3;
  DWORD *pDVar4;
  undefined **ppuVar5;
  undefined7 extraout_var;
  longlong lVar6;
  undefined *puVar7;
  uint uVar8;
  undefined4 local_res8 [2];
  
  local_res8[0] = param_1;
  uVar2 = FUN_180047880((longlong)param_2);
  uVar8 = param_2->_flag;
  if ((uVar8 & 0x82) == 0) {
    pDVar4 = FUN_180035b40();
    *pDVar4 = 9;
    param_2->_flag = param_2->_flag | 0x20;
    return 0xffffffff;
  }
  if ((uVar8 & 0x40) != 0) {
    pDVar4 = FUN_180035b40();
    *pDVar4 = 0x22;
    param_2->_flag = param_2->_flag | 0x20;
    return 0xffffffff;
  }
  uVar3 = 0;
  if ((uVar8 & 1) != 0) {
    param_2->_cnt = 0;
    if ((uVar8 & 0x10) == 0) {
      param_2->_flag = uVar8 | 0x20;
      return 0xffffffff;
    }
    param_2->_ptr = param_2->_base;
    param_2->_flag = uVar8 & 0xfffffffe;
  }
  uVar8 = param_2->_flag;
  param_2->_cnt = 0;
  param_2->_flag = uVar8 & 0xffffffef | 2;
  if (((uVar8 & 0x10c) == 0) &&
     (((ppuVar5 = FUN_180047620(), param_2 != (FILE *)(ppuVar5 + 6) &&
       (ppuVar5 = FUN_180047620(), param_2 != (FILE *)(ppuVar5 + 0xc))) ||
      (bVar1 = FUN_1800475a0(uVar2), (int)CONCAT71(extraout_var,bVar1) == 0)))) {
    _getbuf(param_2);
  }
  if ((param_2->_flag & 0x108U) == 0) {
    uVar8 = 1;
    uVar3 = FUN_1800473f0(uVar2,(WCHAR *)local_res8,1);
  }
  else {
    uVar8 = *(int *)&param_2->_ptr - *(int *)&param_2->_base;
    param_2->_ptr = (char *)((longlong)param_2->_base + 1);
    param_2->_cnt = param_2->_bufsiz + -1;
    if ((int)uVar8 < 1) {
      if ((uVar2 == 0xffffffff) || (uVar2 == 0xfffffffe)) {
        puVar7 = &DAT_18006d970;
      }
      else {
        puVar7 = (undefined *)
                 ((ulonglong)(uVar2 & 0x1f) * 0x50 + (&DAT_1800db4e0)[(longlong)(int)uVar2 >> 5]);
      }
      if (((puVar7[8] & 0x20) != 0) && (lVar6 = FUN_180046b10(uVar2,0,2), lVar6 == -1))
      goto LAB_180038793;
      *param_2->_base = (byte)local_res8[0];
    }
    else {
      uVar3 = FUN_1800473f0(uVar2,(WCHAR *)param_2->_base,uVar8);
      *param_2->_base = (byte)local_res8[0];
    }
  }
  if (uVar3 == uVar8) {
    return (ulonglong)(byte)local_res8[0];
  }
LAB_180038793:
  param_2->_flag = param_2->_flag | 0x20;
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 1800387c0 (139 bytes) name=FUN_1800387c0

void FUN_1800387c0(byte param_1,int param_2,FILE *param_3,int *param_4)

{
  int *piVar1;
  uint uVar2;
  ulonglong uVar3;
  
  do {
    if (param_2 < 1) {
      return;
    }
    param_2 = param_2 + -1;
    if (((param_3->_flag & 0x40) == 0) || (param_3->_base != (char *)0x0)) {
      piVar1 = &param_3->_cnt;
      *piVar1 = *piVar1 + -1;
      if (*piVar1 < 0) {
        uVar3 = FUN_1800385f0((int)(char)param_1,param_3);
        uVar2 = (uint)uVar3;
      }
      else {
        *param_3->_ptr = param_1;
        param_3->_ptr = param_3->_ptr + 1;
        uVar2 = (uint)param_1;
      }
      if (uVar2 == 0xffffffff) {
        *param_4 = -1;
        return;
      }
    }
    *param_4 = *param_4 + 1;
    if (*param_4 == -1) {
      return;
    }
  } while( true );
}


==================================================================

### EXPORT FUNC 180038850 (3911 bytes) name=FUN_180038850

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

uint FUN_180038850(FILE *param_1,byte *param_2,longlong *param_3,WCHAR *param_4)

{
  int *piVar1;
  byte bVar2;
  short *psVar3;
  uint *puVar4;
  WCHAR WVar5;
  char cVar6;
  ushort uVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  DWORD *pDVar13;
  undefined *puVar14;
  undefined6 extraout_var_00;
  undefined7 extraout_var;
  code *pcVar15;
  ulonglong uVar16;
  longlong lVar17;
  undefined *puVar18;
  WCHAR *pWVar19;
  WCHAR *pWVar20;
  uint uVar21;
  byte *pbVar22;
  byte bVar23;
  int iVar24;
  bool bVar25;
  undefined1 auStackY_318 [32];
  uint local_2d8;
  uint local_2d4;
  uint local_2d0;
  int local_2cc;
  int local_2c8;
  uint local_2c4;
  byte local_2c0;
  char local_2bf;
  WCHAR *local_2b8;
  int local_2b0;
  int local_2ac;
  int local_2a8;
  undefined4 local_2a4;
  pthreadlocinfo local_2a0;
  pthreadmbcinfo local_298;
  DWORD *local_290;
  char local_288;
  undefined4 local_280;
  WCHAR *local_278;
  int local_270 [2];
  WCHAR *local_268;
  byte *local_260;
  ulonglong local_258 [63];
  undefined1 auStack_59 [9];
  ulonglong local_50;
  
  local_50 = DAT_18006cea0 ^ (ulonglong)auStackY_318;
  uVar11 = 0;
  uVar21 = 0;
  local_2a4 = 0;
  local_2d8 = 0;
  local_2b0 = 0;
  local_2d0 = 0;
  local_2c4 = 0;
  local_2a8 = 0;
  local_2cc = 0;
  local_288 = '\0';
  local_2b8 = param_4;
  if (param_3 == (longlong *)0x0) {
    local_290 = FUN_1800380a0();
    local_2a0 = *(pthreadlocinfo *)(local_290 + 0x30);
    local_298 = *(pthreadmbcinfo *)(local_290 + 0x2e);
    if ((local_2a0 != (pthreadlocinfo)PTR_DAT_18006d6f0) &&
       ((_DAT_18006d578 & local_290[0x32]) == 0)) {
      local_2a0 = __updatetlocinfo();
    }
    if ((local_298 != (pthreadmbcinfo)PTR_DAT_18006d470) &&
       ((_DAT_18006d578 & local_290[0x32]) == 0)) {
      local_298 = __updatetmbcinfo();
    }
    if ((local_290[0x32] & 2) == 0) {
      local_290[0x32] = local_290[0x32] | 2;
      local_288 = '\x01';
    }
  }
  else {
    local_2a0 = (pthreadlocinfo)*param_3;
    local_298 = (pthreadmbcinfo)param_3[1];
  }
  if (param_1 == (FILE *)0x0) {
    pDVar13 = FUN_180035b40();
    *pDVar13 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    if (local_288 != '\0') {
      local_290[0x32] = local_290[0x32] & 0xfffffffd;
    }
    return 0xffffffff;
  }
  if ((param_1->_flag & 0x40) == 0) {
    iVar8 = FUN_180047880((longlong)param_1);
    puVar18 = &DAT_18006d970;
    if ((iVar8 == -1) || (iVar8 = FUN_180047880((longlong)param_1), iVar8 == -2)) {
      puVar14 = &DAT_18006d970;
    }
    else {
      iVar8 = FUN_180047880((longlong)param_1);
      lVar17 = (&DAT_1800db4e0)[(longlong)iVar8 >> 5];
      uVar9 = FUN_180047880((longlong)param_1);
      puVar14 = (undefined *)((ulonglong)(uVar9 & 0x1f) * 0x50 + lVar17);
    }
    if ((puVar14[0x38] & 0x7f) == 0) {
      iVar8 = FUN_180047880((longlong)param_1);
      if ((iVar8 != -1) && (iVar8 = FUN_180047880((longlong)param_1), iVar8 != -2)) {
        iVar8 = FUN_180047880((longlong)param_1);
        lVar17 = (&DAT_1800db4e0)[(longlong)iVar8 >> 5];
        uVar9 = FUN_180047880((longlong)param_1);
        puVar18 = (undefined *)((ulonglong)(uVar9 & 0x1f) * 0x50 + lVar17);
      }
      param_4 = local_2b8;
      if ((puVar18[0x38] & 0x80) == 0) goto LAB_180038ab3;
    }
    pDVar13 = FUN_180035b40();
    *pDVar13 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    bVar25 = local_288 == '\0';
  }
  else {
LAB_180038ab3:
    if (param_2 != (byte *)0x0) {
      bVar23 = *param_2;
      local_2ac = 0;
      local_2d4 = 0;
      local_2c8 = 0;
      local_278 = (WCHAR *)0x0;
      pWVar20 = local_268;
      uVar9 = uVar11;
      while (bVar23 != 0) {
        pbVar22 = param_2 + 1;
        if ((int)uVar21 < 0) break;
        uVar10 = 0;
        if ((byte)(bVar23 - 0x20) < 0x59) {
          uVar10 = *(byte *)((longlong)&DAT_180057370 + (longlong)(char)bVar23) & 0xf;
        }
        local_2ac = (int)(char)(&DAT_180057390)[(longlong)local_2ac + (longlong)(int)uVar10 * 8] >>
                    4;
        local_260 = pbVar22;
        switch(local_2ac) {
        case 0:
switchD_180038bb4_caseD_0:
          uVar10 = (uint)bVar23;
          local_2cc = 0;
          uVar7 = FUN_180047bb0((uint)bVar23,&local_2a0);
          if ((int)CONCAT62(extraout_var_00,uVar7) != 0) {
            if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
              piVar1 = &param_1->_cnt;
              *piVar1 = *piVar1 + -1;
              if (*piVar1 < 0) {
                uVar16 = FUN_1800385f0((int)(char)bVar23,param_1);
                uVar10 = (uint)uVar16;
              }
              else {
                *param_1->_ptr = bVar23;
                param_1->_ptr = param_1->_ptr + 1;
              }
              if (uVar10 == 0xffffffff) {
                uVar21 = 0xffffffff;
              }
              else {
                uVar21 = uVar21 + 1;
              }
            }
            else {
              uVar21 = uVar21 + 1;
            }
            bVar23 = *pbVar22;
            pbVar22 = param_2 + 2;
            if (bVar23 == 0) {
LAB_18003970a:
              pDVar13 = FUN_180035b40();
              *pDVar13 = 0x16;
              FUN_1800384e0(0,0,0,0,0);
              bVar25 = local_288 == '\0';
              goto LAB_180039735;
            }
          }
          if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
            piVar1 = &param_1->_cnt;
            *piVar1 = *piVar1 + -1;
            if (*piVar1 < 0) {
              uVar16 = FUN_1800385f0((int)(char)bVar23,param_1);
              uVar10 = (uint)uVar16;
            }
            else {
              *param_1->_ptr = bVar23;
              param_1->_ptr = param_1->_ptr + 1;
              uVar10 = (uint)bVar23;
            }
            if (uVar10 == 0xffffffff) {
              local_2d4 = 0xffffffff;
              local_260 = pbVar22;
              uVar21 = 0xffffffff;
            }
            else {
              local_2d4 = uVar21 + 1;
              local_260 = pbVar22;
              uVar21 = local_2d4;
            }
          }
          else {
            local_2d4 = uVar21 + 1;
            local_260 = pbVar22;
            uVar21 = local_2d4;
          }
          break;
        case 1:
          uVar11 = 0xffffffff;
          local_280 = 0;
          local_2a8 = 0;
          local_2b0 = 0;
          local_2c4 = 0;
          local_2d0 = 0xffffffff;
          local_2d8 = 0;
          local_2cc = 0;
          uVar9 = 0;
          break;
        case 2:
          if (bVar23 == 0x20) {
            local_2d8 = uVar9 | 2;
            uVar9 = local_2d8;
          }
          else if (bVar23 == 0x23) {
            local_2d8 = uVar9 | 0x80;
            uVar9 = local_2d8;
          }
          else if (bVar23 == 0x2b) {
            local_2d8 = uVar9 | 1;
            uVar9 = local_2d8;
          }
          else if (bVar23 == 0x2d) {
            local_2d8 = uVar9 | 4;
            uVar9 = local_2d8;
          }
          else if (bVar23 == 0x30) {
            local_2d8 = uVar9 | 8;
            uVar9 = local_2d8;
          }
          break;
        case 3:
          if (bVar23 == 0x2a) {
            local_2b0 = *(int *)param_4;
            local_2b8 = param_4 + 4;
            if (local_2b0 < 0) {
              local_2d8 = uVar9 | 4;
              local_2b0 = -local_2b0;
              uVar9 = local_2d8;
            }
          }
          else {
            local_2b0 = (char)bVar23 + -0x30 + local_2b0 * 10;
          }
          break;
        case 4:
          local_2d0 = 0;
          uVar11 = 0;
          break;
        case 5:
          if (bVar23 == 0x2a) {
            local_2d0 = *(uint *)param_4;
            local_2b8 = param_4 + 4;
            uVar11 = local_2d0;
            if ((int)local_2d0 < 0) {
              local_2d0 = 0xffffffff;
              uVar11 = 0xffffffff;
            }
          }
          else {
            local_2d0 = (char)bVar23 + -0x30 + uVar11 * 10;
            uVar11 = local_2d0;
          }
          break;
        case 6:
          if (bVar23 == 0x49) {
            bVar2 = *pbVar22;
            local_2d8 = uVar9 | 0x8000;
            if ((bVar2 == 0x36) && (param_2[2] == 0x34)) {
              local_2d8 = uVar9 | 0x8000;
              local_260 = param_2 + 3;
              uVar9 = local_2d8;
            }
            else if ((bVar2 == 0x33) && (param_2[2] == 0x32)) {
              local_2d8 = uVar9 & 0xffff7fff;
              local_260 = param_2 + 3;
              uVar9 = local_2d8;
            }
            else {
              uVar9 = local_2d8;
              if (((((bVar2 != 100) && (bVar2 != 0x69)) && (bVar2 != 0x6f)) &&
                  ((bVar2 != 0x75 && (bVar2 != 0x78)))) && (bVar2 != 0x58)) {
                local_2ac = 0;
                goto switchD_180038bb4_caseD_0;
              }
            }
          }
          else if (bVar23 == 0x68) {
            local_2d8 = uVar9 | 0x20;
            uVar9 = local_2d8;
          }
          else if (bVar23 == 0x6c) {
            if (*pbVar22 == 0x6c) {
              local_2d8 = uVar9 | 0x1000;
              local_260 = param_2 + 2;
              uVar9 = local_2d8;
            }
            else {
              local_2d8 = uVar9 | 0x10;
              uVar9 = local_2d8;
            }
          }
          else if (bVar23 == 0x77) {
            local_2d8 = uVar9 | 0x800;
            uVar9 = local_2d8;
          }
          break;
        case 7:
          switch(bVar23) {
          case 0x41:
          case 0x45:
          case 0x47:
            local_280 = 1;
            bVar23 = bVar23 + 0x20;
          case 0x61:
          case 0x65:
          case 0x66:
          case 0x67:
            local_2d8 = uVar9 | 0x40;
            iVar8 = 0x200;
            pWVar20 = (WCHAR *)local_258;
            if ((int)uVar11 < 0) {
              uVar11 = 6;
              local_2d0 = 6;
              iVar24 = 0x200;
            }
            else {
              iVar24 = iVar8;
              if (uVar11 == 0) {
                if (bVar23 == 0x67) {
                  uVar11 = 1;
                  local_2d0 = 1;
                }
              }
              else {
                if ((int)uVar11 < 0x201) {
                  if ((int)uVar11 < 0xa4) goto LAB_180039171;
                }
                else {
                  uVar11 = 0x200;
                  local_2d0 = 0x200;
                }
                iVar24 = uVar11 + 0x15d;
                local_278 = (WCHAR *)FUN_180040de0((longlong)iVar24);
                pWVar20 = local_278;
                if (local_278 == (WCHAR *)0x0) {
                  uVar11 = 0xa3;
                  local_2d0 = 0xa3;
                  pWVar20 = (WCHAR *)local_258;
                  iVar24 = iVar8;
                }
              }
            }
LAB_180039171:
            local_268 = *(WCHAR **)local_2b8;
            local_2b8 = local_2b8 + 4;
            pcVar15 = (code *)FUN_180037d20((INT_PTR)PTR_LAB_18006dc70);
            (*pcVar15)(&local_268,pWVar20,(longlong)iVar24);
            if (((uVar9 & 0x80) != 0) && (uVar11 == 0)) {
              pcVar15 = (code *)FUN_180037d20(DAT_18006dc88);
              (*pcVar15)(pWVar20,&local_2a0);
            }
            if ((bVar23 == 0x67) && ((uVar9 & 0x80) == 0)) {
              pcVar15 = (code *)FUN_180037d20((INT_PTR)PTR_LAB_18006dc80);
              (*pcVar15)(pWVar20,&local_2a0);
            }
            if ((char)*pWVar20 == '-') {
              local_2d8 = uVar9 | 0x140;
              pWVar20 = (WCHAR *)((longlong)pWVar20 + 1);
            }
            lVar17 = -1;
            pWVar19 = pWVar20;
            do {
              if (lVar17 == 0) break;
              lVar17 = lVar17 + -1;
              WVar5 = *pWVar19;
              pWVar19 = (WCHAR *)((longlong)pWVar19 + 1);
            } while ((char)WVar5 != '\0');
            local_2c8 = ~(uint)lVar17 - 1;
            uVar9 = local_2d8;
            break;
          case 0x42:
          case 0x44:
          case 0x46:
          case 0x48:
          case 0x49:
          case 0x4a:
          case 0x4b:
          case 0x4c:
          case 0x4d:
          case 0x4e:
          case 0x4f:
          case 0x50:
          case 0x51:
          case 0x52:
          case 0x54:
          case 0x55:
          case 0x56:
          case 0x57:
          case 0x59:
          case 0x5b:
          case 0x5c:
          case 0x5d:
          case 0x5e:
          case 0x5f:
          case 0x60:
          case 0x62:
          case 0x68:
          case 0x6a:
          case 0x6b:
          case 0x6c:
          case 0x6d:
          case 0x71:
          case 0x72:
          case 0x74:
          case 0x76:
          case 0x77:
            break;
          case 0x43:
            if ((uVar9 & 0x830) == 0) {
              local_2d8 = uVar9 | 0x800;
              uVar9 = local_2d8;
            }
          case 99:
            if ((uVar9 & 0x810) == 0) {
              local_2b8 = param_4 + 4;
              local_2c8 = 1;
              local_258[0]._0_1_ = (char)*param_4;
            }
            else {
              local_2b8 = param_4 + 4;
              iVar8 = FUN_180047b90(&local_2c8,local_258,0x200,*param_4);
              if (iVar8 != 0) {
                local_2a8 = 1;
                pWVar20 = (WCHAR *)local_258;
                break;
              }
            }
            pWVar20 = (WCHAR *)local_258;
            break;
          case 0x53:
            if ((uVar9 & 0x830) == 0) {
              local_2d8 = uVar9 | 0x800;
              uVar9 = local_2d8;
            }
          case 0x73:
            pWVar19 = *(WCHAR **)param_4;
            uVar10 = uVar11;
            if (uVar11 == 0xffffffff) {
              uVar10 = 0x7fffffff;
            }
            local_2b8 = param_4 + 4;
            if ((uVar9 & 0x810) == 0) {
              pWVar20 = pWVar19;
              if (pWVar19 == (WCHAR *)0x0) {
                pWVar19 = (WCHAR *)PTR_DAT_18006d718;
                pWVar20 = (WCHAR *)PTR_DAT_18006d718;
              }
              for (; (uVar10 != 0 && (uVar10 = uVar10 - 1, (char)*pWVar19 != '\0'));
                  pWVar19 = (WCHAR *)((longlong)pWVar19 + 1)) {
              }
              local_2c8 = (int)pWVar19 - (int)pWVar20;
            }
            else {
              if (pWVar19 == (WCHAR *)0x0) {
                pWVar19 = (WCHAR *)PTR_DAT_18006d720;
              }
              local_2cc = 1;
              for (pWVar20 = pWVar19; (uVar10 != 0 && (uVar10 = uVar10 - 1, *pWVar20 != L'\0'));
                  pWVar20 = pWVar20 + 1) {
              }
              local_2c8 = (int)((longlong)pWVar20 - (longlong)pWVar19 >> 1);
              pWVar20 = pWVar19;
            }
            break;
          case 0x58:
            goto switchD_180038ef8_caseD_58;
          case 0x5a:
            psVar3 = *(short **)param_4;
            local_2b8 = param_4 + 4;
            if ((psVar3 == (short *)0x0) ||
               (pWVar20 = *(WCHAR **)(psVar3 + 4), pWVar20 == (WCHAR *)0x0)) {
              lVar17 = -1;
              pWVar20 = (WCHAR *)PTR_DAT_18006d718;
              do {
                if (lVar17 == 0) break;
                lVar17 = lVar17 + -1;
                WVar5 = *pWVar20;
                pWVar20 = (WCHAR *)((longlong)pWVar20 + 1);
              } while ((char)WVar5 != '\0');
              local_2c8 = ~(uint)lVar17 - 1;
              pWVar20 = (WCHAR *)PTR_DAT_18006d718;
            }
            else if ((uVar9 >> 0xb & 1) == 0) {
              local_2c8 = (int)*psVar3;
              local_2cc = 0;
            }
            else {
              local_2cc = 1;
              local_2c8 = (int)*psVar3 / 2;
            }
            break;
          case 100:
          case 0x69:
            local_2d8 = uVar9 | 0x40;
            iVar8 = 10;
            uVar9 = local_2d8;
            goto LAB_1800392c9;
          case 0x6e:
            local_2b8 = param_4 + 4;
            puVar4 = *(uint **)param_4;
            bVar25 = FUN_1800478c0();
            if ((int)CONCAT71(extraout_var,bVar25) == 0) goto LAB_18003970a;
            if ((uVar9 & 0x20) == 0) {
              *puVar4 = uVar21;
              local_2a8 = 1;
            }
            else {
              *(short *)puVar4 = (short)uVar21;
              local_2a8 = 1;
            }
            goto LAB_180039695;
          case 0x6f:
            iVar8 = 8;
            if ((char)uVar9 < '\0') {
              local_2d8 = uVar9 | 0x200;
              uVar9 = local_2d8;
            }
            goto LAB_1800392c9;
          case 0x70:
            local_2d8 = uVar9 | 0x8000;
            uVar11 = 0x10;
            uVar9 = local_2d8;
switchD_180038ef8_caseD_58:
            cVar6 = '\a';
            local_2a4 = 7;
LAB_180039288:
            iVar8 = 0x10;
            if ((char)uVar9 < '\0') {
              local_2bf = cVar6 + 'Q';
              local_2c0 = 0x30;
              local_2c4 = 2;
            }
            goto LAB_1800392c9;
          case 0x75:
            iVar8 = 10;
LAB_1800392c9:
            if (uVar9 >> 0xf == 0) {
              if ((uVar9 >> 0xc & 1) == 0) {
                if ((uVar9 & 0x20) == 0) {
                  if ((uVar9 & 0x40) == 0) {
                    uVar16 = (ulonglong)*(uint *)param_4;
                  }
                  else {
                    uVar16 = (ulonglong)*(int *)param_4;
                  }
                }
                else if ((uVar9 & 0x40) == 0) {
                  uVar16 = (ulonglong)(ushort)*param_4;
                }
                else {
                  uVar16 = (ulonglong)*param_4;
                }
              }
              else {
                uVar16 = *(ulonglong *)param_4;
              }
            }
            else {
              uVar16 = *(ulonglong *)param_4;
            }
            local_2b8 = param_4 + 4;
            if (((uVar9 & 0x40) != 0) && ((longlong)uVar16 < 0)) {
              uVar16 = -uVar16;
              uVar9 = uVar9 | 0x100;
              local_2d8 = uVar9;
            }
            if ((uVar9 >> 0xf == 0) && ((uVar9 >> 0xc & 1) == 0)) {
              uVar16 = uVar16 & 0xffffffff;
            }
            if ((int)uVar11 < 0) {
              uVar11 = 1;
            }
            else {
              local_2d8 = uVar9 & 0xfffffff7;
              if (0x200 < (int)uVar11) {
                uVar11 = 0x200;
              }
            }
            pWVar19 = (WCHAR *)auStack_59;
            if (uVar16 == 0) {
              local_2c4 = 0;
            }
            while ((local_2d0 = uVar11 - 1, 0 < (int)uVar11 || (uVar16 != 0))) {
              uVar11 = (int)(uVar16 % (ulonglong)(longlong)iVar8) + 0x30;
              cVar6 = (char)uVar11;
              if (0x39 < uVar11) {
                cVar6 = cVar6 + (char)local_2a4;
              }
              *(char *)pWVar19 = cVar6;
              pWVar19 = (WCHAR *)((longlong)pWVar19 + -1);
              uVar16 = uVar16 / (ulonglong)(longlong)iVar8;
              uVar11 = local_2d0;
            }
            local_2c8 = (int)auStack_59 - (int)pWVar19;
            pWVar20 = (WCHAR *)((longlong)pWVar19 + 1);
            uVar11 = local_2d0;
            uVar9 = local_2d8;
            if (((local_2d8 >> 9 & 1) != 0) && ((local_2c8 == 0 || (*(char *)pWVar20 != '0')))) {
              local_2c8 = local_2c8 + 1;
              *(undefined1 *)pWVar19 = 0x30;
              pWVar20 = pWVar19;
            }
            break;
          case 0x78:
            cVar6 = '\'';
            local_2a4 = 0x27;
            goto LAB_180039288;
          }
          iVar8 = local_2cc;
          if (local_2a8 == 0) {
            if ((uVar9 & 0x40) != 0) {
              if ((uVar9 >> 8 & 1) == 0) {
                if ((uVar9 & 1) == 0) {
                  if ((uVar9 & 2) != 0) {
                    local_2c0 = 0x20;
                    local_2c4 = 1;
                  }
                }
                else {
                  local_2c0 = 0x2b;
                  local_2c4 = 1;
                }
              }
              else {
                local_2c0 = 0x2d;
                local_2c4 = 1;
              }
            }
            uVar21 = local_2c4;
            iVar24 = (local_2b0 - local_2c8) - local_2c4;
            if ((uVar9 & 0xc) == 0) {
              FUN_1800387c0(0x20,iVar24,param_1,(int *)&local_2d4);
            }
            FUN_18003fce0(&local_2c0,uVar21,param_1,(int *)&local_2d4);
            if (((uVar9 & 8) != 0) && ((uVar9 & 4) == 0)) {
              FUN_1800387c0(0x30,iVar24,param_1,(int *)&local_2d4);
            }
            if ((iVar8 == 0) ||
               (pWVar19 = pWVar20, iVar8 = local_2c8, uVar21 = local_2d4, local_2c8 < 1)) {
              FUN_18003fce0((byte *)pWVar20,local_2c8,param_1,(int *)&local_2d4);
              uVar21 = local_2d4;
            }
            else {
              do {
                iVar8 = iVar8 + -1;
                iVar12 = FUN_180047b90(local_270,(ulonglong *)(auStack_59 + 1),6,*pWVar19);
                if ((iVar12 != 0) || (local_270[0] == 0)) {
                  uVar21 = 0xffffffff;
                  local_2d4 = 0xffffffff;
                  uVar11 = local_2d0;
                  goto LAB_180039695;
                }
                pbVar22 = auStack_59 + 1;
                iVar12 = local_270[0];
                if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
joined_r0x000180039563:
                  do {
                    if (iVar12 < 1) goto LAB_180039613;
                    bVar23 = *pbVar22;
                    iVar12 = iVar12 + -1;
                    if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
                      piVar1 = &param_1->_cnt;
                      *piVar1 = *piVar1 + -1;
                      if (*piVar1 < 0) {
                        uVar16 = FUN_1800385f0((int)(char)bVar23,param_1);
                        uVar11 = (uint)uVar16;
                      }
                      else {
                        *param_1->_ptr = bVar23;
                        param_1->_ptr = param_1->_ptr + 1;
                        uVar11 = (uint)bVar23;
                      }
                      if (uVar11 == 0xffffffff) {
                        local_2d4 = 0xffffffff;
                      }
                      else {
                        local_2d4 = uVar21 + 1;
                      }
                    }
                    else {
                      local_2d4 = uVar21 + 1;
                    }
                    uVar21 = local_2d4;
                    pbVar22 = pbVar22 + 1;
                    if (local_2d4 == 0xffffffff) {
                      pDVar13 = FUN_180035b40();
                      if (*pDVar13 != 0x2a) goto LAB_180039613;
                      if (((param_1->_flag & 0x40) != 0) && (param_1->_base == (char *)0x0)) {
                        local_2d4 = 0;
                        uVar21 = local_2d4;
                        goto joined_r0x000180039563;
                      }
                      piVar1 = &param_1->_cnt;
                      *piVar1 = *piVar1 + -1;
                      if (*piVar1 < 0) {
                        uVar16 = FUN_1800385f0(0x3f,param_1);
                        if ((int)uVar16 == -1) {
                          local_2d4 = 0xffffffff;
                          uVar21 = local_2d4;
                          goto joined_r0x000180039563;
                        }
                      }
                      else {
                        *param_1->_ptr = '?';
                        param_1->_ptr = param_1->_ptr + 1;
                      }
                      local_2d4 = 0;
                      uVar21 = local_2d4;
                    }
                  } while( true );
                }
                local_2d4 = uVar21 + local_270[0];
                uVar21 = local_2d4;
LAB_180039613:
                pWVar19 = pWVar19 + 1;
                uVar9 = local_2d8;
              } while (iVar8 != 0);
            }
            uVar11 = local_2d0;
            if ((-1 < (int)uVar21) && ((uVar9 & 4) != 0)) {
              FUN_1800387c0(0x20,iVar24,param_1,(int *)&local_2d4);
              uVar11 = local_2d0;
              uVar21 = local_2d4;
            }
          }
LAB_180039695:
          uVar9 = local_2d8;
          if (local_278 != (WCHAR *)0x0) {
            FUN_180034a70(local_278);
            local_278 = (WCHAR *)0x0;
          }
        }
        param_2 = local_260;
        param_4 = local_2b8;
        bVar23 = *local_260;
      }
      if (local_288 == '\0') {
        return uVar21;
      }
      local_290[0x32] = local_290[0x32] & 0xfffffffd;
      return uVar21;
    }
    pDVar13 = FUN_180035b40();
    *pDVar13 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    bVar25 = local_288 == '\0';
  }
LAB_180039735:
  if (!bVar25) {
    local_290[0x32] = local_290[0x32] & 0xfffffffd;
  }
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 180039830 (185 bytes) name=FUN_180039830

void FUN_180039830(WCHAR *param_1,int param_2,FILE *param_3,int *param_4)

{
  WCHAR WVar1;
  DWORD *pDVar2;
  
  if (((param_3->_flag & 0x40) == 0) || (param_3->_base != (char *)0x0)) {
    while (0 < param_2) {
      param_2 = param_2 + -1;
      if ((((param_3->_flag & 0x40) == 0) || (param_3->_base != (char *)0x0)) &&
         (WVar1 = FUN_180047d70(*param_1,param_3), WVar1 == L'\xffff')) {
        *param_4 = -1;
      }
      else {
        *param_4 = *param_4 + 1;
      }
      param_1 = param_1 + 1;
      if (*param_4 == -1) {
        pDVar2 = FUN_180035b40();
        if (*pDVar2 != 0x2a) {
          return;
        }
        if ((((param_3->_flag & 0x40) == 0) || (param_3->_base != (char *)0x0)) &&
           (WVar1 = FUN_180047d70(L'?',param_3), WVar1 == L'\xffff')) {
          *param_4 = -1;
        }
        else {
          *param_4 = *param_4 + 1;
        }
      }
    }
  }
  else {
    *param_4 = *param_4 + param_2;
  }
  return;
}


==================================================================

### EXPORT FUNC 1800398f0 (3749 bytes) name=FUN_1800398f0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

ulonglong FUN_1800398f0(FILE *param_1,WCHAR *param_2,longlong *param_3,WCHAR *param_4)

{
  WCHAR WVar1;
  short *psVar2;
  int *piVar3;
  bool bVar4;
  char cVar5;
  ushort uVar6;
  short sVar7;
  WCHAR WVar8;
  int iVar9;
  DWORD *pDVar10;
  undefined6 extraout_var_00;
  undefined7 extraout_var;
  code *pcVar11;
  uint uVar12;
  longlong lVar13;
  WCHAR *pWVar14;
  ulonglong uVar15;
  uint uVar16;
  int iVar17;
  char *pcVar18;
  WCHAR *pWVar19;
  ulonglong uVar20;
  ulonglong uVar21;
  ulonglong uVar22;
  ulonglong uVar23;
  uint uVar24;
  int iVar25;
  ulonglong uVar26;
  uint uVar27;
  ulonglong uVar28;
  undefined1 auStackY_518 [32];
  uint local_4d8;
  uint local_4d4;
  uint local_4d0;
  uint local_4cc;
  uint local_4c8;
  WCHAR *local_4c0;
  int local_4b8;
  WCHAR local_4b4;
  short local_4b2;
  WCHAR local_4b0 [2];
  byte local_4ac [4];
  int local_4a8;
  undefined4 local_4a4;
  pthreadlocinfo local_4a0;
  pthreadmbcinfo local_498;
  DWORD *local_490;
  char local_488;
  uint local_480;
  undefined4 local_47c;
  WCHAR *local_478;
  WCHAR *local_470;
  WCHAR *local_468 [2];
  WCHAR local_458 [255];
  undefined2 local_259;
  ulonglong local_58;
  
  local_58 = DAT_18006cea0 ^ (ulonglong)auStackY_518;
  uVar15 = 0;
  local_4a4 = 0;
  local_4d8 = 0;
  local_4c8 = 0;
  local_4d0 = 0;
  local_4cc = 0;
  local_4a8 = 0;
  local_4b8 = 0;
  local_488 = '\0';
  local_4c0 = param_4;
  if (param_3 == (longlong *)0x0) {
    local_490 = FUN_1800380a0();
    local_4a0 = *(pthreadlocinfo *)(local_490 + 0x30);
    local_498 = *(pthreadmbcinfo *)(local_490 + 0x2e);
    if ((*(pthreadlocinfo *)(local_490 + 0x30) != (pthreadlocinfo)PTR_DAT_18006d6f0) &&
       ((_DAT_18006d578 & local_490[0x32]) == 0)) {
      local_4a0 = __updatetlocinfo();
    }
    if ((local_498 != (pthreadmbcinfo)PTR_DAT_18006d470) &&
       ((_DAT_18006d578 & local_490[0x32]) == 0)) {
      local_498 = __updatetmbcinfo();
    }
    if ((local_490[0x32] & 2) == 0) {
      local_490[0x32] = local_490[0x32] | 2;
      local_488 = '\x01';
    }
  }
  else {
    local_4a0 = (pthreadlocinfo)*param_3;
    local_498 = (pthreadmbcinfo)param_3[1];
  }
  if ((param_1 == (FILE *)0x0) || (param_2 == (WCHAR *)0x0)) {
    pDVar10 = FUN_180035b40();
    *pDVar10 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    if (local_488 != '\0') {
      local_490[0x32] = local_490[0x32] & 0xfffffffd;
    }
    uVar15 = 0xffffffff;
  }
  else {
    WVar8 = *param_2;
    local_4d4 = 0;
    local_478 = (WCHAR *)0x0;
    pWVar14 = local_468[0];
    uVar20 = uVar15;
    uVar21 = uVar15;
    uVar22 = uVar15;
    uVar23 = uVar15;
    uVar26 = uVar15;
    uVar28 = uVar15;
    if (WVar8 != L'\0') {
      while( true ) {
        uVar27 = (uint)uVar22;
        uVar16 = (uint)uVar21;
        pWVar19 = param_2 + 1;
        iVar25 = (int)uVar15;
        local_470 = pWVar19;
        if (iVar25 < 0) break;
        if ((ushort)(WVar8 + L'￠') < 0x59) {
          uVar12 = *(byte *)((longlong)&DAT_180057370 + (ulonglong)(ushort)WVar8) & 0xf;
        }
        else {
          uVar12 = 0;
        }
        local_480 = (int)(char)(&DAT_180057390)[(longlong)(int)uVar20 + (longlong)(int)uVar12 * 8]
                    >> 4;
        uVar24 = (uint)uVar26;
        switch((int)(char)(&DAT_180057390)[(longlong)(int)uVar20 + (longlong)(int)uVar12 * 8] >> 4)
        {
        case 0:
switchD_180039b42_caseD_0:
          local_4b8 = 1;
          if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
            WVar8 = FUN_180047d70(WVar8,param_1);
            if (WVar8 == L'\xffff') {
              uVar21 = (ulonglong)local_4d0;
              uVar22 = (ulonglong)local_4cc;
              uVar23 = (ulonglong)local_4c8;
              uVar15 = 0xffffffff;
              local_4d4 = 0xffffffff;
            }
            else {
              uVar21 = (ulonglong)local_4d0;
              uVar22 = (ulonglong)local_4cc;
              uVar23 = (ulonglong)local_4c8;
              local_4d4 = iVar25 + 1;
              uVar15 = (ulonglong)local_4d4;
            }
          }
          else {
            local_4d4 = iVar25 + 1;
            uVar15 = (ulonglong)local_4d4;
          }
          break;
        case 1:
          uVar21 = 0xffffffff;
          local_4d0 = 0xffffffff;
          local_47c = 0;
          local_4a8 = 0;
          uVar23 = 0;
          local_4c8 = 0;
          uVar22 = 0;
          local_4cc = 0;
          uVar26 = 0;
          local_4d8 = 0;
          local_4b8 = 0;
          break;
        case 2:
          if (WVar8 == L' ') {
            local_4d8 = uVar24 | 2;
            uVar26 = (ulonglong)local_4d8;
          }
          else if (WVar8 == L'#') {
            local_4d8 = uVar24 | 0x80;
            uVar26 = (ulonglong)local_4d8;
          }
          else if (WVar8 == L'+') {
            local_4d8 = uVar24 | 1;
            uVar26 = (ulonglong)local_4d8;
          }
          else if (WVar8 == L'-') {
            local_4d8 = uVar24 | 4;
            uVar26 = (ulonglong)local_4d8;
          }
          else if (WVar8 == L'0') {
            local_4d8 = uVar24 | 8;
            uVar26 = (ulonglong)local_4d8;
          }
          break;
        case 3:
          if (WVar8 == L'*') {
            local_4c8 = *(uint *)param_4;
            uVar23 = (ulonglong)local_4c8;
            param_4 = param_4 + 4;
            local_4c0 = param_4;
            if ((int)local_4c8 < 0) {
              local_4d8 = uVar24 | 4;
              uVar26 = (ulonglong)local_4d8;
              local_4c8 = -local_4c8;
              uVar23 = (ulonglong)local_4c8;
            }
          }
          else {
            local_4c8 = ((ushort)WVar8 - 0x30) + (int)uVar23 * 10;
            uVar23 = (ulonglong)local_4c8;
          }
          break;
        case 4:
          uVar21 = 0;
          local_4d0 = 0;
          break;
        case 5:
          if (WVar8 == L'*') {
            local_4d0 = *(uint *)param_4;
            uVar21 = (ulonglong)local_4d0;
            param_4 = param_4 + 4;
            local_4c0 = param_4;
            if ((int)local_4d0 < 0) {
              uVar21 = 0xffffffff;
              local_4d0 = 0xffffffff;
            }
          }
          else {
            local_4d0 = ((ushort)WVar8 - 0x30) + uVar16 * 10;
            uVar21 = (ulonglong)local_4d0;
          }
          break;
        case 6:
          if (WVar8 == L'I') {
            WVar1 = *pWVar19;
            local_4d8 = uVar24 | 0x8000;
            uVar26 = (ulonglong)local_4d8;
            if ((WVar1 == L'6') && (param_2[2] == L'4')) {
              pWVar19 = param_2 + 3;
              local_4d8 = uVar24 | 0x8000;
              uVar26 = (ulonglong)local_4d8;
            }
            else if ((WVar1 == L'3') && (param_2[2] == L'2')) {
              pWVar19 = param_2 + 3;
              local_4d8 = uVar24 & 0xffff7fff;
              uVar26 = (ulonglong)local_4d8;
            }
            else if ((((WVar1 != L'd') && (WVar1 != L'i')) && (WVar1 != L'o')) &&
                    (((WVar1 != L'u' && (WVar1 != L'x')) && (WVar1 != L'X')))) {
              local_480 = 0;
              goto switchD_180039b42_caseD_0;
            }
          }
          else if (WVar8 == L'h') {
            local_4d8 = uVar24 | 0x20;
            uVar26 = (ulonglong)local_4d8;
          }
          else if (WVar8 == L'l') {
            if (*pWVar19 == L'l') {
              pWVar19 = param_2 + 2;
              local_4d8 = uVar24 | 0x1000;
              uVar26 = (ulonglong)local_4d8;
            }
            else {
              local_4d8 = uVar24 | 0x10;
              uVar26 = (ulonglong)local_4d8;
            }
          }
          else if (WVar8 == L'w') {
            local_4d8 = uVar24 | 0x800;
            uVar26 = (ulonglong)local_4d8;
          }
          break;
        case 7:
          switch(WVar8) {
          case L'A':
          case L'E':
          case L'G':
            local_47c = 1;
            WVar8 = WVar8 + L' ';
          case L'a':
          case L'e':
          case L'f':
          case L'g':
            local_4d8 = uVar24 | 0x40;
            iVar25 = 0x200;
            pWVar14 = local_458;
            if ((int)uVar16 < 0) {
              local_4d0 = 6;
              iVar9 = 0x200;
            }
            else {
              iVar9 = iVar25;
              if (uVar16 == 0) {
                if (WVar8 == L'g') {
                  local_4d0 = 1;
                }
              }
              else {
                if ((int)uVar16 < 0x201) {
                  if ((int)uVar16 < 0xa4) goto LAB_18003a0c3;
                }
                else {
                  uVar16 = 0x200;
                  local_4d0 = 0x200;
                }
                local_478 = (WCHAR *)FUN_180040de0((longlong)(int)(uVar16 + 0x15d));
                pWVar14 = local_478;
                param_4 = local_4c0;
                iVar9 = uVar16 + 0x15d;
                if (local_478 == (WCHAR *)0x0) {
                  local_4d0 = 0xa3;
                  pWVar14 = local_458;
                  iVar9 = iVar25;
                }
              }
            }
LAB_18003a0c3:
            uVar16 = local_4d0;
            local_468[0] = *(WCHAR **)param_4;
            local_4c0 = param_4 + 4;
            pcVar11 = (code *)FUN_180037d20((INT_PTR)PTR_LAB_18006dc70);
            (*pcVar11)(local_468,pWVar14,(longlong)iVar9,(int)(char)WVar8);
            if (((uVar26 & 0x80) != 0) && (uVar16 == 0)) {
              pcVar11 = (code *)FUN_180037d20(DAT_18006dc88);
              (*pcVar11)(pWVar14,&local_4a0);
            }
            if ((WVar8 == L'g') && ((uVar26 & 0x80) == 0)) {
              pcVar11 = (code *)FUN_180037d20((INT_PTR)PTR_LAB_18006dc80);
              (*pcVar11)(pWVar14,&local_4a0);
            }
            if ((char)*pWVar14 == '-') {
              local_4d8 = uVar24 | 0x140;
              pWVar14 = (WCHAR *)((longlong)pWVar14 + 1);
            }
            uVar26 = (ulonglong)local_4d8;
            lVar13 = -1;
            pWVar19 = pWVar14;
            do {
              if (lVar13 == 0) break;
              lVar13 = lVar13 + -1;
              WVar8 = *pWVar19;
              pWVar19 = (WCHAR *)((longlong)pWVar19 + 1);
            } while ((char)WVar8 != '\0');
            uVar28 = (ulonglong)(~(uint)lVar13 - 1);
            break;
          case L'C':
            if ((uVar26 & 0x830) == 0) {
              local_4d8 = uVar24 | 0x20;
              uVar26 = (ulonglong)local_4d8;
            }
          case L'c':
            local_4b0[0] = *param_4;
            local_4c0 = param_4 + 4;
            local_4b8 = 1;
            if ((uVar26 & 0x20) == 0) {
              local_458[0] = local_4b0[0];
            }
            else {
              local_4ac[0] = (byte)local_4b0[0];
              local_4ac[1] = 0;
              iVar25 = FUN_180047ff0(local_458,local_4ac,
                                     (longlong)*(int *)((longlong)&local_4a0->pctype + 4),&local_4a0
                                    );
              if (iVar25 < 0) {
                local_4a8 = 1;
                uVar28 = 1;
                pWVar14 = local_458;
                break;
              }
            }
            uVar28 = 1;
            pWVar14 = local_458;
            break;
          case L'S':
            if ((uVar26 & 0x830) == 0) {
              local_4d8 = uVar24 | 0x20;
              uVar26 = (ulonglong)local_4d8;
            }
          case L's':
            pWVar19 = *(WCHAR **)param_4;
            if (uVar16 == 0xffffffff) {
              uVar21 = 0x7fffffff;
            }
            local_4c0 = param_4 + 4;
            uVar16 = (uint)uVar21;
            pWVar14 = pWVar19;
            if ((uVar26 & 0x20) == 0) {
              local_4b8 = 1;
              if (pWVar19 == (WCHAR *)0x0) {
                pWVar19 = (WCHAR *)PTR_DAT_18006d720;
                pWVar14 = (WCHAR *)PTR_DAT_18006d720;
              }
              while (uVar16 != 0) {
                uVar16 = (int)uVar21 - 1;
                uVar21 = (ulonglong)uVar16;
                if (*pWVar19 == L'\0') break;
                pWVar19 = pWVar19 + 1;
              }
              uVar28 = (longlong)pWVar19 - (longlong)pWVar14 >> 1 & 0xffffffff;
            }
            else {
              if (pWVar19 == (WCHAR *)0x0) {
                pWVar14 = (WCHAR *)PTR_DAT_18006d718;
              }
              uVar28 = 0;
              pWVar19 = pWVar14;
              if (0 < (int)uVar16) {
                do {
                  if ((byte)*pWVar19 == 0) break;
                  uVar6 = FUN_180047bb0((uint)(byte)*pWVar19,&local_4a0);
                  if ((int)CONCAT62(extraout_var_00,uVar6) != 0) {
                    pWVar19 = (WCHAR *)((longlong)pWVar19 + 1);
                  }
                  uVar27 = (int)uVar28 + 1;
                  uVar28 = (ulonglong)uVar27;
                  pWVar19 = (WCHAR *)((longlong)pWVar19 + 1);
                } while ((int)uVar27 < (int)uVar16);
              }
            }
            break;
          case L'X':
            goto switchD_180039e10_caseD_58;
          case L'Z':
            psVar2 = *(short **)param_4;
            local_4c0 = param_4 + 4;
            if ((psVar2 == (short *)0x0) ||
               (pWVar14 = *(WCHAR **)(psVar2 + 4), pWVar14 == (WCHAR *)0x0)) {
              uVar21 = 0xffffffffffffffff;
              pcVar18 = PTR_DAT_18006d718;
              do {
                if (uVar21 == 0) break;
                uVar21 = uVar21 - 1;
                cVar5 = *pcVar18;
                pcVar18 = pcVar18 + 1;
              } while (cVar5 != '\0');
              uVar28 = ~uVar21 - 1;
              pWVar14 = (WCHAR *)PTR_DAT_18006d718;
            }
            else if ((uVar24 >> 0xb & 1) == 0) {
              uVar28 = (ulonglong)(uint)(int)*psVar2;
              local_4b8 = 0;
            }
            else {
              local_4b8 = 1;
              uVar28 = (ulonglong)(uint)((int)*psVar2 / 2);
            }
            break;
          case L'd':
          case L'i':
            local_4d8 = uVar24 | 0x40;
            uVar26 = (ulonglong)local_4d8;
            iVar25 = 10;
            goto LAB_18003a1fe;
          case L'n':
            local_4c0 = param_4 + 4;
            piVar3 = *(int **)param_4;
            bVar4 = FUN_1800478c0();
            if ((int)CONCAT71(extraout_var,bVar4) == 0) {
              pDVar10 = FUN_180035b40();
              *pDVar10 = 0x16;
              FUN_1800384e0(0,0,0,0,0);
              if (local_488 != '\0') {
                local_490[0x32] = local_490[0x32] & 0xfffffffd;
              }
              return 0xffffffff;
            }
            if ((uVar26 & 0x20) == 0) {
              *piVar3 = iVar25;
              local_4a8 = 1;
            }
            else {
              *(short *)piVar3 = (short)uVar15;
              local_4a8 = 1;
            }
            goto LAB_18003a653;
          case L'o':
            iVar25 = 8;
            if ((char)uVar26 < '\0') {
              local_4d8 = uVar24 | 0x200;
              uVar26 = (ulonglong)local_4d8;
            }
            goto LAB_18003a1fe;
          case L'p':
            local_4d8 = uVar24 | 0x8000;
            uVar26 = (ulonglong)local_4d8;
            uVar16 = 0x10;
switchD_180039e10_caseD_58:
            sVar7 = 7;
            local_4a4 = 7;
LAB_18003a1c8:
            iVar25 = 0x10;
            if ((char)uVar26 < '\0') {
              local_4b4 = L'0';
              uVar27 = 2;
              local_4b2 = sVar7 + 0x51;
            }
            goto LAB_18003a1fe;
          case L'u':
            iVar25 = 10;
LAB_18003a1fe:
            uVar12 = (uint)uVar26;
            if (uVar12 >> 0xf == 0) {
              if ((uVar12 >> 0xc & 1) == 0) {
                if ((uVar26 & 0x20) == 0) {
                  if ((uVar26 & 0x40) == 0) {
                    uVar21 = (ulonglong)*(uint *)param_4;
                  }
                  else {
                    uVar21 = (ulonglong)(int)*(uint *)param_4;
                  }
                }
                else if ((uVar26 & 0x40) == 0) {
                  uVar21 = (ulonglong)(ushort)*param_4;
                }
                else {
                  uVar21 = (ulonglong)*param_4;
                }
              }
              else {
                uVar21 = *(ulonglong *)param_4;
              }
            }
            else {
              uVar21 = *(ulonglong *)param_4;
            }
            local_4c0 = param_4 + 4;
            if (((uVar26 & 0x40) != 0) && ((longlong)uVar21 < 0)) {
              uVar21 = -uVar21;
              uVar12 = uVar12 | 0x100;
              local_4d8 = uVar12;
            }
            if ((uVar12 >> 0xf == 0) && ((uVar12 >> 0xc & 1) == 0)) {
              uVar21 = uVar21 & 0xffffffff;
            }
            if ((int)uVar16 < 0) {
              uVar16 = 1;
            }
            else {
              local_4d8 = uVar12 & 0xfffffff7;
              if (0x200 < (int)uVar16) {
                uVar16 = 0x200;
              }
            }
            if (uVar21 == 0) {
              uVar27 = 0;
            }
            pWVar19 = &local_259;
            while ((local_4d0 = uVar16 - 1, 0 < (int)uVar16 || (uVar21 != 0))) {
              uVar16 = (int)(uVar21 % (ulonglong)(longlong)iVar25) + 0x30;
              cVar5 = (char)uVar16;
              if (0x39 < uVar16) {
                cVar5 = cVar5 + (char)local_4a4;
              }
              *(char *)pWVar19 = cVar5;
              pWVar19 = (WCHAR *)((longlong)pWVar19 + -1);
              uVar21 = uVar21 / (ulonglong)(longlong)iVar25;
              uVar16 = local_4d0;
            }
            uVar26 = (ulonglong)local_4d8;
            uVar16 = (int)&local_259 - (int)pWVar19;
            pWVar14 = (WCHAR *)((longlong)pWVar19 + 1);
            uVar28 = (ulonglong)uVar16;
            local_4cc = uVar27;
            if (((local_4d8 >> 9 & 1) != 0) && ((uVar16 == 0 || (*(char *)pWVar14 != '0')))) {
              uVar28 = (ulonglong)(uVar16 + 1);
              *(char *)pWVar19 = '0';
              pWVar14 = pWVar19;
            }
            break;
          case L'x':
            sVar7 = 0x27;
            local_4a4 = 0x27;
            goto LAB_18003a1c8;
          }
          if (local_4a8 == 0) {
            if ((uVar26 & 0x40) != 0) {
              if (((uint)uVar26 >> 8 & 1) == 0) {
                if ((uVar26 & 1) == 0) {
                  if ((uVar26 & 2) != 0) {
                    local_4b4 = L' ';
                    local_4cc = 1;
                  }
                }
                else {
                  local_4b4 = L'+';
                  local_4cc = 1;
                }
              }
              else {
                local_4b4 = L'-';
                local_4cc = 1;
              }
            }
            iVar9 = (int)uVar28;
            iVar25 = (local_4c8 - iVar9) - local_4cc;
            if (((local_4d8 & 0xc) == 0) && (iVar17 = iVar25, 0 < iVar25)) {
              while( true ) {
                iVar17 = iVar17 + -1;
                if ((((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) &&
                   (WVar8 = FUN_180047d70(L' ',param_1), WVar8 == L'\xffff')) break;
                local_4d4 = (int)uVar15 + 1;
                uVar15 = (ulonglong)local_4d4;
                if ((local_4d4 == 0xffffffff) || (iVar17 < 1)) goto LAB_18003a41d;
              }
              uVar15 = 0xffffffff;
              local_4d4 = 0xffffffff;
            }
LAB_18003a41d:
            pWVar19 = &local_4b4;
            if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
              if (0 < (int)local_4cc) {
                uVar16 = local_4cc;
                do {
                  uVar16 = uVar16 - 1;
                  if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
                    WVar8 = FUN_180047d70(*pWVar19,param_1);
                    if (WVar8 == L'\xffff') {
                      uVar15 = 0xffffffff;
                      local_4d4 = 0xffffffff;
                    }
                    else {
                      local_4d4 = (int)uVar15 + 1;
                      uVar15 = (ulonglong)local_4d4;
                    }
                  }
                  else {
                    local_4d4 = (int)uVar15 + 1;
                    uVar15 = (ulonglong)local_4d4;
                  }
                  pWVar19 = pWVar19 + 1;
                  if ((int)uVar15 == -1) {
                    pDVar10 = FUN_180035b40();
                    if (*pDVar10 != 0x2a) break;
                    if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
                      WVar8 = FUN_180047d70(L'?',param_1);
                      local_4d4 = (WVar8 != L'\xffff') - 1;
                      uVar15 = (ulonglong)local_4d4;
                    }
                    else {
                      local_4d4 = 0;
                      uVar15 = 0;
                    }
                  }
                } while (0 < (int)uVar16);
              }
            }
            else {
              local_4d4 = (int)uVar15 + local_4cc;
              uVar15 = (ulonglong)local_4d4;
            }
            if ((((local_4d8 & 8) != 0) && ((local_4d8 & 4) == 0)) && (iVar17 = iVar25, 0 < iVar25))
            {
              while( true ) {
                iVar17 = iVar17 + -1;
                if ((((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) &&
                   (WVar8 = FUN_180047d70(L'0',param_1), WVar8 == L'\xffff')) break;
                local_4d4 = (int)uVar15 + 1;
                uVar15 = (ulonglong)local_4d4;
                if ((local_4d4 == 0xffffffff) || (iVar17 < 1)) goto LAB_18003a538;
              }
              uVar15 = 0xffffffff;
              local_4d4 = 0xffffffff;
            }
LAB_18003a538:
            if ((local_4b8 == 0) && (0 < iVar9)) {
              uVar21 = uVar28 & 0xffffffff;
              pWVar19 = pWVar14;
              do {
                uVar16 = (int)uVar21 - 1;
                uVar21 = (ulonglong)uVar16;
                iVar9 = FUN_180047ff0(local_4b0,(byte *)pWVar19,
                                      (longlong)*(int *)((longlong)&local_4a0->pctype + 4),
                                      &local_4a0);
                if (iVar9 < 1) {
                  uVar26 = (ulonglong)local_4d8;
                  uVar15 = 0xffffffff;
                  local_4d4 = 0xffffffff;
                  goto LAB_18003a653;
                }
                if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
                  WVar8 = FUN_180047d70(local_4b0[0],param_1);
                  if (WVar8 == L'\xffff') {
                    uVar15 = 0xffffffff;
                    local_4d4 = 0xffffffff;
                  }
                  else {
                    local_4d4 = (int)uVar15 + 1;
                    uVar15 = (ulonglong)local_4d4;
                  }
                }
                else {
                  local_4d4 = (int)uVar15 + 1;
                  uVar15 = (ulonglong)local_4d4;
                }
                pWVar19 = (WCHAR *)((longlong)pWVar19 + (longlong)iVar9);
              } while (0 < (int)uVar16);
            }
            else {
              FUN_180039830(pWVar14,iVar9,param_1,(int *)&local_4d4);
              uVar15 = (ulonglong)local_4d4;
            }
            if ((int)uVar15 < 0) {
              uVar26 = (ulonglong)local_4d8;
            }
            else if ((local_4d8 & 4) == 0) {
              uVar26 = (ulonglong)local_4d8;
            }
            else if (iVar25 < 1) {
              uVar26 = (ulonglong)local_4d8;
            }
            else {
              do {
                iVar25 = iVar25 + -1;
                if ((((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) &&
                   (WVar8 = FUN_180047d70(L' ',param_1), WVar8 == L'\xffff')) {
                  uVar26 = (ulonglong)local_4d8;
                  uVar15 = 0xffffffff;
                  local_4d4 = 0xffffffff;
                  goto LAB_18003a653;
                }
                local_4d4 = (int)uVar15 + 1;
                uVar15 = (ulonglong)local_4d4;
                if (local_4d4 == 0xffffffff) {
                  uVar26 = (ulonglong)local_4d8;
                  goto LAB_18003a653;
                }
              } while (0 < iVar25);
              uVar26 = (ulonglong)local_4d8;
            }
          }
LAB_18003a653:
          if (local_478 == (WCHAR *)0x0) {
            uVar21 = (ulonglong)local_4d0;
            uVar22 = (ulonglong)local_4cc;
            uVar23 = (ulonglong)local_4c8;
            pWVar19 = local_470;
            param_4 = local_4c0;
          }
          else {
            FUN_180034a70(local_478);
            uVar21 = (ulonglong)local_4d0;
            uVar22 = (ulonglong)local_4cc;
            uVar23 = (ulonglong)local_4c8;
            local_478 = (WCHAR *)0x0;
            pWVar19 = local_470;
            param_4 = local_4c0;
          }
        }
        WVar8 = *pWVar19;
        if (WVar8 == L'\0') break;
        param_2 = pWVar19;
        uVar20 = (ulonglong)local_480;
      }
    }
    if (local_488 != '\0') {
      local_490[0x32] = local_490[0x32] & 0xfffffffd;
    }
  }
  return uVar15;
}


==================================================================

### EXPORT FUNC 18003a830 (3880 bytes) name=FUN_18003a830

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

ulonglong FUN_18003a830(FILE *param_1,WCHAR *param_2,longlong *param_3,WCHAR *param_4)

{
  WCHAR WVar1;
  short *psVar2;
  int *piVar3;
  bool bVar4;
  char cVar5;
  ushort uVar6;
  short sVar7;
  WCHAR WVar8;
  int iVar9;
  DWORD *pDVar10;
  ulonglong uVar11;
  undefined6 extraout_var_00;
  undefined7 extraout_var;
  code *pcVar12;
  uint uVar13;
  longlong lVar14;
  WCHAR *pWVar15;
  ulonglong uVar16;
  uint uVar17;
  int iVar18;
  char *pcVar19;
  ulonglong uVar20;
  WCHAR *pWVar21;
  ulonglong uVar22;
  uint uVar23;
  uint uVar24;
  int iVar25;
  uint uVar26;
  undefined1 auStackY_518 [32];
  uint local_4d8;
  uint local_4d4;
  uint local_4d0;
  uint local_4cc;
  uint local_4c8;
  uint local_4c4;
  WCHAR *local_4c0;
  int local_4b8;
  WCHAR local_4b4;
  short local_4b2;
  WCHAR local_4b0 [2];
  byte local_4ac [4];
  int local_4a8;
  pthreadlocinfo local_4a0;
  pthreadmbcinfo local_498;
  DWORD *local_490;
  char local_488;
  undefined4 local_480;
  undefined4 local_47c;
  WCHAR *local_478;
  WCHAR *local_470;
  WCHAR *local_468 [2];
  WCHAR local_458 [255];
  undefined2 local_259;
  ulonglong local_58;
  
  local_58 = DAT_18006cea0 ^ (ulonglong)auStackY_518;
  uVar17 = 0;
  local_480 = 0;
  local_4d4 = 0;
  local_4c4 = 0;
  local_4cc = 0;
  local_4c8 = 0;
  local_4a8 = 0;
  local_4b8 = 0;
  local_488 = '\0';
  local_4c0 = param_4;
  if (param_3 == (longlong *)0x0) {
    local_490 = FUN_1800380a0();
    local_4a0 = *(pthreadlocinfo *)(local_490 + 0x30);
    local_498 = *(pthreadmbcinfo *)(local_490 + 0x2e);
    if ((*(pthreadlocinfo *)(local_490 + 0x30) != (pthreadlocinfo)PTR_DAT_18006d6f0) &&
       ((_DAT_18006d578 & local_490[0x32]) == 0)) {
      local_4a0 = __updatetlocinfo();
    }
    if ((local_498 != (pthreadmbcinfo)PTR_DAT_18006d470) &&
       ((_DAT_18006d578 & local_490[0x32]) == 0)) {
      local_498 = __updatetmbcinfo();
    }
    if ((local_490[0x32] & 2) == 0) {
      local_490[0x32] = local_490[0x32] | 2;
      local_488 = '\x01';
    }
  }
  else {
    local_4a0 = (pthreadlocinfo)*param_3;
    local_498 = (pthreadmbcinfo)param_3[1];
  }
  if ((param_1 == (FILE *)0x0) || (param_2 == (WCHAR *)0x0)) {
    pDVar10 = FUN_180035b40();
    *pDVar10 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    if (local_488 != '\0') {
      local_490[0x32] = local_490[0x32] & 0xfffffffd;
    }
    uVar16 = 0xffffffff;
  }
  else {
    uVar11 = 0;
    WVar8 = *param_2;
    local_4d0 = 0;
    local_4d8 = 0;
    local_478 = (WCHAR *)0x0;
    pWVar15 = local_468[0];
    uVar16 = uVar11;
    uVar20 = uVar11;
    uVar26 = uVar17;
    uVar23 = uVar17;
    uVar24 = uVar17;
    if (WVar8 != L'\0') {
      do {
        uVar22 = 0;
        iVar25 = (int)uVar11;
        pWVar21 = param_2 + 1;
        iVar9 = (int)uVar16;
        local_470 = pWVar21;
        if (iVar9 < 0) break;
        uVar13 = 0;
        if ((ushort)(WVar8 + L'￠') < 0x59) {
          uVar13 = (byte)"JanFebMarAprMayJunJulAugSepOctNovDec"[(ulonglong)(ushort)WVar8 + 0x10] &
                   0xf;
        }
        local_4d8 = (uint)((byte)(&DAT_1800575a0)
                                 [(longlong)(int)uVar13 * 9 + (longlong)(int)local_4d8] >> 4);
        uVar11 = (ulonglong)local_4d8;
        if (local_4d8 == 8) goto LAB_18003b6c7;
        switch(uVar11) {
        case 0:
switchD_18003aa8c_caseD_0:
          local_4b8 = 1;
          if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
            WVar8 = FUN_180047d70(WVar8,param_1);
            uVar17 = local_4cc;
            uVar26 = local_4c8;
            uVar23 = local_4c4;
            if (WVar8 == L'\xffff') {
              uVar11 = (ulonglong)local_4d8;
              uVar16 = 0xffffffff;
              local_4d0 = 0xffffffff;
            }
            else {
              uVar11 = (ulonglong)local_4d8;
              local_4d0 = iVar9 + 1;
              uVar16 = (ulonglong)local_4d0;
            }
          }
          else {
            local_4d0 = iVar9 + 1;
            uVar16 = (ulonglong)local_4d0;
          }
          break;
        case 1:
          uVar17 = 0xffffffff;
          local_47c = 0;
          local_4a8 = 0;
          uVar23 = 0;
          local_4c4 = 0;
          uVar26 = 0;
          local_4cc = 0xffffffff;
          local_4c8 = 0;
          uVar24 = 0;
          local_4d4 = 0;
          local_4b8 = 0;
          break;
        case 2:
          if (WVar8 == L' ') {
            uVar11 = (ulonglong)local_4d8;
            local_4d4 = uVar24 | 2;
            uVar24 = local_4d4;
          }
          else if (WVar8 == L'#') {
            uVar11 = (ulonglong)local_4d8;
            local_4d4 = uVar24 | 0x80;
            uVar24 = local_4d4;
          }
          else if (WVar8 == L'+') {
            uVar11 = (ulonglong)local_4d8;
            local_4d4 = uVar24 | 1;
            uVar24 = local_4d4;
          }
          else if (WVar8 == L'-') {
            uVar11 = (ulonglong)local_4d8;
            local_4d4 = uVar24 | 4;
            uVar24 = local_4d4;
          }
          else if (WVar8 == L'0') {
            uVar11 = (ulonglong)local_4d8;
            local_4d4 = uVar24 | 8;
            uVar24 = local_4d4;
          }
          else {
            uVar11 = (ulonglong)local_4d8;
          }
          break;
        case 3:
          if (WVar8 == L'*') {
            local_4c4 = *(uint *)param_4;
            param_4 = param_4 + 4;
            local_4c0 = param_4;
            uVar23 = local_4c4;
            if ((int)local_4c4 < 0) {
              local_4d4 = uVar24 | 4;
              local_4c4 = -local_4c4;
              uVar24 = local_4d4;
              uVar23 = local_4c4;
            }
          }
          else {
            local_4c4 = ((ushort)WVar8 - 0x30) + uVar23 * 10;
            uVar11 = (ulonglong)local_4d8;
            uVar23 = local_4c4;
          }
          break;
        case 4:
          uVar17 = 0;
          local_4cc = 0;
          break;
        case 5:
          if (WVar8 == L'*') {
            local_4cc = *(uint *)param_4;
            param_4 = param_4 + 4;
            local_4c0 = param_4;
            uVar17 = local_4cc;
            if ((int)local_4cc < 0) {
              local_4cc = 0xffffffff;
              uVar17 = 0xffffffff;
            }
          }
          else {
            local_4cc = ((ushort)WVar8 - 0x30) + uVar17 * 10;
            uVar11 = (ulonglong)local_4d8;
            uVar17 = local_4cc;
          }
          break;
        case 6:
          if (WVar8 == L'I') {
            WVar1 = *pWVar21;
            local_4d4 = uVar24 | 0x8000;
            if ((WVar1 == L'6') && (param_2[2] == L'4')) {
              uVar11 = (ulonglong)local_4d8;
              pWVar21 = param_2 + 3;
              local_4d4 = uVar24 | 0x8000;
              uVar24 = local_4d4;
            }
            else if ((WVar1 == L'3') && (param_2[2] == L'2')) {
              uVar11 = (ulonglong)local_4d8;
              pWVar21 = param_2 + 3;
              local_4d4 = uVar24 & 0xffff7fff;
              uVar24 = local_4d4;
            }
            else {
              uVar24 = local_4d4;
              if (WVar1 == L'd') {
                uVar11 = (ulonglong)local_4d8;
              }
              else if (WVar1 == L'i') {
                uVar11 = (ulonglong)local_4d8;
              }
              else if (WVar1 == L'o') {
                uVar11 = (ulonglong)local_4d8;
              }
              else if (WVar1 == L'u') {
                uVar11 = (ulonglong)local_4d8;
              }
              else if (WVar1 == L'x') {
                uVar11 = (ulonglong)local_4d8;
              }
              else {
                if (WVar1 != L'X') {
                  local_4d8 = 0;
                  uVar11 = uVar22;
                  goto switchD_18003aa8c_caseD_0;
                }
                uVar11 = (ulonglong)local_4d8;
              }
            }
          }
          else if (WVar8 == L'h') {
            uVar11 = (ulonglong)local_4d8;
            local_4d4 = uVar24 | 0x20;
            uVar24 = local_4d4;
          }
          else if (WVar8 == L'l') {
            if (*pWVar21 == L'l') {
              uVar11 = (ulonglong)local_4d8;
              pWVar21 = param_2 + 2;
              local_4d4 = uVar24 | 0x1000;
              uVar24 = local_4d4;
            }
            else {
              uVar11 = (ulonglong)local_4d8;
              local_4d4 = uVar24 | 0x10;
              uVar24 = local_4d4;
            }
          }
          else if (WVar8 == L'w') {
            uVar11 = (ulonglong)local_4d8;
            local_4d4 = uVar24 | 0x800;
            uVar24 = local_4d4;
          }
          else {
            uVar11 = (ulonglong)local_4d8;
          }
          break;
        case 7:
          switch(WVar8) {
          case L'A':
          case L'E':
          case L'G':
            local_47c = 1;
            WVar8 = WVar8 + L' ';
          case L'a':
          case L'e':
          case L'f':
          case L'g':
            local_4d4 = uVar24 | 0x40;
            iVar25 = 0x200;
            pWVar15 = local_458;
            if ((int)uVar17 < 0) {
              local_4cc = 6;
              iVar9 = 0x200;
            }
            else {
              iVar9 = iVar25;
              if (uVar17 == 0) {
                if (WVar8 == L'g') {
                  local_4cc = 1;
                }
              }
              else {
                if ((int)uVar17 < 0x201) {
                  if ((int)uVar17 < 0xa4) goto LAB_18003b053;
                }
                else {
                  uVar17 = 0x200;
                  local_4cc = 0x200;
                }
                local_478 = (WCHAR *)FUN_180040de0((longlong)(int)(uVar17 + 0x15d));
                pWVar15 = local_478;
                param_4 = local_4c0;
                iVar9 = uVar17 + 0x15d;
                if (local_478 == (WCHAR *)0x0) {
                  local_4cc = 0xa3;
                  pWVar15 = local_458;
                  iVar9 = iVar25;
                }
              }
            }
LAB_18003b053:
            uVar17 = local_4cc;
            local_468[0] = *(WCHAR **)param_4;
            local_4c0 = param_4 + 4;
            pcVar12 = (code *)FUN_180037d20((INT_PTR)PTR_LAB_18006dc70);
            (*pcVar12)(local_468,pWVar15,(longlong)iVar9,(int)(char)WVar8);
            if (((uVar24 & 0x80) != 0) && (uVar17 == 0)) {
              pcVar12 = (code *)FUN_180037d20(DAT_18006dc88);
              (*pcVar12)(pWVar15,&local_4a0);
            }
            if ((WVar8 == L'g') && ((uVar24 & 0x80) == 0)) {
              pcVar12 = (code *)FUN_180037d20((INT_PTR)PTR_LAB_18006dc80);
              (*pcVar12)(pWVar15,&local_4a0);
            }
            if ((char)*pWVar15 == '-') {
              local_4d4 = uVar24 | 0x140;
              pWVar15 = (WCHAR *)((longlong)pWVar15 + 1);
            }
            lVar14 = -1;
            pWVar21 = pWVar15;
            do {
              if (lVar14 == 0) break;
              lVar14 = lVar14 + -1;
              WVar8 = *pWVar21;
              pWVar21 = (WCHAR *)((longlong)pWVar21 + 1);
            } while ((char)WVar8 != '\0');
            uVar20 = (ulonglong)(~(uint)lVar14 - 1);
            uVar24 = local_4d4;
            break;
          case L'C':
            if ((uVar24 & 0x830) == 0) {
              local_4d4 = uVar24 | 0x20;
              uVar24 = local_4d4;
            }
          case L'c':
            local_4b0[0] = *param_4;
            local_4c0 = param_4 + 4;
            local_4b8 = 1;
            if ((uVar24 & 0x20) == 0) {
              local_458[0] = local_4b0[0];
            }
            else {
              local_4ac[0] = (byte)local_4b0[0];
              local_4ac[1] = 0;
              iVar25 = FUN_180047ff0(local_458,local_4ac,
                                     (longlong)*(int *)((longlong)&local_4a0->pctype + 4),&local_4a0
                                    );
              if (iVar25 < 0) {
                local_4a8 = 1;
                uVar20 = 1;
                pWVar15 = local_458;
                break;
              }
            }
            uVar20 = 1;
            pWVar15 = local_458;
            break;
          case L'S':
            if ((uVar24 & 0x830) == 0) {
              local_4d4 = uVar24 | 0x20;
              uVar24 = local_4d4;
            }
          case L's':
            pWVar21 = *(WCHAR **)param_4;
            if (uVar17 == 0xffffffff) {
              uVar17 = 0x7fffffff;
            }
            local_4c0 = param_4 + 4;
            pWVar15 = pWVar21;
            if ((uVar24 & 0x20) == 0) {
              local_4b8 = 1;
              if (pWVar21 == (WCHAR *)0x0) {
                pWVar21 = (WCHAR *)PTR_DAT_18006d720;
                pWVar15 = (WCHAR *)PTR_DAT_18006d720;
              }
              for (; (uVar17 != 0 && (uVar17 = uVar17 - 1, *pWVar21 != L'\0'));
                  pWVar21 = pWVar21 + 1) {
              }
              uVar20 = (longlong)pWVar21 - (longlong)pWVar15 >> 1 & 0xffffffff;
            }
            else {
              if (pWVar21 == (WCHAR *)0x0) {
                pWVar15 = (WCHAR *)PTR_DAT_18006d718;
              }
              pWVar21 = pWVar15;
              uVar20 = uVar22;
              if (0 < (int)uVar17) {
                do {
                  if ((byte)*pWVar21 == 0) break;
                  uVar6 = FUN_180047bb0((uint)(byte)*pWVar21,&local_4a0);
                  if ((int)CONCAT62(extraout_var_00,uVar6) != 0) {
                    pWVar21 = (WCHAR *)((longlong)pWVar21 + 1);
                  }
                  uVar26 = (int)uVar20 + 1;
                  uVar20 = (ulonglong)uVar26;
                  pWVar21 = (WCHAR *)((longlong)pWVar21 + 1);
                } while ((int)uVar26 < (int)uVar17);
              }
            }
            break;
          case L'X':
            goto switchD_18003ad9d_caseD_58;
          case L'Z':
            psVar2 = *(short **)param_4;
            local_4c0 = param_4 + 4;
            if ((psVar2 == (short *)0x0) ||
               (pWVar15 = *(WCHAR **)(psVar2 + 4), pWVar15 == (WCHAR *)0x0)) {
              uVar20 = 0xffffffffffffffff;
              pcVar19 = PTR_DAT_18006d718;
              do {
                if (uVar20 == 0) break;
                uVar20 = uVar20 - 1;
                cVar5 = *pcVar19;
                pcVar19 = pcVar19 + 1;
              } while (cVar5 != '\0');
              uVar20 = ~uVar20 - 1;
              pWVar15 = (WCHAR *)PTR_DAT_18006d718;
            }
            else if ((uVar24 >> 0xb & 1) == 0) {
              uVar20 = (ulonglong)(uint)(int)*psVar2;
              local_4b8 = 0;
            }
            else {
              local_4b8 = 1;
              uVar20 = (ulonglong)(uint)((int)*psVar2 / 2);
            }
            break;
          case L'd':
          case L'i':
            local_4d4 = uVar24 | 0x40;
            iVar25 = 10;
            uVar24 = local_4d4;
            goto LAB_18003b191;
          case L'n':
            local_4c0 = param_4 + 4;
            piVar3 = *(int **)param_4;
            bVar4 = FUN_1800478c0();
            if ((int)CONCAT71(extraout_var,bVar4) != 0) {
              if ((uVar24 & 0x20) == 0) {
                *piVar3 = iVar9;
                local_4a8 = 1;
              }
              else {
                *(short *)piVar3 = (short)uVar16;
                local_4a8 = 1;
              }
              goto LAB_18003b5e3;
            }
            goto LAB_18003b6c7;
          case L'o':
            iVar25 = 8;
            if ((char)uVar24 < '\0') {
              local_4d4 = uVar24 | 0x200;
              uVar24 = local_4d4;
            }
            goto LAB_18003b191;
          case L'p':
            local_4d4 = uVar24 | 0x8000;
            uVar17 = 0x10;
            uVar24 = local_4d4;
switchD_18003ad9d_caseD_58:
            sVar7 = 7;
            local_480 = 7;
LAB_18003b15b:
            iVar25 = 0x10;
            if ((char)uVar24 < '\0') {
              local_4b4 = L'0';
              uVar26 = 2;
              local_4b2 = sVar7 + 0x51;
            }
            goto LAB_18003b191;
          case L'u':
            iVar25 = 10;
LAB_18003b191:
            if (uVar24 >> 0xf == 0) {
              if ((uVar24 >> 0xc & 1) == 0) {
                if ((uVar24 & 0x20) == 0) {
                  if ((uVar24 & 0x40) == 0) {
                    uVar20 = (ulonglong)*(uint *)param_4;
                  }
                  else {
                    uVar20 = (ulonglong)(int)*(uint *)param_4;
                  }
                }
                else if ((uVar24 & 0x40) == 0) {
                  uVar20 = (ulonglong)(ushort)*param_4;
                }
                else {
                  uVar20 = (ulonglong)*param_4;
                }
              }
              else {
                uVar20 = *(ulonglong *)param_4;
              }
            }
            else {
              uVar20 = *(ulonglong *)param_4;
            }
            local_4c0 = param_4 + 4;
            if (((uVar24 & 0x40) != 0) && ((longlong)uVar20 < 0)) {
              uVar20 = -uVar20;
              uVar24 = uVar24 | 0x100;
              local_4d4 = uVar24;
            }
            if ((uVar24 >> 0xf == 0) && ((uVar24 >> 0xc & 1) == 0)) {
              uVar20 = uVar20 & 0xffffffff;
            }
            if ((int)uVar17 < 0) {
              uVar17 = 1;
            }
            else {
              local_4d4 = uVar24 & 0xfffffff7;
              if (0x200 < (int)uVar17) {
                uVar17 = 0x200;
              }
            }
            if (uVar20 == 0) {
              uVar26 = 0;
            }
            pWVar21 = &local_259;
            while ((local_4cc = uVar17 - 1, 0 < (int)uVar17 || (uVar20 != 0))) {
              uVar17 = (int)(uVar20 % (ulonglong)(longlong)iVar25) + 0x30;
              cVar5 = (char)uVar17;
              if (0x39 < uVar17) {
                cVar5 = cVar5 + (char)local_480;
              }
              *(char *)pWVar21 = cVar5;
              pWVar21 = (WCHAR *)((longlong)pWVar21 + -1);
              uVar20 = uVar20 / (ulonglong)(longlong)iVar25;
              uVar17 = local_4cc;
            }
            uVar17 = (int)&local_259 - (int)pWVar21;
            pWVar15 = (WCHAR *)((longlong)pWVar21 + 1);
            uVar20 = (ulonglong)uVar17;
            local_4c8 = uVar26;
            uVar24 = local_4d4;
            if (((local_4d4 >> 9 & 1) != 0) && ((uVar17 == 0 || (*(char *)pWVar15 != '0')))) {
              *(char *)pWVar21 = '0';
              pWVar15 = pWVar21;
              uVar20 = (ulonglong)(uVar17 + 1);
            }
            break;
          case L'x':
            sVar7 = 0x27;
            local_480 = 0x27;
            goto LAB_18003b15b;
          }
          if (local_4a8 == 0) {
            if ((uVar24 & 0x40) != 0) {
              if ((uVar24 >> 8 & 1) == 0) {
                if ((uVar24 & 1) == 0) {
                  if ((uVar24 & 2) != 0) {
                    local_4b4 = L' ';
                    local_4c8 = 1;
                  }
                }
                else {
                  local_4b4 = L'+';
                  local_4c8 = 1;
                }
              }
              else {
                local_4b4 = L'-';
                local_4c8 = 1;
              }
            }
            iVar9 = (int)uVar20;
            iVar25 = (local_4c4 - iVar9) - local_4c8;
            if (((local_4d4 & 0xc) == 0) && (iVar18 = iVar25, 0 < iVar25)) {
              while( true ) {
                iVar18 = iVar18 + -1;
                if ((((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) &&
                   (WVar8 = FUN_180047d70(L' ',param_1), WVar8 == L'\xffff')) break;
                local_4d0 = (int)uVar16 + 1;
                uVar16 = (ulonglong)local_4d0;
                if ((local_4d0 == 0xffffffff) || (iVar18 < 1)) goto LAB_18003b3ad;
              }
              uVar16 = 0xffffffff;
              local_4d0 = 0xffffffff;
            }
LAB_18003b3ad:
            pWVar21 = &local_4b4;
            if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
              if (0 < (int)local_4c8) {
                uVar17 = local_4c8;
                do {
                  uVar17 = uVar17 - 1;
                  if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
                    WVar8 = FUN_180047d70(*pWVar21,param_1);
                    if (WVar8 == L'\xffff') {
                      uVar16 = 0xffffffff;
                      local_4d0 = 0xffffffff;
                    }
                    else {
                      local_4d0 = (int)uVar16 + 1;
                      uVar16 = (ulonglong)local_4d0;
                    }
                  }
                  else {
                    local_4d0 = (int)uVar16 + 1;
                    uVar16 = (ulonglong)local_4d0;
                  }
                  pWVar21 = pWVar21 + 1;
                  if ((int)uVar16 == -1) {
                    pDVar10 = FUN_180035b40();
                    if (*pDVar10 != 0x2a) break;
                    if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
                      WVar8 = FUN_180047d70(L'?',param_1);
                      local_4d0 = (WVar8 != L'\xffff') - 1;
                      uVar16 = (ulonglong)local_4d0;
                    }
                    else {
                      local_4d0 = 0;
                      uVar16 = 0;
                    }
                  }
                } while (0 < (int)uVar17);
              }
            }
            else {
              local_4d0 = (int)uVar16 + local_4c8;
              uVar16 = (ulonglong)local_4d0;
            }
            if ((((local_4d4 & 8) != 0) && ((local_4d4 & 4) == 0)) && (iVar18 = iVar25, 0 < iVar25))
            {
              while( true ) {
                iVar18 = iVar18 + -1;
                if ((((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) &&
                   (WVar8 = FUN_180047d70(L'0',param_1), WVar8 == L'\xffff')) break;
                local_4d0 = (int)uVar16 + 1;
                uVar16 = (ulonglong)local_4d0;
                if ((local_4d0 == 0xffffffff) || (iVar18 < 1)) goto LAB_18003b4c8;
              }
              uVar16 = 0xffffffff;
              local_4d0 = 0xffffffff;
            }
LAB_18003b4c8:
            uVar24 = local_4d4;
            if ((local_4b8 == 0) && (0 < iVar9)) {
              uVar11 = uVar20 & 0xffffffff;
              pWVar21 = pWVar15;
              do {
                uVar17 = (int)uVar11 - 1;
                uVar11 = (ulonglong)uVar17;
                iVar9 = FUN_180047ff0(local_4b0,(byte *)pWVar21,
                                      (longlong)*(int *)((longlong)&local_4a0->pctype + 4),
                                      &local_4a0);
                if (iVar9 < 1) {
                  uVar16 = 0xffffffff;
                  local_4d0 = 0xffffffff;
                  goto LAB_18003b5e3;
                }
                if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
                  WVar8 = FUN_180047d70(local_4b0[0],param_1);
                  if (WVar8 == L'\xffff') {
                    uVar16 = 0xffffffff;
                    local_4d0 = 0xffffffff;
                  }
                  else {
                    local_4d0 = (int)uVar16 + 1;
                    uVar16 = (ulonglong)local_4d0;
                  }
                }
                else {
                  local_4d0 = (int)uVar16 + 1;
                  uVar16 = (ulonglong)local_4d0;
                }
                pWVar21 = (WCHAR *)((longlong)pWVar21 + (longlong)iVar9);
              } while (0 < (int)uVar17);
            }
            else {
              FUN_180039830(pWVar15,iVar9,param_1,(int *)&local_4d0);
              uVar16 = (ulonglong)local_4d0;
            }
            if (((-1 < (int)uVar16) && ((local_4d4 & 4) != 0)) && (0 < iVar25)) {
              while( true ) {
                iVar25 = iVar25 + -1;
                if ((((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) &&
                   (WVar8 = FUN_180047d70(L' ',param_1), WVar8 == L'\xffff')) break;
                local_4d0 = (int)uVar16 + 1;
                uVar16 = (ulonglong)local_4d0;
                if ((local_4d0 == 0xffffffff) || (iVar25 < 1)) goto LAB_18003b5e3;
              }
              uVar16 = 0xffffffff;
              local_4d0 = 0xffffffff;
            }
          }
LAB_18003b5e3:
          if (local_478 == (WCHAR *)0x0) {
            uVar11 = (ulonglong)local_4d8;
            pWVar21 = local_470;
            param_4 = local_4c0;
            uVar17 = local_4cc;
            uVar23 = local_4c4;
            uVar26 = local_4c8;
          }
          else {
            FUN_180034a70(local_478);
            uVar11 = (ulonglong)local_4d8;
            local_478 = (WCHAR *)0x0;
            pWVar21 = local_470;
            param_4 = local_4c0;
            uVar17 = local_4cc;
            uVar23 = local_4c4;
            uVar26 = local_4c8;
          }
        }
        iVar25 = (int)uVar11;
        WVar8 = *pWVar21;
        param_2 = pWVar21;
      } while (WVar8 != L'\0');
      if ((iVar25 != 0) && (iVar25 != 7)) {
LAB_18003b6c7:
        pDVar10 = FUN_180035b40();
        *pDVar10 = 0x16;
        FUN_1800384e0(0,0,0,0,0);
        if (local_488 != '\0') {
          local_490[0x32] = local_490[0x32] & 0xfffffffd;
        }
        return 0xffffffff;
      }
    }
    if (local_488 != '\0') {
      local_490[0x32] = local_490[0x32] & 0xfffffffd;
    }
  }
  return uVar16;
}


==================================================================

### EXPORT FUNC 18003b7f0 (70 bytes) name=FUN_18003b7f0

ulonglong FUN_18003b7f0(ushort param_1)

{
  int iVar1;
  undefined4 extraout_var;
  
  if ((param_1 & 0xff00) == 0) {
    iVar1 = isdigit((uint)(byte)param_1);
    if (iVar1 != 0) {
      return CONCAT62((int6)(CONCAT44(extraout_var,iVar1) >> 0x10),param_1);
    }
  }
  return (ulonglong)((param_1 & 0xffffffdf) - 7);
}


==================================================================

### EXPORT FUNC 18003b840 (5621 bytes) name=FUN_18003b840

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

int FUN_18003b840(FILE *param_1,WCHAR *param_2,longlong *param_3,undefined8 *param_4)

{
  byte *pbVar1;
  WCHAR WVar2;
  FILE *pFVar3;
  WCHAR WVar4;
  WCHAR WVar5;
  int iVar6;
  int iVar7;
  DWORD *pDVar8;
  ulonglong uVar9;
  WCHAR *pWVar10;
  WCHAR *pWVar11;
  WCHAR *pWVar12;
  LPSTR pCVar13;
  code *pcVar14;
  char cVar15;
  uint uVar16;
  byte bVar17;
  WCHAR WVar18;
  ulonglong uVar19;
  ulonglong uVar20;
  char cVar21;
  uint uVar22;
  uint uVar23;
  size_t _Size;
  int iVar24;
  int iVar25;
  bool bVar26;
  undefined1 auStackY_3e8 [32];
  char local_3b8;
  int local_3b4;
  char local_3ac;
  byte local_3aa;
  WCHAR *local_3a8;
  int local_3a0;
  char local_39c;
  ulonglong *local_398;
  int local_390;
  int local_38c;
  FILE *local_388;
  WCHAR *local_380;
  int local_378;
  longlong local_370;
  WCHAR local_368 [2];
  WCHAR local_364;
  WCHAR *local_360;
  uint local_358;
  uint local_354;
  int local_350;
  undefined8 *local_348;
  pthreadlocinfo local_340;
  pthreadmbcinfo local_338;
  DWORD *local_330;
  char local_328;
  undefined8 *local_320;
  WCHAR local_318 [352];
  ulonglong local_58;
  
  local_58 = DAT_18006cea0 ^ (ulonglong)auStackY_3e8;
  pWVar10 = local_318;
  uVar9 = 0;
  _Size = 0x15e;
  local_378 = 0;
  local_398 = (ulonglong *)0x0;
  local_350 = 0;
  local_388 = param_1;
  local_380 = param_2;
  local_348 = param_4;
  if ((param_2 == (WCHAR *)0x0) || (param_1 == (FILE *)0x0)) {
    pDVar8 = FUN_180035b40();
    *pDVar8 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
  }
  else {
    local_328 = '\0';
    if (param_3 == (longlong *)0x0) {
      local_330 = FUN_1800380a0();
      local_340 = *(pthreadlocinfo *)(local_330 + 0x30);
      local_338 = *(pthreadmbcinfo *)(local_330 + 0x2e);
      if ((local_340 != (pthreadlocinfo)PTR_DAT_18006d6f0) &&
         ((_DAT_18006d578 & local_330[0x32]) == 0)) {
        local_340 = __updatetlocinfo();
      }
      if ((local_338 != (pthreadmbcinfo)PTR_DAT_18006d470) &&
         ((_DAT_18006d578 & local_330[0x32]) == 0)) {
        local_338 = __updatetmbcinfo();
      }
      if ((local_330[0x32] & 2) == 0) {
        local_330[0x32] = local_330[0x32] | 2;
        local_328 = '\x01';
      }
    }
    else {
      local_340 = (pthreadlocinfo)*param_3;
      local_338 = (pthreadmbcinfo)param_3[1];
    }
    local_3b4 = 0;
    WVar4 = *param_2;
    local_3a8 = pWVar10;
    if (WVar4 != L'\0') {
LAB_18003b9e4:
      iVar6 = iswctype(WVar4,8);
      if (iVar6 != 0) {
        local_3b4 = local_3b4 + -1;
        do {
          local_3b4 = local_3b4 + 1;
          WVar4 = FUN_180048480(param_1);
          if (WVar4 == L'\xffff') goto LAB_18003ba40;
          iVar6 = iswctype(WVar4,8);
        } while (iVar6 != 0);
        FUN_1800486b0(WVar4,param_1);
LAB_18003ba40:
        do {
          pWVar12 = param_2 + 1;
          param_2 = param_2 + 1;
          iVar6 = iswctype(*pWVar12,8);
        } while (iVar6 != 0);
        goto LAB_18003cb87;
      }
      if (*local_380 != L'%') {
        local_3b4 = local_3b4 + 1;
        WVar5 = FUN_180048480(param_1);
        uVar9 = (ulonglong)(ushort)WVar5;
        WVar4 = *local_380;
        local_380 = local_380 + 1;
        if (WVar4 == WVar5) goto LAB_18003cb6b;
        if (WVar5 != L'\xffff') {
          FUN_1800486b0(WVar5,param_1);
        }
        goto LAB_18003cd8d;
      }
      iVar24 = 0;
      iVar6 = 0;
      cVar15 = '\0';
      cVar21 = '\0';
      local_358 = 0;
      local_364 = L'\0';
      local_390 = 0;
      local_3ac = '\x01';
      local_38c = 0;
      local_3a0 = 0;
      local_3aa = 0;
      local_39c = '\0';
      local_3b8 = '\0';
      local_354 = local_354 & 0xffffff00;
      iVar25 = 0;
      do {
        WVar4 = local_380[1];
        local_380 = local_380 + 1;
        if (((WVar4 & 0xff00U) == 0) &&
           (iVar7 = isdigit((ushort)WVar4 & 0xff), iVar6 = local_38c, iVar24 = local_3a0, iVar7 != 0
           )) {
          local_38c = local_38c + 1;
          local_3a0 = ((ushort)WVar4 - 0x30) + local_3a0 * 10;
          pWVar10 = local_380;
          iVar6 = local_38c;
          iVar24 = local_3a0;
        }
        else {
          pWVar10 = local_380;
          switch(WVar4) {
          case L'*':
            local_3b8 = local_3b8 + '\x01';
            break;
          default:
switchD_18003bb3c_caseD_2b:
            cVar15 = cVar15 + '\x01';
            pWVar10 = local_380;
            break;
          case L'F':
          case L'N':
            break;
          case L'I':
            WVar4 = local_380[1];
            if ((WVar4 == L'6') && (local_380[2] == L'4')) {
              iVar25 = iVar25 + 1;
              local_370 = 0;
              pWVar10 = local_380 + 2;
            }
            else if ((WVar4 != L'3') || (pWVar10 = local_380 + 2, local_380[2] != L'2')) {
              if ((((WVar4 != L'd') && (WVar4 != L'i')) && (WVar4 != L'o')) &&
                 ((WVar4 != L'x' && (WVar4 != L'X')))) {
                iVar25 = iVar25 + 1;
                local_370 = 0;
                goto switchD_18003bb3c_caseD_2b;
              }
              iVar25 = iVar25 + 1;
              local_370 = 0;
              pWVar10 = local_380;
            }
            break;
          case L'L':
            local_3ac = local_3ac + '\x01';
            break;
          case L'h':
            local_3ac = local_3ac + -1;
            cVar21 = cVar21 + -1;
            break;
          case L'l':
            if (local_380[1] != L'l') {
              local_3ac = local_3ac + '\x01';
              goto switchD_18003bb3c_caseD_77;
            }
            iVar25 = iVar25 + 1;
            local_370 = 0;
            pWVar10 = local_380 + 1;
            break;
          case L'w':
switchD_18003bb3c_caseD_77:
            cVar21 = cVar21 + '\x01';
          }
        }
        local_380 = pWVar10;
        uVar23 = local_358;
        WVar4 = local_364;
        pFVar3 = local_388;
      } while (cVar15 == '\0');
      if (local_3b8 == '\0') {
        local_320 = local_348;
        local_360 = (WCHAR *)*local_348;
        local_348 = local_348 + 1;
      }
      else {
        local_360 = (WCHAR *)0x0;
      }
      cVar15 = '\0';
      local_364 = local_364 & 0xff00;
      if (cVar21 == '\0') {
        if ((*local_380 == L'S') || (*local_380 == L'C')) {
          cVar21 = -1;
        }
        else {
          cVar21 = '\x01';
        }
      }
      uVar16 = (ushort)*local_380 | 0x20;
      local_358 = uVar16;
      pWVar10 = local_3a8;
      if (uVar16 == 0x6e) {
LAB_18003bd46:
        pFVar3 = local_388;
        WVar5 = (WCHAR)uVar9;
        if ((iVar6 != 0) && (iVar24 == 0)) {
          if (WVar5 != L'\xffff') {
            FUN_1800486b0(WVar5,local_388);
          }
          goto LAB_18003cd8d;
        }
        uVar22 = local_354;
        switch(uVar16) {
        case 99:
          if (iVar6 == 0) {
            local_3a0 = iVar24 + 1;
            local_38c = 1;
          }
          if (cVar21 < '\x01') {
            local_3aa = 0;
          }
          else {
            local_3aa = 0;
            uVar22 = 1;
          }
          goto LAB_18003bf22;
        case 100:
        case 0x6f:
        case 0x75:
          goto switchD_18003bd73_caseD_64;
        case 0x65:
        case 0x66:
        case 0x67:
          uVar20 = 0;
          if (WVar5 == L'-') {
            uVar20 = 1;
            *local_3a8 = L'-';
LAB_18003c4da:
            local_3a0 = local_3a0 + -1;
            local_3b4 = local_3b4 + 1;
            WVar4 = FUN_180048480(local_388);
            uVar9 = (ulonglong)(ushort)WVar4;
            iVar6 = local_38c;
          }
          else if (WVar5 == L'+') goto LAB_18003c4da;
          if (iVar6 == 0) {
            local_3a0 = -1;
          }
          iVar6 = local_3a0;
          if ((uVar9 & 0xff00) == 0) {
            do {
              WVar5 = (WCHAR)uVar9;
              iVar24 = isdigit((uint)uVar9 & 0xff);
              local_3a0 = iVar6;
              if ((iVar24 == 0) || (local_3a0 = iVar6 + -1, iVar6 == 0)) break;
              local_390 = local_390 + 1;
              local_3a8[uVar20] = (short)(char)uVar9;
              uVar20 = uVar20 + 1;
              if (uVar20 == _Size) {
                if (local_3a8 == local_318) {
                  pWVar10 = FUN_180040e50(_Size,4);
                  if (pWVar10 == (WCHAR *)0x0) goto LAB_18003cd8d;
                  _Size = _Size * 2;
                  local_378 = 1;
                  memcpy(pWVar10,local_318,_Size);
                  local_3a8 = pWVar10;
                }
                else {
                  pWVar12 = FUN_180040f70(local_3a8,_Size,4);
                  pWVar10 = local_3a8;
                  if (pWVar12 == (WCHAR *)0x0) goto LAB_18003cd8d;
                  _Size = _Size * 2;
                  local_3a8 = pWVar12;
                }
              }
              local_3b4 = local_3b4 + 1;
              WVar4 = FUN_180048480(pFVar3);
              uVar9 = (ulonglong)(ushort)WVar4;
              iVar6 = local_3a0;
            } while ((WVar4 & 0xff00U) == 0);
          }
          local_368[0] = L'.';
          FUN_180047ff0(local_368,*(byte **)local_340->locale_name[0],
                        (longlong)*(int *)((longlong)&local_340->pctype + 4),&local_340);
          iVar6 = local_3a0;
          if (((uint)(ushort)local_368[0] == (int)(char)uVar9) &&
             (iVar24 = local_3a0 + -1, iVar6 = iVar24, local_3a0 != 0)) {
            WVar5 = FUN_180048480(pFVar3);
            uVar9 = uVar20 + 1;
            local_3a8[uVar20] = local_368[0];
            uVar20 = uVar9;
            pWVar12 = local_3a8;
            if (uVar9 == _Size) {
              if (local_3a8 == local_318) {
                pWVar10 = FUN_180040e50(_Size,4);
                if (pWVar10 == (WCHAR *)0x0) goto LAB_18003cd8d;
                _Size = _Size * 2;
                local_378 = 1;
                memcpy(pWVar10,local_318,_Size);
                pWVar12 = pWVar10;
                local_3a8 = pWVar10;
              }
              else {
                pWVar12 = FUN_180040f70(local_3a8,_Size,4);
                pWVar10 = local_3a8;
                if (pWVar12 == (WCHAR *)0x0) goto LAB_18003cd8d;
                _Size = _Size * 2;
                local_3a8 = pWVar12;
              }
            }
            while( true ) {
              uVar9 = (ulonglong)(ushort)WVar5;
              local_3b4 = local_3b4 + 1;
              iVar6 = iVar24;
              if ((((WVar5 & 0xff00U) != 0) || (iVar25 = isdigit((ushort)WVar5 & 0xff), iVar25 == 0)
                  ) || (iVar6 = iVar24 + -1, iVar24 == 0)) break;
              local_390 = local_390 + 1;
              pWVar12[uVar20] = WVar5;
              pWVar11 = pWVar12;
              if (uVar20 + 1 == _Size) {
                if (pWVar12 == local_318) {
                  pWVar11 = FUN_180040e50(_Size,4);
                  pWVar10 = pWVar11;
                  if (pWVar11 == (WCHAR *)0x0) goto LAB_18003cd8d;
                  _Size = _Size * 2;
                  local_378 = 1;
                  memcpy(pWVar11,local_318,_Size);
                  local_3a8 = pWVar11;
                }
                else {
                  pWVar11 = FUN_180040f70(pWVar12,_Size,4);
                  pWVar10 = pWVar12;
                  if (pWVar11 == (WCHAR *)0x0) goto LAB_18003cd8d;
                  _Size = _Size * 2;
                  local_3a8 = pWVar11;
                }
              }
              WVar5 = FUN_180048480(pFVar3);
              iVar24 = iVar6;
              uVar20 = uVar20 + 1;
              pWVar12 = pWVar11;
            }
          }
          iVar24 = local_390;
          WVar5 = (WCHAR)uVar9;
          if (((local_390 != 0) && ((WVar5 == L'e' || (WVar5 == L'E')))) &&
             (iVar25 = iVar6 + -1, iVar6 != 0)) {
            uVar19 = uVar20 + 1;
            local_3a8[uVar20] = L'e';
            if (uVar19 == _Size) {
              if (local_3a8 == local_318) {
                pWVar10 = FUN_180040e50(_Size,4);
                if (pWVar10 == (WCHAR *)0x0) goto LAB_18003cd8d;
                _Size = _Size * 2;
                local_378 = 1;
                memcpy(pWVar10,local_318,_Size);
                local_3a8 = pWVar10;
              }
              else {
                pWVar12 = FUN_180040f70(local_3a8,_Size,4);
                pWVar10 = local_3a8;
                if (pWVar12 == (WCHAR *)0x0) goto LAB_18003cd8d;
                _Size = _Size * 2;
                local_3a8 = pWVar12;
              }
            }
            WVar4 = FUN_180048480(pFVar3);
            uVar9 = (ulonglong)(ushort)WVar4;
            iVar7 = local_3b4 + 1;
            if (WVar4 == L'-') {
              local_3a8[uVar19] = L'-';
              uVar19 = uVar20 + 2;
              if (uVar19 == _Size) {
                WVar5 = L'-';
                if (local_3a8 == local_318) {
                  pWVar10 = FUN_180040e50(_Size,4);
                  if (pWVar10 == (WCHAR *)0x0) goto LAB_18003cd8d;
                  _Size = _Size * 2;
                  local_378 = 1;
                  memcpy(pWVar10,local_318,_Size);
                  local_3a8 = pWVar10;
                }
                else {
                  pWVar12 = FUN_180040f70(local_3a8,_Size,4);
                  pWVar10 = local_3a8;
                  if (pWVar12 == (WCHAR *)0x0) goto LAB_18003cd8d;
                  _Size = _Size * 2;
                  local_3a8 = pWVar12;
                }
              }
LAB_18003c903:
              if (iVar25 == 0) {
                iVar25 = 0;
              }
              else {
                WVar4 = FUN_180048480(pFVar3);
                uVar9 = (ulonglong)(ushort)WVar4;
                iVar7 = local_3b4 + 2;
                iVar25 = iVar6 + -2;
              }
            }
            else if (WVar4 == L'+') goto LAB_18003c903;
            local_3b4 = iVar7;
            uVar20 = uVar19;
            if ((uVar9 & 0xff00) == 0) {
              do {
                WVar5 = (WCHAR)uVar9;
                iVar6 = isdigit((uint)uVar9 & 0xff);
                uVar20 = uVar19;
                if ((iVar6 == 0) || (iVar25 == 0)) break;
                uVar20 = uVar19 + 1;
                iVar24 = iVar24 + 1;
                local_3a8[uVar19] = WVar5;
                if (uVar20 == _Size) {
                  if (local_3a8 == local_318) {
                    pWVar10 = FUN_180040e50(_Size,4);
                    if (pWVar10 == (WCHAR *)0x0) goto LAB_18003cd8d;
                    _Size = _Size * 2;
                    local_378 = 1;
                    memcpy(pWVar10,local_318,_Size);
                    local_3a8 = pWVar10;
                  }
                  else {
                    pWVar12 = FUN_180040f70(local_3a8,_Size,4);
                    pWVar10 = local_3a8;
                    if (pWVar12 == (WCHAR *)0x0) goto LAB_18003cd8d;
                    _Size = _Size * 2;
                    local_3a8 = pWVar12;
                  }
                }
                local_3b4 = local_3b4 + 1;
                WVar4 = FUN_180048480(pFVar3);
                uVar9 = (ulonglong)(ushort)WVar4;
                uVar19 = uVar20;
                iVar25 = iVar25 + -1;
              } while ((WVar4 & 0xff00U) == 0);
            }
          }
          local_3b4 = local_3b4 + -1;
          WVar5 = (WCHAR)uVar9;
          if (WVar5 != L'\xffff') {
            FUN_1800486b0(WVar5,pFVar3);
          }
          pWVar10 = local_3a8;
          if (iVar24 == 0) goto LAB_18003cd8d;
          if (local_3b8 == '\0') {
            local_3a8[uVar20] = L'\0';
            uVar20 = _Size * 2 + 2;
            pCVar13 = (LPSTR)FUN_180040de0(uVar20);
            if (pCVar13 == (LPSTR)0x0) goto LAB_18003cd8d;
            iVar6 = FUN_180032b80((ulonglong *)0x0,pCVar13,uVar20,local_3a8,_Size * 2 + 1);
            if ((iVar6 != 0) && ((iVar6 == 0x16 || (iVar6 == 0x22)))) {
                    /* WARNING: Subroutine does not return */
              FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
            }
            pcVar14 = (code *)FUN_180037d20((INT_PTR)PTR_LAB_18006dc78);
            (*pcVar14)(local_3ac + -1,local_360,pCVar13,&local_340);
            FUN_180034a70(pCVar13);
          }
          break;
        default:
          if (*local_380 != WVar5) {
            if (WVar5 != L'\xffff') {
              FUN_1800486b0(WVar5,local_388);
            }
            goto LAB_18003cd8d;
          }
          if (local_3b8 == '\0') {
            local_348 = local_320;
          }
          break;
        case 0x69:
          uVar16 = 100;
        case 0x78:
          if (WVar5 == L'-') {
            local_39c = '\x01';
LAB_18003c0fd:
            local_3a0 = iVar24 + -1;
            if ((local_3a0 == 0) && (iVar6 != 0)) {
              cVar15 = '\x01';
            }
            else {
              local_3b4 = local_3b4 + 1;
              WVar4 = FUN_180048480(local_388);
              uVar9 = (ulonglong)(ushort)WVar4;
            }
          }
          else if (WVar5 == L'+') goto LAB_18003c0fd;
          iVar7 = local_390;
          if ((short)uVar9 == 0x30) {
            WVar4 = FUN_180048480(local_388);
            uVar9 = (ulonglong)(ushort)WVar4;
            if ((WVar4 == L'x') || (WVar4 == L'X')) {
              local_3b4 = local_3b4 + 2;
              WVar4 = FUN_180048480(local_388);
              uVar9 = (ulonglong)(ushort)WVar4;
              if ((local_38c != 0) && (local_3a0 = local_3a0 + -2, local_3a0 < 1)) {
                cVar15 = cVar15 + '\x01';
              }
              uVar16 = 0x78;
              iVar7 = local_390;
            }
            else if (uVar16 == 0x78) {
              if (WVar4 != L'\xffff') {
                FUN_1800486b0(WVar4,local_388);
              }
              uVar9 = 0x30;
              iVar7 = 1;
            }
            else {
              if ((local_38c != 0) && (local_3a0 = local_3a0 + -1, local_3a0 == 0)) {
                cVar15 = cVar15 + '\x01';
              }
              uVar16 = 0x6f;
              iVar7 = 1;
              local_3b4 = local_3b4 + 1;
            }
          }
          goto LAB_18003c255;
        case 0x6e:
          uVar23 = local_3b4;
          if (local_3b8 != '\0') break;
          goto LAB_18003c45d;
        case 0x70:
          local_3ac = '\x01';
          iVar25 = iVar25 + 1;
          local_370 = 0;
switchD_18003bd73_caseD_64:
          iVar7 = local_390;
          if (WVar5 == L'-') {
            local_39c = '\x01';
LAB_18003c214:
            local_3a0 = iVar24 + -1;
            if ((local_3a0 == 0) && (iVar6 != 0)) {
              cVar15 = '\x01';
            }
            else {
              local_3b4 = local_3b4 + 1;
              WVar4 = FUN_180048480(local_388);
              uVar9 = (ulonglong)(ushort)WVar4;
              iVar7 = local_390;
            }
          }
          else {
            if (WVar5 == L'+') goto LAB_18003c214;
            local_39c = (char)local_390;
          }
LAB_18003c255:
          if (iVar25 == 0) {
            if (cVar15 == '\0') {
              while( true ) {
                WVar4 = (WCHAR)uVar9;
                if ((uVar16 == 0x78) || (uVar16 == 0x70)) break;
                if (((uVar9 & 0xff00) != 0) || (iVar6 = isdigit((uint)uVar9 & 0xff), iVar6 == 0))
                goto LAB_18003c405;
                if (uVar16 == 0x6f) {
                  if (0x37 < (ushort)WVar4) goto LAB_18003c405;
                  iVar6 = uVar23 << 3;
                }
                else {
                  iVar6 = uVar23 * 10;
                }
LAB_18003c3d3:
                iVar7 = iVar7 + 1;
                uVar23 = iVar6 + -0x30 + (uint)(ushort)uVar9;
                if ((local_38c != 0) && (local_3a0 = local_3a0 + -1, local_3a0 == 0))
                goto LAB_18003c420;
                local_3b4 = local_3b4 + 1;
                WVar4 = FUN_180048480(local_388);
                uVar9 = (ulonglong)(ushort)WVar4;
              }
              if (((uVar9 & 0xff00) == 0) && (iVar6 = isxdigit((uint)uVar9 & 0xff), iVar6 != 0)) {
                iVar6 = uVar23 << 4;
                uVar9 = FUN_18003b7f0(WVar4);
                uVar9 = uVar9 & 0xffff;
                goto LAB_18003c3d3;
              }
LAB_18003c405:
              local_3b4 = local_3b4 + -1;
              if (WVar4 != L'\xffff') {
                FUN_1800486b0(WVar4,local_388);
              }
            }
LAB_18003c420:
            if (local_39c != '\0') {
              uVar23 = -uVar23;
            }
          }
          else {
            if (cVar15 == '\0') {
              while( true ) {
                WVar4 = (WCHAR)uVar9;
                if ((uVar16 == 0x78) || (uVar16 == 0x70)) break;
                if (((uVar9 & 0xff00) != 0) || (iVar6 = isdigit((uint)uVar9 & 0xff), iVar6 == 0))
                goto LAB_18003c322;
                if (uVar16 == 0x6f) {
                  if (0x37 < (ushort)WVar4) goto LAB_18003c322;
                  local_370 = local_370 << 3;
                }
                else {
                  local_370 = local_370 * 10;
                }
LAB_18003c2e8:
                iVar7 = iVar7 + 1;
                local_370 = local_370 + ((int)uVar9 + -0x30);
                if ((local_38c != 0) && (local_3a0 = local_3a0 + -1, local_3a0 == 0))
                goto LAB_18003c350;
                local_3b4 = local_3b4 + 1;
                WVar4 = FUN_180048480(local_388);
                uVar9 = (ulonglong)(ushort)WVar4;
              }
              if (((uVar9 & 0xff00) == 0) && (iVar6 = isxdigit((uint)uVar9 & 0xff), iVar6 != 0)) {
                local_370 = local_370 << 4;
                uVar9 = FUN_18003b7f0(WVar4);
                uVar9 = uVar9 & 0xffff;
                goto LAB_18003c2e8;
              }
LAB_18003c322:
              local_3b4 = local_3b4 + -1;
              if (WVar4 != L'\xffff') {
                FUN_1800486b0(WVar4,local_388);
              }
            }
LAB_18003c350:
            if (local_39c != '\0') {
              local_370 = -local_370;
            }
          }
          WVar5 = (WCHAR)uVar9;
          if ((uVar16 == 0x46) || (iVar7 == 0)) goto LAB_18003cd8d;
          if (local_3b8 == '\0') {
LAB_18003c45d:
            if (iVar25 == 0) {
              if (local_3ac == '\0') {
                *local_360 = (WCHAR)uVar23;
              }
              else {
                *(uint *)local_360 = uVar23;
              }
            }
            else {
              *(longlong *)local_360 = local_370;
            }
          }
          break;
        case 0x73:
          if (cVar21 < '\x01') {
            local_3aa = 0;
          }
          else {
            uVar22 = 1;
          }
          goto LAB_18003bf22;
        case 0x7b:
          uVar22 = local_354 & 0xff;
          if ('\0' < cVar21) {
            uVar22 = 1;
          }
          pWVar11 = local_380 + 1;
          pWVar12 = pWVar11;
          if (*pWVar11 == L'^') {
            local_3aa = 0xff;
            pWVar12 = local_380 + 2;
          }
          local_380 = pWVar11;
          if (local_398 == (ulonglong *)0x0) {
            local_398 = (ulonglong *)FUN_180040de0(0x2000);
            if (local_398 == (ulonglong *)0x0) goto LAB_18003cd8d;
            local_350 = 1;
          }
          FUN_1800357d0(local_398,0,0x2000);
          if ((uVar16 == 0x7b) && (*pWVar12 == L']')) {
            WVar4 = L']';
            pWVar12 = pWVar12 + 1;
            *(undefined1 *)((longlong)local_398 + 0xb) = 0x20;
          }
          WVar2 = *pWVar12;
          while (WVar18 = WVar2, WVar18 != L']') {
            pWVar11 = pWVar12 + 1;
            if (((WVar18 == L'-') && (WVar4 != L'\0')) && (WVar2 = *pWVar11, WVar2 != L']')) {
              pWVar11 = pWVar12 + 2;
              WVar18 = WVar2;
              if ((ushort)WVar4 < (ushort)WVar2) {
                WVar18 = WVar4;
                WVar4 = WVar2;
              }
              if ((ushort)WVar18 <= (ushort)WVar4) {
                uVar20 = (ulonglong)(ushort)WVar18;
                do {
                  bVar17 = (byte)WVar18;
                  uVar19 = uVar20 >> 3;
                  WVar18 = WVar18 + L'\x01';
                  uVar20 = uVar20 + 1;
                  pbVar1 = (byte *)(uVar19 + (longlong)local_398);
                  *pbVar1 = *pbVar1 | '\x01' << (bVar17 & 7);
                } while ((ushort)WVar18 <= (ushort)WVar4);
              }
              WVar18 = L'\0';
            }
            else {
              pbVar1 = (byte *)((ulonglong)((ushort)WVar18 >> 3) + (longlong)local_398);
              *pbVar1 = *pbVar1 | '\x01' << ((byte)WVar18 & 7);
            }
            pWVar12 = pWVar11;
            WVar4 = WVar18;
            WVar2 = *pWVar11;
          }
          if (*pWVar12 == L'\0') goto LAB_18003cd8d;
          if (uVar16 == 0x7b) {
            local_380 = pWVar12;
          }
LAB_18003bf22:
          pWVar12 = local_360;
          local_3b4 = local_3b4 + -1;
          iVar6 = local_38c;
          if (WVar5 != L'\xffff') {
            FUN_1800486b0(WVar5,local_388);
            iVar6 = local_38c;
          }
          while( true ) {
            if ((iVar6 != 0) && (bVar26 = local_3a0 == 0, local_3a0 = local_3a0 + -1, bVar26))
            goto LAB_18003bfc2;
            iVar24 = local_3b4 + 1;
            WVar4 = FUN_180048480(local_388);
            uVar9 = (ulonglong)(ushort)WVar4;
            if (WVar4 == L'\xffff') break;
            if (uVar16 != 99) {
              if (uVar16 == 0x73) {
                if (((8 < (ushort)WVar4) && ((ushort)WVar4 < 0xe)) || (WVar4 == L' ')) break;
              }
              else if ((uVar16 != 0x7b) ||
                      (((uint)(int)(char)(*(byte *)((ulonglong)((ushort)WVar4 >> 3) +
                                                   (longlong)local_398) ^ local_3aa) >>
                        ((ushort)WVar4 & 7) & 1) == 0)) break;
            }
            local_3b4 = iVar24;
            if (local_3b8 == '\0') {
              if ((char)uVar22 == '\0') {
                local_390 = 0;
                iVar24 = FUN_180047b90(&local_390,(ulonglong *)local_360,5,WVar4);
                if (iVar24 == 0) {
                  local_360 = (WCHAR *)((longlong)local_360 + (longlong)local_390);
                }
                else if ((iVar24 == 0x16) || (iVar24 == 0x22)) {
                    /* WARNING: Subroutine does not return */
                  FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
                }
              }
              else {
                *local_360 = WVar4;
                local_360 = local_360 + 1;
              }
            }
            else {
              pWVar12 = pWVar12 + 1;
            }
          }
          if (WVar4 != L'\xffff') {
            FUN_1800486b0(WVar4,local_388);
          }
LAB_18003bfc2:
          WVar5 = (WCHAR)uVar9;
          if (pWVar12 == local_360) goto LAB_18003cd8d;
          if ((local_3b8 == '\0') && (uVar16 != 99)) {
            if ((char)uVar22 == '\0') {
              *(undefined1 *)local_360 = 0;
            }
            else {
              *local_360 = L'\0';
            }
          }
        }
        local_380 = local_380 + 1;
        pWVar10 = local_3a8;
        param_1 = local_388;
LAB_18003cb6b:
        param_2 = local_380;
        if (((short)uVar9 == -1) &&
           ((WVar5 = L'\xffff', *local_380 != L'%' || (local_380[1] != L'n')))) goto LAB_18003cd8d;
LAB_18003cb87:
        local_380 = param_2;
        WVar5 = (WCHAR)uVar9;
        WVar4 = *local_380;
        param_2 = local_380;
        if (WVar4 == L'\0') goto LAB_18003cd8d;
        goto LAB_18003b9e4;
      }
      if ((uVar16 == 99) || (uVar16 == 0x7b)) {
        local_3b4 = local_3b4 + 1;
        WVar5 = FUN_180048480(local_388);
      }
      else {
        do {
          local_3b4 = local_3b4 + 1;
          WVar5 = FUN_180048480(pFVar3);
          if (WVar5 == L'\xffff') break;
          iVar6 = iswctype(WVar5,8);
        } while (iVar6 != 0);
        uVar16 = local_358;
        cVar15 = (char)local_364;
      }
      uVar9 = (ulonglong)(ushort)WVar5;
      iVar6 = local_38c;
      iVar24 = local_3a0;
      if (WVar5 != L'\xffff') goto LAB_18003bd46;
      WVar5 = L'\xffff';
LAB_18003cd8d:
      if (local_350 == 1) {
        FUN_180034a70(local_398);
      }
      if (local_378 == 1) {
        FUN_180034a70(pWVar10);
      }
      if (WVar5 == L'\xffff') {
        if (local_328 != '\0') {
          local_330[0x32] = local_330[0x32] & 0xfffffffd;
        }
        goto LAB_18003ce1a;
      }
    }
    if (local_328 != '\0') {
      local_330[0x32] = local_330[0x32] & 0xfffffffd;
    }
  }
LAB_18003ce1a:
  return (uint)local_58 ^ (uint)auStackY_3e8;
}


==================================================================

### EXPORT FUNC 18003cf10 (812 bytes) name=FUN_18003cf10

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

ulonglong FUN_18003cf10(LPWSTR param_1,byte *param_2,ulonglong param_3,undefined8 *param_4)

{
  byte bVar1;
  ushort uVar2;
  int iVar3;
  DWORD DVar4;
  DWORD *pDVar5;
  longlong lVar6;
  undefined6 extraout_var;
  uint cchWideChar;
  uint uVar7;
  ulonglong uVar8;
  byte *pbVar9;
  pthreadlocinfo local_28;
  pthreadmbcinfo local_20;
  DWORD *local_18;
  char local_10;
  
  uVar8 = 0;
  if (param_1 != (LPWSTR)0x0) {
    if (param_3 == 0) {
      return 0;
    }
    if (param_3 != 0) {
      *param_1 = L'\0';
    }
  }
  if ((param_2 == (byte *)0x0) || (0x7fffffff < param_3)) {
    pDVar5 = FUN_180035b40();
    *pDVar5 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffffffffffff;
  }
  local_10 = '\0';
  if (param_4 == (undefined8 *)0x0) {
    local_18 = FUN_1800380a0();
    local_28 = *(pthreadlocinfo *)(local_18 + 0x30);
    local_20 = *(pthreadmbcinfo *)(local_18 + 0x2e);
    if ((local_28 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_18[0x32]) == 0))
    {
      local_28 = __updatetlocinfo();
    }
    if ((local_20 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_18[0x32]) == 0))
    {
      local_20 = __updatetmbcinfo();
    }
    if ((local_18[0x32] & 2) == 0) {
      local_18[0x32] = local_18[0x32] | 2;
      local_10 = '\x01';
    }
  }
  else {
    local_28 = (pthreadlocinfo)*param_4;
    local_20 = (pthreadmbcinfo)param_4[1];
  }
  if (param_1 == (LPWSTR)0x0) {
    if (*(int *)((longlong)&local_28->lc_category[0].locale + 4) == 0) {
      uVar8 = 0xffffffffffffffff;
      do {
        if (uVar8 == 0) break;
        uVar8 = uVar8 - 1;
        bVar1 = *param_2;
        param_2 = param_2 + 1;
      } while (bVar1 != 0);
      if (local_10 != '\0') {
        local_18[0x32] = local_18[0x32] & 0xfffffffd;
      }
      return ~uVar8 - 1;
    }
    iVar3 = MultiByteToWideChar(local_28->lc_codepage,9,(LPCSTR)param_2,-1,(LPWSTR)0x0,0);
    lVar6 = (longlong)iVar3;
    if (lVar6 == 0) {
      pDVar5 = FUN_180035b40();
      *pDVar5 = 0x2a;
      goto LAB_18003d0fd;
    }
  }
  else {
    if (*(int *)((longlong)&local_28->lc_category[0].locale + 4) == 0) {
      if (param_3 != 0) {
        do {
          *param_1 = (ushort)param_2[uVar8];
          if (param_2[uVar8] == 0) break;
          uVar8 = uVar8 + 1;
          param_1 = param_1 + 1;
        } while (uVar8 < param_3);
      }
      if (local_10 == '\0') {
        return uVar8;
      }
      local_18[0x32] = local_18[0x32] & 0xfffffffd;
      return uVar8;
    }
    cchWideChar = (uint)param_3;
    iVar3 = MultiByteToWideChar(local_28->lc_codepage,9,(LPCSTR)param_2,-1,param_1,cchWideChar);
    lVar6 = (longlong)iVar3;
    if (lVar6 == 0) {
      DVar4 = GetLastError();
      if (DVar4 == 0x7a) {
        uVar8 = param_3 & 0xffffffff;
        pbVar9 = param_2;
        uVar7 = cchWideChar;
        while (uVar7 != 0) {
          uVar7 = (int)uVar8 - 1;
          uVar8 = (ulonglong)uVar7;
          if (*pbVar9 == 0) break;
          uVar2 = FUN_180047bb0((uint)*pbVar9,&local_28);
          if (((int)CONCAT62(extraout_var,uVar2) != 0) && (pbVar9 = pbVar9 + 1, *pbVar9 == 0))
          goto LAB_18003d188;
          pbVar9 = pbVar9 + 1;
        }
        iVar3 = MultiByteToWideChar(local_28->lc_codepage,1,(LPCSTR)param_2,
                                    (int)pbVar9 - (int)param_2,param_1,cchWideChar);
        uVar8 = (ulonglong)iVar3;
        if (uVar8 != 0) {
          if (local_10 == '\0') {
            return uVar8;
          }
          local_18[0x32] = local_18[0x32] & 0xfffffffd;
          return uVar8;
        }
LAB_18003d188:
        pDVar5 = FUN_180035b40();
        *pDVar5 = 0x2a;
        *param_1 = L'\0';
        if (local_10 != '\0') {
          local_18[0x32] = local_18[0x32] & 0xfffffffd;
        }
        return 0xffffffffffffffff;
      }
      pDVar5 = FUN_180035b40();
      *pDVar5 = 0x2a;
      *param_1 = L'\0';
LAB_18003d0fd:
      if (local_10 != '\0') {
        local_18[0x32] = local_18[0x32] & 0xfffffffd;
      }
      return 0xffffffffffffffff;
    }
  }
  if (local_10 != '\0') {
    local_18[0x32] = local_18[0x32] & 0xfffffffd;
  }
  return lVar6 - 1;
}


==================================================================

### EXPORT FUNC 18003d240 (528 bytes) name=FUN_18003d240

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

DWORD FUN_18003d240(ulonglong *param_1,LPWSTR param_2,ulonglong param_3,byte *param_4,
                   ulonglong param_5,longlong *param_6)

{
  pthreadmbcinfo ptVar1;
  bool bVar2;
  DWORD DVar3;
  DWORD *pDVar4;
  ulonglong uVar5;
  DWORD *pDVar6;
  pthreadlocinfo local_48;
  pthreadmbcinfo local_40;
  DWORD *local_38;
  undefined1 local_30;
  
  DVar3 = 0;
  if (param_2 == (LPWSTR)0x0) {
    if (param_3 != 0) {
LAB_18003d26c:
      pDVar4 = FUN_180035b40();
      *pDVar4 = 0x16;
      FUN_1800384e0(0,0,0,0,0);
      return 0x16;
    }
  }
  else {
    if (param_3 == 0) goto LAB_18003d26c;
    *param_2 = L'\0';
  }
  if (param_1 != (ulonglong *)0x0) {
    *param_1 = 0;
  }
  bVar2 = false;
  local_30 = 0;
  if (param_6 == (longlong *)0x0) {
    pDVar4 = FUN_1800380a0();
    local_48 = *(pthreadlocinfo *)(pDVar4 + 0x30);
    ptVar1 = *(pthreadmbcinfo *)(pDVar4 + 0x2e);
    local_40 = ptVar1;
    local_38 = pDVar4;
    if ((local_48 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & pDVar4[0x32]) == 0)) {
      local_48 = __updatetlocinfo();
    }
    if ((ptVar1 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & pDVar4[0x32]) == 0)) {
      local_40 = __updatetmbcinfo();
    }
    if ((pDVar4[0x32] & 2) == 0) {
      pDVar4[0x32] = pDVar4[0x32] | 2;
      bVar2 = true;
      local_30 = 1;
    }
  }
  else {
    local_48 = (pthreadlocinfo)*param_6;
    local_40 = (pthreadmbcinfo)param_6[1];
    bVar2 = false;
    pDVar4 = local_38;
  }
  uVar5 = param_5;
  if (param_3 < param_5) {
    uVar5 = param_3;
  }
  uVar5 = FUN_18003cf10(param_2,param_4,uVar5,&local_48);
  if (uVar5 == 0xffffffffffffffff) {
    if (param_2 != (LPWSTR)0x0) {
      *param_2 = L'\0';
    }
    pDVar6 = FUN_180035b40();
    DVar3 = *pDVar6;
    if (bVar2) {
      pDVar4[0x32] = pDVar4[0x32] & 0xfffffffd;
    }
  }
  else {
    uVar5 = uVar5 + 1;
    if (param_2 != (LPWSTR)0x0) {
      DVar3 = 0;
      if (param_3 < uVar5) {
        if (param_5 != 0xffffffffffffffff) {
          *param_2 = L'\0';
          pDVar6 = FUN_180035b40();
          *pDVar6 = 0x22;
          FUN_1800384e0(0,0,0,0,0);
          if (bVar2) {
            pDVar4[0x32] = pDVar4[0x32] & 0xfffffffd;
          }
          return 0x22;
        }
        DVar3 = 0x50;
        uVar5 = param_3;
      }
      param_2[uVar5 - 1] = L'\0';
    }
    if (param_1 != (ulonglong *)0x0) {
      *param_1 = uVar5;
    }
    if (bVar2) {
      pDVar4[0x32] = pDVar4[0x32] & 0xfffffffd;
    }
  }
  return DVar3;
}


==================================================================

### EXPORT FUNC 18003d450 (267 bytes) name=FUN_18003d450

void FUN_18003d450(int param_1,int param_2,longlong *param_3,ulonglong *param_4,int param_5)

{
  char cVar1;
  ulonglong uVar2;
  longlong lVar3;
  char *pcVar4;
  char *pcVar5;
  int iVar6;
  char *pcVar7;
  
  iVar6 = 0;
  if (param_5 == 0) {
    if (*param_4 <= (ulonglong)(longlong)param_2) {
      *param_4 = 0;
      return;
    }
    lVar3 = (longlong)(param_2 + -1);
    for (; param_2 != 0; param_2 = param_2 + -1) {
      iVar6 = iVar6 + 1;
      *(char *)(lVar3 + *param_3) = (char)param_1 + (char)(param_1 / 10) * -10 + '0';
      lVar3 = lVar3 + -1;
      param_1 = param_1 / 10;
    }
    *param_3 = *param_3 + (longlong)iVar6;
    *param_4 = *param_4 - (longlong)iVar6;
    return;
  }
  uVar2 = *param_4;
  pcVar4 = (char *)*param_3;
  while (pcVar7 = pcVar4, 1 < uVar2) {
    pcVar7 = pcVar4 + 1;
    iVar6 = param_1 / 10;
    *pcVar4 = (char)param_1 + (char)iVar6 * -10 + '0';
    *param_4 = *param_4 - 1;
    if (iVar6 < 1) break;
    pcVar4 = pcVar7;
    param_1 = iVar6;
    uVar2 = *param_4;
  }
  pcVar4 = (char *)*param_3;
  *param_3 = (longlong)pcVar7;
  pcVar7 = pcVar7 + -1;
  do {
    cVar1 = *pcVar7;
    pcVar5 = pcVar4 + 1;
    *pcVar7 = *pcVar4;
    *pcVar4 = cVar1;
    pcVar7 = pcVar7 + -1;
    pcVar4 = pcVar5;
  } while (pcVar5 < pcVar7);
  return;
}


==================================================================

### EXPORT FUNC 18003d560 (1512 bytes) name=FUN_18003d560

undefined8
FUN_18003d560(undefined8 *param_1,undefined1 param_2,int *param_3,longlong *param_4,
             ulonglong *param_5,longlong param_6,int param_7)

{
  char cVar1;
  int iVar2;
  undefined8 uVar3;
  DWORD *pDVar4;
  undefined **ppuVar5;
  int iVar6;
  char *pcVar7;
  int iVar8;
  
  switch(param_2) {
  case 4:
  case 0xd:
    return 1;
  default:
    goto LAB_18003d798;
  case 0x25:
    *(undefined1 *)*param_4 = 0x25;
    *param_4 = *param_4 + 1;
    *param_5 = *param_5 - 1;
    return 1;
  case 0x41:
    iVar6 = param_3[6];
    if ((-1 < iVar6) && (iVar6 < 7)) {
      pcVar7 = *(char **)(param_6 + 0x38 + (longlong)iVar6 * 8);
      if (*param_5 == 0) {
        return 1;
      }
      do {
        cVar1 = *pcVar7;
        if (cVar1 == '\0') {
          return 1;
        }
        pcVar7 = pcVar7 + 1;
        *(char *)*param_4 = cVar1;
        *param_4 = *param_4 + 1;
        *param_5 = *param_5 - 1;
      } while (*param_5 != 0);
      return 1;
    }
    break;
  case 0x42:
    iVar6 = param_3[4];
    if ((-1 < iVar6) && (iVar6 < 0xc)) {
      pcVar7 = *(char **)(param_6 + 0xd0 + (longlong)iVar6 * 8);
      if (*param_5 == 0) {
        return 1;
      }
      do {
        cVar1 = *pcVar7;
        if (cVar1 == '\0') {
          return 1;
        }
        pcVar7 = pcVar7 + 1;
        *(char *)*param_4 = cVar1;
        *param_4 = *param_4 + 1;
        *param_5 = *param_5 - 1;
      } while (*param_5 != 0);
      return 1;
    }
    break;
  case 0x48:
    iVar6 = param_3[2];
    if ((iVar6 < 0) || (0x17 < iVar6)) break;
    goto LAB_18003d81b;
  case 0x49:
    iVar6 = param_3[2];
    if ((-1 < iVar6) && (iVar6 < 0x18)) {
      iVar6 = iVar6 % 0xc;
      if (iVar6 == 0) {
        iVar6 = 0xc;
      }
      goto LAB_18003d81b;
    }
    break;
  case 0x4d:
    iVar6 = param_3[1];
    goto LAB_18003d89c;
  case 0x53:
    iVar6 = *param_3;
LAB_18003d89c:
    if ((-1 < iVar6) && (iVar6 < 0x3c)) {
LAB_18003d81b:
      iVar8 = 2;
LAB_18003d820:
      FUN_18003d450(iVar6,iVar8,param_4,param_5,param_7);
      return 1;
    }
    break;
  case 0x55:
    iVar8 = param_3[6];
    if ((-1 < iVar8) && (iVar8 < 7)) {
LAB_18003d9d1:
      iVar2 = param_3[7];
      if ((-1 < iVar2) && (iVar2 < 0x16e)) {
        if (iVar2 < iVar8) {
          iVar6 = 0;
        }
        else {
          iVar6 = iVar2 / 7;
          if (iVar8 <= iVar2 % 7) {
            iVar6 = iVar6 + 1;
          }
        }
        goto LAB_18003d81b;
      }
    }
    break;
  case 0x57:
    iVar8 = param_3[6];
    if ((-1 < iVar8) && (iVar8 < 7)) {
      if (iVar8 == 0) {
        iVar8 = 6;
      }
      else {
        iVar8 = iVar8 + -1;
      }
      goto LAB_18003d9d1;
    }
    break;
  case 0x58:
    goto LAB_18003d781;
  case 0x59:
    iVar6 = param_3[5];
    if ((-0x76d < iVar6) && (iVar6 < 0x1fa4)) {
      iVar8 = 4;
      iVar6 = iVar6 + 0x76c;
      goto LAB_18003d820;
    }
    break;
  case 0x5a:
  case 0x7a:
    __tzset();
    ppuVar5 = FUN_18003f7a0();
    pcVar7 = ppuVar5[param_3[8] != 0];
    if (*param_5 == 0) {
      return 1;
    }
    do {
      cVar1 = *pcVar7;
      if (cVar1 == '\0') {
        return 1;
      }
      pcVar7 = pcVar7 + 1;
      *(char *)*param_4 = cVar1;
      *param_4 = *param_4 + 1;
      *param_5 = *param_5 - 1;
    } while (*param_5 != 0);
    return 1;
  case 0x61:
    iVar6 = param_3[6];
    if ((-1 < iVar6) && (iVar6 < 7)) {
      pcVar7 = *(char **)(param_6 + (longlong)iVar6 * 8);
      if (*param_5 == 0) {
        return 1;
      }
      do {
        cVar1 = *pcVar7;
        if (cVar1 == '\0') {
          return 1;
        }
        pcVar7 = pcVar7 + 1;
        *(char *)*param_4 = cVar1;
        *param_4 = *param_4 + 1;
        *param_5 = *param_5 - 1;
      } while (*param_5 != 0);
      return 1;
    }
    break;
  case 0x62:
    iVar6 = param_3[4];
    if ((-1 < iVar6) && (iVar6 < 0xc)) {
      pcVar7 = *(char **)(param_6 + 0x70 + (longlong)iVar6 * 8);
      if (*param_5 == 0) {
        return 1;
      }
      do {
        cVar1 = *pcVar7;
        if (cVar1 == '\0') {
          return 1;
        }
        pcVar7 = pcVar7 + 1;
        *(char *)*param_4 = cVar1;
        *param_4 = *param_4 + 1;
        *param_5 = *param_5 - 1;
      } while (*param_5 != 0);
      return 1;
    }
    break;
  case 99:
    uVar3 = FUN_18003dc20(param_1,(uint)(param_7 != 0),(undefined2 *)param_3,param_4,param_5,param_6
                         );
    if ((int)uVar3 == 0) {
      return 0;
    }
    if (*param_5 == 0) {
      return 0;
    }
    *(undefined1 *)*param_4 = 0x20;
    *param_4 = *param_4 + 1;
    *param_5 = *param_5 - 1;
LAB_18003d781:
    iVar6 = 2;
LAB_18003d789:
    uVar3 = FUN_18003dc20(param_1,iVar6,(undefined2 *)param_3,param_4,param_5,param_6);
    if ((int)uVar3 != 0) {
      return 1;
    }
    return 0;
  case 100:
    iVar6 = param_3[3];
    if ((0 < iVar6) && (iVar6 < 0x20)) goto LAB_18003d81b;
    break;
  case 0x6a:
    iVar6 = param_3[7];
    if ((-1 < iVar6) && (iVar6 < 0x16e)) {
      FUN_18003d450(iVar6 + 1,3,param_4,param_5,param_7);
      return 1;
    }
    break;
  case 0x6d:
    iVar6 = param_3[4];
    if ((-1 < iVar6) && (iVar6 < 0xc)) {
      iVar6 = iVar6 + 1;
      goto LAB_18003d81b;
    }
    break;
  case 0x70:
    iVar6 = param_3[2];
    if ((-1 < iVar6) && (iVar6 < 0x18)) {
      if (0xb < iVar6) {
        pcVar7 = *(char **)(param_6 + 0x138);
        if (*param_5 == 0) {
          return 1;
        }
        do {
          cVar1 = *pcVar7;
          if (cVar1 == '\0') {
            return 1;
          }
          pcVar7 = pcVar7 + 1;
          *(char *)*param_4 = cVar1;
          *param_4 = *param_4 + 1;
          *param_5 = *param_5 - 1;
        } while (*param_5 != 0);
        return 1;
      }
      pcVar7 = *(char **)(param_6 + 0x130);
      if (*param_5 != 0) {
        do {
          cVar1 = *pcVar7;
          if (cVar1 == '\0') {
            return 1;
          }
          pcVar7 = pcVar7 + 1;
          *(char *)*param_4 = cVar1;
          *param_4 = *param_4 + 1;
          *param_5 = *param_5 - 1;
        } while (*param_5 != 0);
        return 1;
      }
      return 1;
    }
    break;
  case 0x77:
    iVar6 = param_3[6];
    if ((-1 < iVar6) && (iVar6 < 7)) {
      iVar8 = 1;
      goto LAB_18003d820;
    }
    break;
  case 0x78:
    if (param_7 == 0) {
      iVar6 = 0;
    }
    else {
      iVar6 = 1;
    }
    goto LAB_18003d789;
  case 0x79:
    if (-1 < param_3[5]) {
      iVar6 = param_3[5] % 100;
      goto LAB_18003d81b;
    }
  }
  pDVar4 = FUN_180035b40();
  *pDVar4 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
LAB_18003d798:
  return 0;
}


==================================================================

### EXPORT FUNC 18003dc20 (1323 bytes) name=FUN_18003dc20

/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
FUN_18003dc20(undefined8 *param_1,int param_2,undefined2 *param_3,longlong *param_4,
             ulonglong *param_5,longlong param_6)

{
  byte bVar1;
  char cVar2;
  int *piVar3;
  undefined1 *puVar4;
  ushort uVar5;
  int iVar6;
  ulonglong uVar7;
  undefined8 uVar8;
  undefined6 extraout_var;
  undefined6 extraout_var_00;
  undefined6 extraout_var_01;
  undefined6 extraout_var_02;
  size_t sVar9;
  undefined1 uVar10;
  uint uVar11;
  uint uVar12;
  undefined4 *puVar13;
  undefined1 *puVar14;
  undefined1 *puVar15;
  byte *pbVar16;
  char *pcVar17;
  longlong lVar18;
  undefined4 *puVar19;
  byte *pbVar20;
  undefined4 uVar21;
  undefined4 uVar23;
  code *pcVar24;
  undefined1 auStack_88 [32];
  undefined8 local_68;
  undefined4 local_60;
  short local_48;
  short sStack_46;
  undefined2 local_42;
  undefined2 local_40;
  undefined2 local_3e;
  undefined2 local_3c;
  undefined2 local_3a;
  int *local_38;
  ulonglong local_30;
  undefined4 uVar22;
  
  puVar14 = auStack_88;
  puVar15 = auStack_88;
  local_30 = DAT_18006cea0 ^ (ulonglong)&local_48;
  local_38 = (int *)param_3;
  if (param_2 == 0) {
    pbVar16 = *(byte **)(param_6 + 0x140);
  }
  else if (param_2 == 1) {
    pbVar16 = *(byte **)(param_6 + 0x148);
  }
  else {
    pbVar16 = *(byte **)(param_6 + 0x150);
  }
  puVar4 = auStack_88;
  if (*(int *)(param_6 + 0x15c) != 1) {
    local_60 = 0;
    pcVar24 = GetTimeFormatA_exref;
    if (param_2 != 2) {
      pcVar24 = GetDateFormatA_exref;
    }
    local_48 = param_3[10] + 0x76c;
    local_3a = 0;
    sStack_46 = param_3[8] + 1;
    local_68 = 0;
    local_42 = param_3[6];
    local_40 = param_3[4];
    local_3e = param_3[2];
    local_3c = *param_3;
    iVar6 = (*pcVar24)(*(undefined4 *)(param_6 + 0x158),0,&local_48,pbVar16);
    puVar4 = auStack_88;
    if (iVar6 != 0) {
      sVar9 = (size_t)(iVar6 + 0x10);
      if (iVar6 + 0x10 < 0x401) {
        uVar7 = sVar9 + 0xf;
        if (uVar7 <= sVar9) {
          uVar7 = 0xffffffffffffff0;
        }
        lVar18 = -(uVar7 & 0xfffffffffffffff0);
        puVar14 = auStack_88 + lVar18;
        puVar13 = (undefined4 *)((longlong)&local_48 + lVar18);
        puVar4 = auStack_88 + lVar18;
        if (puVar13 == (undefined4 *)0x0) goto LAB_18003de07;
        *puVar13 = 0xcccc;
LAB_18003dd67:
        puVar19 = puVar13 + 4;
        puVar15 = puVar14;
      }
      else {
        puVar13 = FUN_1800349a0(sVar9);
        puVar19 = (undefined4 *)0x0;
        if (puVar13 != (undefined4 *)0x0) {
          *puVar13 = 0xdddd;
          goto LAB_18003dd67;
        }
      }
      puVar4 = puVar15;
      if (puVar19 != (undefined4 *)0x0) {
        uVar22 = *(undefined4 *)(param_6 + 0x158);
        *(int *)(puVar15 + 0x28) = iVar6;
        *(undefined4 **)(puVar15 + 0x20) = puVar19;
        *(undefined8 *)(puVar15 + -8) = 0x18003dd97;
        iVar6 = (*pcVar24)(uVar22,0,&local_48,pbVar16);
        puVar13 = puVar19;
        while ((iVar6 = iVar6 + -1, 0 < iVar6 && (*param_5 != 0))) {
          *(undefined1 *)*param_4 = *(undefined1 *)puVar13;
          *param_4 = *param_4 + 1;
          *param_5 = *param_5 - 1;
          puVar13 = (undefined4 *)((longlong)puVar13 + 1);
        }
        if (puVar19[-4] == 0xdddd) {
          *(undefined8 *)(puVar15 + -8) = 0x18003ddd8;
          FUN_180034a70(puVar19 + -4);
        }
        goto LAB_18003ddd8;
      }
    }
  }
LAB_18003de07:
  puVar15 = puVar4;
  piVar3 = local_38;
  bVar1 = *pbVar16;
  while ((bVar1 != 0 && (*param_5 != 0))) {
    uVar23 = 0;
    uVar21 = 0;
    uVar22 = 0;
    lVar18 = 0;
    pbVar20 = pbVar16;
    uVar12 = 0;
    do {
      uVar11 = uVar12;
      pbVar20 = pbVar20 + 1;
      uVar12 = uVar11 + 1;
      lVar18 = lVar18 + 1;
    } while (*pbVar20 == bVar1);
    switch((int)(char)bVar1) {
    case 0x27:
      if ((uVar12 & 1) == 0) {
        pbVar20 = pbVar16 + (int)uVar12;
      }
      else {
        pbVar20 = pbVar16 + lVar18;
        while( true ) {
          bVar1 = *pbVar20;
          if (bVar1 == 0) goto LAB_18003ddd8;
          if (*param_5 == 0) goto LAB_18003df36;
          if (bVar1 == 0x27) break;
          *(undefined8 *)(puVar15 + -8) = 0x18003e0f6;
          uVar5 = FUN_180047bb0((int)(char)bVar1,param_1);
          if (((int)CONCAT62(extraout_var_02,uVar5) != 0) && (1 < *param_5)) {
            if (pbVar20[1] == 0) goto LAB_18003e144;
            bVar1 = *pbVar20;
            pbVar20 = pbVar20 + 1;
            *(byte *)*param_4 = bVar1;
            *param_4 = *param_4 + 1;
            *param_5 = *param_5 - 1;
          }
          bVar1 = *pbVar20;
          pbVar20 = pbVar20 + 1;
          *(byte *)*param_4 = bVar1;
          *param_4 = *param_4 + 1;
          *param_5 = *param_5 - 1;
        }
        pbVar20 = pbVar20 + 1;
      }
      goto LAB_18003df36;
    default:
switchD_18003de6d_caseD_28:
      *(undefined8 *)(puVar15 + -8) = 0x18003defa;
      uVar5 = FUN_180047bb0((int)(char)bVar1,param_1);
      if (((int)CONCAT62(extraout_var,uVar5) == 0) || (*param_5 < 2)) {
LAB_18003df22:
        pbVar20 = pbVar16 + 1;
        *(byte *)*param_4 = *pbVar16;
        *param_4 = *param_4 + 1;
        *param_5 = *param_5 - 1;
        goto LAB_18003df36;
      }
      if (pbVar16[1] != 0) {
        bVar1 = *pbVar16;
        pbVar16 = pbVar16 + 1;
        *(byte *)*param_4 = bVar1;
        *param_4 = *param_4 + 1;
        *param_5 = *param_5 - 1;
        goto LAB_18003df22;
      }
      goto LAB_18003e144;
    case 0x41:
    case 0x61:
      *(undefined8 *)(puVar15 + -8) = 0x18003dfaa;
      iVar6 = FUN_180048b00(pbVar16,(byte *)"am/pm");
      if (iVar6 == 0) {
        pbVar20 = pbVar16 + 5;
      }
      else {
        *(undefined8 *)(puVar15 + -8) = 0x18003dfc3;
        iVar6 = FUN_180048b00(pbVar16,&DAT_180057544);
        if (iVar6 == 0) {
          pbVar20 = pbVar16 + 3;
        }
      }
      uVar10 = 0x70;
      break;
    case 0x48:
      if (uVar11 == 0) {
        uVar22 = 1;
      }
      else {
        uVar22 = uVar23;
        if (uVar11 != 1) goto switchD_18003de6d_caseD_28;
      }
      uVar10 = 0x48;
      break;
    case 0x4d:
      if (uVar11 == 0) {
        uVar23 = 1;
      }
      else if (uVar11 != 1) {
        if (uVar11 == 2) {
          uVar10 = 0x62;
        }
        else {
          if (uVar11 != 3) goto switchD_18003de6d_caseD_28;
          uVar10 = 0x42;
        }
        break;
      }
      uVar22 = uVar23;
      uVar10 = 0x6d;
      break;
    case 100:
      if (uVar11 == 0) {
        uVar23 = 1;
      }
      else if (uVar11 != 1) {
        if (uVar11 == 2) {
          uVar10 = 0x61;
        }
        else {
          if (uVar11 != 3) goto switchD_18003de6d_caseD_28;
          uVar10 = 0x41;
          uVar22 = uVar21;
        }
        break;
      }
      uVar22 = uVar23;
      uVar10 = 100;
      break;
    case 0x68:
      if (uVar11 == 0) {
        uVar23 = 1;
      }
      else if (uVar11 != 1) goto switchD_18003de6d_caseD_28;
      uVar10 = 0x49;
      uVar22 = uVar23;
      break;
    case 0x6d:
      if (uVar11 == 0) {
        uVar23 = 1;
      }
      else if (uVar11 != 1) goto switchD_18003de6d_caseD_28;
      uVar10 = 0x4d;
      uVar22 = uVar23;
      break;
    case 0x73:
      if (uVar11 == 0) {
        uVar23 = 1;
      }
      else if (uVar11 != 1) goto switchD_18003de6d_caseD_28;
      uVar10 = 0x53;
      uVar22 = uVar23;
      break;
    case 0x74:
      if (piVar3[2] < 0xc) {
        pcVar17 = *(char **)(param_6 + 0x130);
      }
      else {
        pcVar17 = *(char **)(param_6 + 0x138);
      }
      if ((uVar12 == 1) && (*param_5 != 0)) {
        cVar2 = *pcVar17;
        *(undefined8 *)(puVar15 + -8) = 0x18003e02a;
        uVar5 = FUN_180047bb0((int)cVar2,param_1);
        if (((int)CONCAT62(extraout_var_00,uVar5) != 0) && (1 < *param_5)) {
          if (pcVar17[1] == '\0') goto LAB_18003e144;
          cVar2 = *pcVar17;
          pcVar17 = pcVar17 + 1;
          *(char *)*param_4 = cVar2;
          *param_4 = *param_4 + 1;
          *param_5 = *param_5 - 1;
        }
        *(char *)*param_4 = *pcVar17;
        *param_4 = *param_4 + 1;
        *param_5 = *param_5 - 1;
      }
      else {
        cVar2 = *pcVar17;
        while ((cVar2 != '\0' && (*param_5 != 0))) {
          *(undefined8 *)(puVar15 + -8) = 0x18003e081;
          uVar5 = FUN_180047bb0((int)cVar2,param_1);
          if (((int)CONCAT62(extraout_var_01,uVar5) != 0) && (1 < *param_5)) {
            if (pcVar17[1] == '\0') goto LAB_18003e144;
            cVar2 = *pcVar17;
            pcVar17 = pcVar17 + 1;
            *(char *)*param_4 = cVar2;
            *param_4 = *param_4 + 1;
            *param_5 = *param_5 - 1;
          }
          cVar2 = *pcVar17;
          pcVar17 = pcVar17 + 1;
          *(char *)*param_4 = cVar2;
          *param_4 = *param_4 + 1;
          *param_5 = *param_5 - 1;
          cVar2 = *pcVar17;
        }
      }
      goto LAB_18003df36;
    case 0x79:
      if (uVar12 == 2) {
        uVar10 = 0x79;
        uVar22 = uVar21;
      }
      else {
        if (uVar12 != 4) goto switchD_18003de6d_caseD_28;
        uVar10 = 0x59;
        uVar22 = uVar21;
      }
    }
    *(undefined4 *)(puVar15 + 0x30) = uVar22;
    *(longlong *)(puVar15 + 0x28) = param_6;
    *(ulonglong **)(puVar15 + 0x20) = param_5;
    *(undefined8 *)(puVar15 + -8) = 0x18003dfee;
    uVar8 = FUN_18003d560(param_1,uVar10,piVar3,param_4,*(ulonglong **)(puVar15 + 0x20),
                          *(longlong *)(puVar15 + 0x28),*(int *)(puVar15 + 0x30));
    if ((int)uVar8 == 0) {
LAB_18003e144:
      uVar8 = 0;
      goto LAB_18003dddd;
    }
LAB_18003df36:
    bVar1 = *pbVar20;
    pbVar16 = pbVar20;
  }
LAB_18003ddd8:
  uVar8 = 1;
LAB_18003dddd:
  *(undefined8 *)(puVar15 + -8) = 0x18003dde9;
  return uVar8;
}


==================================================================

### EXPORT FUNC 18003e1d0 (856 bytes) name=FUN_18003e1d0

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

longlong FUN_18003e1d0(char *param_1,ulonglong param_2,char *param_3,int *param_4,longlong param_5,
                      undefined8 *param_6)

{
  char cVar1;
  ushort uVar2;
  DWORD *pDVar3;
  undefined6 extraout_var;
  undefined8 uVar4;
  char *pcVar5;
  bool bVar6;
  char *local_res8;
  pthreadlocinfo local_48;
  pthreadmbcinfo local_40;
  DWORD *local_38;
  char local_30;
  
  local_30 = '\0';
  local_res8 = param_1;
  if (param_6 == (undefined8 *)0x0) {
    local_38 = FUN_1800380a0();
    local_48 = *(pthreadlocinfo *)(local_38 + 0x30);
    local_40 = *(pthreadmbcinfo *)(local_38 + 0x2e);
    if ((local_48 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_38[0x32]) == 0))
    {
      local_48 = __updatetlocinfo();
    }
    if ((local_40 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_38[0x32]) == 0))
    {
      local_40 = __updatetmbcinfo();
    }
    if ((local_38[0x32] & 2) == 0) {
      local_38[0x32] = local_38[0x32] | 2;
      local_30 = '\x01';
    }
  }
  else {
    local_48 = (pthreadlocinfo)*param_6;
    local_40 = (pthreadmbcinfo)param_6[1];
  }
  if (((local_res8 == (char *)0x0) || (param_2 == 0)) ||
     (*local_res8 = '\0', param_3 == (char *)0x0)) {
    pDVar3 = FUN_180035b40();
    *pDVar3 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    if (local_30 != '\0') {
      local_38[0x32] = local_38[0x32] & 0xfffffffd;
    }
  }
  else {
    param_6 = (undefined8 *)param_2;
    if (param_5 == 0) {
      param_5._0_4_ = local_48[1].refcount;
      param_5._4_4_ = local_48[1].lc_codepage;
    }
    while (bVar6 = false, param_6 != (undefined8 *)0x0) {
      cVar1 = *param_3;
      bVar6 = false;
      if (cVar1 == '\0') {
        if (param_6 != (undefined8 *)0x0) {
          *local_res8 = '\0';
          if (local_30 != '\0') {
            local_38[0x32] = local_38[0x32] & 0xfffffffd;
            return param_2 - (longlong)param_6;
          }
          return param_2 - (longlong)param_6;
        }
        break;
      }
      if (cVar1 == '%') {
        if (param_4 == (int *)0x0) {
          pDVar3 = FUN_180035b40();
          *pDVar3 = 0x16;
          bVar6 = local_30 == '\0';
          goto LAB_18003e4fb;
        }
        pcVar5 = param_3 + 1;
        cVar1 = *pcVar5;
        if (cVar1 == '#') {
          pcVar5 = param_3 + 2;
        }
        uVar4 = FUN_18003d560(&local_48,*pcVar5,param_4,(longlong *)&local_res8,
                              (ulonglong *)&param_6,param_5,(uint)(cVar1 == '#'));
        if ((int)uVar4 == 0) {
          if (param_6 != (undefined8 *)0x0) {
            bVar6 = true;
          }
          break;
        }
      }
      else {
        uVar2 = FUN_180047bb0((int)cVar1,&local_48);
        if (((int)CONCAT62(extraout_var,uVar2) != 0) && ((undefined8 *)0x1 < param_6)) {
          if (param_3[1] == '\0') {
            bVar6 = true;
            break;
          }
          *local_res8 = *param_3;
          local_res8 = local_res8 + 1;
          param_6 = (undefined8 *)((longlong)param_6 + -1);
          param_3 = param_3 + 1;
        }
        *local_res8 = *param_3;
        local_res8 = local_res8 + 1;
        param_6 = (undefined8 *)((longlong)param_6 + -1);
        pcVar5 = param_3;
      }
      param_3 = pcVar5 + 1;
    }
    *param_1 = '\0';
    if ((bVar6) || (param_6 != (undefined8 *)0x0)) {
      pDVar3 = FUN_180035b40();
      *pDVar3 = 0x16;
      FUN_1800384e0(0,0,0,0,0);
      bVar6 = local_30 == '\0';
    }
    else {
      pDVar3 = FUN_180035b40();
      *pDVar3 = 0x22;
      bVar6 = local_30 == '\0';
    }
LAB_18003e4fb:
    if (!bVar6) {
      local_38[0x32] = local_38[0x32] & 0xfffffffd;
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 18003e530 (1167 bytes) name=FUN_18003e530

void FUN_18003e530(void)

{
  char cVar1;
  char cVar2;
  byte bVar3;
  byte bVar4;
  bool bVar5;
  int iVar6;
  UINT CodePage;
  DWORD DVar7;
  errno_t eVar8;
  int iVar9;
  undefined **ppuVar10;
  undefined8 uVar11;
  char *_Src;
  char *pcVar12;
  int *piVar13;
  ulonglong uVar14;
  byte *_Src_00;
  int local_res8 [2];
  int local_res10 [2];
  int local_res18 [2];
  int local_res20 [2];
  
  bVar5 = false;
  local_res8[0] = 0;
  local_res10[0] = 0;
  local_res18[0] = 0;
  _lock(7);
  ppuVar10 = FUN_18003f7a0();
  uVar11 = FUN_18003f720(local_res8);
  if ((int)uVar11 != 0) {
                    /* WARNING: Subroutine does not return */
    FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
  }
  uVar11 = FUN_18003f680(local_res10);
  if ((int)uVar11 != 0) {
                    /* WARNING: Subroutine does not return */
    FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
  }
  uVar11 = FUN_18003f6d0(local_res18);
  if ((int)uVar11 != 0) {
                    /* WARNING: Subroutine does not return */
    FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
  }
  CodePage = ___lc_codepage_func();
  DAT_180072ebc = 0;
  DAT_18006d8b0 = 0xffffffff;
  DAT_18006d8a0 = 0xffffffff;
  _Src = (char *)FUN_180048b60(&DAT_180057550);
  if ((_Src == (char *)0x0) || (*_Src == '\0')) {
    if (DAT_180072ec0 != (char *)0x0) {
      FUN_180034a70(DAT_180072ec0);
      DAT_180072ec0 = (char *)0x0;
    }
    DVar7 = GetTimeZoneInformation((LPTIME_ZONE_INFORMATION)&DAT_180072e10);
    if (DVar7 != 0xffffffff) {
      DAT_180072ebc = 1;
      local_res8[0] = DAT_180072e10 * 0x3c;
      if (DAT_180072e56 != 0) {
        local_res8[0] = local_res8[0] + DAT_180072e64 * 0x3c;
      }
      if ((DAT_180072eaa == 0) || (DAT_180072eb8 == 0)) {
        local_res10[0] = 0;
        local_res18[0] = 0;
      }
      else {
        local_res10[0] = 1;
        local_res18[0] = (DAT_180072eb8 - DAT_180072e64) * 0x3c;
      }
      iVar9 = WideCharToMultiByte(CodePage,0,(LPCWSTR)&DAT_180072e14,-1,*ppuVar10,0x3f,(LPCSTR)0x0,
                                  local_res20);
      if ((iVar9 == 0) || (local_res20[0] != 0)) {
        **ppuVar10 = 0;
      }
      else {
        (*ppuVar10)[0x3f] = 0;
      }
      iVar9 = WideCharToMultiByte(CodePage,0,(LPCWSTR)&DAT_180072e68,-1,ppuVar10[1],0x3f,(LPCSTR)0x0
                                  ,local_res20);
      if ((iVar9 == 0) || (local_res20[0] != 0)) {
        *ppuVar10[1] = 0;
      }
      else {
        ppuVar10[1][0x3f] = 0;
      }
    }
    bVar5 = true;
  }
  else {
    if (DAT_180072ec0 != (char *)0x0) {
      pcVar12 = _Src;
      do {
        cVar1 = *pcVar12;
        cVar2 = pcVar12[(longlong)DAT_180072ec0 - (longlong)_Src];
        if (cVar1 != cVar2) break;
        pcVar12 = pcVar12 + 1;
      } while (cVar2 != '\0');
      if (cVar1 == cVar2) {
        bVar5 = true;
        goto LAB_18003e821;
      }
    }
    if (DAT_180072ec0 != (char *)0x0) {
      FUN_180034a70(DAT_180072ec0);
    }
    uVar14 = 0xffffffffffffffff;
    pcVar12 = _Src;
    do {
      if (uVar14 == 0) break;
      uVar14 = uVar14 - 1;
      cVar1 = *pcVar12;
      pcVar12 = pcVar12 + 1;
    } while (cVar1 != '\0');
    DAT_180072ec0 = (char *)FUN_180040de0(~uVar14);
    if (DAT_180072ec0 == (char *)0x0) {
      bVar5 = true;
    }
    else {
      uVar14 = 0xffffffffffffffff;
      pcVar12 = _Src;
      do {
        if (uVar14 == 0) break;
        uVar14 = uVar14 - 1;
        cVar1 = *pcVar12;
        pcVar12 = pcVar12 + 1;
      } while (cVar1 != '\0');
      eVar8 = strcpy_s(DAT_180072ec0,~uVar14,_Src);
      if (eVar8 != 0) {
                    /* WARNING: Subroutine does not return */
        FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
      }
    }
  }
LAB_18003e821:
  iVar9 = local_res8[0];
  piVar13 = FUN_18003f790();
  iVar6 = local_res10[0];
  *piVar13 = iVar9;
  piVar13 = FUN_18003f770();
  iVar9 = local_res18[0];
  *piVar13 = iVar6;
  piVar13 = FUN_18003f780();
  *piVar13 = iVar9;
  FUN_180045470(7);
  if (!bVar5) {
    eVar8 = strncpy_s(*ppuVar10,0x40,_Src,3);
    if (eVar8 != 0) {
                    /* WARNING: Subroutine does not return */
      FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
    }
    _Src_00 = (byte *)(_Src + 3);
    bVar3 = *_Src_00;
    if (bVar3 == 0x2d) {
      _Src_00 = (byte *)(_Src + 4);
    }
    local_res8[0] = FUN_180048b50(_Src_00);
    local_res8[0] = local_res8[0] * 0xe10;
    for (; (bVar4 = *_Src_00, bVar4 == 0x2b || (('/' < (char)bVar4 && ((char)bVar4 < ':'))));
        _Src_00 = _Src_00 + 1) {
    }
    if (*_Src_00 == 0x3a) {
      _Src_00 = _Src_00 + 1;
      iVar9 = FUN_180048b50(_Src_00);
      local_res8[0] = local_res8[0] + iVar9 * 0x3c;
      bVar4 = *_Src_00;
      while (('/' < (char)bVar4 && ((char)bVar4 < ':'))) {
        _Src_00 = _Src_00 + 1;
        bVar4 = *_Src_00;
      }
      if (*_Src_00 == 0x3a) {
        _Src_00 = _Src_00 + 1;
        iVar9 = FUN_180048b50(_Src_00);
        local_res8[0] = local_res8[0] + iVar9;
        bVar4 = *_Src_00;
        while (('/' < (char)bVar4 && ((char)bVar4 < ':'))) {
          _Src_00 = _Src_00 + 1;
          bVar4 = *_Src_00;
        }
      }
    }
    if (bVar3 == 0x2d) {
      local_res8[0] = -local_res8[0];
    }
    local_res10[0] = (int)(char)*_Src_00;
    if (*_Src_00 == 0) {
      *ppuVar10[1] = 0;
    }
    else {
      eVar8 = strncpy_s(ppuVar10[1],0x40,(char *)_Src_00,3);
      if (eVar8 != 0) {
                    /* WARNING: Subroutine does not return */
        FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
      }
    }
    iVar9 = local_res8[0];
    piVar13 = FUN_18003f790();
    iVar6 = local_res10[0];
    *piVar13 = iVar9;
    piVar13 = FUN_18003f770();
    *piVar13 = iVar6;
  }
  return;
}


==================================================================

### EXPORT FUNC 18003e9d0 (25 bytes) name=FUN_18003e9d0

void FUN_18003e9d0(void)

{
  FUN_180045470(7);
  return;
}


==================================================================

### EXPORT FUNC 18003e9f0 (803 bytes) name=FUN_18003e9f0

void FUN_18003e9f0(int param_1,int param_2,int param_3,int param_4,int param_5,int param_6,
                  int param_7,int param_8,int param_9,int param_10,int param_11)

{
  undefined8 uVar1;
  uint uVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  int local_res8 [2];
  
  local_res8[0] = 0;
  if (param_2 == 1) {
    uVar2 = param_3 >> 0x1f & 3;
    uVar3 = uVar2 + param_3 & 3;
    if (((uVar3 == uVar2) && (param_3 != (param_3 / 100) * 100)) ||
       (param_3 + 0x76c == ((param_3 + 0x76c) / 400) * 400)) {
      iVar5 = *(int *)((longlong)&DAT_18006dc88 + (longlong)param_4 * 4 + 4);
    }
    else {
      iVar5 = *(int *)(&DAT_18006dcc4 + (longlong)param_4 * 4);
    }
    iVar4 = param_3 + -1;
    iVar4 = (param_3 * 0x16d + -0x63db +
            iVar5 + 1 + ((int)(iVar4 + (iVar4 >> 0x1f & 3U)) >> 2) +
            ((param_3 + 299) / 400 - iVar4 / 100)) % 7;
    if (param_6 < iVar4) {
      iVar5 = iVar5 + 1 + (param_5 * 7 - iVar4) + param_6;
    }
    else {
      iVar5 = iVar5 + -6 + (param_5 * 7 - iVar4) + param_6;
    }
    if (param_5 == 5) {
      if (((uVar3 == uVar2) && (param_3 != (param_3 / 100) * 100)) ||
         (param_3 + 0x76c == ((param_3 + 0x76c) / 400) * 400)) {
        iVar4 = (&DAT_18006dc90)[param_4];
      }
      else {
        iVar4 = *(int *)(&DAT_18006dcc8 + (longlong)param_4 * 4);
      }
      if (iVar4 < iVar5) {
        iVar5 = iVar5 + -7;
      }
    }
  }
  else {
    uVar2 = param_3 >> 0x1f & 3;
    if ((((param_3 + uVar2 & 3) == uVar2) && (param_3 != (param_3 / 100) * 100)) ||
       (param_3 + 0x76c == ((param_3 + 0x76c) / 400) * 400)) {
      iVar5 = *(int *)((longlong)&DAT_18006dc88 + (longlong)param_4 * 4 + 4);
    }
    else {
      iVar5 = *(int *)(&DAT_18006dcc4 + (longlong)param_4 * 4);
    }
    iVar5 = iVar5 + param_7;
  }
  if (param_1 == 1) {
    DAT_18006d8a4 = iVar5;
    DAT_18006d8a0 = param_3;
    DAT_18006d8a8 = ((param_8 * 0x3c + param_9) * 0x3c + param_10) * 1000 + param_11;
    return;
  }
  DAT_18006d8b8 = ((param_8 * 0x3c + param_9) * 0x3c + param_10) * 1000 + param_11;
  DAT_18006d8b4 = iVar5;
  uVar1 = FUN_18003f6d0(local_res8);
  if ((int)uVar1 != 0) {
                    /* WARNING: Subroutine does not return */
    FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
  }
  DAT_18006d8b8 = DAT_18006d8b8 + local_res8[0] * 1000;
  if (DAT_18006d8b8 < 0) {
    DAT_18006d8b4 = DAT_18006d8b4 + -1;
    DAT_18006d8b0 = param_3;
    DAT_18006d8b8 = DAT_18006d8b8 + 86400000;
    return;
  }
  if (86399999 < DAT_18006d8b8) {
    DAT_18006d8b8 = DAT_18006d8b8 + -86400000;
    DAT_18006d8b4 = DAT_18006d8b4 + 1;
  }
  DAT_18006d8b0 = param_3;
  return;
}


==================================================================

### EXPORT FUNC 18003ed20 (1408 bytes) name=FUN_18003ed20

bool FUN_18003ed20(int *param_1)

{
  int iVar1;
  undefined8 uVar2;
  uint uVar3;
  int iVar4;
  int iVar5;
  int local_res10 [2];
  int local_res18 [4];
  
  local_res10[0] = 0;
  uVar2 = FUN_18003f680(local_res10);
  if ((int)uVar2 != 0) {
                    /* WARNING: Subroutine does not return */
    FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
  }
  if (local_res10[0] != 0) {
    iVar4 = param_1[5];
    if ((iVar4 != DAT_18006d8a0) || (iVar4 != DAT_18006d8b0)) {
      if (DAT_180072ebc == 0) {
        uVar3 = iVar4 >> 0x1f & 3;
        iVar1 = DAT_18006dc9c;
        if ((((iVar4 + uVar3 & 3) != uVar3) || (iVar4 == (iVar4 / 100) * 100)) &&
           (iVar4 + 0x76c != ((iVar4 + 0x76c) / 400) * 400)) {
          iVar1 = DAT_18006dcd4;
        }
        iVar5 = iVar4 + -1;
        iVar5 = (iVar4 * 0x16d + -0x63db +
                iVar1 + 1 + ((int)(iVar5 + (iVar5 >> 0x1f & 3U)) >> 2) +
                ((iVar4 + 299) / 400 - iVar5 / 100)) % 7;
        if (iVar5 < 1) {
          iVar5 = -iVar5;
        }
        else {
          iVar5 = 7 - iVar5;
        }
        DAT_18006d8a4 = iVar1 + 1 + iVar5;
        DAT_18006d8a8 = 7200000;
        DAT_18006d8a0 = iVar4;
        FUN_18003e9f0(0,1,iVar4,10,5,0,0,2,0,0,0);
      }
      else {
        if (DAT_180072ea8 == 0) {
          FUN_18003e9f0(1,1,iVar4,(uint)DAT_180072eaa,(uint)DAT_180072eae,(uint)DAT_180072eac,0,
                        (uint)DAT_180072eb0,(uint)DAT_180072eb2,(uint)DAT_180072eb4,
                        (uint)DAT_180072eb6);
        }
        else {
          uVar3 = iVar4 >> 0x1f & 3;
          if ((((iVar4 + uVar3 & 3) == uVar3) && (iVar4 != (iVar4 / 100) * 100)) ||
             (iVar4 + 0x76c == ((iVar4 + 0x76c) / 400) * 400)) {
            iVar1 = *(int *)((longlong)&DAT_18006dc88 + (ulonglong)(uint)DAT_180072eaa * 4 + 4);
          }
          else {
            iVar1 = *(int *)(&DAT_18006dcc4 + (longlong)(int)(uint)DAT_180072eaa * 4);
          }
          DAT_18006d8a4 = iVar1 + (uint)DAT_180072eae;
          DAT_18006d8a8 =
               (((uint)DAT_180072eb0 * 0x3c + (uint)DAT_180072eb2) * 0x3c + (uint)DAT_180072eb4) *
               1000 + (uint)DAT_180072eb6;
          DAT_18006d8a0 = iVar4;
        }
        if (DAT_180072e54 == 0) {
          FUN_18003e9f0(0,1,param_1[5],(uint)DAT_180072e56,(uint)DAT_180072e5a,(uint)DAT_180072e58,0
                        ,(uint)DAT_180072e5c,(uint)DAT_180072e5e,(uint)DAT_180072e60,
                        (uint)DAT_180072e62);
        }
        else {
          iVar4 = param_1[5];
          local_res18[0] = 0;
          uVar3 = iVar4 >> 0x1f & 3;
          if ((((iVar4 + uVar3 & 3) == uVar3) && (iVar4 != (iVar4 / 100) * 100)) ||
             (iVar4 + 0x76c == ((iVar4 + 0x76c) / 400) * 400)) {
            iVar1 = *(int *)((longlong)&DAT_18006dc88 + (ulonglong)(uint)DAT_180072e56 * 4 + 4);
          }
          else {
            iVar1 = *(int *)(&DAT_18006dcc4 + (longlong)(int)(uint)DAT_180072e56 * 4);
          }
          DAT_18006d8b4 = iVar1 + (uint)DAT_180072e5a;
          DAT_18006d8b8 =
               (((uint)DAT_180072e5c * 0x3c + (uint)DAT_180072e5e) * 0x3c + (uint)DAT_180072e60) *
               1000 + (uint)DAT_180072e62;
          uVar2 = FUN_18003f6d0(local_res18);
          if ((int)uVar2 != 0) {
                    /* WARNING: Subroutine does not return */
            FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
          }
          DAT_18006d8b8 = DAT_18006d8b8 + local_res18[0] * 1000;
          DAT_18006d8b0 = iVar4;
          if (DAT_18006d8b8 < 0) {
            DAT_18006d8b8 = DAT_18006d8b8 + 86400000;
            DAT_18006d8b4 = DAT_18006d8b4 + -1;
          }
          else if (86399999 < DAT_18006d8b8) {
            DAT_18006d8b8 = DAT_18006d8b8 + -86400000;
            DAT_18006d8b4 = DAT_18006d8b4 + 1;
          }
        }
      }
    }
    if (DAT_18006d8a4 < DAT_18006d8b4) {
      iVar4 = param_1[7];
      if ((DAT_18006d8a4 <= iVar4) && (iVar4 <= DAT_18006d8b4)) {
        if ((DAT_18006d8a4 < iVar4) && (iVar4 < DAT_18006d8b4)) {
          return true;
        }
LAB_18003f267:
        iVar1 = ((param_1[2] * 0x3c + param_1[1]) * 0x3c + *param_1) * 1000;
        if (iVar4 == DAT_18006d8a4) {
          return DAT_18006d8a8 <= iVar1;
        }
        return iVar1 < DAT_18006d8b8;
      }
    }
    else {
      iVar4 = param_1[7];
      if (iVar4 < DAT_18006d8b4) {
        return true;
      }
      if (DAT_18006d8a4 < iVar4) {
        return true;
      }
      if ((iVar4 <= DAT_18006d8b4) || (DAT_18006d8a4 <= iVar4)) goto LAB_18003f267;
    }
  }
  return false;
}


==================================================================

### EXPORT FUNC 18003f2a0 (60 bytes) name=__tzset

/* Library Function - Single Match
    __tzset
   
   Library: Visual Studio 2005 Release */

void __cdecl __tzset(void)

{
  if (DAT_180072ec8 == 0) {
    _lock(6);
    if (DAT_180072ec8 == 0) {
      FUN_18003e530();
      DAT_180072ec8 = DAT_180072ec8 + 1;
    }
    FUN_180045470(6);
  }
  return;
}


==================================================================

### EXPORT FUNC 18003f2e0 (25 bytes) name=FUN_18003f2e0

void FUN_18003f2e0(void)

{
  FUN_180045470(6);
  return;
}


==================================================================

### EXPORT FUNC 18003f300 (48 bytes) name=FUN_18003f300

ulonglong FUN_18003f300(int *param_1)

{
  bool bVar1;
  undefined7 extraout_var;
  
  _lock(6);
  bVar1 = FUN_18003ed20(param_1);
  FUN_180045470(6);
  return CONCAT71(extraout_var,bVar1) & 0xffffffff;
}


==================================================================

### EXPORT FUNC 18003f330 (25 bytes) name=FUN_18003f330

void FUN_18003f330(void)

{
  FUN_180045470(6);
  return;
}


==================================================================

### EXPORT FUNC 18003f350 (807 bytes) name=FUN_18003f350

undefined8 FUN_18003f350(int *param_1,longlong *param_2)

{
  bool bVar1;
  DWORD *pDVar2;
  int *piVar3;
  uint uVar4;
  int iVar5;
  int iVar6;
  int iVar7;
  undefined4 *puVar8;
  int iVar9;
  longlong lVar10;
  longlong lVar11;
  
  bVar1 = false;
  if (param_1 != (int *)0x0) {
    *param_1 = -1;
    param_1[1] = -1;
    param_1[2] = -1;
    param_1[3] = -1;
    param_1[4] = -1;
    param_1[5] = -1;
    param_1[6] = -1;
    param_1[7] = -1;
    param_1[8] = -1;
    if (param_2 != (longlong *)0x0) {
      lVar10 = *param_2;
      if (lVar10 < 0) {
        pDVar2 = FUN_180035b40();
        *pDVar2 = 0x16;
        return 0x16;
      }
      if (lVar10 < 0x793407000) {
        iVar9 = 1;
        lVar11 = lVar10 + SUB168(SEXT816(-0x77ceb70a34ed8f47) * SEXT816(lVar10),8);
        iVar6 = (int)((ulonglong)lVar11 >> 0x18) - ((int)(char)((ulonglong)lVar11 >> 0x38) >> 0x1f);
        iVar7 = iVar6 + 0x46;
        iVar5 = iVar6 + 0x45;
        lVar10 = lVar10 + ((longlong)iVar6 * -0x16d -
                          (longlong)
                          (((iVar6 + 0x171) / 400 - iVar5 / 100) + -0x11 +
                          ((int)(iVar5 + (iVar5 >> 0x1f & 3U)) >> 2))) * 0x15180;
        if (lVar10 < 0) {
          uVar4 = iVar5 >> 0x1f & 3;
          iVar7 = iVar5;
          if ((((iVar5 + uVar4 & 3) == uVar4) && (iVar5 != (iVar5 / 100) * 100)) ||
             (lVar11 = lVar10 + 0x1e13380, bVar1 = false,
             iVar6 + 0x7b1 == ((iVar6 + 0x7b1) / 400) * 400)) {
            bVar1 = true;
            lVar11 = lVar10 + 0x1e28500;
          }
        }
        else {
          uVar4 = iVar7 >> 0x1f & 3;
          lVar11 = lVar10;
          if ((((iVar7 + uVar4 & 3) == uVar4) && (iVar7 != (iVar7 / 100) * 100)) ||
             (iVar6 + 0x7b2 == ((iVar6 + 0x7b2) / 400) * 400)) {
            bVar1 = true;
          }
        }
        param_1[5] = iVar7;
        puVar8 = &DAT_18006dc90;
        iVar5 = (int)(lVar11 / 0x15180);
        param_1[7] = iVar5;
        lVar11 = lVar11 + (longlong)iVar5 * -0x15180;
        if (!bVar1) {
          puVar8 = (undefined4 *)&DAT_18006dcc8;
        }
        piVar3 = puVar8 + 1;
        iVar7 = puVar8[1];
        while (iVar7 < iVar5) {
          piVar3 = piVar3 + 1;
          iVar9 = iVar9 + 1;
          iVar7 = *piVar3;
        }
        param_1[4] = iVar9 + -1;
        param_1[3] = iVar5 - puVar8[iVar9 + -1];
        lVar10 = *param_2;
        param_1[8] = 0;
        param_1[6] = ((int)(lVar10 / 0x15180) + 4) % 7;
        iVar5 = (int)(lVar11 / 0xe10);
        param_1[2] = iVar5;
        lVar11 = lVar11 + (longlong)iVar5 * -0xe10;
        lVar10 = SUB168(SEXT816(-0x7777777777777777) * SEXT816(lVar11),8) + lVar11;
        iVar5 = (int)(lVar10 >> 5) - (int)(lVar10 >> 0x3f);
        param_1[1] = iVar5;
        *param_1 = (int)lVar11 + iVar5 * -0x3c;
        return 0;
      }
    }
  }
  pDVar2 = FUN_180035b40();
  *pDVar2 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0x16;
}


==================================================================

### EXPORT FUNC 18003f680 (69 bytes) name=FUN_18003f680

undefined8 FUN_18003f680(undefined4 *param_1)

{
  DWORD *pDVar1;
  
  if (param_1 == (undefined4 *)0x0) {
    pDVar1 = FUN_180035b40();
    *pDVar1 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0x16;
  }
  *param_1 = DAT_18006d8c4;
  return 0;
}


==================================================================

### EXPORT FUNC 18003f6d0 (69 bytes) name=FUN_18003f6d0

undefined8 FUN_18003f6d0(undefined4 *param_1)

{
  DWORD *pDVar1;
  
  if (param_1 == (undefined4 *)0x0) {
    pDVar1 = FUN_180035b40();
    *pDVar1 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0x16;
  }
  *param_1 = DAT_18006d8c8;
  return 0;
}


==================================================================

### EXPORT FUNC 18003f720 (69 bytes) name=FUN_18003f720

undefined8 FUN_18003f720(undefined4 *param_1)

{
  DWORD *pDVar1;
  
  if (param_1 == (undefined4 *)0x0) {
    pDVar1 = FUN_180035b40();
    *pDVar1 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0x16;
  }
  *param_1 = DAT_18006d8c0;
  return 0;
}


==================================================================

### EXPORT FUNC 18003f770 (8 bytes) name=FUN_18003f770

undefined4 * FUN_18003f770(void)

{
  return &DAT_18006d8c4;
}


==================================================================

### EXPORT FUNC 18003f780 (8 bytes) name=FUN_18003f780

undefined4 * FUN_18003f780(void)

{
  return &DAT_18006d8c8;
}


==================================================================

### EXPORT FUNC 18003f790 (8 bytes) name=FUN_18003f790

undefined4 * FUN_18003f790(void)

{
  return &DAT_18006d8c0;
}


==================================================================

### EXPORT FUNC 18003f7a0 (8 bytes) name=FUN_18003f7a0

undefined ** FUN_18003f7a0(void)

{
  return &PTR_DAT_18006d950;
}


==================================================================

### EXPORT FUNC 18003f7b0 (947 bytes) name=FUN_18003f7b0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */

int FUN_18003f7b0(longlong *param_1,LCID param_2,DWORD param_3,LPCWSTR param_4,int param_5,
                 LPWSTR param_6,int param_7,UINT param_8)

{
  undefined1 auVar1 [16];
  undefined1 auVar2 [16];
  longlong lVar3;
  int iVar4;
  DWORD DVar5;
  UINT UVar6;
  int cchSrc;
  int iVar7;
  int iVar8;
  errno_t eVar9;
  undefined8 uVar10;
  undefined4 *puVar11;
  LPCWSTR pWVar12;
  size_t sVar13;
  char *lpMultiByteStr;
  undefined1 *puVar14;
  undefined1 *puVar15;
  undefined1 *puVar16;
  LPCSTR lpSrcStr;
  ulonglong uVar17;
  undefined1 auStackY_88 [32];
  DWORD local_48 [2];
  LPCWSTR local_40;
  ulonglong local_38;
  
  puVar14 = auStackY_88;
  puVar15 = auStackY_88;
  puVar16 = auStackY_88;
  local_38 = DAT_18006cea0 ^ (ulonglong)local_48;
  local_48[0] = param_3;
  local_40 = param_4;
  if (DAT_180072ecc == 0) {
    iVar4 = LCMapStringW(0,0x100,L"",1,(LPWSTR)0x0,0);
    if (iVar4 == 0) {
      DVar5 = GetLastError();
      if (DVar5 == 0x78) {
        DAT_180072ecc = 2;
      }
    }
    else {
      DAT_180072ecc = 1;
    }
  }
  pWVar12 = param_4;
  iVar4 = param_5;
  if (0 < param_5) {
    do {
      iVar4 = iVar4 + -1;
      iVar8 = iVar4;
      if (*pWVar12 == L'\0') break;
      pWVar12 = pWVar12 + 1;
      iVar8 = -1;
    } while (iVar4 != 0);
    param_5 = param_5 + (-1 - iVar8);
  }
  if (DAT_180072ecc == 1) {
    iVar4 = LCMapStringW(param_2,local_48[0],param_4,param_5,param_6,param_7);
    goto LAB_18003fb3f;
  }
  if ((DAT_180072ecc == 2) || (puVar16 = auStackY_88, DAT_180072ecc == 0)) {
    iVar8 = 0;
    if (param_2 == 0) {
      param_2 = *(LCID *)(*param_1 + 0x14);
    }
    if (param_8 == 0) {
      param_8 = *(UINT *)(*param_1 + 4);
    }
    uVar10 = FUN_180048c40(param_2);
    UVar6 = (UINT)uVar10;
    if ((param_8 != UVar6) && (UVar6 != 0xffffffff)) {
      param_8 = UVar6;
    }
    cchSrc = WideCharToMultiByte(param_8,0,param_4,param_5,(LPSTR)0x0,0,(LPCSTR)0x0,(LPBOOL)0x0);
    uVar17 = (ulonglong)cchSrc;
    puVar16 = auStackY_88;
    if (((cchSrc != 0) && (puVar16 = auStackY_88, 0 < cchSrc)) &&
       (auVar1._8_8_ = 0, auVar1._0_8_ = uVar17, puVar16 = auStackY_88,
       SUB168((ZEXT816(0) << 0x40 | ZEXT816(0xffffffffffffffe0)) / auVar1,0) != 0)) {
      sVar13 = uVar17 + 0x10;
      if (sVar13 < 0x401) {
        uVar17 = uVar17 + 0x1f;
        if (uVar17 <= sVar13) {
          uVar17 = 0xffffffffffffff0;
        }
        lVar3 = -(uVar17 & 0xfffffffffffffff0);
        puVar14 = auStackY_88 + lVar3;
        puVar11 = (undefined4 *)((longlong)local_48 + lVar3);
        puVar16 = auStackY_88 + lVar3;
        if (puVar11 == (undefined4 *)0x0) goto LAB_18003fb3d;
        *puVar11 = 0xcccc;
LAB_18003f992:
        lpSrcStr = (LPCSTR)(puVar11 + 4);
        puVar15 = puVar14;
      }
      else {
        puVar11 = FUN_1800349a0(sVar13);
        lpSrcStr = (LPCSTR)0x0;
        if (puVar11 != (undefined4 *)0x0) {
          *puVar11 = 0xdddd;
          goto LAB_18003f992;
        }
      }
      pWVar12 = local_40;
      puVar16 = puVar15;
      if (lpSrcStr != (LPCSTR)0x0) {
        *(undefined8 *)(puVar15 + 0x38) = 0;
        *(undefined8 *)(puVar15 + 0x30) = 0;
        *(int *)(puVar15 + 0x28) = cchSrc;
        *(LPCSTR *)(puVar15 + 0x20) = lpSrcStr;
        *(undefined8 *)(puVar15 + -8) = 0x18003f9c6;
        iVar7 = WideCharToMultiByte(param_8,0,pWVar12,param_5,*(LPSTR *)(puVar15 + 0x20),
                                    *(int *)(puVar15 + 0x28),*(LPCSTR *)(puVar15 + 0x30),
                                    *(LPBOOL *)(puVar15 + 0x38));
        DVar5 = local_48[0];
        iVar4 = 0;
        if (iVar7 != 0) {
          *(undefined4 *)(puVar15 + 0x28) = 0;
          *(undefined8 *)(puVar15 + 0x20) = 0;
          *(undefined8 *)(puVar15 + -8) = 0x18003f9e9;
          iVar7 = LCMapStringA(param_2,DVar5,lpSrcStr,cchSrc,*(LPSTR *)(puVar15 + 0x20),
                               *(int *)(puVar15 + 0x28));
          uVar17 = (ulonglong)iVar7;
          iVar4 = iVar8;
          if ((0 < iVar7) &&
             (auVar2._8_8_ = 0, auVar2._0_8_ = uVar17,
             SUB168((ZEXT816(0) << 0x40 | ZEXT816(0xffffffffffffffe0)) / auVar2,0) != 0)) {
            sVar13 = uVar17 + 0x10;
            if (sVar13 < 0x401) {
              uVar17 = uVar17 + 0x1f;
              if (uVar17 <= sVar13) {
                uVar17 = 0xffffffffffffff0;
              }
              *(undefined8 *)(puVar15 + -8) = 0x18003fa36;
              lVar3 = -(uVar17 & 0xfffffffffffffff0);
              puVar16 = puVar15 + lVar3;
              puVar11 = (undefined4 *)(puVar15 + lVar3 + 0x40);
              if (puVar11 == (undefined4 *)0x0) goto LAB_18003fb23;
              *puVar11 = 0xcccc;
              puVar15 = puVar15 + lVar3;
LAB_18003fa62:
              lpMultiByteStr = (char *)(puVar11 + 4);
              puVar16 = puVar15;
            }
            else {
              *(undefined8 *)(puVar15 + -8) = 0x18003fa54;
              puVar11 = FUN_1800349a0(sVar13);
              lpMultiByteStr = (char *)0x0;
              if (puVar11 != (undefined4 *)0x0) {
                *puVar11 = 0xdddd;
                goto LAB_18003fa62;
              }
            }
            DVar5 = local_48[0];
            if (lpMultiByteStr != (char *)0x0) {
              *(int *)(puVar16 + 0x28) = iVar7;
              *(char **)(puVar16 + 0x20) = lpMultiByteStr;
              *(undefined8 *)(puVar16 + -8) = 0x18003fa8e;
              iVar8 = LCMapStringA(param_2,DVar5,lpSrcStr,cchSrc,*(LPSTR *)(puVar16 + 0x20),
                                   *(int *)(puVar16 + 0x28));
              iVar4 = 0;
              if (iVar8 != 0) {
                if ((DVar5 >> 10 & 1) == 0) {
                  if (param_7 == 0) {
                    param_6 = (LPWSTR)0x0;
                    *(undefined4 *)(puVar16 + 0x28) = 0;
                  }
                  else {
                    *(int *)(puVar16 + 0x28) = param_7;
                  }
                  *(LPWSTR *)(puVar16 + 0x20) = param_6;
                  *(undefined8 *)(puVar16 + -8) = 0x18003fb0e;
                  iVar4 = MultiByteToWideChar(param_8,1,lpMultiByteStr,iVar7,
                                              *(LPWSTR *)(puVar16 + 0x20),*(int *)(puVar16 + 0x28));
                }
                else {
                  iVar4 = iVar7;
                  if (param_7 != 0) {
                    if (param_7 <= iVar7) {
                      iVar7 = param_7 + -1;
                    }
                    *(undefined8 *)(puVar16 + -8) = 0x18003fac0;
                    eVar9 = strncpy_s((char *)param_6,(longlong)param_7,lpMultiByteStr,
                                      (longlong)iVar7);
                    if (eVar9 != 0) {
                      *(undefined8 *)(puVar16 + 0x20) = 0;
                    /* WARNING: Subroutine does not return */
                      *(undefined **)(puVar16 + -8) = &UNK_18003fada;
                      FID_conflict__invoke_watson
                                ((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,
                                 *(uintptr_t *)(puVar16 + 0x20));
                    }
                  }
                }
              }
              if (*(int *)(lpMultiByteStr + -0x10) == 0xdddd) {
                *(undefined8 *)(puVar16 + -8) = 0x18003fb23;
                FUN_180034a70(lpMultiByteStr + -0x10);
              }
            }
          }
        }
LAB_18003fb23:
        if (*(int *)(lpSrcStr + -0x10) == 0xdddd) {
          *(undefined8 *)(puVar16 + -8) = 0x18003fb38;
          FUN_180034a70(lpSrcStr + -0x10);
        }
        goto LAB_18003fb3f;
      }
    }
  }
LAB_18003fb3d:
  iVar4 = 0;
LAB_18003fb3f:
  *(undefined8 *)(puVar16 + -8) = 0x18003fb4b;
  return iVar4;
}


==================================================================

### EXPORT FUNC 18003fb70 (328 bytes) name=FUN_18003fb70

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

void FUN_18003fb70(longlong *param_1,LCID param_2,DWORD param_3,LPCWSTR param_4,int param_5,
                  LPWSTR param_6,int param_7,UINT param_8)

{
  pthreadmbcinfo ptVar1;
  bool bVar2;
  DWORD *pDVar3;
  pthreadlocinfo local_38;
  pthreadmbcinfo local_30;
  DWORD *local_28;
  undefined1 local_20;
  
  bVar2 = false;
  local_20 = 0;
  if (param_1 == (longlong *)0x0) {
    pDVar3 = FUN_1800380a0();
    local_38 = *(pthreadlocinfo *)(pDVar3 + 0x30);
    ptVar1 = *(pthreadmbcinfo *)(pDVar3 + 0x2e);
    local_30 = ptVar1;
    local_28 = pDVar3;
    if ((local_38 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & pDVar3[0x32]) == 0)) {
      local_38 = __updatetlocinfo();
    }
    if ((ptVar1 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & pDVar3[0x32]) == 0)) {
      local_30 = __updatetmbcinfo();
    }
    if ((pDVar3[0x32] & 2) == 0) {
      pDVar3[0x32] = pDVar3[0x32] | 2;
      bVar2 = true;
      local_20 = 1;
    }
  }
  else {
    local_38 = (pthreadlocinfo)*param_1;
    local_30 = (pthreadmbcinfo)param_1[1];
    bVar2 = false;
    pDVar3 = local_28;
  }
  FUN_18003f7b0((longlong *)&local_38,param_2,param_3,param_4,param_5,param_6,param_7,param_8);
  if (bVar2) {
    pDVar3[0x32] = pDVar3[0x32] & 0xfffffffd;
  }
  return;
}


==================================================================

### EXPORT FUNC 18003fcc0 (29 bytes) name=wcsnlen

/* Library Function - Single Match
    wcsnlen
   
   Library: Visual Studio 2005 Release */

size_t __cdecl wcsnlen(wchar_t *_Src,size_t _MaxCount)

{
  size_t sVar1;
  
  sVar1 = 0;
  if (_MaxCount != 0) {
    do {
      if (*_Src == L'\0') {
        return sVar1;
      }
      sVar1 = sVar1 + 1;
      _Src = _Src + 1;
    } while (sVar1 < _MaxCount);
  }
  return sVar1;
}


==================================================================

### EXPORT FUNC 18003fce0 (225 bytes) name=FUN_18003fce0

void FUN_18003fce0(byte *param_1,int param_2,FILE *param_3,int *param_4)

{
  int *piVar1;
  byte bVar2;
  uint uVar3;
  DWORD *pDVar4;
  ulonglong uVar5;
  
  if (((param_3->_flag & 0x40) != 0) && (param_3->_base == (char *)0x0)) {
    *param_4 = *param_4 + param_2;
    return;
  }
joined_r0x00018003fd17:
  do {
    if (param_2 < 1) {
      return;
    }
    bVar2 = *param_1;
    param_2 = param_2 + -1;
    if (((param_3->_flag & 0x40) == 0) || (param_3->_base != (char *)0x0)) {
      piVar1 = &param_3->_cnt;
      *piVar1 = *piVar1 + -1;
      if (*piVar1 < 0) {
        uVar5 = FUN_1800385f0((int)(char)bVar2,param_3);
        uVar3 = (uint)uVar5;
      }
      else {
        *param_3->_ptr = bVar2;
        param_3->_ptr = param_3->_ptr + 1;
        uVar3 = (uint)bVar2;
      }
      if (uVar3 != 0xffffffff) goto LAB_18003fd5c;
      *param_4 = -1;
    }
    else {
LAB_18003fd5c:
      *param_4 = *param_4 + 1;
    }
    param_1 = param_1 + 1;
  } while (*param_4 != -1);
  pDVar4 = FUN_180035b40();
  if (*pDVar4 != 0x2a) {
    return;
  }
  if (((param_3->_flag & 0x40) == 0) || (param_3->_base != (char *)0x0)) {
    piVar1 = &param_3->_cnt;
    *piVar1 = *piVar1 + -1;
    if (*piVar1 < 0) {
      uVar5 = FUN_1800385f0(0x3f,param_3);
      if ((int)uVar5 == -1) {
        *param_4 = -1;
        goto joined_r0x00018003fd17;
      }
    }
    else {
      *param_3->_ptr = '?';
      param_3->_ptr = param_3->_ptr + 1;
    }
  }
  *param_4 = *param_4 + 1;
  goto joined_r0x00018003fd17;
}


==================================================================

### EXPORT FUNC 18003fdd0 (3964 bytes) name=FUN_18003fdd0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

uint FUN_18003fdd0(FILE *param_1,byte *param_2,longlong *param_3,WCHAR *param_4)

{
  int *piVar1;
  byte bVar2;
  short *psVar3;
  uint *puVar4;
  WCHAR WVar5;
  char cVar6;
  ushort uVar7;
  int iVar8;
  uint uVar9;
  uint uVar10;
  int iVar11;
  DWORD *pDVar12;
  undefined *puVar13;
  undefined6 extraout_var_00;
  undefined7 extraout_var;
  code *pcVar14;
  ulonglong uVar15;
  uint uVar16;
  longlong lVar17;
  undefined *puVar18;
  WCHAR *pWVar19;
  WCHAR *pWVar20;
  uint uVar21;
  byte *pbVar22;
  char *pcVar23;
  byte bVar24;
  uint uVar25;
  int iVar26;
  bool bVar27;
  undefined1 auStackY_318 [32];
  uint local_2d8;
  uint local_2d4;
  uint local_2d0;
  int local_2cc;
  int local_2c8;
  uint local_2c4;
  byte local_2c0;
  char local_2bf;
  WCHAR *local_2b8;
  int local_2b0;
  uint local_2ac;
  int local_2a8;
  pthreadlocinfo local_2a0;
  pthreadmbcinfo local_298;
  DWORD *local_290;
  char local_288;
  undefined4 local_280;
  undefined4 local_27c;
  WCHAR *local_278;
  int local_270 [2];
  WCHAR *local_268;
  byte *local_260;
  ulonglong local_258 [63];
  undefined1 auStack_59 [9];
  ulonglong local_50;
  
  local_50 = DAT_18006cea0 ^ (ulonglong)auStackY_318;
  uVar10 = 0;
  uVar21 = 0;
  local_280 = 0;
  local_2d8 = 0;
  local_2b0 = 0;
  local_2d0 = 0;
  local_2c4 = 0;
  local_2a8 = 0;
  local_2cc = 0;
  local_288 = '\0';
  local_2b8 = param_4;
  if (param_3 == (longlong *)0x0) {
    local_290 = FUN_1800380a0();
    local_2a0 = *(pthreadlocinfo *)(local_290 + 0x30);
    local_298 = *(pthreadmbcinfo *)(local_290 + 0x2e);
    if ((local_2a0 != (pthreadlocinfo)PTR_DAT_18006d6f0) &&
       ((_DAT_18006d578 & local_290[0x32]) == 0)) {
      local_2a0 = __updatetlocinfo();
    }
    if ((local_298 != (pthreadmbcinfo)PTR_DAT_18006d470) &&
       ((_DAT_18006d578 & local_290[0x32]) == 0)) {
      local_298 = __updatetmbcinfo();
    }
    if ((local_290[0x32] & 2) == 0) {
      local_290[0x32] = local_290[0x32] | 2;
      local_288 = '\x01';
    }
  }
  else {
    local_2a0 = (pthreadlocinfo)*param_3;
    local_298 = (pthreadmbcinfo)param_3[1];
  }
  if (param_1 == (FILE *)0x0) {
    pDVar12 = FUN_180035b40();
    *pDVar12 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    if (local_288 != '\0') {
      local_290[0x32] = local_290[0x32] & 0xfffffffd;
    }
    return 0xffffffff;
  }
  if ((param_1->_flag & 0x40) == 0) {
    iVar8 = FUN_180047880((longlong)param_1);
    puVar18 = &DAT_18006d970;
    if ((iVar8 == -1) || (iVar8 = FUN_180047880((longlong)param_1), iVar8 == -2)) {
      puVar13 = &DAT_18006d970;
    }
    else {
      iVar8 = FUN_180047880((longlong)param_1);
      lVar17 = (&DAT_1800db4e0)[(longlong)iVar8 >> 5];
      uVar9 = FUN_180047880((longlong)param_1);
      puVar13 = (undefined *)((ulonglong)(uVar9 & 0x1f) * 0x50 + lVar17);
    }
    if ((puVar13[0x38] & 0x7f) == 0) {
      iVar8 = FUN_180047880((longlong)param_1);
      if ((iVar8 != -1) && (iVar8 = FUN_180047880((longlong)param_1), iVar8 != -2)) {
        iVar8 = FUN_180047880((longlong)param_1);
        lVar17 = (&DAT_1800db4e0)[(longlong)iVar8 >> 5];
        uVar9 = FUN_180047880((longlong)param_1);
        puVar18 = (undefined *)((ulonglong)(uVar9 & 0x1f) * 0x50 + lVar17);
      }
      param_4 = local_2b8;
      if ((puVar18[0x38] & 0x80) == 0) goto LAB_180040036;
    }
    pDVar12 = FUN_180035b40();
    *pDVar12 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    bVar27 = local_288 == '\0';
  }
  else {
LAB_180040036:
    if (param_2 != (byte *)0x0) {
      bVar24 = *param_2;
      local_2d4 = 0;
      local_2c8 = 0;
      local_278 = (WCHAR *)0x0;
      pWVar20 = local_268;
      uVar16 = uVar10;
      uVar25 = uVar10;
      uVar9 = 0;
      if (bVar24 != 0) {
        do {
          uVar21 = uVar16;
          pbVar22 = param_2 + 1;
          local_260 = pbVar22;
          if ((int)uVar21 < 0) break;
          uVar16 = 0;
          if ((byte)(bVar24 - 0x20) < 0x59) {
            uVar16 = (byte)"JanFebMarAprMayJunJulAugSepOctNovDec"[(longlong)(char)bVar24 + 0x10] &
                     0xf;
          }
          local_2ac = (uint)((byte)(&DAT_1800575a0)
                                   [(longlong)(int)uVar16 * 9 + (longlong)(int)uVar9] >> 4);
          if (local_2ac == 8) goto LAB_180040cbf;
          switch(local_2ac) {
          case 0:
switchD_180040141_caseD_0:
            uVar9 = (uint)bVar24;
            local_2cc = 0;
            uVar7 = FUN_180047bb0((uint)bVar24,&local_2a0);
            if ((int)CONCAT62(extraout_var_00,uVar7) != 0) {
              if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
                piVar1 = &param_1->_cnt;
                *piVar1 = *piVar1 + -1;
                if (*piVar1 < 0) {
                  uVar15 = FUN_1800385f0((int)(char)bVar24,param_1);
                  uVar9 = (uint)uVar15;
                }
                else {
                  *param_1->_ptr = bVar24;
                  param_1->_ptr = param_1->_ptr + 1;
                }
                if (uVar9 == 0xffffffff) {
                  uVar21 = 0xffffffff;
                }
                else {
                  uVar21 = uVar21 + 1;
                }
              }
              else {
                uVar21 = uVar21 + 1;
              }
              bVar24 = *pbVar22;
              pbVar22 = param_2 + 2;
              if (bVar24 == 0) goto LAB_180040cbf;
            }
            if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
              piVar1 = &param_1->_cnt;
              *piVar1 = *piVar1 + -1;
              if (*piVar1 < 0) {
                uVar15 = FUN_1800385f0((int)(char)bVar24,param_1);
                uVar9 = (uint)uVar15;
              }
              else {
                *param_1->_ptr = bVar24;
                param_1->_ptr = param_1->_ptr + 1;
                uVar9 = (uint)bVar24;
              }
              if (uVar9 == 0xffffffff) {
                local_2d4 = 0xffffffff;
                uVar21 = 0xffffffff;
              }
              else {
                local_2d4 = uVar21 + 1;
                uVar21 = local_2d4;
              }
            }
            else {
              local_2d4 = uVar21 + 1;
              uVar21 = local_2d4;
            }
            break;
          case 1:
            uVar10 = 0xffffffff;
            local_27c = 0;
            local_2a8 = 0;
            local_2b0 = 0;
            local_2c4 = 0;
            local_2d0 = 0xffffffff;
            local_2d8 = 0;
            local_2cc = 0;
            uVar25 = 0;
            break;
          case 2:
            if (bVar24 == 0x20) {
              local_2d8 = uVar25 | 2;
              uVar25 = local_2d8;
            }
            else if (bVar24 == 0x23) {
              local_2d8 = uVar25 | 0x80;
              uVar25 = local_2d8;
            }
            else if (bVar24 == 0x2b) {
              local_2d8 = uVar25 | 1;
              uVar25 = local_2d8;
            }
            else if (bVar24 == 0x2d) {
              local_2d8 = uVar25 | 4;
              uVar25 = local_2d8;
            }
            else if (bVar24 == 0x30) {
              local_2d8 = uVar25 | 8;
              uVar25 = local_2d8;
            }
            break;
          case 3:
            if (bVar24 == 0x2a) {
              local_2b0 = *(int *)param_4;
              local_2b8 = param_4 + 4;
              if (local_2b0 < 0) {
                local_2d8 = uVar25 | 4;
                local_2b0 = -local_2b0;
                uVar25 = local_2d8;
              }
            }
            else {
              local_2b0 = (char)bVar24 + -0x30 + local_2b0 * 10;
            }
            break;
          case 4:
            local_2d0 = 0;
            uVar10 = 0;
            break;
          case 5:
            if (bVar24 == 0x2a) {
              local_2d0 = *(uint *)param_4;
              local_2b8 = param_4 + 4;
              uVar10 = local_2d0;
              if ((int)local_2d0 < 0) {
                local_2d0 = 0xffffffff;
                uVar10 = 0xffffffff;
              }
            }
            else {
              local_2d0 = (char)bVar24 + -0x30 + uVar10 * 10;
              uVar10 = local_2d0;
            }
            break;
          case 6:
            if (bVar24 == 0x49) {
              bVar2 = *pbVar22;
              local_2d8 = uVar25 | 0x8000;
              if ((bVar2 == 0x36) && (param_2[2] == 0x34)) {
                local_2d8 = uVar25 | 0x8000;
                pbVar22 = param_2 + 3;
                uVar25 = local_2d8;
              }
              else if ((bVar2 == 0x33) && (param_2[2] == 0x32)) {
                local_2d8 = uVar25 & 0xffff7fff;
                pbVar22 = param_2 + 3;
                uVar25 = local_2d8;
              }
              else {
                uVar25 = local_2d8;
                if (((((bVar2 != 100) && (bVar2 != 0x69)) && (bVar2 != 0x6f)) &&
                    ((bVar2 != 0x75 && (bVar2 != 0x78)))) && (bVar2 != 0x58)) {
                  local_2ac = 0;
                  goto switchD_180040141_caseD_0;
                }
              }
            }
            else if (bVar24 == 0x68) {
              local_2d8 = uVar25 | 0x20;
              uVar25 = local_2d8;
            }
            else if (bVar24 == 0x6c) {
              if (*pbVar22 == 0x6c) {
                local_2d8 = uVar25 | 0x1000;
                pbVar22 = param_2 + 2;
                uVar25 = local_2d8;
              }
              else {
                local_2d8 = uVar25 | 0x10;
                uVar25 = local_2d8;
              }
            }
            else if (bVar24 == 0x77) {
              local_2d8 = uVar25 | 0x800;
              uVar25 = local_2d8;
            }
            break;
          case 7:
            switch(bVar24) {
            case 0x41:
            case 0x45:
            case 0x47:
              local_27c = 1;
              bVar24 = bVar24 + 0x20;
            case 0x61:
            case 0x65:
            case 0x66:
            case 0x67:
              local_2d8 = uVar25 | 0x40;
              iVar8 = 0x200;
              pWVar20 = (WCHAR *)local_258;
              if ((int)uVar10 < 0) {
                uVar10 = 6;
                local_2d0 = 6;
                iVar26 = 0x200;
              }
              else {
                iVar26 = iVar8;
                if (uVar10 == 0) {
                  if (bVar24 == 0x67) {
                    uVar10 = 1;
                    local_2d0 = 1;
                  }
                }
                else {
                  if ((int)uVar10 < 0x201) {
                    if ((int)uVar10 < 0xa4) goto LAB_180040700;
                  }
                  else {
                    uVar10 = 0x200;
                    local_2d0 = 0x200;
                  }
                  iVar26 = uVar10 + 0x15d;
                  local_278 = (WCHAR *)FUN_180040de0((longlong)iVar26);
                  pWVar20 = local_278;
                  if (local_278 == (WCHAR *)0x0) {
                    uVar10 = 0xa3;
                    local_2d0 = 0xa3;
                    pWVar20 = (WCHAR *)local_258;
                    iVar26 = iVar8;
                  }
                }
              }
LAB_180040700:
              local_268 = *(WCHAR **)local_2b8;
              local_2b8 = local_2b8 + 4;
              pcVar14 = (code *)FUN_180037d20((INT_PTR)PTR_LAB_18006dc70);
              (*pcVar14)(&local_268,pWVar20,(longlong)iVar26);
              if (((uVar25 & 0x80) != 0) && (uVar10 == 0)) {
                pcVar14 = (code *)FUN_180037d20(DAT_18006dc88);
                (*pcVar14)(pWVar20,&local_2a0);
              }
              if ((bVar24 == 0x67) && ((uVar25 & 0x80) == 0)) {
                pcVar14 = (code *)FUN_180037d20((INT_PTR)PTR_LAB_18006dc80);
                (*pcVar14)(pWVar20,&local_2a0);
              }
              if ((char)*pWVar20 == '-') {
                local_2d8 = uVar25 | 0x140;
                pWVar20 = (WCHAR *)((longlong)pWVar20 + 1);
              }
              lVar17 = -1;
              pWVar19 = pWVar20;
              do {
                if (lVar17 == 0) break;
                lVar17 = lVar17 + -1;
                WVar5 = *pWVar19;
                pWVar19 = (WCHAR *)((longlong)pWVar19 + 1);
              } while ((char)WVar5 != '\0');
              local_2c8 = ~(uint)lVar17 - 1;
              uVar25 = local_2d8;
              break;
            case 0x42:
            case 0x44:
            case 0x46:
            case 0x48:
            case 0x49:
            case 0x4a:
            case 0x4b:
            case 0x4c:
            case 0x4d:
            case 0x4e:
            case 0x4f:
            case 0x50:
            case 0x51:
            case 0x52:
            case 0x54:
            case 0x55:
            case 0x56:
            case 0x57:
            case 0x59:
            case 0x5b:
            case 0x5c:
            case 0x5d:
            case 0x5e:
            case 0x5f:
            case 0x60:
            case 0x62:
            case 0x68:
            case 0x6a:
            case 0x6b:
            case 0x6c:
            case 0x6d:
            case 0x71:
            case 0x72:
            case 0x74:
            case 0x76:
            case 0x77:
              break;
            case 0x43:
              if ((uVar25 & 0x830) == 0) {
                local_2d8 = uVar25 | 0x800;
                uVar25 = local_2d8;
              }
            case 99:
              if ((uVar25 & 0x810) == 0) {
                local_2b8 = param_4 + 4;
                local_2c8 = 1;
                local_258[0]._0_1_ = (char)*param_4;
              }
              else {
                local_2b8 = param_4 + 4;
                iVar8 = FUN_180047b90(&local_2c8,local_258,0x200,*param_4);
                if (iVar8 != 0) {
                  local_2a8 = 1;
                  pWVar20 = (WCHAR *)local_258;
                  break;
                }
              }
              pWVar20 = (WCHAR *)local_258;
              break;
            case 0x53:
              if ((uVar25 & 0x830) == 0) {
                local_2d8 = uVar25 | 0x800;
                uVar25 = local_2d8;
              }
            case 0x73:
              pWVar19 = *(WCHAR **)param_4;
              uVar9 = uVar10;
              if (uVar10 == 0xffffffff) {
                uVar9 = 0x7fffffff;
              }
              local_2b8 = param_4 + 4;
              if ((uVar25 & 0x810) == 0) {
                pWVar20 = pWVar19;
                if (pWVar19 == (WCHAR *)0x0) {
                  pWVar19 = (WCHAR *)PTR_DAT_18006d718;
                  pWVar20 = (WCHAR *)PTR_DAT_18006d718;
                }
                for (; (uVar9 != 0 && (uVar9 = uVar9 - 1, (char)*pWVar19 != '\0'));
                    pWVar19 = (WCHAR *)((longlong)pWVar19 + 1)) {
                }
                local_2c8 = (int)pWVar19 - (int)pWVar20;
              }
              else {
                if (pWVar19 == (WCHAR *)0x0) {
                  pWVar19 = (WCHAR *)PTR_DAT_18006d720;
                }
                local_2cc = 1;
                for (pWVar20 = pWVar19; (uVar9 != 0 && (uVar9 = uVar9 - 1, *pWVar20 != L'\0'));
                    pWVar20 = pWVar20 + 1) {
                }
                local_2c8 = (int)((longlong)pWVar20 - (longlong)pWVar19 >> 1);
                pWVar20 = pWVar19;
              }
              break;
            case 0x58:
              goto switchD_180040494_caseD_58;
            case 0x5a:
              psVar3 = *(short **)param_4;
              local_2b8 = param_4 + 4;
              if ((psVar3 == (short *)0x0) ||
                 (pWVar20 = *(WCHAR **)(psVar3 + 4), pWVar20 == (WCHAR *)0x0)) {
                lVar17 = -1;
                pcVar23 = PTR_DAT_18006d718;
                do {
                  if (lVar17 == 0) break;
                  lVar17 = lVar17 + -1;
                  cVar6 = *pcVar23;
                  pcVar23 = pcVar23 + 1;
                } while (cVar6 != '\0');
                local_2c8 = ~(uint)lVar17 - 1;
                pWVar20 = (WCHAR *)PTR_DAT_18006d718;
              }
              else if ((uVar25 >> 0xb & 1) == 0) {
                local_2c8 = (int)*psVar3;
                local_2cc = 0;
              }
              else {
                local_2cc = 1;
                local_2c8 = (int)*psVar3 / 2;
              }
              break;
            case 100:
            case 0x69:
              local_2d8 = uVar25 | 0x40;
              iVar8 = 10;
              uVar25 = local_2d8;
              goto LAB_180040861;
            case 0x6e:
              local_2b8 = param_4 + 4;
              puVar4 = *(uint **)param_4;
              bVar27 = FUN_1800478c0();
              if ((int)CONCAT71(extraout_var,bVar27) != 0) {
                if ((uVar25 & 0x20) == 0) {
                  *puVar4 = uVar21;
                  local_2a8 = 1;
                }
                else {
                  *(short *)puVar4 = (short)uVar21;
                  local_2a8 = 1;
                }
                goto LAB_180040c35;
              }
              goto LAB_180040cbf;
            case 0x6f:
              iVar8 = 8;
              if ((char)uVar25 < '\0') {
                local_2d8 = uVar25 | 0x200;
                uVar25 = local_2d8;
              }
              goto LAB_180040861;
            case 0x70:
              local_2d8 = uVar25 | 0x8000;
              uVar10 = 0x10;
              uVar25 = local_2d8;
switchD_180040494_caseD_58:
              cVar6 = '\a';
              local_280 = 7;
LAB_180040820:
              iVar8 = 0x10;
              if ((char)uVar25 < '\0') {
                local_2bf = cVar6 + 'Q';
                local_2c0 = 0x30;
                local_2c4 = 2;
              }
              goto LAB_180040861;
            case 0x75:
              iVar8 = 10;
LAB_180040861:
              if (uVar25 >> 0xf == 0) {
                if ((uVar25 >> 0xc & 1) == 0) {
                  if ((uVar25 & 0x20) == 0) {
                    if ((uVar25 & 0x40) == 0) {
                      uVar15 = (ulonglong)*(uint *)param_4;
                    }
                    else {
                      uVar15 = (ulonglong)*(int *)param_4;
                    }
                  }
                  else if ((uVar25 & 0x40) == 0) {
                    uVar15 = (ulonglong)(ushort)*param_4;
                  }
                  else {
                    uVar15 = (ulonglong)*param_4;
                  }
                }
                else {
                  uVar15 = *(ulonglong *)param_4;
                }
              }
              else {
                uVar15 = *(ulonglong *)param_4;
              }
              local_2b8 = param_4 + 4;
              if (((uVar25 & 0x40) != 0) && ((longlong)uVar15 < 0)) {
                uVar15 = -uVar15;
                uVar25 = uVar25 | 0x100;
                local_2d8 = uVar25;
              }
              if ((uVar25 >> 0xf == 0) && ((uVar25 >> 0xc & 1) == 0)) {
                uVar15 = uVar15 & 0xffffffff;
              }
              if ((int)uVar10 < 0) {
                uVar10 = 1;
              }
              else {
                local_2d8 = uVar25 & 0xfffffff7;
                if (0x200 < (int)uVar10) {
                  uVar10 = 0x200;
                }
              }
              pWVar19 = (WCHAR *)auStack_59;
              if (uVar15 == 0) {
                local_2c4 = 0;
              }
              while ((local_2d0 = uVar10 - 1, 0 < (int)uVar10 || (uVar15 != 0))) {
                uVar10 = (int)(uVar15 % (ulonglong)(longlong)iVar8) + 0x30;
                cVar6 = (char)uVar10;
                if (0x39 < uVar10) {
                  cVar6 = cVar6 + (char)local_280;
                }
                *(char *)pWVar19 = cVar6;
                pWVar19 = (WCHAR *)((longlong)pWVar19 + -1);
                uVar15 = uVar15 / (ulonglong)(longlong)iVar8;
                uVar10 = local_2d0;
              }
              local_2c8 = (int)auStack_59 - (int)pWVar19;
              pWVar20 = (WCHAR *)((longlong)pWVar19 + 1);
              uVar10 = local_2d0;
              uVar25 = local_2d8;
              if (((local_2d8 >> 9 & 1) != 0) && ((local_2c8 == 0 || (*(char *)pWVar20 != '0')))) {
                local_2c8 = local_2c8 + 1;
                *(undefined1 *)pWVar19 = 0x30;
                pWVar20 = pWVar19;
              }
              break;
            case 0x78:
              cVar6 = '\'';
              local_280 = 0x27;
              goto LAB_180040820;
            }
            iVar8 = local_2cc;
            if (local_2a8 == 0) {
              if ((uVar25 & 0x40) != 0) {
                if ((uVar25 >> 8 & 1) == 0) {
                  if ((uVar25 & 1) == 0) {
                    if ((uVar25 & 2) != 0) {
                      local_2c0 = 0x20;
                      local_2c4 = 1;
                    }
                  }
                  else {
                    local_2c0 = 0x2b;
                    local_2c4 = 1;
                  }
                }
                else {
                  local_2c0 = 0x2d;
                  local_2c4 = 1;
                }
              }
              uVar21 = local_2c4;
              iVar26 = (local_2b0 - local_2c8) - local_2c4;
              if ((uVar25 & 0xc) == 0) {
                FUN_1800387c0(0x20,iVar26,param_1,(int *)&local_2d4);
              }
              FUN_18003fce0(&local_2c0,uVar21,param_1,(int *)&local_2d4);
              if (((uVar25 & 8) != 0) && ((uVar25 & 4) == 0)) {
                FUN_1800387c0(0x30,iVar26,param_1,(int *)&local_2d4);
              }
              if ((iVar8 == 0) ||
                 (pWVar19 = pWVar20, iVar8 = local_2c8, uVar21 = local_2d4, local_2c8 < 1)) {
                FUN_18003fce0((byte *)pWVar20,local_2c8,param_1,(int *)&local_2d4);
                uVar21 = local_2d4;
              }
              else {
                do {
                  iVar8 = iVar8 + -1;
                  iVar11 = FUN_180047b90(local_270,(ulonglong *)(auStack_59 + 1),6,*pWVar19);
                  if ((iVar11 != 0) || (local_270[0] == 0)) {
                    uVar21 = 0xffffffff;
                    local_2d4 = 0xffffffff;
                    uVar10 = local_2d0;
                    goto LAB_180040c35;
                  }
                  pbVar22 = auStack_59 + 1;
                  iVar11 = local_270[0];
                  if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
joined_r0x000180040b03:
                    do {
                      if (iVar11 < 1) goto LAB_180040bb3;
                      bVar24 = *pbVar22;
                      iVar11 = iVar11 + -1;
                      if (((param_1->_flag & 0x40) == 0) || (param_1->_base != (char *)0x0)) {
                        piVar1 = &param_1->_cnt;
                        *piVar1 = *piVar1 + -1;
                        if (*piVar1 < 0) {
                          uVar15 = FUN_1800385f0((int)(char)bVar24,param_1);
                          uVar10 = (uint)uVar15;
                        }
                        else {
                          *param_1->_ptr = bVar24;
                          param_1->_ptr = param_1->_ptr + 1;
                          uVar10 = (uint)bVar24;
                        }
                        if (uVar10 == 0xffffffff) {
                          local_2d4 = 0xffffffff;
                        }
                        else {
                          local_2d4 = uVar21 + 1;
                        }
                      }
                      else {
                        local_2d4 = uVar21 + 1;
                      }
                      uVar21 = local_2d4;
                      pbVar22 = pbVar22 + 1;
                      if (local_2d4 == 0xffffffff) {
                        pDVar12 = FUN_180035b40();
                        if (*pDVar12 != 0x2a) goto LAB_180040bb3;
                        if (((param_1->_flag & 0x40) != 0) && (param_1->_base == (char *)0x0)) {
                          local_2d4 = 0;
                          uVar21 = local_2d4;
                          goto joined_r0x000180040b03;
                        }
                        piVar1 = &param_1->_cnt;
                        *piVar1 = *piVar1 + -1;
                        if (*piVar1 < 0) {
                          uVar15 = FUN_1800385f0(0x3f,param_1);
                          if ((int)uVar15 == -1) {
                            local_2d4 = 0xffffffff;
                            uVar21 = local_2d4;
                            goto joined_r0x000180040b03;
                          }
                        }
                        else {
                          *param_1->_ptr = '?';
                          param_1->_ptr = param_1->_ptr + 1;
                        }
                        local_2d4 = 0;
                        uVar21 = local_2d4;
                      }
                    } while( true );
                  }
                  local_2d4 = uVar21 + local_270[0];
                  uVar21 = local_2d4;
LAB_180040bb3:
                  pWVar19 = pWVar19 + 1;
                  uVar25 = local_2d8;
                } while (iVar8 != 0);
              }
              uVar10 = local_2d0;
              if ((-1 < (int)uVar21) && ((uVar25 & 4) != 0)) {
                FUN_1800387c0(0x20,iVar26,param_1,(int *)&local_2d4);
                uVar10 = local_2d0;
                uVar21 = local_2d4;
              }
            }
LAB_180040c35:
            pbVar22 = local_260;
            uVar25 = local_2d8;
            if (local_278 != (WCHAR *)0x0) {
              FUN_180034a70(local_278);
              local_278 = (WCHAR *)0x0;
              pbVar22 = local_260;
            }
          }
          bVar24 = *pbVar22;
          param_2 = pbVar22;
          param_4 = local_2b8;
          uVar9 = local_2ac;
          uVar16 = uVar21;
        } while (bVar24 != 0);
        if ((uVar9 != 0) && (uVar9 != 7)) {
LAB_180040cbf:
          pDVar12 = FUN_180035b40();
          *pDVar12 = 0x16;
          FUN_1800384e0(0,0,0,0,0);
          bVar27 = local_288 == '\0';
          goto LAB_180040cea;
        }
      }
      if (local_288 == '\0') {
        return uVar21;
      }
      local_290[0x32] = local_290[0x32] & 0xfffffffd;
      return uVar21;
    }
    pDVar12 = FUN_180035b40();
    *pDVar12 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    bVar27 = local_288 == '\0';
  }
LAB_180040cea:
  if (!bVar27) {
    local_290[0x32] = local_290[0x32] & 0xfffffffd;
  }
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 180040de0 (112 bytes) name=FUN_180040de0

longlong FUN_180040de0(size_t param_1)

{
  LPVOID pvVar1;
  DWORD dwMilliseconds;
  
  dwMilliseconds = 0;
  while( true ) {
    pvVar1 = FUN_1800349a0(param_1);
    if (pvVar1 != (LPVOID)0x0) {
      return (longlong)pvVar1;
    }
    if (DAT_180072ed0 == 0) break;
    Sleep(dwMilliseconds);
    dwMilliseconds = dwMilliseconds + 1000;
    if (DAT_180072ed0 < dwMilliseconds) {
      dwMilliseconds = 0xffffffff;
    }
    if (dwMilliseconds == 0xffffffff) {
      return 0;
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180040e50 (142 bytes) name=FUN_180040e50

LPVOID FUN_180040e50(ulonglong param_1,ulonglong param_2)

{
  LPVOID pvVar1;
  uint dwMilliseconds;
  
  dwMilliseconds = 0;
  while( true ) {
    pvVar1 = FUN_180043e80(param_1,param_2,(undefined4 *)0x0);
    if (pvVar1 != (LPVOID)0x0) {
      return pvVar1;
    }
    if (DAT_180072ed0 == 0) break;
    Sleep(dwMilliseconds);
    dwMilliseconds = dwMilliseconds + 1000;
    if (DAT_180072ed0 < dwMilliseconds) {
      dwMilliseconds = 0xffffffff;
    }
    if (dwMilliseconds == 0xffffffff) {
      return (LPVOID)0x0;
    }
  }
  return (LPVOID)0x0;
}


==================================================================

### EXPORT FUNC 180040ee0 (144 bytes) name=FUN_180040ee0

LPVOID FUN_180040ee0(LPVOID param_1,ulonglong param_2)

{
  LPVOID pvVar1;
  uint dwMilliseconds;
  
  dwMilliseconds = 0;
  do {
    pvVar1 = FUN_180035950(param_1,param_2);
    if (pvVar1 != (LPVOID)0x0) {
      return pvVar1;
    }
    if (param_2 == 0) {
      return (LPVOID)0x0;
    }
    if (DAT_180072ed0 == 0) {
      return (LPVOID)0x0;
    }
    Sleep(dwMilliseconds);
    dwMilliseconds = dwMilliseconds + 1000;
    if (DAT_180072ed0 < dwMilliseconds) {
      dwMilliseconds = 0xffffffff;
    }
  } while (dwMilliseconds != 0xffffffff);
  return (LPVOID)0x0;
}


==================================================================

### EXPORT FUNC 180040f70 (145 bytes) name=FUN_180040f70

LPVOID FUN_180040f70(LPCVOID param_1,ulonglong param_2,ulonglong param_3)

{
  LPVOID pvVar1;
  uint dwMilliseconds;
  
  dwMilliseconds = 0;
  do {
    pvVar1 = FUN_180035a40(param_1,param_2,param_3);
    if (pvVar1 != (LPVOID)0x0) {
      return pvVar1;
    }
    if (param_3 == 0) {
      return (LPVOID)0x0;
    }
    if (DAT_180072ed0 == 0) {
      return (LPVOID)0x0;
    }
    Sleep(dwMilliseconds);
    dwMilliseconds = dwMilliseconds + 1000;
    if (DAT_180072ed0 < dwMilliseconds) {
      dwMilliseconds = 0xffffffff;
    }
  } while (dwMilliseconds != 0xffffffff);
  return (LPVOID)0x0;
}


==================================================================

### EXPORT FUNC 180041010 (81 bytes) name=_heap_init

/* Library Function - Single Match
    _heap_init
   
   Library: Visual Studio 2005 Release */

int __cdecl _heap_init(void)

{
  undefined4 local_res8 [8];
  
  DAT_180072ed8 = HeapCreate(0,0x1000,0);
  if (DAT_180072ed8 == (HANDLE)0x0) {
    return 0;
  }
  local_res8[0] = 2;
  HeapSetInformation(DAT_180072ed8,HeapCompatibilityInformation,local_res8,4);
  return 1;
}


==================================================================

### EXPORT FUNC 180041070 (33 bytes) name=FUN_180041070

void FUN_180041070(void)

{
  HeapDestroy(DAT_180072ed8);
  DAT_180072ed8 = (HANDLE)0x0;
  return;
}


==================================================================

### EXPORT FUNC 1800410a0 (779 bytes) name=FUN_1800410a0

undefined8 FUN_1800410a0(void)

{
  DWORD DVar1;
  undefined8 *puVar2;
  undefined8 uVar3;
  ulonglong uVar4;
  HANDLE pvVar5;
  uint uVar6;
  longlong lVar7;
  longlong *plVar8;
  ulonglong uVar9;
  byte *pbVar10;
  ulonglong uVar11;
  UINT *pUVar12;
  UINT UVar13;
  UINT UVar14;
  _STARTUPINFOA local_88;
  
  GetStartupInfoA(&local_88);
  puVar2 = FUN_180040e50(0x20,0x50);
  if (puVar2 == (undefined8 *)0x0) {
    uVar3 = 0xffffffff;
  }
  else {
    DAT_1800db4c8 = 0x20;
    DAT_1800db4e0 = puVar2;
    if (puVar2 < puVar2 + 0x140) {
      do {
        *(undefined1 *)(puVar2 + 1) = 0;
        *puVar2 = 0xffffffffffffffff;
        *(undefined1 *)((longlong)puVar2 + 9) = 10;
        *(undefined4 *)((longlong)puVar2 + 0xc) = 0;
        *(undefined1 *)(puVar2 + 7) = 0;
        *(undefined1 *)((longlong)puVar2 + 0x39) = 10;
        *(undefined1 *)((longlong)puVar2 + 0x3a) = 10;
        puVar2 = puVar2 + 10;
      } while (puVar2 < DAT_1800db4e0 + 0x140);
    }
    uVar9 = 0;
    uVar11 = uVar9;
    if ((local_88.cbReserved2 != 0) && ((UINT *)local_88.lpReserved2 != (UINT *)0x0)) {
      UVar14 = *(UINT *)local_88.lpReserved2;
      pUVar12 = (UINT *)((longlong)local_88.lpReserved2 + 4);
      pbVar10 = (byte *)((longlong)pUVar12 + (longlong)(int)UVar14);
      UVar13 = 0x800;
      if ((int)UVar14 < 0x800) {
        UVar13 = UVar14;
      }
      lVar7 = 1;
      while ((UVar14 = UVar13, (int)DAT_1800db4c8 < (int)UVar13 &&
             (puVar2 = FUN_180040e50(0x20,0x50), UVar14 = DAT_1800db4c8, puVar2 != (undefined8 *)0x0
             ))) {
        (&DAT_1800db4e0)[lVar7] = puVar2;
        DAT_1800db4c8 = DAT_1800db4c8 + 0x20;
        if (puVar2 < puVar2 + 0x140) {
          do {
            *(undefined1 *)(puVar2 + 1) = 0;
            *puVar2 = 0xffffffffffffffff;
            *(undefined1 *)((longlong)puVar2 + 9) = 10;
            *(undefined4 *)((longlong)puVar2 + 0xc) = 0;
            *(byte *)(puVar2 + 7) = *(byte *)(puVar2 + 7) & 0x80;
            *(undefined1 *)((longlong)puVar2 + 0x39) = 10;
            *(undefined1 *)((longlong)puVar2 + 0x3a) = 10;
            puVar2 = puVar2 + 10;
          } while (puVar2 < (undefined8 *)((longlong)(&DAT_1800db4e0)[lVar7] + 0xa00));
        }
        lVar7 = lVar7 + 1;
      }
      uVar4 = uVar9;
      if (0 < (int)UVar14) {
        do {
          pvVar5 = *(HANDLE *)pbVar10;
          uVar6 = (uint)uVar4;
          if ((((pvVar5 != (HANDLE)0xffffffffffffffff) && (pvVar5 != (HANDLE)0xfffffffffffffffe)) &&
              ((*pUVar12 & 1) != 0)) &&
             (((*pUVar12 & 8) != 0 || (DVar1 = GetFileType(pvVar5), DVar1 != 0)))) {
            puVar2 = (undefined8 *)
                     ((ulonglong)(uVar6 & 0x1f) * 0x50 +
                     (longlong)(&DAT_1800db4e0)[(longlong)(int)uVar6 >> 5]);
            *puVar2 = *(undefined8 *)pbVar10;
            *(byte *)(puVar2 + 1) = (byte)*pUVar12;
            uVar4 = FUN_180045910(puVar2 + 2,4000);
            if ((int)uVar4 == 0) {
              return 0xffffffff;
            }
            *(int *)((longlong)puVar2 + 0xc) = *(int *)((longlong)puVar2 + 0xc) + 1;
          }
          uVar4 = (ulonglong)(uVar6 + 1);
          pUVar12 = (UINT *)((longlong)pUVar12 + 1);
          pbVar10 = pbVar10 + 8;
        } while ((int)(uVar6 + 1) < (int)UVar14);
      }
    }
    do {
      plVar8 = DAT_1800db4e0 + uVar9 * 10;
      if ((*plVar8 == -1) || (*plVar8 == -2)) {
        *(undefined1 *)(plVar8 + 1) = 0x81;
        if (uVar9 == 0) {
          DVar1 = 0xfffffff6;
        }
        else {
          DVar1 = ((int)uVar11 == 1) - 0xc;
        }
        pvVar5 = GetStdHandle(DVar1);
        if (((pvVar5 == (HANDLE)0xffffffffffffffff) || (pvVar5 == (HANDLE)0x0)) ||
           (DVar1 = GetFileType(pvVar5), DVar1 == 0)) {
          *(byte *)(plVar8 + 1) = *(byte *)(plVar8 + 1) | 0x40;
          *plVar8 = -2;
        }
        else {
          *plVar8 = (longlong)pvVar5;
          if ((DVar1 & 0xff) == 2) {
            *(byte *)(plVar8 + 1) = *(byte *)(plVar8 + 1) | 0x40;
          }
          else if ((DVar1 & 0xff) == 3) {
            *(byte *)(plVar8 + 1) = *(byte *)(plVar8 + 1) | 8;
          }
          uVar4 = FUN_180045910(plVar8 + 2,4000);
          if ((int)uVar4 == 0) {
            return 0xffffffff;
          }
          *(int *)((longlong)plVar8 + 0xc) = *(int *)((longlong)plVar8 + 0xc) + 1;
        }
      }
      else {
        *(byte *)(plVar8 + 1) = *(byte *)(plVar8 + 1) | 0x80;
      }
      uVar9 = uVar9 + 1;
      uVar11 = (ulonglong)((int)uVar11 + 1);
    } while ((longlong)uVar9 < 3);
    SetHandleCount(DAT_1800db4c8);
    uVar3 = 0;
  }
  return uVar3;
}


==================================================================

### EXPORT FUNC 1800413b0 (26 bytes) name=FUN_1800413b0

undefined8 FUN_1800413b0(void)

{
  return 1;
}


==================================================================

### EXPORT FUNC 1800413d0 (130 bytes) name=FUN_1800413d0

void FUN_1800413d0(void)

{
  ulonglong uVar1;
  ulonglong *puVar2;
  
  puVar2 = &DAT_1800db4e0;
  do {
    uVar1 = *puVar2;
    if (uVar1 != 0) {
      if (uVar1 < uVar1 + 0xa00) {
        do {
          if (*(int *)(uVar1 + 0xc) != 0) {
            DeleteCriticalSection((LPCRITICAL_SECTION)(uVar1 + 0x10));
          }
          uVar1 = uVar1 + 0x50;
        } while (uVar1 < *puVar2 + 0xa00);
      }
      FUN_180034a70((LPVOID)*puVar2);
      *puVar2 = 0;
    }
    puVar2 = puVar2 + 1;
  } while ((longlong)puVar2 < 0x1800db6e0);
  return;
}


==================================================================

### EXPORT FUNC 180041460 (359 bytes) name=FUN_180041460

undefined8 FUN_180041460(void)

{
  char cVar1;
  char cVar2;
  errno_t eVar3;
  undefined8 *puVar4;
  char *pcVar5;
  uint uVar6;
  ulonglong uVar7;
  longlong lVar8;
  char *pcVar9;
  int iVar10;
  
  if (DAT_1800db6f8 == 0) {
    FUN_180037750();
  }
  iVar10 = 0;
  if (DAT_1800727c0 == (char *)0x0) {
    return 0xffffffff;
  }
  cVar2 = *DAT_1800727c0;
  pcVar9 = DAT_1800727c0;
  while (cVar2 != '\0') {
    if (cVar2 != '=') {
      iVar10 = iVar10 + 1;
    }
    uVar7 = 0xffffffffffffffff;
    pcVar5 = pcVar9;
    do {
      if (uVar7 == 0) break;
      uVar7 = uVar7 - 1;
      cVar2 = *pcVar5;
      pcVar5 = pcVar5 + 1;
    } while (cVar2 != '\0');
    pcVar9 = pcVar9 + ~uVar7;
    cVar2 = *pcVar9;
  }
  puVar4 = FUN_180040e50((longlong)(iVar10 + 1),8);
  DAT_180072808 = puVar4;
  if (puVar4 == (undefined8 *)0x0) {
    return 0xffffffff;
  }
  cVar2 = *DAT_1800727c0;
  pcVar9 = DAT_1800727c0;
  do {
    if (cVar2 == '\0') {
      FUN_180034a70(DAT_1800727c0);
      DAT_1800727c0 = (char *)0x0;
      *puVar4 = 0;
      DAT_1800db6e0 = 1;
      return 0;
    }
    lVar8 = -1;
    pcVar5 = pcVar9;
    do {
      if (lVar8 == 0) break;
      lVar8 = lVar8 + -1;
      cVar1 = *pcVar5;
      pcVar5 = pcVar5 + 1;
    } while (cVar1 != '\0');
    uVar6 = ~(uint)lVar8;
    if (cVar2 != '=') {
      pcVar5 = FUN_180040e50((longlong)(int)uVar6,1);
      *puVar4 = pcVar5;
      if (pcVar5 == (char *)0x0) {
        FUN_180034a70(DAT_180072808);
        DAT_180072808 = (undefined8 *)0x0;
        return 0xffffffff;
      }
      eVar3 = strcpy_s(pcVar5,(longlong)(int)uVar6,pcVar9);
      if (eVar3 != 0) {
                    /* WARNING: Subroutine does not return */
        FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
      }
      puVar4 = puVar4 + 1;
    }
    pcVar9 = pcVar9 + (int)uVar6;
    cVar2 = *pcVar9;
  } while( true );
}


==================================================================

### EXPORT FUNC 1800415d0 (541 bytes) name=FUN_1800415d0

void FUN_1800415d0(byte *param_1,undefined8 *param_2,byte *param_3,int *param_4,int *param_5)

{
  bool bVar1;
  bool bVar2;
  byte bVar3;
  byte bVar4;
  int iVar5;
  undefined7 extraout_var;
  undefined7 extraout_var_00;
  uint uVar6;
  ulonglong uVar7;
  byte *pbVar8;
  byte *pbVar9;
  
  *param_5 = 0;
  *param_4 = 1;
  if (param_2 != (undefined8 *)0x0) {
    *param_2 = param_3;
    param_2 = param_2 + 1;
  }
  bVar2 = false;
  do {
    if (*param_1 == 0x22) {
      bVar2 = !bVar2;
      bVar4 = 0x22;
      pbVar8 = param_1 + 1;
    }
    else {
      *param_5 = *param_5 + 1;
      pbVar9 = param_3;
      if (param_3 != (byte *)0x0) {
        pbVar9 = param_3 + 1;
        *param_3 = *param_1;
      }
      bVar4 = *param_1;
      pbVar8 = param_1 + 1;
      bVar3 = FUN_180049310((uint)bVar4);
      param_3 = pbVar9;
      if ((int)CONCAT71(extraout_var,bVar3) != 0) {
        *param_5 = *param_5 + 1;
        if (pbVar9 != (byte *)0x0) {
          param_3 = pbVar9 + 1;
          *pbVar9 = *pbVar8;
        }
        pbVar8 = param_1 + 2;
      }
      if (bVar4 == 0) {
        pbVar8 = pbVar8 + -1;
        goto LAB_18004169a;
      }
    }
    param_1 = pbVar8;
  } while ((bVar2) || ((bVar4 != 0x20 && (bVar4 != 9))));
  if (param_3 != (byte *)0x0) {
    param_3[-1] = 0;
  }
LAB_18004169a:
  bVar2 = false;
  while (*pbVar8 != 0) {
    for (; (*pbVar8 == 0x20 || (*pbVar8 == 9)); pbVar8 = pbVar8 + 1) {
    }
    if (*pbVar8 == 0) break;
    if (param_2 != (undefined8 *)0x0) {
      *param_2 = param_3;
      param_2 = param_2 + 1;
    }
    *param_4 = *param_4 + 1;
    while( true ) {
      uVar7 = 0;
      bVar1 = true;
      bVar4 = *pbVar8;
      pbVar9 = pbVar8;
      while (bVar4 == 0x5c) {
        pbVar9 = pbVar9 + 1;
        uVar7 = (ulonglong)((int)uVar7 + 1);
        bVar4 = *pbVar9;
      }
      pbVar8 = pbVar9;
      if (*pbVar9 == 0x22) {
        if (((uVar7 & 1) == 0) && ((!bVar2 || (pbVar8 = pbVar9 + 1, pbVar9[1] != 0x22)))) {
          bVar1 = false;
          bVar2 = !bVar2;
          pbVar8 = pbVar9;
        }
        uVar7 = uVar7 >> 1;
      }
      uVar6 = (uint)uVar7;
      while (uVar6 != 0) {
        uVar6 = (int)uVar7 - 1;
        uVar7 = (ulonglong)uVar6;
        if (param_3 != (byte *)0x0) {
          *param_3 = 0x5c;
          param_3 = param_3 + 1;
        }
        *param_5 = *param_5 + 1;
      }
      bVar4 = *pbVar8;
      if ((bVar4 == 0) || ((!bVar2 && ((bVar4 == 0x20 || (bVar4 == 9)))))) break;
      if (bVar1) {
        bVar4 = FUN_180049310((int)(char)bVar4);
        iVar5 = (int)CONCAT71(extraout_var_00,bVar4);
        if (param_3 == (byte *)0x0) {
          if (iVar5 != 0) {
            pbVar8 = pbVar8 + 1;
            *param_5 = *param_5 + 1;
          }
          *param_5 = *param_5 + 1;
          goto LAB_18004179f;
        }
        pbVar9 = param_3;
        if (iVar5 != 0) {
          bVar4 = *pbVar8;
          pbVar9 = param_3 + 1;
          pbVar8 = pbVar8 + 1;
          *param_3 = bVar4;
          *param_5 = *param_5 + 1;
        }
        param_3 = pbVar9 + 1;
        *pbVar9 = *pbVar8;
        *param_5 = *param_5 + 1;
        pbVar8 = pbVar8 + 1;
      }
      else {
LAB_18004179f:
        pbVar8 = pbVar8 + 1;
      }
    }
    if (param_3 != (byte *)0x0) {
      *param_3 = 0;
      param_3 = param_3 + 1;
    }
    *param_5 = *param_5 + 1;
  }
  if (param_2 != (undefined8 *)0x0) {
    *param_2 = 0;
  }
  *param_4 = *param_4 + 1;
  return;
}


==================================================================

### EXPORT FUNC 1800417f0 (258 bytes) name=FUN_1800417f0

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

undefined8 FUN_1800417f0(void)

{
  ulonglong uVar1;
  ulonglong uVar2;
  undefined8 *puVar3;
  byte *pbVar4;
  ulonglong uVar5;
  int local_res8 [2];
  int local_res10 [2];
  
  if (DAT_1800db6f8 == 0) {
    FUN_180037750();
  }
  DAT_180072fe4 = 0;
  GetModuleFileNameA((HMODULE)0x0,&DAT_180072ee0,0x104);
  _DAT_180072828 = &DAT_180072ee0;
  if ((DAT_1800db708 == (byte *)0x0) || (pbVar4 = DAT_1800db708, *DAT_1800db708 == 0)) {
    pbVar4 = &DAT_180072ee0;
  }
  FUN_1800415d0(pbVar4,(undefined8 *)0x0,(byte *)0x0,local_res8,local_res10);
  uVar5 = (ulonglong)local_res8[0];
  if (((uVar5 < 0x1fffffffffffffff) &&
      (uVar2 = (ulonglong)local_res10[0], uVar2 != 0xffffffffffffffff)) &&
     (uVar1 = uVar2 + uVar5 * 8, uVar2 <= uVar1)) {
    puVar3 = (undefined8 *)FUN_180040de0(uVar1);
    if (puVar3 != (undefined8 *)0x0) {
      FUN_1800415d0(pbVar4,puVar3,(byte *)(puVar3 + uVar5),local_res8,local_res10);
      _DAT_1800727f8 = puVar3;
      _DAT_1800727f0 = local_res8[0] + -1;
      return 0;
    }
  }
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 180041900 (463 bytes) name=FUN_180041900

LPSTR FUN_180041900(void)

{
  char cVar1;
  WCHAR WVar2;
  DWORD DVar3;
  int cbMultiByte;
  int iVar4;
  LPWCH lpWideCharStr;
  LPSTR pCVar5;
  LPCH _Src;
  char *pcVar6;
  WCHAR *pWVar8;
  size_t _Size;
  char *pcVar7;
  WCHAR *pWVar9;
  
  if (DAT_180072fe8 == 0) {
    lpWideCharStr = GetEnvironmentStringsW();
    if (lpWideCharStr != (LPWCH)0x0) {
      DAT_180072fe8 = 1;
      goto LAB_18004196e;
    }
    DVar3 = GetLastError();
    if (DVar3 == 0x78) {
      DAT_180072fe8 = 2;
      goto LAB_180041a49;
    }
  }
  if (DAT_180072fe8 != 1) {
    if ((DAT_180072fe8 != 2) && (DAT_180072fe8 != 0)) {
      return (LPSTR)0x0;
    }
LAB_180041a49:
    _Src = GetEnvironmentStrings();
    if (_Src != (LPCH)0x0) {
      cVar1 = *_Src;
      pcVar6 = _Src;
      while (cVar1 != '\0') {
        do {
          pcVar7 = pcVar6;
          pcVar6 = pcVar7 + 1;
        } while (*pcVar6 != '\0');
        pcVar6 = pcVar7 + 2;
        cVar1 = *pcVar6;
      }
      _Size = (size_t)(((int)pcVar6 - (int)_Src) + 1);
      pCVar5 = (LPSTR)FUN_180040de0(_Size);
      if (pCVar5 != (LPSTR)0x0) {
        memcpy(pCVar5,_Src,_Size);
        FreeEnvironmentStringsA(_Src);
        return pCVar5;
      }
      FreeEnvironmentStringsA(_Src);
    }
    return (LPSTR)0x0;
  }
  lpWideCharStr = GetEnvironmentStringsW();
  if (lpWideCharStr == (LPWCH)0x0) {
    return (LPSTR)0x0;
  }
LAB_18004196e:
  WVar2 = *lpWideCharStr;
  pWVar8 = lpWideCharStr;
  while (WVar2 != L'\0') {
    do {
      pWVar9 = pWVar8;
      pWVar8 = pWVar9 + 1;
    } while (*pWVar8 != L'\0');
    pWVar8 = pWVar9 + 2;
    WVar2 = *pWVar8;
  }
  iVar4 = (int)((longlong)pWVar8 - (longlong)lpWideCharStr >> 1);
  cbMultiByte = WideCharToMultiByte(0,0,lpWideCharStr,iVar4 + 1,(LPSTR)0x0,0,(LPCSTR)0x0,(LPBOOL)0x0
                                   );
  if ((cbMultiByte == 0) ||
     (pCVar5 = (LPSTR)FUN_180040de0((longlong)cbMultiByte), pCVar5 == (LPSTR)0x0)) {
    FreeEnvironmentStringsW(lpWideCharStr);
    pCVar5 = (LPSTR)0x0;
  }
  else {
    iVar4 = WideCharToMultiByte(0,0,lpWideCharStr,iVar4 + 1,pCVar5,cbMultiByte,(LPCSTR)0x0,
                                (LPBOOL)0x0);
    if (iVar4 == 0) {
      FUN_180034a70(pCVar5);
      pCVar5 = (LPSTR)0x0;
    }
    FreeEnvironmentStringsW(lpWideCharStr);
  }
  return pCVar5;
}


==================================================================

### EXPORT FUNC 180041ad0 (62 bytes) name=FUN_180041ad0

/* WARNING: Removing unreachable block (ram,0x000180041af0) */
/* WARNING: Removing unreachable block (ram,0x000180041af8) */
/* WARNING: Removing unreachable block (ram,0x000180041afa) */

void FUN_180041ad0(void)

{
  return;
}


==================================================================

### EXPORT FUNC 180041b10 (62 bytes) name=FUN_180041b10

/* WARNING: Removing unreachable block (ram,0x000180041b30) */
/* WARNING: Removing unreachable block (ram,0x000180041b38) */
/* WARNING: Removing unreachable block (ram,0x000180041b3a) */

void FUN_180041b10(void)

{
  return;
}


==================================================================

### EXPORT FUNC 180041b50 (528 bytes) name=FUN_180041b50

undefined4 FUN_180041b50(int param_1,undefined8 param_2)

{
  int iVar1;
  DWORD DVar2;
  int *piVar3;
  code *pcVar4;
  undefined8 uVar5;
  DWORD *pDVar6;
  int *piVar7;
  uint uVar8;
  ulonglong uVar9;
  longlong lVar10;
  
  pDVar6 = FUN_180038010();
  if (pDVar6 != (DWORD *)0x0) {
    piVar3 = *(int **)(pDVar6 + 0x28);
    piVar7 = piVar3;
    do {
      if (*piVar7 == param_1) break;
      piVar7 = piVar7 + 4;
    } while (piVar7 < piVar3 + (longlong)DAT_18006da6c * 4);
    if (((piVar7 < piVar3 + (longlong)DAT_18006da6c * 4) && (*piVar7 == param_1)) &&
       (pcVar4 = *(code **)(piVar7 + 2), pcVar4 != (code *)0x0)) {
      if (pcVar4 == (code *)0x5) {
        piVar7[2] = 0;
        piVar7[3] = 0;
        return 1;
      }
      if (pcVar4 == (code *)0x1) {
        return 0xffffffff;
      }
      uVar5 = *(undefined8 *)(pDVar6 + 0x2a);
      *(undefined8 *)(pDVar6 + 0x2a) = param_2;
      if (piVar7[1] == 8) {
        uVar9 = (ulonglong)DAT_18006da60;
        if (DAT_18006da60 < DAT_18006da64 + DAT_18006da60) {
          lVar10 = uVar9 << 4;
          do {
            uVar8 = (int)uVar9 + 1;
            uVar9 = (ulonglong)uVar8;
            *(undefined8 *)(lVar10 + 8 + *(longlong *)(pDVar6 + 0x28)) = 0;
            lVar10 = lVar10 + 0x10;
          } while ((int)uVar8 < DAT_18006da64 + DAT_18006da60);
        }
        iVar1 = *piVar7;
        DVar2 = pDVar6[0x2c];
        if (iVar1 == -0x3fffff72) {
          pDVar6[0x2c] = 0x83;
        }
        else if (iVar1 == -0x3fffff70) {
          pDVar6[0x2c] = 0x81;
        }
        else if (iVar1 == -0x3fffff6f) {
          pDVar6[0x2c] = 0x84;
        }
        else if (iVar1 == -0x3fffff6d) {
          pDVar6[0x2c] = 0x85;
        }
        else if (iVar1 == -0x3fffff73) {
          pDVar6[0x2c] = 0x82;
        }
        else if (iVar1 == -0x3fffff71) {
          pDVar6[0x2c] = 0x86;
        }
        else if (iVar1 == -0x3fffff6e) {
          pDVar6[0x2c] = 0x8a;
        }
        (*pcVar4)(8,pDVar6[0x2c]);
        *(undefined8 *)(pDVar6 + 0x2a) = uVar5;
        pDVar6[0x2c] = DVar2;
        return 0xffffffff;
      }
      piVar7[2] = 0;
      piVar7[3] = 0;
      (*pcVar4)();
      *(undefined8 *)(pDVar6 + 0x2a) = uVar5;
      return 0xffffffff;
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180041d60 (16 bytes) name=FUN_180041d60

undefined4 FUN_180041d60(int param_1,undefined8 param_2)

{
  undefined4 uVar1;
  
  if (param_1 == -0x1f928c9d) {
    uVar1 = FUN_180041b50(-0x1f928c9d,param_2);
    return uVar1;
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180041d70 (187 bytes) name=FUN_180041d70

void FUN_180041d70(void)

{
  _FILETIME _Var1;
  DWORD DVar2;
  DWORD DVar3;
  DWORD DVar4;
  _FILETIME local_res8;
  LARGE_INTEGER local_res10;
  
  local_res8.dwLowDateTime = 0;
  local_res8.dwHighDateTime = 0;
  if (DAT_18006cea0 != 0x2b992ddfa232) {
    DAT_18006cea8 = ~DAT_18006cea0;
    return;
  }
  GetSystemTimeAsFileTime(&local_res8);
  _Var1 = local_res8;
  DVar2 = GetCurrentProcessId();
  DVar3 = GetCurrentThreadId();
  DVar4 = GetTickCount();
  QueryPerformanceCounter(&local_res10);
  DAT_18006cea0 =
       (local_res10.QuadPart ^
       (ulonglong)_Var1 ^ (ulonglong)DVar2 ^ (ulonglong)DVar3 ^ (ulonglong)DVar4) & 0xffffffffffff;
  if (DAT_18006cea0 == 0x2b992ddfa232) {
    DAT_18006cea0 = 0x2b992ddfa233;
  }
  DAT_18006cea8 = ~DAT_18006cea0;
  return;
}


==================================================================

### EXPORT FUNC 180041e30 (563 bytes) name=FUN_180041e30

void FUN_180041e30(int param_1)

{
  char cVar1;
  int iVar2;
  errno_t eVar3;
  DWORD DVar4;
  int *piVar5;
  HANDLE hFile;
  ulonglong uVar6;
  longlong lVar7;
  uint uVar8;
  char *pcVar9;
  DWORD local_res10 [2];
  
  uVar8 = 0;
  piVar5 = &DAT_18006da70;
  while (param_1 != *piVar5) {
    uVar8 = uVar8 + 1;
    piVar5 = piVar5 + 4;
    if (0x16 < uVar8) {
      return;
    }
  }
  if (uVar8 < 0x17) {
    iVar2 = FUN_180049630(3);
    if ((iVar2 != 1) && ((iVar2 = FUN_180049630(3), iVar2 != 0 || (DAT_1800727d0 != 1)))) {
      if (param_1 == 0xfc) {
        return;
      }
      eVar3 = strcpy_s(&DAT_180072ff0,0x314,"Runtime Error!\n\nProgram: ");
      if (eVar3 != 0) {
                    /* WARNING: Subroutine does not return */
        FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
      }
      DAT_18007310d = 0;
      DVar4 = GetModuleFileNameA((HMODULE)0x0,&DAT_180073009,0x104);
      if ((DVar4 == 0) &&
         (eVar3 = strcpy_s(&DAT_180073009,0x2fb,"<program name unknown>"), eVar3 != 0)) {
                    /* WARNING: Subroutine does not return */
        FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
      }
      uVar6 = 0xffffffffffffffff;
      pcVar9 = &DAT_180073009;
      do {
        if (uVar6 == 0) break;
        uVar6 = uVar6 - 1;
        cVar1 = *pcVar9;
        pcVar9 = pcVar9 + 1;
      } while (cVar1 != '\0');
      if ((0x3c < ~uVar6) &&
         (pcVar9 = (char *)(~uVar6 + 0x180072fcd),
         eVar3 = strncpy_s(pcVar9,(longlong)&DAT_180073304 - (longlong)pcVar9,"...",3), eVar3 != 0))
      {
                    /* WARNING: Subroutine does not return */
        FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
      }
      eVar3 = strcat_s(&DAT_180072ff0,0x314,"\n\n");
      if (eVar3 != 0) {
                    /* WARNING: Subroutine does not return */
        FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
      }
      eVar3 = strcat_s(&DAT_180072ff0,0x314,
                       (&PTR_s_R6002___floating_point_support_n_18006da78)[(longlong)(int)uVar8 * 2]
                      );
      if (eVar3 == 0) {
        FUN_1800493d0(&DAT_180072ff0,"Microsoft Visual C++ Runtime Library",0x12010);
        return;
      }
                    /* WARNING: Subroutine does not return */
      FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
    }
    hFile = GetStdHandle(0xfffffff4);
    if ((hFile != (HANDLE)0x0) && (hFile != (HANDLE)0xffffffffffffffff)) {
      lVar7 = -1;
      pcVar9 = (&PTR_s_R6002___floating_point_support_n_18006da78)[(longlong)(int)uVar8 * 2];
      do {
        if (lVar7 == 0) break;
        lVar7 = lVar7 + -1;
        cVar1 = *pcVar9;
        pcVar9 = pcVar9 + 1;
      } while (cVar1 != '\0');
      WriteFile(hFile,(&PTR_s_R6002___floating_point_support_n_18006da78)[(longlong)(int)uVar8 * 2],
                ~(uint)lVar7 - 1,local_res10,(LPOVERLAPPED)0x0);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180042070 (235 bytes) name=FUN_180042070

void FUN_180042070(void)

{
  char cVar1;
  int iVar2;
  int *piVar3;
  HANDLE hFile;
  longlong lVar4;
  uint uVar5;
  char *pcVar6;
  DWORD local_res8 [2];
  
  iVar2 = FUN_180049630(3);
  if (iVar2 != 1) {
    iVar2 = FUN_180049630(3);
    if (iVar2 != 0) {
      return;
    }
    if (DAT_1800727d0 != 1) {
      return;
    }
  }
  piVar3 = &DAT_18006da70;
  uVar5 = 0;
  do {
    if (*piVar3 == 0xfc) {
      if (((uVar5 < 0x17) &&
          (((iVar2 = FUN_180049630(3), iVar2 == 1 ||
            ((iVar2 = FUN_180049630(3), iVar2 == 0 && (DAT_1800727d0 == 1)))) &&
           (hFile = GetStdHandle(0xfffffff4), hFile != (HANDLE)0x0)))) &&
         (hFile != (HANDLE)0xffffffffffffffff)) {
        lVar4 = -1;
        pcVar6 = (&PTR_s_R6002___floating_point_support_n_18006da78)[(longlong)(int)uVar5 * 2];
        goto code_r0x000180042130;
      }
      break;
    }
    uVar5 = uVar5 + 1;
    piVar3 = piVar3 + 4;
  } while (uVar5 < 0x17);
  goto LAB_180042142;
  while( true ) {
    lVar4 = lVar4 + -1;
    cVar1 = *pcVar6;
    pcVar6 = pcVar6 + 1;
    if (cVar1 == '\0') break;
code_r0x000180042130:
    if (lVar4 == 0) break;
  }
  WriteFile(hFile,(&PTR_s_R6002___floating_point_support_n_18006da78)[(longlong)(int)uVar5 * 2],
            ~(uint)lVar4 - 1,local_res8,(LPOVERLAPPED)0x0);
LAB_180042142:
  FUN_180041e30(0xff);
  return;
}


==================================================================

### EXPORT FUNC 180042160 (8 bytes) name=FUN_180042160

void FUN_180042160(undefined8 param_1)

{
  DAT_180073308 = param_1;
  return;
}


==================================================================

### EXPORT FUNC 180042170 (54 bytes) name=_callnewh

/* Library Function - Single Match
    _callnewh
   
   Library: Visual Studio 2005 Release */

int __cdecl _callnewh(size_t _Size)

{
  int iVar1;
  code *pcVar2;
  
  pcVar2 = (code *)FUN_180037d20(DAT_180073308);
  if (pcVar2 != (code *)0x0) {
    iVar1 = (*pcVar2)(_Size);
    if (iVar1 != 0) {
      return 1;
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 1800421b0 (161 bytes) name=abort

/* Library Function - Single Match
    abort
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void __cdecl abort(void)

{
  code *pcVar1;
  longlong lVar2;
  _EXCEPTION_POINTERS local_588;
  EXCEPTION_RECORD local_578;
  _CONTEXT local_4d8;
  
  if (((byte)DAT_18006dbe0 & 1) != 0) {
    FUN_180041e30(10);
  }
  lVar2 = FUN_180045610();
  if (lVar2 != 0) {
    FUN_180045620(0x16);
  }
  if (((byte)DAT_18006dbe0 & 2) != 0) {
    RtlCaptureContext(&local_4d8);
    FUN_1800357d0((ulonglong *)&local_578,0,0x98);
    local_588.ExceptionRecord = &local_578;
    local_578.ExceptionCode = 0x40000015;
    local_588.ContextRecord = &local_4d8;
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)0x0);
    UnhandledExceptionFilter(&local_588);
  }
  FUN_180036a20(3);
  pcVar1 = (code *)swi(3);
  (*pcVar1)();
  return;
}


==================================================================

### EXPORT FUNC 180042260 (28 bytes) name=_set_abort_behavior

/* Library Function - Single Match
    _set_abort_behavior
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

uint __cdecl _set_abort_behavior(uint _Flags,uint _Mask)

{
  uint uVar1;
  
  uVar1 = DAT_18006dbe0;
  DAT_18006dbe0 = ~_Mask & DAT_18006dbe0 | _Flags & _Mask;
  return uVar1;
}


==================================================================

### EXPORT FUNC 180042280 (8 bytes) name=FUN_180042280

void FUN_180042280(undefined8 param_1)

{
  DAT_180073320 = param_1;
  return;
}


==================================================================

### EXPORT FUNC 180042290 (144 bytes) name=FUN_180042290

undefined4 FUN_180042290(longlong param_1,longlong param_2,longlong param_3)

{
  uint uVar1;
  longlong lVar2;
  uint uVar3;
  int *piVar4;
  
  if (param_1 == 0) {
    FUN_180043cc0();
  }
  uVar1 = *(uint *)(param_1 + 0x14);
  if ((longlong)*(int *)(param_1 + 0x18) + *(longlong *)(param_2 + 8) == 0) {
    FUN_180043cc0();
  }
  uVar3 = 0;
  if (uVar1 != 0) {
    lVar2 = *(longlong *)(param_2 + 8);
    piVar4 = (int *)(lVar2 + *(int *)(param_1 + 0x18));
    do {
      if (param_3 < *piVar4 + lVar2) break;
      uVar3 = uVar3 + 1;
      piVar4 = piVar4 + 2;
    } while (uVar3 < uVar1);
    if (uVar3 != 0) {
      return *(undefined4 *)
              ((longlong)*(int *)(param_1 + 0x18) + (ulonglong)(uVar3 - 1) * 8 + 4 + lVar2);
    }
  }
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 180042320 (144 bytes) name=FUN_180042320

undefined4 FUN_180042320(longlong param_1,longlong *param_2)

{
  uint uVar1;
  longlong lVar2;
  longlong lVar3;
  uint uVar4;
  int *piVar5;
  
  lVar2 = *param_2;
  if (param_1 == 0) {
    FUN_180043cc0();
  }
  uVar1 = *(uint *)(param_1 + 0x14);
  if ((longlong)*(int *)(param_1 + 0x18) + param_2[1] == 0) {
    FUN_180043cc0();
  }
  uVar4 = 0;
  if (uVar1 != 0) {
    lVar3 = param_2[1];
    piVar5 = (int *)(lVar3 + *(int *)(param_1 + 0x18));
    do {
      if (lVar2 < *piVar5 + lVar3) break;
      uVar4 = uVar4 + 1;
      piVar5 = piVar5 + 2;
    } while (uVar4 < uVar1);
    if (uVar4 != 0) {
      return *(undefined4 *)
              (lVar3 + (ulonglong)(uVar4 - 1) * 8 + 4 + (longlong)*(int *)(param_1 + 0x18));
    }
  }
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 1800423b0 (146 bytes) name=FUN_1800423b0

int FUN_1800423b0(longlong *param_1,longlong *param_2,longlong param_3)

{
  uint uVar1;
  longlong lVar2;
  longlong lVar3;
  int iVar4;
  uint uVar5;
  int *piVar6;
  
  iVar4 = *(int *)((longlong)*(int *)(param_3 + 0x1c) + *param_1);
  if (iVar4 == -2) {
    uVar1 = *(uint *)(param_3 + 0x14);
    lVar2 = *param_2;
    if ((longlong)*(int *)(param_3 + 0x18) + param_2[1] == 0) {
      FUN_180043cc0();
    }
    uVar5 = 0;
    if (uVar1 != 0) {
      lVar3 = param_2[1];
      piVar6 = (int *)(lVar3 + *(int *)(param_3 + 0x18));
      do {
        if (lVar2 < *piVar6 + lVar3) break;
        uVar5 = uVar5 + 1;
        piVar6 = piVar6 + 2;
      } while (uVar5 < uVar1);
      if (uVar5 != 0) {
        return *(int *)((longlong)*(int *)(param_3 + 0x18) + (ulonglong)(uVar5 - 1) * 8 + 4 + lVar3)
        ;
      }
    }
    iVar4 = -1;
  }
  return iVar4;
}


==================================================================

### EXPORT FUNC 180042450 (12 bytes) name=FUN_180042450

void FUN_180042450(longlong *param_1,undefined8 param_2,longlong param_3,undefined4 param_4)

{
  *(undefined4 *)((longlong)*(int *)(param_3 + 0x1c) + *param_1) = param_4;
  return;
}


==================================================================

### EXPORT FUNC 180042460 (59 bytes) name=__SetUnwindTryBlock

/* Library Function - Single Match
    void __cdecl __SetUnwindTryBlock(unsigned __int64 * __ptr64,struct _xDISPATCHER_CONTEXT *
   __ptr64,struct _s_FuncInfo const * __ptr64,int)
   
   Libraries: Visual Studio 2008 Release, Visual Studio 2010 Release, Visual Studio 2012 Release */

void __cdecl
__SetUnwindTryBlock(__uint64 *param_1,_xDISPATCHER_CONTEXT *param_2,_s_FuncInfo *param_3,int param_4
                   )

{
  longlong *plVar1;
  longlong local_res18 [2];
  
  plVar1 = FUN_180034cb0((longlong *)param_1,(DWORD64 *)param_2,(longlong)param_3,local_res18);
  if (*(int *)((longlong)param_3->dispUnwindHelp + 4 + *plVar1) < param_4) {
    *(int *)((longlong)param_3->dispUnwindHelp + 4 + *plVar1) = param_4;
  }
  return;
}


==================================================================

### EXPORT FUNC 1800424a0 (41 bytes) name=GetUnwindTryBlock

/* Library Function - Multiple Matches With Same Base Name
    public: static int __cdecl __FrameHandler3::GetUnwindTryBlock(unsigned __int64 * __ptr64,struct
   _xDISPATCHER_CONTEXT * __ptr64,struct _s_FuncInfo const * __ptr64)
    int __cdecl __GetUnwindTryBlock(unsigned __int64 * __ptr64,struct _xDISPATCHER_CONTEXT *
   __ptr64,struct _s_FuncInfo const * __ptr64)
   
   Library: Visual Studio */

undefined4 GetUnwindTryBlock(longlong *param_1,DWORD64 *param_2,longlong param_3)

{
  longlong *plVar1;
  longlong local_res18 [2];
  
  plVar1 = FUN_180034cb0(param_1,param_2,param_3,local_res18);
  return *(undefined4 *)((longlong)*(int *)(param_3 + 0x1c) + 4 + *plVar1);
}


==================================================================

### EXPORT FUNC 1800424e0 (57 bytes) name=FUN_1800424e0

undefined8 * FUN_1800424e0(undefined8 *param_1,uint param_2)

{
  *param_1 = std::bad_exception::vftable;
  FUN_1800497d0(param_1);
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180042520 (78 bytes) name=FUN_180042520

undefined8 FUN_180042520(undefined8 *param_1)

{
  DWORD *pDVar1;
  
  if (*(int *)*param_1 == -0x1fbcb0b3) {
    pDVar1 = FUN_1800380a0();
    if (0 < (int)pDVar1[0x40]) {
      pDVar1 = FUN_1800380a0();
      pDVar1[0x40] = pDVar1[0x40] - 1;
    }
  }
  else if (*(int *)*param_1 == -0x1f928c9d) {
    pDVar1 = FUN_1800380a0();
    pDVar1[0x40] = 0;
                    /* WARNING: Subroutine does not return */
    terminate();
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180042570 (372 bytes) name=FUN_180042570

void FUN_180042570(longlong *param_1,longlong *param_2,longlong param_3,int param_4)

{
  int iVar1;
  int iVar2;
  undefined8 uVar3;
  DWORD *pDVar4;
  longlong lVar5;
  longlong lVar6;
  
  iVar2 = FUN_1800423b0(param_1,param_2,param_3);
  uVar3 = FUN_180034dc0();
  pDVar4 = FUN_1800380a0();
  pDVar4[0x40] = pDVar4[0x40] + 1;
  while ((iVar2 != -1 && (param_4 < iVar2))) {
    if ((iVar2 < 0) || (*(int *)(param_3 + 4) <= iVar2)) {
      FUN_180043cc0();
    }
    lVar6 = (longlong)iVar2;
    lVar5 = FUN_180034dc0();
    iVar2 = *(int *)((longlong)*(int *)(param_3 + 8) + lVar5 + lVar6 * 8);
    lVar5 = FUN_180034dc0();
    if (*(int *)((longlong)*(int *)(param_3 + 8) + 4 + lVar5 + lVar6 * 8) != 0) {
      lVar5 = FUN_180034dc0();
      iVar1 = *(int *)((longlong)*(int *)(param_3 + 8) + 4 + lVar5 + lVar6 * 8);
      lVar5 = FUN_180034dc0();
      if (lVar5 + iVar1 != 0) {
        FUN_180042450(param_1,param_2,param_3,iVar2);
        lVar5 = FUN_180034dc0();
        if (*(int *)((longlong)*(int *)(param_3 + 8) + 4 + lVar5 + lVar6 * 8) != 0) {
          FUN_180034dc0();
          FUN_180034dc0();
        }
        _CallSettingFrame();
        FUN_180034e00(uVar3);
      }
    }
  }
  pDVar4 = FUN_1800380a0();
  if (0 < (int)pDVar4[0x40]) {
    pDVar4 = FUN_1800380a0();
    pDVar4[0x40] = pDVar4[0x40] - 1;
  }
  if ((iVar2 != -1) && (param_4 < iVar2)) {
    FUN_180043cc0();
  }
  FUN_180042450(param_1,param_2,param_3,iVar2);
  return;
}


==================================================================

### EXPORT FUNC 180042710 (20 bytes) name=FUN_180042710

void FUN_180042710(undefined8 *param_1)

{
  FUN_180042520(param_1);
  return;
}


==================================================================

### EXPORT FUNC 180042730 (41 bytes) name=FUN_180042730

void FUN_180042730(void)

{
  DWORD *pDVar1;
  
  pDVar1 = FUN_1800380a0();
  if (0 < (int)pDVar1[0x40]) {
    pDVar1 = FUN_1800380a0();
    pDVar1[0x40] = pDVar1[0x40] - 1;
  }
  return;
}


==================================================================

### EXPORT FUNC 180042760 (172 bytes) name=ExFilterRethrow

/* Library Function - Single Match
    int __cdecl ExFilterRethrow(struct _EXCEPTION_POINTERS * __ptr64,struct EHExceptionRecord *
   __ptr64,int * __ptr64)
   
   Library: Visual Studio 2005 Release */

int __cdecl ExFilterRethrow(_EXCEPTION_POINTERS *param_1,EHExceptionRecord *param_2,int *param_3)

{
  int iVar1;
  PEXCEPTION_RECORD pEVar2;
  DWORD *pDVar3;
  
  pEVar2 = param_1->ExceptionRecord;
  *param_3 = 0;
  if (pEVar2->ExceptionCode == 0xe06d7363) {
    if ((pEVar2->NumberParameters == 4) &&
       ((((iVar1 = (int)pEVar2->ExceptionInformation[0], iVar1 == 0x19930520 ||
          (iVar1 == 0x19930521)) || (iVar1 == 0x19930522)) &&
        (pEVar2->ExceptionInformation[1] == *(ULONG_PTR *)(param_2 + 0x28))))) {
      *param_3 = 1;
    }
    if ((((pEVar2->ExceptionCode == 0xe06d7363) && (pEVar2->NumberParameters == 4)) &&
        ((iVar1 = (int)pEVar2->ExceptionInformation[0], iVar1 == 0x19930520 ||
         ((iVar1 == 0x19930521 || (iVar1 == 0x19930522)))))) &&
       (pEVar2->ExceptionInformation[2] == 0)) {
      pDVar3 = FUN_1800380a0();
      pDVar3[0xb4] = 1;
      *param_3 = 1;
      return 1;
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180042810 (63 bytes) name=__DestructExceptionObject

/* Library Function - Single Match
    __DestructExceptionObject
   
   Library: Visual Studio 2005 Release */

void __DestructExceptionObject(int *param_1)

{
  int iVar1;
  
  if ((((param_1 != (int *)0x0) && (*param_1 == -0x1f928c9d)) && (*(longlong *)(param_1 + 0xc) != 0)
      ) && (iVar1 = *(int *)(*(longlong *)(param_1 + 0xc) + 4), iVar1 != 0)) {
    (*(code *)(*(longlong *)(param_1 + 0xe) + (longlong)iVar1))(*(undefined8 *)(param_1 + 10));
  }
  return;
}


==================================================================

### EXPORT FUNC 180042860 (23 bytes) name=FUN_180042860

bool FUN_180042860(undefined8 param_1,longlong param_2)

{
  return *(char *)(param_2 + 0x38) != '\0';
}


==================================================================

### EXPORT FUNC 180042880 (37 bytes) name=__AdjustPointer

/* Library Function - Single Match
    __AdjustPointer
   
   Library: Visual Studio 2005 Release */

longlong __AdjustPointer(longlong param_1,int *param_2)

{
  longlong lVar1;
  
  lVar1 = *param_2 + param_1;
  if (-1 < param_2[1]) {
    lVar1 = lVar1 + (longlong)*(int *)((longlong)param_2[2] + *(longlong *)(param_2[1] + param_1)) +
                    (longlong)param_2[1];
  }
  return lVar1;
}


==================================================================

### EXPORT FUNC 1800428b0 (579 bytes) name=FUN_1800428b0

undefined1 FUN_1800428b0(longlong param_1,int *param_2)

{
  char cVar1;
  char cVar2;
  uint uVar3;
  uint *puVar4;
  longlong lVar5;
  longlong lVar6;
  char *pcVar7;
  int iVar8;
  undefined1 uVar9;
  byte *pbVar10;
  int iVar11;
  byte *pbVar12;
  int *piVar13;
  int iVar14;
  longlong lVar15;
  undefined1 local_res18;
  
  if (param_2 == (int *)0x0) {
    FUN_180043cc0();
                    /* WARNING: Subroutine does not return */
    terminate();
  }
  uVar9 = 0;
  iVar14 = 0;
  local_res18 = 0;
  if (0 < *param_2) {
    lVar15 = 0;
    do {
      lVar5 = FUN_180034de0();
      piVar13 = (int *)(lVar5 + 4 + (longlong)*(int *)(*(longlong *)(param_1 + 0x30) + 0xc));
      lVar5 = FUN_180034de0();
      for (iVar11 = *(int *)(lVar5 + *(int *)(*(longlong *)(param_1 + 0x30) + 0xc)); 0 < iVar11;
          iVar11 = iVar11 + -1) {
        lVar5 = FUN_180034de0();
        puVar4 = *(uint **)(param_1 + 0x30);
        pbVar10 = (byte *)(lVar5 + *piVar13);
        lVar5 = FUN_180034dc0();
        pbVar12 = (byte *)((longlong)param_2[1] + lVar5 + lVar15);
        if (*(int *)(pbVar12 + 4) == 0) {
LAB_180042a9d:
          uVar9 = 1;
          local_res18 = 1;
          break;
        }
        iVar8 = *(int *)(pbVar12 + 4);
        lVar5 = FUN_180034dc0();
        if (lVar5 + iVar8 == 0) {
          uVar9 = 1;
          local_res18 = 1;
          break;
        }
        if (iVar8 == 0) {
          lVar5 = 0;
          iVar8 = 0;
        }
        else {
          iVar8 = *(int *)(pbVar12 + 4);
          lVar5 = FUN_180034dc0();
          lVar5 = iVar8 + lVar5;
        }
        if (*(char *)(lVar5 + 0x10) == '\0') {
          uVar9 = 1;
          local_res18 = 1;
          break;
        }
        if (iVar8 == 0) {
          lVar5 = 0;
        }
        else {
          lVar5 = FUN_180034dc0();
          lVar5 = lVar5 + *(int *)(pbVar12 + 4);
        }
        lVar6 = FUN_180034de0();
        if (lVar5 == lVar6 + *(int *)(pbVar10 + 4)) {
LAB_180042a18:
          if (((((*pbVar10 & 2) == 0) || ((*pbVar12 & 8) != 0)) &&
              ((uVar3 = *puVar4, (uVar3 & 1) == 0 || ((*pbVar12 & 1) != 0)))) &&
             (((uVar3 & 4) == 0 || ((*pbVar12 & 4) != 0)))) {
            if ((uVar3 & 2) == 0) goto LAB_180042a9d;
            if ((*pbVar12 & 2) != 0) {
              uVar9 = 1;
              local_res18 = 1;
              break;
            }
          }
        }
        else {
          if (*(int *)(pbVar12 + 4) == 0) {
            lVar5 = 0;
          }
          else {
            lVar5 = FUN_180034dc0();
            lVar5 = lVar5 + *(int *)(pbVar12 + 4);
          }
          lVar6 = FUN_180034de0();
          pcVar7 = (char *)(lVar5 + 0x10);
          lVar5 = (lVar6 + 0x10 + (longlong)*(int *)(pbVar10 + 4)) - (longlong)pcVar7;
          do {
            cVar1 = *pcVar7;
            cVar2 = pcVar7[lVar5];
            if (cVar1 != cVar2) break;
            pcVar7 = pcVar7 + 1;
          } while (cVar2 != '\0');
          if (cVar1 == cVar2) goto LAB_180042a18;
        }
        piVar13 = piVar13 + 1;
        uVar9 = local_res18;
      }
      iVar14 = iVar14 + 1;
      lVar15 = lVar15 + 0x14;
    } while (iVar14 < *param_2);
  }
  return uVar9;
}


==================================================================

### EXPORT FUNC 180042b00 (138 bytes) name=FUN_180042b00

ulonglong FUN_180042b00(int *param_1)

{
  int iVar1;
  bool bVar2;
  ulonglong in_RAX;
  longlong lVar3;
  type_info *this;
  undefined7 extraout_var;
  longlong lVar4;
  int iVar5;
  
  iVar5 = 0;
  if (0 < *param_1) {
    lVar4 = 0;
    do {
      lVar3 = FUN_180034dc0();
      if (*(int *)((longlong)param_1[1] + 4 + lVar3 + lVar4) == 0) {
        this = (type_info *)0x0;
      }
      else {
        lVar3 = FUN_180034dc0();
        iVar1 = *(int *)((longlong)param_1[1] + 4 + lVar3 + lVar4);
        lVar3 = FUN_180034dc0();
        this = (type_info *)(lVar3 + iVar1);
      }
      bVar2 = type_info::operator==(this,(type_info *)&std::bad_exception::RTTI_Type_Descriptor);
      in_RAX = CONCAT71(extraout_var,bVar2);
      if (bVar2) {
        return CONCAT71(extraout_var,1);
      }
      iVar5 = iVar5 + 1;
      lVar4 = lVar4 + 0x14;
    } while (iVar5 < *param_1);
  }
  return in_RAX & 0xffffffffffffff00;
}


==================================================================

### EXPORT FUNC 180042b90 (413 bytes) name=FUN_180042b90

undefined8 FUN_180042b90(longlong param_1)

{
  int iVar1;
  undefined8 uVar2;
  undefined8 uVar3;
  int *piVar4;
  longlong lVar5;
  longlong *plVar6;
  DWORD *pDVar7;
  undefined8 *puVar8;
  undefined8 uVar9;
  undefined8 uVar10;
  undefined8 local_48 [2];
  
  pDVar7 = FUN_1800380a0();
  uVar2 = *(undefined8 *)(pDVar7 + 0x3e);
  pDVar7 = FUN_1800380a0();
  uVar3 = *(undefined8 *)(pDVar7 + 0x3c);
  piVar4 = *(int **)(param_1 + 0x50);
  lVar5 = *(longlong *)(param_1 + 0x48);
  uVar9 = *(undefined8 *)(param_1 + 0x40);
  plVar6 = *(longlong **)(param_1 + 0x28);
  pDVar7 = FUN_1800380a0();
  *(int **)(pDVar7 + 0x3c) = piVar4;
  pDVar7 = FUN_1800380a0();
  *(undefined8 *)(pDVar7 + 0x3e) = uVar9;
  pDVar7 = FUN_1800380a0();
  puVar8 = _CreateFrameInfo(local_48,*(undefined8 *)(*(longlong *)(pDVar7 + 0x3c) + 0x28));
  if (*(longlong *)(param_1 + 0x58) != 0) {
    pDVar7 = FUN_1800380a0();
    uVar9 = *(undefined8 *)(pDVar7 + 0x4e);
    pDVar7 = FUN_1800380a0();
    *(undefined8 *)(pDVar7 + 0x3c) = uVar9;
  }
  uVar9 = _CallSettingFrame();
  FUN_180035360((longlong)puVar8);
  if ((((*piVar4 == -0x1f928c9d) && (piVar4[6] == 4)) &&
      ((iVar1 = piVar4[8], iVar1 == 0x19930520 || ((iVar1 == 0x19930521 || (iVar1 == 0x19930522)))))
      ) && (uVar10 = _IsExceptionObjectToBeDestroyed(*(longlong *)(piVar4 + 10)), (int)uVar10 != 0))
  {
    __DestructExceptionObject(piVar4);
  }
  pDVar7 = FUN_1800380a0();
  *(undefined8 *)(pDVar7 + 0x3c) = uVar3;
  pDVar7 = FUN_1800380a0();
  *(undefined8 *)(pDVar7 + 0x3e) = uVar2;
  *(undefined8 *)((longlong)*(int *)(lVar5 + 0x1c) + *plVar6) = 0xfffffffffffffffe;
  return uVar9;
}


==================================================================

### EXPORT FUNC 180042dc0 (35 bytes) name=FUN_180042dc0

void FUN_180042dc0(_EXCEPTION_POINTERS *param_1,longlong param_2)

{
  *(_EXCEPTION_POINTERS **)(param_2 + 0x58) = param_1;
  ExFilterRethrow(param_1,*(EHExceptionRecord **)(param_2 + 0xb8),(int *)(param_2 + 0x20));
  return;
}


==================================================================

### EXPORT FUNC 180042df0 (135 bytes) name=FUN_180042df0

void FUN_180042df0(undefined8 param_1,longlong param_2)

{
  int iVar1;
  int *piVar2;
  undefined8 uVar3;
  DWORD *pDVar4;
  
  FUN_180035360(*(longlong *)(param_2 + 0x30));
  if ((((*(int *)(param_2 + 0x20) == 0) &&
       (piVar2 = *(int **)(param_2 + 0xb8), *piVar2 == -0x1f928c9d)) && (piVar2[6] == 4)) &&
     (((iVar1 = piVar2[8], iVar1 == 0x19930520 || (iVar1 == 0x19930521)) || (iVar1 == 0x19930522))))
  {
    uVar3 = _IsExceptionObjectToBeDestroyed(*(longlong *)(piVar2 + 10));
    if ((int)uVar3 != 0) {
      __DestructExceptionObject(piVar2);
    }
  }
  pDVar4 = FUN_1800380a0();
  *(undefined8 *)(pDVar4 + 0x3c) = *(undefined8 *)(param_2 + 0xc0);
  pDVar4 = FUN_1800380a0();
  *(undefined8 *)(pDVar4 + 0x3e) = *(undefined8 *)(param_2 + 0x28);
  return;
}


==================================================================

### EXPORT FUNC 180042e80 (545 bytes) name=FUN_180042e80

char FUN_180042e80(longlong param_1,longlong *param_2,uint *param_3,byte *param_4)

{
  uint uVar1;
  bool bVar2;
  longlong lVar3;
  undefined7 extraout_var;
  undefined7 extraout_var_00;
  undefined7 extraout_var_01;
  undefined7 extraout_var_02;
  undefined7 extraout_var_03;
  undefined7 extraout_var_04;
  undefined7 extraout_var_05;
  undefined7 extraout_var_06;
  undefined7 extraout_var_07;
  void *_Src;
  ulonglong uVar4;
  ulonglong uVar5;
  size_t _Size;
  ulonglong uVar6;
  
  uVar4 = 0;
  uVar5 = 0;
  if (param_3[1] != 0) {
    uVar1 = param_3[1];
    lVar3 = FUN_180034dc0();
    if ((int)uVar1 + lVar3 != 0) {
      uVar6 = uVar4;
      if (uVar1 != 0) {
        lVar3 = FUN_180034dc0();
        uVar6 = lVar3 + (int)param_3[1];
      }
      if ((*(char *)(uVar6 + 0x10) != '\0') && ((param_3[2] != 0 || ((int)*param_3 < 0)))) {
        if (-1 < (int)*param_3) {
          param_2 = (longlong *)((longlong)(int)param_3[2] + *param_2);
        }
        if ((*param_3 & 8) == 0) {
          if ((*param_4 & 1) == 0) {
            if ((*(int *)(param_4 + 0x18) == 0) ||
               (lVar3 = FUN_180034de0(), lVar3 + *(int *)(param_4 + 0x18) == 0)) {
              bVar2 = FUN_180049880(*(longlong *)(param_1 + 0x28));
              if (((int)CONCAT71(extraout_var_06,bVar2) == 0) ||
                 (bVar2 = FUN_180049880((longlong)param_2),
                 (int)CONCAT71(extraout_var_07,bVar2) == 0)) {
                FUN_180043cc0();
                uVar4 = uVar5;
              }
              else {
                _Size = (size_t)*(int *)(param_4 + 0x14);
                _Src = (void *)__AdjustPointer(*(longlong *)(param_1 + 0x28),(int *)(param_4 + 8));
                memcpy(param_2,_Src,_Size);
                uVar4 = uVar5;
              }
            }
            else {
              bVar2 = FUN_180049880(*(longlong *)(param_1 + 0x28));
              if (((int)CONCAT71(extraout_var_03,bVar2) != 0) &&
                 (bVar2 = FUN_180049880((longlong)param_2),
                 (int)CONCAT71(extraout_var_04,bVar2) != 0)) {
                if (*(int *)(param_4 + 0x18) != 0) {
                  lVar3 = FUN_180034de0();
                  uVar4 = lVar3 + *(int *)(param_4 + 0x18);
                }
                bVar2 = FUN_180049880(uVar4);
                if ((int)CONCAT71(extraout_var_05,bVar2) != 0) {
                  uVar4 = (ulonglong)(((*param_4 & 4) != 0) + 1);
                  goto LAB_180043081;
                }
              }
              FUN_180043cc0();
              uVar4 = uVar5;
            }
          }
          else {
            bVar2 = FUN_180049880(*(longlong *)(param_1 + 0x28));
            if (((int)CONCAT71(extraout_var_01,bVar2) == 0) ||
               (bVar2 = FUN_180049880((longlong)param_2), (int)CONCAT71(extraout_var_02,bVar2) == 0)
               ) {
              FUN_180043cc0();
              uVar4 = uVar5;
            }
            else {
              memcpy(param_2,*(void **)(param_1 + 0x28),(longlong)*(int *)(param_4 + 0x14));
              if ((*(int *)(param_4 + 0x14) == 8) && (uVar4 = uVar5, *param_2 != 0)) {
                lVar3 = __AdjustPointer(*param_2,(int *)(param_4 + 8));
                *param_2 = lVar3;
              }
            }
          }
        }
        else {
          bVar2 = FUN_180049880(*(longlong *)(param_1 + 0x28));
          if (((int)CONCAT71(extraout_var,bVar2) == 0) ||
             (bVar2 = FUN_180049880((longlong)param_2), (int)CONCAT71(extraout_var_00,bVar2) == 0))
          {
            FUN_180043cc0();
          }
          else {
            lVar3 = *(longlong *)(param_1 + 0x28);
            *param_2 = lVar3;
            lVar3 = __AdjustPointer(lVar3,(int *)(param_4 + 8));
            *param_2 = lVar3;
          }
        }
LAB_180043081:
        return (char)uVar4;
      }
    }
  }
  return '\0';
}


==================================================================

### EXPORT FUNC 1800430b0 (174 bytes) name=FUN_1800430b0

void FUN_1800430b0(longlong param_1,longlong *param_2,uint *param_3,byte *param_4)

{
  char cVar1;
  int iVar2;
  undefined7 extraout_var;
  longlong lVar3;
  longlong *plVar4;
  code *pcVar5;
  
  plVar4 = param_2;
  if (-1 < (int)*param_3) {
    plVar4 = (longlong *)((longlong)(int)param_3[2] + *param_2);
  }
  cVar1 = FUN_180042e80(param_1,param_2,param_3,param_4);
  iVar2 = (int)CONCAT71(extraout_var,cVar1);
  if (iVar2 == 1) {
    if (*(int *)(param_4 + 0x18) == 0) {
      pcVar5 = (code *)0x0;
    }
    else {
      lVar3 = FUN_180034de0();
      pcVar5 = (code *)(*(int *)(param_4 + 0x18) + lVar3);
    }
    lVar3 = __AdjustPointer(*(longlong *)(param_1 + 0x28),(int *)(param_4 + 8));
    (*pcVar5)(plVar4,lVar3);
  }
  else if (iVar2 == 2) {
    if (*(int *)(param_4 + 0x18) == 0) {
      pcVar5 = (code *)0x0;
    }
    else {
      lVar3 = FUN_180034de0();
      pcVar5 = (code *)(lVar3 + *(int *)(param_4 + 0x18));
    }
    lVar3 = __AdjustPointer(*(longlong *)(param_1 + 0x28),(int *)(param_4 + 8));
    (*pcVar5)(plVar4,lVar3,1);
  }
  return;
}


==================================================================

### EXPORT FUNC 180043170 (631 bytes) name=FUN_180043170

void FUN_180043170(int *param_1,longlong *param_2,ULONG_PTR param_3,DWORD64 *param_4,
                  ULONG_PTR param_5,int param_6,uint param_7)

{
  int iVar1;
  int iVar2;
  DWORD *pDVar3;
  INT_PTR IVar4;
  int *piVar5;
  longlong lVar6;
  longlong *plVar7;
  longlong lVar8;
  uint local_res8 [2];
  uint local_48 [2];
  longlong local_40;
  
  if (*param_1 != -0x7ffffffd) {
    pDVar3 = FUN_1800380a0();
    if (*(longlong *)(pDVar3 + 0x38) != 0) {
      pDVar3 = FUN_1800380a0();
      IVar4 = FUN_180037c30();
      if (((*(longlong *)(pDVar3 + 0x38) != IVar4) && (*param_1 != -0x1fbcb0b3)) &&
         (iVar2 = FUN_1800350d0(param_1,param_2,param_3), iVar2 != 0)) {
        return;
      }
    }
    if (*(int *)(param_5 + 0xc) == 0) {
      FUN_180043cc0();
    }
    piVar5 = (int *)FUN_180035180(param_2,param_5,(ulonglong)param_7,param_6,local_res8,
                                  (int *)local_48,(longlong *)param_4);
    if (local_res8[0] < local_48[0]) {
      do {
        if ((*piVar5 <= param_6) && (param_6 <= piVar5[1])) {
          lVar6 = FUN_180034dc0();
          if (*(int *)(lVar6 + -0x10 + (longlong)piVar5[4] + (longlong)piVar5[3] * 0x14) != 0) {
            lVar6 = FUN_180034dc0();
            iVar2 = *(int *)(lVar6 + -0x10 + (longlong)piVar5[4] + (longlong)piVar5[3] * 0x14);
            lVar6 = FUN_180034dc0();
            if (lVar6 + iVar2 != 0) {
              lVar6 = FUN_180034dc0();
              if (*(int *)(lVar6 + -0x10 + (longlong)piVar5[4] + (longlong)piVar5[3] * 0x14) == 0) {
                lVar6 = 0;
              }
              else {
                lVar6 = FUN_180034dc0();
                iVar2 = *(int *)(lVar6 + -0x10 + (longlong)piVar5[4] + (longlong)piVar5[3] * 0x14);
                lVar6 = FUN_180034dc0();
                lVar6 = lVar6 + iVar2;
              }
              if (*(char *)(lVar6 + 0x10) != '\0') goto LAB_1800433ac;
            }
          }
          lVar6 = FUN_180034dc0();
          if ((*(byte *)(lVar6 + -0x14 + (longlong)piVar5[4] + (longlong)piVar5[3] * 0x14) & 0x40)
              == 0) {
            lVar6 = FUN_180034dc0();
            iVar2 = piVar5[3];
            iVar1 = piVar5[4];
            plVar7 = FUN_180034cb0(param_2,param_4,param_5,&local_40);
            lVar8 = FUN_180034dc0();
            _UnwindNestedFrames(param_2,(ULONG_PTR)param_1,param_3,(ULONG_PTR)plVar7,
                                lVar8 + *(int *)(lVar6 + (longlong)(iVar2 + -1) * 0x14 +
                                                 (longlong)iVar1 + 0xc),*piVar5,param_5,param_4,0);
          }
        }
LAB_1800433ac:
        local_res8[0] = local_res8[0] + 1;
        piVar5 = piVar5 + 5;
      } while (local_res8[0] < local_48[0]);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 1800433f0 (1600 bytes) name=FUN_1800433f0

void FUN_1800433f0(int *param_1,__uint64 *param_2,ULONG_PTR param_3,_xDISPATCHER_CONTEXT *param_4,
                  _s_FuncInfo *param_5,byte param_6,uint param_7)

{
  uint *puVar1;
  bool bVar2;
  char cVar3;
  char cVar4;
  int iVar5;
  int iVar6;
  DWORD *pDVar7;
  undefined7 extraout_var;
  undefined8 uVar8;
  int *piVar9;
  longlong lVar10;
  longlong lVar11;
  longlong *plVar12;
  char *pcVar13;
  uint uVar14;
  byte *pbVar15;
  uint *puVar16;
  char *local_res8;
  __uint64 *local_res10;
  ULONG_PTR local_res18;
  _xDISPATCHER_CONTEXT *local_res20;
  uint local_558;
  uint local_554;
  int local_550;
  int *local_548;
  longlong local_540;
  longlong local_538;
  undefined **local_530 [3];
  undefined1 local_518 [1240];
  
  cVar4 = '\0';
  local_res8 = (char *)((ulonglong)local_res8 & 0xffffffffffffff00);
  local_res10 = param_2;
  local_res18 = param_3;
  local_res20 = param_4;
  iVar5 = FUN_180042320((longlong)param_5,(longlong *)param_4);
  local_550 = iVar5;
  FUN_180034cb0((longlong *)param_2,(DWORD64 *)param_4,(longlong)param_5,&local_540);
  iVar6 = GetUnwindTryBlock((longlong *)param_2,(DWORD64 *)param_4,(longlong)param_5);
  if (iVar6 < iVar5) {
    FUN_180042450(&local_540,param_4,(longlong)param_5,iVar5);
    __SetUnwindTryBlock(param_2,param_4,param_5,iVar5);
  }
  else {
    iVar5 = GetUnwindTryBlock((longlong *)param_2,(DWORD64 *)param_4,(longlong)param_5);
    local_550 = iVar5;
  }
  if ((iVar5 < -1) || (param_5->maxState <= iVar5)) {
    FUN_180043cc0();
  }
  if ((((*param_1 == -0x1f928c9d) && (param_1[6] == 4)) &&
      ((iVar6 = param_1[8], iVar6 == 0x19930520 || ((iVar6 == 0x19930521 || (iVar6 == 0x19930522))))
      )) && (*(longlong *)(param_1 + 0xc) == 0)) {
    pDVar7 = FUN_1800380a0();
    if (*(longlong *)(pDVar7 + 0x3c) == 0) {
      return;
    }
    pDVar7 = FUN_1800380a0();
    param_1 = *(int **)(pDVar7 + 0x3c);
    pDVar7 = FUN_1800380a0();
    param_3 = *(ULONG_PTR *)(pDVar7 + 0x3e);
    local_res18 = param_3;
    FUN_180034e20(*(undefined8 *)(param_1 + 0xe));
    bVar2 = FUN_180049880((longlong)param_1);
    if ((int)CONCAT71(extraout_var,bVar2) == 0) {
      FUN_180043cc0();
    }
    if (((*param_1 == -0x1f928c9d) && (param_1[6] == 4)) &&
       (((iVar6 = param_1[8], iVar6 == 0x19930520 ||
         ((iVar6 == 0x19930521 || (iVar6 == 0x19930522)))) && (*(longlong *)(param_1 + 0xc) == 0))))
    {
      FUN_180043cc0();
    }
    pDVar7 = FUN_1800380a0();
    if (*(longlong *)(pDVar7 + 0x42) != 0) {
      pDVar7 = FUN_1800380a0();
      piVar9 = *(int **)(pDVar7 + 0x42);
      pDVar7 = FUN_1800380a0();
      pDVar7[0x42] = 0;
      pDVar7[0x43] = 0;
      cVar3 = FUN_1800428b0((longlong)param_1,piVar9);
      param_3 = local_res18;
      if (cVar3 == '\0') {
        uVar8 = FUN_180042b00(piVar9);
        if ((char)uVar8 == '\0') {
                    /* WARNING: Subroutine does not return */
          terminate();
        }
        __DestructExceptionObject(param_1);
        local_res8 = "bad exception";
        FUN_180049690(local_530,&local_res8);
        local_530[0] = std::bad_exception::vftable;
                    /* WARNING: Subroutine does not return */
        _CxxThrowException(local_530,(ThrowInfo *)&DAT_1800689c8);
      }
    }
  }
  if (((*param_1 == -0x1f928c9d) && (param_1[6] == 4)) &&
     ((iVar6 = param_1[8], iVar6 == 0x19930520 || ((iVar6 == 0x19930521 || (iVar6 == 0x19930522)))))
     ) {
    if ((param_5->nTryBlocks != 0) &&
       (piVar9 = (int *)FUN_180035180(param_2,(longlong)param_5,(ulonglong)param_7,iVar5,&local_558,
                                      (int *)&local_554,(longlong *)param_4), uVar14 = local_554,
       local_548 = piVar9, local_558 < local_554)) {
      do {
        if ((*piVar9 <= iVar5) && (iVar5 <= piVar9[1])) {
          local_548 = piVar9;
          lVar10 = FUN_180034dc0();
          iVar5 = piVar9[3];
          puVar16 = (uint *)(piVar9[4] + lVar10);
          if (iVar5 < 1) {
            cVar4 = (char)local_res8;
            iVar5 = local_550;
            uVar14 = local_554;
          }
          else {
            do {
              lVar10 = FUN_180034de0();
              piVar9 = (int *)(lVar10 + 4 + (longlong)*(int *)(*(longlong *)(param_1 + 0xc) + 0xc));
              lVar10 = FUN_180034de0();
              param_2 = local_res10;
              param_4 = local_res20;
              for (iVar6 = *(int *)(lVar10 + *(int *)(*(longlong *)(param_1 + 0xc) + 0xc));
                  local_res10 = param_2, local_res20 = param_4, 0 < iVar6; iVar6 = iVar6 + -1) {
                lVar10 = FUN_180034de0();
                puVar1 = *(uint **)(param_1 + 0xc);
                pbVar15 = (byte *)(lVar10 + *piVar9);
                if (puVar16[1] == 0) {
LAB_18004382c:
                  param_4 = local_res20;
                  param_2 = local_res10;
                  local_res8 = (char *)CONCAT71(local_res8._1_7_,1);
                  plVar12 = FUN_180034cb0((longlong *)local_res10,(DWORD64 *)local_res20,
                                          (longlong)param_5,&local_538);
                  if (pbVar15 != (byte *)0x0) {
                    FUN_1800430b0((longlong)param_1,plVar12,puVar16,pbVar15);
                  }
                  lVar10 = FUN_180034dc0();
                  _UnwindNestedFrames(param_2,(ULONG_PTR)param_1,local_res18,(ULONG_PTR)plVar12,
                                      lVar10 + (int)puVar16[3],*local_548,(ULONG_PTR)param_5,
                                      (undefined8 *)param_4,param_6);
                  piVar9 = local_548;
                  cVar4 = '\x01';
                  iVar5 = local_550;
                  uVar14 = local_554;
                  goto LAB_1800438de;
                }
                uVar14 = puVar16[1];
                lVar10 = FUN_180034dc0();
                if (lVar10 + (int)uVar14 == 0) goto LAB_18004382c;
                if (uVar14 == 0) {
                  lVar10 = 0;
                  uVar14 = 0;
                }
                else {
                  uVar14 = puVar16[1];
                  lVar10 = FUN_180034dc0();
                  lVar10 = lVar10 + (int)uVar14;
                }
                if (*(char *)(lVar10 + 0x10) == '\0') goto LAB_18004382c;
                if (uVar14 == 0) {
                  lVar10 = 0;
                }
                else {
                  lVar10 = FUN_180034dc0();
                  lVar10 = (int)puVar16[1] + lVar10;
                }
                lVar11 = FUN_180034de0();
                if (lVar10 == lVar11 + *(int *)(pbVar15 + 4)) {
LAB_1800437b8:
                  if ((((((*pbVar15 & 2) == 0) || ((*puVar16 & 8) != 0)) &&
                       ((uVar14 = *puVar1, (uVar14 & 1) == 0 || ((*puVar16 & 1) != 0)))) &&
                      (((uVar14 & 4) == 0 || ((*puVar16 & 4) != 0)))) &&
                     (((uVar14 & 2) == 0 || ((*puVar16 & 2) != 0)))) goto LAB_18004382c;
                }
                else {
                  if (puVar16[1] == 0) {
                    lVar10 = 0;
                  }
                  else {
                    lVar10 = FUN_180034dc0();
                    lVar10 = (int)puVar16[1] + lVar10;
                  }
                  lVar11 = FUN_180034de0();
                  pcVar13 = (char *)(lVar10 + 0x10);
                  lVar10 = (lVar11 + 0x10 + (longlong)*(int *)(pbVar15 + 4)) - (longlong)pcVar13;
                  do {
                    cVar4 = *pcVar13;
                    cVar3 = pcVar13[lVar10];
                    if (cVar4 != cVar3) break;
                    pcVar13 = pcVar13 + 1;
                  } while (cVar3 != '\0');
                  if (cVar4 == cVar3) goto LAB_1800437b8;
                }
                piVar9 = piVar9 + 1;
                param_2 = local_res10;
                param_4 = local_res20;
              }
              iVar5 = iVar5 + -1;
              puVar16 = puVar16 + 5;
            } while (0 < iVar5);
            piVar9 = local_548;
            cVar4 = (char)local_res8;
            iVar5 = local_550;
            uVar14 = local_554;
          }
        }
LAB_1800438de:
        local_558 = local_558 + 1;
        piVar9 = piVar9 + 5;
      } while (local_558 < uVar14);
      local_548 = piVar9;
      if (cVar4 != '\0') goto LAB_1800439c2;
    }
    if ((0x19930520 < (param_5->magicNumber_and_bbtFlags & 0x1fffffff)) &&
       (param_5->dispESTypeList != 0)) {
      iVar5 = param_5->dispESTypeList;
      lVar10 = FUN_180034dc0();
      if (lVar10 + iVar5 != 0) {
        if (iVar5 == 0) {
          piVar9 = (int *)0x0;
        }
        else {
          lVar10 = FUN_180034dc0();
          piVar9 = (int *)(lVar10 + (int)param_5->dispESTypeList);
        }
        cVar4 = FUN_1800428b0((longlong)param_1,piVar9);
        if (cVar4 == '\0') {
          plVar12 = FUN_180034cb0((longlong *)param_2,(DWORD64 *)param_4,(longlong)param_5,
                                  (longlong *)&local_res8);
          pDVar7 = FUN_1800380a0();
          *(undefined1 **)(pDVar7 + 0x44) = local_518;
          _UnwindNestedFrames(param_2,(ULONG_PTR)param_1,local_res18,(ULONG_PTR)plVar12,0,-1,
                              (ULONG_PTR)param_5,(undefined8 *)param_4,param_6);
        }
      }
    }
  }
  else if (param_5->nTryBlocks != 0) {
    if (param_6 != 0) {
                    /* WARNING: Subroutine does not return */
      terminate();
    }
    FUN_180043170(param_1,(longlong *)param_2,param_3,(DWORD64 *)param_4,(ULONG_PTR)param_5,iVar5,
                  param_7);
  }
LAB_1800439c2:
  pDVar7 = FUN_1800380a0();
  if (*(longlong *)(pDVar7 + 0x42) != 0) {
    FUN_180043cc0();
  }
  return;
}


==================================================================

### EXPORT FUNC 180043a40 (33 bytes) name=FUN_180043a40

undefined8 * FUN_180043a40(undefined8 *param_1,longlong param_2)

{
  FUN_180049720(param_1,param_2);
  *param_1 = std::bad_exception::vftable;
  return param_1;
}


==================================================================

### EXPORT FUNC 180043a70 (539 bytes) name=FUN_180043a70

undefined8
FUN_180043a70(int *param_1,__uint64 *param_2,ULONG_PTR param_3,_xDISPATCHER_CONTEXT *param_4,
             _s_FuncInfo *param_5,uint param_6,undefined8 param_7,byte param_8)

{
  uint uVar1;
  int iVar2;
  DWORD *pDVar3;
  longlong lVar4;
  code *pcVar5;
  undefined8 uVar6;
  undefined8 in_stack_fffffffffffffff0;
  undefined4 uVar7;
  
  uVar7 = (undefined4)((ulonglong)in_stack_fffffffffffffff0 >> 0x20);
  pDVar3 = FUN_1800380a0();
  if (((((pDVar3[0xb4] != 0) || (iVar2 = *param_1, iVar2 == -0x1f928c9d)) ||
       ((iVar2 == -0x7fffffd7 &&
        ((param_1[6] == 0xf && (*(longlong *)(param_1 + 0x18) == 0x19930520)))))) ||
      (iVar2 == -0x7fffffda)) ||
     (((param_5->magicNumber_and_bbtFlags & 0x1fffffff) < 0x19930522 ||
      ((param_5->EHFlags & 1) == 0)))) {
    if ((param_1[1] & 0x66U) == 0) {
      if ((param_5->nTryBlocks != 0) ||
         (((0x19930520 < (param_5->magicNumber_and_bbtFlags & 0x1fffffff) &&
           (param_5->dispESTypeList != 0)) &&
          (lVar4 = FUN_180034dc0(), lVar4 + (int)param_5->dispESTypeList != 0)))) {
        if ((((*param_1 == -0x1f928c9d) && (2 < (uint)param_1[6])) &&
            (0x19930522 < (uint)param_1[8])) && (*(int *)(*(longlong *)(param_1 + 0xc) + 8) != 0)) {
          lVar4 = FUN_180034de0();
          pcVar5 = (code *)(lVar4 + *(int *)(*(longlong *)(param_1 + 0xc) + 8));
          if (pcVar5 != (code *)0x0) {
            uVar6 = (*pcVar5)(param_1,param_2,param_3,param_4,param_5,param_6,param_7,
                              CONCAT44(uVar7,(uint)param_8));
            return uVar6;
          }
        }
        FUN_1800433f0(param_1,param_2,param_3,param_4,param_5,param_8,param_6);
      }
    }
    else if ((param_5->maxState != 0) && (param_6 == 0)) {
      uVar1 = param_1[1] & 0x20;
      if ((uVar1 == 0) || (*param_1 != -0x7fffffda)) {
        if ((uVar1 == 0) || (*param_1 != -0x7fffffd7)) {
          FUN_180034e40((longlong *)param_2,(DWORD64 *)param_4,(longlong)param_5);
        }
        else {
          iVar2 = param_1[0xe];
          if ((iVar2 < -1) || (param_5->maxState <= iVar2)) {
            FUN_180043cc0();
          }
          FUN_180042570(*(longlong **)(param_1 + 10),(longlong *)param_4,(longlong)param_5,iVar2);
        }
      }
      else {
        iVar2 = FUN_180042290((longlong)param_5,(longlong)param_4,*(longlong *)(param_3 + 0xf8));
        if ((iVar2 < -1) || (param_5->maxState <= iVar2)) {
          FUN_180043cc0();
        }
        FUN_180042570((longlong *)param_2,(longlong *)param_4,(longlong)param_5,iVar2);
      }
    }
  }
  return 1;
}


==================================================================

### EXPORT FUNC 180043c90 (30 bytes) name=terminate

/* Library Function - Single Match
    void __cdecl terminate(void)
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void __cdecl terminate(void)

{
  DWORD *pDVar1;
  
  pDVar1 = FUN_1800380a0();
  if (*(code **)(pDVar1 + 0x34) != (code *)0x0) {
    (**(code **)(pDVar1 + 0x34))();
  }
                    /* WARNING: Subroutine does not return */
  abort();
}


==================================================================

### EXPORT FUNC 180043cc0 (30 bytes) name=FUN_180043cc0

void FUN_180043cc0(void)

{
  code *pcVar1;
  
  pcVar1 = (code *)FUN_180037d20(DAT_180073328);
  if (pcVar1 != (code *)0x0) {
    (*pcVar1)();
  }
                    /* WARNING: Subroutine does not return */
  terminate();
}


==================================================================

### EXPORT FUNC 180043cf0 (28 bytes) name=_initp_eh_hooks

/* Library Function - Single Match
    _initp_eh_hooks
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void _initp_eh_hooks(void)

{
  DAT_180073328 = FUN_180037b60(0x180043c90);
  return;
}


==================================================================

### EXPORT FUNC 180043d20 (36 bytes) name=FUN_180043d20

void FUN_180043d20(PVOID param_1,PVOID param_2)

{
  RtlUnwindEx(param_1,param_2,(PEXCEPTION_RECORD)0x0,(PVOID)0x0,(PCONTEXT)&stack0xfffffffffffffb28,
              (PUNWIND_HISTORY_TABLE)0x0);
  return;
}


==================================================================

### EXPORT FUNC 180043d50 (25 bytes) name=FUN_180043d50

void FUN_180043d50(void)

{
  return;
}


==================================================================

### EXPORT FUNC 180043d80 (1 bytes) name=FUN_180043d80

void FUN_180043d80(void)

{
  return;
}


==================================================================

### EXPORT FUNC 180043d90 (35 bytes) name=_ValidateImageBase

/* Library Function - Single Match
    _ValidateImageBase
   
   Library: Visual Studio 2005 Release */

BOOL __cdecl _ValidateImageBase(PBYTE pImageBase)

{
  uint uVar1;
  
  uVar1 = 0;
  if ((*(short *)pImageBase == 0x5a4d) &&
     (*(int *)(pImageBase + *(int *)(pImageBase + 0x3c)) == 0x4550)) {
    uVar1 = (uint)(*(short *)(pImageBase + (longlong)*(int *)(pImageBase + 0x3c) + 0x18) == 0x20b);
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180043dc0 (71 bytes) name=_FindPESection

/* Library Function - Single Match
    _FindPESection
   
   Library: Visual Studio 2005 Release */

PIMAGE_SECTION_HEADER __cdecl _FindPESection(PBYTE pImageBase,DWORD_PTR rva)

{
  int iVar1;
  PIMAGE_SECTION_HEADER p_Var2;
  uint uVar3;
  
  iVar1 = *(int *)(pImageBase + 0x3c);
  uVar3 = 0;
  p_Var2 = (PIMAGE_SECTION_HEADER)
           (pImageBase +
           (ulonglong)*(ushort *)(pImageBase + (longlong)iVar1 + 0x14) + 0x18 + (longlong)iVar1);
  if (*(ushort *)(pImageBase + (longlong)iVar1 + 6) != 0) {
    do {
      if ((p_Var2->VirtualAddress <= rva) &&
         (rva < (p_Var2->Misc).PhysicalAddress + p_Var2->VirtualAddress)) {
        return p_Var2;
      }
      uVar3 = uVar3 + 1;
      p_Var2 = p_Var2 + 1;
    } while (uVar3 < *(ushort *)(pImageBase + (longlong)iVar1 + 6));
  }
  return (PIMAGE_SECTION_HEADER)0x0;
}


==================================================================

### EXPORT FUNC 180043e10 (57 bytes) name=_IsNonwritableInCurrentImage

/* Library Function - Single Match
    _IsNonwritableInCurrentImage
   
   Library: Visual Studio 2005 Release */

BOOL __cdecl _IsNonwritableInCurrentImage(PBYTE pTarget)

{
  BOOL BVar1;
  uint uVar2;
  PIMAGE_SECTION_HEADER p_Var3;
  IMAGE_DOS_HEADER *pImageBase;
  
  pImageBase = &IMAGE_DOS_HEADER_180000000;
  BVar1 = _ValidateImageBase((PBYTE)&IMAGE_DOS_HEADER_180000000);
  uVar2 = 0;
  if (BVar1 != 0) {
    p_Var3 = _FindPESection((PBYTE)pImageBase,(longlong)pTarget - (longlong)pImageBase);
    uVar2 = 0;
    if (p_Var3 != (PIMAGE_SECTION_HEADER)0x0) {
      uVar2 = ~(p_Var3->Characteristics >> 0x1f) & 1;
    }
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 180043e50 (33 bytes) name=FUN_180043e50

bool FUN_180043e50(undefined8 *param_1)

{
  return *(int *)*param_1 == -0x3ffffffb;
}


==================================================================

### EXPORT FUNC 180043e80 (201 bytes) name=FUN_180043e80

LPVOID FUN_180043e80(ulonglong param_1,ulonglong param_2,undefined4 *param_3)

{
  undefined1 auVar1 [16];
  int iVar2;
  DWORD *pDVar3;
  LPVOID pvVar4;
  ulonglong dwBytes;
  
  if ((param_1 != 0) &&
     (auVar1._8_8_ = 0, auVar1._0_8_ = param_1,
     SUB168((ZEXT816(0) << 0x40 | ZEXT816(0xffffffffffffffe0)) / auVar1,0) < param_2)) {
    pDVar3 = FUN_180035b40();
    *pDVar3 = 0xc;
    FUN_1800384e0(0,0,0,0,0);
    return (LPVOID)0x0;
  }
  dwBytes = param_2 * param_1;
  if (dwBytes == 0) {
    dwBytes = 1;
  }
  do {
    if ((dwBytes < 0xffffffffffffffe1) &&
       (pvVar4 = HeapAlloc(DAT_180072ed8,8,dwBytes), pvVar4 != (LPVOID)0x0)) {
      return pvVar4;
    }
    if (DAT_180073310 == 0) {
      if (param_3 != (undefined4 *)0x0) {
        *param_3 = 0xc;
      }
      return (LPVOID)0x0;
    }
    iVar2 = _callnewh(dwBytes);
  } while (iVar2 != 0);
  if (param_3 != (undefined4 *)0x0) {
    *param_3 = 0xc;
  }
  return (LPVOID)0x0;
}


==================================================================

### EXPORT FUNC 180043f50 (227 bytes) name=FUN_180043f50

LPVOID FUN_180043f50(ulonglong param_1,ulonglong param_2)

{
  undefined1 auVar1 [16];
  int iVar2;
  DWORD *pDVar3;
  LPVOID pvVar4;
  DWORD DVar5;
  ulonglong dwBytes;
  
  DVar5 = 0;
  if ((param_1 != 0) &&
     (auVar1._8_8_ = 0, auVar1._0_8_ = param_1,
     SUB168((ZEXT816(0) << 0x40 | ZEXT816(0xffffffffffffffe0)) / auVar1,0) < param_2)) {
    pDVar3 = FUN_180035b40();
    *pDVar3 = 0xc;
    FUN_1800384e0(0,0,0,0,0);
    return (LPVOID)0x0;
  }
  dwBytes = param_1 * param_2;
  if (dwBytes == 0) {
    dwBytes = 1;
  }
  do {
    pvVar4 = (LPVOID)0x0;
    if ((dwBytes < 0xffffffffffffffe1) &&
       (pvVar4 = HeapAlloc(DAT_180072ed8,8,dwBytes), pvVar4 != (LPVOID)0x0)) {
LAB_180044003:
      if (pvVar4 != (LPVOID)0x0) {
        return pvVar4;
      }
      if (DVar5 == 0) {
        return (LPVOID)0x0;
      }
      goto LAB_18004400f;
    }
    if (DAT_180073310 == 0) {
      DVar5 = 0xc;
      goto LAB_180044003;
    }
    iVar2 = _callnewh(dwBytes);
  } while (iVar2 != 0);
  DVar5 = 0xc;
LAB_18004400f:
  pDVar3 = FUN_180035b40();
  if (pDVar3 != (DWORD *)0x0) {
    pDVar3 = FUN_180035b40();
    *pDVar3 = DVar5;
  }
  return (LPVOID)0x0;
}


==================================================================

### EXPORT FUNC 180044040 (319 bytes) name=FUN_180044040

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

void FUN_180044040(char *param_1,undefined8 *param_2)

{
  byte *pbVar1;
  char cVar2;
  undefined *puVar3;
  bool bVar4;
  uint uVar5;
  int iVar6;
  pthreadlocinfo ptVar7;
  char cVar8;
  DWORD *local_18;
  
  bVar4 = false;
  if (param_2 == (undefined8 *)0x0) {
    local_18 = FUN_1800380a0();
    ptVar7 = *(pthreadlocinfo *)(local_18 + 0x30);
    puVar3 = *(undefined **)(local_18 + 0x2e);
    if ((ptVar7 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
      ptVar7 = __updatetlocinfo();
    }
    if ((puVar3 != PTR_DAT_18006d470) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
      __updatetmbcinfo();
    }
    if ((local_18[0x32] & 2) == 0) {
      bVar4 = true;
      local_18[0x32] = local_18[0x32] | 2;
    }
  }
  else {
    ptVar7 = (pthreadlocinfo)*param_2;
    bVar4 = false;
  }
  uVar5 = FUN_180049b30((int)*param_1);
  if (uVar5 != 0x65) {
    do {
      pbVar1 = (byte *)(param_1 + 1);
      param_1 = param_1 + 1;
      iVar6 = isdigit((uint)*pbVar1);
    } while (iVar6 != 0);
  }
  uVar5 = FUN_180049b30((int)*param_1);
  if (uVar5 == 0x78) {
    param_1 = param_1 + 2;
  }
  cVar8 = *param_1;
  *param_1 = **(char **)ptVar7->locale_name[0];
  do {
    param_1 = param_1 + 1;
    cVar2 = *param_1;
    *param_1 = cVar8;
    cVar8 = cVar2;
  } while (*param_1 != '\0');
  if (bVar4) {
    local_18[0x32] = local_18[0x32] & 0xfffffffd;
  }
  return;
}


==================================================================

### EXPORT FUNC 180044180 (354 bytes) name=FUN_180044180

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

void FUN_180044180(char *param_1,undefined8 *param_2)

{
  undefined *puVar1;
  bool bVar2;
  pthreadlocinfo ptVar3;
  char cVar4;
  char *pcVar5;
  char *pcVar6;
  DWORD *local_18;
  
  bVar2 = false;
  if (param_2 == (undefined8 *)0x0) {
    local_18 = FUN_1800380a0();
    ptVar3 = *(pthreadlocinfo *)(local_18 + 0x30);
    puVar1 = *(undefined **)(local_18 + 0x2e);
    if ((ptVar3 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
      ptVar3 = __updatetlocinfo();
    }
    if ((puVar1 != PTR_DAT_18006d470) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
      __updatetmbcinfo();
    }
    if ((local_18[0x32] & 2) == 0) {
      bVar2 = true;
      local_18[0x32] = local_18[0x32] | 2;
    }
  }
  else {
    ptVar3 = (pthreadlocinfo)*param_2;
    bVar2 = false;
  }
  cVar4 = *param_1;
  if (cVar4 != '\0') {
    do {
      if (cVar4 == **(char **)ptVar3->locale_name[0]) break;
      cVar4 = param_1[1];
      param_1 = param_1 + 1;
    } while (cVar4 != '\0');
  }
  pcVar5 = param_1 + 1;
  if (*param_1 != '\0') {
    cVar4 = *pcVar5;
    while (((cVar4 != '\0' && (cVar4 != 'e')) && (cVar4 != 'E'))) {
      pcVar6 = pcVar5 + 1;
      pcVar5 = pcVar5 + 1;
      cVar4 = *pcVar6;
    }
    pcVar6 = pcVar5 + -1;
    cVar4 = *pcVar6;
    while (cVar4 == '0') {
      pcVar6 = pcVar6 + -1;
      cVar4 = *pcVar6;
    }
    if (*pcVar6 == **(char **)ptVar3->locale_name[0]) {
      pcVar6 = pcVar6 + -1;
    }
    do {
      cVar4 = *pcVar5;
      pcVar6 = pcVar6 + 1;
      pcVar5 = pcVar5 + 1;
      *pcVar6 = cVar4;
    } while (cVar4 != '\0');
  }
  if (bVar2) {
    local_18[0x32] = local_18[0x32] & 0xfffffffd;
  }
  return;
}


==================================================================

### EXPORT FUNC 180044310 (70 bytes) name=_fassign_l

/* Library Function - Single Match
    _fassign_l
   
   Library: Visual Studio 2005 Release */

void __cdecl _fassign_l(int flag,char *argument,char *number,_locale_t param_4)

{
  uint local_res8 [8];
  undefined8 local_18 [2];
  
  if (flag != 0) {
    FUN_180049b50((uint *)local_18,number,(longlong *)param_4);
    *(undefined8 *)argument = local_18[0];
    return;
  }
  FUN_180049ce0(local_res8,number,(longlong *)param_4);
  *(uint *)argument = local_res8[0];
  return;
}


==================================================================

### EXPORT FUNC 180044360 (70 bytes) name=_fassign

/* Library Function - Single Match
    _fassign
   
   Library: Visual Studio 2005 Release */

void __cdecl _fassign(int flag,char *argument,char *number)

{
  uint local_res8 [6];
  undefined8 local_res20;
  
  if (flag != 0) {
    FUN_180049b50((uint *)&local_res20,number,(longlong *)0x0);
    *(undefined8 *)argument = local_res20;
    return;
  }
  FUN_180049ce0(local_res8,number,(longlong *)0x0);
  *(uint *)argument = local_res8[0];
  return;
}


==================================================================

### EXPORT FUNC 1800443d0 (832 bytes) name=FUN_1800443d0

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

undefined8
FUN_1800443d0(undefined1 *param_1,ulonglong param_2,int param_3,int param_4,int *param_5,
             char param_6,pthreadlocinfo param_7)

{
  char cVar1;
  undefined *puVar2;
  bool bVar3;
  errno_t eVar4;
  DWORD *pDVar5;
  ulonglong uVar6;
  char *pcVar7;
  undefined1 *puVar8;
  undefined1 *puVar9;
  undefined1 *_SizeInBytes;
  char *pcVar10;
  int iVar11;
  DWORD *local_48;
  
  bVar3 = false;
  if (param_7 == (pthreadlocinfo)0x0) {
    local_48 = FUN_1800380a0();
    param_7 = *(pthreadlocinfo *)(local_48 + 0x30);
    puVar2 = *(undefined **)(local_48 + 0x2e);
    if ((param_7 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_48[0x32]) == 0))
    {
      param_7 = __updatetlocinfo();
    }
    if ((puVar2 != PTR_DAT_18006d470) && ((_DAT_18006d578 & local_48[0x32]) == 0)) {
      __updatetmbcinfo();
    }
    if ((local_48[0x32] & 2) == 0) {
      bVar3 = true;
      local_48[0x32] = local_48[0x32] | 2;
    }
  }
  else {
    param_7 = *(pthreadlocinfo *)param_7;
    bVar3 = false;
  }
  if ((param_1 == (undefined1 *)0x0) || (param_2 == 0)) {
    pDVar5 = FUN_180035b40();
    *pDVar5 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    if (bVar3) {
      local_48[0x32] = local_48[0x32] & 0xfffffffd;
    }
    return 0x16;
  }
  iVar11 = 0;
  if (0 < param_3) {
    iVar11 = param_3;
  }
  if (param_2 <= (ulonglong)(longlong)(iVar11 + 9)) {
    pDVar5 = FUN_180035b40();
    *pDVar5 = 0x22;
    FUN_1800384e0(0,0,0,0,0);
    if (bVar3) {
      local_48[0x32] = local_48[0x32] & 0xfffffffd;
    }
    return 0x22;
  }
  _SizeInBytes = (undefined1 *)0xffffffffffffffff;
  if (param_6 != '\0') {
    pcVar7 = param_1 + (*param_5 == 0x2d);
    if (0 < param_3 != 0) {
      uVar6 = 0xffffffffffffffff;
      pcVar10 = pcVar7;
      do {
        if (uVar6 == 0) break;
        uVar6 = uVar6 - 1;
        cVar1 = *pcVar10;
        pcVar10 = pcVar10 + 1;
      } while (cVar1 != '\0');
      memcpy(pcVar7 + (int)(uint)(0 < param_3),pcVar7,~uVar6);
    }
  }
  puVar8 = param_1;
  if (*param_5 == 0x2d) {
    *param_1 = 0x2d;
    puVar8 = param_1 + 1;
  }
  puVar9 = puVar8;
  if (0 < param_3) {
    puVar9 = puVar8 + 1;
    *puVar8 = puVar8[1];
    *puVar9 = **(undefined1 **)param_7->locale_name[0];
  }
  pcVar7 = puVar9 + (ulonglong)(param_6 == '\0') + (longlong)param_3;
  if (param_2 != 0xffffffffffffffff) {
    _SizeInBytes = param_1 + (param_2 - (longlong)pcVar7);
  }
  eVar4 = strcpy_s(pcVar7,(rsize_t)_SizeInBytes,"e+000");
  if (eVar4 == 0) {
    if (param_4 != 0) {
      *pcVar7 = 'E';
    }
    if (**(char **)(param_5 + 4) != '0') {
      iVar11 = param_5[1] + -1;
      if (iVar11 < 0) {
        iVar11 = -iVar11;
        pcVar7[1] = '-';
      }
      if (99 < iVar11) {
        pcVar7[2] = pcVar7[2] + (char)(iVar11 / 100);
        iVar11 = iVar11 % 100;
      }
      if (9 < iVar11) {
        pcVar7[3] = pcVar7[3] + (char)(iVar11 / 10);
        iVar11 = iVar11 % 10;
      }
      pcVar7[4] = pcVar7[4] + (char)iVar11;
    }
    if (((DAT_180073648 & 1) != 0) && (pcVar7[2] == '0')) {
      memcpy(pcVar7 + 2,pcVar7 + 3,3);
    }
    if (bVar3) {
      local_48[0x32] = local_48[0x32] & 0xfffffffd;
    }
    return 0;
  }
                    /* WARNING: Subroutine does not return */
  FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
}


==================================================================

### EXPORT FUNC 180044710 (275 bytes) name=FUN_180044710

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
FUN_180044710(ulonglong *param_1,undefined1 *param_2,ulonglong param_3,int param_4,int param_5,
             pthreadlocinfo param_6)

{
  DWORD *pDVar1;
  undefined8 uVar2;
  ulonglong uVar3;
  undefined1 auStackY_a8 [32];
  int local_68 [6];
  char local_50 [24];
  ulonglong local_38;
  
  local_38 = DAT_18006cea0 ^ (ulonglong)auStackY_a8;
  FUN_180049f90(*param_1,local_68,local_50,0x16);
  if ((param_2 == (undefined1 *)0x0) || (param_3 == 0)) {
    pDVar1 = FUN_180035b40();
    *pDVar1 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    uVar2 = 0x16;
  }
  else {
    if (param_3 == 0xffffffffffffffff) {
      uVar3 = 0xffffffffffffffff;
    }
    else {
      uVar3 = (param_3 - (local_68[0] == 0x2d)) - (ulonglong)(0 < param_4);
    }
    uVar2 = FUN_180049e70(param_2 + (ulonglong)(0 < param_4) + (ulonglong)(local_68[0] == 0x2d),
                          uVar3,param_4 + 1,(longlong)local_68);
    if ((int)uVar2 == 0) {
      uVar2 = FUN_1800443d0(param_2,param_3,param_4,param_5,local_68,'\0',param_6);
    }
    else {
      *param_2 = 0;
    }
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 180044830 (1216 bytes) name=FUN_180044830

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

undefined8
FUN_180044830(ulonglong *param_1,undefined1 *param_2,ulonglong param_3,uint param_4,uint param_5,
             undefined8 *param_6)

{
  undefined *puVar1;
  int iVar2;
  ulonglong *puVar3;
  bool bVar4;
  undefined1 uVar5;
  ushort uVar6;
  pthreadlocinfo ptVar7;
  DWORD *pDVar8;
  undefined8 uVar9;
  char *pcVar10;
  ulonglong *puVar11;
  char cVar12;
  longlong lVar13;
  ulonglong uVar14;
  longlong lVar15;
  short sVar16;
  ulonglong *puVar17;
  ulonglong *puVar18;
  char *pcVar19;
  char *pcVar20;
  short sVar21;
  ulonglong uVar22;
  ulonglong local_res10;
  DWORD *local_48;
  
  bVar4 = false;
  sVar16 = 0x30;
  local_res10 = 0x3ff;
  if (param_6 == (undefined8 *)0x0) {
    local_48 = FUN_1800380a0();
    ptVar7 = *(pthreadlocinfo *)(local_48 + 0x30);
    puVar1 = *(undefined **)(local_48 + 0x2e);
    if ((ptVar7 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_48[0x32]) == 0)) {
      ptVar7 = __updatetlocinfo();
    }
    if ((puVar1 != PTR_DAT_18006d470) && ((_DAT_18006d578 & local_48[0x32]) == 0)) {
      __updatetmbcinfo();
    }
    if ((local_48[0x32] & 2) == 0) {
      bVar4 = true;
      local_48[0x32] = local_48[0x32] | 2;
    }
  }
  else {
    ptVar7 = (pthreadlocinfo)*param_6;
    bVar4 = false;
  }
  uVar22 = (ulonglong)param_4;
  if ((int)param_4 < 0) {
    uVar22 = 0;
  }
  if ((param_2 == (undefined1 *)0x0) || (param_3 == 0)) {
    pDVar8 = FUN_180035b40();
    *pDVar8 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    if (bVar4) {
      local_48[0x32] = local_48[0x32] & 0xfffffffd;
    }
    return 0x16;
  }
  iVar2 = (int)uVar22;
  *param_2 = 0;
  if (param_3 <= (ulonglong)(longlong)(iVar2 + 0xb)) {
    pDVar8 = FUN_180035b40();
    *pDVar8 = 0x22;
    FUN_1800384e0(0,0,0,0,0);
    if (bVar4) {
      local_48[0x32] = local_48[0x32] & 0xfffffffd;
    }
    return 0x22;
  }
  if (((uint)(*param_1 >> 0x34) & 0x7ff) == 0x7ff) {
    if (param_3 == 0xffffffffffffffff) {
      uVar22 = 0xffffffffffffffff;
    }
    else {
      uVar22 = param_3 - 2;
    }
    uVar9 = FUN_180044710(param_1,param_2 + 2,uVar22,iVar2,0,(pthreadlocinfo)0x0);
    if ((int)uVar9 != 0) {
      *param_2 = 0;
      if (!bVar4) {
        return uVar9;
      }
      local_48[0x32] = local_48[0x32] & 0xfffffffd;
      return uVar9;
    }
    if (param_2[2] == '-') {
      *param_2 = 0x2d;
      param_2 = param_2 + 1;
    }
    *param_2 = 0x30;
    uVar5 = 0x78;
    if (param_5 != 0) {
      uVar5 = 0x58;
    }
    param_2[1] = uVar5;
    pcVar10 = strrchr(param_2 + 2,0x65);
    if (pcVar10 != (char *)0x0) {
      cVar12 = 'p';
      if (param_5 != 0) {
        cVar12 = 'P';
      }
      *pcVar10 = cVar12;
      pcVar10[3] = '\0';
    }
    goto LAB_180044cca;
  }
  if ((*param_1 & 0x8000000000000000) != 0) {
    *param_2 = 0x2d;
    param_2 = param_2 + 1;
  }
  uVar14 = (ulonglong)param_5;
  *param_2 = 0x30;
  uVar5 = 0x78;
  if (param_5 != 0) {
    uVar5 = 0x58;
  }
  param_2[1] = uVar5;
  sVar21 = 0x61;
  if (param_5 != 0) {
    sVar21 = 0x41;
  }
  if ((*param_1 & 0x7ff0000000000000) == 0) {
    param_2[2] = 0x30;
    local_res10 = (ulonglong)(-(uint)((*param_1 & 0xfffffffffffff) != 0) & 0x3fe);
  }
  else {
    param_2[2] = 0x31;
  }
  puVar17 = (ulonglong *)(param_2 + 3);
  puVar18 = (ulonglong *)(param_2 + 4);
  if (iVar2 == 0) {
    *(char *)puVar17 = (char)uVar22;
  }
  else {
    *(char *)puVar17 = **(char **)ptVar7->locale_name[0];
  }
  if ((*param_1 & 0xfffffffffffff) != 0) {
    uVar14 = 0xf000000000000;
    do {
      if ((int)uVar22 < 1) {
        if ((-1 < sVar16) &&
           (puVar3 = puVar18, 8 < (ushort)((*param_1 & uVar14) >> ((byte)sVar16 & 0x3f)))) {
          while( true ) {
            puVar11 = (ulonglong *)((longlong)puVar3 + -1);
            if ((*(char *)puVar11 != 'f') && (*(char *)puVar11 != 'F')) break;
            *(char *)puVar11 = '0';
            puVar3 = puVar11;
          }
          if (puVar11 == puVar17) {
            *(char *)((longlong)puVar3 + -2) = *(char *)((longlong)puVar3 + -2) + '\x01';
          }
          else if (*(char *)puVar11 == '9') {
            *(char *)puVar11 = (char)(sVar21 + -0x3a) + ':';
          }
          else {
            *(char *)puVar11 = *(char *)puVar11 + '\x01';
          }
        }
        break;
      }
      uVar6 = (short)((*param_1 & uVar14) >> ((byte)sVar16 & 0x3f)) + 0x30;
      if (0x39 < uVar6) {
        uVar6 = uVar6 + sVar21 + -0x3a;
      }
      *(char *)puVar18 = (char)uVar6;
      puVar18 = (ulonglong *)((longlong)puVar18 + 1);
      uVar14 = uVar14 >> 4;
      uVar22 = (ulonglong)((int)uVar22 - 1);
      sVar16 = sVar16 + -4;
    } while (-1 < sVar16);
  }
  if (0 < (int)uVar22) {
    FUN_1800357d0(puVar18,CONCAT71((int7)(uVar14 >> 8),0x30),uVar22);
    puVar18 = (ulonglong *)((longlong)puVar18 + uVar22);
  }
  if ((char)*puVar17 == '\0') {
    puVar18 = puVar17;
  }
  cVar12 = 'p';
  if (param_5 != 0) {
    cVar12 = 'P';
  }
  *(char *)puVar18 = cVar12;
  lVar13 = ((uint)(*param_1 >> 0x34) & 0x7ff) - local_res10;
  if (lVar13 < 0) {
    *(char *)((longlong)puVar18 + 1) = '-';
    lVar13 = -lVar13;
  }
  else {
    *(char *)((longlong)puVar18 + 1) = '+';
  }
  pcVar19 = (char *)((longlong)puVar18 + 2);
  *pcVar19 = '0';
  pcVar10 = pcVar19;
  if (lVar13 < 1000) {
LAB_180044c55:
    pcVar20 = pcVar10;
    if (99 < lVar13) goto LAB_180044c5b;
  }
  else {
    pcVar10 = (char *)((longlong)puVar18 + 3);
    *(char *)((longlong)puVar18 + 2) = (char)(lVar13 / 1000) + '0';
    lVar13 = lVar13 % 1000;
    pcVar20 = pcVar10;
    if (pcVar10 == pcVar19) goto LAB_180044c55;
LAB_180044c5b:
    pcVar10 = pcVar20 + 1;
    lVar15 = SUB168(SEXT816(-0x5c28f5c28f5c28f5) * SEXT816(lVar13),8) + lVar13;
    lVar15 = (lVar15 >> 6) - (lVar15 >> 0x3f);
    *pcVar20 = (char)lVar15 + '0';
    lVar13 = lVar13 + lVar15 * -100;
  }
  if ((pcVar10 != pcVar19) || (pcVar19 = pcVar10, 9 < lVar13)) {
    pcVar19 = pcVar10 + 1;
    *pcVar10 = (char)(lVar13 / 10) + '0';
    lVar13 = lVar13 % 10;
  }
  *pcVar19 = (char)lVar13 + '0';
  pcVar19[1] = '\0';
LAB_180044cca:
  if (bVar4) {
    local_48[0x32] = local_48[0x32] & 0xfffffffd;
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180044cf0 (602 bytes) name=FUN_180044cf0

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

undefined8
FUN_180044cf0(char *param_1,longlong param_2,int param_3,int *param_4,char param_5,
             pthreadlocinfo param_6)

{
  ulonglong *_Dst;
  char cVar1;
  undefined *puVar2;
  bool bVar3;
  ulonglong uVar4;
  DWORD *pDVar5;
  undefined8 uVar6;
  ulonglong uVar7;
  int iVar8;
  char *pcVar9;
  int iVar10;
  char *pcVar11;
  ulonglong *puVar12;
  DWORD *local_38;
  
  bVar3 = false;
  iVar10 = param_4[1] + -1;
  if (param_6 == (pthreadlocinfo)0x0) {
    local_38 = FUN_1800380a0();
    param_6 = *(pthreadlocinfo *)(local_38 + 0x30);
    puVar2 = *(undefined **)(local_38 + 0x2e);
    if ((param_6 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_38[0x32]) == 0))
    {
      param_6 = __updatetlocinfo();
    }
    if ((puVar2 != PTR_DAT_18006d470) && ((_DAT_18006d578 & local_38[0x32]) == 0)) {
      __updatetmbcinfo();
    }
    if ((local_38[0x32] & 2) == 0) {
      bVar3 = true;
      local_38[0x32] = local_38[0x32] | 2;
    }
  }
  else {
    param_6 = *(pthreadlocinfo *)param_6;
    bVar3 = false;
  }
  if ((param_1 == (char *)0x0) || (param_2 == 0)) {
    pDVar5 = FUN_180035b40();
    *pDVar5 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    if (bVar3) {
      local_38[0x32] = local_38[0x32] & 0xfffffffd;
    }
    uVar6 = 0x16;
  }
  else {
    if ((param_5 != '\0') && (iVar10 == param_3)) {
      iVar8 = *param_4;
      param_1[(longlong)iVar10 + (ulonglong)(iVar8 == 0x2d)] = '0';
      param_1[(longlong)iVar10 + 1 + (ulonglong)(iVar8 == 0x2d)] = '\0';
    }
    if (*param_4 == 0x2d) {
      *param_1 = '-';
      param_1 = param_1 + 1;
    }
    if (param_4[1] < 1) {
      uVar7 = 0xffffffffffffffff;
      pcVar9 = param_1;
      do {
        if (uVar7 == 0) break;
        uVar7 = uVar7 - 1;
        cVar1 = *pcVar9;
        pcVar9 = pcVar9 + 1;
      } while (cVar1 != '\0');
      memcpy(param_1 + 1,param_1,~uVar7);
      *param_1 = '0';
      pcVar9 = param_1 + 1;
    }
    else {
      pcVar9 = param_1 + param_4[1];
    }
    if (0 < param_3) {
      uVar7 = 0xffffffffffffffff;
      pcVar11 = pcVar9;
      do {
        if (uVar7 == 0) break;
        uVar7 = uVar7 - 1;
        cVar1 = *pcVar11;
        pcVar11 = pcVar11 + 1;
      } while (cVar1 != '\0');
      _Dst = (ulonglong *)(pcVar9 + 1);
      memcpy(_Dst,pcVar9,~uVar7);
      *pcVar9 = **(char **)param_6->locale_name[0];
      if (param_4[1] < 0) {
        iVar8 = -param_4[1];
        iVar10 = iVar8;
        if ((param_5 == '\0') && (iVar10 = param_3, iVar8 <= param_3)) {
          iVar10 = iVar8;
        }
        if (iVar10 != 0) {
          uVar7 = 0xffffffffffffffff;
          puVar12 = _Dst;
          do {
            if (uVar7 == 0) break;
            uVar7 = uVar7 - 1;
            uVar4 = *puVar12;
            puVar12 = (ulonglong *)((longlong)puVar12 + 1);
          } while ((char)uVar4 != '\0');
          memcpy((void *)((longlong)iVar10 + (longlong)_Dst),_Dst,~uVar7);
        }
        FUN_1800357d0(_Dst,0x30,(longlong)iVar10);
      }
    }
    if (bVar3) {
      local_38[0x32] = local_38[0x32] & 0xfffffffd;
    }
    uVar6 = 0;
  }
  return uVar6;
}


==================================================================

### EXPORT FUNC 180044f50 (235 bytes) name=FUN_180044f50

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
FUN_180044f50(ulonglong *param_1,char *param_2,longlong param_3,int param_4,pthreadlocinfo param_5)

{
  DWORD *pDVar1;
  undefined8 uVar2;
  ulonglong uVar3;
  undefined1 auStackY_98 [32];
  int local_68;
  int local_64;
  char local_50 [24];
  ulonglong local_38;
  
  local_38 = DAT_18006cea0 ^ (ulonglong)auStackY_98;
  FUN_180049f90(*param_1,&local_68,local_50,0x16);
  if ((param_2 == (char *)0x0) || (param_3 == 0)) {
    pDVar1 = FUN_180035b40();
    *pDVar1 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    uVar2 = 0x16;
  }
  else {
    if (param_3 == -1) {
      uVar3 = 0xffffffffffffffff;
    }
    else {
      uVar3 = param_3 - (ulonglong)(local_68 == 0x2d);
    }
    uVar2 = FUN_180049e70(param_2 + (local_68 == 0x2d),uVar3,local_64 + param_4,(longlong)&local_68)
    ;
    if ((int)uVar2 == 0) {
      uVar2 = FUN_180044cf0(param_2,param_3,param_4,&local_68,'\0',param_5);
    }
    else {
      *param_2 = '\0';
    }
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 180045040 (356 bytes) name=FUN_180045040

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
FUN_180045040(ulonglong *param_1,char *param_2,ulonglong param_3,int param_4,int param_5,
             pthreadlocinfo param_6)

{
  char *pcVar1;
  DWORD *pDVar2;
  undefined8 uVar3;
  ulonglong uVar4;
  char *pcVar5;
  int iVar6;
  undefined1 auStackY_b8 [32];
  int local_78;
  int local_74;
  char local_60 [24];
  ulonglong local_48;
  
  local_48 = DAT_18006cea0 ^ (ulonglong)auStackY_b8;
  FUN_180049f90(*param_1,&local_78,local_60,0x16);
  if ((param_2 == (char *)0x0) || (param_3 == 0)) {
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    uVar3 = 0x16;
  }
  else {
    iVar6 = local_74 + -1;
    if (param_3 == 0xffffffffffffffff) {
      uVar4 = 0xffffffffffffffff;
    }
    else {
      uVar4 = param_3 - (local_78 == 0x2d);
    }
    uVar3 = FUN_180049e70(param_2 + (local_78 == 0x2d),uVar4,param_4,(longlong)&local_78);
    if ((int)uVar3 == 0) {
      local_74 = local_74 + -1;
      if ((local_74 < -4) || (param_4 <= local_74)) {
        uVar3 = FUN_1800443d0(param_2,param_3,param_4,param_5,&local_78,'\x01',param_6);
      }
      else {
        pcVar1 = param_2 + (local_78 == 0x2d);
        if (iVar6 < local_74) {
          do {
            pcVar5 = pcVar1;
            pcVar1 = pcVar5 + 1;
          } while (*pcVar5 != '\0');
          pcVar5[-1] = '\0';
        }
        uVar3 = FUN_180044cf0(param_2,param_3,param_4,&local_78,'\x01',param_6);
      }
    }
    else {
      *param_2 = '\0';
    }
  }
  return uVar3;
}


==================================================================

### EXPORT FUNC 1800451b0 (158 bytes) name=_cfltcvt_l

/* Library Function - Single Match
    _cfltcvt_l
   
   Library: Visual Studio 2005 Release */

errno_t __cdecl
_cfltcvt_l(double *arg,char *buffer,size_t sizeInBytes,int format,int precision,int caps,
          _locale_t plocinfo)

{
  undefined8 uVar1;
  
  if ((format == 0x65) || (format == 0x45)) {
    uVar1 = FUN_180044710((ulonglong *)arg,buffer,sizeInBytes,precision,caps,
                          (pthreadlocinfo)plocinfo);
    return (errno_t)uVar1;
  }
  if (format == 0x66) {
    uVar1 = FUN_180044f50((ulonglong *)arg,buffer,sizeInBytes,precision,(pthreadlocinfo)plocinfo);
    return (errno_t)uVar1;
  }
  if ((format != 0x61) && (format != 0x41)) {
    uVar1 = FUN_180045040((ulonglong *)arg,buffer,sizeInBytes,precision,caps,
                          (pthreadlocinfo)plocinfo);
    return (errno_t)uVar1;
  }
  uVar1 = FUN_180044830((ulonglong *)arg,buffer,sizeInBytes,precision,caps,&plocinfo->locinfo);
  return (errno_t)uVar1;
}


==================================================================

### EXPORT FUNC 180045250 (154 bytes) name=_cfltcvt

/* Library Function - Single Match
    _cfltcvt
   
   Library: Visual Studio 2005 Release */

errno_t __cdecl
_cfltcvt(double *arg,char *buffer,size_t sizeInBytes,int format,int precision,int caps)

{
  undefined8 uVar1;
  
  if ((format == 0x65) || (format == 0x45)) {
    uVar1 = FUN_180044710((ulonglong *)arg,buffer,sizeInBytes,precision,caps,(pthreadlocinfo)0x0);
    return (errno_t)uVar1;
  }
  if (format == 0x66) {
    uVar1 = FUN_180044f50((ulonglong *)arg,buffer,sizeInBytes,precision,(pthreadlocinfo)0x0);
    return (errno_t)uVar1;
  }
  if ((format != 0x61) && (format != 0x41)) {
    uVar1 = FUN_180045040((ulonglong *)arg,buffer,sizeInBytes,precision,caps,(pthreadlocinfo)0x0);
    return (errno_t)uVar1;
  }
  uVar1 = FUN_180044830((ulonglong *)arg,buffer,sizeInBytes,precision,caps,(undefined8 *)0x0);
  return (errno_t)uVar1;
}


==================================================================

### EXPORT FUNC 1800452f0 (55 bytes) name=FUN_1800452f0

void FUN_1800452f0(void)

{
  undefined *puVar1;
  undefined **ppuVar2;
  longlong lVar3;
  
  lVar3 = 10;
  ppuVar2 = &PTR_LAB_18006dc40;
  do {
    puVar1 = (undefined *)FUN_180037b60((INT_PTR)*ppuVar2);
    lVar3 = lVar3 + -1;
    *ppuVar2 = puVar1;
    ppuVar2 = ppuVar2 + 1;
  } while (lVar3 != 0);
  return;
}


==================================================================

### EXPORT FUNC 180045330 (150 bytes) name=FUN_180045330

undefined8 FUN_180045330(void)

{
  longlong lVar1;
  ulonglong uVar2;
  undefined8 *puVar3;
  int iVar4;
  int iVar5;
  
  iVar4 = 0;
  iVar5 = 0;
  puVar3 = &DAT_18006dd00;
  do {
    if (*(int *)(puVar3 + 1) == 1) {
      lVar1 = (longlong)iVar4;
      iVar4 = iVar4 + 1;
      *puVar3 = &DAT_180073330 + lVar1 * 0x28;
      uVar2 = FUN_180045910(&DAT_180073330 + lVar1 * 0x28,4000);
      if ((int)uVar2 == 0) {
        (&DAT_18006dd00)[(longlong)iVar5 * 2] = 0;
        return 0;
      }
    }
    puVar3 = puVar3 + 2;
    iVar5 = iVar5 + 1;
  } while ((longlong)puVar3 < 0x18006df40);
  return 1;
}


==================================================================

### EXPORT FUNC 1800453d0 (152 bytes) name=FUN_1800453d0

void FUN_1800453d0(void)

{
  LPCRITICAL_SECTION lpCriticalSection;
  undefined8 *puVar1;
  undefined8 *puVar2;
  
  puVar1 = &DAT_18006dd00;
  puVar2 = &DAT_18006dd00;
  do {
    lpCriticalSection = (LPCRITICAL_SECTION)*puVar2;
    if ((lpCriticalSection != (LPCRITICAL_SECTION)0x0) && (*(int *)(puVar2 + 1) != 1)) {
      DeleteCriticalSection(lpCriticalSection);
      FUN_180034a70(lpCriticalSection);
      *puVar2 = 0;
    }
    puVar2 = puVar2 + 2;
  } while ((longlong)puVar2 < 0x18006df40);
  do {
    if (((LPCRITICAL_SECTION)*puVar1 != (LPCRITICAL_SECTION)0x0) && (*(int *)(puVar1 + 1) == 1)) {
      DeleteCriticalSection((LPCRITICAL_SECTION)*puVar1);
    }
    puVar1 = puVar1 + 2;
  } while ((longlong)puVar1 < 0x18006df40);
  return;
}


==================================================================

### EXPORT FUNC 180045470 (24 bytes) name=FUN_180045470

void FUN_180045470(int param_1)

{
                    /* WARNING: Could not recover jumptable at 0x000180045481. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LeaveCriticalSection((LPCRITICAL_SECTION)(&DAT_18006dd00)[(longlong)param_1 * 2]);
  return;
}


==================================================================

### EXPORT FUNC 180045490 (229 bytes) name=FUN_180045490

undefined8 FUN_180045490(int param_1)

{
  LPVOID pvVar1;
  DWORD *pDVar2;
  ulonglong uVar3;
  longlong lVar4;
  undefined8 uVar5;
  
  lVar4 = (longlong)param_1;
  uVar5 = 1;
  if (DAT_180072ed8 == 0) {
    FUN_180042070();
    FUN_180041e30(0x1e);
    FUN_1800366d0(0xff);
  }
  if ((&DAT_18006dd00)[lVar4 * 2] == 0) {
    pvVar1 = (LPVOID)FUN_180040de0(0x28);
    if (pvVar1 == (LPVOID)0x0) {
      pDVar2 = FUN_180035b40();
      *pDVar2 = 0xc;
      uVar5 = 0;
    }
    else {
      _lock(10);
      if ((&DAT_18006dd00)[lVar4 * 2] == 0) {
        uVar3 = FUN_180045910(pvVar1,4000);
        if ((int)uVar3 == 0) {
          FUN_180034a70(pvVar1);
          pDVar2 = FUN_180035b40();
          *pDVar2 = 0xc;
          uVar5 = 0;
        }
        else {
          (&DAT_18006dd00)[lVar4 * 2] = pvVar1;
        }
      }
      else {
        FUN_180034a70(pvVar1);
      }
      LeaveCriticalSection(DAT_18006dda0);
    }
  }
  else {
    uVar5 = 1;
  }
  return uVar5;
}


==================================================================

### EXPORT FUNC 180045580 (28 bytes) name=FUN_180045580

void FUN_180045580(void)

{
  LeaveCriticalSection(DAT_18006dda0);
  return;
}


==================================================================

### EXPORT FUNC 1800455a0 (68 bytes) name=_lock

/* Library Function - Single Match
    _lock
   
   Library: Visual Studio 2008 Release */

void __cdecl _lock(int _File)

{
  undefined8 uVar1;
  
  if ((&DAT_18006dd00)[(longlong)_File * 2] == 0) {
    uVar1 = FUN_180045490(_File);
    if ((int)uVar1 == 0) {
      _amsg_exit(0x11);
    }
  }
                    /* WARNING: Could not recover jumptable at 0x0001800455dd. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  EnterCriticalSection((LPCRITICAL_SECTION)(&DAT_18006dd00)[(longlong)_File * 2]);
  return;
}


==================================================================

### EXPORT FUNC 1800455f0 (29 bytes) name=_initp_misc_winsig

/* Library Function - Single Match
    _initp_misc_winsig
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void _initp_misc_winsig(undefined8 param_1)

{
  DAT_180073560 = param_1;
  DAT_180073568 = param_1;
  DAT_180073570 = param_1;
  DAT_180073578 = param_1;
  return;
}


==================================================================

### EXPORT FUNC 180045610 (12 bytes) name=FUN_180045610

void FUN_180045610(void)

{
  FUN_180037d20(DAT_180073570);
  return;
}


==================================================================

### EXPORT FUNC 180045620 (603 bytes) name=FUN_180045620

undefined8 FUN_180045620(DWORD param_1)

{
  DWORD *pDVar1;
  bool bVar2;
  code *pcVar3;
  DWORD *pDVar4;
  undefined8 uVar5;
  INT_PTR IVar6;
  DWORD *pDVar7;
  int iVar8;
  DWORD local_res8;
  undefined8 local_30;
  
  bVar2 = false;
  local_res8 = 0;
  switch(param_1) {
  case 2:
    pDVar7 = (DWORD *)&DAT_180073560;
    IVar6 = DAT_180073560;
    break;
  default:
    pDVar7 = FUN_180035b40();
    *pDVar7 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffff;
  case 4:
  case 8:
  case 0xb:
    pDVar4 = FUN_180038010();
    if (pDVar4 == (DWORD *)0x0) {
      return 0xffffffff;
    }
    pDVar1 = *(DWORD **)(pDVar4 + 0x28);
    pDVar7 = pDVar1;
    do {
      if (pDVar7[1] == param_1) break;
      pDVar7 = pDVar7 + 4;
    } while (pDVar7 < pDVar1 + (longlong)DAT_18006da6c * 4);
    if ((pDVar1 + (longlong)DAT_18006da6c * 4 <= pDVar7) || (pDVar7[1] != param_1)) {
      pDVar7 = (DWORD *)0x0;
    }
    pDVar7 = pDVar7 + 2;
    pcVar3 = *(code **)pDVar7;
    goto LAB_180045739;
  case 6:
  case 0x16:
    pDVar7 = (DWORD *)&DAT_180073570;
    IVar6 = DAT_180073570;
    break;
  case 0xf:
    pDVar7 = (DWORD *)&DAT_180073578;
    IVar6 = DAT_180073578;
    break;
  case 0x15:
    pDVar7 = (DWORD *)&DAT_180073568;
    IVar6 = DAT_180073568;
  }
  local_res8 = 1;
  bVar2 = true;
  pcVar3 = (code *)FUN_180037d20(IVar6);
  pDVar4 = (DWORD *)0x0;
LAB_180045739:
  if (pcVar3 == (code *)0x1) {
    return 0;
  }
  if (pcVar3 != (code *)0x0) {
    if (bVar2) {
      _lock(0);
    }
    if (((param_1 == 8) || (param_1 == 0xb)) || (param_1 == 4)) {
      local_30 = *(undefined8 *)(pDVar4 + 0x2a);
      pDVar4[0x2a] = 0;
      pDVar4[0x2b] = 0;
      if (param_1 == 8) {
        local_res8 = pDVar4[0x2c];
        pDVar4[0x2c] = 0x8c;
      }
    }
    iVar8 = DAT_18006da60;
    if (param_1 == 8) {
      for (; iVar8 < DAT_18006da60 + DAT_18006da64; iVar8 = iVar8 + 1) {
        *(undefined8 *)(*(longlong *)(pDVar4 + 0x28) + 8 + (longlong)iVar8 * 0x10) = 0;
      }
    }
    else {
      IVar6 = FUN_180037c30();
      *(INT_PTR *)pDVar7 = IVar6;
    }
    if (bVar2) {
      FUN_180045470(0);
    }
    if (param_1 == 8) {
      (*pcVar3)(8,pDVar4[0x2c]);
    }
    else {
      (*pcVar3)(param_1);
      if ((param_1 != 0xb) && (param_1 != 4)) {
        return 0;
      }
    }
    *(undefined8 *)(pDVar4 + 0x2a) = local_30;
    if (param_1 == 8) {
      pDVar4[0x2c] = local_res8;
    }
    return 0;
  }
  FUN_180036a20(3);
  pcVar3 = (code *)swi(3);
  uVar5 = (*pcVar3)();
  return uVar5;
}


==================================================================

### EXPORT FUNC 1800458b0 (28 bytes) name=FUN_1800458b0

void FUN_1800458b0(undefined8 param_1,longlong param_2)

{
  if (*(int *)(param_2 + 0x70) != 0) {
    FUN_180045470(0);
  }
  return;
}


==================================================================

### EXPORT FUNC 1800458d0 (8 bytes) name=FUN_1800458d0

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

void FUN_1800458d0(undefined8 param_1)

{
  _DAT_180073588 = param_1;
  return;
}


==================================================================

### EXPORT FUNC 1800458e0 (8 bytes) name=FUN_1800458e0

void FUN_1800458e0(undefined8 param_1)

{
  DAT_180073590 = param_1;
  return;
}


==================================================================

### EXPORT FUNC 1800458f0 (20 bytes) name=FUN_1800458f0

undefined8 FUN_1800458f0(LPCRITICAL_SECTION param_1)

{
  InitializeCriticalSection(param_1);
  return 1;
}


==================================================================

### EXPORT FUNC 180045910 (214 bytes) name=FUN_180045910

ulonglong FUN_180045910(undefined8 param_1,ulonglong param_2)

{
  code *pcVar1;
  undefined8 uVar2;
  HMODULE hModule;
  ulonglong uVar3;
  int local_res18 [2];
  
  local_res18[0] = 0;
  pcVar1 = (code *)FUN_180037d20(DAT_180073590);
  if (pcVar1 == (FARPROC)0x0) {
    uVar2 = _get_osplatform(local_res18);
    if ((int)uVar2 != 0) {
                    /* WARNING: Subroutine does not return */
      FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
    }
    if (local_res18[0] == 1) {
      pcVar1 = FUN_1800458f0;
    }
    else {
      hModule = GetModuleHandleA("kernel32.dll");
      if (hModule == (HMODULE)0x0) {
        pcVar1 = FUN_1800458f0;
      }
      else {
        pcVar1 = GetProcAddress(hModule,"InitializeCriticalSectionAndSpinCount");
        if (pcVar1 == (FARPROC)0x0) {
          pcVar1 = FUN_1800458f0;
        }
      }
    }
    DAT_180073590 = FUN_180037b60((INT_PTR)pcVar1);
  }
  uVar3 = (*pcVar1)(param_1,param_2 & 0xffffffff);
  return uVar3 & 0xffffffff;
}


==================================================================

### EXPORT FUNC 180045a00 (34 bytes) name=FUN_180045a00

bool FUN_180045a00(undefined8 *param_1)

{
  return *(int *)*param_1 == -0x3fffffe9;
}


==================================================================

### EXPORT FUNC 180045a30 (11 bytes) name=FUN_180045a30

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

void FUN_180045a30(void)

{
  _DAT_1800db4c4 = 0;
  return;
}


==================================================================

### EXPORT FUNC 180045a40 (1340 bytes) name=FUN_180045a40

/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

LPSTR FUN_180045a40(longlong *param_1,LCID param_2,DWORD param_3,LPCSTR param_4,uint param_5,
                   LPSTR param_6,int param_7,UINT param_8,int param_9)

{
  bool bVar1;
  undefined1 auVar2 [16];
  undefined1 auVar3 [16];
  longlong lVar4;
  LPSTR pCVar5;
  LCID Locale;
  undefined1 *puVar6;
  int iVar7;
  DWORD DVar8;
  uint uVar9;
  int iVar10;
  UINT UVar11;
  ulonglong uVar12;
  undefined4 *puVar13;
  LPSTR pCVar14;
  undefined8 uVar15;
  LPCSTR pCVar16;
  LPSTR pCVar17;
  uint uVar18;
  char *pcVar19;
  size_t sVar20;
  undefined1 *puVar21;
  undefined1 *puVar22;
  undefined1 *puVar23;
  undefined1 *puVar24;
  LPCWSTR lpSrcStr;
  LPCWSTR lpWideCharStr;
  ulonglong *puVar25;
  ulonglong uVar26;
  LPSTR pCVar27;
  UINT UVar28;
  undefined1 auStackY_88 [32];
  DWORD local_48 [2];
  LPCSTR local_40;
  LCID local_38;
  ulonglong local_30;
  
  puVar21 = auStackY_88;
  puVar22 = auStackY_88;
  puVar24 = auStackY_88;
  puVar23 = auStackY_88;
  local_30 = DAT_18006cea0 ^ (ulonglong)local_48;
  pCVar27 = (LPSTR)0x0;
  local_48[0] = param_3;
  local_40 = param_4;
  local_38 = param_2;
  if (DAT_180073604 == 0) {
    iVar7 = LCMapStringW(0,0x100,L"",1,(LPWSTR)0x0,0);
    if (iVar7 == 0) {
      DVar8 = GetLastError();
      if (DVar8 == 0x78) {
        DAT_180073604 = 2;
      }
    }
    else {
      DAT_180073604 = 1;
    }
  }
  pcVar19 = param_4;
  uVar9 = param_5;
  if (0 < (int)param_5) {
    do {
      uVar9 = uVar9 - 1;
      if (*pcVar19 == '\0') goto LAB_180045b02;
      pcVar19 = pcVar19 + 1;
    } while (uVar9 != 0);
    uVar9 = 0xffffffff;
LAB_180045b02:
    uVar9 = param_5 - uVar9;
    uVar18 = uVar9 - 1;
    bVar1 = (int)uVar18 < (int)param_5;
    param_5 = uVar18;
    if (bVar1) {
      param_5 = uVar9;
    }
  }
  if ((DAT_180073604 == 2) || (DAT_180073604 == 0)) {
    if (param_2 == 0) {
      param_2 = *(LCID *)(*param_1 + 0x14);
      local_38 = param_2;
    }
    UVar28 = param_8;
    if (param_8 == 0) {
      UVar28 = *(UINT *)(*param_1 + 4);
    }
    uVar15 = FUN_180048c40(param_2);
    UVar11 = (UINT)uVar15;
    puVar6 = auStackY_88;
    if (UVar11 != 0xffffffff) {
      if (UVar11 == UVar28) {
        uVar9 = LCMapStringA(param_2,local_48[0],param_4,param_5,param_6,param_7);
        pCVar14 = (LPSTR)(ulonglong)uVar9;
        goto LAB_180045f56;
      }
      pCVar16 = FUN_180048cb0(UVar28,UVar11,param_4,&param_5,(LPVOID)0x0,0);
      puVar6 = auStackY_88;
      if (pCVar16 != (LPCSTR)0x0) {
        iVar7 = LCMapStringA(param_2,local_48[0],pCVar16,param_5,(LPSTR)0x0,0);
        pCVar5 = param_6;
        uVar26 = (ulonglong)iVar7;
        local_40 = (LPCSTR)CONCAT44(local_40._4_4_,iVar7);
        pCVar14 = pCVar27;
        puVar23 = auStackY_88;
        pCVar17 = pCVar27;
        if ((0 < iVar7) && (puVar23 = auStackY_88, uVar26 < 0xffffffffffffffe1)) {
          sVar20 = uVar26 + 0x10;
          pCVar17 = (LPSTR)0x0;
          if (sVar20 < 0x401) {
            uVar26 = uVar26 + 0x1f;
            if (uVar26 <= sVar20) {
              uVar26 = 0xffffffffffffff0;
            }
            lVar4 = -(uVar26 & 0xfffffffffffffff0);
            puVar23 = auStackY_88 + lVar4;
            puVar24 = auStackY_88 + lVar4;
            puVar13 = (undefined4 *)((longlong)local_48 + lVar4);
            if (puVar13 == (undefined4 *)0x0) goto LAB_180045f13;
            *puVar13 = 0xcccc;
LAB_180045e91:
            puVar25 = (ulonglong *)(puVar13 + 4);
            puVar23 = puVar24;
          }
          else {
            puVar13 = FUN_1800349a0(sVar20);
            puVar25 = (ulonglong *)0x0;
            puVar23 = auStackY_88;
            if (puVar13 != (undefined4 *)0x0) {
              *puVar13 = 0xdddd;
              goto LAB_180045e91;
            }
          }
          pCVar14 = (LPSTR)0x0;
          if (puVar25 != (ulonglong *)0x0) {
            uVar26 = (ulonglong)(int)(uint)local_40;
            *(undefined8 *)(puVar23 + -8) = 0x180045eab;
            FUN_1800357d0(puVar25,0,uVar26);
            Locale = local_38;
            DVar8 = local_48[0];
            *(uint *)(puVar23 + 0x28) = (uint)local_40;
            *(ulonglong **)(puVar23 + 0x20) = puVar25;
            *(undefined8 *)(puVar23 + -8) = 0x180045ecc;
            iVar7 = LCMapStringA(Locale,DVar8,pCVar16,param_5,*(LPSTR *)(puVar23 + 0x20),
                                 *(int *)(puVar23 + 0x28));
            local_40 = (LPCSTR)CONCAT44(local_40._4_4_,iVar7);
            pCVar17 = pCVar27;
            if (iVar7 != 0) {
              *(int *)(puVar23 + 0x28) = param_7;
              *(LPSTR *)(puVar23 + 0x20) = pCVar5;
              *(undefined8 *)(puVar23 + -8) = 0x180045ef3;
              pCVar17 = FUN_180048cb0(UVar11,UVar28,(LPCSTR)puVar25,(uint *)&local_40,
                                      *(LPVOID *)(puVar23 + 0x20),*(undefined4 *)(puVar23 + 0x28));
              uVar9 = (uint)local_40;
              if (pCVar17 == (LPSTR)0x0) {
                uVar9 = 0;
              }
              pCVar27 = (LPSTR)(ulonglong)uVar9;
            }
            pCVar14 = pCVar27;
            if ((int)puVar25[-2] == 0xdddd) {
              *(undefined8 *)(puVar23 + -8) = 0x180045f13;
              FUN_180034a70(puVar25 + -2);
            }
          }
        }
LAB_180045f13:
        *(undefined8 *)(puVar23 + -8) = 0x180045f1b;
        FUN_180034a70(pCVar16);
        if ((pCVar17 != (LPSTR)0x0) && (pCVar5 != pCVar17)) {
          *(undefined8 *)(puVar23 + -8) = 0x180045f2d;
          FUN_180034a70(pCVar17);
        }
        goto LAB_180045f56;
      }
    }
  }
  else {
    puVar6 = auStackY_88;
    if (DAT_180073604 == 1) {
      UVar28 = param_8;
      if (param_8 == 0) {
        UVar28 = *(UINT *)(*param_1 + 4);
      }
      DVar8 = 1;
      if (param_9 != 0) {
        DVar8 = 9;
      }
      iVar7 = MultiByteToWideChar(UVar28,DVar8,param_4,param_5,(LPWSTR)0x0,0);
      puVar6 = auStackY_88;
      if (((iVar7 != 0) && (puVar6 = auStackY_88, 0 < iVar7)) &&
         (auVar2._8_8_ = 0, auVar2._0_8_ = (longlong)iVar7, puVar6 = auStackY_88,
         1 < SUB168((ZEXT816(0) << 0x40 | ZEXT816(0xffffffffffffffe0)) / auVar2,0))) {
        lVar4 = (longlong)iVar7 * 2;
        uVar26 = lVar4 + 0x10;
        if (uVar26 < 0x401) {
          uVar12 = lVar4 + 0x1f;
          if (uVar12 <= uVar26) {
            uVar12 = 0xffffffffffffff0;
          }
          lVar4 = -(uVar12 & 0xfffffffffffffff0);
          puVar21 = auStackY_88 + lVar4;
          puVar13 = (undefined4 *)((longlong)local_48 + lVar4);
          puVar6 = auStackY_88 + lVar4;
          if (puVar13 == (undefined4 *)0x0) goto LAB_180045dcd;
          *puVar13 = 0xcccc;
LAB_180045bfa:
          lpSrcStr = (LPCWSTR)(puVar13 + 4);
          puVar22 = puVar21;
        }
        else {
          puVar13 = FUN_1800349a0(uVar26);
          lpSrcStr = (LPCWSTR)0x0;
          if (puVar13 != (undefined4 *)0x0) {
            *puVar13 = 0xdddd;
            goto LAB_180045bfa;
          }
        }
        pCVar16 = local_40;
        puVar6 = puVar22;
        if (lpSrcStr != (LPCWSTR)0x0) {
          *(int *)(puVar22 + 0x28) = iVar7;
          *(LPCWSTR *)(puVar22 + 0x20) = lpSrcStr;
          *(undefined8 *)(puVar22 + -8) = 0x180045c27;
          iVar10 = MultiByteToWideChar(UVar28,1,pCVar16,param_5,*(LPWSTR *)(puVar22 + 0x20),
                                       *(int *)(puVar22 + 0x28));
          DVar8 = local_48[0];
          puVar23 = puVar22;
          if (iVar10 != 0) {
            *(undefined4 *)(puVar22 + 0x28) = 0;
            *(undefined8 *)(puVar22 + 0x20) = 0;
            *(undefined8 *)(puVar22 + -8) = 0x180045c4a;
            iVar10 = LCMapStringW(param_2,DVar8,lpSrcStr,iVar7,*(LPWSTR *)(puVar22 + 0x20),
                                  *(int *)(puVar22 + 0x28));
            DVar8 = local_48[0];
            pCVar27 = (LPSTR)(longlong)iVar10;
            if (iVar10 != 0) {
              if ((local_48[0] >> 10 & 1) == 0) {
                if ((0 < iVar10) &&
                   (auVar3._8_8_ = 0, auVar3._0_8_ = pCVar27,
                   1 < SUB168((ZEXT816(0) << 0x40 | ZEXT816(0xffffffffffffffe0)) / auVar3,0))) {
                  uVar26 = (longlong)pCVar27 * 2 + 0x10;
                  if (uVar26 < 0x401) {
                    uVar12 = (longlong)pCVar27 * 2 + 0x1f;
                    if (uVar12 <= uVar26) {
                      uVar12 = 0xffffffffffffff0;
                    }
                    *(undefined8 *)(puVar22 + -8) = 0x180045cd9;
                    lVar4 = -(uVar12 & 0xfffffffffffffff0);
                    puVar23 = puVar22 + lVar4;
                    puVar13 = (undefined4 *)(puVar22 + lVar4 + 0x40);
                    if (puVar13 == (undefined4 *)0x0) goto LAB_180045d80;
                    *puVar13 = 0xcccc;
                    puVar22 = puVar22 + lVar4;
LAB_180045d05:
                    lpWideCharStr = (LPCWSTR)(puVar13 + 4);
                    puVar23 = puVar22;
                  }
                  else {
                    *(undefined8 *)(puVar22 + -8) = 0x180045cf7;
                    puVar13 = FUN_1800349a0(uVar26);
                    lpWideCharStr = (LPCWSTR)0x0;
                    if (puVar13 != (undefined4 *)0x0) {
                      *puVar13 = 0xdddd;
                      goto LAB_180045d05;
                    }
                  }
                  DVar8 = local_48[0];
                  if (lpWideCharStr != (LPCWSTR)0x0) {
                    *(int *)(puVar23 + 0x28) = iVar10;
                    *(LPCWSTR *)(puVar23 + 0x20) = lpWideCharStr;
                    *(undefined8 *)(puVar23 + -8) = 0x180045d2a;
                    iVar7 = LCMapStringW(param_2,DVar8,lpSrcStr,iVar7,*(LPWSTR *)(puVar23 + 0x20),
                                         *(int *)(puVar23 + 0x28));
                    if (iVar7 != 0) {
                      *(undefined8 *)(puVar23 + 0x38) = 0;
                      *(undefined8 *)(puVar23 + 0x30) = 0;
                      if (param_7 == 0) {
                        *(undefined4 *)(puVar23 + 0x28) = 0;
                        *(undefined8 *)(puVar23 + 0x20) = 0;
                      }
                      else {
                        *(int *)(puVar23 + 0x28) = param_7;
                        *(LPSTR *)(puVar23 + 0x20) = param_6;
                      }
                      *(undefined8 *)(puVar23 + -8) = 0x180045d6b;
                      uVar9 = WideCharToMultiByte(UVar28,0,lpWideCharStr,iVar10,
                                                  *(LPSTR *)(puVar23 + 0x20),
                                                  *(int *)(puVar23 + 0x28),
                                                  *(LPCSTR *)(puVar23 + 0x30),
                                                  *(LPBOOL *)(puVar23 + 0x38));
                      pCVar27 = (LPSTR)(ulonglong)uVar9;
                    }
                    if (*(int *)(lpWideCharStr + -8) == 0xdddd) {
                      *(undefined8 *)(puVar23 + -8) = 0x180045d80;
                      FUN_180034a70(lpWideCharStr + -8);
                    }
                  }
                }
              }
              else if ((param_7 != 0) && (iVar10 <= param_7)) {
                *(int *)(puVar22 + 0x28) = param_7;
                *(LPSTR *)(puVar22 + 0x20) = param_6;
                *(undefined8 *)(puVar22 + -8) = 0x180045c93;
                LCMapStringW(param_2,DVar8,lpSrcStr,iVar7,*(LPWSTR *)(puVar22 + 0x20),
                             *(int *)(puVar22 + 0x28));
              }
            }
          }
LAB_180045d80:
          if (*(int *)(lpSrcStr + -8) == 0xdddd) {
            *(undefined8 *)(puVar23 + -8) = 0x180045d92;
            FUN_180034a70(lpSrcStr + -8);
          }
          pCVar14 = (LPSTR)((ulonglong)pCVar27 & 0xffffffff);
          goto LAB_180045f56;
        }
      }
    }
  }
LAB_180045dcd:
  puVar23 = puVar6;
  pCVar14 = (LPSTR)0x0;
LAB_180045f56:
  *(undefined8 *)(puVar23 + -8) = 0x180045f62;
  return pCVar14;
}


==================================================================

### EXPORT FUNC 180045f80 (345 bytes) name=FUN_180045f80

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

void FUN_180045f80(longlong *param_1,LCID param_2,DWORD param_3,LPCSTR param_4,uint param_5,
                  LPSTR param_6,int param_7,UINT param_8,int param_9)

{
  pthreadmbcinfo ptVar1;
  bool bVar2;
  DWORD *pDVar3;
  pthreadlocinfo local_38;
  pthreadmbcinfo local_30;
  DWORD *local_28;
  undefined1 local_20;
  
  bVar2 = false;
  local_20 = 0;
  if (param_1 == (longlong *)0x0) {
    pDVar3 = FUN_1800380a0();
    local_38 = *(pthreadlocinfo *)(pDVar3 + 0x30);
    ptVar1 = *(pthreadmbcinfo *)(pDVar3 + 0x2e);
    local_30 = ptVar1;
    local_28 = pDVar3;
    if ((local_38 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & pDVar3[0x32]) == 0)) {
      local_38 = __updatetlocinfo();
    }
    if ((ptVar1 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & pDVar3[0x32]) == 0)) {
      local_30 = __updatetmbcinfo();
    }
    if ((pDVar3[0x32] & 2) == 0) {
      pDVar3[0x32] = pDVar3[0x32] | 2;
      bVar2 = true;
      local_20 = 1;
    }
  }
  else {
    local_38 = (pthreadlocinfo)*param_1;
    local_30 = (pthreadmbcinfo)param_1[1];
    bVar2 = false;
    pDVar3 = local_28;
  }
  FUN_180045a40((longlong *)&local_38,param_2,param_3,param_4,param_5,param_6,param_7,param_8,
                param_9);
  if (bVar2) {
    pDVar3[0x32] = pDVar3[0x32] & 0xfffffffd;
  }
  return;
}


==================================================================

### EXPORT FUNC 1800460e0 (600 bytes) name=FUN_1800460e0

/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

BOOL FUN_1800460e0(longlong *param_1,DWORD param_2,LPCSTR param_3,uint param_4,LPWORD param_5,
                  UINT param_6,LCID param_7,int param_8)

{
  ulonglong uVar1;
  longlong lVar2;
  BOOL BVar3;
  DWORD DVar4;
  UINT UVar5;
  int iVar6;
  undefined8 uVar7;
  ulonglong uVar8;
  undefined4 *puVar9;
  LPCSTR pCVar10;
  LPCWSTR lpSrcStr;
  undefined1 *puVar11;
  undefined1 *puVar12;
  undefined1 *puVar13;
  ulonglong uVar14;
  uint local_res20 [2];
  undefined1 auStackY_68 [32];
  WORD local_38 [4];
  ulonglong local_30;
  
  puVar12 = auStackY_68;
  puVar13 = auStackY_68;
  puVar11 = auStackY_68;
  local_30 = DAT_18006cea0 ^ (ulonglong)local_38;
  local_res20[0] = param_4;
  if (DAT_180073608 == 0) {
    BVar3 = GetStringTypeW(1,L"",1,local_38);
    if (BVar3 == 0) {
      DVar4 = GetLastError();
      if (DVar4 != 0x78) goto LAB_18004619e;
      DAT_180073608 = 2;
      goto LAB_180046163;
    }
    DAT_180073608 = 1;
LAB_1800461ac:
    BVar3 = 0;
    if (param_6 == 0) {
      param_6 = *(UINT *)(*param_1 + 4);
    }
    DVar4 = 1;
    if (param_8 != 0) {
      DVar4 = 9;
    }
    iVar6 = MultiByteToWideChar(param_6,DVar4,param_3,local_res20[0],(LPWSTR)0x0,0);
    uVar14 = (ulonglong)iVar6;
    puVar11 = auStackY_68;
    if (((iVar6 != 0) && (puVar11 = auStackY_68, 0 < iVar6)) &&
       (puVar11 = auStackY_68, uVar14 < 0x7ffffffffffffff1)) {
      uVar1 = uVar14 * 2 + 0x10;
      if (uVar1 < 0x401) {
        uVar8 = uVar14 * 2 + 0x1f;
        if (uVar8 <= uVar1) {
          uVar8 = 0xffffffffffffff0;
        }
        lVar2 = -(uVar8 & 0xfffffffffffffff0);
        puVar12 = auStackY_68 + lVar2;
        puVar9 = (undefined4 *)((longlong)local_38 + lVar2);
        puVar11 = auStackY_68 + lVar2;
        if (puVar9 == (undefined4 *)0x0) goto LAB_180046191;
        *puVar9 = 0xcccc;
LAB_180046252:
        lpSrcStr = (LPCWSTR)(puVar9 + 4);
        puVar13 = puVar12;
      }
      else {
        puVar9 = FUN_1800349a0(uVar1);
        lpSrcStr = (LPCWSTR)0x0;
        if (puVar9 != (undefined4 *)0x0) {
          *puVar9 = 0xdddd;
          goto LAB_180046252;
        }
      }
      puVar11 = puVar13;
      if (lpSrcStr != (LPCWSTR)0x0) {
        *(undefined8 *)(puVar13 + -8) = 0x18004626d;
        FUN_1800357d0((ulonglong *)lpSrcStr,0,uVar14 * 2);
        *(int *)(puVar13 + 0x28) = iVar6;
        *(LPCWSTR *)(puVar13 + 0x20) = lpSrcStr;
        *(undefined8 *)(puVar13 + -8) = 0x18004628b;
        iVar6 = MultiByteToWideChar(param_6,1,param_3,local_res20[0],*(LPWSTR *)(puVar13 + 0x20),
                                    *(int *)(puVar13 + 0x28));
        if (iVar6 != 0) {
          *(undefined8 *)(puVar13 + -8) = 0x1800462a2;
          BVar3 = GetStringTypeW(param_2,lpSrcStr,iVar6,param_5);
        }
        if (*(int *)(lpSrcStr + -8) == 0xdddd) {
          *(undefined8 *)(puVar13 + -8) = 0x1800462b6;
          FUN_180034a70(lpSrcStr + -8);
        }
        goto LAB_180046312;
      }
    }
  }
  else {
LAB_18004619e:
    if ((DAT_180073608 != 2) && (DAT_180073608 != 0)) {
      if (DAT_180073608 == 1) goto LAB_1800461ac;
      goto LAB_180046191;
    }
LAB_180046163:
    pCVar10 = (LPCSTR)0x0;
    if (param_7 == 0) {
      param_7 = *(LCID *)(*param_1 + 0x14);
    }
    if (param_6 == 0) {
      param_6 = *(UINT *)(*param_1 + 4);
    }
    uVar7 = FUN_180048c40(param_7);
    UVar5 = (UINT)uVar7;
    puVar11 = auStackY_68;
    if ((UVar5 != 0xffffffff) &&
       ((UVar5 == param_6 ||
        (pCVar10 = FUN_180048cb0(param_6,UVar5,param_3,local_res20,(LPVOID)0x0,0),
        puVar11 = auStackY_68, param_3 = pCVar10, pCVar10 != (LPCSTR)0x0)))) {
      BVar3 = GetStringTypeA(param_7,param_2,param_3,local_res20[0],param_5);
      puVar13 = auStackY_68;
      if (pCVar10 != (LPCSTR)0x0) {
        FUN_180034a70(pCVar10);
        puVar13 = auStackY_68;
      }
      goto LAB_180046312;
    }
  }
LAB_180046191:
  BVar3 = 0;
  puVar13 = puVar11;
LAB_180046312:
  *(undefined8 *)(puVar13 + -8) = 0x18004631e;
  return BVar3;
}


==================================================================

### EXPORT FUNC 180046340 (328 bytes) name=FUN_180046340

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

void FUN_180046340(longlong *param_1,DWORD param_2,LPCSTR param_3,uint param_4,LPWORD param_5,
                  UINT param_6,LCID param_7,int param_8)

{
  pthreadmbcinfo ptVar1;
  bool bVar2;
  DWORD *pDVar3;
  pthreadlocinfo local_38;
  pthreadmbcinfo local_30;
  DWORD *local_28;
  undefined1 local_20;
  
  bVar2 = false;
  local_20 = 0;
  if (param_1 == (longlong *)0x0) {
    pDVar3 = FUN_1800380a0();
    local_38 = *(pthreadlocinfo *)(pDVar3 + 0x30);
    ptVar1 = *(pthreadmbcinfo *)(pDVar3 + 0x2e);
    local_30 = ptVar1;
    local_28 = pDVar3;
    if ((local_38 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & pDVar3[0x32]) == 0)) {
      local_38 = __updatetlocinfo();
    }
    if ((ptVar1 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & pDVar3[0x32]) == 0)) {
      local_30 = __updatetmbcinfo();
    }
    if ((pDVar3[0x32] & 2) == 0) {
      pDVar3[0x32] = pDVar3[0x32] | 2;
      bVar2 = true;
      local_20 = 1;
    }
  }
  else {
    local_38 = (pthreadlocinfo)*param_1;
    local_30 = (pthreadmbcinfo)param_1[1];
    bVar2 = false;
    pDVar3 = local_28;
  }
  FUN_1800460e0((longlong *)&local_38,param_2,param_3,param_4,param_5,param_6,param_7,param_8);
  if (bVar2) {
    pDVar3[0x32] = pDVar3[0x32] & 0xfffffffd;
  }
  return;
}


==================================================================

### EXPORT FUNC 180046490 (492 bytes) name=__free_lc_time

/* Library Function - Single Match
    __free_lc_time
   
   Library: Visual Studio 2005 Release */

void __free_lc_time(undefined8 *param_1)

{
  if (param_1 != (undefined8 *)0x0) {
    FUN_180034a70((LPVOID)param_1[1]);
    FUN_180034a70((LPVOID)param_1[2]);
    FUN_180034a70((LPVOID)param_1[3]);
    FUN_180034a70((LPVOID)param_1[4]);
    FUN_180034a70((LPVOID)param_1[5]);
    FUN_180034a70((LPVOID)param_1[6]);
    FUN_180034a70((LPVOID)*param_1);
    FUN_180034a70((LPVOID)param_1[8]);
    FUN_180034a70((LPVOID)param_1[9]);
    FUN_180034a70((LPVOID)param_1[10]);
    FUN_180034a70((LPVOID)param_1[0xb]);
    FUN_180034a70((LPVOID)param_1[0xc]);
    FUN_180034a70((LPVOID)param_1[0xd]);
    FUN_180034a70((LPVOID)param_1[7]);
    FUN_180034a70((LPVOID)param_1[0xe]);
    FUN_180034a70((LPVOID)param_1[0xf]);
    FUN_180034a70((LPVOID)param_1[0x10]);
    FUN_180034a70((LPVOID)param_1[0x11]);
    FUN_180034a70((LPVOID)param_1[0x12]);
    FUN_180034a70((LPVOID)param_1[0x13]);
    FUN_180034a70((LPVOID)param_1[0x14]);
    FUN_180034a70((LPVOID)param_1[0x15]);
    FUN_180034a70((LPVOID)param_1[0x16]);
    FUN_180034a70((LPVOID)param_1[0x17]);
    FUN_180034a70((LPVOID)param_1[0x18]);
    FUN_180034a70((LPVOID)param_1[0x19]);
    FUN_180034a70((LPVOID)param_1[0x1a]);
    FUN_180034a70((LPVOID)param_1[0x1b]);
    FUN_180034a70((LPVOID)param_1[0x1c]);
    FUN_180034a70((LPVOID)param_1[0x1d]);
    FUN_180034a70((LPVOID)param_1[0x1e]);
    FUN_180034a70((LPVOID)param_1[0x1f]);
    FUN_180034a70((LPVOID)param_1[0x20]);
    FUN_180034a70((LPVOID)param_1[0x21]);
    FUN_180034a70((LPVOID)param_1[0x22]);
    FUN_180034a70((LPVOID)param_1[0x23]);
    FUN_180034a70((LPVOID)param_1[0x24]);
    FUN_180034a70((LPVOID)param_1[0x25]);
    FUN_180034a70((LPVOID)param_1[0x26]);
    FUN_180034a70((LPVOID)param_1[0x27]);
    FUN_180034a70((LPVOID)param_1[0x28]);
    FUN_180034a70((LPVOID)param_1[0x29]);
    FUN_180034a70((LPVOID)param_1[0x2a]);
  }
  return;
}


==================================================================

### EXPORT FUNC 180046680 (74 bytes) name=__free_lconv_num

/* Library Function - Single Match
    __free_lconv_num
   
   Library: Visual Studio 2005 Release */

void __free_lconv_num(undefined8 *param_1)

{
  if (param_1 != (undefined8 *)0x0) {
    if ((undefined *)*param_1 != PTR_DAT_18006df60) {
      FUN_180034a70((undefined *)*param_1);
    }
    if ((undefined *)param_1[1] != PTR_DAT_18006df68) {
      FUN_180034a70((undefined *)param_1[1]);
    }
    if ((undefined *)param_1[2] != PTR_DAT_18006df70) {
      FUN_180034a70((undefined *)param_1[2]);
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 1800466d0 (151 bytes) name=__free_lconv_mon

/* Library Function - Single Match
    __free_lconv_mon
   
   Library: Visual Studio 2005 Release */

void __free_lconv_mon(longlong param_1)

{
  if (param_1 != 0) {
    if (*(undefined **)(param_1 + 0x18) != PTR_DAT_18006df78) {
      FUN_180034a70(*(undefined **)(param_1 + 0x18));
    }
    if (*(undefined **)(param_1 + 0x20) != PTR_DAT_18006df80) {
      FUN_180034a70(*(undefined **)(param_1 + 0x20));
    }
    if (*(undefined **)(param_1 + 0x28) != PTR_DAT_18006df88) {
      FUN_180034a70(*(undefined **)(param_1 + 0x28));
    }
    if (*(undefined **)(param_1 + 0x30) != PTR_DAT_18006df90) {
      FUN_180034a70(*(undefined **)(param_1 + 0x30));
    }
    if (*(undefined **)(param_1 + 0x38) != PTR_DAT_18006df98) {
      FUN_180034a70(*(undefined **)(param_1 + 0x38));
    }
    if (*(undefined **)(param_1 + 0x40) != PTR_DAT_18006dfa0) {
      FUN_180034a70(*(undefined **)(param_1 + 0x40));
    }
    if (*(undefined **)(param_1 + 0x48) != PTR_DAT_18006dfa8) {
      FUN_180034a70(*(undefined **)(param_1 + 0x48));
    }
  }
  return;
}


==================================================================

### EXPORT FUNC 180046770 (60 bytes) name=___lc_codepage_func

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Single Match
    ___lc_codepage_func
   
   Library: Visual Studio 2005 Release */

UINT __cdecl ___lc_codepage_func(void)

{
  DWORD *pDVar1;
  pthreadlocinfo ptVar2;
  
  pDVar1 = FUN_1800380a0();
  if ((*(undefined **)(pDVar1 + 0x30) != PTR_DAT_18006d6f0) &&
     ((_DAT_18006d578 & pDVar1[0x32]) == 0)) {
    ptVar2 = __updatetlocinfo();
    return ptVar2->lc_codepage;
  }
  return *(UINT *)(*(undefined **)(pDVar1 + 0x30) + 4);
}


==================================================================

### EXPORT FUNC 1800467b0 (180 bytes) name=strcat_s

/* Library Function - Single Match
    strcat_s
   
   Library: Visual Studio 2005 Release */

errno_t __cdecl strcat_s(char *_Dst,rsize_t _SizeInBytes,char *_Src)

{
  char cVar1;
  DWORD *pDVar2;
  char *pcVar3;
  
  if ((_Dst != (char *)0x0) && (_SizeInBytes != 0)) {
    pcVar3 = _Dst;
    if (_Src == (char *)0x0) {
      *_Dst = '\0';
    }
    else {
      do {
        if (*pcVar3 == '\0') break;
        pcVar3 = pcVar3 + 1;
        _SizeInBytes = _SizeInBytes - 1;
      } while (_SizeInBytes != 0);
      if (_SizeInBytes != 0) {
        do {
          cVar1 = *_Src;
          _Src = _Src + 1;
          *pcVar3 = cVar1;
          if (cVar1 == '\0') break;
          _SizeInBytes = _SizeInBytes - 1;
          pcVar3 = pcVar3 + 1;
        } while (_SizeInBytes != 0);
        if (_SizeInBytes == 0) {
          *_Dst = '\0';
          pDVar2 = FUN_180035b40();
          *pDVar2 = 0x22;
          FUN_1800384e0(0,0,0,0,0);
          return 0x22;
        }
        return 0;
      }
      *_Dst = '\0';
    }
  }
  pDVar2 = FUN_180035b40();
  *pDVar2 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0x16;
}


==================================================================

### EXPORT FUNC 180046870 (271 bytes) name=strncpy_s

/* Library Function - Single Match
    strncpy_s
   
   Library: Visual Studio 2005 Release */

errno_t __cdecl strncpy_s(char *_Dst,rsize_t _SizeInBytes,char *_Src,rsize_t _MaxCount)

{
  char cVar1;
  DWORD *pDVar2;
  rsize_t rVar3;
  char *pcVar4;
  char *pcVar5;
  
  if (_MaxCount == 0) {
    if (_Dst == (char *)0x0) {
      if (_SizeInBytes == 0) {
        return 0;
      }
      goto LAB_1800468b1;
    }
  }
  else if (_Dst == (char *)0x0) goto LAB_1800468b1;
  if (_SizeInBytes != 0) {
    if (_MaxCount == 0) {
      *_Dst = '\0';
      return 0;
    }
    if (_Src != (char *)0x0) {
      rVar3 = _SizeInBytes;
      pcVar4 = _Dst;
      if (_MaxCount == 0xffffffffffffffff) {
        do {
          cVar1 = *_Src;
          _Src = _Src + 1;
          *pcVar4 = cVar1;
          if (cVar1 == '\0') break;
          rVar3 = rVar3 - 1;
          pcVar4 = pcVar4 + 1;
        } while (rVar3 != 0);
      }
      else {
        do {
          cVar1 = *_Src;
          pcVar5 = pcVar4 + 1;
          _Src = _Src + 1;
          *pcVar4 = cVar1;
          if ((cVar1 == '\0') || (rVar3 = rVar3 - 1, rVar3 == 0)) break;
          _MaxCount = _MaxCount - 1;
          pcVar4 = pcVar5;
        } while (_MaxCount != 0);
        if (_MaxCount == 0) {
          *pcVar5 = '\0';
        }
      }
      if (rVar3 != 0) {
        return 0;
      }
      if (_MaxCount == 0xffffffffffffffff) {
        _Dst[_SizeInBytes - 1] = '\0';
        return 0x50;
      }
      *_Dst = '\0';
      pDVar2 = FUN_180035b40();
      *pDVar2 = 0x22;
      FUN_1800384e0(0,0,0,0,0);
      return 0x22;
    }
    *_Dst = '\0';
  }
LAB_1800468b1:
  pDVar2 = FUN_180035b40();
  *pDVar2 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0x16;
}


==================================================================

### EXPORT FUNC 180046a60 (174 bytes) name=FUN_180046a60

undefined8 FUN_180046a60(uint param_1,undefined8 param_2,DWORD param_3)

{
  byte *pbVar1;
  DWORD DVar2;
  HANDLE hFile;
  DWORD *pDVar3;
  undefined8 local_res10;
  
  local_res10 = param_2;
  hFile = (HANDLE)FUN_18004a440(param_1);
  if (hFile == (HANDLE)0xffffffffffffffff) {
    pDVar3 = FUN_180035b40();
    *pDVar3 = 9;
    return 0xffffffffffffffff;
  }
  DVar2 = SetFilePointer(hFile,(LONG)local_res10,(PLONG)((longlong)&local_res10 + 4),param_3);
  local_res10 = CONCAT44(local_res10._4_4_,DVar2);
  if (DVar2 == 0xffffffff) {
    DVar2 = GetLastError();
    if (DVar2 != 0) {
      _dosmaperr(DVar2);
      return 0xffffffffffffffff;
    }
  }
  pbVar1 = (byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 +
                   (ulonglong)(param_1 & 0x1f) * 0x50);
  *pbVar1 = *pbVar1 & 0xfd;
  return local_res10;
}


==================================================================

### EXPORT FUNC 180046b10 (305 bytes) name=FUN_180046b10

undefined8 FUN_180046b10(uint param_1,undefined8 param_2,DWORD param_3)

{
  DWORD *pDVar1;
  undefined8 uVar2;
  
  if (param_1 == 0xfffffffe) {
    pDVar1 = FUN_180035b70();
    *pDVar1 = 0;
    pDVar1 = FUN_180035b40();
    *pDVar1 = 9;
    uVar2 = 0xffffffffffffffff;
  }
  else if (((int)param_1 < 0) || (DAT_1800db4c8 <= param_1)) {
    pDVar1 = FUN_180035b70();
    *pDVar1 = 0;
    pDVar1 = FUN_180035b40();
    *pDVar1 = 9;
    FUN_1800384e0(0,0,0,0,0);
    uVar2 = 0xffffffffffffffff;
  }
  else if ((*(byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 +
                     (ulonglong)(param_1 & 0x1f) * 0x50) & 1) == 0) {
    pDVar1 = FUN_180035b70();
    *pDVar1 = 0;
    pDVar1 = FUN_180035b40();
    *pDVar1 = 9;
    FUN_1800384e0(0,0,0,0,0);
    uVar2 = 0xffffffffffffffff;
  }
  else {
    FUN_18004a4e0(param_1);
    if ((*(byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 +
                  (ulonglong)(param_1 & 0x1f) * 0x50) & 1) == 0) {
      pDVar1 = FUN_180035b40();
      *pDVar1 = 9;
      pDVar1 = FUN_180035b70();
      *pDVar1 = 0;
      uVar2 = 0xffffffffffffffff;
    }
    else {
      uVar2 = FUN_180046a60(param_1,param_2,param_3);
    }
    FUN_18004a5b0(param_1);
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 180046c50 (23 bytes) name=FUN_180046c50

void FUN_180046c50(undefined8 param_1,longlong param_2)

{
  FUN_18004a5b0(*(uint *)(param_2 + 0x60));
  return;
}


==================================================================

### EXPORT FUNC 180046c70 (1912 bytes) name=FUN_180046c70

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

int FUN_180046c70(uint param_1,WCHAR *param_2,uint param_3)

{
  char cVar1;
  byte bVar2;
  ushort uVar3;
  WCHAR WVar4;
  BOOL BVar5;
  DWORD DVar6;
  int iVar7;
  DWORD nNumberOfBytesToWrite;
  DWORD DVar8;
  DWORD *pDVar9;
  undefined7 extraout_var;
  undefined6 extraout_var_00;
  ulonglong uVar10;
  int iVar11;
  WCHAR *pWVar12;
  WCHAR *pWVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  char cVar17;
  int iVar18;
  UINT CodePage;
  longlong lVar19;
  uint uVar20;
  longlong lVar21;
  undefined1 auStackY_628 [32];
  WCHAR local_5e8 [2];
  uint local_5e4;
  UINT local_5e0;
  DWORD local_5dc;
  longlong local_5d8;
  longlong local_5d0;
  CHAR local_5c8 [16];
  WCHAR local_5b8 [520];
  WCHAR local_1a8 [176];
  ulonglong local_48;
  
  local_48 = DAT_18006cea0 ^ (ulonglong)auStackY_628;
  uVar15 = 0;
  uVar14 = 0;
  if (param_3 == 0) {
    return 0;
  }
  if (param_2 == (WCHAR *)0x0) {
    pDVar9 = FUN_180035b70();
    *pDVar9 = 0;
    pDVar9 = FUN_180035b40();
    *pDVar9 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return -1;
  }
  lVar21 = (longlong)(int)param_1 >> 5;
  lVar19 = (ulonglong)(param_1 & 0x1f) * 0x50;
  cVar17 = (char)(*(char *)(lVar19 + 0x38 + (&DAT_1800db4e0)[lVar21]) * '\x02') >> 1;
  local_5d8 = lVar21;
  local_5d0 = lVar19;
  if (((cVar17 == '\x02') || (cVar17 == '\x01')) && ((~param_3 & 1) == 0)) {
    pDVar9 = FUN_180035b70();
    *pDVar9 = 0;
    pDVar9 = FUN_180035b40();
    *pDVar9 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return -1;
  }
  if ((*(byte *)(lVar19 + 8 + (&DAT_1800db4e0)[lVar21]) & 0x20) != 0) {
    FUN_180046a60(param_1,0,2);
  }
  bVar2 = FUN_1800475a0(param_1);
  iVar18 = (int)param_2;
  uVar20 = uVar15;
  if (((int)CONCAT71(extraout_var,bVar2) == 0) ||
     ((*(byte *)(lVar19 + 8 + (&DAT_1800db4e0)[lVar21]) & 0x80) == 0)) {
LAB_180047049:
    if ((*(byte *)(lVar19 + 8 + (&DAT_1800db4e0)[lVar21]) & 0x80) != 0) {
      DVar6 = 0;
      DVar8 = 0;
      if (cVar17 == '\0') {
        pWVar12 = param_2;
        if (param_3 != 0) {
          do {
            pWVar13 = local_5b8;
            uVar10 = 0;
            do {
              if (param_3 <= (uint)((int)pWVar12 - iVar18)) break;
              WVar4 = *pWVar12;
              pWVar12 = (WCHAR *)((longlong)pWVar12 + 1);
              if ((char)WVar4 == '\n') {
                *(char *)pWVar13 = '\r';
                pWVar13 = (WCHAR *)((longlong)pWVar13 + 1);
                uVar15 = uVar15 + 1;
                uVar10 = uVar10 + 1;
              }
              uVar10 = uVar10 + 1;
              *(char *)pWVar13 = (char)WVar4;
              pWVar13 = (WCHAR *)((longlong)pWVar13 + 1);
            } while (uVar10 < 0x400);
            BVar5 = WriteFile(*(HANDLE *)(lVar19 + (&DAT_1800db4e0)[local_5d8]),local_5b8,
                              (int)pWVar13 - (int)local_5b8,&local_5e4,(LPOVERLAPPED)0x0);
            uVar16 = uVar15;
            if (BVar5 == 0) {
              DVar8 = GetLastError();
              goto LAB_180047337;
            }
            uVar20 = uVar20 + local_5e4;
            if (((longlong)(int)local_5e4 < (longlong)pWVar13 - (longlong)local_5b8) ||
               (param_3 <= (uint)((int)pWVar12 - iVar18))) goto LAB_180047337;
          } while( true );
        }
      }
      else if (cVar17 == '\x02') {
        pWVar12 = param_2;
        if (param_3 != 0) {
          do {
            pWVar13 = local_5b8;
            uVar10 = 0;
            do {
              if (param_3 <= (uint)((int)pWVar12 - iVar18)) break;
              WVar4 = *pWVar12;
              pWVar12 = pWVar12 + 1;
              if (WVar4 == L'\n') {
                *pWVar13 = L'\r';
                pWVar13 = pWVar13 + 1;
                uVar15 = uVar15 + 2;
                uVar10 = uVar10 + 2;
              }
              uVar10 = uVar10 + 2;
              *pWVar13 = WVar4;
              pWVar13 = pWVar13 + 1;
            } while (uVar10 < 0x3ff);
            BVar5 = WriteFile(*(HANDLE *)(lVar19 + (&DAT_1800db4e0)[local_5d8]),local_5b8,
                              (int)pWVar13 - (int)local_5b8,&local_5e4,(LPOVERLAPPED)0x0);
            uVar16 = uVar15;
            if (BVar5 == 0) {
              DVar8 = GetLastError();
              goto LAB_180047337;
            }
            uVar20 = uVar20 + local_5e4;
            if (((longlong)(int)local_5e4 < (longlong)pWVar13 - (longlong)local_5b8) ||
               (param_3 <= (uint)((int)pWVar12 - iVar18))) goto LAB_180047337;
          } while( true );
        }
      }
      else {
        pWVar12 = param_2;
        if (param_3 != 0) {
          do {
            pWVar13 = local_1a8;
            uVar10 = 0;
            do {
              if (param_3 <= (uint)((int)pWVar12 - iVar18)) break;
              WVar4 = *pWVar12;
              pWVar12 = pWVar12 + 1;
              if (WVar4 == L'\n') {
                *pWVar13 = L'\r';
                pWVar13 = pWVar13 + 1;
                uVar10 = uVar10 + 2;
              }
              uVar10 = uVar10 + 2;
              *pWVar13 = WVar4;
              pWVar13 = pWVar13 + 1;
            } while (uVar10 < 0x152);
            iVar7 = WideCharToMultiByte(0xfde9,0,local_1a8,((int)pWVar13 - (int)local_1a8) / 2,
                                        (LPSTR)local_5b8,0x2ab,(LPCSTR)0x0,(LPBOOL)0x0);
            if (iVar7 == 0) {
              DVar8 = GetLastError();
              uVar16 = uVar14;
              goto LAB_180047337;
            }
            iVar11 = 0;
            do {
              BVar5 = WriteFile(*(HANDLE *)(local_5d0 + (&DAT_1800db4e0)[local_5d8]),
                                (LPCVOID)((longlong)local_5b8 + (longlong)iVar11),iVar7 - iVar11,
                                &local_5e4,(LPOVERLAPPED)0x0);
              if (BVar5 == 0) {
                DVar6 = GetLastError();
                uVar16 = uVar14;
                DVar8 = DVar6;
                if (iVar11 < iVar7) goto LAB_180047337;
                break;
              }
              iVar11 = iVar11 + local_5e4;
            } while (iVar11 < iVar7);
            uVar20 = (int)pWVar12 - iVar18;
            uVar16 = uVar15;
            DVar8 = DVar6;
            if (param_3 <= uVar20) goto LAB_180047337;
          } while( true );
        }
      }
      goto LAB_180047383;
    }
    BVar5 = WriteFile(*(HANDLE *)(lVar19 + (&DAT_1800db4e0)[lVar21]),param_2,param_3,&local_5e4,
                      (LPOVERLAPPED)0x0);
    if (BVar5 != 0) {
      uVar20 = local_5e4;
      uVar16 = uVar14;
      DVar8 = 0;
      goto LAB_180047337;
    }
    DVar6 = GetLastError();
  }
  else {
    pDVar9 = FUN_1800380a0();
    iVar7 = *(int *)(*(longlong *)(pDVar9 + 0x30) + 0x14);
    BVar5 = GetConsoleMode(*(HANDLE *)(lVar19 + (&DAT_1800db4e0)[lVar21]),&local_5e0);
    if ((BVar5 == 0) || ((iVar7 == 0 && (cVar17 == '\0')))) goto LAB_180047049;
    DVar6 = GetConsoleCP();
    local_5dc = 0;
    pWVar12 = param_2;
    local_5e0 = DVar6;
    CodePage = DVar6;
    if (param_3 != 0) {
      do {
        uVar16 = uVar15;
        if (cVar17 == '\0') {
          cVar1 = (char)*pWVar12;
          DVar6 = (DWORD)(cVar1 == '\n');
          uVar3 = FUN_180047ca0((int)cVar1);
          if ((int)CONCAT62(extraout_var_00,uVar3) == 0) {
            iVar7 = FUN_180048250(local_5e8,(byte *)pWVar12,1);
            DVar8 = local_5e0;
            if (iVar7 == -1) break;
          }
          else {
            DVar8 = local_5e0;
            if (((longlong)(((ulonglong)param_3 - (longlong)pWVar12) + (longlong)param_2) < 2) ||
               (iVar7 = FUN_180048250(local_5e8,(byte *)pWVar12,2), DVar8 = local_5e0, iVar7 == -1))
            break;
            pWVar12 = (WCHAR *)((longlong)pWVar12 + 1);
          }
          pWVar12 = (WCHAR *)((longlong)pWVar12 + 1);
          nNumberOfBytesToWrite =
               WideCharToMultiByte(CodePage,0,local_5e8,1,local_5c8,5,(LPCSTR)0x0,(LPBOOL)0x0);
          DVar8 = local_5e0;
          if (nNumberOfBytesToWrite == 0) break;
          BVar5 = WriteFile(*(HANDLE *)(local_5d0 + (&DAT_1800db4e0)[local_5d8]),local_5c8,
                            nNumberOfBytesToWrite,&local_5dc,(LPOVERLAPPED)0x0);
          if (BVar5 == 0) {
            DVar8 = GetLastError();
            break;
          }
          uVar20 = uVar20 + local_5dc;
          DVar8 = local_5e0;
          if ((int)local_5dc < (int)nNumberOfBytesToWrite) break;
          CodePage = local_5e0;
          uVar14 = uVar20;
          if (cVar1 == '\n') {
            local_5c8[0] = '\r';
            BVar5 = WriteFile(*(HANDLE *)(local_5d0 + (&DAT_1800db4e0)[local_5d8]),local_5c8,1,
                              &local_5dc,(LPOVERLAPPED)0x0);
            if (BVar5 == 0) {
              DVar8 = GetLastError();
              break;
            }
            DVar8 = local_5e0;
            if ((int)local_5dc < 1) break;
            uVar15 = uVar15 + 1;
            CodePage = local_5e0;
            uVar14 = uVar20 + 1;
          }
        }
        else {
          if ((cVar17 == '\x01') || (cVar17 == '\x02')) {
            local_5e8[0] = *pWVar12;
            DVar6 = (DWORD)(local_5e8[0] == L'\n');
            pWVar12 = pWVar12 + 1;
          }
          if ((cVar17 == '\x01') || (uVar14 = uVar20, cVar17 == '\x02')) {
            WVar4 = FUN_18004a5e0(local_5e8[0]);
            if (WVar4 != local_5e8[0]) {
              DVar8 = GetLastError();
              break;
            }
            uVar14 = uVar20 + 1;
            if (DVar6 != 0) {
              local_5e8[0] = L'\r';
              WVar4 = FUN_18004a5e0(L'\r');
              if (WVar4 != local_5e8[0]) {
                DVar8 = GetLastError();
                uVar20 = uVar20 + 1;
                break;
              }
              uVar15 = uVar15 + 1;
              uVar14 = uVar20 + 2;
            }
          }
        }
        uVar20 = uVar14;
        uVar16 = uVar15;
        DVar8 = local_5e0;
      } while ((uint)((int)pWVar12 - iVar18) < param_3);
LAB_180047337:
      DVar6 = DVar8;
      if (uVar20 != 0) {
        return uVar20 - uVar16;
      }
    }
  }
  lVar19 = local_5d0;
  if (DVar6 != 0) {
    if (DVar6 == 5) {
      pDVar9 = FUN_180035b40();
      *pDVar9 = 9;
      pDVar9 = FUN_180035b70();
      *pDVar9 = 5;
      return -1;
    }
    _dosmaperr(DVar6);
    return -1;
  }
LAB_180047383:
  if (((*(byte *)(lVar19 + 8 + (&DAT_1800db4e0)[local_5d8]) & 0x40) != 0) &&
     ((char)*param_2 == '\x1a')) {
    return 0;
  }
  pDVar9 = FUN_180035b40();
  *pDVar9 = 0x1c;
  pDVar9 = FUN_180035b70();
  *pDVar9 = 0;
  return -1;
}


==================================================================

### EXPORT FUNC 1800473f0 (299 bytes) name=FUN_1800473f0

int FUN_1800473f0(uint param_1,WCHAR *param_2,uint param_3)

{
  int iVar1;
  DWORD *pDVar2;
  
  if (param_1 == 0xfffffffe) {
    pDVar2 = FUN_180035b70();
    *pDVar2 = 0;
    pDVar2 = FUN_180035b40();
    *pDVar2 = 9;
    iVar1 = -1;
  }
  else if (((int)param_1 < 0) || (DAT_1800db4c8 <= param_1)) {
    pDVar2 = FUN_180035b70();
    *pDVar2 = 0;
    pDVar2 = FUN_180035b40();
    *pDVar2 = 9;
    FUN_1800384e0(0,0,0,0,0);
    iVar1 = -1;
  }
  else if ((*(byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 +
                     (ulonglong)(param_1 & 0x1f) * 0x50) & 1) == 0) {
    pDVar2 = FUN_180035b70();
    *pDVar2 = 0;
    pDVar2 = FUN_180035b40();
    *pDVar2 = 9;
    FUN_1800384e0(0,0,0,0,0);
    iVar1 = -1;
  }
  else {
    FUN_18004a4e0(param_1);
    if ((*(byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 +
                  (ulonglong)(param_1 & 0x1f) * 0x50) & 1) == 0) {
      pDVar2 = FUN_180035b40();
      *pDVar2 = 9;
      pDVar2 = FUN_180035b70();
      *pDVar2 = 0;
      iVar1 = -1;
    }
    else {
      iVar1 = FUN_180046c70(param_1,param_2,param_3);
    }
    FUN_18004a5b0(param_1);
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 180047520 (23 bytes) name=FUN_180047520

void FUN_180047520(undefined8 param_1,longlong param_2)

{
  FUN_18004a5b0(*(uint *)(param_2 + 0x60));
  return;
}


==================================================================

### EXPORT FUNC 180047540 (87 bytes) name=_getbuf

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Single Match
    _getbuf
   
   Library: Visual Studio 2005 Release */

void __cdecl _getbuf(FILE *_File)

{
  char *pcVar1;
  
  _DAT_180073610 = _DAT_180073610 + 1;
  pcVar1 = (char *)FUN_180040de0(0x1000);
  _File->_base = pcVar1;
  if (pcVar1 == (char *)0x0) {
    _File->_flag = _File->_flag | 4;
    _File->_bufsiz = 2;
    _File->_base = (char *)&_File->_charbuf;
  }
  else {
    _File->_flag = _File->_flag | 8;
    _File->_bufsiz = 0x1000;
  }
  _File->_cnt = 0;
  _File->_ptr = _File->_base;
  return;
}


==================================================================

### EXPORT FUNC 1800475a0 (124 bytes) name=FUN_1800475a0

byte FUN_1800475a0(uint param_1)

{
  DWORD *pDVar1;
  
  if (param_1 == 0xfffffffe) {
    pDVar1 = FUN_180035b40();
    *pDVar1 = 9;
    return 0;
  }
  if ((-1 < (int)param_1) && (param_1 < DAT_1800db4c8)) {
    return *(byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 +
                    (ulonglong)(param_1 & 0x1f) * 0x50) & 0x40;
  }
  pDVar1 = FUN_180035b40();
  *pDVar1 = 9;
  FUN_1800384e0(0,0,0,0,0);
  return 0;
}


==================================================================

### EXPORT FUNC 180047620 (8 bytes) name=FUN_180047620

undefined ** FUN_180047620(void)

{
  return &PTR_DAT_18006dfd0;
}


==================================================================

### EXPORT FUNC 180047630 (250 bytes) name=FUN_180047630

undefined8 FUN_180047630(void)

{
  longlong lVar1;
  undefined **ppuVar2;
  longlong lVar3;
  undefined4 *puVar4;
  longlong lVar5;
  
  lVar3 = 0x14;
  if (DAT_1800db4c0 == 0) {
    DAT_1800db4c0 = 0x200;
  }
  else if (DAT_1800db4c0 < 0x14) {
    DAT_1800db4c0 = 0x14;
  }
  DAT_1800da4a8 = FUN_180040e50((longlong)DAT_1800db4c0,8);
  if (DAT_1800da4a8 == (LPVOID)0x0) {
    DAT_1800db4c0 = 0x14;
    DAT_1800da4a8 = FUN_180040e50(0x14,8);
    if (DAT_1800da4a8 == (LPVOID)0x0) {
      return 0x1a;
    }
  }
  lVar5 = 0;
  ppuVar2 = &PTR_DAT_18006dfd0;
  lVar1 = lVar5;
  do {
    *(undefined ***)(lVar1 + (longlong)DAT_1800da4a8) = ppuVar2;
    lVar1 = lVar1 + 8;
    ppuVar2 = ppuVar2 + 6;
    lVar3 = lVar3 + -1;
  } while (lVar3 != 0);
  puVar4 = &DAT_18006dfec;
  lVar3 = 3;
  do {
    lVar1 = *(longlong *)((&DAT_1800db4e0)[lVar5 >> 5] + (ulonglong)((uint)lVar5 & 0x1f) * 0x50);
    if (((lVar1 == -1) || (lVar1 == -2)) || (lVar1 == 0)) {
      *puVar4 = 0xfffffffe;
    }
    lVar5 = lVar5 + 1;
    puVar4 = puVar4 + 0xc;
    lVar3 = lVar3 + -1;
  } while (lVar3 != 0);
  return 0;
}


==================================================================

### EXPORT FUNC 180047730 (39 bytes) name=FUN_180047730

void FUN_180047730(void)

{
  FUN_18004aa90();
  if (DAT_1800727f4 != '\0') {
    FUN_18004a710();
  }
  FUN_180034a70(DAT_1800da4a8);
  return;
}


==================================================================

### EXPORT FUNC 180047760 (101 bytes) name=FUN_180047760

void FUN_180047760(ulonglong param_1)

{
  if ((0x18006dfcf < param_1) && (param_1 < 0x18006e361)) {
    _lock((int)((longlong)(param_1 - 0x18006dfd0) / 0x30) + 0x10);
    *(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) | 0x8000;
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x0001800477be. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  EnterCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 1800477d0 (51 bytes) name=FUN_1800477d0

void FUN_1800477d0(int param_1,longlong param_2)

{
  if (param_1 < 0x14) {
    _lock(param_1 + 0x10);
    *(uint *)(param_2 + 0x18) = *(uint *)(param_2 + 0x18) | 0x8000;
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x0001800477fc. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  EnterCriticalSection((LPCRITICAL_SECTION)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 180047810 (78 bytes) name=FUN_180047810

void FUN_180047810(ulonglong param_1)

{
  if ((0x18006dfcf < param_1) && (param_1 < 0x18006e361)) {
    *(uint *)(param_1 + 0x18) = *(uint *)(param_1 + 0x18) & 0xffff7fff;
    FUN_180045470((int)((longlong)(param_1 - 0x18006dfd0) / 0x30) + 0x10);
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x000180047857. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_1 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 180047860 (31 bytes) name=FUN_180047860

void FUN_180047860(int param_1,longlong param_2)

{
  if (param_1 < 0x14) {
    *(uint *)(param_2 + 0x18) = *(uint *)(param_2 + 0x18) & 0xffff7fff;
    FUN_180045470(param_1 + 0x10);
    return;
  }
                    /* WARNING: Could not recover jumptable at 0x000180047878. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LeaveCriticalSection((LPCRITICAL_SECTION)(param_2 + 0x30));
  return;
}


==================================================================

### EXPORT FUNC 180047880 (60 bytes) name=FUN_180047880

undefined4 FUN_180047880(longlong param_1)

{
  DWORD *pDVar1;
  
  if (param_1 == 0) {
    pDVar1 = FUN_180035b40();
    *pDVar1 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffff;
  }
  return *(undefined4 *)(param_1 + 0x1c);
}


==================================================================

### EXPORT FUNC 1800478c0 (24 bytes) name=FUN_1800478c0

bool FUN_1800478c0(void)

{
  return DAT_180073618 == (DAT_18006cea0 | 1);
}


==================================================================

### EXPORT FUNC 1800478e0 (687 bytes) name=FUN_1800478e0

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

DWORD FUN_1800478e0(int *param_1,ulonglong *param_2,ulonglong param_3,WCHAR param_4,
                   undefined8 *param_5)

{
  undefined *puVar1;
  bool bVar2;
  int iVar3;
  DWORD DVar4;
  DWORD *pDVar5;
  pthreadlocinfo ptVar6;
  BOOL local_res10 [2];
  WCHAR local_res20 [4];
  DWORD *local_38;
  
  if ((param_2 == (ulonglong *)0x0) && (param_3 != 0)) {
    if (param_1 != (int *)0x0) {
      *param_1 = 0;
    }
    return 0;
  }
  if (param_1 != (int *)0x0) {
    *param_1 = -1;
  }
  local_res20[0] = param_4;
  if (0x7fffffff < param_3) {
    pDVar5 = FUN_180035b40();
    *pDVar5 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0x16;
  }
  bVar2 = false;
  if (param_5 == (undefined8 *)0x0) {
    local_38 = FUN_1800380a0();
    ptVar6 = *(pthreadlocinfo *)(local_38 + 0x30);
    puVar1 = *(undefined **)(local_38 + 0x2e);
    if ((ptVar6 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_38[0x32]) == 0)) {
      ptVar6 = __updatetlocinfo();
    }
    if ((puVar1 != PTR_DAT_18006d470) && ((_DAT_18006d578 & local_38[0x32]) == 0)) {
      __updatetmbcinfo();
    }
    if ((local_38[0x32] & 2) == 0) {
      bVar2 = true;
      local_38[0x32] = local_38[0x32] | 2;
    }
  }
  else {
    ptVar6 = (pthreadlocinfo)*param_5;
    bVar2 = false;
  }
  if (*(int *)((longlong)&ptVar6->lc_category[0].locale + 4) == 0) {
    if ((ushort)local_res20[0] < 0x100) {
      if (param_2 != (ulonglong *)0x0) {
        if (param_3 == 0) {
          pDVar5 = FUN_180035b40();
          *pDVar5 = 0x22;
          goto LAB_180047b2a;
        }
        *(char *)param_2 = (char)local_res20[0];
      }
      if (param_1 != (int *)0x0) {
        *param_1 = 1;
      }
LAB_180047aed:
      if (bVar2) {
        local_38[0x32] = local_38[0x32] & 0xfffffffd;
      }
      return 0;
    }
    if ((param_2 != (ulonglong *)0x0) && (param_3 != 0)) {
      FUN_1800357d0(param_2,0,param_3);
    }
    pDVar5 = FUN_180035b40();
    *pDVar5 = 0x2a;
    pDVar5 = FUN_180035b40();
    DVar4 = *pDVar5;
  }
  else {
    local_res10[0] = 0;
    iVar3 = WideCharToMultiByte(ptVar6->lc_codepage,0,local_res20,1,(LPSTR)param_2,(int)param_3,
                                (LPCSTR)0x0,local_res10);
    if (iVar3 == 0) {
      DVar4 = GetLastError();
      if (DVar4 == 0x7a) {
        if ((param_2 != (ulonglong *)0x0) && (param_3 != 0)) {
          FUN_1800357d0(param_2,0,param_3);
        }
        pDVar5 = FUN_180035b40();
        *pDVar5 = 0x22;
LAB_180047b2a:
        FUN_1800384e0(0,0,0,0,0);
        if (bVar2) {
          local_38[0x32] = local_38[0x32] & 0xfffffffd;
        }
        return 0x22;
      }
    }
    else if (local_res10[0] == 0) {
      if (param_1 != (int *)0x0) {
        *param_1 = iVar3;
      }
      goto LAB_180047aed;
    }
    pDVar5 = FUN_180035b40();
    *pDVar5 = 0x2a;
    pDVar5 = FUN_180035b40();
    DVar4 = *pDVar5;
  }
  if (bVar2) {
    local_38[0x32] = local_38[0x32] & 0xfffffffd;
  }
  return DVar4;
}


==================================================================

### EXPORT FUNC 180047b90 (23 bytes) name=FUN_180047b90

void FUN_180047b90(int *param_1,ulonglong *param_2,ulonglong param_3,WCHAR param_4)

{
  FUN_1800478e0(param_1,param_2,param_3,param_4,(undefined8 *)0x0);
  return;
}


==================================================================

### EXPORT FUNC 180047bb0 (240 bytes) name=FUN_180047bb0

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

ushort FUN_180047bb0(uint param_1,undefined8 *param_2)

{
  wchar_t wVar1;
  undefined *puVar2;
  bool bVar3;
  pthreadlocinfo ptVar4;
  DWORD *local_18;
  
  bVar3 = false;
  if (param_2 == (undefined8 *)0x0) {
    local_18 = FUN_1800380a0();
    ptVar4 = *(pthreadlocinfo *)(local_18 + 0x30);
    puVar2 = *(undefined **)(local_18 + 0x2e);
    if ((ptVar4 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
      ptVar4 = __updatetlocinfo();
    }
    if ((puVar2 != PTR_DAT_18006d470) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
      __updatetmbcinfo();
    }
    if ((local_18[0x32] & 2) == 0) {
      bVar3 = true;
      local_18[0x32] = local_18[0x32] | 2;
    }
  }
  else {
    ptVar4 = (pthreadlocinfo)*param_2;
    bVar3 = false;
  }
  wVar1 = ptVar4->locale_name[3][param_1 & 0xff];
  if (bVar3) {
    local_18[0x32] = local_18[0x32] & 0xfffffffd;
  }
  return wVar1 & 0x8000;
}


==================================================================

### EXPORT FUNC 180047ca0 (195 bytes) name=FUN_180047ca0

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

ushort FUN_180047ca0(uint param_1)

{
  wchar_t wVar1;
  undefined *puVar2;
  DWORD *pDVar3;
  pthreadlocinfo ptVar4;
  bool bVar5;
  
  pDVar3 = FUN_1800380a0();
  ptVar4 = *(pthreadlocinfo *)(pDVar3 + 0x30);
  puVar2 = *(undefined **)(pDVar3 + 0x2e);
  if ((ptVar4 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & pDVar3[0x32]) == 0)) {
    ptVar4 = __updatetlocinfo();
  }
  if ((puVar2 != PTR_DAT_18006d470) && ((_DAT_18006d578 & pDVar3[0x32]) == 0)) {
    __updatetmbcinfo();
  }
  bVar5 = (pDVar3[0x32] & 2) == 0;
  if (bVar5) {
    pDVar3[0x32] = pDVar3[0x32] | 2;
  }
  wVar1 = ptVar4->locale_name[3][param_1 & 0xff];
  if (bVar5) {
    pDVar3[0x32] = pDVar3[0x32] & 0xfffffffd;
  }
  return wVar1 & 0x8000;
}


==================================================================

### EXPORT FUNC 180047d70 (631 bytes) name=FUN_180047d70

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

WCHAR FUN_180047d70(WCHAR param_1,FILE *param_2)

{
  int *piVar1;
  WCHAR WVar2;
  int iVar3;
  uint uVar4;
  undefined *puVar5;
  ulonglong uVar6;
  ulonglong *puVar7;
  undefined *puVar8;
  undefined1 auStack_58 [32];
  undefined4 local_38;
  ulonglong local_34;
  ulonglong local_28;
  
  local_28 = DAT_18006cea0 ^ (ulonglong)auStack_58;
  local_38 = CONCAT22(local_38._2_2_,param_1);
  if ((param_2->_flag & 0x40) == 0) {
    iVar3 = FUN_180047880((longlong)param_2);
    puVar8 = &DAT_18006d970;
    if ((iVar3 == -1) || (iVar3 = FUN_180047880((longlong)param_2), iVar3 == -2)) {
      puVar5 = &DAT_18006d970;
    }
    else {
      iVar3 = FUN_180047880((longlong)param_2);
      uVar4 = FUN_180047880((longlong)param_2);
      puVar5 = (undefined *)
               ((ulonglong)(uVar4 & 0x1f) * 0x50 + (&DAT_1800db4e0)[(longlong)iVar3 >> 5]);
    }
    if ((puVar5[0x38] & 0x7f) == 2) {
      piVar1 = &param_2->_cnt;
      *piVar1 = *piVar1 + -2;
      if (-1 < *piVar1) {
        *(WCHAR *)param_2->_ptr = param_1;
        param_2->_ptr = param_2->_ptr + 2;
        return param_1;
      }
      goto LAB_180047fbc;
    }
    iVar3 = FUN_180047880((longlong)param_2);
    if ((iVar3 == -1) || (iVar3 = FUN_180047880((longlong)param_2), iVar3 == -2)) {
      puVar5 = &DAT_18006d970;
    }
    else {
      iVar3 = FUN_180047880((longlong)param_2);
      uVar4 = FUN_180047880((longlong)param_2);
      puVar5 = (undefined *)
               ((ulonglong)(uVar4 & 0x1f) * 0x50 + (&DAT_1800db4e0)[(longlong)iVar3 >> 5]);
    }
    if ((puVar5[0x38] & 0x7f) == 1) {
      piVar1 = &param_2->_cnt;
      *piVar1 = *piVar1 + -1;
      if (*piVar1 < 0) {
        uVar6 = FUN_1800385f0((int)(char)param_1,param_2);
        uVar4 = (uint)uVar6;
      }
      else {
        *param_2->_ptr = (char)param_1;
        uVar4 = (uint)(byte)*param_2->_ptr;
        param_2->_ptr = param_2->_ptr + 1;
      }
      if (uVar4 != 0xffffffff) {
        piVar1 = &param_2->_cnt;
        *piVar1 = *piVar1 + -1;
        if (*piVar1 < 0) {
          uVar6 = FUN_1800385f0((int)local_38._1_1_,param_2);
          uVar4 = (uint)uVar6;
        }
        else {
          *param_2->_ptr = local_38._1_1_;
          uVar4 = (uint)(byte)*param_2->_ptr;
          param_2->_ptr = param_2->_ptr + 1;
        }
        if (uVar4 != 0xffffffff) {
          return param_1;
        }
      }
      return L'\xffff';
    }
    iVar3 = FUN_180047880((longlong)param_2);
    if ((iVar3 != -1) && (iVar3 = FUN_180047880((longlong)param_2), iVar3 != -2)) {
      iVar3 = FUN_180047880((longlong)param_2);
      uVar4 = FUN_180047880((longlong)param_2);
      puVar8 = (undefined *)
               ((ulonglong)(uVar4 & 0x1f) * 0x50 + (&DAT_1800db4e0)[(longlong)iVar3 >> 5]);
    }
    if ((puVar8[8] & 0x80) != 0) {
      iVar3 = FUN_180047b90(&local_38,&local_34,5,param_1);
      if (iVar3 != 0) {
        return L'\xffff';
      }
      iVar3 = 0;
      if (0 < local_38) {
        puVar7 = &local_34;
        while( true ) {
          piVar1 = &param_2->_cnt;
          *piVar1 = *piVar1 + -1;
          if (*piVar1 < 0) {
            uVar6 = FUN_1800385f0((int)(char)*puVar7,param_2);
            uVar4 = (uint)uVar6;
          }
          else {
            *param_2->_ptr = (char)*puVar7;
            uVar4 = (uint)(byte)*param_2->_ptr;
            param_2->_ptr = param_2->_ptr + 1;
          }
          if (uVar4 == 0xffffffff) break;
          iVar3 = iVar3 + 1;
          puVar7 = (ulonglong *)((longlong)puVar7 + 1);
          if (local_38 <= iVar3) {
            return param_1;
          }
        }
        return L'\xffff';
      }
      return param_1;
    }
  }
  piVar1 = &param_2->_cnt;
  *piVar1 = *piVar1 + -2;
  if (-1 < *piVar1) {
    *(WCHAR *)param_2->_ptr = param_1;
    param_2->_ptr = param_2->_ptr + 2;
    return param_1;
  }
LAB_180047fbc:
  WVar2 = FUN_18004aaa0(param_1,param_2);
  return WVar2;
}


==================================================================

### EXPORT FUNC 180047ff0 (595 bytes) name=FUN_180047ff0

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

undefined4 FUN_180047ff0(LPWSTR param_1,byte *param_2,ulonglong param_3,undefined8 *param_4)

{
  undefined4 uVar1;
  ushort uVar2;
  int iVar3;
  undefined6 extraout_var;
  DWORD *pDVar4;
  pthreadlocinfo local_28;
  pthreadmbcinfo local_20;
  DWORD *local_18;
  char local_10;
  
  if ((param_2 != (byte *)0x0) && (param_3 != 0)) {
    if (*param_2 != 0) {
      local_10 = '\0';
      if (param_4 == (undefined8 *)0x0) {
        local_18 = FUN_1800380a0();
        local_28 = *(pthreadlocinfo *)(local_18 + 0x30);
        local_20 = *(pthreadmbcinfo *)(local_18 + 0x2e);
        if ((local_28 != (pthreadlocinfo)PTR_DAT_18006d6f0) &&
           ((_DAT_18006d578 & local_18[0x32]) == 0)) {
          local_28 = __updatetlocinfo();
        }
        if ((local_20 != (pthreadmbcinfo)PTR_DAT_18006d470) &&
           ((_DAT_18006d578 & local_18[0x32]) == 0)) {
          local_20 = __updatetmbcinfo();
        }
        if ((local_18[0x32] & 2) == 0) {
          local_18[0x32] = local_18[0x32] | 2;
          local_10 = '\x01';
        }
      }
      else {
        local_28 = (pthreadlocinfo)*param_4;
        local_20 = (pthreadmbcinfo)param_4[1];
      }
      if (*(int *)((longlong)&local_28->lc_category[0].locale + 4) != 0) {
        uVar2 = FUN_180047bb0((uint)*param_2,&local_28);
        if ((int)CONCAT62(extraout_var,uVar2) == 0) {
          iVar3 = MultiByteToWideChar(local_28->lc_codepage,9,(LPCSTR)param_2,1,param_1,
                                      (uint)(param_1 != (LPWSTR)0x0));
          if (iVar3 != 0) {
            if (local_10 != '\0') {
              local_18[0x32] = local_18[0x32] & 0xfffffffd;
            }
            return 1;
          }
        }
        else {
          iVar3 = *(int *)((longlong)&local_28->pctype + 4);
          if ((((1 < iVar3) && (iVar3 <= (int)param_3)) &&
              (iVar3 = MultiByteToWideChar(local_28->lc_codepage,9,(LPCSTR)param_2,iVar3,param_1,
                                           (uint)(param_1 != (LPWSTR)0x0)), iVar3 != 0)) ||
             (((ulonglong)(longlong)*(int *)((longlong)&local_28->pctype + 4) <= param_3 &&
              (param_2[1] != 0)))) {
            uVar1 = *(undefined4 *)((longlong)&local_28->pctype + 4);
            if (local_10 == '\0') {
              return uVar1;
            }
            local_18[0x32] = local_18[0x32] & 0xfffffffd;
            return uVar1;
          }
        }
        pDVar4 = FUN_180035b40();
        *pDVar4 = 0x2a;
        if (local_10 != '\0') {
          local_18[0x32] = local_18[0x32] & 0xfffffffd;
        }
        return 0xffffffff;
      }
      if (param_1 != (LPWSTR)0x0) {
        *param_1 = (ushort)*param_2;
      }
      if (local_10 != '\0') {
        local_18[0x32] = local_18[0x32] & 0xfffffffd;
      }
      return 1;
    }
    if (param_1 != (LPWSTR)0x0) {
      *param_1 = L'\0';
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180048250 (8 bytes) name=FUN_180048250

void FUN_180048250(LPWSTR param_1,byte *param_2,ulonglong param_3)

{
  FUN_180047ff0(param_1,param_2,param_3,(undefined8 *)0x0);
  return;
}


==================================================================

### EXPORT FUNC 180048260 (267 bytes) name=isdigit

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Single Match
    isdigit
   
   Library: Visual Studio 2005 Release */

int __cdecl isdigit(int _C)

{
  ushort uVar1;
  uint uVar2;
  undefined6 extraout_var;
  pthreadlocinfo local_28;
  pthreadmbcinfo local_20;
  DWORD *local_18;
  char local_10;
  
  if (DAT_180072de0 == 0) {
    return (byte)PTR_DAT_18006d6d0[(longlong)_C * 2] & 4;
  }
  local_10 = '\0';
  local_18 = FUN_1800380a0();
  local_28 = *(pthreadlocinfo *)(local_18 + 0x30);
  local_20 = *(pthreadmbcinfo *)(local_18 + 0x2e);
  if ((local_28 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
    local_28 = __updatetlocinfo();
  }
  if ((local_20 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
    local_20 = __updatetmbcinfo();
  }
  if ((local_18[0x32] & 2) == 0) {
    local_18[0x32] = local_18[0x32] | 2;
    local_10 = '\x01';
  }
  if (*(int *)((longlong)&local_28->pctype + 4) < 2) {
    uVar2 = (byte)local_28->locale_name[3][_C] & 4;
  }
  else {
    uVar1 = FUN_18004ac70(_C,4,&local_28);
    uVar2 = (uint)CONCAT62(extraout_var,uVar1);
  }
  if (local_10 != '\0') {
    local_18[0x32] = local_18[0x32] & 0xfffffffd;
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 180048370 (271 bytes) name=isxdigit

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Single Match
    isxdigit
   
   Library: Visual Studio 2005 Release */

int __cdecl isxdigit(int _C)

{
  ushort uVar1;
  uint uVar2;
  undefined6 extraout_var;
  pthreadlocinfo local_28;
  pthreadmbcinfo local_20;
  DWORD *local_18;
  char local_10;
  
  if (DAT_180072de0 == 0) {
    return (byte)PTR_DAT_18006d6d0[(longlong)_C * 2] & 0x80;
  }
  local_10 = '\0';
  local_18 = FUN_1800380a0();
  local_28 = *(pthreadlocinfo *)(local_18 + 0x30);
  local_20 = *(pthreadmbcinfo *)(local_18 + 0x2e);
  if ((local_28 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
    local_28 = __updatetlocinfo();
  }
  if ((local_20 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
    local_20 = __updatetmbcinfo();
  }
  if ((local_18[0x32] & 2) == 0) {
    local_18[0x32] = local_18[0x32] | 2;
    local_10 = '\x01';
  }
  if (*(int *)((longlong)&local_28->pctype + 4) < 2) {
    uVar2 = (byte)local_28->locale_name[3][_C] & 0x80;
  }
  else {
    uVar1 = FUN_18004ac70(_C,0x80,&local_28);
    uVar2 = (uint)CONCAT62(extraout_var,uVar1);
  }
  if (local_10 != '\0') {
    local_18[0x32] = local_18[0x32] & 0xfffffffd;
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 180048480 (551 bytes) name=FUN_180048480

WCHAR FUN_180048480(FILE *param_1)

{
  int *piVar1;
  ushort uVar2;
  WCHAR WVar3;
  int iVar4;
  uint uVar5;
  undefined *puVar6;
  ulonglong uVar7;
  undefined6 extraout_var;
  DWORD *pDVar8;
  undefined *puVar9;
  undefined2 local_res8;
  byte local_res10;
  undefined1 local_res11;
  
  puVar9 = &DAT_18006d970;
  if ((param_1->_flag & 0x40) == 0) {
    iVar4 = FUN_180047880((longlong)param_1);
    if ((iVar4 == -1) || (iVar4 = FUN_180047880((longlong)param_1), iVar4 == -2)) {
      puVar6 = &DAT_18006d970;
    }
    else {
      iVar4 = FUN_180047880((longlong)param_1);
      uVar5 = FUN_180047880((longlong)param_1);
      puVar6 = (undefined *)
               ((ulonglong)(uVar5 & 0x1f) * 0x50 + (&DAT_1800db4e0)[(longlong)iVar4 >> 5]);
    }
    if ((puVar6[0x38] & 0x7f) != 0) {
      piVar1 = &param_1->_cnt;
      *piVar1 = *piVar1 + -1;
      if (*piVar1 < 0) {
        uVar7 = FUN_18004b210(param_1);
        uVar5 = (uint)uVar7;
      }
      else {
        uVar5 = (uint)(byte)*param_1->_ptr;
        param_1->_ptr = param_1->_ptr + 1;
      }
      if (uVar5 == 0xffffffff) {
        return L'\xffff';
      }
      piVar1 = &param_1->_cnt;
      *piVar1 = *piVar1 + -1;
      local_res8 = CONCAT11(local_res8._1_1_,(char)uVar5);
      if (*piVar1 < 0) {
        uVar7 = FUN_18004b210(param_1);
        uVar5 = (uint)uVar7;
      }
      else {
        uVar5 = (uint)(byte)*param_1->_ptr;
        param_1->_ptr = param_1->_ptr + 1;
      }
      if (uVar5 != 0xffffffff) {
        local_res8 = CONCAT11((char)uVar5,(undefined1)local_res8);
        return local_res8;
      }
      return L'\xffff';
    }
  }
  if ((param_1->_flag & 0x40) == 0) {
    iVar4 = FUN_180047880((longlong)param_1);
    if ((iVar4 != -1) && (iVar4 = FUN_180047880((longlong)param_1), iVar4 != -2)) {
      iVar4 = FUN_180047880((longlong)param_1);
      uVar5 = FUN_180047880((longlong)param_1);
      puVar9 = (undefined *)
               ((ulonglong)(uVar5 & 0x1f) * 0x50 + (&DAT_1800db4e0)[(longlong)iVar4 >> 5]);
    }
    if ((puVar9[8] & 0x80) != 0) {
      piVar1 = &param_1->_cnt;
      *piVar1 = *piVar1 + -1;
      iVar4 = 1;
      if (*piVar1 < 0) {
        uVar7 = FUN_18004b210(param_1);
        uVar5 = (uint)uVar7;
      }
      else {
        uVar5 = (uint)(byte)*param_1->_ptr;
        param_1->_ptr = param_1->_ptr + 1;
      }
      if (uVar5 == 0xffffffff) {
        return L'\xffff';
      }
      local_res10 = (byte)uVar5;
      uVar2 = FUN_180047ca0(uVar5 & 0xff);
      if ((int)CONCAT62(extraout_var,uVar2) != 0) {
        piVar1 = &param_1->_cnt;
        *piVar1 = *piVar1 + -1;
        if (*piVar1 < 0) {
          uVar7 = FUN_18004b210(param_1);
          uVar5 = (uint)uVar7;
        }
        else {
          uVar5 = (uint)(byte)*param_1->_ptr;
          param_1->_ptr = param_1->_ptr + 1;
        }
        if (uVar5 == 0xffffffff) {
          FUN_18004b170((int)(char)local_res10,param_1);
          return L'\xffff';
        }
        local_res11 = (undefined1)uVar5;
        iVar4 = 2;
      }
      iVar4 = FUN_180048250(&local_res8,&local_res10,(longlong)iVar4);
      if (iVar4 != -1) {
        return local_res8;
      }
      pDVar8 = FUN_180035b40();
      *pDVar8 = 0x2a;
      return L'\xffff';
    }
  }
  piVar1 = &param_1->_cnt;
  *piVar1 = *piVar1 + -2;
  if (*piVar1 < 0) {
    WVar3 = FUN_18004ae60(param_1);
    return WVar3;
  }
  WVar3 = *(WCHAR *)param_1->_ptr;
  param_1->_ptr = (char *)((longlong)param_1->_ptr + 2);
  return WVar3;
}


==================================================================

### EXPORT FUNC 1800486b0 (567 bytes) name=FUN_1800486b0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

WCHAR FUN_1800486b0(WCHAR param_1,FILE *param_2)

{
  char *pcVar1;
  int iVar2;
  uint uVar3;
  undefined *puVar4;
  longlong lVar5;
  undefined *puVar6;
  undefined1 auStack_58 [32];
  int local_38;
  undefined2 local_34;
  undefined8 local_30;
  ulonglong local_28;
  
  local_28 = DAT_18006cea0 ^ (ulonglong)auStack_58;
  if (param_1 == L'\xffff') {
    return L'\xffff';
  }
  uVar3 = param_2->_flag;
  if ((uVar3 & 1) == 0) {
    if (-1 < (char)uVar3) {
      return L'\xffff';
    }
    if ((uVar3 & 2) != 0) {
      return L'\xffff';
    }
  }
  local_34 = param_1;
  if (param_2->_base == (char *)0x0) {
    _getbuf(param_2);
  }
  if ((param_2->_flag & 0x40) == 0) {
    iVar2 = FUN_180047880((longlong)param_2);
    puVar6 = &DAT_18006d970;
    if ((iVar2 == -1) || (iVar2 = FUN_180047880((longlong)param_2), iVar2 == -2)) {
      puVar4 = &DAT_18006d970;
    }
    else {
      iVar2 = FUN_180047880((longlong)param_2);
      lVar5 = (&DAT_1800db4e0)[(longlong)iVar2 >> 5];
      uVar3 = FUN_180047880((longlong)param_2);
      puVar4 = (undefined *)((ulonglong)(uVar3 & 0x1f) * 0x50 + lVar5);
    }
    if ((puVar4[8] & 0x80) != 0) {
      iVar2 = FUN_180047880((longlong)param_2);
      if ((iVar2 != -1) && (iVar2 = FUN_180047880((longlong)param_2), iVar2 != -2)) {
        iVar2 = FUN_180047880((longlong)param_2);
        lVar5 = (&DAT_1800db4e0)[(longlong)iVar2 >> 5];
        uVar3 = FUN_180047880((longlong)param_2);
        puVar6 = (undefined *)((ulonglong)(uVar3 & 0x1f) * 0x50 + lVar5);
      }
      if ((puVar6[0x38] & 0x7f) == 0) {
        iVar2 = FUN_180047b90(&local_38,&local_30,5,param_1);
        if (iVar2 != 0) {
          return L'\xffff';
        }
      }
      else {
        local_30._0_1_ = (char)param_1;
        local_30._1_1_ = local_34._1_1_;
        local_38 = 2;
      }
      if (param_2->_ptr < param_2->_base + local_38) {
        if (param_2->_cnt != 0) {
          return L'\xffff';
        }
        if (param_2->_bufsiz < local_38) {
          return L'\xffff';
        }
        param_2->_ptr = param_2->_base + local_38;
      }
      lVar5 = (longlong)(local_38 + -1);
      if (-1 < local_38 + -1) {
        do {
          param_2->_ptr = param_2->_ptr + -1;
          pcVar1 = (char *)((longlong)&local_30 + lVar5);
          lVar5 = lVar5 + -1;
          *param_2->_ptr = *pcVar1;
        } while (-1 < lVar5);
      }
      param_2->_cnt = param_2->_cnt + local_38;
      param_2->_flag = param_2->_flag & 0xffffffef;
      param_2->_flag = param_2->_flag | 1;
      return param_1;
    }
  }
  if (param_2->_ptr < param_2->_base + 2) {
    if (param_2->_cnt != 0) {
      return L'\xffff';
    }
    if ((uint)param_2->_bufsiz < 2) {
      return L'\xffff';
    }
    param_2->_ptr = param_2->_base + 2;
  }
  if ((param_2->_flag & 0x40) == 0) {
    param_2->_ptr = param_2->_ptr + -2;
    *(WCHAR *)param_2->_ptr = param_1;
  }
  else {
    param_2->_ptr = param_2->_ptr + -2;
    if (*(WCHAR *)param_2->_ptr != param_1) {
      param_2->_ptr = (char *)((longlong)param_2->_ptr + 2);
      return L'\xffff';
    }
  }
  param_2->_cnt = param_2->_cnt + 2;
  param_2->_flag = param_2->_flag & 0xffffffef;
  param_2->_flag = param_2->_flag | 1;
  return param_1;
}


==================================================================

### EXPORT FUNC 1800488f0 (362 bytes) name=_iswctype_l

/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */
/* Library Function - Single Match
    _iswctype_l
   
   Library: Visual Studio 2005 Release */

int __cdecl _iswctype_l(wint_t _C,wctype_t _Type,_locale_t _Locale)

{
  int iVar1;
  WCHAR local_res8 [4];
  ushort local_res10 [12];
  pthreadlocinfo local_28;
  pthreadmbcinfo local_20;
  DWORD *local_18;
  char local_10;
  
  if (_C == 0xffff) {
    return 0;
  }
  if (0xff < _C) {
    local_10 = '\0';
    local_res8[0] = _C;
    if (_Locale == (_locale_t)0x0) {
      local_18 = FUN_1800380a0();
      local_28 = *(pthreadlocinfo *)(local_18 + 0x30);
      local_20 = *(pthreadmbcinfo *)(local_18 + 0x2e);
      if ((local_28 != (pthreadlocinfo)PTR_DAT_18006d6f0) &&
         ((_DAT_18006d578 & local_18[0x32]) == 0)) {
        local_28 = __updatetlocinfo();
      }
      if ((local_20 != (pthreadmbcinfo)PTR_DAT_18006d470) &&
         ((_DAT_18006d578 & local_18[0x32]) == 0)) {
        local_20 = __updatetmbcinfo();
      }
      if ((local_18[0x32] & 2) == 0) {
        local_18[0x32] = local_18[0x32] | 2;
        local_10 = '\x01';
      }
    }
    else {
      local_28 = _Locale->locinfo;
      local_20 = _Locale->mbcinfo;
    }
    iVar1 = FUN_18004b6b0((longlong *)&local_28,1,local_res8,1,local_res10,local_28->lc_codepage,
                          *(LCID *)((longlong)&local_28->lc_category[0].locale + 4));
    if (iVar1 == 0) {
      local_res10[0] = 0;
    }
    if (local_10 != '\0') {
      local_18[0x32] = local_18[0x32] & 0xfffffffd;
    }
    return (uint)(local_res10[0] & _Type);
  }
  return (uint)(*(ushort *)(PTR_DAT_18006df48 + (ulonglong)_C * 2) & _Type & _Type);
}


==================================================================

### EXPORT FUNC 180048a60 (147 bytes) name=iswctype

/* Library Function - Single Match
    iswctype
   
   Library: Visual Studio 2005 Release */

int __cdecl iswctype(wint_t _C,wctype_t _Type)

{
  int iVar1;
  WCHAR local_res8 [8];
  WORD local_res18 [8];
  
  if (_C == 0xffff) {
    return 0;
  }
  if (_C < 0x100) {
    return (uint)(*(ushort *)(PTR_DAT_18006df48 + (ulonglong)_C * 2) & _Type);
  }
  local_res8[0] = _C;
  if (DAT_180072de0 == 0) {
    FUN_18004b6b0((longlong *)&PTR_DAT_18006d700,1,local_res8,1,local_res18,DAT_18006d594,
                  DAT_18006d5a4);
  }
  iVar1 = _iswctype_l(local_res8[0],_Type,(_locale_t)0x0);
  return iVar1;
}


==================================================================

### EXPORT FUNC 180048b00 (73 bytes) name=FUN_180048b00

int FUN_180048b00(byte *param_1,byte *param_2)

{
  byte bVar1;
  uint uVar2;
  uint uVar3;
  
  do {
    bVar1 = *param_1;
    uVar3 = (uint)bVar1;
    param_1 = param_1 + 1;
    if (bVar1 - 0x41 < 0x1a) {
      uVar3 = bVar1 + 0x20;
    }
    bVar1 = *param_2;
    uVar2 = (uint)bVar1;
    param_2 = param_2 + 1;
    if (bVar1 - 0x41 < 0x1a) {
      uVar2 = bVar1 + 0x20;
    }
  } while ((uVar3 != 0) && (uVar3 == uVar2));
  return uVar3 - uVar2;
}


==================================================================

### EXPORT FUNC 180048b50 (11 bytes) name=FUN_180048b50

void FUN_180048b50(byte *param_1)

{
  FUN_1800492d0(param_1,(undefined8 *)0x0,10);
  return;
}


==================================================================

### EXPORT FUNC 180048b60 (222 bytes) name=FUN_180048b60

longlong FUN_180048b60(byte *param_1)

{
  longlong *plVar1;
  byte bVar2;
  byte *pbVar3;
  int iVar4;
  undefined8 uVar5;
  ulonglong uVar6;
  ulonglong uVar7;
  longlong *plVar8;
  byte *pbVar9;
  
  if (DAT_1800db6e0 == 0) {
    return 0;
  }
  if (((DAT_180072808 != (longlong *)0x0) ||
      (((DAT_180072818 != 0 && (uVar5 = FUN_18004b9c0(), (int)uVar5 == 0)) &&
       (DAT_180072808 != (longlong *)0x0)))) && (param_1 != (byte *)0x0)) {
    pbVar3 = (byte *)*DAT_180072808;
    uVar6 = 0xffffffffffffffff;
    pbVar9 = param_1;
    do {
      if (uVar6 == 0) break;
      uVar6 = uVar6 - 1;
      bVar2 = *pbVar9;
      pbVar9 = pbVar9 + 1;
    } while (bVar2 != 0);
    uVar6 = ~uVar6 - 1;
    plVar8 = DAT_180072808;
    while (pbVar3 != (byte *)0x0) {
      uVar7 = 0xffffffffffffffff;
      pbVar9 = pbVar3;
      do {
        if (uVar7 == 0) break;
        uVar7 = uVar7 - 1;
        bVar2 = *pbVar9;
        pbVar9 = pbVar9 + 1;
      } while (bVar2 != 0);
      if (((uVar6 < ~uVar7 - 1) && (pbVar3[uVar6] == 0x3d)) &&
         (iVar4 = FUN_18004b9b0(pbVar3,param_1,uVar6), iVar4 == 0)) {
        return *plVar8 + 1 + uVar6;
      }
      plVar1 = plVar8 + 1;
      plVar8 = plVar8 + 1;
      pbVar3 = (byte *)*plVar1;
    }
  }
  return 0;
}


==================================================================

### EXPORT FUNC 180048c40 (99 bytes) name=FUN_180048c40

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8 FUN_180048c40(LCID param_1)

{
  int iVar1;
  undefined8 uVar2;
  undefined1 auStack_38 [32];
  byte local_18 [6];
  undefined1 local_12;
  ulonglong local_10;
  
  local_10 = DAT_18006cea0 ^ (ulonglong)auStack_38;
  local_12 = 0;
  iVar1 = GetLocaleInfoA(param_1,0x1004,(LPSTR)local_18,6);
  if (iVar1 == 0) {
    return 0xffffffff;
  }
  uVar2 = FUN_180048b50(local_18);
  return uVar2;
}


==================================================================

### EXPORT FUNC 180048cb0 (643 bytes) name=FUN_180048cb0

/* WARNING: Function: __chkstk replaced with injection: alloca_probe */
/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

LPVOID FUN_180048cb0(UINT param_1,UINT param_2,LPCSTR param_3,uint *param_4,LPVOID param_5,
                    undefined4 param_6)

{
  ulonglong uVar1;
  char cVar2;
  uint cbMultiByte;
  LPCSTR lpMultiByteStr;
  BOOL BVar3;
  int iVar4;
  uint uVar5;
  ulonglong uVar6;
  undefined4 *puVar7;
  LPVOID pvVar8;
  longlong lVar9;
  undefined1 *puVar10;
  undefined1 *puVar11;
  undefined1 *puVar12;
  LPCWSTR lpWideCharStr;
  ulonglong uVar13;
  undefined1 auStackY_c8 [32];
  int local_88 [2];
  LPCSTR local_80;
  uint *local_78;
  _cpinfo local_70;
  ulonglong local_58;
  
  puVar10 = auStackY_c8;
  puVar11 = auStackY_c8;
  local_58 = DAT_18006cea0 ^ (ulonglong)local_88;
  cbMultiByte = *param_4;
  pvVar8 = (LPVOID)0x0;
  local_88[0] = 0;
  puVar12 = auStackY_c8;
  if (param_1 == param_2) goto LAB_180048f16;
  local_88[1] = param_1;
  local_80 = param_3;
  local_78 = param_4;
  BVar3 = GetCPInfo(param_1,&local_70);
  if ((((BVar3 == 0) || (local_70.MaxCharSize != 1)) ||
      (BVar3 = GetCPInfo(param_2,&local_70), BVar3 == 0)) || (local_70.MaxCharSize != 1)) {
    uVar5 = MultiByteToWideChar(param_1,1,param_3,cbMultiByte,(LPWSTR)0x0,0);
    if (uVar5 != 0) goto LAB_180048d4d;
  }
  else {
    local_88[0] = 1;
    uVar5 = cbMultiByte;
    if (cbMultiByte == 0xffffffff) {
      lVar9 = -1;
      do {
        if (lVar9 == 0) break;
        lVar9 = lVar9 + -1;
        cVar2 = *param_3;
        param_3 = param_3 + 1;
      } while (cVar2 != '\0');
      uVar5 = ~(uint)lVar9;
    }
LAB_180048d4d:
    puVar10 = auStackY_c8;
    if ((0 < (int)uVar5) &&
       (uVar13 = (ulonglong)(int)uVar5, puVar10 = auStackY_c8, uVar13 < 0x7ffffffffffffff1)) {
      uVar1 = uVar13 * 2 + 0x10;
      if (uVar1 < 0x401) {
        uVar6 = uVar13 * 2 + 0x1f;
        if (uVar6 <= uVar1) {
          uVar6 = 0xffffffffffffff0;
        }
        lVar9 = -(uVar6 & 0xfffffffffffffff0);
        puVar10 = auStackY_c8 + lVar9;
        puVar11 = auStackY_c8 + lVar9;
        puVar7 = (undefined4 *)((longlong)local_88 + lVar9);
        if (puVar7 == (undefined4 *)0x0) goto LAB_180048ddf;
        *puVar7 = 0xcccc;
LAB_180048df9:
        lpWideCharStr = (LPCWSTR)(puVar7 + 4);
        puVar10 = puVar11;
      }
      else {
        puVar7 = FUN_1800349a0(uVar1);
        lpWideCharStr = (LPCWSTR)0x0;
        puVar10 = auStackY_c8;
        if (puVar7 != (undefined4 *)0x0) {
          *puVar7 = 0xdddd;
          goto LAB_180048df9;
        }
      }
      if (lpWideCharStr != (LPCWSTR)0x0) {
        *(undefined8 *)(puVar10 + -8) = 0x180048e11;
        FUN_1800357d0((ulonglong *)lpWideCharStr,0,uVar13 * 2);
        lpMultiByteStr = local_80;
        iVar4 = local_88[1];
        *(uint *)(puVar10 + 0x28) = uVar5;
        *(LPCWSTR *)(puVar10 + 0x20) = lpWideCharStr;
        *(undefined8 *)(puVar10 + -8) = 0x180048e2f;
        iVar4 = MultiByteToWideChar(iVar4,1,lpMultiByteStr,cbMultiByte,*(LPWSTR *)(puVar10 + 0x20),
                                    *(int *)(puVar10 + 0x28));
        if (iVar4 != 0) {
          if (param_5 == (LPVOID)0x0) {
            if (local_88[0] == 0) {
              *(undefined8 *)(puVar10 + 0x38) = 0;
              *(undefined8 *)(puVar10 + 0x30) = 0;
              *(undefined4 *)(puVar10 + 0x28) = 0;
              *(undefined8 *)(puVar10 + 0x20) = 0;
              *(undefined8 *)(puVar10 + -8) = 0x180048ea5;
              uVar5 = WideCharToMultiByte(param_2,0,lpWideCharStr,uVar5,*(LPSTR *)(puVar10 + 0x20),
                                          *(int *)(puVar10 + 0x28),*(LPCSTR *)(puVar10 + 0x30),
                                          *(LPBOOL *)(puVar10 + 0x38));
              pvVar8 = (LPVOID)0x0;
              if (uVar5 == 0) goto LAB_180048f01;
            }
            *(undefined8 *)(puVar10 + -8) = 0x180048eb8;
            pvVar8 = FUN_180040e50(1,(longlong)(int)uVar5);
            if (pvVar8 != (LPVOID)0x0) {
              *(undefined8 *)(puVar10 + 0x38) = 0;
              *(undefined8 *)(puVar10 + 0x30) = 0;
              *(uint *)(puVar10 + 0x28) = uVar5;
              *(LPVOID *)(puVar10 + 0x20) = pvVar8;
              *(undefined8 *)(puVar10 + -8) = 0x180048ee4;
              uVar5 = WideCharToMultiByte(param_2,0,lpWideCharStr,uVar5,*(LPSTR *)(puVar10 + 0x20),
                                          *(int *)(puVar10 + 0x28),*(LPCSTR *)(puVar10 + 0x30),
                                          *(LPBOOL *)(puVar10 + 0x38));
              if (uVar5 == 0) {
                *(undefined8 *)(puVar10 + -8) = 0x180048ef0;
                FUN_180034a70(pvVar8);
                pvVar8 = (LPVOID)0x0;
              }
              else if (cbMultiByte != 0xffffffff) {
                *local_78 = uVar5;
              }
            }
          }
          else {
            *(undefined8 *)(puVar10 + 0x38) = 0;
            *(undefined8 *)(puVar10 + 0x30) = 0;
            *(undefined4 *)(puVar10 + 0x28) = param_6;
            *(LPVOID *)(puVar10 + 0x20) = param_5;
            *(undefined8 *)(puVar10 + -8) = 0x180048e68;
            iVar4 = WideCharToMultiByte(param_2,0,lpWideCharStr,uVar5,*(LPSTR *)(puVar10 + 0x20),
                                        *(int *)(puVar10 + 0x28),*(LPCSTR *)(puVar10 + 0x30),
                                        *(LPBOOL *)(puVar10 + 0x38));
            if (iVar4 != 0) {
              pvVar8 = param_5;
            }
          }
        }
LAB_180048f01:
        puVar12 = puVar10;
        if (*(int *)(lpWideCharStr + -8) == 0xdddd) {
          *(undefined8 *)(puVar10 + -8) = 0x180048f13;
          FUN_180034a70(lpWideCharStr + -8);
        }
        goto LAB_180048f16;
      }
    }
  }
LAB_180048ddf:
  pvVar8 = (LPVOID)0x0;
  puVar12 = puVar10;
LAB_180048f16:
  *(undefined8 *)(puVar12 + -8) = 0x180048f22;
  return pvVar8;
}


==================================================================

### EXPORT FUNC 180048f40 (901 bytes) name=FUN_180048f40

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

uint FUN_180048f40(longlong *param_1,byte *param_2,undefined8 *param_3,uint param_4,uint param_5)

{
  byte *pbVar1;
  ushort uVar2;
  DWORD *pDVar3;
  undefined6 extraout_var;
  uint uVar4;
  int iVar5;
  byte *pbVar6;
  uint uVar7;
  byte bVar8;
  uint uVar9;
  pthreadlocinfo ptVar10;
  pthreadlocinfo local_38;
  pthreadmbcinfo local_30;
  DWORD *local_28;
  char local_20;
  
  local_20 = '\0';
  if (param_1 == (longlong *)0x0) {
    local_28 = FUN_1800380a0();
    local_38 = *(pthreadlocinfo *)(local_28 + 0x30);
    local_30 = *(pthreadmbcinfo *)(local_28 + 0x2e);
    if ((local_38 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_28[0x32]) == 0))
    {
      local_38 = __updatetlocinfo();
    }
    if ((local_30 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_28[0x32]) == 0))
    {
      local_30 = __updatetmbcinfo();
    }
    if ((local_28[0x32] & 2) == 0) {
      local_28[0x32] = local_28[0x32] | 2;
      local_20 = '\x01';
    }
  }
  else {
    local_38 = (pthreadlocinfo)*param_1;
    local_30 = (pthreadmbcinfo)param_1[1];
  }
  if (param_3 != (undefined8 *)0x0) {
    *param_3 = param_2;
  }
  if ((param_2 == (byte *)0x0) || ((param_4 != 0 && (((int)param_4 < 2 || (0x24 < (int)param_4))))))
  {
    pDVar3 = FUN_180035b40();
    *pDVar3 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    if (local_20 != '\0') {
      local_28[0x32] = local_28[0x32] & 0xfffffffd;
    }
    return 0;
  }
  bVar8 = *param_2;
  uVar7 = 0;
  ptVar10 = local_38;
  pbVar1 = param_2;
  while( true ) {
    pbVar6 = pbVar1 + 1;
    if (*(int *)((longlong)&ptVar10->pctype + 4) < 2) {
      uVar4 = (byte)ptVar10->locale_name[3][bVar8] & 8;
    }
    else {
      uVar2 = FUN_18004ac70((uint)bVar8,8,&local_38);
      uVar4 = (uint)CONCAT62(extraout_var,uVar2);
      ptVar10 = local_38;
    }
    if (uVar4 == 0) break;
    bVar8 = *pbVar6;
    pbVar1 = pbVar6;
  }
  if (bVar8 == 0x2d) {
    bVar8 = *pbVar6;
    param_5 = param_5 | 2;
    pbVar6 = pbVar1 + 2;
  }
  else if (bVar8 == 0x2b) {
    bVar8 = *pbVar6;
    pbVar6 = pbVar1 + 2;
  }
  if ((((int)param_4 < 0) || (param_4 == 1)) || (0x24 < (int)param_4)) {
    if (param_3 != (undefined8 *)0x0) {
      *param_3 = param_2;
    }
    if (local_20 != '\0') {
      local_28[0x32] = local_28[0x32] & 0xfffffffd;
    }
    return 0;
  }
  if (param_4 == 0) {
    if (bVar8 != 0x30) {
      param_4 = 10;
      goto LAB_180049178;
    }
    if ((*pbVar6 != 0x78) && (*pbVar6 != 0x58)) {
      param_4 = 8;
      goto LAB_180049178;
    }
    param_4 = 0x10;
  }
  else if ((param_4 != 0x10) || (bVar8 != 0x30)) goto LAB_180049178;
  if ((*pbVar6 == 0x78) || (*pbVar6 == 0x58)) {
    bVar8 = pbVar6[1];
    pbVar6 = pbVar6 + 2;
  }
LAB_180049178:
  do {
    if ((ptVar10->locale_name[3][bVar8] & 4U) == 0) {
      if ((ptVar10->locale_name[3][bVar8] & 0x103U) == 0) {
LAB_1800491e6:
        pbVar6 = pbVar6 + -1;
        if ((param_5 & 8) == 0) {
          if (param_3 != (undefined8 *)0x0) {
            pbVar6 = param_2;
          }
          uVar7 = 0;
        }
        else if (((param_5 & 4) != 0) ||
                (((param_5 & 1) == 0 &&
                 ((((param_5 & 2) != 0 && (0x80000000 < uVar7)) ||
                  (((param_5 & 2) == 0 && (0x7fffffff < uVar7)))))))) {
          pDVar3 = FUN_180035b40();
          *pDVar3 = 0x22;
          if ((param_5 & 1) == 0) {
            uVar7 = ((param_5 & 2) != 0) + 0x7fffffff;
          }
          else {
            uVar7 = 0xffffffff;
          }
        }
        if (param_3 != (undefined8 *)0x0) {
          *param_3 = pbVar6;
        }
        if ((param_5 & 2) != 0) {
          uVar7 = -uVar7;
        }
        if (local_20 != '\0') {
          local_28[0x32] = local_28[0x32] & 0xfffffffd;
        }
        return uVar7;
      }
      if ((byte)(bVar8 + 0x9f) < 0x1a) {
        iVar5 = (char)bVar8 + -0x20;
      }
      else {
        iVar5 = (int)(char)bVar8;
      }
      uVar4 = iVar5 - 0x37;
    }
    else {
      uVar4 = (int)(char)bVar8 - 0x30;
    }
    if (param_4 <= uVar4) goto LAB_1800491e6;
    uVar9 = (uint)(0xffffffff / (ulonglong)param_4);
    if ((uVar7 < uVar9) || ((uVar7 == uVar9 && (uVar4 <= (uint)(0xffffffff % (ulonglong)param_4)))))
    {
      uVar7 = uVar7 * param_4 + uVar4;
      param_5 = param_5 | 8;
    }
    else {
      param_5 = param_5 | 0xc;
      if (param_3 == (undefined8 *)0x0) goto LAB_1800491e6;
    }
    bVar8 = *pbVar6;
    pbVar6 = pbVar6 + 1;
  } while( true );
}


==================================================================

### EXPORT FUNC 1800492d0 (59 bytes) name=FUN_1800492d0

void FUN_1800492d0(byte *param_1,undefined8 *param_2,uint param_3)

{
  if (DAT_180072de0 == 0) {
    FUN_180048f40((longlong *)&PTR_DAT_18006d700,param_1,param_2,param_3,0);
    return;
  }
  FUN_180048f40((longlong *)0x0,param_1,param_2,param_3,0);
  return;
}


==================================================================

### EXPORT FUNC 180049310 (177 bytes) name=FUN_180049310

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

byte FUN_180049310(uint param_1)

{
  byte bVar1;
  DWORD *pDVar2;
  pthreadmbcinfo ptVar3;
  bool bVar4;
  
  pDVar2 = FUN_1800380a0();
  ptVar3 = *(pthreadmbcinfo *)(pDVar2 + 0x2e);
  if ((*(undefined **)(pDVar2 + 0x30) != PTR_DAT_18006d6f0) &&
     ((_DAT_18006d578 & pDVar2[0x32]) == 0)) {
    __updatetlocinfo();
  }
  if ((ptVar3 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & pDVar2[0x32]) == 0)) {
    ptVar3 = __updatetmbcinfo();
  }
  bVar4 = (pDVar2[0x32] & 2) == 0;
  if (bVar4) {
    pDVar2[0x32] = pDVar2[0x32] | 2;
  }
  bVar1 = ptVar3->mbctype[(ulonglong)(param_1 & 0xff) + 5];
  if (bVar4) {
    pDVar2[0x32] = pDVar2[0x32] & 0xfffffffd;
  }
  return bVar1 >> 2 & 1;
}


==================================================================

### EXPORT FUNC 1800493d0 (597 bytes) name=FUN_1800493d0

undefined8 FUN_1800493d0(undefined8 param_1,undefined8 param_2,uint param_3)

{
  int iVar1;
  INT_PTR IVar2;
  HMODULE hModule;
  FARPROC pFVar3;
  undefined8 uVar4;
  code *pcVar5;
  code *pcVar6;
  longlong lVar7;
  longlong lVar8;
  int local_res20 [2];
  uint local_48 [4];
  byte local_38;
  
  IVar2 = FUN_180037c30();
  lVar8 = 0;
  local_res20[0] = 0;
  local_48[0] = 0;
  if (DAT_180073620 == 0) {
    hModule = LoadLibraryA("USER32.DLL");
    if (hModule == (HMODULE)0x0) {
      return 0;
    }
    pFVar3 = GetProcAddress(hModule,"MessageBoxA");
    if (pFVar3 == (FARPROC)0x0) {
      return 0;
    }
    DAT_180073620 = FUN_180037b60((INT_PTR)pFVar3);
    pFVar3 = GetProcAddress(hModule,"GetActiveWindow");
    DAT_180073628 = FUN_180037b60((INT_PTR)pFVar3);
    pFVar3 = GetProcAddress(hModule,"GetLastActivePopup");
    DAT_180073630 = FUN_180037b60((INT_PTR)pFVar3);
    uVar4 = _get_osplatform(local_res20);
    if ((int)uVar4 != 0) {
                    /* WARNING: Subroutine does not return */
      FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
    }
    if (local_res20[0] == 2) {
      pFVar3 = GetProcAddress(hModule,"GetUserObjectInformationA");
      DAT_180073640 = FUN_180037b60((INT_PTR)pFVar3);
      if (DAT_180073640 != 0) {
        pFVar3 = GetProcAddress(hModule,"GetProcessWindowStation");
        DAT_180073638 = FUN_180037b60((INT_PTR)pFVar3);
      }
    }
  }
  if ((DAT_180073638 != IVar2) && (DAT_180073640 != IVar2)) {
    pcVar5 = (code *)FUN_180037d20(DAT_180073638);
    pcVar6 = (code *)FUN_180037d20(DAT_180073640);
    if (((pcVar5 != (code *)0x0) && (pcVar6 != (code *)0x0)) &&
       (((lVar7 = (*pcVar5)(), lVar7 == 0 || (iVar1 = (*pcVar6)(lVar7), iVar1 == 0)) ||
        ((local_38 & 1) == 0)))) {
      uVar4 = FUN_1800367c0(local_48);
      if ((int)uVar4 != 0) {
                    /* WARNING: Subroutine does not return */
        FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
      }
      if (local_48[0] < 4) {
        param_3 = param_3 | 0x40000;
      }
      else {
        param_3 = param_3 | 0x200000;
      }
      goto LAB_1800495e6;
    }
  }
  if ((((DAT_180073628 != IVar2) &&
       (pcVar5 = (code *)FUN_180037d20(DAT_180073628), lVar8 = 0, pcVar5 != (code *)0x0)) &&
      (lVar8 = (*pcVar5)(), lVar8 != 0)) &&
     ((DAT_180073630 != IVar2 &&
      (pcVar5 = (code *)FUN_180037d20(DAT_180073630), pcVar5 != (code *)0x0)))) {
    lVar8 = (*pcVar5)(lVar8);
  }
LAB_1800495e6:
  pcVar5 = (code *)FUN_180037d20(DAT_180073620);
  if (pcVar5 == (code *)0x0) {
    return 0;
  }
  uVar4 = (*pcVar5)(lVar8,param_1,param_2,param_3);
  return uVar4;
}


==================================================================

### EXPORT FUNC 180049630 (89 bytes) name=FUN_180049630

undefined4 FUN_180049630(int param_1)

{
  undefined4 uVar1;
  DWORD *pDVar2;
  
  uVar1 = DAT_1800727bc;
  if (-1 < param_1) {
    if (param_1 < 3) {
      DAT_1800727bc = param_1;
      return uVar1;
    }
    if (param_1 == 3) {
      return DAT_1800727bc;
    }
  }
  pDVar2 = FUN_180035b40();
  *pDVar2 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 180049690 (143 bytes) name=FUN_180049690

undefined8 * FUN_180049690(undefined8 *param_1,undefined8 *param_2)

{
  char cVar1;
  char *pcVar2;
  ulonglong uVar3;
  
  *param_1 = std::exception::vftable;
  if ((char *)*param_2 == (char *)0x0) {
    param_1[1] = 0;
    *(undefined4 *)(param_1 + 2) = 1;
    return param_1;
  }
  uVar3 = 0xffffffffffffffff;
  pcVar2 = (char *)*param_2;
  do {
    if (uVar3 == 0) break;
    uVar3 = uVar3 - 1;
    cVar1 = *pcVar2;
    pcVar2 = pcVar2 + 1;
  } while (cVar1 != '\0');
  pcVar2 = FUN_1800349a0(~uVar3);
  param_1[1] = pcVar2;
  if (pcVar2 != (char *)0x0) {
    strcpy_s(pcVar2,~uVar3,(char *)*param_2);
  }
  *(undefined4 *)(param_1 + 2) = 1;
  return param_1;
}


==================================================================

### EXPORT FUNC 180049720 (163 bytes) name=FUN_180049720

undefined8 * FUN_180049720(undefined8 *param_1,longlong param_2)

{
  char cVar1;
  int iVar2;
  char *pcVar3;
  ulonglong uVar4;
  
  *param_1 = std::exception::vftable;
  iVar2 = *(int *)(param_2 + 0x10);
  *(int *)(param_1 + 2) = iVar2;
  if (iVar2 == 0) {
    param_1[1] = *(undefined8 *)(param_2 + 8);
    return param_1;
  }
  if (*(char **)(param_2 + 8) == (char *)0x0) {
    param_1[1] = 0;
    return param_1;
  }
  uVar4 = 0xffffffffffffffff;
  pcVar3 = *(char **)(param_2 + 8);
  do {
    if (uVar4 == 0) break;
    uVar4 = uVar4 - 1;
    cVar1 = *pcVar3;
    pcVar3 = pcVar3 + 1;
  } while (cVar1 != '\0');
  pcVar3 = FUN_1800349a0(~uVar4);
  param_1[1] = pcVar3;
  if (pcVar3 != (char *)0x0) {
    strcpy_s(pcVar3,~uVar4,*(char **)(param_2 + 8));
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 1800497d0 (34 bytes) name=FUN_1800497d0

void FUN_1800497d0(undefined8 *param_1)

{
  *param_1 = std::exception::vftable;
  if (*(int *)(param_1 + 2) != 0) {
    FUN_180034a70((LPVOID)param_1[1]);
  }
  return;
}


==================================================================

### EXPORT FUNC 180049800 (19 bytes) name=FUN_180049800

char * FUN_180049800(longlong param_1)

{
  char *pcVar1;
  
  pcVar1 = *(char **)(param_1 + 8);
  if (pcVar1 == (char *)0x0) {
    pcVar1 = "Unknown exception";
  }
  return pcVar1;
}


==================================================================

### EXPORT FUNC 180049820 (68 bytes) name=FUN_180049820

undefined8 * FUN_180049820(undefined8 *param_1,uint param_2)

{
  *param_1 = std::exception::vftable;
  if (*(int *)(param_1 + 2) != 0) {
    FUN_180034a70((LPVOID)param_1[1]);
  }
  if ((param_2 & 1) != 0) {
    thunk_FUN_180034a70(param_1);
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180049880 (14 bytes) name=FUN_180049880

bool FUN_180049880(longlong param_1)

{
  return param_1 != 0;
}


==================================================================

### EXPORT FUNC 180049890 (44 bytes) name=strrchr

/* Library Function - Single Match
    strrchr
   
   Library: Visual Studio 2005 Release */

char * __cdecl strrchr(char *_Str,int _Ch)

{
  char cVar1;
  char *pcVar2;
  
  pcVar2 = _Str;
  do {
    cVar1 = *pcVar2;
    pcVar2 = pcVar2 + 1;
  } while (cVar1 != '\0');
  do {
    pcVar2 = pcVar2 + -1;
    if (pcVar2 == _Str) {
      if (*pcVar2 == (char)_Ch) {
        return pcVar2;
      }
      return (char *)0x0;
    }
  } while (*pcVar2 != (char)_Ch);
  return pcVar2;
}


==================================================================

### EXPORT FUNC 1800498c0 (614 bytes) name=FUN_1800498c0

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

uint FUN_1800498c0(uint param_1,undefined8 *param_2)

{
  byte bVar1;
  ushort uVar2;
  uint uVar3;
  int iVar4;
  undefined6 extraout_var;
  undefined6 extraout_var_00;
  DWORD *pDVar5;
  CHAR local_res8;
  CHAR local_res9;
  undefined1 local_resa;
  byte local_res10;
  undefined1 local_res11;
  pthreadlocinfo local_28;
  pthreadmbcinfo local_20;
  DWORD *local_18;
  char local_10;
  
  local_10 = '\0';
  if (param_2 == (undefined8 *)0x0) {
    local_18 = FUN_1800380a0();
    local_28 = *(pthreadlocinfo *)(local_18 + 0x30);
    local_20 = *(pthreadmbcinfo *)(local_18 + 0x2e);
    if ((local_28 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_18[0x32]) == 0))
    {
      local_28 = __updatetlocinfo();
    }
    if ((local_20 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_18[0x32]) == 0))
    {
      local_20 = __updatetmbcinfo();
    }
    if ((local_18[0x32] & 2) == 0) {
      local_18[0x32] = local_18[0x32] | 2;
      local_10 = '\x01';
    }
  }
  else {
    local_28 = (pthreadlocinfo)*param_2;
    local_20 = (pthreadmbcinfo)param_2[1];
  }
  if (0xff < param_1) {
    if ((*(int *)((longlong)&local_28->pctype + 4) < 2) ||
       (uVar2 = FUN_180047bb0((int)param_1 >> 8 & 0xff,&local_28),
       (int)CONCAT62(extraout_var_00,uVar2) == 0)) {
      pDVar5 = FUN_180035b40();
      uVar3 = 1;
      *pDVar5 = 0x2a;
      local_res9 = '\0';
      local_res8 = (CHAR)param_1;
    }
    else {
      local_resa = 0;
      uVar3 = 2;
      local_res8 = (CHAR)(param_1 >> 8);
      local_res9 = (CHAR)param_1;
    }
    iVar4 = FUN_180045f80((longlong *)&local_28,
                          *(LCID *)((longlong)&local_28->lc_category[0].locale + 4),0x100,
                          &local_res8,uVar3,(LPSTR)&local_res10,3,local_28->lc_codepage,1);
    if (iVar4 != 0) {
      if (iVar4 == 1) {
        uVar3 = (uint)local_res10;
      }
      else {
        uVar3 = (uint)CONCAT11(local_res10,local_res11);
      }
      if (local_10 != '\0') {
        local_18[0x32] = local_18[0x32] & 0xfffffffd;
      }
      return uVar3;
    }
    if (local_10 != '\0') {
      local_18[0x32] = local_18[0x32] & 0xfffffffd;
    }
    return param_1;
  }
  if (*(int *)((longlong)&local_28->pctype + 4) < 2) {
    uVar3 = (byte)local_28->locale_name[3][(int)param_1] & 1;
  }
  else {
    uVar2 = FUN_18004ac70(param_1,1,&local_28);
    uVar3 = (uint)CONCAT62(extraout_var,uVar2);
  }
  if (uVar3 != 0) {
    bVar1 = *(byte *)((longlong)local_28->locale_name[4] + (longlong)(int)param_1);
    if (local_10 == '\0') {
      return (uint)bVar1;
    }
    local_18[0x32] = local_18[0x32] & 0xfffffffd;
    return (uint)bVar1;
  }
  if (local_10 != '\0') {
    local_18[0x32] = local_18[0x32] & 0xfffffffd;
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 180049b30 (30 bytes) name=FUN_180049b30

uint FUN_180049b30(uint param_1)

{
  uint uVar1;
  
  if (DAT_180072de0 == 0) {
    if (param_1 - 0x41 < 0x1a) {
      param_1 = param_1 + 0x20;
    }
    return param_1;
  }
  uVar1 = FUN_1800498c0(param_1,(undefined8 *)0x0);
  return uVar1;
}


==================================================================

### EXPORT FUNC 180049b50 (400 bytes) name=FUN_180049b50

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 FUN_180049b50(uint *param_1,char *param_2,longlong *param_3)

{
  ulonglong uVar1;
  ulonglong uVar2;
  undefined1 auStackY_88 [32];
  pthreadlocinfo local_48;
  pthreadmbcinfo local_40;
  DWORD *local_38;
  char local_30;
  longlong local_28;
  ushort local_20 [8];
  ulonglong local_10;
  
  local_10 = DAT_18006cea0 ^ (ulonglong)auStackY_88;
  local_30 = '\0';
  if (param_3 == (longlong *)0x0) {
    local_38 = FUN_1800380a0();
    local_48 = *(pthreadlocinfo *)(local_38 + 0x30);
    local_40 = *(pthreadmbcinfo *)(local_38 + 0x2e);
    if ((local_48 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_38[0x32]) == 0))
    {
      local_48 = __updatetlocinfo();
    }
    if ((local_40 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_38[0x32]) == 0))
    {
      local_40 = __updatetmbcinfo();
    }
    if ((local_38[0x32] & 2) == 0) {
      local_38[0x32] = local_38[0x32] | 2;
      local_30 = '\x01';
    }
  }
  else {
    local_48 = (pthreadlocinfo)*param_3;
    local_40 = (pthreadmbcinfo)param_3[1];
  }
  uVar1 = FUN_18004c850(local_20,&local_28,param_2,0,0,0,0,(longlong *)&local_48);
  uVar2 = FUN_18004bad0(local_20,param_1);
  if ((uVar1 & 3) == 0) {
    if ((int)uVar2 != 1) {
      if ((int)uVar2 != 2) {
LAB_180049cad:
        if (local_30 != '\0') {
          local_38[0x32] = local_38[0x32] & 0xfffffffd;
        }
        return 0;
      }
LAB_180049c89:
      if (local_30 != '\0') {
        local_38[0x32] = local_38[0x32] & 0xfffffffd;
      }
      return 4;
    }
  }
  else {
    if ((uVar1 & 1) != 0) goto LAB_180049c89;
    if ((uVar1 & 2) == 0) goto LAB_180049cad;
  }
  if (local_30 != '\0') {
    local_38[0x32] = local_38[0x32] & 0xfffffffd;
  }
  return 3;
}


==================================================================

### EXPORT FUNC 180049ce0 (400 bytes) name=FUN_180049ce0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

undefined8 FUN_180049ce0(uint *param_1,char *param_2,longlong *param_3)

{
  ulonglong uVar1;
  ulonglong uVar2;
  undefined1 auStackY_88 [32];
  pthreadlocinfo local_48;
  pthreadmbcinfo local_40;
  DWORD *local_38;
  char local_30;
  longlong local_28;
  ushort local_20 [8];
  ulonglong local_10;
  
  local_10 = DAT_18006cea0 ^ (ulonglong)auStackY_88;
  local_30 = '\0';
  if (param_3 == (longlong *)0x0) {
    local_38 = FUN_1800380a0();
    local_48 = *(pthreadlocinfo *)(local_38 + 0x30);
    local_40 = *(pthreadmbcinfo *)(local_38 + 0x2e);
    if ((local_48 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_38[0x32]) == 0))
    {
      local_48 = __updatetlocinfo();
    }
    if ((local_40 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_38[0x32]) == 0))
    {
      local_40 = __updatetmbcinfo();
    }
    if ((local_38[0x32] & 2) == 0) {
      local_38[0x32] = local_38[0x32] | 2;
      local_30 = '\x01';
    }
  }
  else {
    local_48 = (pthreadlocinfo)*param_3;
    local_40 = (pthreadmbcinfo)param_3[1];
  }
  uVar1 = FUN_18004c850(local_20,&local_28,param_2,0,0,0,0,(longlong *)&local_48);
  uVar2 = FUN_18004c190(local_20,param_1);
  if ((uVar1 & 3) == 0) {
    if ((int)uVar2 != 1) {
      if ((int)uVar2 != 2) {
LAB_180049e3d:
        if (local_30 != '\0') {
          local_38[0x32] = local_38[0x32] & 0xfffffffd;
        }
        return 0;
      }
LAB_180049e19:
      if (local_30 != '\0') {
        local_38[0x32] = local_38[0x32] & 0xfffffffd;
      }
      return 4;
    }
  }
  else {
    if ((uVar1 & 1) != 0) goto LAB_180049e19;
    if ((uVar1 & 2) == 0) goto LAB_180049e3d;
  }
  if (local_30 != '\0') {
    local_38[0x32] = local_38[0x32] & 0xfffffffd;
  }
  return 3;
}


==================================================================

### EXPORT FUNC 180049e70 (280 bytes) name=FUN_180049e70

undefined8 FUN_180049e70(char *param_1,ulonglong param_2,int param_3,longlong param_4)

{
  char *pcVar1;
  int iVar2;
  DWORD *pDVar3;
  char *pcVar4;
  ulonglong uVar5;
  char cVar6;
  char *pcVar7;
  
  pcVar7 = *(char **)(param_4 + 0x10);
  if ((param_1 == (char *)0x0) || (param_2 == 0)) {
    pDVar3 = FUN_180035b40();
    *pDVar3 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0x16;
  }
  *param_1 = '\0';
  iVar2 = 0;
  if (0 < param_3) {
    iVar2 = param_3;
  }
  if (param_2 <= (ulonglong)(longlong)(iVar2 + 1)) {
    pDVar3 = FUN_180035b40();
    *pDVar3 = 0x22;
    FUN_1800384e0(0,0,0,0,0);
    return 0x22;
  }
  *param_1 = '0';
  pcVar4 = param_1;
  for (; pcVar1 = pcVar4 + 1, 0 < param_3; param_3 = param_3 + -1) {
    cVar6 = *pcVar7;
    if (cVar6 == '\0') {
      cVar6 = '0';
    }
    else {
      pcVar7 = pcVar7 + 1;
    }
    *pcVar1 = cVar6;
    pcVar4 = pcVar1;
  }
  *pcVar1 = '\0';
  if ((-1 < param_3) && ('4' < *pcVar7)) {
    cVar6 = *pcVar4;
    while (cVar6 == '9') {
      *pcVar4 = '0';
      pcVar4 = pcVar4 + -1;
      cVar6 = *pcVar4;
    }
    *pcVar4 = *pcVar4 + '\x01';
  }
  if (*param_1 == '1') {
    *(int *)(param_4 + 4) = *(int *)(param_4 + 4) + 1;
    return 0;
  }
  uVar5 = 0xffffffffffffffff;
  pcVar7 = param_1;
  do {
    pcVar7 = pcVar7 + 1;
    if (uVar5 == 0) break;
    uVar5 = uVar5 - 1;
  } while (*pcVar7 != '\0');
  memcpy(param_1,param_1 + 1,~uVar5);
  return 0;
}


==================================================================

### EXPORT FUNC 180049f90 (356 bytes) name=FUN_180049f90

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

int * FUN_180049f90(ulonglong param_1,int *param_2,char *param_3,rsize_t param_4)

{
  int iVar1;
  errno_t eVar2;
  uint uVar3;
  uint uVar4;
  ushort uVar5;
  uint uVar6;
  undefined1 auStackY_98 [32];
  undefined8 local_68;
  ushort local_60;
  uint local_58;
  uint uStack_54;
  ushort local_50;
  short local_48;
  char local_46;
  char local_44 [28];
  ulonglong local_28;
  
  local_28 = DAT_18006cea0 ^ (ulonglong)auStackY_98;
  uVar5 = (ushort)(param_1 >> 0x30);
  local_60 = uVar5 & 0x8000;
  uVar6 = 0x80000000;
  uVar5 = uVar5 >> 4 & 0x7ff;
  if (uVar5 == 0) {
    if (((param_1 & 0xfffff00000000) == 0) && ((int)param_1 == 0)) {
      local_58 = 0;
      uStack_54 = 0;
      goto LAB_18004a063;
    }
    uVar5 = 0x3c01;
    uVar6 = 0;
  }
  else if (uVar5 == 0x7ff) {
    uVar5 = 0x7fff;
  }
  else {
    uVar5 = uVar5 + 0x3c00;
  }
  local_58 = (int)param_1 << 0xb;
  uStack_54 = (uint)(param_1 >> 0x15) & 0x7ff | ((uint)(param_1 >> 0x20) & 0xfffff) << 0xb | uVar6;
  uVar3 = local_58;
  uVar4 = uStack_54;
  if (-1 < (int)uVar6) {
    do {
      local_58 = uVar3 * 2;
      uVar5 = uVar5 - 1;
      uStack_54 = uVar4 * 2 | uVar3 >> 0x1f;
      uVar6 = uVar4 & 0x7fffffff;
      uVar3 = local_58;
      uVar4 = uStack_54;
    } while (uVar6 >> 0x1e == 0);
  }
  local_60 = local_60 | uVar5;
LAB_18004a063:
  local_68 = CONCAT44(uStack_54,local_58);
  local_50 = local_60;
  iVar1 = FUN_18004d280((int *)&local_68,0x11,0,&local_48);
  param_2[2] = iVar1;
  *param_2 = (int)local_46;
  param_2[1] = (int)local_48;
  eVar2 = strcpy_s(param_3,param_4,local_44);
  if (eVar2 == 0) {
    *(char **)(param_2 + 4) = param_3;
    return param_2;
  }
                    /* WARNING: Subroutine does not return */
  FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
}


==================================================================

### EXPORT FUNC 18004a110 (81 bytes) name=FUN_18004a110

int FUN_18004a110(byte *param_1,byte *param_2,longlong param_3)

{
  byte bVar1;
  uint uVar2;
  uint uVar3;
  
  if (param_3 != 0) {
    do {
      bVar1 = *param_1;
      uVar3 = (uint)bVar1;
      param_1 = param_1 + 1;
      if (bVar1 - 0x41 < 0x1a) {
        uVar3 = bVar1 + 0x20;
      }
      bVar1 = *param_2;
      uVar2 = (uint)bVar1;
      param_2 = param_2 + 1;
      if (bVar1 - 0x41 < 0x1a) {
        uVar2 = bVar1 + 0x20;
      }
      param_3 = param_3 + -1;
    } while (((param_3 != 0) && (uVar3 != 0)) && (uVar3 == uVar2));
    return uVar3 - uVar2;
  }
  return 0;
}


==================================================================

### EXPORT FUNC 18004a170 (497 bytes) name=FUN_18004a170

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

int FUN_18004a170(byte *param_1,byte *param_2,ulonglong param_3,undefined8 *param_4)

{
  int iVar1;
  uint uVar2;
  uint uVar3;
  DWORD *pDVar4;
  pthreadlocinfo local_28;
  pthreadmbcinfo local_20;
  DWORD *local_18;
  char local_10;
  
  if (param_3 == 0) {
    iVar1 = 0;
  }
  else {
    local_10 = '\0';
    if (param_4 == (undefined8 *)0x0) {
      local_18 = FUN_1800380a0();
      local_28 = *(pthreadlocinfo *)(local_18 + 0x30);
      local_20 = *(pthreadmbcinfo *)(local_18 + 0x2e);
      if ((local_28 != (pthreadlocinfo)PTR_DAT_18006d6f0) &&
         ((_DAT_18006d578 & local_18[0x32]) == 0)) {
        local_28 = __updatetlocinfo();
      }
      if ((local_20 != (pthreadmbcinfo)PTR_DAT_18006d470) &&
         ((_DAT_18006d578 & local_18[0x32]) == 0)) {
        local_20 = __updatetmbcinfo();
      }
      if ((local_18[0x32] & 2) == 0) {
        local_18[0x32] = local_18[0x32] | 2;
        local_10 = '\x01';
      }
    }
    else {
      local_28 = (pthreadlocinfo)*param_4;
      local_20 = (pthreadmbcinfo)param_4[1];
    }
    if (((param_1 == (byte *)0x0) || (param_2 == (byte *)0x0)) || (0x7fffffff < param_3)) {
      pDVar4 = FUN_180035b40();
      *pDVar4 = 0x16;
      FUN_1800384e0(0,0,0,0,0);
      if (local_10 != '\0') {
        local_18[0x32] = local_18[0x32] & 0xfffffffd;
      }
      return 0x7fffffff;
    }
    if (*(int *)((longlong)&local_28->lc_category[0].locale + 4) != 0) {
      do {
        uVar2 = FUN_1800498c0((uint)*param_1,&local_28);
        param_1 = param_1 + 1;
        uVar3 = FUN_1800498c0((uint)*param_2,&local_28);
        param_2 = param_2 + 1;
        param_3 = param_3 - 1;
        if ((param_3 == 0) || (uVar2 == 0)) break;
      } while (uVar2 == uVar3);
      if (local_10 != '\0') {
        local_18[0x32] = local_18[0x32] & 0xfffffffd;
      }
      return uVar2 - uVar3;
    }
    iVar1 = FUN_18004a110(param_1,param_2,param_3);
    if (local_10 != '\0') {
      local_18[0x32] = local_18[0x32] & 0xfffffffd;
      return iVar1;
    }
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 18004a370 (197 bytes) name=FUN_18004a370

undefined8 FUN_18004a370(uint param_1)

{
  ulonglong uVar1;
  DWORD *pDVar2;
  DWORD nStdHandle;
  
  if ((-1 < (int)param_1) && (param_1 < DAT_1800db4c8)) {
    uVar1 = (ulonglong)(param_1 & 0x1f);
    if (((*(byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 + uVar1 * 0x50) & 1) != 0) &&
       (*(longlong *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + uVar1 * 0x50) != -1)) {
      if (DAT_1800727d0 == 1) {
        if (param_1 == 0) {
          nStdHandle = 0xfffffff6;
        }
        else if (param_1 == 1) {
          nStdHandle = 0xfffffff5;
        }
        else {
          if (param_1 != 2) goto LAB_18004a3ee;
          nStdHandle = 0xfffffff4;
        }
        SetStdHandle(nStdHandle,(HANDLE)0x0);
      }
LAB_18004a3ee:
      *(undefined8 *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + uVar1 * 0x50) =
           0xffffffffffffffff;
      return 0;
    }
  }
  pDVar2 = FUN_180035b40();
  *pDVar2 = 9;
  pDVar2 = FUN_180035b70();
  *pDVar2 = 0;
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 18004a440 (154 bytes) name=FUN_18004a440

undefined8 FUN_18004a440(uint param_1)

{
  DWORD *pDVar1;
  
  if (param_1 == 0xfffffffe) {
    pDVar1 = FUN_180035b70();
    *pDVar1 = 0;
    pDVar1 = FUN_180035b40();
    *pDVar1 = 9;
    return 0xffffffffffffffff;
  }
  if ((-1 < (int)param_1) && (param_1 < DAT_1800db4c8)) {
    if ((*(byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 +
                  (ulonglong)(param_1 & 0x1f) * 0x50) & 1) != 0) {
      return *(undefined8 *)
              ((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + (ulonglong)(param_1 & 0x1f) * 0x50);
    }
  }
  pDVar1 = FUN_180035b70();
  *pDVar1 = 0;
  pDVar1 = FUN_180035b40();
  *pDVar1 = 9;
  FUN_1800384e0(0,0,0,0,0);
  return 0xffffffffffffffff;
}


==================================================================

### EXPORT FUNC 18004a4e0 (172 bytes) name=FUN_18004a4e0

bool FUN_18004a4e0(uint param_1)

{
  int *piVar1;
  longlong lVar2;
  ulonglong uVar3;
  ulonglong uVar4;
  bool bVar5;
  
  uVar3 = (ulonglong)(param_1 & 0x1f);
  lVar2 = (&DAT_1800db4e0)[(longlong)(int)param_1 >> 5];
  bVar5 = true;
  if (*(int *)(lVar2 + 0xc + uVar3 * 0x50) == 0) {
    _lock(10);
    if (*(int *)(lVar2 + 0xc + uVar3 * 0x50) == 0) {
      uVar4 = FUN_180045910(lVar2 + 0x10 + uVar3 * 0x50,4000);
      bVar5 = (int)uVar4 != 0;
      piVar1 = (int *)(lVar2 + 0xc + uVar3 * 0x50);
      *piVar1 = *piVar1 + 1;
    }
    FUN_180045470(10);
  }
  if (bVar5) {
    EnterCriticalSection
              ((LPCRITICAL_SECTION)
               ((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 0x10 + uVar3 * 0x50));
  }
  return bVar5;
}


==================================================================

### EXPORT FUNC 18004a590 (25 bytes) name=FUN_18004a590

void FUN_18004a590(void)

{
  FUN_180045470(10);
  return;
}


==================================================================

### EXPORT FUNC 18004a5b0 (43 bytes) name=FUN_18004a5b0

void FUN_18004a5b0(uint param_1)

{
                    /* WARNING: Could not recover jumptable at 0x00018004a5d4. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LeaveCriticalSection
            ((LPCRITICAL_SECTION)
             ((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 0x10 +
             (ulonglong)(param_1 & 0x1f) * 0x50));
  return;
}


==================================================================

### EXPORT FUNC 18004a5e0 (295 bytes) name=FUN_18004a5e0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

WCHAR FUN_18004a5e0(WCHAR param_1)

{
  BOOL BVar1;
  DWORD DVar2;
  UINT CodePage;
  undefined1 auStackY_68 [32];
  WCHAR local_28 [2];
  DWORD local_24;
  CHAR local_20 [8];
  ulonglong local_18;
  
  local_18 = DAT_18006cea0 ^ (ulonglong)auStackY_68;
  local_28[0] = param_1;
  if (DAT_18006e3a0 != 0) {
    if (DAT_18006e3e0 == (HANDLE)0xfffffffffffffffe) {
      __initconout();
    }
    if (DAT_18006e3e0 == (HANDLE)0xffffffffffffffff) {
      return L'\xffff';
    }
    BVar1 = WriteConsoleW(DAT_18006e3e0,local_28,1,&local_24,(LPVOID)0x0);
    if (BVar1 != 0) {
      DAT_18006e3a0 = 1;
      return local_28[0];
    }
    if (DAT_18006e3a0 != 2) {
      return L'\xffff';
    }
    DVar2 = GetLastError();
    if (DVar2 != 0x78) {
      return L'\xffff';
    }
    DAT_18006e3a0 = 0;
  }
  CodePage = GetConsoleOutputCP();
  DVar2 = WideCharToMultiByte(CodePage,0,local_28,1,local_20,5,(LPCSTR)0x0,(LPBOOL)0x0);
  if ((DAT_18006e3e0 != (HANDLE)0xffffffffffffffff) &&
     (BVar1 = WriteConsoleA(DAT_18006e3e0,local_20,DVar2,&local_24,(LPVOID)0x0), BVar1 != 0)) {
    return local_28[0];
  }
  return L'\xffff';
}


==================================================================

### EXPORT FUNC 18004a710 (196 bytes) name=FUN_18004a710

int FUN_18004a710(void)

{
  FILE *pFVar1;
  int iVar2;
  int iVar3;
  longlong lVar4;
  int iVar5;
  
  iVar5 = 0;
  _lock(1);
  for (iVar3 = 3; iVar3 < DAT_1800db4c0; iVar3 = iVar3 + 1) {
    lVar4 = (longlong)iVar3;
    if (*(longlong *)(DAT_1800da4a8 + lVar4 * 8) != 0) {
      pFVar1 = *(FILE **)(DAT_1800da4a8 + lVar4 * 8);
      if ((pFVar1->_flag & 0x83) != 0) {
        iVar2 = FUN_18004e1a0(pFVar1);
        if (iVar2 != -1) {
          iVar5 = iVar5 + 1;
        }
      }
      if (0x13 < iVar3) {
        DeleteCriticalSection((LPCRITICAL_SECTION)(*(longlong *)(DAT_1800da4a8 + lVar4 * 8) + 0x30))
        ;
        FUN_180034a70(*(LPVOID *)(DAT_1800da4a8 + lVar4 * 8));
        *(undefined8 *)(DAT_1800da4a8 + lVar4 * 8) = 0;
      }
    }
  }
  FUN_180045470(1);
  return iVar5;
}


==================================================================

### EXPORT FUNC 18004a7e0 (25 bytes) name=FUN_18004a7e0

void FUN_18004a7e0(void)

{
  FUN_180045470(1);
  return;
}


==================================================================

### EXPORT FUNC 18004a800 (128 bytes) name=FUN_18004a800

undefined8 FUN_18004a800(int *param_1)

{
  uint uVar1;
  undefined8 uVar2;
  uint uVar3;
  
  uVar2 = 0;
  if (((((byte)param_1[6] & 3) == 2) && ((param_1[6] & 0x108U) != 0)) &&
     (uVar3 = *param_1 - param_1[4], 0 < (int)uVar3)) {
    uVar1 = FUN_180047880((longlong)param_1);
    uVar1 = FUN_1800473f0(uVar1,*(WCHAR **)(param_1 + 4),uVar3);
    if (uVar1 == uVar3) {
      if ((char)param_1[6] < '\0') {
        param_1[6] = param_1[6] & 0xfffffffd;
      }
    }
    else {
      param_1[6] = param_1[6] | 0x20;
      uVar2 = 0xffffffff;
    }
  }
  param_1[2] = 0;
  *(undefined8 *)param_1 = *(undefined8 *)(param_1 + 4);
  return uVar2;
}


==================================================================

### EXPORT FUNC 18004a880 (189 bytes) name=FUN_18004a880

ulonglong FUN_18004a880(int *param_1)

{
  int iVar1;
  uint uVar2;
  undefined4 extraout_var;
  uint uVar3;
  
  if (param_1 == (int *)0x0) {
    iVar1 = FUN_18004a940(0);
    return CONCAT44(extraout_var,iVar1);
  }
  iVar1 = 0;
  if (((((byte)param_1[6] & 3) == 2) && (iVar1 = 0, (param_1[6] & 0x108U) != 0)) &&
     (uVar3 = *param_1 - param_1[4], 0 < (int)uVar3)) {
    uVar2 = FUN_180047880((longlong)param_1);
    uVar2 = FUN_1800473f0(uVar2,*(WCHAR **)(param_1 + 4),uVar3);
    if (uVar2 == uVar3) {
      iVar1 = 0;
      if ((char)param_1[6] < '\0') {
        param_1[6] = param_1[6] & 0xfffffffd;
      }
    }
    else {
      param_1[6] = param_1[6] | 0x20;
      iVar1 = -1;
    }
  }
  *(undefined8 *)param_1 = *(undefined8 *)(param_1 + 4);
  param_1[2] = 0;
  if (iVar1 == 0) {
    if (((uint)param_1[6] >> 0xe & 1) == 0) {
      return 0;
    }
    uVar3 = FUN_180047880((longlong)param_1);
    iVar1 = FUN_18004e240(uVar3);
    return (ulonglong)-(uint)(iVar1 != 0);
  }
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 18004a940 (245 bytes) name=FUN_18004a940

int FUN_18004a940(int param_1)

{
  longlong lVar1;
  int *piVar2;
  ulonglong uVar3;
  int iVar4;
  longlong lVar5;
  int iVar6;
  int iVar7;
  
  iVar6 = 0;
  iVar7 = 0;
  _lock(1);
  for (iVar4 = 0; iVar4 < DAT_1800db4c0; iVar4 = iVar4 + 1) {
    lVar5 = (longlong)iVar4;
    if ((*(longlong *)(DAT_1800da4a8 + lVar5 * 8) != 0) &&
       (lVar1 = *(longlong *)(DAT_1800da4a8 + lVar5 * 8), (*(byte *)(lVar1 + 0x18) & 0x83) != 0)) {
      FUN_1800477d0(iVar4,lVar1);
      piVar2 = *(int **)(DAT_1800da4a8 + lVar5 * 8);
      if ((piVar2[6] & 0x83U) != 0) {
        if (param_1 == 1) {
          uVar3 = FUN_18004a880(piVar2);
          if ((int)uVar3 != -1) {
            iVar6 = iVar6 + 1;
          }
        }
        else if ((param_1 == 0) && ((piVar2[6] & 2U) != 0)) {
          uVar3 = FUN_18004a880(piVar2);
          if ((int)uVar3 == -1) {
            iVar7 = -1;
          }
        }
      }
      FUN_180047860(iVar4,*(longlong *)(DAT_1800da4a8 + lVar5 * 8));
    }
  }
  FUN_180045470(1);
  if (param_1 == 1) {
    iVar7 = iVar6;
  }
  return iVar7;
}


==================================================================

### EXPORT FUNC 18004aa40 (38 bytes) name=FUN_18004aa40

void FUN_18004aa40(undefined8 param_1,longlong param_2)

{
  FUN_180047860(*(int *)(param_2 + 0x20),
                *(longlong *)(DAT_1800da4a8 + (longlong)*(int *)(param_2 + 0x20) * 8));
  return;
}


==================================================================

### EXPORT FUNC 18004aa70 (25 bytes) name=FUN_18004aa70

void FUN_18004aa70(void)

{
  FUN_180045470(1);
  return;
}


==================================================================

### EXPORT FUNC 18004aa90 (10 bytes) name=FUN_18004aa90

void FUN_18004aa90(void)

{
  FUN_18004a940(1);
  return;
}


==================================================================

### EXPORT FUNC 18004aaa0 (452 bytes) name=FUN_18004aaa0

undefined2 FUN_18004aaa0(WCHAR param_1,FILE *param_2)

{
  byte bVar1;
  uint uVar2;
  uint uVar3;
  DWORD *pDVar4;
  undefined **ppuVar5;
  undefined7 extraout_var;
  longlong lVar6;
  undefined *puVar7;
  uint uVar8;
  WCHAR local_res10 [4];
  
  uVar2 = FUN_180047880((longlong)param_2);
  uVar8 = param_2->_flag;
  if ((uVar8 & 0x82) == 0) {
    pDVar4 = FUN_180035b40();
    *pDVar4 = 9;
    param_2->_flag = param_2->_flag | 0x20;
    return 0xffff;
  }
  if ((uVar8 & 0x40) != 0) {
    pDVar4 = FUN_180035b40();
    *pDVar4 = 0x22;
    param_2->_flag = param_2->_flag | 0x20;
    return 0xffff;
  }
  uVar3 = 0;
  if ((uVar8 & 1) != 0) {
    param_2->_cnt = 0;
    if ((uVar8 & 0x10) == 0) {
      param_2->_flag = uVar8 | 0x20;
      return 0xffff;
    }
    param_2->_ptr = param_2->_base;
    param_2->_flag = uVar8 & 0xfffffffe;
  }
  uVar8 = param_2->_flag;
  param_2->_cnt = 0;
  param_2->_flag = uVar8 & 0xffffffef | 2;
  if (((uVar8 & 0x10c) == 0) &&
     (((ppuVar5 = FUN_180047620(), param_2 != (FILE *)(ppuVar5 + 6) &&
       (ppuVar5 = FUN_180047620(), param_2 != (FILE *)(ppuVar5 + 0xc))) ||
      (bVar1 = FUN_1800475a0(uVar2), (int)CONCAT71(extraout_var,bVar1) == 0)))) {
    _getbuf(param_2);
  }
  if ((param_2->_flag & 0x108U) == 0) {
    uVar8 = 2;
    local_res10[0] = param_1;
    uVar3 = FUN_1800473f0(uVar2,local_res10,2);
  }
  else {
    uVar8 = *(int *)&param_2->_ptr - *(int *)&param_2->_base;
    param_2->_ptr = (char *)((longlong)param_2->_base + 2);
    param_2->_cnt = param_2->_bufsiz + -2;
    if ((int)uVar8 < 1) {
      if ((uVar2 == 0xffffffff) || (uVar2 == 0xfffffffe)) {
        puVar7 = &DAT_18006d970;
      }
      else {
        puVar7 = (undefined *)
                 ((ulonglong)(uVar2 & 0x1f) * 0x50 + (&DAT_1800db4e0)[(longlong)(int)uVar2 >> 5]);
      }
      if (((puVar7[8] & 0x20) != 0) && (lVar6 = FUN_180046b10(uVar2,0,2), lVar6 == -1))
      goto LAB_18004ac42;
      *(WCHAR *)param_2->_base = param_1;
    }
    else {
      uVar3 = FUN_1800473f0(uVar2,(WCHAR *)param_2->_base,uVar8);
      *(WCHAR *)param_2->_base = param_1;
    }
  }
  if (uVar3 == uVar8) {
    return param_1;
  }
LAB_18004ac42:
  param_2->_flag = param_2->_flag | 0x20;
  return 0xffff;
}


==================================================================

### EXPORT FUNC 18004ac70 (487 bytes) name=FUN_18004ac70

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

ushort FUN_18004ac70(int param_1,ushort param_2,undefined8 *param_3)

{
  ushort uVar1;
  int iVar2;
  undefined6 extraout_var;
  uint uVar3;
  ushort local_res8 [4];
  CHAR local_res18;
  CHAR local_res19;
  undefined1 local_res1a;
  pthreadlocinfo local_28;
  pthreadmbcinfo local_20;
  DWORD *local_18;
  char local_10;
  
  local_10 = '\0';
  if (param_3 == (undefined8 *)0x0) {
    local_18 = FUN_1800380a0();
    local_28 = *(pthreadlocinfo *)(local_18 + 0x30);
    local_20 = *(pthreadmbcinfo *)(local_18 + 0x2e);
    if ((local_28 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_18[0x32]) == 0))
    {
      local_28 = __updatetlocinfo();
    }
    if ((local_20 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_18[0x32]) == 0))
    {
      local_20 = __updatetmbcinfo();
    }
    if ((local_18[0x32] & 2) == 0) {
      local_18[0x32] = local_18[0x32] | 2;
      local_10 = '\x01';
    }
  }
  else {
    local_28 = (pthreadlocinfo)*param_3;
    local_20 = (pthreadmbcinfo)param_3[1];
  }
  if (param_1 + 1U < 0x101) {
    local_res8[0] = local_28->locale_name[3][param_1] & param_2;
    if (local_10 != '\0') {
      local_18[0x32] = local_18[0x32] & 0xfffffffd;
      return local_res8[0];
    }
  }
  else {
    uVar1 = FUN_180047bb0(param_1 >> 8 & 0xff,&local_28);
    if ((int)CONCAT62(extraout_var,uVar1) == 0) {
      local_res19 = '\0';
      uVar3 = 1;
      local_res18 = (CHAR)param_1;
    }
    else {
      local_res1a = 0;
      uVar3 = 2;
      local_res18 = (CHAR)((uint)param_1 >> 8);
      local_res19 = (CHAR)param_1;
    }
    iVar2 = FUN_180046340((longlong *)&local_28,1,&local_res18,uVar3,local_res8,
                          local_28->lc_codepage,
                          *(LCID *)((longlong)&local_28->lc_category[0].locale + 4),1);
    if (iVar2 == 0) {
      if (local_10 != '\0') {
        local_18[0x32] = local_18[0x32] & 0xfffffffd;
      }
      return 0;
    }
    local_res8[0] = local_res8[0] & param_2;
    if (local_10 != '\0') {
      local_18[0x32] = local_18[0x32] & 0xfffffffd;
    }
  }
  return local_res8[0];
}


==================================================================

### EXPORT FUNC 18004ae60 (394 bytes) name=FUN_18004ae60

undefined2 FUN_18004ae60(FILE *param_1)

{
  undefined2 uVar1;
  uint uVar2;
  int iVar3;
  DWORD *pDVar4;
  undefined *puVar5;
  
  if (param_1 == (FILE *)0x0) {
    pDVar4 = FUN_180035b40();
    *pDVar4 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffff;
  }
  uVar2 = param_1->_flag;
  if (((uVar2 & 0x83) == 0) || ((uVar2 & 0x40) != 0)) {
    return 0xffff;
  }
  if ((uVar2 & 2) != 0) {
    param_1->_flag = uVar2 | 0x20;
    return 0xffff;
  }
  param_1->_flag = uVar2 | 1;
  if ((uVar2 & 0x10c) == 0) {
    _getbuf(param_1);
  }
  else {
    param_1->_ptr = param_1->_base;
  }
  uVar2 = FUN_180047880((longlong)param_1);
  iVar3 = FUN_18004ec90(uVar2,(LPWSTR)param_1->_base,param_1->_bufsiz);
  param_1->_cnt = iVar3;
  if (((iVar3 != 0) && (iVar3 != 1)) && (iVar3 != -1)) {
    if ((param_1->_flag & 0x82) == 0) {
      iVar3 = FUN_180047880((longlong)param_1);
      if ((iVar3 == -1) || (iVar3 = FUN_180047880((longlong)param_1), iVar3 == -2)) {
        puVar5 = &DAT_18006d970;
      }
      else {
        iVar3 = FUN_180047880((longlong)param_1);
        uVar2 = FUN_180047880((longlong)param_1);
        puVar5 = (undefined *)
                 ((ulonglong)(uVar2 & 0x1f) * 0x50 + (&DAT_1800db4e0)[(longlong)iVar3 >> 5]);
      }
      if ((puVar5[8] & 0x82) == 0x82) {
        param_1->_flag = param_1->_flag | 0x2000;
      }
    }
    if (((param_1->_bufsiz == 0x200) && ((param_1->_flag & 8U) != 0)) &&
       (((uint)param_1->_flag >> 10 & 1) == 0)) {
      param_1->_bufsiz = 0x1000;
    }
    param_1->_cnt = param_1->_cnt + -2;
    uVar1 = *(undefined2 *)param_1->_ptr;
    param_1->_ptr = param_1->_ptr + 2;
    return uVar1;
  }
  uVar2 = 0x10;
  if (iVar3 != 0) {
    uVar2 = 0x20;
  }
  param_1->_cnt = 0;
  param_1->_flag = param_1->_flag | uVar2;
  return 0xffff;
}


==================================================================

### EXPORT FUNC 18004aff0 (381 bytes) name=FUN_18004aff0

uint FUN_18004aff0(uint param_1,FILE *param_2)

{
  char *pcVar1;
  int iVar2;
  uint uVar3;
  undefined *puVar4;
  DWORD *pDVar5;
  undefined *puVar6;
  
  if ((param_2->_flag & 0x40) == 0) {
    iVar2 = FUN_180047880((longlong)param_2);
    puVar6 = &DAT_18006d970;
    if ((iVar2 == -1) || (iVar2 = FUN_180047880((longlong)param_2), iVar2 == -2)) {
      puVar4 = &DAT_18006d970;
    }
    else {
      iVar2 = FUN_180047880((longlong)param_2);
      uVar3 = FUN_180047880((longlong)param_2);
      puVar4 = (undefined *)
               ((ulonglong)(uVar3 & 0x1f) * 0x50 + (&DAT_1800db4e0)[(longlong)iVar2 >> 5]);
    }
    if ((puVar4[0x38] & 0x7f) == 0) {
      iVar2 = FUN_180047880((longlong)param_2);
      if ((iVar2 != -1) && (iVar2 = FUN_180047880((longlong)param_2), iVar2 != -2)) {
        iVar2 = FUN_180047880((longlong)param_2);
        uVar3 = FUN_180047880((longlong)param_2);
        puVar6 = (undefined *)
                 ((ulonglong)(uVar3 & 0x1f) * 0x50 + (&DAT_1800db4e0)[(longlong)iVar2 >> 5]);
      }
      if ((puVar6[0x38] & 0x80) == 0) goto LAB_18004b101;
    }
    pDVar5 = FUN_180035b40();
    *pDVar5 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
  }
  else {
LAB_18004b101:
    if (param_1 != 0xffffffff) {
      uVar3 = param_2->_flag;
      if (((uVar3 & 1) != 0) || (((char)uVar3 < '\0' && ((uVar3 & 2) == 0)))) {
        if (param_2->_base == (char *)0x0) {
          _getbuf(param_2);
        }
        if (param_2->_ptr == param_2->_base) {
          if (param_2->_cnt != 0) {
            return 0xffffffff;
          }
          param_2->_ptr = param_2->_ptr + 1;
        }
        param_2->_ptr = param_2->_ptr + -1;
        pcVar1 = param_2->_ptr;
        if ((param_2->_flag & 0x40) == 0) {
          *pcVar1 = (char)param_1;
        }
        else if (*pcVar1 != (char)param_1) {
          param_2->_ptr = pcVar1 + 1;
          return 0xffffffff;
        }
        param_2->_cnt = param_2->_cnt + 1;
        param_2->_flag = param_2->_flag & 0xffffffef;
        param_2->_flag = param_2->_flag | 1;
        return param_1 & 0xff;
      }
    }
  }
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 18004b170 (114 bytes) name=FUN_18004b170

uint FUN_18004b170(uint param_1,FILE *param_2)

{
  uint uVar1;
  DWORD *pDVar2;
  
  if (param_2 == (FILE *)0x0) {
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    uVar1 = 0xffffffff;
  }
  else {
    FUN_180047760((ulonglong)param_2);
    uVar1 = FUN_18004aff0(param_1,param_2);
    FUN_180047810((ulonglong)param_2);
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 18004b1f0 (24 bytes) name=FUN_18004b1f0

void FUN_18004b1f0(undefined8 param_1,longlong param_2)

{
  FUN_180047810(*(ulonglong *)(param_2 + 0x48));
  return;
}


==================================================================

### EXPORT FUNC 18004b210 (379 bytes) name=FUN_18004b210

ulonglong FUN_18004b210(FILE *param_1)

{
  byte bVar1;
  uint uVar2;
  int iVar3;
  DWORD *pDVar4;
  undefined *puVar5;
  
  if (param_1 == (FILE *)0x0) {
    pDVar4 = FUN_180035b40();
    *pDVar4 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffff;
  }
  uVar2 = param_1->_flag;
  if (((uVar2 & 0x83) == 0) || ((uVar2 & 0x40) != 0)) {
    return 0xffffffff;
  }
  if ((uVar2 & 2) != 0) {
    param_1->_flag = uVar2 | 0x20;
    return 0xffffffff;
  }
  param_1->_flag = uVar2 | 1;
  if ((uVar2 & 0x10c) == 0) {
    _getbuf(param_1);
  }
  else {
    param_1->_ptr = param_1->_base;
  }
  uVar2 = FUN_180047880((longlong)param_1);
  iVar3 = FUN_18004ec90(uVar2,(LPWSTR)param_1->_base,param_1->_bufsiz);
  param_1->_cnt = iVar3;
  if ((iVar3 != 0) && (iVar3 != -1)) {
    if ((param_1->_flag & 0x82) == 0) {
      iVar3 = FUN_180047880((longlong)param_1);
      if ((iVar3 == -1) || (iVar3 = FUN_180047880((longlong)param_1), iVar3 == -2)) {
        puVar5 = &DAT_18006d970;
      }
      else {
        iVar3 = FUN_180047880((longlong)param_1);
        uVar2 = FUN_180047880((longlong)param_1);
        puVar5 = (undefined *)
                 ((ulonglong)(uVar2 & 0x1f) * 0x50 + (&DAT_1800db4e0)[(longlong)iVar3 >> 5]);
      }
      if ((puVar5[8] & 0x82) == 0x82) {
        param_1->_flag = param_1->_flag | 0x2000;
      }
    }
    if (((param_1->_bufsiz == 0x200) && ((param_1->_flag & 8U) != 0)) &&
       (((uint)param_1->_flag >> 10 & 1) == 0)) {
      param_1->_bufsiz = 0x1000;
    }
    param_1->_cnt = param_1->_cnt + -1;
    bVar1 = *param_1->_ptr;
    param_1->_ptr = param_1->_ptr + 1;
    return (ulonglong)bVar1;
  }
  uVar2 = 0x10;
  if (iVar3 != 0) {
    uVar2 = 0x20;
  }
  param_1->_cnt = 0;
  param_1->_flag = param_1->_flag | uVar2;
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 18004b390 (786 bytes) name=FUN_18004b390

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */

BOOL FUN_18004b390(longlong *param_1,DWORD param_2,LPCWSTR param_3,int param_4,LPWORD param_5,
                  UINT param_6,LCID param_7)

{
  longlong lVar1;
  size_t _Size;
  undefined1 *puVar2;
  BOOL BVar3;
  DWORD DVar4;
  BOOL BVar5;
  UINT UVar6;
  int cchSrc;
  int iVar7;
  undefined8 uVar8;
  ulonglong uVar9;
  ulonglong uVar10;
  undefined4 *puVar11;
  undefined1 *puVar12;
  undefined1 *puVar13;
  undefined1 *puVar14;
  ulonglong *lpSrcStr;
  undefined4 *_Src;
  longlong lVar15;
  ulonglong uVar16;
  undefined1 auStackY_88 [32];
  DWORD local_48;
  WORD aWStack_44 [6];
  longlong *local_38;
  ulonglong local_30;
  
  puVar14 = auStackY_88;
  puVar12 = auStackY_88;
  puVar13 = auStackY_88;
  local_30 = DAT_18006cea0 ^ (ulonglong)&local_48;
  lVar15 = (longlong)param_4;
  puVar2 = auStackY_88;
  if (param_4 < -1) {
LAB_18004b67a:
    puVar14 = puVar2;
    BVar5 = 0;
  }
  else {
    local_48 = param_2;
    local_38 = param_1;
    if (DAT_180073660 == 0) {
      BVar3 = GetStringTypeW(1,L"",1,aWStack_44);
      if (BVar3 == 0) {
        DVar4 = GetLastError();
        if (DVar4 != 0x78) goto LAB_18004b42a;
        DAT_180073660 = 2;
LAB_18004b453:
        BVar3 = 0;
        if (param_7 == 0) {
          param_7 = *(LCID *)(*param_1 + 0x14);
        }
        if (param_6 == 0) {
          param_6 = *(UINT *)(*param_1 + 4);
        }
        uVar8 = FUN_180048c40(param_7);
        UVar6 = (UINT)uVar8;
        if ((param_6 != UVar6) && (UVar6 != 0xffffffff)) {
          param_6 = UVar6;
        }
        cchSrc = WideCharToMultiByte(param_6,0,param_3,param_4,(LPSTR)0x0,0,(LPCSTR)0x0,(LPBOOL)0x0)
        ;
        uVar16 = (ulonglong)cchSrc;
        puVar2 = auStackY_88;
        if (((cchSrc != 0) && (puVar2 = auStackY_88, 0 < cchSrc)) &&
           (puVar2 = auStackY_88, uVar16 < 0xffffffffffffffe1)) {
          uVar10 = uVar16 + 0x10;
          if (uVar10 < 0x401) {
            uVar9 = uVar16 + 0x1f;
            if (uVar9 <= uVar10) {
              uVar9 = 0xffffffffffffff0;
            }
            lVar1 = -(uVar9 & 0xfffffffffffffff0);
            puVar12 = auStackY_88 + lVar1;
            puVar11 = (undefined4 *)((longlong)aWStack_44 + lVar1 + -4);
            puVar2 = auStackY_88 + lVar1;
            if (puVar11 == (undefined4 *)0x0) goto LAB_18004b67a;
            *puVar11 = 0xcccc;
LAB_18004b522:
            lpSrcStr = (ulonglong *)(puVar11 + 4);
            puVar13 = puVar12;
          }
          else {
            puVar11 = FUN_1800349a0(uVar10);
            lpSrcStr = (ulonglong *)0x0;
            if (puVar11 != (undefined4 *)0x0) {
              *puVar11 = 0xdddd;
              goto LAB_18004b522;
            }
          }
          puVar2 = puVar13;
          if (lpSrcStr != (ulonglong *)0x0) {
            *(undefined8 *)(puVar13 + -8) = 0x18004b53c;
            FUN_1800357d0(lpSrcStr,0,uVar16);
            *(undefined8 *)(puVar13 + 0x38) = 0;
            *(undefined8 *)(puVar13 + 0x30) = 0;
            *(int *)(puVar13 + 0x28) = cchSrc;
            *(ulonglong **)(puVar13 + 0x20) = lpSrcStr;
            *(undefined8 *)(puVar13 + -8) = 0x18004b562;
            iVar7 = WideCharToMultiByte(param_6,0,param_3,param_4,*(LPSTR *)(puVar13 + 0x20),
                                        *(int *)(puVar13 + 0x28),*(LPCSTR *)(puVar13 + 0x30),
                                        *(LPBOOL *)(puVar13 + 0x38));
            puVar14 = puVar13;
            BVar5 = 0;
            if (((iVar7 != 0) && (iVar7 = cchSrc + 1, BVar5 = BVar3, 0 < iVar7)) &&
               ((ulonglong)(longlong)iVar7 < 0x7ffffffffffffff1)) {
              lVar1 = (longlong)iVar7 * 2;
              uVar16 = lVar1 + 0x10;
              if (uVar16 < 0x401) {
                uVar10 = lVar1 + 0x1f;
                if (uVar10 <= uVar16) {
                  uVar10 = 0xffffffffffffff0;
                }
                *(undefined8 *)(puVar13 + -8) = 0x18004b5b6;
                lVar1 = -(uVar10 & 0xfffffffffffffff0);
                puVar14 = puVar13 + lVar1;
                puVar11 = (undefined4 *)(puVar13 + lVar1 + 0x40);
                if (puVar11 == (undefined4 *)0x0) goto LAB_18004b663;
                *puVar11 = 0xcccc;
                puVar13 = puVar13 + lVar1;
LAB_18004b5e2:
                _Src = puVar11 + 4;
                puVar14 = puVar13;
              }
              else {
                *(undefined8 *)(puVar13 + -8) = 0x18004b5d4;
                puVar11 = FUN_1800349a0(uVar16);
                _Src = (undefined4 *)0x0;
                if (puVar11 != (undefined4 *)0x0) {
                  *puVar11 = 0xdddd;
                  goto LAB_18004b5e2;
                }
              }
              DVar4 = local_48;
              if (_Src != (undefined4 *)0x0) {
                if (param_7 == 0) {
                  param_7 = *(LCID *)(*local_38 + 0x14);
                }
                _Size = lVar15 * 2;
                *(undefined2 *)(_Size + (longlong)_Src) = 0xffff;
                *(undefined2 *)((longlong)_Src + lVar15 * 2 + -2) = 0xffff;
                *(undefined4 **)(puVar14 + 0x20) = _Src;
                *(undefined8 *)(puVar14 + -8) = 0x18004b627;
                BVar5 = GetStringTypeA(param_7,DVar4,(LPCSTR)lpSrcStr,cchSrc,
                                       *(LPWORD *)(puVar14 + 0x20));
                if ((*(short *)((longlong)_Src + lVar15 * 2 + -2) == -1) ||
                   (*(short *)(_Size + (longlong)_Src) != -1)) {
                  BVar5 = 0;
                }
                else {
                  *(undefined8 *)(puVar14 + -8) = 0x18004b64c;
                  memcpy(param_5,_Src,_Size);
                }
                if (_Src[-4] == 0xdddd) {
                  *(undefined8 *)(puVar14 + -8) = 0x18004b663;
                  FUN_180034a70(_Src + -4);
                }
              }
            }
LAB_18004b663:
            if ((int)lpSrcStr[-2] == 0xdddd) {
              *(undefined8 *)(puVar14 + -8) = 0x18004b675;
              FUN_180034a70(lpSrcStr + -2);
            }
            goto LAB_18004b67c;
          }
        }
        goto LAB_18004b67a;
      }
      DAT_180073660 = 1;
    }
    else {
LAB_18004b42a:
      if (DAT_180073660 != 1) {
        if ((DAT_180073660 == 2) || (puVar2 = auStackY_88, DAT_180073660 == 0)) goto LAB_18004b453;
        goto LAB_18004b67a;
      }
    }
    BVar5 = GetStringTypeW(param_2,param_3,param_4,param_5);
  }
LAB_18004b67c:
  *(undefined8 *)(puVar14 + -8) = 0x18004b688;
  return BVar5;
}


==================================================================

### EXPORT FUNC 18004b6b0 (317 bytes) name=FUN_18004b6b0

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

void FUN_18004b6b0(longlong *param_1,DWORD param_2,LPCWSTR param_3,int param_4,LPWORD param_5,
                  UINT param_6,LCID param_7)

{
  pthreadmbcinfo ptVar1;
  bool bVar2;
  DWORD *pDVar3;
  pthreadlocinfo local_38;
  pthreadmbcinfo local_30;
  DWORD *local_28;
  undefined1 local_20;
  
  bVar2 = false;
  local_20 = 0;
  if (param_1 == (longlong *)0x0) {
    pDVar3 = FUN_1800380a0();
    local_38 = *(pthreadlocinfo *)(pDVar3 + 0x30);
    ptVar1 = *(pthreadmbcinfo *)(pDVar3 + 0x2e);
    local_30 = ptVar1;
    local_28 = pDVar3;
    if ((local_38 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & pDVar3[0x32]) == 0)) {
      local_38 = __updatetlocinfo();
    }
    if ((ptVar1 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & pDVar3[0x32]) == 0)) {
      local_30 = __updatetmbcinfo();
    }
    if ((pDVar3[0x32] & 2) == 0) {
      pDVar3[0x32] = pDVar3[0x32] | 2;
      bVar2 = true;
      local_20 = 1;
    }
  }
  else {
    local_38 = (pthreadlocinfo)*param_1;
    local_30 = (pthreadmbcinfo)param_1[1];
    bVar2 = false;
    pDVar3 = local_28;
  }
  FUN_18004b390((longlong *)&local_38,param_2,param_3,param_4,param_5,param_6,param_7);
  if (bVar2) {
    pDVar3[0x32] = pDVar3[0x32] & 0xfffffffd;
  }
  return;
}


==================================================================

### EXPORT FUNC 18004b7f0 (445 bytes) name=FUN_18004b7f0

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

int FUN_18004b7f0(byte *param_1,byte *param_2,ulonglong param_3,longlong *param_4)

{
  int iVar1;
  DWORD *pDVar2;
  pthreadlocinfo local_28;
  pthreadmbcinfo local_20;
  DWORD *local_18;
  char local_10;
  
  local_10 = '\0';
  if (param_4 == (longlong *)0x0) {
    local_18 = FUN_1800380a0();
    local_28 = *(pthreadlocinfo *)(local_18 + 0x30);
    local_20 = *(pthreadmbcinfo *)(local_18 + 0x2e);
    if ((local_28 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_18[0x32]) == 0))
    {
      local_28 = __updatetlocinfo();
    }
    if ((local_20 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_18[0x32]) == 0))
    {
      local_20 = __updatetmbcinfo();
    }
    if ((local_18[0x32] & 2) == 0) {
      local_18[0x32] = local_18[0x32] | 2;
      local_10 = '\x01';
    }
  }
  else {
    local_28 = (pthreadlocinfo)*param_4;
    local_20 = (pthreadmbcinfo)param_4[1];
  }
  if (param_3 == 0) {
    if (local_10 != '\0') {
      local_18[0x32] = local_18[0x32] & 0xfffffffd;
    }
    return 0;
  }
  if (((param_1 == (byte *)0x0) || (param_2 == (byte *)0x0)) || (0x7fffffff < param_3)) {
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
LAB_18004b910:
    if (local_10 != '\0') {
      local_18[0x32] = local_18[0x32] & 0xfffffffd;
    }
    iVar1 = 0x7fffffff;
  }
  else {
    if (local_20->ismbcodepage == 0) {
      iVar1 = FUN_18004f450(param_1,param_2,param_3,param_4);
    }
    else {
      iVar1 = FUN_18004f310((longlong *)&local_28,*(LCID *)local_20->mbulinfo,0x1001,param_1,
                            (uint)param_3,param_2,(uint)param_3,local_20->mbcodepage);
      if (iVar1 == 0) goto LAB_18004b910;
      iVar1 = iVar1 + -2;
    }
    if (local_10 != '\0') {
      local_18[0x32] = local_18[0x32] & 0xfffffffd;
    }
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 18004b9b0 (8 bytes) name=FUN_18004b9b0

void FUN_18004b9b0(byte *param_1,byte *param_2,ulonglong param_3)

{
  FUN_18004b7f0(param_1,param_2,param_3,(longlong *)0x0);
  return;
}


==================================================================

### EXPORT FUNC 18004b9c0 (258 bytes) name=FUN_18004b9c0

undefined8 FUN_18004b9c0(void)

{
  LPCWSTR lpWideCharStr;
  int iVar1;
  undefined8 *puVar2;
  LPSTR local_res8;
  
  local_res8 = (LPSTR)0x0;
  lpWideCharStr = (LPCWSTR)*DAT_180072818;
  puVar2 = DAT_180072818;
  while( true ) {
    if (lpWideCharStr == (LPCWSTR)0x0) {
      return 0;
    }
    iVar1 = WideCharToMultiByte(0,0,lpWideCharStr,-1,(LPSTR)0x0,0,(LPCSTR)0x0,(LPBOOL)0x0);
    if ((iVar1 == 0) || (local_res8 = FUN_180040e50((longlong)iVar1,1), local_res8 == (LPSTR)0x0))
    break;
    iVar1 = WideCharToMultiByte(0,0,(LPCWSTR)*puVar2,-1,local_res8,iVar1,(LPCSTR)0x0,(LPBOOL)0x0);
    if (iVar1 == 0) {
      FUN_180034a70(local_res8);
      return 0xffffffff;
    }
    iVar1 = FUN_18004f770(&local_res8,0);
    if ((iVar1 < 0) && (local_res8 != (LPSTR)0x0)) {
      FUN_180034a70(local_res8);
      local_res8 = (LPSTR)0x0;
    }
    lpWideCharStr = (LPCWSTR)puVar2[1];
    puVar2 = puVar2 + 1;
  }
  return 0xffffffff;
}


==================================================================

### EXPORT FUNC 18004bad0 (1713 bytes) name=FUN_18004bad0

ulonglong FUN_18004bad0(ushort *param_1,uint *param_2)

{
  uint *puVar1;
  ushort uVar2;
  uint uVar3;
  int iVar4;
  ulonglong uVar5;
  byte bVar6;
  longlong lVar7;
  int *piVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  ulonglong uVar13;
  int iVar14;
  longlong lVar15;
  int iVar16;
  int iVar17;
  ulonglong uVar18;
  int iVar19;
  uint uStack_5c;
  undefined8 local_58;
  int local_50 [4];
  int local_40;
  
  iVar4 = DAT_18006e3b0;
  uVar2 = param_1[5];
  uVar11 = uVar2 & 0x7fff;
  iVar12 = uVar11 - 0x3fff;
  local_58._0_4_ = *(uint *)(param_1 + 3);
  local_58._4_4_ = *(uint *)(param_1 + 1);
  local_50[0] = (uint)*param_1 << 0x10;
  if (iVar12 == -0x3fff) {
    uVar13 = 0;
    iVar17 = 0;
    uVar5 = uVar13;
    do {
      if (*(int *)((longlong)&local_58 + uVar5 * 4) != 0) {
        local_58._0_4_ = 0;
        local_58._4_4_ = 0;
        uVar13 = 2;
        iVar17 = 0;
        break;
      }
      uVar5 = uVar5 + 1;
    } while ((longlong)uVar5 < 3);
  }
  else {
    local_50[2] = *(uint *)(param_1 + 3);
    local_50[3] = *(uint *)(param_1 + 1);
    local_40 = (uint)*param_1 << 0x10;
    uVar13 = 0;
    iVar17 = 0;
    uVar9 = DAT_18006e3b0 >> 0x1f & 0x1f;
    iVar16 = 0;
    uVar3 = DAT_18006e3b0 + uVar9;
    iVar19 = (int)uVar3 >> 5;
    uVar3 = 0x1f - ((uVar3 & 0x1f) - uVar9);
    bVar6 = (byte)uVar3;
    if ((*(uint *)((longlong)&local_58 + (longlong)iVar19 * 4) >> (uVar3 & 0x1f) & 1) != 0) {
      if ((*(uint *)((longlong)&local_58 + (longlong)iVar19 * 4) & ~(-1 << (bVar6 & 0x1f))) == 0) {
        for (lVar7 = (longlong)(iVar19 + 1); lVar7 < 3; lVar7 = lVar7 + 1) {
          if (*(int *)((longlong)&local_58 + lVar7 * 4) != 0) goto LAB_18004bc02;
        }
      }
      else {
LAB_18004bc02:
        uVar3 = DAT_18006e3b0 + -1 >> 0x1f & 0x1f;
        iVar16 = DAT_18006e3b0 + -1 + uVar3;
        iVar14 = iVar16 >> 5;
        uVar9 = *(uint *)((longlong)&local_58 + (longlong)iVar14 * 4);
        uVar10 = 1 << (0x1f - (((byte)iVar16 & 0x1f) - (char)uVar3) & 0x1f);
        uVar3 = uVar9 + uVar10;
        if ((uVar3 < uVar9) || (uVar5 = uVar13, uVar3 < uVar10)) {
          uVar5 = 1;
        }
        iVar16 = (int)uVar5;
        *(uint *)((longlong)&local_58 + (longlong)iVar14 * 4) = uVar3;
        lVar7 = (longlong)(iVar14 + -1);
        if (-1 < iVar14 + -1) {
          do {
            iVar16 = 0;
            if ((int)uVar5 == 0) break;
            uVar9 = *(uint *)((longlong)&local_58 + lVar7 * 4);
            uVar3 = uVar9 + 1;
            if ((uVar3 < uVar9) || (uVar5 = uVar13, uVar3 == 0)) {
              uVar5 = 1;
            }
            iVar16 = (int)uVar5;
            *(uint *)((longlong)&local_58 + lVar7 * 4) = uVar3;
            lVar7 = lVar7 + -1;
          } while (-1 < lVar7);
        }
      }
    }
    puVar1 = (uint *)((longlong)&local_58 + (longlong)iVar19 * 4);
    *puVar1 = *puVar1 & -1 << (bVar6 & 0x1f);
    lVar7 = (longlong)(iVar19 + 1);
    if (lVar7 < 3) {
      FUN_1800357d0((ulonglong *)((longlong)&local_58 + lVar7 * 4),0,(3 - lVar7) * 4);
    }
    iVar19 = iVar12;
    if (iVar16 != 0) {
      iVar19 = uVar11 - 0x3ffe;
    }
    if (iVar19 < DAT_18006e3ac - iVar4) {
      local_58._0_4_ = 0;
      local_58._4_4_ = 0;
      uVar13 = 2;
    }
    else if (DAT_18006e3ac < iVar19) {
      if (iVar19 < DAT_18006e3a8) {
        local_58._0_4_ = (uint)local_58 & 0x7fffffff;
        iVar17 = DAT_18006e3bc + iVar19;
        uVar11 = DAT_18006e3b4 >> 0x1f & 0x1f;
        iVar4 = DAT_18006e3b4 + uVar11;
        bVar6 = ((byte)iVar4 & 0x1f) - (char)uVar11;
        uVar5 = uVar13;
        uVar18 = uVar13;
        do {
          uVar11 = *(uint *)((longlong)&local_58 + uVar5 * 4);
          uVar5 = uVar5 + 1;
          (&uStack_5c)[uVar5] = uVar11 >> (bVar6 & 0x1f) | (uint)uVar18;
          uVar18 = (ulonglong)((~(-1 << (bVar6 & 0x1f)) & uVar11) << (0x20 - bVar6 & 0x1f));
        } while ((longlong)uVar5 < 3);
        lVar7 = (longlong)(iVar4 >> 5);
        lVar15 = 2;
        piVar8 = local_50 + -lVar7;
        do {
          if (lVar15 < lVar7) {
            *(undefined4 *)((longlong)&local_58 + lVar15 * 4) = 0;
          }
          else {
            *(int *)((longlong)&local_58 + lVar15 * 4) = *piVar8;
          }
          piVar8 = piVar8 + -1;
          lVar15 = lVar15 + -1;
        } while (-1 < lVar15);
      }
      else {
        local_58._0_4_ = 0x80000000;
        local_58._4_4_ = 0;
        local_50[0] = 0;
        uVar11 = DAT_18006e3b4 >> 0x1f & 0x1f;
        iVar4 = DAT_18006e3b4 + uVar11;
        bVar6 = ((byte)iVar4 & 0x1f) - (char)uVar11;
        uVar5 = uVar13;
        do {
          uVar11 = *(uint *)((longlong)&local_58 + uVar13 * 4);
          uVar13 = uVar13 + 1;
          (&uStack_5c)[uVar13] = uVar11 >> (bVar6 & 0x1f) | (uint)uVar5;
          uVar5 = (ulonglong)((~(-1 << (bVar6 & 0x1f)) & uVar11) << (0x20 - bVar6 & 0x1f));
        } while ((longlong)uVar13 < 3);
        lVar7 = (longlong)(iVar4 >> 5);
        lVar15 = 2;
        piVar8 = local_50 + -lVar7;
        do {
          if (lVar15 < lVar7) {
            *(undefined4 *)((longlong)&local_58 + lVar15 * 4) = 0;
          }
          else {
            *(int *)((longlong)&local_58 + lVar15 * 4) = *piVar8;
          }
          piVar8 = piVar8 + -1;
          lVar15 = lVar15 + -1;
        } while (-1 < lVar15);
        uVar13 = 1;
        iVar17 = DAT_18006e3bc + DAT_18006e3a8;
      }
    }
    else {
      local_58._0_4_ = local_50[2];
      local_58._4_4_ = local_50[3];
      local_50[0] = local_40;
      uVar11 = DAT_18006e3ac - iVar12 >> 0x1f & 0x1f;
      iVar4 = (DAT_18006e3ac - iVar12) + uVar11;
      bVar6 = ((byte)iVar4 & 0x1f) - (char)uVar11;
      uVar5 = uVar13;
      uVar18 = uVar13;
      do {
        uVar11 = *(uint *)((longlong)&local_58 + uVar5 * 4);
        uVar5 = uVar5 + 1;
        (&uStack_5c)[uVar5] = uVar11 >> (bVar6 & 0x1f) | (uint)uVar18;
        uVar18 = (ulonglong)((uVar11 & ~(-1 << (bVar6 & 0x1f))) << (-bVar6 & 0x1f));
      } while ((longlong)uVar5 < 3);
      lVar15 = (longlong)(iVar4 >> 5);
      lVar7 = 2;
      piVar8 = local_50 + -lVar15;
      do {
        if (lVar7 < lVar15) {
          *(undefined4 *)((longlong)&local_58 + lVar7 * 4) = 0;
        }
        else {
          *(int *)((longlong)&local_58 + lVar7 * 4) = *piVar8;
        }
        piVar8 = piVar8 + -1;
        lVar7 = lVar7 + -1;
      } while (-1 < lVar7);
      uVar3 = DAT_18006e3b0 >> 0x1f & 0x1f;
      uVar11 = DAT_18006e3b0 + uVar3;
      iVar4 = (int)uVar11 >> 5;
      uVar11 = 0x1f - ((uVar11 & 0x1f) - uVar3);
      bVar6 = (byte)uVar11;
      if ((*(uint *)((longlong)&local_58 + (longlong)iVar4 * 4) >> (uVar11 & 0x1f) & 1) != 0) {
        if ((*(uint *)((longlong)&local_58 + (longlong)iVar4 * 4) & ~(-1 << (bVar6 & 0x1f))) == 0) {
          for (lVar7 = (longlong)(iVar4 + 1); lVar7 < 3; lVar7 = lVar7 + 1) {
            if (*(int *)((longlong)&local_58 + lVar7 * 4) != 0) goto LAB_18004be18;
          }
        }
        else {
LAB_18004be18:
          uVar11 = DAT_18006e3b0 + -1 >> 0x1f & 0x1f;
          iVar12 = DAT_18006e3b0 + -1 + uVar11;
          iVar16 = iVar12 >> 5;
          uVar3 = *(uint *)((longlong)&local_58 + (longlong)iVar16 * 4);
          uVar9 = 1 << (0x1f - (((byte)iVar12 & 0x1f) - (char)uVar11) & 0x1f);
          uVar11 = uVar3 + uVar9;
          if ((uVar11 < uVar3) || (uVar5 = uVar13, uVar11 < uVar9)) {
            uVar5 = 1;
          }
          *(uint *)((longlong)&local_58 + (longlong)iVar16 * 4) = uVar11;
          lVar7 = (longlong)(iVar16 + -1);
          if (-1 < iVar16 + -1) {
            do {
              if ((int)uVar5 == 0) break;
              uVar3 = *(uint *)((longlong)&local_58 + lVar7 * 4);
              uVar11 = uVar3 + 1;
              if ((uVar11 < uVar3) || (uVar5 = uVar13, uVar11 == 0)) {
                uVar5 = 1;
              }
              *(uint *)((longlong)&local_58 + lVar7 * 4) = uVar11;
              lVar7 = lVar7 + -1;
            } while (-1 < lVar7);
          }
        }
      }
      puVar1 = (uint *)((longlong)&local_58 + (longlong)iVar4 * 4);
      *puVar1 = *puVar1 & -1 << (bVar6 & 0x1f);
      lVar7 = (longlong)(iVar4 + 1);
      if (lVar7 < 3) {
        FUN_1800357d0((ulonglong *)((longlong)&local_58 + lVar7 * 4),0,(3 - lVar7) * 4);
      }
      uVar11 = DAT_18006e3b4 + 1 >> 0x1f & 0x1f;
      iVar4 = DAT_18006e3b4 + 1 + uVar11;
      bVar6 = ((byte)iVar4 & 0x1f) - (char)uVar11;
      uVar5 = uVar13;
      do {
        uVar11 = *(uint *)((longlong)&local_58 + uVar13 * 4);
        uVar13 = uVar13 + 1;
        (&uStack_5c)[uVar13] = uVar11 >> (bVar6 & 0x1f) | (uint)uVar5;
        uVar5 = (ulonglong)((~(-1 << (bVar6 & 0x1f)) & uVar11) << (0x20 - bVar6 & 0x1f));
      } while ((longlong)uVar13 < 3);
      lVar15 = (longlong)(iVar4 >> 5);
      lVar7 = 2;
      piVar8 = local_50 + -lVar15;
      do {
        if (lVar7 < lVar15) {
          *(undefined4 *)((longlong)&local_58 + lVar7 * 4) = 0;
        }
        else {
          *(int *)((longlong)&local_58 + lVar7 * 4) = *piVar8;
        }
        piVar8 = piVar8 + -1;
        lVar7 = lVar7 + -1;
      } while (-1 < lVar7);
      iVar17 = 0;
      uVar13 = 2;
    }
  }
  local_58._0_4_ =
       iVar17 << (0x1fU - (char)DAT_18006e3b4 & 0x1f) | -(uint)((uVar2 & 0x8000) != 0) & 0x80000000
       | (uint)local_58;
  if (DAT_18006e3b8 == 0x40) {
    param_2[1] = (uint)local_58;
    *param_2 = local_58._4_4_;
    return uVar13;
  }
  if (DAT_18006e3b8 == 0x20) {
    *param_2 = (uint)local_58;
  }
  return uVar13;
}


==================================================================

### EXPORT FUNC 18004c190 (1713 bytes) name=FUN_18004c190

ulonglong FUN_18004c190(ushort *param_1,uint *param_2)

{
  uint *puVar1;
  ushort uVar2;
  uint uVar3;
  int iVar4;
  ulonglong uVar5;
  byte bVar6;
  longlong lVar7;
  int *piVar8;
  uint uVar9;
  uint uVar10;
  uint uVar11;
  int iVar12;
  ulonglong uVar13;
  int iVar14;
  longlong lVar15;
  int iVar16;
  int iVar17;
  ulonglong uVar18;
  int iVar19;
  uint uStack_5c;
  undefined8 local_58;
  int local_50 [4];
  int local_40;
  
  iVar4 = DAT_18006e3c8;
  uVar2 = param_1[5];
  uVar11 = uVar2 & 0x7fff;
  iVar12 = uVar11 - 0x3fff;
  local_58._0_4_ = *(uint *)(param_1 + 3);
  local_58._4_4_ = *(uint *)(param_1 + 1);
  local_50[0] = (uint)*param_1 << 0x10;
  if (iVar12 == -0x3fff) {
    uVar13 = 0;
    iVar17 = 0;
    uVar5 = uVar13;
    do {
      if (*(int *)((longlong)&local_58 + uVar5 * 4) != 0) {
        local_58._0_4_ = 0;
        local_58._4_4_ = 0;
        uVar13 = 2;
        iVar17 = 0;
        break;
      }
      uVar5 = uVar5 + 1;
    } while ((longlong)uVar5 < 3);
  }
  else {
    local_50[2] = *(uint *)(param_1 + 3);
    local_50[3] = *(uint *)(param_1 + 1);
    local_40 = (uint)*param_1 << 0x10;
    uVar13 = 0;
    iVar17 = 0;
    uVar9 = DAT_18006e3c8 >> 0x1f & 0x1f;
    iVar16 = 0;
    uVar3 = DAT_18006e3c8 + uVar9;
    iVar19 = (int)uVar3 >> 5;
    uVar3 = 0x1f - ((uVar3 & 0x1f) - uVar9);
    bVar6 = (byte)uVar3;
    if ((*(uint *)((longlong)&local_58 + (longlong)iVar19 * 4) >> (uVar3 & 0x1f) & 1) != 0) {
      if ((*(uint *)((longlong)&local_58 + (longlong)iVar19 * 4) & ~(-1 << (bVar6 & 0x1f))) == 0) {
        for (lVar7 = (longlong)(iVar19 + 1); lVar7 < 3; lVar7 = lVar7 + 1) {
          if (*(int *)((longlong)&local_58 + lVar7 * 4) != 0) goto LAB_18004c2c2;
        }
      }
      else {
LAB_18004c2c2:
        uVar3 = DAT_18006e3c8 + -1 >> 0x1f & 0x1f;
        iVar16 = DAT_18006e3c8 + -1 + uVar3;
        iVar14 = iVar16 >> 5;
        uVar9 = *(uint *)((longlong)&local_58 + (longlong)iVar14 * 4);
        uVar10 = 1 << (0x1f - (((byte)iVar16 & 0x1f) - (char)uVar3) & 0x1f);
        uVar3 = uVar9 + uVar10;
        if ((uVar3 < uVar9) || (uVar5 = uVar13, uVar3 < uVar10)) {
          uVar5 = 1;
        }
        iVar16 = (int)uVar5;
        *(uint *)((longlong)&local_58 + (longlong)iVar14 * 4) = uVar3;
        lVar7 = (longlong)(iVar14 + -1);
        if (-1 < iVar14 + -1) {
          do {
            iVar16 = 0;
            if ((int)uVar5 == 0) break;
            uVar9 = *(uint *)((longlong)&local_58 + lVar7 * 4);
            uVar3 = uVar9 + 1;
            if ((uVar3 < uVar9) || (uVar5 = uVar13, uVar3 == 0)) {
              uVar5 = 1;
            }
            iVar16 = (int)uVar5;
            *(uint *)((longlong)&local_58 + lVar7 * 4) = uVar3;
            lVar7 = lVar7 + -1;
          } while (-1 < lVar7);
        }
      }
    }
    puVar1 = (uint *)((longlong)&local_58 + (longlong)iVar19 * 4);
    *puVar1 = *puVar1 & -1 << (bVar6 & 0x1f);
    lVar7 = (longlong)(iVar19 + 1);
    if (lVar7 < 3) {
      FUN_1800357d0((ulonglong *)((longlong)&local_58 + lVar7 * 4),0,(3 - lVar7) * 4);
    }
    iVar19 = iVar12;
    if (iVar16 != 0) {
      iVar19 = uVar11 - 0x3ffe;
    }
    if (iVar19 < DAT_18006e3c4 - iVar4) {
      local_58._0_4_ = 0;
      local_58._4_4_ = 0;
      uVar13 = 2;
    }
    else if (DAT_18006e3c4 < iVar19) {
      if (iVar19 < DAT_18006e3c0) {
        local_58._0_4_ = (uint)local_58 & 0x7fffffff;
        iVar17 = DAT_18006e3d4 + iVar19;
        uVar11 = DAT_18006e3cc >> 0x1f & 0x1f;
        iVar4 = DAT_18006e3cc + uVar11;
        bVar6 = ((byte)iVar4 & 0x1f) - (char)uVar11;
        uVar5 = uVar13;
        uVar18 = uVar13;
        do {
          uVar11 = *(uint *)((longlong)&local_58 + uVar5 * 4);
          uVar5 = uVar5 + 1;
          (&uStack_5c)[uVar5] = uVar11 >> (bVar6 & 0x1f) | (uint)uVar18;
          uVar18 = (ulonglong)((~(-1 << (bVar6 & 0x1f)) & uVar11) << (0x20 - bVar6 & 0x1f));
        } while ((longlong)uVar5 < 3);
        lVar7 = (longlong)(iVar4 >> 5);
        lVar15 = 2;
        piVar8 = local_50 + -lVar7;
        do {
          if (lVar15 < lVar7) {
            *(undefined4 *)((longlong)&local_58 + lVar15 * 4) = 0;
          }
          else {
            *(int *)((longlong)&local_58 + lVar15 * 4) = *piVar8;
          }
          piVar8 = piVar8 + -1;
          lVar15 = lVar15 + -1;
        } while (-1 < lVar15);
      }
      else {
        local_58._0_4_ = 0x80000000;
        local_58._4_4_ = 0;
        local_50[0] = 0;
        uVar11 = DAT_18006e3cc >> 0x1f & 0x1f;
        iVar4 = DAT_18006e3cc + uVar11;
        bVar6 = ((byte)iVar4 & 0x1f) - (char)uVar11;
        uVar5 = uVar13;
        do {
          uVar11 = *(uint *)((longlong)&local_58 + uVar13 * 4);
          uVar13 = uVar13 + 1;
          (&uStack_5c)[uVar13] = uVar11 >> (bVar6 & 0x1f) | (uint)uVar5;
          uVar5 = (ulonglong)((~(-1 << (bVar6 & 0x1f)) & uVar11) << (0x20 - bVar6 & 0x1f));
        } while ((longlong)uVar13 < 3);
        lVar7 = (longlong)(iVar4 >> 5);
        lVar15 = 2;
        piVar8 = local_50 + -lVar7;
        do {
          if (lVar15 < lVar7) {
            *(undefined4 *)((longlong)&local_58 + lVar15 * 4) = 0;
          }
          else {
            *(int *)((longlong)&local_58 + lVar15 * 4) = *piVar8;
          }
          piVar8 = piVar8 + -1;
          lVar15 = lVar15 + -1;
        } while (-1 < lVar15);
        uVar13 = 1;
        iVar17 = DAT_18006e3d4 + DAT_18006e3c0;
      }
    }
    else {
      local_58._0_4_ = local_50[2];
      local_58._4_4_ = local_50[3];
      local_50[0] = local_40;
      uVar11 = DAT_18006e3c4 - iVar12 >> 0x1f & 0x1f;
      iVar4 = (DAT_18006e3c4 - iVar12) + uVar11;
      bVar6 = ((byte)iVar4 & 0x1f) - (char)uVar11;
      uVar5 = uVar13;
      uVar18 = uVar13;
      do {
        uVar11 = *(uint *)((longlong)&local_58 + uVar5 * 4);
        uVar5 = uVar5 + 1;
        (&uStack_5c)[uVar5] = uVar11 >> (bVar6 & 0x1f) | (uint)uVar18;
        uVar18 = (ulonglong)((uVar11 & ~(-1 << (bVar6 & 0x1f))) << (-bVar6 & 0x1f));
      } while ((longlong)uVar5 < 3);
      lVar15 = (longlong)(iVar4 >> 5);
      lVar7 = 2;
      piVar8 = local_50 + -lVar15;
      do {
        if (lVar7 < lVar15) {
          *(undefined4 *)((longlong)&local_58 + lVar7 * 4) = 0;
        }
        else {
          *(int *)((longlong)&local_58 + lVar7 * 4) = *piVar8;
        }
        piVar8 = piVar8 + -1;
        lVar7 = lVar7 + -1;
      } while (-1 < lVar7);
      uVar3 = DAT_18006e3c8 >> 0x1f & 0x1f;
      uVar11 = DAT_18006e3c8 + uVar3;
      iVar4 = (int)uVar11 >> 5;
      uVar11 = 0x1f - ((uVar11 & 0x1f) - uVar3);
      bVar6 = (byte)uVar11;
      if ((*(uint *)((longlong)&local_58 + (longlong)iVar4 * 4) >> (uVar11 & 0x1f) & 1) != 0) {
        if ((*(uint *)((longlong)&local_58 + (longlong)iVar4 * 4) & ~(-1 << (bVar6 & 0x1f))) == 0) {
          for (lVar7 = (longlong)(iVar4 + 1); lVar7 < 3; lVar7 = lVar7 + 1) {
            if (*(int *)((longlong)&local_58 + lVar7 * 4) != 0) goto LAB_18004c4d8;
          }
        }
        else {
LAB_18004c4d8:
          uVar11 = DAT_18006e3c8 + -1 >> 0x1f & 0x1f;
          iVar12 = DAT_18006e3c8 + -1 + uVar11;
          iVar16 = iVar12 >> 5;
          uVar3 = *(uint *)((longlong)&local_58 + (longlong)iVar16 * 4);
          uVar9 = 1 << (0x1f - (((byte)iVar12 & 0x1f) - (char)uVar11) & 0x1f);
          uVar11 = uVar3 + uVar9;
          if ((uVar11 < uVar3) || (uVar5 = uVar13, uVar11 < uVar9)) {
            uVar5 = 1;
          }
          *(uint *)((longlong)&local_58 + (longlong)iVar16 * 4) = uVar11;
          lVar7 = (longlong)(iVar16 + -1);
          if (-1 < iVar16 + -1) {
            do {
              if ((int)uVar5 == 0) break;
              uVar3 = *(uint *)((longlong)&local_58 + lVar7 * 4);
              uVar11 = uVar3 + 1;
              if ((uVar11 < uVar3) || (uVar5 = uVar13, uVar11 == 0)) {
                uVar5 = 1;
              }
              *(uint *)((longlong)&local_58 + lVar7 * 4) = uVar11;
              lVar7 = lVar7 + -1;
            } while (-1 < lVar7);
          }
        }
      }
      puVar1 = (uint *)((longlong)&local_58 + (longlong)iVar4 * 4);
      *puVar1 = *puVar1 & -1 << (bVar6 & 0x1f);
      lVar7 = (longlong)(iVar4 + 1);
      if (lVar7 < 3) {
        FUN_1800357d0((ulonglong *)((longlong)&local_58 + lVar7 * 4),0,(3 - lVar7) * 4);
      }
      uVar11 = DAT_18006e3cc + 1 >> 0x1f & 0x1f;
      iVar4 = DAT_18006e3cc + 1 + uVar11;
      bVar6 = ((byte)iVar4 & 0x1f) - (char)uVar11;
      uVar5 = uVar13;
      do {
        uVar11 = *(uint *)((longlong)&local_58 + uVar13 * 4);
        uVar13 = uVar13 + 1;
        (&uStack_5c)[uVar13] = uVar11 >> (bVar6 & 0x1f) | (uint)uVar5;
        uVar5 = (ulonglong)((~(-1 << (bVar6 & 0x1f)) & uVar11) << (0x20 - bVar6 & 0x1f));
      } while ((longlong)uVar13 < 3);
      lVar15 = (longlong)(iVar4 >> 5);
      lVar7 = 2;
      piVar8 = local_50 + -lVar15;
      do {
        if (lVar7 < lVar15) {
          *(undefined4 *)((longlong)&local_58 + lVar7 * 4) = 0;
        }
        else {
          *(int *)((longlong)&local_58 + lVar7 * 4) = *piVar8;
        }
        piVar8 = piVar8 + -1;
        lVar7 = lVar7 + -1;
      } while (-1 < lVar7);
      iVar17 = 0;
      uVar13 = 2;
    }
  }
  local_58._0_4_ =
       iVar17 << (0x1fU - (char)DAT_18006e3cc & 0x1f) | -(uint)((uVar2 & 0x8000) != 0) & 0x80000000
       | (uint)local_58;
  if (DAT_18006e3d0 == 0x40) {
    param_2[1] = (uint)local_58;
    *param_2 = local_58._4_4_;
    return uVar13;
  }
  if (DAT_18006e3d0 == 0x20) {
    *param_2 = (uint)local_58;
  }
  return uVar13;
}


==================================================================

### EXPORT FUNC 18004c850 (2335 bytes) name=FUN_18004c850

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Removing unreachable block (ram,0x00018004cc37) */
/* WARNING: Removing unreachable block (ram,0x00018004cc43) */
/* WARNING: Removing unreachable block (ram,0x00018004cc4c) */
/* WARNING: Removing unreachable block (ram,0x00018004cc1f) */
/* WARNING: Removing unreachable block (ram,0x00018004d117) */
/* WARNING: Removing unreachable block (ram,0x00018004cc15) */
/* WARNING: Removing unreachable block (ram,0x00018004cc2d) */
/* WARNING: Removing unreachable block (ram,0x00018004cccd) */
/* WARNING: Removing unreachable block (ram,0x00018004d110) */
/* WARNING: Removing unreachable block (ram,0x00018004ccd6) */
/* WARNING: Removing unreachable block (ram,0x00018004cce0) */
/* WARNING: Removing unreachable block (ram,0x00018004ccf1) */
/* WARNING: Removing unreachable block (ram,0x00018004cd10) */
/* WARNING: Removing unreachable block (ram,0x00018004cd13) */
/* WARNING: Removing unreachable block (ram,0x00018004cd1b) */
/* WARNING: Removing unreachable block (ram,0x00018004cd23) */
/* WARNING: Removing unreachable block (ram,0x00018004cd28) */
/* WARNING: Removing unreachable block (ram,0x00018004cd30) */
/* WARNING: Removing unreachable block (ram,0x00018004d0fa) */
/* WARNING: Removing unreachable block (ram,0x00018004cd3d) */
/* WARNING: Removing unreachable block (ram,0x00018004d0ee) */
/* WARNING: Removing unreachable block (ram,0x00018004d121) */
/* WARNING: Removing unreachable block (ram,0x00018004cd4a) */
/* WARNING: Removing unreachable block (ram,0x00018004cd5e) */
/* WARNING: Removing unreachable block (ram,0x00018004cd60) */
/* WARNING: Removing unreachable block (ram,0x00018004cd6e) */
/* WARNING: Removing unreachable block (ram,0x00018004cd7d) */
/* WARNING: Removing unreachable block (ram,0x00018004cd81) */
/* WARNING: Removing unreachable block (ram,0x00018004cd8f) */
/* WARNING: Removing unreachable block (ram,0x00018004cda0) */
/* WARNING: Removing unreachable block (ram,0x00018004cdbe) */
/* WARNING: Removing unreachable block (ram,0x00018004cdd0) */
/* WARNING: Removing unreachable block (ram,0x00018004cdf7) */
/* WARNING: Removing unreachable block (ram,0x00018004ce36) */
/* WARNING: Removing unreachable block (ram,0x00018004ce41) */
/* WARNING: Removing unreachable block (ram,0x00018004d0af) */
/* WARNING: Removing unreachable block (ram,0x00018004ce4c) */
/* WARNING: Removing unreachable block (ram,0x00018004ce53) */
/* WARNING: Removing unreachable block (ram,0x00018004ce5c) */
/* WARNING: Removing unreachable block (ram,0x00018004ce61) */
/* WARNING: Removing unreachable block (ram,0x00018004ce71) */
/* WARNING: Removing unreachable block (ram,0x00018004ce77) */
/* WARNING: Removing unreachable block (ram,0x00018004ce87) */
/* WARNING: Removing unreachable block (ram,0x00018004ce8c) */
/* WARNING: Removing unreachable block (ram,0x00018004ce9c) */
/* WARNING: Removing unreachable block (ram,0x00018004cea2) */
/* WARNING: Removing unreachable block (ram,0x00018004cea7) */
/* WARNING: Removing unreachable block (ram,0x00018004ceb0) */
/* WARNING: Removing unreachable block (ram,0x00018004cec0) */
/* WARNING: Removing unreachable block (ram,0x00018004ced0) */
/* WARNING: Removing unreachable block (ram,0x00018004cee0) */
/* WARNING: Removing unreachable block (ram,0x00018004cefa) */
/* WARNING: Removing unreachable block (ram,0x00018004ceff) */
/* WARNING: Removing unreachable block (ram,0x00018004cf05) */
/* WARNING: Removing unreachable block (ram,0x00018004cf0e) */
/* WARNING: Removing unreachable block (ram,0x00018004cf12) */
/* WARNING: Removing unreachable block (ram,0x00018004cf21) */
/* WARNING: Removing unreachable block (ram,0x00018004cf32) */
/* WARNING: Removing unreachable block (ram,0x00018004cf50) */
/* WARNING: Removing unreachable block (ram,0x00018004cf89) */
/* WARNING: Removing unreachable block (ram,0x00018004cf57) */
/* WARNING: Removing unreachable block (ram,0x00018004cf87) */
/* WARNING: Removing unreachable block (ram,0x00018004cf8e) */
/* WARNING: Removing unreachable block (ram,0x00018004cf95) */
/* WARNING: Removing unreachable block (ram,0x00018004cfa3) */
/* WARNING: Removing unreachable block (ram,0x00018004cfaa) */
/* WARNING: Removing unreachable block (ram,0x00018004cfae) */
/* WARNING: Removing unreachable block (ram,0x00018004cfd1) */
/* WARNING: Removing unreachable block (ram,0x00018004cff3) */
/* WARNING: Removing unreachable block (ram,0x00018004cfdf) */
/* WARNING: Removing unreachable block (ram,0x00018004cff8) */
/* WARNING: Removing unreachable block (ram,0x00018004cffe) */
/* WARNING: Removing unreachable block (ram,0x00018004d00e) */
/* WARNING: Removing unreachable block (ram,0x00018004d067) */
/* WARNING: Removing unreachable block (ram,0x00018004d017) */
/* WARNING: Removing unreachable block (ram,0x00018004d024) */
/* WARNING: Removing unreachable block (ram,0x00018004d049) */
/* WARNING: Removing unreachable block (ram,0x00018004d037) */
/* WARNING: Removing unreachable block (ram,0x00018004d059) */
/* WARNING: Removing unreachable block (ram,0x00018004d06e) */
/* WARNING: Removing unreachable block (ram,0x00018004d072) */
/* WARNING: Removing unreachable block (ram,0x00018004d07f) */
/* WARNING: Removing unreachable block (ram,0x00018004d0b2) */
/* WARNING: Removing unreachable block (ram,0x00018004d0b7) */
/* WARNING: Removing unreachable block (ram,0x00018004d0bb) */
/* WARNING: Removing unreachable block (ram,0x00018004d0bf) */
/* WARNING: Removing unreachable block (ram,0x00018004d08b) */
/* WARNING: Removing unreachable block (ram,0x00018004ce7d) */
/* WARNING: Removing unreachable block (ram,0x00018004d0c7) */
/* WARNING: Removing unreachable block (ram,0x00018004d0cc) */
/* WARNING: Removing unreachable block (ram,0x00018004d0d5) */
/* WARNING: Removing unreachable block (ram,0x00018004d0d7) */
/* WARNING: Removing unreachable block (ram,0x00018004d127) */

undefined8
FUN_18004c850(undefined2 *param_1,longlong *param_2,char *param_3,int param_4,int param_5,
             int param_6,int param_7,longlong *param_8)

{
  char cVar1;
  DWORD *pDVar2;
  undefined8 uVar3;
  
  if (param_8 == (longlong *)0x0) {
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0;
  }
  for (; (((cVar1 = *param_3, cVar1 == ' ' || (cVar1 == '\t')) || (cVar1 == '\n')) ||
         (cVar1 == '\r')); param_3 = param_3 + 1) {
  }
                    /* WARNING: Could not recover jumptable at 0x00018004c936. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  uVar3 = (*(code *)((ulonglong)switchD_18004c936::switchdataD_18004d170 + 0x180000000))
                    ((code *)((ulonglong)switchD_18004c936::switchdataD_18004d170 + 0x180000000),
                     *param_3);
  return uVar3;
}


==================================================================

### EXPORT FUNC 18004d280 (3549 bytes) name=FUN_18004d280

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined4 FUN_18004d280(int *param_1,int param_2,uint param_3,short *param_4)

{
  int *piVar1;
  undefined8 uVar2;
  uint uVar3;
  uint uVar4;
  undefined1 uVar5;
  ushort uVar6;
  errno_t eVar7;
  undefined4 uVar8;
  uint uVar9;
  ushort uVar10;
  uint uVar11;
  ushort uVar12;
  ushort uVar13;
  longlong lVar14;
  short *psVar15;
  int iVar16;
  uint uVar17;
  uint uVar18;
  uint uVar19;
  char cVar20;
  ushort uVar21;
  uint uVar22;
  uint uVar23;
  int iVar24;
  ushort *puVar25;
  ulonglong uVar26;
  short *psVar27;
  short *psVar28;
  uint uVar29;
  ushort *puVar30;
  int *piVar31;
  undefined1 auStackY_e8 [32];
  short local_b4;
  int local_a0;
  byte local_88;
  undefined1 uStack_87;
  ushort uStack_86;
  short local_84 [6];
  ushort local_78 [5];
  undefined1 local_6e;
  byte bStack_6d;
  int local_68;
  int local_64;
  undefined4 local_60;
  undefined2 local_58;
  int iStack_56;
  undefined2 uStack_52;
  int local_50;
  ulonglong local_48;
  
  local_48 = DAT_18006cea0 ^ (ulonglong)auStackY_e8;
  uVar21 = *(ushort *)(param_1 + 2) & 0x7fff;
  uVar22 = param_1[1];
  uVar12 = *(ushort *)(param_1 + 2) & 0x8000;
  local_68 = -0x33333334;
  local_64 = -0x33333334;
  local_60 = 0x3ffbcccc;
  iVar24 = *param_1;
  if (uVar12 == 0) {
    *(undefined1 *)(param_4 + 1) = 0x20;
  }
  else {
    *(undefined1 *)(param_4 + 1) = 0x2d;
  }
  if (uVar21 == 0) {
    if ((uVar22 == 0) && (iVar24 == 0)) {
      uVar5 = 0x20;
      if (uVar12 == 0x8000) {
        uVar5 = 0x2d;
      }
      *param_4 = 0;
      *(undefined1 *)((longlong)param_4 + 3) = 1;
      *(undefined1 *)(param_4 + 2) = 0x30;
      *(undefined1 *)((longlong)param_4 + 5) = 0;
      *(undefined1 *)(param_4 + 1) = uVar5;
      return 1;
    }
  }
  else if (uVar21 == 0x7fff) {
    *param_4 = 1;
    if (((uVar22 == 0x80000000) && (iVar24 == 0)) || ((uVar22 >> 0x1e & 1) != 0)) {
      if ((uVar12 == 0) || (uVar22 != 0xc0000000)) {
        if ((uVar22 == 0x80000000) && (iVar24 == 0)) {
          eVar7 = strcpy_s((char *)(param_4 + 2),0x16,"1#INF");
          if (eVar7 != 0) {
                    /* WARNING: Subroutine does not return */
            FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
          }
          goto LAB_18004d46f;
        }
      }
      else if (iVar24 == 0) {
        eVar7 = strcpy_s((char *)(param_4 + 2),0x16,"1#IND");
        if (eVar7 != 0) {
                    /* WARNING: Subroutine does not return */
          FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
        }
LAB_18004d46f:
        *(undefined1 *)((longlong)param_4 + 3) = 5;
        return 0;
      }
      eVar7 = strcpy_s((char *)(param_4 + 2),0x16,"1#QNAN");
      if (eVar7 != 0) {
                    /* WARNING: Subroutine does not return */
        FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
      }
    }
    else {
      eVar7 = strcpy_s((char *)(param_4 + 2),0x16,"1#SNAN");
      if (eVar7 != 0) {
                    /* WARNING: Subroutine does not return */
        FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
      }
    }
    *(undefined1 *)((longlong)param_4 + 3) = 6;
    return 0;
  }
  local_6e = (undefined1)uVar21;
  bStack_6d = (byte)(uVar21 >> 8);
  local_78[1] = (ushort)iVar24;
  local_78[2] = (ushort)((uint)iVar24 >> 0x10);
  uVar17 = 0;
  local_78[3] = (ushort)uVar22;
  local_78[4] = (ushort)(uVar22 >> 0x10);
  local_78[0] = 0;
  local_a0 = 5;
  local_b4 = (short)(((uint)(uVar21 >> 8) + (uVar22 >> 0x18) * 2) * 0x4d + -0x134312f4 +
                     (uint)uVar21 * 0x4d10 >> 0x10);
  lVar14 = 0x18006e490;
  uVar22 = -(int)local_b4;
  if (uVar22 == 0) {
LAB_18004d96d:
    uVar18 = CONCAT22(local_78[3],local_78[2]);
    uVar29 = iVar24 << 0x10;
  }
  else {
    if ((int)uVar22 < 0) {
      lVar14 = 0x18006e5f0;
      uVar22 = (int)local_b4;
    }
    if (uVar22 == 0) goto LAB_18004d96d;
    uVar18 = CONCAT22(local_78[3],local_78[2]);
    uVar29 = iVar24 << 0x10;
    do {
      lVar14 = lVar14 + 0x54;
      uVar23 = (int)uVar22 >> 3;
      uVar22 = uVar22 & 7;
      if (uVar22 != 0) {
        piVar31 = (int *)(lVar14 + (longlong)(int)uVar22 * 0xc);
        if (0x7fff < *(ushort *)(lVar14 + (longlong)(int)uVar22 * 0xc)) {
          uVar2 = *(undefined8 *)piVar31;
          piVar1 = piVar31 + 2;
          piVar31 = (int *)&local_58;
          local_50 = *piVar1;
          uStack_52 = (undefined2)((ulonglong)uVar2 >> 0x30);
          _local_58 = CONCAT42((int)((ulonglong)uVar2 >> 0x10) + -1,(short)uVar2);
        }
        uVar10 = *(ushort *)((longlong)piVar31 + 10) & 0x7fff;
        local_84[0] = 0;
        local_84[1] = 0;
        uVar6 = CONCAT11(bStack_6d,local_6e) & 0x7fff;
        local_84[2] = 0;
        local_84[3] = 0;
        uVar13 = (*(ushort *)((longlong)piVar31 + 10) ^ CONCAT11(bStack_6d,local_6e)) & 0x8000;
        uVar21 = uVar6 + uVar10;
        if (((uVar6 < 0x7fff) && (uVar10 < 0x7fff)) && (uVar21 < 0xbffe)) {
          if (uVar21 < 0x3fc0) {
            local_78[4] = 0;
            local_6e = 0;
            bStack_6d = 0;
            local_78[2] = 0;
            local_78[3] = 0;
            local_78[0] = 0;
            local_78[1] = 0;
            uVar18 = uVar17;
            uVar29 = uVar17;
          }
          else if (((uVar6 == 0) &&
                   (uVar21 = uVar21 + 1,
                   (CONCAT13(bStack_6d,CONCAT12(local_6e,local_78[4])) & 0x7fffffff) == 0)) &&
                  ((uVar18 == 0 && (uVar29 == 0)))) {
            local_6e = 0;
            bStack_6d = 0;
          }
          else if (((uVar10 == 0) && (uVar21 = uVar21 + 1, (piVar31[2] & 0x7fffffffU) == 0)) &&
                  ((piVar31[1] == 0 && (*piVar31 == 0)))) {
            local_78[4] = 0;
            local_6e = 0;
            bStack_6d = 0;
            uVar18 = 0;
            local_78[2] = 0;
            local_78[3] = 0;
            uVar29 = 0;
            local_78[0] = 0;
            local_78[1] = 0;
          }
          else {
            uVar22 = 0;
            psVar15 = local_84;
            iVar24 = 5;
            do {
              if (0 < iVar24) {
                puVar25 = (ushort *)((longlong)local_78 + (longlong)(int)(uVar22 * 2));
                puVar30 = (ushort *)(piVar31 + 2);
                iVar16 = iVar24;
                do {
                  uVar29 = (uint)*puVar25 * (uint)*puVar30;
                  if ((uVar22 & 1) == 0) {
                    uVar18 = *(uint *)(psVar15 + -2) + uVar29;
                    if ((uVar18 < *(uint *)(psVar15 + -2)) || (uVar9 = uVar17, uVar18 < uVar29)) {
                      uVar9 = 1;
                    }
                    *(uint *)(psVar15 + -2) = uVar18;
                  }
                  else {
                    uVar18 = *(uint *)(psVar15 + -2) + uVar29;
                    if ((uVar18 < *(uint *)(psVar15 + -2)) || (uVar9 = 0, uVar18 < uVar29)) {
                      uVar9 = 1;
                    }
                    *(uint *)(psVar15 + -2) = uVar18;
                  }
                  if (uVar9 != 0) {
                    *psVar15 = *psVar15 + 1;
                  }
                  iVar16 = iVar16 + -1;
                  puVar25 = puVar25 + 1;
                  puVar30 = puVar30 + -1;
                } while (0 < iVar16);
              }
              iVar24 = iVar24 + -1;
              psVar15 = psVar15 + 1;
              uVar22 = uVar22 + 1;
            } while (0 < iVar24);
            uVar21 = uVar21 + 0xc002;
            if ((short)uVar21 < 1) {
              uVar18 = CONCAT22(local_84[3],local_84[2]);
              uVar22 = CONCAT22(local_84[1],local_84[0]);
            }
            else {
              uVar18 = CONCAT22(local_84[3],local_84[2]);
              uVar22 = CONCAT22(local_84[1],local_84[0]);
              do {
                uStack_86 = 0;
                uStack_87 = 0;
                local_88 = 0;
                uVar29 = 0;
                if ((int)uVar18 < 0) {
                  uVar9 = uVar22;
                  if (0 < (short)uVar21) goto LAB_18004d79f;
                  break;
                }
                uVar29 = uVar18 * 2;
                uVar9 = uVar22 * 2;
                uVar18 = uVar29 | uVar22 >> 0x1f;
                uVar21 = uVar21 - 1;
                local_84[0] = (short)uVar9;
                local_84[1] = (short)(uVar9 >> 0x10);
                local_84[2] = (short)uVar18;
                local_84[3] = (short)(uVar29 >> 0x10);
                uVar22 = uVar9;
              } while (0 < (short)uVar21);
            }
            uStack_86 = 0;
            uStack_87 = 0;
            local_88 = 0;
            uVar29 = 0;
            uVar21 = uVar21 - 1;
            uVar9 = uVar22;
            if ((short)uVar21 < 0) {
              iVar24 = 0;
              uVar26 = (ulonglong)(ushort)-uVar21;
              uVar21 = 0;
              do {
                uVar11 = uVar18;
                if ((local_88 & 1) != 0) {
                  iVar24 = iVar24 + 1;
                }
                uVar19 = uVar29 >> 1;
                uVar9 = uVar22 >> 1;
                uVar29 = uVar19 | uVar22 << 0x1f;
                uVar18 = uVar11 >> 1;
                uVar22 = uVar9 | uVar11 << 0x1f;
                uVar26 = uVar26 - 1;
                local_88 = (byte)uVar19;
                uStack_87 = (undefined1)(uVar19 >> 8);
                uStack_86 = (ushort)(uVar29 >> 0x10);
              } while (uVar26 != 0);
              local_84[0] = (short)uVar9;
              local_84[1] = (short)(uVar22 >> 0x10);
              uVar9 = CONCAT22(local_84[1],local_84[0]);
              local_84[2] = (short)uVar18;
              local_84[3] = (short)(uVar11 >> 0x11);
              if (iVar24 == 0) goto LAB_18004d79f;
              uVar6 = (ushort)uVar19 | 1;
              uVar29 = CONCAT22(uStack_86,(ushort)uVar19) | 1;
            }
            else {
LAB_18004d79f:
              uVar6 = CONCAT11(uStack_87,local_88);
            }
            local_84[1] = (short)(uVar9 >> 0x10);
            local_84[0] = (short)uVar9;
            if ((0x8000 < uVar6) || ((uVar29 & 0x1ffff) == 0x18000)) {
              if (CONCAT22(local_84[0],uStack_86) == -1) {
                uStack_86 = 0;
                local_84[0] = 0;
                if (CONCAT22(local_84[2],local_84[1]) == -1) {
                  local_84[1] = 0;
                  local_84[2] = 0;
                  if (local_84[3] == 0xffff) {
                    uVar22 = 0;
                    local_84[3] = 0x8000;
                    uVar18 = 0x80000000;
                    uVar21 = uVar21 + 1;
                  }
                  else {
                    uVar22 = 0;
                    local_84[3] = local_84[3] + 1;
                    uVar18 = (uint)(ushort)local_84[3] << 0x10;
                  }
                }
                else {
                  iVar24 = CONCAT22(local_84[2],local_84[1]) + 1;
                  local_84[1] = (short)iVar24;
                  local_84[2] = (short)((uint)iVar24 >> 0x10);
                  uVar18 = CONCAT22(local_84[3],local_84[2]);
                  uVar22 = iVar24 * 0x10000;
                }
              }
              else {
                iVar24 = CONCAT22(local_84[0],uStack_86) + 1;
                uStack_86 = (ushort)iVar24;
                local_84[0] = (short)((uint)iVar24 >> 0x10);
                uVar22 = CONCAT22(local_84[1],local_84[0]);
              }
            }
            if (uVar21 < 0x7fff) {
              bStack_6d = (byte)(uVar21 >> 8) | (byte)(uVar13 >> 8);
              local_78[1] = (ushort)uVar22;
              local_78[2] = (ushort)(uVar22 >> 0x10);
              local_78[0] = uStack_86;
              uVar29 = CONCAT22(local_78[1],uStack_86);
              local_78[3] = (ushort)uVar18;
              local_78[4] = (ushort)(uVar18 >> 0x10);
              uVar18 = CONCAT22(local_78[3],local_78[2]);
              local_6e = (undefined1)uVar21;
            }
            else {
              uVar18 = 0;
              uVar8 = 0x7fff8000;
              local_78[2] = 0;
              local_78[3] = 0;
              uVar29 = 0;
              if (uVar13 != 0) {
                uVar8 = 0xffff8000;
              }
              local_78[0] = 0;
              local_78[1] = 0;
              local_78[4] = (ushort)uVar8;
              local_6e = (undefined1)((uint)uVar8 >> 0x10);
              bStack_6d = (byte)((uint)uVar8 >> 0x18);
            }
          }
        }
        else {
          uVar8 = 0x7fff8000;
          if (uVar13 != 0) {
            uVar8 = 0xffff8000;
          }
          uVar18 = 0;
          local_78[2] = 0;
          local_78[3] = 0;
          uVar29 = 0;
          local_78[0] = 0;
          local_78[1] = 0;
          local_78[4] = (ushort)uVar8;
          local_6e = (undefined1)((uint)uVar8 >> 0x10);
          bStack_6d = (byte)((uint)uVar8 >> 0x18);
        }
      }
      uVar22 = uVar23;
    } while (uVar23 != 0);
  }
  uVar23 = 1;
  uVar22 = CONCAT13(bStack_6d,CONCAT12(local_6e,local_78[4]));
  uVar21 = (ushort)(uVar22 >> 0x10);
  if (uVar21 < 0x3fff) goto LAB_18004dce7;
  local_b4 = local_b4 + 1;
  iVar24 = 0;
  local_84[0] = 0;
  local_84[1] = 0;
  local_84[2] = 0;
  local_84[3] = 0;
  uVar10 = (local_60._2_2_ ^ uVar21) & 0x8000;
  uVar6 = (uVar21 & 0x7fff) + (local_60._2_2_ & 0x7fff);
  if (((0x7ffe < (uVar21 & 0x7fff)) || (0x7ffe < (local_60._2_2_ & 0x7fff))) || (0xbffd < uVar6)) {
    uVar18 = 0;
    uVar29 = 0;
    uVar8 = 0x7fff8000;
    if (uVar10 != 0) {
      uVar8 = 0xffff8000;
    }
    local_78[4] = (ushort)uVar8;
    local_6e = (undefined1)((uint)uVar8 >> 0x10);
    bStack_6d = (byte)((uint)uVar8 >> 0x18);
    goto LAB_18004dce7;
  }
  if (uVar6 < 0x3fc0) {
    local_78[4] = 0;
    local_6e = 0;
    bStack_6d = 0;
    uVar18 = 0;
    uVar29 = uVar17;
    goto LAB_18004dce7;
  }
  if ((((uVar22 & 0x7fff0000) == 0) &&
      (uVar6 = uVar6 + 1, (CONCAT13(bStack_6d,CONCAT12(local_6e,local_78[4])) & 0x7fffffff) == 0))
     && ((uVar18 == 0 && (uVar29 == 0)))) {
    local_6e = 0;
    bStack_6d = 0;
    goto LAB_18004dce7;
  }
  if ((((local_60 & 0x7fff0000) == 0) && (uVar6 = uVar6 + 1, (local_60 & 0x7fffffff) == 0)) &&
     ((local_64 == 0 && (local_68 == 0)))) {
    local_78[4] = 0;
    local_6e = 0;
    bStack_6d = 0;
    uVar18 = 0;
    uVar29 = 0;
    goto LAB_18004dce7;
  }
  uVar22 = 0;
  psVar15 = local_84;
  do {
    if (0 < local_a0) {
      puVar25 = (ushort *)&local_60;
      puVar30 = (ushort *)((longlong)local_78 + (longlong)(int)(uVar22 * 2));
      iVar16 = local_a0;
      do {
        uVar29 = (uint)*puVar25 * (uint)*puVar30;
        if ((uVar22 & 1) == 0) {
          uVar18 = *(uint *)(psVar15 + -2) + uVar29;
          if ((uVar18 < *(uint *)(psVar15 + -2)) || (uVar9 = uVar17, uVar18 < uVar29)) {
            uVar9 = uVar23;
          }
          *(uint *)(psVar15 + -2) = uVar18;
        }
        else {
          uVar18 = *(uint *)(psVar15 + -2) + uVar29;
          if ((uVar18 < *(uint *)(psVar15 + -2)) || (uVar9 = 0, uVar18 < uVar29)) {
            uVar9 = uVar23;
          }
          *(uint *)(psVar15 + -2) = uVar18;
        }
        if (uVar9 != 0) {
          *psVar15 = *psVar15 + 1;
        }
        iVar16 = iVar16 + -1;
        puVar30 = puVar30 + 1;
        puVar25 = puVar25 + -1;
      } while (0 < iVar16);
    }
    local_a0 = local_a0 + -1;
    psVar15 = psVar15 + 1;
    uVar22 = uVar22 + 1;
  } while (0 < local_a0);
  uVar6 = uVar6 + 0xc002;
  if ((short)uVar6 < 1) {
    uVar17 = CONCAT22(local_84[3],local_84[2]);
    uVar22 = CONCAT22(local_84[1],local_84[0]);
  }
  else {
    uVar17 = CONCAT22(local_84[3],local_84[2]);
    uVar22 = CONCAT22(local_84[1],local_84[0]);
    do {
      uStack_86 = 0;
      uStack_87 = 0;
      local_88 = 0;
      uVar29 = 0;
      if ((int)uVar17 < 0) {
        uVar18 = uVar22;
        if (0 < (short)uVar6) goto LAB_18004db75;
        break;
      }
      uVar29 = uVar17 * 2;
      uVar18 = uVar22 * 2;
      uVar17 = uVar29 | uVar22 >> 0x1f;
      uVar6 = uVar6 - 1;
      local_84[2] = (short)uVar17;
      local_84[3] = (short)(uVar29 >> 0x10);
      uVar22 = uVar18;
    } while (0 < (short)uVar6);
  }
  uStack_86 = 0;
  uStack_87 = 0;
  local_88 = 0;
  uVar29 = 0;
  uVar6 = uVar6 - 1;
  uVar18 = uVar22;
  if ((short)uVar6 < 0) {
    uVar26 = (ulonglong)(ushort)-uVar6;
    uVar6 = 0;
    do {
      uVar9 = uVar17;
      if ((local_88 & 1) != 0) {
        iVar24 = iVar24 + 1;
      }
      uVar11 = uVar29 >> 1;
      uVar18 = uVar22 >> 1;
      uVar29 = uVar11 | uVar22 << 0x1f;
      uVar17 = uVar9 >> 1;
      uVar22 = uVar18 | uVar9 << 0x1f;
      uVar26 = uVar26 - 1;
      local_88 = (byte)uVar11;
      uStack_87 = (undefined1)(uVar11 >> 8);
      uStack_86 = (ushort)(uVar29 >> 0x10);
    } while (uVar26 != 0);
    local_84[0] = (short)uVar18;
    local_84[1] = (short)(uVar22 >> 0x10);
    uVar18 = CONCAT22(local_84[1],local_84[0]);
    local_84[2] = (short)uVar17;
    local_84[3] = (short)(uVar9 >> 0x11);
    if (iVar24 == 0) goto LAB_18004db75;
    uVar21 = (ushort)uVar11 | 1;
    uVar29 = CONCAT22(uStack_86,(ushort)uVar11) | 1;
  }
  else {
LAB_18004db75:
    uVar21 = CONCAT11(uStack_87,local_88);
  }
  local_84[1] = (short)(uVar18 >> 0x10);
  local_84[0] = (short)uVar18;
  if ((0x8000 < uVar21) || ((uVar29 & 0x1ffff) == 0x18000)) {
    if (CONCAT22(local_84[0],uStack_86) == -1) {
      uStack_86 = 0;
      if (CONCAT22(local_84[2],local_84[1]) == -1) {
        if (local_84[3] == 0xffff) {
          uVar22 = 0;
          uVar17 = 0x80000000;
          uVar6 = uVar6 + 1;
        }
        else {
          uVar22 = 0;
          uVar17 = (uint)(ushort)(local_84[3] + 1) << 0x10;
        }
      }
      else {
        iVar24 = CONCAT22(local_84[2],local_84[1]) + 1;
        local_84[2] = (short)((uint)iVar24 >> 0x10);
        uVar17 = CONCAT22(local_84[3],local_84[2]);
        uVar22 = iVar24 * 0x10000;
      }
    }
    else {
      iVar24 = CONCAT22(local_84[0],uStack_86) + 1;
      uStack_86 = (ushort)iVar24;
      local_84[0] = (short)((uint)iVar24 >> 0x10);
      uVar22 = CONCAT22(local_84[1],local_84[0]);
    }
  }
  if (uVar6 < 0x7fff) {
    local_78[1] = (ushort)uVar22;
    local_78[2] = (ushort)(uVar22 >> 0x10);
    bStack_6d = (byte)(uVar6 >> 8) | (byte)(uVar10 >> 8);
    local_78[3] = (ushort)uVar17;
    local_78[4] = (ushort)(uVar17 >> 0x10);
    uVar18 = CONCAT22(local_78[3],local_78[2]);
    uVar29 = CONCAT22(local_78[1],uStack_86);
    local_6e = (undefined1)uVar6;
  }
  else {
    uVar8 = 0x7fff8000;
    if (uVar10 != 0) {
      uVar8 = 0xffff8000;
    }
    uVar18 = 0;
    uVar29 = 0;
    local_78[4] = (ushort)uVar8;
    local_6e = (undefined1)((uint)uVar8 >> 0x10);
    bStack_6d = (byte)((uint)uVar8 >> 0x18);
  }
LAB_18004dce7:
  *param_4 = local_b4;
  if (((param_3 & 1) == 0) || (param_2 = param_2 + local_b4, 0 < param_2)) {
    if (0x15 < param_2) {
      param_2 = 0x15;
    }
    uVar22 = (uVar18 * 2 | uVar29 >> 0x1f) * 2;
    uVar9 = (uVar22 | (uVar29 & 0x7fffffff) >> 0x1e) * 2;
    uVar11 = (uVar9 | (uVar29 & 0x3fffffff) >> 0x1d) * 2;
    uVar19 = (uVar11 | (uVar29 & 0x1fffffff) >> 0x1c) * 2;
    uVar3 = (uVar19 | (uVar29 & 0xfffffff) >> 0x1b) * 2;
    uVar4 = ((uVar3 | (uVar29 & 0x7ffffff) >> 0x1a) * 2 | (uVar29 & 0x3ffffff) >> 0x19) * 2;
    uVar17 = uVar29 * 0x100;
    uVar22 = ((((((((uint)local_78[4] * 2 | uVar18 >> 0x1f) * 2 | (uVar18 & 0x7fffffff) >> 0x1e) * 2
                 | (uVar18 * 2 & 0x7fffffff) >> 0x1e) * 2 | (uVar22 & 0x7fffffff) >> 0x1e) * 2 |
               (uVar9 & 0x7fffffff) >> 0x1e) * 2 | (uVar11 & 0x7fffffff) >> 0x1e) * 2 |
             (uVar19 & 0x7fffffff) >> 0x1e) * 2;
    uVar18 = uVar4 | (uVar29 & 0x1ffffff) >> 0x18;
    uVar29 = uVar22 | (uVar3 & 0x7fffffff) >> 0x1e;
    local_78[2] = (ushort)uVar18;
    local_78[3] = (ushort)(uVar4 >> 0x10);
    iVar24 = (CONCAT13(bStack_6d,CONCAT12(local_6e,local_78[4])) >> 0x10) - 0x3ffe;
    local_78[4] = (ushort)uVar29;
    local_6e = (undefined1)(uVar22 >> 0x10);
    if ((iVar24 < 0) && (uVar22 = -iVar24 & 0xff, uVar22 != 0)) {
      do {
        uVar19 = uVar18 >> 1;
        uVar9 = uVar29 << 0x1f;
        uVar11 = uVar18 << 0x1f;
        uVar22 = uVar22 - 1;
        uVar29 = uVar29 >> 1;
        uVar18 = uVar19 | uVar9;
        uVar17 = uVar17 >> 1 | uVar11;
      } while (0 < (int)uVar22);
      local_78[2] = (ushort)uVar19;
      local_78[3] = (ushort)(uVar18 >> 0x10);
      local_78[4] = (ushort)uVar29;
      local_6e = (undefined1)(uVar29 >> 0x10);
    }
    iVar24 = param_2 + 1;
    psVar15 = param_4 + 2;
    psVar27 = psVar15;
    psVar28 = psVar15;
    if (0 < iVar24) {
      while( true ) {
        uVar9 = (uVar18 * 2 | uVar17 >> 0x1f) * 2 | (uVar17 & 0x7fffffff) >> 0x1e;
        uVar22 = uVar17 * 5;
        uVar29 = (uVar29 * 2 | uVar18 >> 0x1f) * 2 | (uVar18 & 0x7fffffff) >> 0x1e;
        if ((uVar22 < uVar17 * 4) || (uVar18 = uVar9, uVar22 < uVar17)) {
          uVar18 = uVar9 + 1;
          if ((uVar18 < uVar9) || (uVar9 = 0, uVar18 == 0)) {
            uVar9 = uVar23;
          }
          if (uVar9 != 0) {
            uVar29 = uVar29 + 1;
          }
        }
        uVar9 = (uint)(CONCAT26(local_78[3],CONCAT24(local_78[2],uVar17)) >> 0x20);
        uVar11 = uVar18 + uVar9;
        if ((uVar11 < uVar18) || (uVar11 < uVar9)) {
          uVar29 = uVar29 + 1;
        }
        uVar17 = uVar17 * 10;
        iVar24 = iVar24 + -1;
        psVar27 = (short *)((longlong)psVar28 + 1);
        uVar18 = uVar11 * 2 | uVar22 >> 0x1f;
        uVar22 = (uVar29 + CONCAT12(local_6e,local_78[4])) * 2;
        local_78[4] = (ushort)uVar22 | (ushort)(uVar11 >> 0x1f);
        local_78[2] = (ushort)uVar18;
        local_78[3] = (ushort)(uVar11 * 2 >> 0x10);
        local_6e = (undefined1)(uVar22 >> 0x10);
        *(char *)psVar28 = (char)(uVar22 >> 0x18) + '0';
        if (iVar24 < 1) break;
        uVar29 = uVar22 & 0xffffff | uVar11 >> 0x1f;
        psVar28 = psVar27;
      }
    }
    psVar28 = psVar27 + -1;
    if (*(char *)((longlong)psVar27 + -1) < '5') {
      for (; (psVar15 <= psVar28 && ((char)*psVar28 == '0'));
          psVar28 = (short *)((longlong)psVar28 + -1)) {
      }
      if (psVar28 < psVar15) {
        uVar5 = 0x20;
        if (uVar12 == 0x8000) {
          uVar5 = 0x2d;
        }
        *param_4 = 0;
        *(undefined1 *)((longlong)param_4 + 3) = 1;
        *(char *)psVar15 = '0';
        *(undefined1 *)((longlong)param_4 + 5) = 0;
        *(undefined1 *)(param_4 + 1) = uVar5;
        return 1;
      }
    }
    else {
      for (; (psVar15 <= psVar28 && ((char)*psVar28 == '9'));
          psVar28 = (short *)((longlong)psVar28 + -1)) {
        *(char *)psVar28 = '0';
      }
      if (psVar28 < psVar15) {
        psVar28 = (short *)((longlong)psVar28 + 1);
        *param_4 = *param_4 + 1;
      }
      *(char *)psVar28 = (char)*psVar28 + '\x01';
    }
    cVar20 = ((char)psVar28 - (char)param_4) + -3;
    *(char *)((longlong)param_4 + 3) = cVar20;
    *(undefined1 *)((longlong)cVar20 + 4 + (longlong)param_4) = 0;
  }
  else {
    uVar5 = 0x20;
    if (uVar12 == 0x8000) {
      uVar5 = 0x2d;
    }
    *param_4 = 0;
    *(undefined1 *)((longlong)param_4 + 3) = 1;
    *(undefined1 *)(param_4 + 2) = 0x30;
    *(undefined1 *)((longlong)param_4 + 5) = 0;
    *(undefined1 *)(param_4 + 1) = uVar5;
  }
  return 1;
}


==================================================================

### EXPORT FUNC 18004e080 (60 bytes) name=__initconout

/* Library Function - Single Match
    __initconout
   
   Library: Visual Studio 2005 Release */

void __cdecl __initconout(void)

{
  DAT_18006e3e0 = CreateFileA("CONOUT$",0x40000000,3,(LPSECURITY_ATTRIBUTES)0x0,3,0,(HANDLE)0x0);
  return;
}


==================================================================

### EXPORT FUNC 18004e0c0 (59 bytes) name=__termcon

/* Library Function - Single Match
    __termcon
   
   Libraries: Visual Studio 2005 Release, Visual Studio 2008 Release */

void __termcon(void)

{
  if ((DAT_18006e3e0 != (HANDLE)0xffffffffffffffff) && (DAT_18006e3e0 != (HANDLE)0xfffffffffffffffe)
     ) {
    CloseHandle(DAT_18006e3e0);
  }
  if ((DAT_18006e3d8 != (HANDLE)0xffffffffffffffff) && (DAT_18006e3d8 != (HANDLE)0xfffffffffffffffe)
     ) {
    CloseHandle(DAT_18006e3d8);
  }
  return;
}


==================================================================

### EXPORT FUNC 18004e100 (152 bytes) name=FUN_18004e100

undefined4 FUN_18004e100(FILE *param_1)

{
  undefined4 uVar1;
  uint uVar2;
  DWORD *pDVar3;
  undefined8 uVar4;
  ulonglong uVar5;
  
  uVar1 = 0xffffffff;
  if (param_1 == (FILE *)0x0) {
    pDVar3 = FUN_180035b40();
    *pDVar3 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffff;
  }
  if ((param_1->_flag & 0x83) != 0) {
    uVar4 = FUN_18004a800((int *)param_1);
    uVar1 = (undefined4)uVar4;
    _freebuf(param_1);
    uVar2 = FUN_180047880((longlong)param_1);
    uVar5 = FUN_18004fdd0(uVar2);
    if ((int)uVar5 < 0) {
      uVar1 = 0xffffffff;
    }
    else if (param_1->_tmpfname != (char *)0x0) {
      FUN_180034a70(param_1->_tmpfname);
      param_1->_tmpfname = (char *)0x0;
    }
  }
  param_1->_flag = 0;
  return uVar1;
}


==================================================================

### EXPORT FUNC 18004e1a0 (124 bytes) name=FUN_18004e1a0

undefined4 FUN_18004e1a0(FILE *param_1)

{
  undefined4 uVar1;
  DWORD *pDVar2;
  
  uVar1 = 0xffffffff;
  if (param_1 == (FILE *)0x0) {
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    uVar1 = 0xffffffff;
  }
  else if ((param_1->_flag & 0x40) == 0) {
    FUN_180047760((ulonglong)param_1);
    uVar1 = FUN_18004e100(param_1);
    FUN_180047810((ulonglong)param_1);
  }
  else {
    param_1->_flag = 0;
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 18004e220 (24 bytes) name=FUN_18004e220

void FUN_18004e220(undefined8 param_1,longlong param_2)

{
  FUN_180047810(*(ulonglong *)(param_2 + 0x40));
  return;
}


==================================================================

### EXPORT FUNC 18004e240 (281 bytes) name=FUN_18004e240

undefined4 FUN_18004e240(uint param_1)

{
  BOOL BVar1;
  DWORD DVar2;
  DWORD *pDVar3;
  HANDLE hFile;
  undefined4 uVar4;
  
  if (param_1 == 0xfffffffe) {
    pDVar3 = FUN_180035b40();
    *pDVar3 = 9;
    return 0xffffffff;
  }
  if (((int)param_1 < 0) || (DAT_1800db4c8 <= param_1)) {
    pDVar3 = FUN_180035b40();
    *pDVar3 = 9;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffff;
  }
  if ((*(byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 +
                (ulonglong)(param_1 & 0x1f) * 0x50) & 1) == 0) {
    pDVar3 = FUN_180035b40();
    *pDVar3 = 9;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffff;
  }
  FUN_18004a4e0(param_1);
  if ((*(byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 +
                (ulonglong)(param_1 & 0x1f) * 0x50) & 1) != 0) {
    hFile = (HANDLE)FUN_18004a440(param_1);
    BVar1 = FlushFileBuffers(hFile);
    if (BVar1 != 0) {
      uVar4 = 0;
      goto LAB_18004e31c;
    }
    DVar2 = GetLastError();
    uVar4 = 0;
    if (DVar2 == 0) goto LAB_18004e31c;
    pDVar3 = FUN_180035b70();
    *pDVar3 = DVar2;
  }
  pDVar3 = FUN_180035b40();
  *pDVar3 = 9;
  uVar4 = 0xffffffff;
LAB_18004e31c:
  FUN_18004a5b0(param_1);
  return uVar4;
}


==================================================================

### EXPORT FUNC 18004e360 (23 bytes) name=FUN_18004e360

void FUN_18004e360(undefined8 param_1,longlong param_2)

{
  FUN_18004a5b0(*(uint *)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 18004e380 (2305 bytes) name=FUN_18004e380

int FUN_18004e380(uint param_1,LPWSTR param_2,uint param_3)

{
  byte *pbVar1;
  byte bVar2;
  longlong lVar3;
  WCHAR WVar4;
  BOOL BVar5;
  int iVar6;
  DWORD DVar7;
  DWORD *pDVar8;
  ulonglong uVar9;
  LPWSTR lpMultiByteStr;
  undefined8 uVar10;
  LPWSTR pWVar11;
  uint uVar12;
  uint nNumberOfBytesToRead;
  int iVar13;
  LPWSTR pWVar14;
  int iVar15;
  LPWSTR pWVar16;
  WCHAR *pWVar17;
  longlong lVar18;
  char cVar19;
  char local_res18 [8];
  undefined2 local_res20;
  DWORD local_58;
  uint local_54;
  
  iVar13 = -2;
  local_54 = param_3;
  if (param_1 == 0xfffffffe) {
    pDVar8 = FUN_180035b70();
    *pDVar8 = 0;
    pDVar8 = FUN_180035b40();
    *pDVar8 = 9;
    return -1;
  }
  if (((int)param_1 < 0) || (DAT_1800db4c8 <= param_1)) {
    pDVar8 = FUN_180035b70();
    *pDVar8 = 0;
    pDVar8 = FUN_180035b40();
    *pDVar8 = 9;
    FUN_1800384e0(0,0,0,0,0);
    return -1;
  }
  uVar9 = (ulonglong)(param_1 & 0x1f);
  lVar18 = (longlong)(int)param_1 >> 5;
  bVar2 = *(byte *)((&DAT_1800db4e0)[lVar18] + 8 + uVar9 * 0x50);
  if ((bVar2 & 1) == 0) {
    pDVar8 = FUN_180035b70();
    *pDVar8 = 0;
    pDVar8 = FUN_180035b40();
    *pDVar8 = 9;
  }
  else {
    if (param_3 < 0x80000000) {
      if ((param_3 == 0) || ((bVar2 & 2) != 0)) {
        return 0;
      }
      if (param_2 == (LPWSTR)0x0) {
        pDVar8 = FUN_180035b70();
        *pDVar8 = 0;
        pDVar8 = FUN_180035b40();
        *pDVar8 = 0x16;
        FUN_1800384e0(0,0,0,0,0);
        return -1;
      }
      cVar19 = (char)(*(char *)((&DAT_1800db4e0)[lVar18] + 0x38 + uVar9 * 0x50) * '\x02') >> 1;
      if (cVar19 == '\x01') {
        if ((~param_3 & 1) == 0) {
LAB_18004e4ec:
          pDVar8 = FUN_180035b70();
          *pDVar8 = 0;
          pDVar8 = FUN_180035b40();
          *pDVar8 = 0x16;
          FUN_1800384e0(0,0,0,0,0);
          return -1;
        }
        uVar12 = param_3 >> 1;
        if (param_3 >> 1 < 4) {
          uVar12 = 4;
        }
        lpMultiByteStr = (LPWSTR)FUN_180040de0((ulonglong)uVar12);
        if (lpMultiByteStr == (LPWSTR)0x0) {
          pDVar8 = FUN_180035b40();
          *pDVar8 = 0xc;
          pDVar8 = FUN_180035b70();
          *pDVar8 = 8;
          return -1;
        }
        uVar10 = FUN_180046a60(param_1,0,1);
        *(undefined8 *)((&DAT_1800db4e0)[lVar18] + 0x40 + uVar9 * 0x50) = uVar10;
      }
      else {
        lpMultiByteStr = param_2;
        uVar12 = param_3;
        if (cVar19 == '\x02') {
          if ((~param_3 & 1) == 0) goto LAB_18004e4ec;
          uVar12 = param_3 & 0xfffffffe;
        }
      }
      pWVar11 = lpMultiByteStr;
      nNumberOfBytesToRead = uVar12;
      iVar15 = 0;
      if ((((*(byte *)((&DAT_1800db4e0)[lVar18] + 8 + uVar9 * 0x50) & 0x48) != 0) &&
          (bVar2 = *(byte *)((&DAT_1800db4e0)[lVar18] + 9 + uVar9 * 0x50), iVar15 = 0, bVar2 != 10))
         && (uVar12 != 0)) {
        *(byte *)lpMultiByteStr = bVar2;
        nNumberOfBytesToRead = uVar12 - 1;
        pWVar11 = (LPWSTR)((longlong)lpMultiByteStr + 1);
        iVar15 = 1;
        *(undefined1 *)((&DAT_1800db4e0)[lVar18] + 9 + uVar9 * 0x50) = 10;
        if (((cVar19 != '\0') &&
            (bVar2 = *(byte *)((&DAT_1800db4e0)[lVar18] + 0x39 + uVar9 * 0x50), bVar2 != 10)) &&
           (nNumberOfBytesToRead != 0)) {
          *(byte *)pWVar11 = bVar2;
          pWVar11 = lpMultiByteStr + 1;
          nNumberOfBytesToRead = uVar12 - 2;
          iVar15 = 2;
          *(undefined1 *)((&DAT_1800db4e0)[lVar18] + 0x39 + uVar9 * 0x50) = 10;
          if (((cVar19 == '\x01') &&
              (bVar2 = *(byte *)((&DAT_1800db4e0)[lVar18] + 0x3a + uVar9 * 0x50), bVar2 != 10)) &&
             (nNumberOfBytesToRead != 0)) {
            *(byte *)pWVar11 = bVar2;
            pWVar11 = (LPWSTR)((longlong)lpMultiByteStr + 3);
            iVar15 = 3;
            nNumberOfBytesToRead = uVar12 - 3;
            *(undefined1 *)((&DAT_1800db4e0)[lVar18] + 0x3a + uVar9 * 0x50) = 10;
          }
        }
      }
      BVar5 = ReadFile(*(HANDLE *)((&DAT_1800db4e0)[lVar18] + uVar9 * 0x50),pWVar11,
                       nNumberOfBytesToRead,&local_58,(LPOVERLAPPED)0x0);
      if (((BVar5 == 0) || ((int)local_58 < 0)) ||
         ((ulonglong)nNumberOfBytesToRead < (ulonglong)(longlong)(int)local_58)) {
        DVar7 = GetLastError();
        if (DVar7 == 5) {
          pDVar8 = FUN_180035b40();
          *pDVar8 = 9;
          pDVar8 = FUN_180035b70();
          *pDVar8 = 5;
          iVar13 = -1;
        }
        else {
          iVar13 = 0;
          if (DVar7 != 0x6d) {
            _dosmaperr(DVar7);
            iVar13 = -1;
          }
        }
      }
      else {
        iVar15 = iVar15 + local_58;
        lVar3 = (&DAT_1800db4e0)[lVar18];
        if ((*(byte *)(lVar3 + 8 + uVar9 * 0x50) & 0x80) != 0) {
          iVar13 = (int)lpMultiByteStr;
          if (cVar19 == '\x02') {
            if ((local_58 == 0) || (*lpMultiByteStr != L'\n')) {
              pbVar1 = (byte *)(lVar3 + 8 + uVar9 * 0x50);
              *pbVar1 = *pbVar1 & 0xfb;
            }
            else {
              pbVar1 = (byte *)(lVar3 + 8 + uVar9 * 0x50);
              *pbVar1 = *pbVar1 | 4;
            }
            pWVar11 = lpMultiByteStr;
            pWVar17 = lpMultiByteStr;
            while (pWVar16 = pWVar11,
                  pWVar17 < (WCHAR *)((longlong)iVar15 + (longlong)lpMultiByteStr)) {
              WVar4 = *pWVar17;
              if (WVar4 == L'\x1a') {
                if ((*(byte *)((&DAT_1800db4e0)[lVar18] + 8 + uVar9 * 0x50) & 0x40) == 0) {
                  pbVar1 = (byte *)((&DAT_1800db4e0)[lVar18] + 8 + uVar9 * 0x50);
                  *pbVar1 = *pbVar1 | 2;
                }
                else {
                  pWVar16 = pWVar11 + 1;
                  *pWVar11 = *pWVar17;
                }
                break;
              }
              if (WVar4 == L'\r') {
                if (pWVar17 < (WCHAR *)((longlong)iVar15 + (longlong)lpMultiByteStr) + -1) {
                  if (pWVar17[1] == L'\n') {
                    *pWVar11 = L'\n';
                    pWVar11 = pWVar11 + 1;
                    pWVar17 = pWVar17 + 2;
                  }
                  else {
                    *pWVar11 = L'\r';
                    pWVar11 = pWVar11 + 1;
                    pWVar17 = pWVar17 + 1;
                  }
                }
                else {
                  pWVar17 = pWVar17 + 1;
                  BVar5 = ReadFile(*(HANDLE *)((&DAT_1800db4e0)[lVar18] + uVar9 * 0x50),&local_res20
                                   ,2,&local_58,(LPOVERLAPPED)0x0);
                  if (((BVar5 == 0) && (DVar7 = GetLastError(), DVar7 != 0)) || (local_58 == 0)) {
                    *pWVar11 = L'\r';
                    pWVar11 = pWVar11 + 1;
                  }
                  else if ((*(byte *)((&DAT_1800db4e0)[lVar18] + 8 + uVar9 * 0x50) & 0x48) == 0) {
                    if ((pWVar11 == lpMultiByteStr) && (local_res20 == 10)) {
                      *pWVar11 = L'\n';
                      pWVar11 = pWVar11 + 1;
                    }
                    else {
                      FUN_180046a60(param_1,0xfffffffffffffffe,1);
                      if (local_res20 != 10) {
                        *pWVar11 = L'\r';
                        pWVar11 = pWVar11 + 1;
                      }
                    }
                  }
                  else if (local_res20 == 10) {
                    *pWVar11 = L'\n';
                    pWVar11 = pWVar11 + 1;
                  }
                  else {
                    *pWVar11 = L'\r';
                    *(undefined1 *)((&DAT_1800db4e0)[lVar18] + 9 + uVar9 * 0x50) =
                         (undefined1)local_res20;
                    *(undefined1 *)((&DAT_1800db4e0)[lVar18] + 0x39 + uVar9 * 0x50) =
                         local_res20._1_1_;
                    pWVar11 = pWVar11 + 1;
                    *(undefined1 *)((&DAT_1800db4e0)[lVar18] + 0x3a + uVar9 * 0x50) = 10;
                  }
                }
              }
              else {
                *pWVar11 = WVar4;
                pWVar11 = pWVar11 + 1;
                pWVar17 = pWVar17 + 1;
              }
            }
            iVar15 = (int)pWVar16 - iVar13;
            iVar13 = -2;
          }
          else {
            if ((local_58 == 0) || ((byte)*lpMultiByteStr != 10)) {
              pbVar1 = (byte *)(lVar3 + 8 + uVar9 * 0x50);
              *pbVar1 = *pbVar1 & 0xfb;
            }
            else {
              pbVar1 = (byte *)(lVar3 + 8 + uVar9 * 0x50);
              *pbVar1 = *pbVar1 | 4;
            }
            pWVar11 = lpMultiByteStr;
            pWVar16 = lpMultiByteStr;
            while (pWVar14 = pWVar11,
                  pWVar16 < (LPWSTR)((longlong)iVar15 + (longlong)lpMultiByteStr)) {
              bVar2 = (byte)*pWVar16;
              if (bVar2 == 0x1a) {
                if ((*(byte *)((&DAT_1800db4e0)[lVar18] + 8 + uVar9 * 0x50) & 0x40) == 0) {
                  pbVar1 = (byte *)((&DAT_1800db4e0)[lVar18] + 8 + uVar9 * 0x50);
                  *pbVar1 = *pbVar1 | 2;
                }
                else {
                  pWVar14 = (LPWSTR)((longlong)pWVar11 + 1);
                  *(byte *)pWVar11 = (byte)*pWVar16;
                }
                break;
              }
              if (bVar2 == 0xd) {
                if (pWVar16 < (LPWSTR)(((longlong)iVar15 + (longlong)lpMultiByteStr) - 1U)) {
                  if (*(byte *)((longlong)pWVar16 + 1) == 10) {
                    *(byte *)pWVar11 = 10;
                    pWVar11 = (LPWSTR)((longlong)pWVar11 + 1);
                    pWVar16 = pWVar16 + 1;
                  }
                  else {
                    *(byte *)pWVar11 = 0xd;
                    pWVar11 = (LPWSTR)((longlong)pWVar11 + 1);
                    pWVar16 = (LPWSTR)((longlong)pWVar16 + 1);
                  }
                }
                else {
                  pWVar16 = (LPWSTR)((longlong)pWVar16 + 1);
                  BVar5 = ReadFile(*(HANDLE *)((&DAT_1800db4e0)[lVar18] + uVar9 * 0x50),local_res18,
                                   1,&local_58,(LPOVERLAPPED)0x0);
                  if (((BVar5 == 0) && (DVar7 = GetLastError(), DVar7 != 0)) || (local_58 == 0)) {
                    *(byte *)pWVar11 = 0xd;
                    pWVar11 = (LPWSTR)((longlong)pWVar11 + 1);
                  }
                  else if ((*(byte *)((&DAT_1800db4e0)[lVar18] + 8 + uVar9 * 0x50) & 0x48) == 0) {
                    if ((pWVar11 == lpMultiByteStr) && (local_res18[0] == '\n')) {
                      *(byte *)pWVar11 = 10;
                      pWVar11 = (LPWSTR)((longlong)pWVar11 + 1);
                    }
                    else {
                      FUN_180046a60(param_1,0xffffffffffffffff,1);
                      if (local_res18[0] != '\n') {
                        *(byte *)pWVar11 = 0xd;
                        pWVar11 = (LPWSTR)((longlong)pWVar11 + 1);
                      }
                    }
                  }
                  else if (local_res18[0] == '\n') {
                    *(byte *)pWVar11 = 10;
                    pWVar11 = (LPWSTR)((longlong)pWVar11 + 1);
                  }
                  else {
                    *(byte *)pWVar11 = 0xd;
                    *(char *)((&DAT_1800db4e0)[lVar18] + 9 + uVar9 * 0x50) = local_res18[0];
                    pWVar11 = (LPWSTR)((longlong)pWVar11 + 1);
                  }
                }
              }
              else {
                *(byte *)pWVar11 = bVar2;
                pWVar11 = (LPWSTR)((longlong)pWVar11 + 1);
                pWVar16 = (LPWSTR)((longlong)pWVar16 + 1);
              }
            }
            iVar15 = (int)pWVar14 - iVar13;
            if (cVar19 == '\x01') {
              if (iVar15 == 0) {
                iVar13 = -2;
              }
              else {
                if ((char)*(byte *)((longlong)pWVar14 + -1) < '\0') {
                  iVar6 = 1;
                  cVar19 = (&DAT_18006e3f0)[*(byte *)((longlong)pWVar14 + -1)];
                  pWVar11 = pWVar14;
                  while (((pWVar14 = (LPWSTR)((longlong)pWVar11 + -1), cVar19 == '\0' && (iVar6 < 5)
                          ) && (lpMultiByteStr <= pWVar14))) {
                    iVar6 = iVar6 + 1;
                    cVar19 = (&DAT_18006e3f0)[(byte)pWVar11[-1]];
                    pWVar11 = pWVar14;
                  }
                  if ((&DAT_18006e3f0)[*(byte *)pWVar14] == '\0') {
                    pDVar8 = FUN_180035b40();
                    *pDVar8 = 0x2a;
                    iVar13 = -1;
                    goto LAB_18004ec2a;
                  }
                  if ((char)(&DAT_18006e3f0)[*(byte *)pWVar14] + 1 == iVar6) {
                    pWVar14 = (LPWSTR)((longlong)pWVar14 + (longlong)iVar6);
                  }
                  else if ((*(byte *)((&DAT_1800db4e0)[lVar18] + 8 + uVar9 * 0x50) & 0x48) == 0) {
                    FUN_180046a60(param_1,(longlong)-iVar6,1);
                  }
                  else {
                    *(byte *)((&DAT_1800db4e0)[lVar18] + 9 + uVar9 * 0x50) = *(byte *)pWVar14;
                    if (1 < iVar6) {
                      WVar4 = *pWVar11;
                      pWVar11 = (LPWSTR)((longlong)pWVar11 + 1);
                      *(byte *)((&DAT_1800db4e0)[lVar18] + 0x39 + uVar9 * 0x50) = (byte)WVar4;
                    }
                    if (iVar6 == 3) {
                      WVar4 = *pWVar11;
                      pWVar11 = (LPWSTR)((longlong)pWVar11 + 1);
                      *(byte *)((&DAT_1800db4e0)[lVar18] + 0x3a + uVar9 * 0x50) = (byte)WVar4;
                    }
                    pWVar14 = (LPWSTR)((longlong)pWVar11 - (longlong)iVar6);
                  }
                }
                iVar13 = (int)pWVar14 - iVar13;
                iVar6 = MultiByteToWideChar(0xfde9,0,(LPCSTR)lpMultiByteStr,iVar13,param_2,
                                            local_54 >> 1);
                if (iVar6 == 0) {
                  DVar7 = GetLastError();
                  _dosmaperr(DVar7);
                  iVar15 = 0;
                  iVar13 = -1;
                }
                else {
                  iVar15 = iVar6 * 2;
                  *(uint *)((&DAT_1800db4e0)[lVar18] + 0x48 + uVar9 * 0x50) =
                       (uint)(iVar6 != iVar13);
                  iVar13 = -2;
                }
              }
            }
            else {
              iVar13 = -2;
            }
          }
        }
      }
LAB_18004ec2a:
      if (lpMultiByteStr != param_2) {
        FUN_180034a70(lpMultiByteStr);
      }
      if (iVar13 != -2) {
        return iVar13;
      }
      return iVar15;
    }
    pDVar8 = FUN_180035b70();
    *pDVar8 = 0;
    pDVar8 = FUN_180035b40();
    *pDVar8 = 0x16;
  }
  FUN_1800384e0(0,0,0,0,0);
  return -1;
}


==================================================================

### EXPORT FUNC 18004ec90 (375 bytes) name=FUN_18004ec90

int FUN_18004ec90(uint param_1,LPWSTR param_2,uint param_3)

{
  int iVar1;
  DWORD *pDVar2;
  
  if (param_1 == 0xfffffffe) {
    pDVar2 = FUN_180035b70();
    *pDVar2 = 0;
    pDVar2 = FUN_180035b40();
    *pDVar2 = 9;
    iVar1 = -1;
  }
  else if (((int)param_1 < 0) || (DAT_1800db4c8 <= param_1)) {
    pDVar2 = FUN_180035b70();
    *pDVar2 = 0;
    pDVar2 = FUN_180035b40();
    *pDVar2 = 9;
    FUN_1800384e0(0,0,0,0,0);
    iVar1 = -1;
  }
  else if ((*(byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 +
                     (ulonglong)(param_1 & 0x1f) * 0x50) & 1) == 0) {
    pDVar2 = FUN_180035b70();
    *pDVar2 = 0;
    pDVar2 = FUN_180035b40();
    *pDVar2 = 9;
    FUN_1800384e0(0,0,0,0,0);
    iVar1 = -1;
  }
  else if (param_3 < 0x80000000) {
    FUN_18004a4e0(param_1);
    if ((*(byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 +
                  (ulonglong)(param_1 & 0x1f) * 0x50) & 1) == 0) {
      pDVar2 = FUN_180035b40();
      *pDVar2 = 9;
      pDVar2 = FUN_180035b70();
      *pDVar2 = 0;
      iVar1 = -1;
    }
    else {
      iVar1 = FUN_18004e380(param_1,param_2,param_3);
    }
    FUN_18004a5b0(param_1);
  }
  else {
    pDVar2 = FUN_180035b70();
    *pDVar2 = 0;
    pDVar2 = FUN_180035b40();
    *pDVar2 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    iVar1 = -1;
  }
  return iVar1;
}


==================================================================

### EXPORT FUNC 18004ee10 (23 bytes) name=FUN_18004ee10

void FUN_18004ee10(undefined8 param_1,longlong param_2)

{
  FUN_18004a5b0(*(uint *)(param_2 + 0x60));
  return;
}


==================================================================

### EXPORT FUNC 18004ee30 (1234 bytes) name=FUN_18004ee30

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* WARNING: Function: __chkstk replaced with injection: alloca_probe */

int FUN_18004ee30(longlong *param_1,LCID param_2,DWORD param_3,byte *param_4,uint param_5,
                 byte *param_6,uint param_7,UINT param_8)

{
  ulonglong uVar1;
  undefined1 auVar2 [16];
  undefined1 auVar3 [16];
  longlong lVar4;
  LCID Locale;
  int iVar5;
  DWORD DVar6;
  BOOL BVar7;
  int cchCount1;
  int iVar8;
  int iVar9;
  UINT UVar10;
  BYTE *pBVar11;
  ulonglong uVar12;
  undefined4 *puVar13;
  undefined8 uVar14;
  byte *pbVar15;
  byte *pbVar16;
  uint uVar17;
  undefined4 *puVar18;
  undefined1 *puVar19;
  undefined1 *puVar20;
  undefined1 *puVar21;
  PCNZWCH lpString1;
  UINT UVar22;
  byte *pbVar23;
  undefined1 auStackY_a8 [32];
  DWORD local_78;
  LCID LStack_74;
  byte *local_70;
  _cpinfo local_68;
  ulonglong local_50;
  
  pbVar23 = param_6;
  puVar19 = auStackY_a8;
  puVar20 = auStackY_a8;
  puVar21 = auStackY_a8;
  local_50 = DAT_18006cea0 ^ (ulonglong)&local_78;
  local_70 = param_6;
  local_78 = param_3;
  LStack_74 = param_2;
  if (DAT_180073664 == 0) {
    iVar5 = CompareStringW(0,0,L"",1,L"",1);
    if (iVar5 == 0) {
      DVar6 = GetLastError();
      if (DVar6 == 0x78) {
        DAT_180073664 = 2;
      }
    }
    else {
      DAT_180073664 = 1;
    }
  }
  pbVar15 = param_4;
  uVar17 = param_5;
  if ((int)param_5 < 1) {
    if (-2 < (int)param_5) goto LAB_18004ef0e;
  }
  else {
    do {
      uVar17 = uVar17 - 1;
      if (*pbVar15 == 0) goto LAB_18004eef3;
      pbVar15 = pbVar15 + 1;
    } while (uVar17 != 0);
    uVar17 = 0xffffffff;
LAB_18004eef3:
    param_5 = param_5 + (-1 - uVar17);
LAB_18004ef0e:
    pbVar15 = pbVar23;
    uVar17 = param_7;
    if ((int)param_7 < 1) {
      puVar21 = auStackY_a8;
      if ((int)param_7 < -1) goto LAB_18004f29d;
    }
    else {
      do {
        uVar17 = uVar17 - 1;
        if (*pbVar15 == 0) goto LAB_18004ef33;
        pbVar15 = pbVar15 + 1;
      } while (uVar17 != 0);
      uVar17 = 0xffffffff;
LAB_18004ef33:
      param_7 = param_7 + (-1 - uVar17);
    }
    if ((DAT_180073664 == 2) || (DAT_180073664 == 0)) {
      pbVar15 = (byte *)0x0;
      if (param_2 == 0) {
        param_2 = *(LCID *)(*param_1 + 0x14);
      }
      UVar22 = param_8;
      if (param_8 == 0) {
        UVar22 = *(UINT *)(*param_1 + 4);
      }
      uVar14 = FUN_180048c40(param_2);
      UVar10 = (UINT)uVar14;
      puVar21 = auStackY_a8;
      if (UVar10 != 0xffffffff) {
        pbVar16 = pbVar15;
        if (UVar10 == UVar22) {
LAB_18004f2a7:
          iVar5 = CompareStringA(param_2,local_78,(PCNZCH)param_4,param_5,(PCNZCH)pbVar23,param_7);
          puVar21 = auStackY_a8;
          if (pbVar15 != (byte *)0x0) {
            FUN_180034a70(pbVar15);
            FUN_180034a70(pbVar16);
            puVar21 = auStackY_a8;
          }
          goto LAB_18004f2e5;
        }
        pbVar15 = FUN_180048cb0(UVar22,UVar10,(LPCSTR)param_4,&param_5,(LPVOID)0x0,0);
        puVar21 = auStackY_a8;
        if (pbVar15 != (byte *)0x0) {
          pbVar16 = FUN_180048cb0(UVar22,UVar10,(LPCSTR)pbVar23,&param_7,(LPVOID)0x0,0);
          param_4 = pbVar15;
          pbVar23 = pbVar16;
          if (pbVar16 != (byte *)0x0) goto LAB_18004f2a7;
          FUN_180034a70(pbVar15);
          puVar21 = auStackY_a8;
        }
      }
    }
    else {
      puVar21 = auStackY_a8;
      if (DAT_180073664 == 1) {
        iVar9 = 0;
        UVar22 = param_8;
        if (param_8 == 0) {
          UVar22 = *(UINT *)(*param_1 + 4);
        }
        if ((param_5 == 0) || (param_7 == 0)) {
          if (param_5 == param_7) {
LAB_18004ef8e:
            iVar5 = 2;
            puVar21 = auStackY_a8;
            goto LAB_18004f2e5;
          }
          if ((int)param_7 < 2) {
            if ((int)param_5 < 2) {
              BVar7 = GetCPInfo(UVar22,&local_68);
              puVar21 = auStackY_a8;
              if (BVar7 == 0) goto LAB_18004f29d;
              if ((int)param_5 < 1) {
                if ((int)param_7 < 1) goto LAB_18004f03c;
                if (1 < local_68.MaxCharSize) {
                  pBVar11 = local_68.LeadByte;
                  while ((local_68.LeadByte[0] != 0 && (pBVar11[1] != 0))) {
                    if ((*pBVar11 <= *pbVar23) && (*pbVar23 <= pBVar11[1])) goto LAB_18004ef8e;
                    pBVar11 = pBVar11 + 2;
                    local_68.LeadByte[0] = *pBVar11;
                  }
                }
                goto LAB_18004ef9a;
              }
              if (1 < local_68.MaxCharSize) {
                pBVar11 = local_68.LeadByte;
                while ((local_68.LeadByte[0] != 0 && (pBVar11[1] != 0))) {
                  if ((*pBVar11 <= *param_4) && (*param_4 <= pBVar11[1])) goto LAB_18004ef8e;
                  pBVar11 = pBVar11 + 2;
                  local_68.LeadByte[0] = *pBVar11;
                }
              }
            }
            iVar5 = 3;
            puVar21 = auStackY_a8;
          }
          else {
LAB_18004ef9a:
            iVar5 = 1;
            puVar21 = auStackY_a8;
          }
          goto LAB_18004f2e5;
        }
LAB_18004f03c:
        cchCount1 = MultiByteToWideChar(UVar22,9,(LPCSTR)param_4,param_5,(LPWSTR)0x0,0);
        puVar21 = auStackY_a8;
        if (((cchCount1 != 0) && (puVar21 = auStackY_a8, 0 < cchCount1)) &&
           (auVar2._8_8_ = 0, auVar2._0_8_ = (longlong)cchCount1, puVar21 = auStackY_a8,
           1 < SUB168((ZEXT816(0) << 0x40 | ZEXT816(0xffffffffffffffe0)) / auVar2,0))) {
          lVar4 = (longlong)cchCount1 * 2;
          uVar1 = lVar4 + 0x10;
          if (uVar1 < 0x401) {
            uVar12 = lVar4 + 0x1f;
            if (uVar12 <= uVar1) {
              uVar12 = 0xffffffffffffff0;
            }
            lVar4 = -(uVar12 & 0xfffffffffffffff0);
            puVar19 = auStackY_a8 + lVar4;
            puVar13 = (undefined4 *)((longlong)&local_78 + lVar4);
            puVar21 = auStackY_a8 + lVar4;
            if (puVar13 == (undefined4 *)0x0) goto LAB_18004f29d;
            *puVar13 = 0xcccc;
LAB_18004f0d5:
            lpString1 = (PCNZWCH)(puVar13 + 4);
            puVar20 = puVar19;
          }
          else {
            puVar13 = FUN_1800349a0(uVar1);
            lpString1 = (PCNZWCH)0x0;
            if (puVar13 != (undefined4 *)0x0) {
              *puVar13 = 0xdddd;
              goto LAB_18004f0d5;
            }
          }
          puVar21 = puVar20;
          if (lpString1 != (PCNZWCH)0x0) {
            *(int *)(puVar20 + 0x28) = cchCount1;
            *(PCNZWCH *)(puVar20 + 0x20) = lpString1;
            *(undefined8 *)(puVar20 + -8) = 0x18004f104;
            iVar8 = MultiByteToWideChar(UVar22,1,(LPCSTR)param_4,param_5,*(LPWSTR *)(puVar20 + 0x20)
                                        ,*(int *)(puVar20 + 0x28));
            pbVar23 = local_70;
            iVar5 = iVar9;
            if (iVar8 != 0) {
              *(undefined4 *)(puVar20 + 0x28) = 0;
              *(undefined8 *)(puVar20 + 0x20) = 0;
              *(undefined8 *)(puVar20 + -8) = 0x18004f131;
              iVar8 = MultiByteToWideChar(UVar22,9,(LPCSTR)pbVar23,param_7,
                                          *(LPWSTR *)(puVar20 + 0x20),*(int *)(puVar20 + 0x28));
              if ((0 < iVar8) &&
                 (auVar3._8_8_ = 0, auVar3._0_8_ = (longlong)iVar8,
                 1 < SUB168((ZEXT816(0) << 0x40 | ZEXT816(0xffffffffffffffe0)) / auVar3,0))) {
                lVar4 = (longlong)iVar8 * 2;
                uVar1 = lVar4 + 0x10;
                iVar5 = 0;
                if (uVar1 < 0x401) {
                  uVar12 = lVar4 + 0x1f;
                  if (uVar12 <= uVar1) {
                    uVar12 = 0xffffffffffffff0;
                  }
                  *(undefined8 *)(puVar20 + -8) = 0x18004f175;
                  lVar4 = -(uVar12 & 0xfffffffffffffff0);
                  puVar21 = puVar20 + lVar4;
                  puVar13 = (undefined4 *)(puVar20 + lVar4 + 0x30);
                  if (puVar13 == (undefined4 *)0x0) goto LAB_18004f1fc;
                  *puVar13 = 0xcccc;
                  puVar20 = puVar20 + lVar4;
LAB_18004f19d:
                  puVar18 = puVar13 + 4;
                  puVar21 = puVar20;
                }
                else {
                  *(undefined8 *)(puVar20 + -8) = 0x18004f18f;
                  puVar13 = FUN_1800349a0(uVar1);
                  puVar18 = (undefined4 *)0x0;
                  if (puVar13 != (undefined4 *)0x0) {
                    *puVar13 = 0xdddd;
                    goto LAB_18004f19d;
                  }
                }
                if (puVar18 != (undefined4 *)0x0) {
                  *(int *)(puVar21 + 0x28) = iVar8;
                  *(undefined4 **)(puVar21 + 0x20) = puVar18;
                  *(undefined8 *)(puVar21 + -8) = 0x18004f1c8;
                  iVar5 = MultiByteToWideChar(UVar22,1,(LPCSTR)pbVar23,param_7,
                                              *(LPWSTR *)(puVar21 + 0x20),*(int *)(puVar21 + 0x28));
                  Locale = LStack_74;
                  DVar6 = local_78;
                  if (iVar5 != 0) {
                    *(int *)(puVar21 + 0x28) = iVar8;
                    *(undefined4 **)(puVar21 + 0x20) = puVar18;
                    *(undefined8 *)(puVar21 + -8) = 0x18004f1e8;
                    iVar9 = CompareStringW(Locale,DVar6,lpString1,cchCount1,
                                           *(PCNZWCH *)(puVar21 + 0x20),*(int *)(puVar21 + 0x28));
                  }
                  iVar5 = iVar9;
                  if (puVar18[-4] == 0xdddd) {
                    *(undefined8 *)(puVar21 + -8) = 0x18004f1fc;
                    FUN_180034a70(puVar18 + -4);
                  }
                }
              }
            }
LAB_18004f1fc:
            if (*(int *)(lpString1 + -8) == 0xdddd) {
              *(undefined8 *)(puVar21 + -8) = 0x18004f20e;
              FUN_180034a70(lpString1 + -8);
            }
            goto LAB_18004f2e5;
          }
        }
      }
    }
  }
LAB_18004f29d:
  iVar5 = 0;
LAB_18004f2e5:
  *(undefined8 *)(puVar21 + -8) = 0x18004f2f1;
  return iVar5;
}


==================================================================

### EXPORT FUNC 18004f310 (314 bytes) name=FUN_18004f310

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

void FUN_18004f310(longlong *param_1,LCID param_2,DWORD param_3,byte *param_4,uint param_5,
                  byte *param_6,uint param_7,UINT param_8)

{
  pthreadmbcinfo ptVar1;
  DWORD *pDVar2;
  pthreadlocinfo local_28;
  pthreadmbcinfo local_20;
  DWORD *local_18;
  char local_10;
  
  local_10 = '\0';
  if (param_1 == (longlong *)0x0) {
    pDVar2 = FUN_1800380a0();
    local_28 = *(pthreadlocinfo *)(pDVar2 + 0x30);
    ptVar1 = *(pthreadmbcinfo *)(pDVar2 + 0x2e);
    local_20 = ptVar1;
    local_18 = pDVar2;
    if ((local_28 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & pDVar2[0x32]) == 0)) {
      local_28 = __updatetlocinfo();
    }
    if ((ptVar1 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & pDVar2[0x32]) == 0)) {
      local_20 = __updatetmbcinfo();
    }
    if ((pDVar2[0x32] & 2) == 0) {
      pDVar2[0x32] = pDVar2[0x32] | 2;
      local_10 = '\x01';
    }
  }
  else {
    local_28 = (pthreadlocinfo)*param_1;
    local_20 = (pthreadmbcinfo)param_1[1];
  }
  FUN_18004ee30((longlong *)&local_28,param_2,param_3,param_4,param_5,param_6,param_7,param_8);
  if (local_10 != '\0') {
    local_18[0x32] = local_18[0x32] & 0xfffffffd;
  }
  return;
}


==================================================================

### EXPORT FUNC 18004f450 (470 bytes) name=FUN_18004f450

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

int FUN_18004f450(byte *param_1,byte *param_2,ulonglong param_3,undefined8 *param_4)

{
  LCID LVar1;
  int iVar2;
  DWORD *pDVar3;
  pthreadlocinfo local_28;
  pthreadmbcinfo local_20;
  DWORD *local_18;
  char local_10;
  
  local_10 = '\0';
  if (param_4 == (undefined8 *)0x0) {
    local_18 = FUN_1800380a0();
    local_28 = *(pthreadlocinfo *)(local_18 + 0x30);
    local_20 = *(pthreadmbcinfo *)(local_18 + 0x2e);
    if ((local_28 != (pthreadlocinfo)PTR_DAT_18006d6f0) && ((_DAT_18006d578 & local_18[0x32]) == 0))
    {
      local_28 = __updatetlocinfo();
    }
    if ((local_20 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_18[0x32]) == 0))
    {
      local_20 = __updatetmbcinfo();
    }
    if ((local_18[0x32] & 2) == 0) {
      local_18[0x32] = local_18[0x32] | 2;
      local_10 = '\x01';
    }
  }
  else {
    local_28 = (pthreadlocinfo)*param_4;
    local_20 = (pthreadmbcinfo)param_4[1];
  }
  if (param_3 == 0) {
    if (local_10 != '\0') {
      local_18[0x32] = local_18[0x32] & 0xfffffffd;
    }
    return 0;
  }
  if (((param_1 != (byte *)0x0) && (param_2 != (byte *)0x0)) && (param_3 < 0x80000000)) {
    LVar1 = *(LCID *)&local_28->lc_category[0].locale;
    if (LVar1 == 0) {
      iVar2 = FUN_18004a170(param_1,param_2,param_3,&local_28);
    }
    else {
      iVar2 = FUN_18004f310((longlong *)&local_28,LVar1,0x1001,param_1,(uint)param_3,param_2,
                            (uint)param_3,local_28->lc_collate_cp);
      if (iVar2 == 0) {
        pDVar3 = FUN_180035b40();
        *pDVar3 = 0x16;
        goto LAB_18004f571;
      }
      iVar2 = iVar2 + -2;
    }
    if (local_10 != '\0') {
      local_18[0x32] = local_18[0x32] & 0xfffffffd;
    }
    return iVar2;
  }
  pDVar3 = FUN_180035b40();
  *pDVar3 = 0x16;
  FUN_1800384e0(0,0,0,0,0);
LAB_18004f571:
  if (local_10 != '\0') {
    local_18[0x32] = local_18[0x32] & 0xfffffffd;
  }
  return 0x7fffffff;
}


==================================================================

### EXPORT FUNC 18004f630 (158 bytes) name=FUN_18004f630

ulonglong FUN_18004f630(byte *param_1,int param_2)

{
  char cVar1;
  int iVar2;
  byte *pbVar3;
  longlong *plVar4;
  
  pbVar3 = (byte *)*DAT_180072808;
  plVar4 = DAT_180072808;
  if (pbVar3 != (byte *)0x0) {
    do {
      iVar2 = FUN_18004b9b0(param_1,pbVar3,(longlong)param_2);
      if ((iVar2 == 0) &&
         ((cVar1 = *(char *)((longlong)param_2 + *plVar4), cVar1 == '=' || (cVar1 == '\0')))) {
        return (longlong)plVar4 - (longlong)DAT_180072808 >> 3 & 0xffffffff;
      }
      pbVar3 = (byte *)plVar4[1];
      plVar4 = plVar4 + 1;
    } while (pbVar3 != (byte *)0x0);
  }
  return (ulonglong)(uint)-(int)((longlong)plVar4 - (longlong)DAT_180072808 >> 3);
}


==================================================================

### EXPORT FUNC 18004f6d0 (155 bytes) name=FUN_18004f6d0

undefined8 * FUN_18004f6d0(longlong *param_1)

{
  longlong lVar1;
  undefined8 *puVar2;
  longlong *plVar3;
  undefined8 *puVar4;
  char *pcVar5;
  int iVar6;
  
  iVar6 = 0;
  if (param_1 != (longlong *)0x0) {
    lVar1 = *param_1;
    plVar3 = param_1;
    while (lVar1 != 0) {
      plVar3 = plVar3 + 1;
      iVar6 = iVar6 + 1;
      lVar1 = *plVar3;
    }
    puVar4 = FUN_180040e50((longlong)(iVar6 + 1),8);
    if (puVar4 == (undefined8 *)0x0) {
      _amsg_exit(9);
    }
    pcVar5 = (char *)*param_1;
    puVar2 = puVar4;
    while (pcVar5 != (char *)0x0) {
      pcVar5 = FUN_18004ff40(pcVar5);
      param_1 = param_1 + 1;
      *puVar2 = pcVar5;
      puVar2 = puVar2 + 1;
      pcVar5 = (char *)*param_1;
    }
    *puVar2 = 0;
    return puVar4;
  }
  return (undefined8 *)0x0;
}


==================================================================

### EXPORT FUNC 18004f770 (836 bytes) name=FUN_18004f770

undefined4 FUN_18004f770(undefined8 *param_1,int param_2)

{
  byte bVar1;
  byte *_Src;
  longlong lVar2;
  ulonglong uVar3;
  int iVar4;
  errno_t eVar5;
  BOOL BVar6;
  DWORD *pDVar7;
  byte *pbVar8;
  undefined8 uVar9;
  ulonglong uVar10;
  longlong *plVar11;
  char *_Dst;
  uint uVar12;
  byte *pbVar13;
  bool bVar14;
  undefined4 local_res8;
  
  local_res8 = 0;
  if (param_1 == (undefined8 *)0x0) {
    pDVar7 = FUN_180035b40();
    *pDVar7 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0xffffffff;
  }
  _Src = (byte *)*param_1;
  if (((_Src == (byte *)0x0) || (pbVar8 = (byte *)FUN_180050170(_Src,0x3d), pbVar8 == (byte *)0x0))
     || (_Src == pbVar8)) {
    pDVar7 = FUN_180035b40();
    *pDVar7 = 0x16;
    return 0xffffffff;
  }
  bVar14 = pbVar8[1] == 0;
  if (DAT_180072808 == DAT_180072810) {
    DAT_180072808 = FUN_18004f6d0(DAT_180072808);
  }
  if (DAT_180072808 == (longlong *)0x0) {
    if ((param_2 == 0) || (DAT_180072818 == (undefined8 *)0x0)) {
      if (bVar14) {
        return 0;
      }
      DAT_180072808 = (longlong *)FUN_180040de0(8);
      if (DAT_180072808 == (longlong *)0x0) {
        return 0xffffffff;
      }
      *DAT_180072808 = 0;
      if (DAT_180072818 == (undefined8 *)0x0) {
        DAT_180072818 = (undefined8 *)FUN_180040de0(8);
        if (DAT_180072818 == (undefined8 *)0x0) {
          return 0xffffffff;
        }
        *DAT_180072818 = 0;
      }
    }
    else {
      uVar9 = FUN_18004b9c0();
      if ((int)uVar9 != 0) {
        pDVar7 = FUN_180035b40();
        *pDVar7 = 0x16;
        return 0xffffffff;
      }
    }
  }
  plVar11 = DAT_180072808;
  if (DAT_180072808 == (longlong *)0x0) {
    return 0xffffffff;
  }
  uVar10 = FUN_18004f630(_Src,(int)pbVar8 - (int)_Src);
  uVar12 = (uint)uVar10;
  uVar10 = (ulonglong)(int)uVar12;
  if (((int)uVar12 < 0) || (*plVar11 == 0)) {
    if (bVar14) {
      FUN_180034a70(_Src);
      *param_1 = 0;
      return 0;
    }
    if ((int)uVar12 < 0) {
      uVar12 = -uVar12;
    }
    iVar4 = uVar12 + 2;
    if (((iVar4 < (int)uVar12) || (0x1ffffffffffffffe < (ulonglong)(longlong)iVar4)) ||
       (plVar11 = FUN_180040f70(DAT_180072808,8,(longlong)iVar4), plVar11 == (longlong *)0x0)) {
      return 0xffffffff;
    }
    plVar11[(int)uVar12] = (longlong)_Src;
    plVar11[(longlong)(int)uVar12 + 1] = 0;
    *param_1 = 0;
    DAT_180072808 = plVar11;
  }
  else {
    FUN_180034a70((LPVOID)plVar11[uVar10]);
    if (bVar14) {
      lVar2 = plVar11[uVar10];
      uVar3 = uVar10;
      while (lVar2 != 0) {
        uVar12 = (int)uVar10 + 1;
        uVar10 = (ulonglong)uVar12;
        plVar11[uVar3] = plVar11[uVar3 + 1];
        lVar2 = plVar11[uVar3 + 1];
        uVar3 = uVar3 + 1;
      }
      if (((ulonglong)(longlong)(int)uVar12 < 0x1fffffffffffffff) &&
         (plVar11 = FUN_180040f70(DAT_180072808,(longlong)(int)uVar12,8), plVar11 != (longlong *)0x0
         )) {
        DAT_180072808 = plVar11;
      }
    }
    else {
      plVar11[uVar10] = (longlong)_Src;
      *param_1 = 0;
    }
  }
  if (param_2 != 0) {
    uVar10 = 0xffffffffffffffff;
    pbVar13 = _Src;
    do {
      if (uVar10 == 0) break;
      uVar10 = uVar10 - 1;
      bVar1 = *pbVar13;
      pbVar13 = pbVar13 + 1;
    } while (bVar1 != 0);
    _Dst = FUN_180040e50(~uVar10 + 1,1);
    if (_Dst != (char *)0x0) {
      uVar10 = 0xffffffffffffffff;
      pbVar13 = _Src;
      do {
        if (uVar10 == 0) break;
        uVar10 = uVar10 - 1;
        bVar1 = *pbVar13;
        pbVar13 = pbVar13 + 1;
      } while (bVar1 != 0);
      eVar5 = strcpy_s(_Dst,~uVar10 + 1,(char *)_Src);
      if (eVar5 != 0) {
                    /* WARNING: Subroutine does not return */
        FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
      }
      pbVar8[(longlong)_Dst - (longlong)_Src] = 0;
      pbVar8 = pbVar8 + ((longlong)_Dst - (longlong)_Src) + 1;
      if (bVar14) {
        pbVar8 = (byte *)0x0;
      }
      BVar6 = SetEnvironmentVariableA(_Dst,(LPCSTR)pbVar8);
      if (BVar6 == 0) {
        local_res8 = 0xffffffff;
        pDVar7 = FUN_180035b40();
        *pDVar7 = 0x2a;
      }
      FUN_180034a70(_Dst);
    }
  }
  if (bVar14) {
    FUN_180034a70(_Src);
    *param_1 = 0;
    return local_res8;
  }
  return local_res8;
}


==================================================================

### EXPORT FUNC 18004fac0 (569 bytes) name=FUN_18004fac0

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

void FUN_18004fac0(char *param_1,int param_2,uint *param_3)

{
  uint uVar1;
  uint uVar2;
  undefined8 uVar3;
  bool bVar4;
  short sVar5;
  uint uVar6;
  uint uVar7;
  uint uVar8;
  uint local_28;
  
  sVar5 = 0x404e;
  *param_3 = 0;
  param_3[1] = 0;
  param_3[2] = 0;
  for (; param_2 != 0; param_2 = param_2 + -1) {
    uVar3 = *(undefined8 *)param_3;
    uVar1 = param_3[2];
    uVar2 = *param_3;
    uVar7 = param_3[1];
    uVar6 = uVar2 * 4;
    uVar8 = (param_3[2] * 2 | uVar7 >> 0x1f) * 2 | (uVar7 & 0x7fffffff) >> 0x1e;
    local_28 = (uint)uVar3;
    uVar7 = (uVar7 * 2 | uVar2 >> 0x1f) * 2 | (uVar2 & 0x7fffffff) >> 0x1e;
    uVar2 = uVar6 + local_28;
    bVar4 = false;
    *param_3 = uVar6;
    param_3[1] = uVar7;
    param_3[2] = uVar8;
    if ((uVar2 < uVar6) || (uVar2 < local_28)) {
      bVar4 = true;
    }
    *param_3 = uVar2;
    if (bVar4) {
      uVar6 = uVar7 + 1;
      bVar4 = false;
      if ((uVar6 < uVar7) || (uVar6 == 0)) {
        bVar4 = true;
      }
      param_3[1] = uVar6;
      if (bVar4) {
        param_3[2] = uVar8 + 1;
      }
    }
    bVar4 = false;
    uVar7 = (uint)((ulonglong)uVar3 >> 0x20);
    uVar6 = param_3[1] + uVar7;
    if ((uVar6 < param_3[1]) || (uVar6 < uVar7)) {
      bVar4 = true;
    }
    param_3[1] = uVar6;
    if (bVar4) {
      param_3[2] = param_3[2] + 1;
    }
    param_3[2] = param_3[2] + uVar1;
    uVar1 = uVar2 * 2;
    uVar7 = param_3[2] * 2 | uVar6 >> 0x1f;
    *param_3 = uVar1;
    uVar6 = uVar6 * 2 | uVar2 >> 0x1f;
    param_3[2] = uVar7;
    bVar4 = false;
    param_3[1] = uVar6;
    uVar2 = uVar1 + (int)*param_1;
    if ((uVar2 < uVar1) || (uVar2 < (uint)(int)*param_1)) {
      bVar4 = true;
    }
    *param_3 = uVar2;
    if (bVar4) {
      uVar2 = uVar6 + 1;
      bVar4 = false;
      if ((uVar2 < uVar6) || (uVar2 == 0)) {
        bVar4 = true;
      }
      param_3[1] = uVar2;
      if (bVar4) {
        param_3[2] = uVar7 + 1;
      }
    }
    param_1 = param_1 + 1;
  }
  for (uVar2 = param_3[2]; uVar2 == 0; uVar2 = uVar2 >> 0x10) {
    uVar2 = param_3[1];
    sVar5 = sVar5 + -0x10;
    param_3[2] = uVar2 >> 0x10;
    param_3[1] = uVar2 << 0x10 | *param_3 >> 0x10;
    *param_3 = *param_3 << 0x10;
  }
  for (uVar2 = param_3[2] >> 0xf; (uVar2 & 1) == 0; uVar2 = (uVar2 & 0x7fffffff) >> 0xe) {
    uVar2 = *param_3;
    uVar1 = param_3[1];
    sVar5 = sVar5 + -1;
    *param_3 = uVar2 * 2;
    param_3[1] = uVar1 * 2 | uVar2 >> 0x1f;
    uVar2 = param_3[2];
    param_3[2] = uVar2 * 2 | uVar1 >> 0x1f;
  }
  *(short *)((longlong)param_3 + 10) = sVar5;
  return;
}


==================================================================

### EXPORT FUNC 18004fd00 (208 bytes) name=FUN_18004fd00

undefined8 FUN_18004fd00(uint param_1)

{
  byte bVar1;
  BOOL BVar2;
  DWORD DVar3;
  longlong lVar4;
  longlong lVar5;
  HANDLE hObject;
  
  lVar4 = FUN_18004a440(param_1);
  if (lVar4 != -1) {
    if (param_1 == 1) {
      bVar1 = *(byte *)(DAT_1800db4e0 + 0xa8);
joined_r0x00018004fd41:
      if ((bVar1 & 1) != 0) {
        lVar4 = FUN_18004a440(2);
        lVar5 = FUN_18004a440(1);
        if (lVar5 == lVar4) goto LAB_18004fd7d;
      }
    }
    else if (param_1 == 2) {
      bVar1 = *(byte *)(DAT_1800db4e0 + 0x58);
      goto joined_r0x00018004fd41;
    }
    hObject = (HANDLE)FUN_18004a440(param_1);
    BVar2 = CloseHandle(hObject);
    if (BVar2 == 0) {
      DVar3 = GetLastError();
      goto LAB_18004fd7f;
    }
  }
LAB_18004fd7d:
  DVar3 = 0;
LAB_18004fd7f:
  FUN_18004a370(param_1);
  *(undefined1 *)
   ((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 + (ulonglong)(param_1 & 0x1f) * 0x50) = 0;
  if (DVar3 != 0) {
    _dosmaperr(DVar3);
    return 0xffffffff;
  }
  return 0;
}


==================================================================

### EXPORT FUNC 18004fdd0 (270 bytes) name=FUN_18004fdd0

ulonglong FUN_18004fdd0(uint param_1)

{
  DWORD *pDVar1;
  ulonglong uVar2;
  
  if (param_1 == 0xfffffffe) {
    pDVar1 = FUN_180035b70();
    *pDVar1 = 0;
    pDVar1 = FUN_180035b40();
    *pDVar1 = 9;
    uVar2 = 0xffffffff;
  }
  else if (((int)param_1 < 0) || (DAT_1800db4c8 <= param_1)) {
    pDVar1 = FUN_180035b70();
    *pDVar1 = 0;
    pDVar1 = FUN_180035b40();
    *pDVar1 = 9;
    FUN_1800384e0(0,0,0,0,0);
    uVar2 = 0xffffffff;
  }
  else if ((*(byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 +
                     (ulonglong)(param_1 & 0x1f) * 0x50) & 1) == 0) {
    pDVar1 = FUN_180035b70();
    *pDVar1 = 0;
    pDVar1 = FUN_180035b40();
    *pDVar1 = 9;
    FUN_1800384e0(0,0,0,0,0);
    uVar2 = 0xffffffff;
  }
  else {
    FUN_18004a4e0(param_1);
    if ((*(byte *)((&DAT_1800db4e0)[(longlong)(int)param_1 >> 5] + 8 +
                  (ulonglong)(param_1 & 0x1f) * 0x50) & 1) == 0) {
      pDVar1 = FUN_180035b40();
      *pDVar1 = 9;
      uVar2 = 0xffffffff;
    }
    else {
      uVar2 = FUN_18004fd00(param_1);
      uVar2 = uVar2 & 0xffffffff;
    }
    FUN_18004a5b0(param_1);
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 18004fee0 (23 bytes) name=FUN_18004fee0

void FUN_18004fee0(undefined8 param_1,longlong param_2)

{
  FUN_18004a5b0(*(uint *)(param_2 + 0x50));
  return;
}


==================================================================

### EXPORT FUNC 18004ff00 (54 bytes) name=_freebuf

/* Library Function - Single Match
    _freebuf
   
   Library: Visual Studio 2005 Release */

void __cdecl _freebuf(FILE *_File)

{
  if (((_File->_flag & 0x83U) != 0) && ((_File->_flag & 8U) != 0)) {
    FUN_180034a70(_File->_base);
    _File->_flag = _File->_flag & 0xfffffbf7;
    _File->_ptr = (char *)0x0;
    _File->_base = (char *)0x0;
    _File->_cnt = 0;
  }
  return;
}


==================================================================

### EXPORT FUNC 18004ff40 (143 bytes) name=FUN_18004ff40

char * FUN_18004ff40(char *param_1)

{
  char cVar1;
  errno_t eVar2;
  char *pcVar3;
  ulonglong uVar4;
  
  if (param_1 == (char *)0x0) {
    return (char *)0x0;
  }
  uVar4 = 0xffffffffffffffff;
  pcVar3 = param_1;
  do {
    if (uVar4 == 0) break;
    uVar4 = uVar4 - 1;
    cVar1 = *pcVar3;
    pcVar3 = pcVar3 + 1;
  } while (cVar1 != '\0');
  pcVar3 = FUN_1800349a0(~uVar4);
  if (pcVar3 == (char *)0x0) {
    return (char *)0x0;
  }
  eVar2 = strcpy_s(pcVar3,~uVar4,param_1);
  if (eVar2 != 0) {
                    /* WARNING: Subroutine does not return */
    FID_conflict__invoke_watson((wchar_t *)0x0,(wchar_t *)0x0,(wchar_t *)0x0,0,0);
  }
  return pcVar3;
}


==================================================================

### EXPORT FUNC 18004ffd0 (401 bytes) name=FUN_18004ffd0

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

byte * FUN_18004ffd0(byte *param_1,uint param_2,longlong param_3)

{
  byte bVar1;
  bool bVar2;
  pthreadmbcinfo ptVar3;
  DWORD *pDVar4;
  byte *pbVar5;
  DWORD *local_18;
  
  bVar2 = false;
  if (param_3 == 0) {
    local_18 = FUN_1800380a0();
    ptVar3 = *(pthreadmbcinfo *)(local_18 + 0x2e);
    if ((*(undefined **)(local_18 + 0x30) != PTR_DAT_18006d6f0) &&
       ((_DAT_18006d578 & local_18[0x32]) == 0)) {
      __updatetlocinfo();
    }
    if ((ptVar3 != (pthreadmbcinfo)PTR_DAT_18006d470) && ((_DAT_18006d578 & local_18[0x32]) == 0)) {
      ptVar3 = __updatetmbcinfo();
    }
    if ((local_18[0x32] & 2) == 0) {
      bVar2 = true;
      local_18[0x32] = local_18[0x32] | 2;
    }
  }
  else {
    ptVar3 = *(pthreadmbcinfo *)(param_3 + 8);
    bVar2 = false;
  }
  if (param_1 == (byte *)0x0) {
    pDVar4 = FUN_180035b40();
    *pDVar4 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
  }
  else {
    if (ptVar3->ismbcodepage == 0) {
      param_1 = (byte *)strchr((char *)param_1,param_2);
LAB_1800500e7:
      if (!bVar2) {
        return param_1;
      }
      local_18[0x32] = local_18[0x32] & 0xfffffffd;
      return param_1;
    }
    bVar1 = *param_1;
    while (bVar1 != 0) {
      if ((ptVar3->mbctype[(ulonglong)bVar1 + 5] & 4) == 0) {
        pbVar5 = param_1;
        if (param_2 == bVar1) break;
      }
      else {
        if (param_1[1] == 0) goto LAB_1800500ad;
        pbVar5 = param_1 + 1;
        if (param_2 == CONCAT11(bVar1,param_1[1])) goto LAB_1800500e7;
      }
      param_1 = pbVar5 + 1;
      bVar1 = pbVar5[1];
    }
    if (param_2 == bVar1) {
      if (!bVar2) {
        return param_1;
      }
      local_18[0x32] = local_18[0x32] & 0xfffffffd;
      return param_1;
    }
  }
LAB_1800500ad:
  if (bVar2) {
    local_18[0x32] = local_18[0x32] & 0xfffffffd;
  }
  return (byte *)0x0;
}


==================================================================

### EXPORT FUNC 180050170 (8 bytes) name=FUN_180050170

void FUN_180050170(byte *param_1,uint param_2)

{
  FUN_18004ffd0(param_1,param_2,0);
  return;
}


==================================================================

### EXPORT FUNC 180050180 (33 bytes) name=strchr

/* Library Function - Single Match
    strchr
   
   Library: Visual Studio 2005 Release */

char * __cdecl strchr(char *_Str,int _Val)

{
  char *pcVar1;
  char cVar2;
  
  cVar2 = *_Str;
  while (cVar2 != '\0') {
    if (cVar2 == (char)_Val) {
      return _Str;
    }
    pcVar1 = _Str + 1;
    _Str = _Str + 1;
    cVar2 = *pcVar1;
  }
  if (*_Str == (char)_Val) {
    return _Str;
  }
  return (char *)0x0;
}


==================================================================

### EXPORT FUNC 1800501a2 (6 bytes) name=RtlPcToFileHeader

PVOID __stdcall RtlPcToFileHeader(PVOID PcValue,PVOID *BaseOfImage)

{
  PVOID pvVar1;
  
                    /* WARNING: Could not recover jumptable at 0x0001800501a2. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  pvVar1 = RtlPcToFileHeader(PcValue,BaseOfImage);
  return pvVar1;
}


==================================================================

### EXPORT FUNC 1800501a8 (6 bytes) name=RtlLookupFunctionEntry

PRUNTIME_FUNCTION __stdcall
RtlLookupFunctionEntry(DWORD64 ControlPc,PDWORD64 ImageBase,PUNWIND_HISTORY_TABLE HistoryTable)

{
  PRUNTIME_FUNCTION p_Var1;
  
                    /* WARNING: Could not recover jumptable at 0x0001800501a8. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  p_Var1 = RtlLookupFunctionEntry(ControlPc,ImageBase,HistoryTable);
  return p_Var1;
}


==================================================================

### EXPORT FUNC 1800501ae (6 bytes) name=RtlUnwindEx

void __stdcall
RtlUnwindEx(PVOID TargetFrame,PVOID TargetIp,PEXCEPTION_RECORD ExceptionRecord,PVOID ReturnValue,
           PCONTEXT ContextRecord,PUNWIND_HISTORY_TABLE HistoryTable)

{
                    /* WARNING: Could not recover jumptable at 0x0001800501ae. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  RtlUnwindEx(TargetFrame,TargetIp,ExceptionRecord,ReturnValue,ContextRecord,HistoryTable);
  return;
}


==================================================================

### EXPORT FUNC 1800501b4 (6 bytes) name=RtlVirtualUnwind

PEXCEPTION_ROUTINE __stdcall
RtlVirtualUnwind(DWORD HandlerType,DWORD64 ImageBase,DWORD64 ControlPc,
                PRUNTIME_FUNCTION FunctionEntry,PCONTEXT ContextRecord,PVOID *HandlerData,
                PDWORD64 EstablisherFrame,PKNONVOLATILE_CONTEXT_POINTERS ContextPointers)

{
  PEXCEPTION_ROUTINE puVar1;
  
                    /* WARNING: Could not recover jumptable at 0x0001800501b4. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  puVar1 = RtlVirtualUnwind(HandlerType,ImageBase,ControlPc,FunctionEntry,ContextRecord,HandlerData,
                            EstablisherFrame,ContextPointers);
  return puVar1;
}


==================================================================

### EXPORT FUNC 1800501ba (6 bytes) name=ClosePrinter

BOOL __stdcall ClosePrinter(HANDLE hPrinter)

{
  BOOL BVar1;
  
                    /* WARNING: Could not recover jumptable at 0x0001800501ba. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  BVar1 = ClosePrinter(hPrinter);
  return BVar1;
}


==================================================================

### EXPORT FUNC 1800501c0 (6 bytes) name=DocumentPropertiesW

LONG __stdcall
DocumentPropertiesW(HWND hWnd,HANDLE hPrinter,LPWSTR pDeviceName,PDEVMODEW pDevModeOutput,
                   PDEVMODEW pDevModeInput,DWORD fMode)

{
  LONG LVar1;
  
                    /* WARNING: Could not recover jumptable at 0x0001800501c0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LVar1 = DocumentPropertiesW(hWnd,hPrinter,pDeviceName,pDevModeOutput,pDevModeInput,fMode);
  return LVar1;
}


==================================================================

### EXPORT FUNC 1800501c6 (6 bytes) name=OpenPrinterW

BOOL __stdcall OpenPrinterW(LPWSTR pPrinterName,LPHANDLE phPrinter,LPPRINTER_DEFAULTSW pDefault)

{
  BOOL BVar1;
  
                    /* WARNING: Could not recover jumptable at 0x0001800501c6. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  BVar1 = OpenPrinterW(pPrinterName,phPrinter,pDefault);
  return BVar1;
}


==================================================================

### EXPORT FUNC 1800501cc (6 bytes) name=AVIStreamWrite

void AVIStreamWrite(void)

{
                    /* WARNING: Could not recover jumptable at 0x0001800501cc. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  AVIStreamWrite();
  return;
}


==================================================================

### EXPORT FUNC 1800501d2 (6 bytes) name=ICSendMessage

void ICSendMessage(void)

{
                    /* WARNING: Could not recover jumptable at 0x0001800501d2. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  ICSendMessage();
  return;
}


==================================================================

### EXPORT FUNC 1800501d8 (6 bytes) name=AVIFileInit

void AVIFileInit(void)

{
                    /* WARNING: Could not recover jumptable at 0x0001800501d8. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  AVIFileInit();
  return;
}


==================================================================

### EXPORT FUNC 1800501de (6 bytes) name=AVIFileOpenW

void AVIFileOpenW(void)

{
                    /* WARNING: Could not recover jumptable at 0x0001800501de. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  AVIFileOpenW();
  return;
}


==================================================================

### EXPORT FUNC 1800501e4 (6 bytes) name=AVIFileCreateStreamW

void AVIFileCreateStreamW(void)

{
                    /* WARNING: Could not recover jumptable at 0x0001800501e4. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  AVIFileCreateStreamW();
  return;
}


==================================================================

### EXPORT FUNC 1800501ea (6 bytes) name=ICInfo

void ICInfo(void)

{
                    /* WARNING: Could not recover jumptable at 0x0001800501ea. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  ICInfo();
  return;
}


==================================================================

### EXPORT FUNC 1800501f0 (6 bytes) name=ICOpen

void ICOpen(void)

{
                    /* WARNING: Could not recover jumptable at 0x0001800501f0. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  ICOpen();
  return;
}


==================================================================

### EXPORT FUNC 1800501f6 (6 bytes) name=ICClose

void ICClose(void)

{
                    /* WARNING: Could not recover jumptable at 0x0001800501f6. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  ICClose();
  return;
}


==================================================================

### EXPORT FUNC 1800501fc (6 bytes) name=ICGetInfo

void ICGetInfo(void)

{
                    /* WARNING: Could not recover jumptable at 0x0001800501fc. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  ICGetInfo();
  return;
}


==================================================================

### EXPORT FUNC 180050202 (6 bytes) name=AVIMakeCompressedStream

void AVIMakeCompressedStream(void)

{
                    /* WARNING: Could not recover jumptable at 0x000180050202. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  AVIMakeCompressedStream();
  return;
}


==================================================================

### EXPORT FUNC 180050208 (6 bytes) name=AVIStreamSetFormat

void AVIStreamSetFormat(void)

{
                    /* WARNING: Could not recover jumptable at 0x000180050208. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  AVIStreamSetFormat();
  return;
}


==================================================================

### EXPORT FUNC 18005020e (6 bytes) name=AVIStreamRelease

void AVIStreamRelease(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018005020e. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  AVIStreamRelease();
  return;
}


==================================================================

### EXPORT FUNC 180050214 (6 bytes) name=AVIFileRelease

void AVIFileRelease(void)

{
                    /* WARNING: Could not recover jumptable at 0x000180050214. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  AVIFileRelease();
  return;
}


==================================================================

### EXPORT FUNC 18005021a (6 bytes) name=AVIFileExit

void AVIFileExit(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018005021a. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  AVIFileExit();
  return;
}


==================================================================

### EXPORT FUNC 180050220 (6 bytes) name=usb_init

void usb_init(void)

{
                    /* WARNING: Could not recover jumptable at 0x000180050220. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  usb_init();
  return;
}


==================================================================

### EXPORT FUNC 180050226 (6 bytes) name=usb_bulk_write

void usb_bulk_write(void)

{
                    /* WARNING: Could not recover jumptable at 0x000180050226. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  usb_bulk_write();
  return;
}


==================================================================

### EXPORT FUNC 18005022c (6 bytes) name=usb_bulk_read

void usb_bulk_read(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018005022c. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  usb_bulk_read();
  return;
}


==================================================================

### EXPORT FUNC 180050232 (6 bytes) name=usb_release_interface

void usb_release_interface(void)

{
                    /* WARNING: Could not recover jumptable at 0x000180050232. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  usb_release_interface();
  return;
}


==================================================================

### EXPORT FUNC 180050238 (6 bytes) name=usb_close

void usb_close(void)

{
                    /* WARNING: Could not recover jumptable at 0x000180050238. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  usb_close();
  return;
}


==================================================================

### EXPORT FUNC 18005023e (6 bytes) name=usb_find_busses

void usb_find_busses(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018005023e. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  usb_find_busses();
  return;
}


==================================================================

### EXPORT FUNC 180050244 (6 bytes) name=usb_find_devices

void usb_find_devices(void)

{
                    /* WARNING: Could not recover jumptable at 0x000180050244. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  usb_find_devices();
  return;
}


==================================================================

### EXPORT FUNC 18005024a (6 bytes) name=usb_get_busses

void usb_get_busses(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018005024a. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  usb_get_busses();
  return;
}


==================================================================

### EXPORT FUNC 180050250 (6 bytes) name=usb_open

void usb_open(void)

{
                    /* WARNING: Could not recover jumptable at 0x000180050250. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  usb_open();
  return;
}


==================================================================

### EXPORT FUNC 180050256 (6 bytes) name=usb_set_configuration

void usb_set_configuration(void)

{
                    /* WARNING: Could not recover jumptable at 0x000180050256. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  usb_set_configuration();
  return;
}


==================================================================

### EXPORT FUNC 18005025c (6 bytes) name=usb_claim_interface

void usb_claim_interface(void)

{
                    /* WARNING: Could not recover jumptable at 0x00018005025c. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  usb_claim_interface();
  return;
}


==================================================================

### EXPORT FUNC 180050262 (6 bytes) name=usb_strerror

void usb_strerror(void)

{
                    /* WARNING: Could not recover jumptable at 0x000180050262. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  usb_strerror();
  return;
}


==================================================================

### EXPORT FUNC 180050268 (6 bytes) name=usb_clear_halt

void usb_clear_halt(void)

{
                    /* WARNING: Could not recover jumptable at 0x000180050268. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  usb_clear_halt();
  return;
}


==================================================================

### EXPORT FUNC 180050270 (121 bytes) name=_AtlGetThreadACPFake

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    unsigned int __cdecl ATL::_AtlGetThreadACPFake(void)
   
   Library: Visual Studio 2005 Release */

uint __cdecl ATL::_AtlGetThreadACPFake(void)

{
  LCID Locale;
  int iVar1;
  UINT UVar2;
  char *pcVar3;
  uint uVar4;
  undefined1 auStack_38 [32];
  char local_18;
  char local_17 [7];
  ulonglong local_10;
  
  local_10 = DAT_18006cea0 ^ (ulonglong)auStack_38;
  uVar4 = 0;
  Locale = GetThreadLocale();
  iVar1 = GetLocaleInfoA(Locale,0x1004,&local_18,7);
  if ((iVar1 != 0) && (pcVar3 = &local_18, local_18 != '\0')) {
    do {
      pcVar3 = pcVar3 + 1;
      uVar4 = local_18 + -0x30 + uVar4 * 10;
      local_18 = *pcVar3;
    } while (local_18 != '\0');
    if (uVar4 != 0) {
      return uVar4;
    }
  }
  UVar2 = GetACP();
  return UVar2;
}


==================================================================

### EXPORT FUNC 1800502ec (6 bytes) name=FUN_1800502ec

undefined8 FUN_1800502ec(void)

{
  return 3;
}


==================================================================

### EXPORT FUNC 1800502f4 (109 bytes) name=_AtlGetThreadACPThunk

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */
/* Library Function - Single Match
    unsigned int __cdecl ATL::_AtlGetThreadACPThunk(void)
   
   Library: Visual Studio 2005 Release */

uint __cdecl ATL::_AtlGetThreadACPThunk(void)

{
  uint uVar1;
  code *pcVar2;
  undefined1 auStack_d8 [32];
  _OSVERSIONINFOA local_b8;
  ulonglong local_18;
  
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_d8;
  local_b8.dwOSVersionInfoSize = 0x94;
  GetVersionExA(&local_b8);
  if ((local_b8.dwPlatformId != 2) || (pcVar2 = FUN_1800502ec, local_b8.dwMajorVersion < 5)) {
    pcVar2 = _AtlGetThreadACPFake;
  }
  LOCK();
  UNLOCK();
  PTR__AtlGetThreadACPThunk_18006e7b0 = pcVar2;
  uVar1 = (*pcVar2)();
  return uVar1;
}


==================================================================

### EXPORT FUNC 180050364 (28 bytes) name=FUN_180050364

undefined8 FUN_180050364(LPCRITICAL_SECTION param_1)

{
  InitializeCriticalSection(param_1);
  return 0;
}


==================================================================

### EXPORT FUNC 180050394 (34 bytes) name=FUN_180050394

bool FUN_180050394(undefined8 *param_1)

{
  return *(int *)*param_1 == -0x3fffffe9;
}


==================================================================

### EXPORT FUNC 1800503b8 (181 bytes) name=FUN_1800503b8

undefined8 FUN_1800503b8(int *param_1,HINSTANCE param_2)

{
  code *pcVar1;
  undefined8 uVar2;
  longlong lVar3;
  int iVar4;
  
  if (param_1 == (int *)0x0) {
LAB_1800503d7:
    uVar2 = 0x80070057;
  }
  else {
    if (*param_1 != 0) {
      if (*param_1 != 0x48) goto LAB_1800503d7;
      iVar4 = 0;
      if (0 < param_1[0x10]) {
        lVar3 = 0;
        do {
          if ((lVar3 < 0) || (param_1[0x10] <= iVar4)) {
            RaiseException(0xc000008c,1,0,(ULONG_PTR *)0x0);
            pcVar1 = (code *)swi(3);
            uVar2 = (*pcVar1)();
            return uVar2;
          }
          UnregisterClassA((LPCSTR)(ulonglong)*(ushort *)(*(longlong *)(param_1 + 0xe) + lVar3),
                           param_2);
          iVar4 = iVar4 + 1;
          lVar3 = lVar3 + 2;
        } while (iVar4 < param_1[0x10]);
      }
      if (*(LPVOID *)(param_1 + 0xe) != (LPVOID)0x0) {
        FUN_180034a70(*(LPVOID *)(param_1 + 0xe));
        param_1[0xe] = 0;
        param_1[0xf] = 0;
      }
      param_1[0x10] = 0;
      param_1[0x11] = 0;
      DeleteCriticalSection((LPCRITICAL_SECTION)(param_1 + 2));
      *param_1 = 0;
    }
    uVar2 = 0;
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 180050470 (52 bytes) name=~CAtlBaseModule

/* Library Function - Single Match
    public: __cdecl ATL::CAtlBaseModule::~CAtlBaseModule(void) __ptr64
   
   Library: Visual Studio */

void __thiscall ATL::CAtlBaseModule::~CAtlBaseModule(CAtlBaseModule *this)

{
  DeleteCriticalSection((LPCRITICAL_SECTION)(this + 0x28));
  if (*(LPVOID *)(this + 0x50) != (LPVOID)0x0) {
    FUN_180034a70(*(LPVOID *)(this + 0x50));
    *(undefined8 *)(this + 0x50) = 0;
  }
  *(undefined4 *)(this + 0x58) = 0;
  *(undefined4 *)(this + 0x5c) = 0;
  return;
}


==================================================================

### EXPORT FUNC 1800504a4 (258 bytes) name=FUN_1800504a4

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined4 * FUN_1800504a4(undefined4 *param_1)

{
  undefined8 uVar1;
  undefined1 auStack_d8 [32];
  _OSVERSIONINFOA local_b8;
  ulonglong local_18;
  
  local_18 = DAT_18006cea0 ^ (ulonglong)auStack_d8;
  FUN_1800357d0((ulonglong *)(param_1 + 10),0,0x28);
  *(undefined8 *)(param_1 + 0x14) = 0;
  param_1[0x16] = 0;
  param_1[0x17] = 0;
  *(undefined8 *)(param_1 + 4) = 0x180000000;
  *(undefined8 *)(param_1 + 2) = 0x180000000;
  *param_1 = 0x60;
  *(undefined1 *)(param_1 + 6) = 0;
  FUN_1800357d0((ulonglong *)&local_b8,0,0x94);
  local_b8.dwOSVersionInfoSize = 0x94;
  GetVersionExA(&local_b8);
  if (local_b8.dwPlatformId == 2) {
    if (local_b8.dwMajorVersion < 5) goto LAB_180050551;
  }
  else if ((local_b8.dwPlatformId != 1) ||
          ((local_b8.dwMajorVersion < 5 &&
           ((local_b8.dwMajorVersion != 4 || (local_b8.dwMinorVersion == 0)))))) goto LAB_180050551;
  *(undefined1 *)(param_1 + 6) = 1;
LAB_180050551:
  param_1[7] = 0x800;
  *(undefined **)(param_1 + 8) = &DAT_180058e98;
  uVar1 = FUN_180050364((LPCRITICAL_SECTION)(param_1 + 10));
  if ((int)uVar1 < 0) {
    DAT_1800da4a4 = 1;
  }
  return param_1;
}


==================================================================

### EXPORT FUNC 1800505a6 (12 bytes) name=DelayLoad_CreateStdAccessibleObject

void DelayLoad_CreateStdAccessibleObject
               (undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  FUN_1800505b2(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### EXPORT FUNC 1800505b2 (121 bytes) name=FUN_1800505b2

void FUN_1800505b2(undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  longlong *in_RAX;
  FARPROC UNRECOVERED_JUMPTABLE;
  
  UNRECOVERED_JUMPTABLE = FUN_180050644(&ImgDelayDescr_180068a50.grAttrs,in_RAX);
                    /* WARNING: Could not recover jumptable at 0x000180050629. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  (*UNRECOVERED_JUMPTABLE)(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### EXPORT FUNC 18005062b (6 bytes) name=CreateStdAccessibleObject

HRESULT __stdcall CreateStdAccessibleObject(HWND hwnd,LONG idObject,IID *riid,void **ppvObject)

{
  HRESULT HVar1;
  
                    /* WARNING: Could not recover jumptable at 0x00018005062b. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  HVar1 = CreateStdAccessibleObject(hwnd,idObject,riid,ppvObject);
  return HVar1;
}


==================================================================

### EXPORT FUNC 180050631 (12 bytes) name=DelayLoad_LresultFromObject

void DelayLoad_LresultFromObject
               (undefined8 param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4)

{
  FUN_1800505b2(param_1,param_2,param_3,param_4);
  return;
}


==================================================================

### EXPORT FUNC 18005063d (6 bytes) name=LresultFromObject

LRESULT __stdcall LresultFromObject(IID *riid,WPARAM wParam,LPUNKNOWN punk)

{
  LRESULT LVar1;
  
                    /* WARNING: Could not recover jumptable at 0x00018005063d. Too many branches */
                    /* WARNING: Treating indirect jump as call */
  LVar1 = LresultFromObject(riid,wParam,punk);
  return LVar1;
}


==================================================================

### EXPORT FUNC 180050644 (750 bytes) name=FUN_180050644

FARPROC FUN_180050644(uint *param_1,longlong *param_2)

{
  HMODULE pHVar1;
  uint uVar2;
  uint uVar3;
  FARPROC pFVar4;
  HMODULE hLibModule;
  undefined8 *puVar5;
  longlong lVar6;
  ulonglong uVar7;
  longlong *plVar8;
  undefined4 *local_res8;
  undefined4 *local_res10;
  undefined4 *local_res18;
  undefined4 local_88 [2];
  uint *local_80;
  longlong *local_78;
  LPCSTR local_70;
  uint local_68;
  char *local_60;
  HMODULE local_58;
  FARPROC local_50;
  DWORD local_48;
  
  local_88[0] = 0x48;
  uVar2 = param_1[5];
  uVar3 = param_1[7];
  local_70 = (LPCSTR)((ulonglong)param_1[1] + 0x180000000);
  local_68 = 0;
  local_58 = (HMODULE)0x0;
  local_50 = (FARPROC)0x0;
  local_60 = (char *)0x0;
  local_48 = 0;
  plVar8 = (longlong *)((ulonglong)param_1[2] + 0x180000000);
  lVar6 = (ulonglong)param_1[4] + 0x180000000;
  local_80 = param_1;
  local_78 = param_2;
  if ((*param_1 & 1) == 0) {
    local_res8 = local_88;
    RaiseException(0xc06d0057,0,1,(ULONG_PTR *)&local_res8);
    pFVar4 = (FARPROC)0x0;
  }
  else {
    hLibModule = (HMODULE)*plVar8;
    uVar7 = (longlong)((longlong)param_2 - ((ulonglong)param_1[3] + 0x180000000)) >> 3 & 0xffffffff;
    local_68 = (uint)((*(ulonglong *)(lVar6 + uVar7 * 8) & 0x8000000000000000) == 0);
    if (local_68 == 0) {
      local_60 = (char *)(ulonglong)*(ushort *)(lVar6 + uVar7 * 8);
    }
    else {
      local_60 = IMAGE_DOS_HEADER_180000000.e_magic + (ulonglong)*(uint *)(lVar6 + uVar7 * 8) + 2;
    }
    pFVar4 = (FARPROC)0x0;
    if ((DAT_180073730 == (code *)0x0) ||
       (pFVar4 = (FARPROC)(*DAT_180073730)(0,local_88), pFVar4 == (FARPROC)0x0)) {
      if (hLibModule == (HMODULE)0x0) {
        if ((((DAT_180073730 == (code *)0x0) ||
             (hLibModule = (HMODULE)(*DAT_180073730)(1,local_88), hLibModule == (HMODULE)0x0)) &&
            (hLibModule = LoadLibraryA(local_70), hLibModule == (HMODULE)0x0)) &&
           ((local_48 = GetLastError(), DAT_180073728 == (code *)0x0 ||
            (hLibModule = (HMODULE)(*DAT_180073728)(3,local_88), hLibModule == (HMODULE)0x0)))) {
          local_res10 = local_88;
          RaiseException(0xc06d007e,0,1,(ULONG_PTR *)&local_res10);
          return local_50;
        }
        LOCK();
        pHVar1 = (HMODULE)*plVar8;
        *plVar8 = (longlong)hLibModule;
        UNLOCK();
        if (pHVar1 == hLibModule) {
          FreeLibrary(hLibModule);
        }
        else if ((param_1[6] != 0) && (puVar5 = LocalAlloc(0x40,0x10), puVar5 != (undefined8 *)0x0))
        {
          puVar5[1] = param_1;
          *puVar5 = DAT_180073720;
          DAT_180073720 = puVar5;
        }
      }
      local_58 = hLibModule;
      if (DAT_180073730 != (code *)0x0) {
        pFVar4 = (FARPROC)(*DAT_180073730)(2,local_88);
      }
      if (((pFVar4 == (FARPROC)0x0) &&
          (((((param_1[5] == 0 || (param_1[7] == 0)) ||
             (lVar6 = (longlong)hLibModule[0xf].unused,
             *(int *)((longlong)&hLibModule->unused + lVar6) != 0x4550)) ||
            ((*(uint *)((longlong)&hLibModule[2].unused + lVar6) != uVar3 ||
             (hLibModule != *(HMODULE *)((longlong)&hLibModule[0xc].unused + lVar6))))) ||
           (pFVar4 = *(FARPROC *)((ulonglong)uVar2 + 0x180000000 + uVar7 * 8),
           pFVar4 == (FARPROC)0x0)))) &&
         (pFVar4 = GetProcAddress(hLibModule,local_60), pFVar4 == (FARPROC)0x0)) {
        local_48 = GetLastError();
        if (DAT_180073728 != (code *)0x0) {
          pFVar4 = (FARPROC)(*DAT_180073728)(4,local_88);
        }
        if (pFVar4 == (FARPROC)0x0) {
          local_res18 = local_88;
          RaiseException(0xc06d007f,0,1,(ULONG_PTR *)&local_res18);
          pFVar4 = local_50;
        }
      }
      *param_2 = (longlong)pFVar4;
    }
    if (DAT_180073730 != (code *)0x0) {
      local_48 = 0;
      local_58 = hLibModule;
      local_50 = pFVar4;
      (*DAT_180073730)(5,local_88);
    }
  }
  return pFVar4;
}


==================================================================

### EXPORT FUNC 180050940 (1652 bytes) name=FUN_180050940

/* WARNING: Type propagation algorithm not settling */
/* WARNING: Globals starting with '_' overlap smaller symbols at the same address */

ulonglong FUN_180050940(ulonglong param_1,float param_2)

{
  uint uVar1;
  uint uVar2;
  byte bVar3;
  float fVar4;
  float fVar5;
  int iVar6;
  uint uVar7;
  bool bVar8;
  bool bVar9;
  float fVar10;
  ulonglong uVar11;
  double dVar12;
  undefined4 in_XMM1_Db;
  uint uVar13;
  undefined4 in_stack_ffffffffffffffb4;
  
  fVar10 = (float)param_1;
  uVar13 = 0;
  fVar4 = ABS(fVar10);
  bVar8 = fVar4 != fVar10;
  fVar5 = ABS(param_2);
  bVar9 = fVar5 != param_2;
  if (fVar10 == 1.0) {
LAB_1800509bd:
    uVar11 = (ulonglong)(uint)DAT_18005e700;
  }
  else {
    if (fVar5 == 0.0) {
      if ((((uint)fVar10 & 0x7f800000) != 0x7f800000) || ((param_1 & 0x7fffff) == 0))
      goto LAB_1800509bd;
    }
    else {
      uVar7 = (uint)fVar10 & 0x7f800000;
      if ((uVar7 == 0x7f800000) && ((param_1 & 0x7fffff) != 0)) {
        if (((fVar10 == -NAN) && (((uint)param_2 & 0x7f800000) == 0x7f800000)) &&
           (((uint)param_2 & 0x7fffff) != 0)) {
LAB_180050a8f:
          uVar11 = FUN_180051d70(&DAT_18005ef84,0x1d,param_2,1,8,
                                 CONCAT44(in_stack_ffffffffffffffb4,0x21),fVar10,param_2,2);
          return uVar11;
        }
      }
      else {
        if ((((uint)param_2 & 0x7f800000) != 0x7f800000) || (((uint)param_2 & 0x7fffff) == 0)) {
          if (param_2 == 1.0) {
            return param_1;
          }
          if (((uint)param_2 & 0x7f800000) < 0x4f000001) {
            iVar6 = ((uint)param_2 >> 0x17 & 0xff) - 0x7e;
            uVar2 = uVar13;
            if (0 < iVar6) {
              if (iVar6 < 0x19) {
                bVar3 = 0x18 - (char)iVar6;
                uVar1 = (1 << (bVar3 & 0x1f)) - 1;
                uVar2 = 0;
                if (((uint)param_2 & uVar1) == 0) {
                  uVar2 = 2 - (((~uVar1 & (uint)param_2) >> (bVar3 & 0x1f) & 1) != 0);
                }
              }
              else {
                uVar2 = 2;
              }
            }
            if (uVar7 == 0x7f800000) {
              if (!bVar8) {
                if (bVar9) {
                  return 0;
                }
                return param_1;
              }
              if (uVar2 == 1) {
                if (bVar9) {
                  return (ulonglong)(uint)DAT_18005e9d8;
                }
                return param_1;
              }
              if (bVar9) {
                return 0;
              }
LAB_180050d1d:
              return (ulonglong)(uint)(DAT_18005e9d8 - fVar10);
            }
            if ((param_1 & 0x7fffffff) == 0) {
              if (!bVar8) {
                if (bVar9) {
                  uVar11 = FUN_180051d70(&DAT_18005ef84,0x1d,
                                         (float)((uint)fVar10 & 0x80000000 | 0x7f800000),2,4,
                                         CONCAT44(in_stack_ffffffffffffffb4,0x22),fVar10,param_2,2);
                  return uVar11;
                }
                return param_1;
              }
              if (bVar9) {
                if (uVar2 == 1) {
                  uVar11 = FUN_180051d70(&DAT_18005ef84,0x1d,-INFINITY,2,4,
                                         CONCAT44(in_stack_ffffffffffffffb4,0x22),fVar10,param_2,2);
                  return uVar11;
                }
                uVar13 = 4;
                iVar6 = 2;
                goto LAB_180050bfa;
              }
              if (uVar2 == 1) {
                return param_1;
              }
              goto LAB_180050d1d;
            }
            if (bVar8) {
              if (uVar2 == 0) {
                uVar11 = FUN_180051d70(&DAT_18005ef84,0x1d,-NAN,1,8,
                                       CONCAT44(in_stack_ffffffffffffffb4,0x21),fVar10,param_2,2);
                return uVar11;
              }
              uVar13 = (uint)(uVar2 == 1);
              fVar10 = fVar4;
            }
            if ((uint)fVar5 < 0x2e800000) {
              return CONCAT44(in_XMM1_Db,param_2 + DAT_18005e700);
            }
            dVar12 = FUN_1800519d0((double)fVar10);
            dVar12 = FUN_180051580(dVar12 * (double)param_2);
            if (dVar12 <= _DAT_18005ef78) {
              if (DAT_18005ef70 <= dVar12) {
                if (uVar13 == 0) {
                  return CONCAT44((int)((ulonglong)DAT_18005ef70 >> 0x20),(float)dVar12);
                }
                return CONCAT44((int)((ulonglong)(DAT_18005ef68 - dVar12) >> 0x20),
                                (float)(DAT_18005ef68 - dVar12));
              }
              if (uVar13 != 0) {
                fVar4 = -0.0;
                goto LAB_180050b79;
              }
              goto LAB_180050b60;
            }
            if (uVar13 != 0) {
              uVar11 = FUN_180051d70(&DAT_18005ef84,0x1d,-INFINITY,3,0x11,
                                     CONCAT44(in_stack_ffffffffffffffb4,0x22),fVar10,param_2,2);
              return uVar11;
            }
LAB_180050be1:
            uVar13 = 0x11;
            iVar6 = 3;
LAB_180050bfa:
            uVar11 = FUN_180051d70(&DAT_18005ef84,0x1d,INFINITY,iVar6,uVar13,
                                   CONCAT44(in_stack_ffffffffffffffb4,0x22),fVar10,param_2,2);
            return uVar11;
          }
          bVar8 = fVar5 == INFINITY;
          if (bVar9) {
            if ((param_1 & 0x7fffffff) == 0) {
              uVar13 = 4;
              iVar6 = 2;
              goto LAB_180050bfa;
            }
            if ((uint)fVar4 < 0x3f800000) goto joined_r0x000180050c4e;
            if (fVar4 == 1.0) {
              return (ulonglong)DAT_18005ef80;
            }
            if (bVar8) {
              return 0;
            }
          }
          else {
            if ((param_1 & 0x7fffffff) == 0) {
              return 0;
            }
            if (0x3f7fffff < (uint)fVar4) {
              if (fVar4 == 1.0) {
                return (ulonglong)(uint)DAT_18005e700;
              }
joined_r0x000180050c4e:
              if (bVar8) {
                _controlfp_s((uint *)0x0,0,0);
                return 0x7f800000;
              }
              goto LAB_180050be1;
            }
            if (bVar8) {
              return 0;
            }
          }
LAB_180050b60:
          fVar4 = 0.0;
LAB_180050b79:
          uVar11 = FUN_180051d70(&DAT_18005ef84,0x1d,fVar4,4,0x12,
                                 CONCAT44(in_stack_ffffffffffffffb4,0x22),fVar10,param_2,2);
          return uVar11;
        }
        if (((param_2 != -NAN) || (uVar7 != 0x7f800000)) || ((param_1 & 0x7fffff) == 0))
        goto LAB_180050a8f;
      }
    }
    uVar11 = FUN_180051d70(&DAT_18005ef84,0x1d,fVar10,1,8,CONCAT44(in_stack_ffffffffffffffb4,0x21),
                           fVar10,param_2,2);
  }
  return uVar11;
}


==================================================================

### EXPORT FUNC 180050fc0 (754 bytes) name=FUN_180050fc0

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

ulonglong FUN_180050fc0(ulonglong param_1)

{
  float fVar1;
  int iVar2;
  uint uVar3;
  uint uVar4;
  float fVar5;
  undefined4 uVar7;
  ulonglong uVar6;
  float fVar8;
  undefined4 in_stack_ffffffffffffffc4;
  
  fVar8 = (float)param_1;
  uVar7 = (undefined4)(param_1 >> 0x20);
  fVar1 = ABS(fVar8);
  if (0x42b17217 < (uint)fVar1) {
    if (0x7f7fffff < (uint)fVar1) {
      if ((param_1 & 0x7fffff) != 0) {
        uVar6 = FUN_180051d70(&DAT_18005f0b8,0x14,(float)((uint)fVar8 | 0x400000),1,0,
                              CONCAT44(in_stack_ffffffffffffffc4,0x21),fVar8,0.0,1);
        return uVar6;
      }
      if ((int)fVar8 < 0) {
        return 0;
      }
      return param_1;
    }
    if (_DAT_18005f090 <= fVar8) {
      uVar6 = FUN_180051d70(&DAT_18005f0b8,0x14,INFINITY,3,0x11,
                            CONCAT44(in_stack_ffffffffffffffc4,0x22),fVar8,0.0,1);
      return uVar6;
    }
    if (fVar8 < DAT_18005f094) {
      uVar6 = FUN_180051d70(&DAT_18005f0b8,0x14,0.0,4,0x12,CONCAT44(in_stack_ffffffffffffffc4,0x22),
                            fVar8,0.0,1);
      return uVar6;
    }
  }
  if ((uint)fVar1 < 0x3c800000) {
    if ((uint)fVar1 < 0x32800000) {
      return CONCAT44(uVar7,fVar8 + DAT_18005e700);
    }
    return CONCAT44(uVar7,((((((fVar8 * _DAT_18005f0b4 + _DAT_18005f0b0) * fVar8 + _DAT_18005f0ac) *
                              fVar8 + _DAT_18005f0a8) * fVar8 + _DAT_18005f0a4) * fVar8 +
                           DAT_18005e704) * fVar8 + DAT_18005e700) * fVar8 + DAT_18005e700);
  }
  fVar1 = fVar8 * _DAT_18005f098;
  if (fVar1 <= _DAT_180057598) {
    fVar1 = fVar1 - DAT_18005e704;
  }
  else {
    fVar1 = fVar1 + DAT_18005e704;
  }
  uVar4 = (uint)fVar1;
  uVar3 = uVar4 & 0x1f;
  fVar1 = *(float *)(&DAT_18005ef90 + (longlong)(int)uVar3 * 4);
  fVar8 = fVar8 - (float)(int)uVar4 * _DAT_18005f09c;
  iVar2 = (int)((uVar4 - uVar3) + ((int)(uVar4 - uVar3) >> 0x1f & 0x1fU)) >> 5;
  fVar5 = (float)(int)-uVar4 * _DAT_18005f0a0 + fVar8;
  fVar8 = ((fVar5 * _DAT_18005f0a4 + DAT_18005e704) * fVar5 * fVar5 +
           (float)(int)-uVar4 * _DAT_18005f0a0 + fVar8) *
          (*(float *)(&DAT_18005f010 + (longlong)(int)uVar3 * 4) + fVar1) +
          *(float *)(&DAT_18005f010 + (longlong)(int)uVar3 * 4);
  if (iVar2 + 0x7eU < 0xfe) {
    return (ulonglong)(uint)((fVar1 + fVar8) * (float)((iVar2 + 0x7f) * 0x800000));
  }
  return (ulonglong)
         (uint)((fVar1 + fVar8) * (float)((iVar2 / 2 + 0x7f) * 0x800000) *
               (float)(((iVar2 - iVar2 / 2) + 0x7f) * 0x800000));
}


==================================================================

### EXPORT FUNC 1800512c0 (249 bytes) name=FUN_1800512c0

ulonglong FUN_1800512c0(float param_1)

{
  ulonglong uVar1;
  undefined4 in_stack_ffffffffffffffd4;
  
  if (((uint)param_1 & 0x7f800000) == 0x7f800000) {
    if (((uint)param_1 & 0x7fffff) != 0) {
      uVar1 = FUN_180051d70("sqrtf",5,(float)((uint)param_1 | 0x400000),1,0,
                            CONCAT44(in_stack_ffffffffffffffd4,0x21),param_1,0.0,1);
      return uVar1;
    }
    if ((int)param_1 < 0) goto LAB_180051343;
  }
  if ((-1 < (int)param_1) || (ABS(param_1) == 0.0)) {
    return (ulonglong)(uint)SQRT(param_1);
  }
LAB_180051343:
  uVar1 = FUN_180051d70("sqrtf",5,-NAN,1,8,CONCAT44(in_stack_ffffffffffffffd4,0x21),param_1,0.0,1);
  return uVar1;
}


==================================================================

### EXPORT FUNC 1800513c0 (295 bytes) name=FUN_1800513c0

double FUN_1800513c0(double param_1)

{
  double dVar1;
  undefined4 in_stack_ffffffffffffffd4;
  
  if (((ulonglong)param_1 & 0x7ff0000000000000) == 0x7ff0000000000000) {
    if (((ulonglong)param_1 & 0xfffffffffffff) != 0) {
      dVar1 = (double)FUN_180051f80(&DAT_18005f0c8,5,(ulonglong)param_1 | 0x8000000000000,1,0,
                                    CONCAT44(in_stack_ffffffffffffffd4,0x21),param_1,0,1);
      return dVar1;
    }
    dVar1 = (double)((ulonglong)param_1 & 0x8000000000000000);
  }
  else {
    if (((ulonglong)param_1 & 0x8000000000000000) == 0) goto LAB_1800514c8;
    dVar1 = ABS(param_1);
  }
  if (dVar1 != 0.0) {
    dVar1 = (double)FUN_180051f80(&DAT_18005f0c8,5,0xfff8000000000000,1,8,
                                  CONCAT44(in_stack_ffffffffffffffd4,0x21),param_1,0,1);
    return dVar1;
  }
LAB_1800514c8:
  return SQRT(param_1);
}


==================================================================

### EXPORT FUNC 1800514f0 (130 bytes) name=_controlfp_s

/* Library Function - Single Match
    _controlfp_s
   
   Library: Visual Studio 2005 Release */

errno_t __cdecl _controlfp_s(uint *_CurrentState,uint _NewValue,uint _Mask)

{
  DWORD *pDVar1;
  uint uVar2;
  
  uVar2 = _Mask & 0xfff7ffff;
  if ((_NewValue & uVar2 & 0xfcf0fce0) != 0) {
    if (_CurrentState != (uint *)0x0) {
      uVar2 = FUN_180052190(0,0);
      *_CurrentState = uVar2;
    }
    pDVar1 = FUN_180035b40();
    *pDVar1 = 0x16;
    FUN_1800384e0(0,0,0,0,0);
    return 0x16;
  }
  if (_CurrentState != (uint *)0x0) {
    uVar2 = FUN_180052190(_NewValue,uVar2);
    *_CurrentState = uVar2;
    return 0;
  }
  FUN_180052190(_NewValue,uVar2);
  return 0;
}


==================================================================

### EXPORT FUNC 180051580 (1095 bytes) name=FUN_180051580

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

double FUN_180051580(double param_1)

{
  int iVar1;
  double dVar2;
  ulonglong uVar3;
  uint uVar4;
  double dVar5;
  double dVar6;
  double dVar7;
  uint uVar8;
  undefined4 uVar9;
  undefined4 in_stack_ffffffffffffffb4;
  
  dVar2 = ABS(param_1);
  if ((ulonglong)dVar2 < 0x4090000000000000) {
LAB_1800516e1:
    if ((ulonglong)dVar2 < 0x3fb7154764ee6c2f) {
      if (0x3bffffffffffffff < (ulonglong)dVar2) {
        dVar2 = (double)((ulonglong)param_1 & 0xfffffffff8000000);
        dVar6 = param_1 * DAT_18005f2e8;
        dVar5 = (dVar2 * DAT_18005f2e8 - dVar6) + dVar2 * DAT_18005f2f0 +
                (param_1 - dVar2) * DAT_18005f2e8 + (param_1 - dVar2) * DAT_18005f2f0;
        dVar2 = dVar5 + dVar6;
        dVar2 = (((dVar2 * _DAT_18005f358 + _DAT_18005f348) * dVar2 + _DAT_18005f338) * dVar2 +
                DAT_18005f368) /
                ((((dVar2 * _DAT_18005f360 - _DAT_18005f350) * dVar2 + _DAT_18005f340) * dVar2 -
                 _DAT_18005f330) * dVar2 + DAT_18005f368);
        return dVar2 * dVar5 + dVar2 * dVar6 + _DAT_18005f370;
      }
      return param_1 + _DAT_18005f370;
    }
    dVar2 = param_1 * _DAT_18005f328;
    if (dVar2 <= 0.0) {
      dVar2 = dVar2 - DAT_18005f320;
    }
    else {
      dVar2 = dVar2 + DAT_18005f320;
    }
    uVar4 = (uint)dVar2;
    uVar8 = uVar4 & 0x1f;
    dVar2 = *(double *)(&DAT_18005f0d0 + (longlong)(int)uVar8 * 8);
    iVar1 = (int)((uVar4 - uVar8) + ((int)(uVar4 - uVar8) >> 0x1f & 0x1fU)) >> 5;
    dVar7 = (param_1 - (double)(int)uVar4 * _DAT_18005f2f8) * DAT_18005f2e0;
    dVar6 = (double)(int)-uVar4 * 0.0 * DAT_18005f2e0;
    dVar5 = dVar6 + dVar7;
    dVar5 = (((((dVar5 * _DAT_18005f318 + _DAT_18005f310) * dVar5 + _DAT_18005f308) * dVar5 +
              _DAT_18005f300) * dVar5 + DAT_18005f320) * dVar5 * dVar5 + dVar6 + dVar7) *
            (*(double *)(&DAT_18005f1d0 + (longlong)(int)uVar8 * 8) + dVar2) +
            *(double *)(&DAT_18005f1d0 + (longlong)(int)uVar8 * 8);
    if (0x7fb < iVar1 + 0x3fdU) {
      return (dVar2 + dVar5) * (double)((longlong)(iVar1 / 2) + 0x3ff << 0x34) *
             (double)((longlong)(iVar1 - iVar1 / 2) + 0x3ff << 0x34);
    }
    return (dVar2 + dVar5) * (double)((longlong)iVar1 + 0x3ff << 0x34);
  }
  if ((ulonglong)dVar2 < 0x7ff0000000000000) {
    if (_DAT_18005f2d0 < param_1) {
      dVar2 = (double)FUN_180051f80(&DAT_18005f378,0x14,0x7ff0000000000000,3,0x11,
                                    CONCAT44(in_stack_ffffffffffffffb4,0x22),param_1,0,1);
      return dVar2;
    }
    if (DAT_18005f2d8 <= param_1) goto LAB_1800516e1;
    iVar1 = 4;
    uVar9 = 0x22;
    uVar8 = 0x12;
    uVar3 = 0;
  }
  else {
    if (((ulonglong)param_1 & 0xfffffffffffff) == 0) {
      if (((ulonglong)param_1 & 0x8000000000000000) == 0) {
        return param_1;
      }
      return 0.0;
    }
    uVar9 = 0x21;
    uVar3 = (ulonglong)param_1 | 0x8000000000000;
    iVar1 = 1;
    uVar8 = 0;
  }
  dVar2 = (double)FUN_180051f80(&DAT_18005f378,0x14,uVar3,iVar1,uVar8,
                                CONCAT44(in_stack_ffffffffffffffb4,uVar9),param_1,0,1);
  return dVar2;
}


==================================================================

### EXPORT FUNC 1800519d0 (927 bytes) name=FUN_1800519d0

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

double FUN_1800519d0(double param_1)

{
  uint uVar1;
  int iVar2;
  int iVar3;
  double dVar4;
  double dVar5;
  double dVar6;
  double dVar7;
  double dVar8;
  undefined4 in_stack_ffffffffffffffc4;
  
  if (((ulonglong)param_1 & 0x7ff0000000000000) == 0x7ff0000000000000) {
    if (((ulonglong)param_1 & 0xfffffffffffff) != 0) {
      dVar4 = (double)FUN_180051f80(&DAT_18005f800,0x1a,(ulonglong)param_1 | 0x8000000000000,1,0,
                                    CONCAT44(in_stack_ffffffffffffffc4,0x21),param_1,0,1);
      return dVar4;
    }
    if (((ulonglong)param_1 & 0x8000000000000000) == 0) {
      return param_1;
    }
  }
  else {
    if (ABS(param_1) == 0.0) {
      dVar4 = (double)FUN_180051f80(&DAT_18005f800,0x1a,0xfff0000000000000,2,4,
                                    CONCAT44(in_stack_ffffffffffffffc4,0x22),param_1,0,1);
      return dVar4;
    }
    if (((ulonglong)param_1 & 0x8000000000000000) == 0) {
      if (0x2f88200000000 < (longlong)param_1 + 0xc011f05600000000U) {
        if ((ulonglong)param_1 < 0x10000000000000) {
          iVar3 = 0x3c;
          param_1 = (double)((ulonglong)param_1 | 0x3d0000000000000) - _DAT_18005f7e8;
        }
        else {
          iVar3 = 0;
        }
        uVar1 = (uint)((ulonglong)param_1 >> 0x20);
        iVar2 = (uVar1 >> 0xe & 0x3f | 0x40) + (uVar1 >> 0xd & 1);
        dVar5 = (double)((ulonglong)param_1 & 0xfffffffffffff | 0x3fe0000000000000) -
                (double)iVar2 * _DAT_18005f7f0;
        dVar5 = dVar5 / (dVar5 * DAT_18005f320 + (double)iVar2 * _DAT_18005f7f0);
        dVar4 = dVar5 * dVar5;
        dVar4 = ((dVar4 * _DAT_18005f7c0 + _DAT_18005f7b8) * dVar4 + _DAT_18005f7b0) * dVar4 * dVar5
                + dVar5 + *(double *)(&DAT_18005f390 + (longlong)iVar2 * 8);
        return (double)(int)(((uVar1 >> 0x14 & 0x7ff) - iVar3) + -0x3ff) +
               *(double *)(&DAT_18005f180 + (longlong)iVar2 * 8) * DAT_18005f7c8 +
               dVar4 * DAT_18005f7d0 +
               *(double *)(&DAT_18005f180 + (longlong)iVar2 * 8) * DAT_18005f7d0 +
               dVar4 * DAT_18005f7c8;
      }
      dVar8 = param_1 - _DAT_18005f370;
      dVar4 = (double)((ulonglong)dVar8 & 0xffffffff00000000);
      dVar6 = dVar8 / (dVar8 + _DAT_18005f7f8);
      dVar7 = dVar6 + dVar6;
      dVar5 = dVar7 * dVar7;
      dVar5 = ((((dVar5 * _DAT_18005f7a8 + _DAT_18005f7a0) * dVar5 + _DAT_18005f798) * dVar5 +
               _DAT_18005f588) * dVar5 * dVar7 - dVar6 * dVar8) + (dVar8 - dVar4);
      return dVar5 * DAT_18005f7d0 + dVar4 * DAT_18005f7d0 + dVar5 * DAT_18005f7c8 +
             dVar4 * DAT_18005f7c8;
    }
  }
  dVar4 = (double)FUN_180051f80(&DAT_18005f800,0x1a,0xfff8000000000000,1,8,
                                CONCAT44(in_stack_ffffffffffffffc4,0x21),param_1,0,1);
  return dVar4;
}


==================================================================

### EXPORT FUNC 180051d70 (520 bytes) name=FUN_180051d70

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

ulonglong FUN_180051d70(undefined8 param_1,uint param_2,float param_3,int param_4,uint param_5,
                       undefined8 param_6,float param_7,float param_8,int param_9)

{
  float fVar1;
  uint uVar2;
  undefined4 extraout_var;
  undefined8 uVar3;
  uint uVar4;
  undefined4 extraout_XMM0_Db;
  undefined4 extraout_XMM0_Db_00;
  ulonglong uVar5;
  undefined1 auStackY_138 [32];
  ulonglong local_108;
  float local_100;
  float local_fc;
  int local_f8;
  undefined8 local_f0;
  double local_e8;
  double local_e0;
  double local_d8;
  uint local_c8 [12];
  float local_98;
  uint local_88;
  ulonglong local_58;
  undefined4 uVar6;
  
  local_58 = DAT_18006cea0 ^ (ulonglong)auStackY_138;
  uVar2 = _ctrlfp(0x1f80,0xffc0);
  local_108 = CONCAT44(extraout_var,uVar2);
  uVar4 = param_5 & 0x1f;
  local_100 = param_3;
  local_fc = param_3;
  if (((param_5 & 8) == 0) || (-1 < (char)uVar2)) {
    if (((param_5 & 4) == 0) || ((uVar2 & 0x200) == 0)) {
      if (((param_5 & 1) == 0) || ((uVar2 & 0x400) == 0)) {
        if (((param_5 & 2) != 0) && ((uVar2 & 0x800) != 0)) {
          if ((param_5 & 0x10) != 0) {
            _set_statfp(0x10);
          }
          uVar4 = param_5 & 0x1d;
        }
      }
      else {
        _set_statfp(8);
        uVar4 = param_5 & 0x1e;
      }
    }
    else {
      _set_statfp(4);
      uVar4 = param_5 & 0x1b;
    }
  }
  else {
    _set_statfp(1);
    uVar4 = param_5 & 0x17;
  }
  if (((param_5 & 0x10) != 0) && ((uVar2 & 0x1000) != 0)) {
    _set_statfp(0x20);
    uVar4 = uVar4 & 0xffffffef;
  }
  fVar1 = param_8;
  if (uVar4 != 0) {
    if (param_9 == 2) {
      local_98 = param_8;
      local_88 = local_88 & 0xffffffe1 | 1;
    }
    FUN_1800527e0(local_c8,&local_108,(ulonglong)param_5,param_2,(uint *)&param_7,(uint *)&local_100
                 );
  }
  if ((DAT_18006ed40 == 0) && (param_4 != 0)) {
    local_e8 = (double)param_7;
    local_e0 = (double)fVar1;
    local_d8 = (double)local_100;
    local_f8 = param_4;
    local_f0 = param_1;
    _ctrlfp((uint)local_108,0xffc0);
    uVar3 = FUN_180037e10();
    uVar6 = extraout_XMM0_Db;
    if ((int)uVar3 == 0) {
      _set_errno_from_matherr(param_4);
      uVar6 = extraout_XMM0_Db_00;
    }
    uVar5 = CONCAT44(uVar6,(float)local_d8);
  }
  else {
    _set_errno_from_matherr(param_4);
    _ctrlfp((uint)local_108,0xffc0);
    uVar5 = (ulonglong)(uint)local_100;
  }
  return uVar5;
}


==================================================================

### EXPORT FUNC 180051f80 (517 bytes) name=FUN_180051f80

/* WARNING: Function: __security_check_cookie replaced with injection: security_check_cookie */

undefined8
FUN_180051f80(undefined8 param_1,uint param_2,undefined8 param_3,int param_4,uint param_5,
             undefined8 param_6,undefined8 param_7,undefined8 param_8,int param_9)

{
  uint uVar1;
  undefined4 extraout_var;
  undefined8 uVar2;
  uint uVar3;
  undefined1 auStackY_138 [32];
  ulonglong local_108;
  undefined8 local_100;
  undefined8 local_f8;
  int local_f0;
  undefined8 local_e8;
  undefined8 local_e0;
  undefined8 local_d8;
  undefined8 local_d0;
  uint local_c8 [12];
  undefined8 local_98;
  uint local_88;
  ulonglong local_58;
  
  local_58 = DAT_18006cea0 ^ (ulonglong)auStackY_138;
  uVar1 = _ctrlfp(0x1f80,0xffc0);
  local_108 = CONCAT44(extraout_var,uVar1);
  uVar3 = param_5 & 0x1f;
  local_100 = param_3;
  local_f8 = param_3;
  if (((param_5 & 8) == 0) || (-1 < (char)uVar1)) {
    if (((param_5 & 4) == 0) || ((uVar1 & 0x200) == 0)) {
      if (((param_5 & 1) == 0) || ((uVar1 & 0x400) == 0)) {
        if (((param_5 & 2) != 0) && ((uVar1 & 0x800) != 0)) {
          if ((param_5 & 0x10) != 0) {
            _set_statfp(0x10);
          }
          uVar3 = param_5 & 0x1d;
        }
      }
      else {
        _set_statfp(8);
        uVar3 = param_5 & 0x1e;
      }
    }
    else {
      _set_statfp(4);
      uVar3 = param_5 & 0x1b;
    }
  }
  else {
    _set_statfp(1);
    uVar3 = param_5 & 0x17;
  }
  if (((param_5 & 0x10) != 0) && ((uVar1 & 0x1000) != 0)) {
    _set_statfp(0x20);
    uVar3 = uVar3 & 0xffffffef;
  }
  uVar2 = param_8;
  if (uVar3 != 0) {
    if (param_9 == 2) {
      local_98 = param_8;
      local_88 = local_88 & 0xffffffe3 | 3;
    }
    FUN_1800527b0(local_c8,&local_108,(ulonglong)param_5,param_2,(uint *)&param_7,(uint *)&local_100
                 );
  }
  if ((DAT_18006ed40 == 0) && (param_4 != 0)) {
    local_e0 = param_7;
    local_d0 = local_100;
    local_d8 = uVar2;
    local_f0 = param_4;
    local_e8 = param_1;
    _ctrlfp((uint)local_108,0xffc0);
    uVar2 = FUN_180037e10();
    if ((int)uVar2 == 0) {
      _set_errno_from_matherr(param_4);
    }
  }
  else {
    _set_errno_from_matherr(param_4);
    _ctrlfp((uint)local_108,0xffc0);
    local_d0 = local_100;
  }
  return local_d0;
}


==================================================================

### EXPORT FUNC 180052190 (625 bytes) name=FUN_180052190

uint FUN_180052190(uint param_1,uint param_2)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  
  uVar1 = _get_fpsr();
  uVar2 = 0;
  if ((uVar1 & 0x80) != 0) {
    uVar2 = 0x10;
  }
  if ((uVar1 >> 9 & 1) != 0) {
    uVar2 = uVar2 | 8;
  }
  if ((uVar1 >> 10 & 1) != 0) {
    uVar2 = uVar2 | 4;
  }
  if ((uVar1 >> 0xb & 1) != 0) {
    uVar2 = uVar2 | 2;
  }
  if ((uVar1 >> 0xc & 1) != 0) {
    uVar2 = uVar2 | 1;
  }
  if ((uVar1 >> 8 & 1) != 0) {
    uVar2 = uVar2 | 0x80000;
  }
  uVar3 = uVar1 & 0x6000;
  if (uVar3 != 0) {
    if (uVar3 == 0x2000) {
      uVar2 = uVar2 | 0x100;
    }
    else if (uVar3 == 0x4000) {
      uVar2 = uVar2 | 0x200;
    }
    else if (uVar3 == 0x6000) {
      uVar2 = uVar2 | 0x300;
    }
  }
  uVar1 = uVar1 & 0x8040;
  if (uVar1 == 0x40) {
    uVar2 = uVar2 | 0x2000000;
  }
  else if (uVar1 == 0x8000) {
    uVar2 = uVar2 | 0x3000000;
  }
  else if (uVar1 == 0x8040) {
    uVar2 = uVar2 | 0x1000000;
  }
  uVar1 = ~(param_2 & 0x308031f) & uVar2 | param_1 & param_2 & 0x308031f;
  if (uVar1 != uVar2) {
    uVar3 = 0;
    if ((uVar1 & 0x10) != 0) {
      uVar3 = 0x80;
    }
    if ((uVar1 & 8) != 0) {
      uVar3 = uVar3 | 0x200;
    }
    if ((uVar1 & 4) != 0) {
      uVar3 = uVar3 | 0x400;
    }
    if ((uVar1 & 2) != 0) {
      uVar3 = uVar3 | 0x800;
    }
    if ((uVar1 & 1) != 0) {
      uVar3 = uVar3 | 0x1000;
    }
    if ((uVar1 >> 0x13 & 1) != 0) {
      uVar3 = uVar3 | 0x100;
    }
    uVar2 = uVar1 & 0x300;
    if (uVar2 != 0) {
      if (uVar2 == 0x100) {
        uVar3 = uVar3 | 0x2000;
      }
      else if (uVar2 == 0x200) {
        uVar3 = uVar3 | 0x4000;
      }
      else if (uVar2 == 0x300) {
        uVar3 = uVar3 | 0x6000;
      }
    }
    uVar1 = uVar1 & 0x3000000;
    if (uVar1 == 0x1000000) {
      uVar3 = uVar3 | 0x8040;
    }
    else if (uVar1 == 0x2000000) {
      uVar3 = uVar3 | 0x40;
    }
    else if (uVar1 == 0x3000000) {
      uVar3 = uVar3 | 0x8000;
    }
    if ((DAT_18006eb68 == '\0') || ((uVar3 & 0x40) == 0)) {
      uVar3 = uVar3 & 0xffffffbf;
      FUN_180052950(uVar3);
    }
    else {
      FUN_180052950(uVar3);
    }
    uVar2 = 0;
    if ((uVar3 & 0x80) != 0) {
      uVar2 = 0x10;
    }
    if ((uVar3 >> 9 & 1) != 0) {
      uVar2 = uVar2 | 8;
    }
    if ((uVar3 >> 10 & 1) != 0) {
      uVar2 = uVar2 | 4;
    }
    if ((uVar3 >> 0xb & 1) != 0) {
      uVar2 = uVar2 | 2;
    }
    if ((uVar3 >> 0xc & 1) != 0) {
      uVar2 = uVar2 | 1;
    }
    if ((uVar3 >> 8 & 1) != 0) {
      uVar2 = uVar2 | 0x80000;
    }
    uVar1 = uVar3 & 0x6000;
    if (uVar1 != 0) {
      if (uVar1 == 0x2000) {
        uVar2 = uVar2 | 0x100;
      }
      else if (uVar1 == 0x4000) {
        uVar2 = uVar2 | 0x200;
      }
      else if (uVar1 == 0x6000) {
        uVar2 = uVar2 | 0x300;
      }
    }
    uVar3 = uVar3 & 0x8040;
    if (uVar3 == 0x40) {
      uVar2 = uVar2 | 0x2000000;
    }
    else if (uVar3 == 0x8000) {
      uVar2 = uVar2 | 0x3000000;
    }
    else if (uVar3 == 0x8040) {
      uVar2 = uVar2 | 0x1000000;
    }
  }
  return uVar2;
}


==================================================================

### EXPORT FUNC 180052420 (49 bytes) name=FUN_180052420

undefined8 FUN_180052420(undefined8 *param_1)

{
  undefined8 uVar1;
  
  if ((*(int *)*param_1 == -0x3ffffffb) || (*(int *)*param_1 == -0x3fffffe3)) {
    uVar1 = 1;
  }
  else {
    uVar1 = 0;
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180052460 (838 bytes) name=FUN_180052460

void FUN_180052460(uint *param_1,ulonglong *param_2,ulonglong param_3,uint param_4,uint *param_5,
                  uint *param_6,DWORD param_7)

{
  uint uVar1;
  DWORD dwExceptionCode;
  uint *local_res8;
  
  param_1[1] = 0;
  param_1[2] = 0;
  param_1[3] = 0;
  dwExceptionCode = param_7;
  if ((param_3 & 0x10) != 0) {
    param_1[1] = param_1[1] | 1;
    dwExceptionCode = 0xc000008f;
  }
  if ((param_3 & 2) != 0) {
    dwExceptionCode = 0xc0000093;
    param_1[1] = param_1[1] | 2;
  }
  if ((param_3 & 1) != 0) {
    dwExceptionCode = 0xc0000091;
    param_1[1] = param_1[1] | 4;
  }
  if ((param_3 & 4) != 0) {
    dwExceptionCode = 0xc000008e;
    param_1[1] = param_1[1] | 8;
  }
  if ((param_3 & 8) != 0) {
    dwExceptionCode = 0xc0000090;
    param_1[1] = param_1[1] | 0x10;
  }
  param_1[2] = param_1[2] ^ (~((int)(*param_2 >> 7) << 4) ^ param_1[2]) & 0x10;
  param_1[2] = param_1[2] ^ (~((int)(*param_2 >> 9) << 3) ^ param_1[2]) & 8;
  param_1[2] = param_1[2] ^ (~((int)(*param_2 >> 10) << 2) ^ param_1[2]) & 4;
  param_1[2] = param_1[2] ^ (~((int)(*param_2 >> 0xb) * 2) ^ param_1[2]) & 2;
  param_1[2] = param_1[2] ^ (~((uint)*param_2 >> 0xc) ^ param_1[2]) & 1;
  local_res8 = param_1;
  uVar1 = FUN_180052840();
  if ((uVar1 & 1) != 0) {
    local_res8[3] = local_res8[3] | 0x10;
  }
  if ((uVar1 & 4) != 0) {
    local_res8[3] = local_res8[3] | 8;
  }
  if ((uVar1 & 8) != 0) {
    local_res8[3] = local_res8[3] | 4;
  }
  if ((uVar1 & 0x10) != 0) {
    local_res8[3] = local_res8[3] | 2;
  }
  if ((uVar1 & 0x20) != 0) {
    local_res8[3] = local_res8[3] | 1;
  }
  uVar1 = (uint)*param_2 & 0x6000;
  if (uVar1 == 0) {
    *local_res8 = *local_res8 & 0xfffffffc;
  }
  else if (uVar1 == 0x2000) {
    *local_res8 = *local_res8 & 0xfffffffd;
    *local_res8 = *local_res8 | 1;
  }
  else if (uVar1 == 0x4000) {
    *local_res8 = *local_res8 & 0xfffffffe;
    *local_res8 = *local_res8 | 2;
  }
  else if (uVar1 == 0x6000) {
    *local_res8 = *local_res8 | 3;
  }
  *local_res8 = *local_res8 & 0xfffe001f;
  *local_res8 = *local_res8 | (param_4 & 0xfff) << 5;
  local_res8[8] = local_res8[8] | 1;
  if (param_7 == 0) {
    local_res8[8] = local_res8[8] & 0xffffffe3 | 2;
    *(undefined8 *)(local_res8 + 4) = *(undefined8 *)param_5;
    local_res8[0x18] = local_res8[0x18] | 1;
    local_res8[0x18] = local_res8[0x18] & 0xffffffe3 | 2;
    *(undefined8 *)(local_res8 + 0x14) = *(undefined8 *)param_6;
  }
  else {
    local_res8[8] = local_res8[8] & 0xffffffe1;
    local_res8[4] = *param_5;
    local_res8[0x18] = local_res8[0x18] | 1;
    local_res8[0x18] = local_res8[0x18] & 0xffffffe1;
    local_res8[0x14] = *param_6;
  }
  _clrfp();
  RaiseException(dwExceptionCode,0,1,(ULONG_PTR *)&local_res8);
  if ((local_res8[2] & 0x10) != 0) {
    *param_2 = *param_2 & 0xffffffffffffff7f;
  }
  if ((local_res8[2] & 8) != 0) {
    *param_2 = *param_2 & 0xfffffffffffffdff;
  }
  if ((local_res8[2] & 4) != 0) {
    *param_2 = *param_2 & 0xfffffffffffffbff;
  }
  if ((local_res8[2] & 2) != 0) {
    *param_2 = *param_2 & 0xfffffffffffff7ff;
  }
  if ((local_res8[2] & 1) != 0) {
    *param_2 = *param_2 & 0xffffffffffffefff;
  }
  uVar1 = *local_res8 & 3;
  if (uVar1 == 0) {
    *param_2 = *param_2 & 0xffffffffffff9fff;
  }
  else if (uVar1 == 1) {
    *param_2 = *param_2 & 0xffffffffffffbfff;
    *param_2 = *param_2 | 0x2000;
  }
  else if (uVar1 == 2) {
    *param_2 = *param_2 & 0xffffffffffffdfff;
    *param_2 = *param_2 | 0x4000;
  }
  else if (uVar1 == 3) {
    *param_2 = *param_2 | 0x6000;
  }
  if (param_7 == 0) {
    *(undefined8 *)param_6 = *(undefined8 *)(local_res8 + 0x14);
    return;
  }
  *param_6 = local_res8[0x14];
  return;
}


==================================================================

### EXPORT FUNC 1800527b0 (42 bytes) name=FUN_1800527b0

void FUN_1800527b0(uint *param_1,ulonglong *param_2,ulonglong param_3,uint param_4,uint *param_5,
                  uint *param_6)

{
  FUN_180052460(param_1,param_2,param_3,param_4,param_5,param_6,0);
  return;
}


==================================================================

### EXPORT FUNC 1800527e0 (42 bytes) name=FUN_1800527e0

void FUN_1800527e0(uint *param_1,ulonglong *param_2,ulonglong param_3,uint param_4,uint *param_5,
                  uint *param_6)

{
  FUN_180052460(param_1,param_2,param_3,param_4,param_5,param_6,1);
  return;
}


==================================================================

### EXPORT FUNC 180052810 (48 bytes) name=_set_errno_from_matherr

/* Library Function - Single Match
    _set_errno_from_matherr
   
   Library: Visual Studio 2005 Release */

void _set_errno_from_matherr(int param_1)

{
  DWORD *pDVar1;
  
  if (param_1 == 1) {
    pDVar1 = FUN_180035b40();
    *pDVar1 = 0x21;
  }
  else if ((1 < param_1) && (param_1 < 4)) {
    pDVar1 = FUN_180035b40();
    *pDVar1 = 0x22;
    return;
  }
  return;
}


==================================================================

### EXPORT FUNC 180052840 (17 bytes) name=FUN_180052840

uint FUN_180052840(void)

{
  uint uVar1;
  
  uVar1 = _get_fpsr();
  return uVar1 & 0x3f;
}


==================================================================

### EXPORT FUNC 180052860 (29 bytes) name=_clrfp

/* Library Function - Single Match
    _clrfp
   
   Library: Visual Studio */

uint _clrfp(void)

{
  uint uVar1;
  
  uVar1 = _get_fpsr();
  _fclrf();
  return uVar1 & 0x3f;
}


==================================================================

### EXPORT FUNC 180052880 (101 bytes) name=_ctrlfp

/* Library Function - Single Match
    _ctrlfp
   
   Libraries: Visual Studio 2010 Release, Visual Studio 2012 Release, Visual Studio 2015 Release,
   Visual Studio 2019 Release */

uint _ctrlfp(uint param_1,uint param_2)

{
  uint uVar1;
  uint uVar2;
  
  uVar1 = _get_fpsr();
  uVar2 = (~param_2 | 0xffff807f) & uVar1 | param_1 & param_2;
  if ((DAT_18006ed44 == '\0') || ((uVar2 & 0x40) == 0)) {
    FUN_180052950(uVar2 & 0xffffffbf);
  }
  else {
    FUN_180052950(uVar2);
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180052900 (45 bytes) name=_ctrlfp$filt$0

/* Library Function - Single Match
    _ctrlfp$filt$0
   
   Library: Visual Studio 2005 Release */

undefined8 _ctrlfp_filt_0(undefined8 *param_1)

{
  undefined8 uVar1;
  
  if ((*(int *)*param_1 == -0x3ffffffb) || (*(int *)*param_1 == -0x3fffffe3)) {
    uVar1 = 1;
  }
  else {
    uVar1 = 0;
  }
  return uVar1;
}


==================================================================

### EXPORT FUNC 180052930 (31 bytes) name=_set_statfp

/* Library Function - Single Match
    _set_statfp
   
   Library: Visual Studio */

void _set_statfp(uint param_1)

{
  uint uVar1;
  
  uVar1 = _get_fpsr();
  FUN_180052950(uVar1 | param_1 & 0x3f);
  return;
}


==================================================================

### EXPORT FUNC 180052950 (10 bytes) name=FUN_180052950

void FUN_180052950(undefined4 param_1)

{
  MXCSR = param_1;
  return;
}


==================================================================

### EXPORT FUNC 18005295a (20 bytes) name=_fclrf

/* Library Function - Single Match
    _fclrf
   
   Library: Visual Studio */

void _fclrf(void)

{
  MXCSR = MXCSR & 0xffffffc0;
  return;
}


==================================================================

### EXPORT FUNC 1800529a0 (78 bytes) name=__chkstk

/* WARNING: This is an inlined function */
/* Library Function - Single Match
    __chkstk
   
   Libraries: Visual Studio 2005, Visual Studio 2008, Visual Studio 2010, Visual Studio 2012 */

void __chkstk(void)

{
  undefined1 *in_RAX;
  undefined1 *puVar1;
  undefined1 *puVar2;
  undefined1 local_res8 [32];
  
  puVar1 = local_res8 + -(longlong)in_RAX;
  if (local_res8 < in_RAX) {
    puVar1 = (undefined1 *)0x0;
  }
  if (puVar1 < StackLimit) {
    puVar2 = StackLimit;
    do {
      puVar2 = puVar2 + -0x1000;
      *puVar2 = 0;
    } while ((undefined1 *)((ulonglong)puVar1 & 0xfffffffffffff000) != puVar2);
  }
  return;
}


==================================================================

### EXPORT FUNC 180052a00 (69 bytes) name=_CallSettingFrame

/* Library Function - Single Match
    _CallSettingFrame
   
   Libraries: Visual Studio 2005 Debug, Visual Studio 2005 Release */

void _CallSettingFrame(void)

{
  code *pcVar1;
  
  pcVar1 = (code *)FUN_180043d50();
  (*pcVar1)();
  FUN_180043d80();
  FUN_180043d50();
  return;
}


==================================================================

### EXPORT FUNC 180052a60 (16 bytes) name=_get_fpsr

/* Library Function - Single Match
    _get_fpsr
   
   Libraries: Visual Studio 2010 Release, Visual Studio 2012 Release, Visual Studio 2015 Release,
   Visual Studio 2019 Release */

undefined4 _get_fpsr(void)

{
  return MXCSR;
}


==================================================================

### EXPORT FUNC 180052a70 (32 bytes) name=FUN_180052a70

void FUN_180052a70(void)

{
  int iVar1;
  
  FUN_180022e94();
  iVar1 = FUN_180034980(0x18001e9f8);
  DAT_18006edac = (char)iVar1;
  return;
}


==================================================================

### EXPORT FUNC 180052ab4 (12 bytes) name=FUN_180052ab4

void FUN_180052ab4(void)

{
  FUN_180034980(0x180052eb4);
  return;
}


==================================================================

### EXPORT FUNC 180052ad8 (28 bytes) name=FUN_180052ad8

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

void FUN_180052ad8(void)

{
  _DAT_1800721d8 = RegisterWindowMessageW(L"commctrl_DragListMsg");
  return;
}


==================================================================

### EXPORT FUNC 180052af4 (143 bytes) name=FUN_180052af4

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

void FUN_180052af4(void)

{
  CCmdTarget::CCmdTarget((CCmdTarget *)&DAT_1800721e0);
  _DAT_180072240 = CWnd::XAccessible::vftable;
  _DAT_180072248 = CWnd::XAccessibleServer::vftable;
  _DAT_1800721e0 = CWnd::vftable;
  _DAT_180072220 = 0;
  DAT_180072228 = 0;
  _DAT_180072238 = 0;
  _DAT_180072250 = 0;
  _DAT_180072258 = 0;
  _DAT_180072260 = 0;
  _DAT_180072268 = 0;
  _DAT_180072270 = 0;
  _DAT_180072278 = 0;
  _DAT_180072280 = 0;
  FUN_180034980(0x180052ed8);
  return;
}


==================================================================

### EXPORT FUNC 180052b84 (147 bytes) name=FUN_180052b84

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

void FUN_180052b84(void)

{
  CCmdTarget::CCmdTarget((CCmdTarget *)&DAT_180072290);
  _DAT_1800722f0 = CWnd::XAccessible::vftable;
  _DAT_1800722f8 = CWnd::XAccessibleServer::vftable;
  _DAT_180072290 = CWnd::vftable;
  DAT_1800722d8 = 0;
  _DAT_1800722e8 = 0;
  _DAT_180072300 = 0;
  _DAT_180072308 = 0;
  _DAT_180072310 = 0;
  _DAT_180072318 = 0;
  _DAT_180072320 = 0;
  _DAT_180072328 = 0;
  _DAT_180072330 = 0;
  _DAT_1800722d0 = 1;
  FUN_180034980(0x180052ee4);
  return;
}


==================================================================

### EXPORT FUNC 180052c18 (144 bytes) name=FUN_180052c18

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

void FUN_180052c18(void)

{
  CCmdTarget::CCmdTarget((CCmdTarget *)&DAT_180072340);
  _DAT_180072380 = 0xffffffffffffffff;
  _DAT_1800723a0 = CWnd::XAccessible::vftable;
  _DAT_1800723a8 = CWnd::XAccessibleServer::vftable;
  DAT_180072388 = 0;
  _DAT_180072398 = 0;
  _DAT_1800723b0 = 0;
  _DAT_1800723b8 = 0;
  _DAT_1800723c0 = 0;
  _DAT_1800723c8 = 0;
  _DAT_1800723d0 = 0;
  _DAT_1800723d8 = 0;
  _DAT_1800723e0 = 0;
  _DAT_180072340 = CWnd::vftable;
  FUN_180034980(0x180052ef0);
  return;
}


==================================================================

### EXPORT FUNC 180052ca8 (147 bytes) name=FUN_180052ca8

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

void FUN_180052ca8(void)

{
  CCmdTarget::CCmdTarget((CCmdTarget *)&DAT_1800723f0);
  _DAT_180072450 = CWnd::XAccessible::vftable;
  _DAT_180072458 = CWnd::XAccessibleServer::vftable;
  _DAT_1800723f0 = CWnd::vftable;
  DAT_180072438 = 0;
  _DAT_180072448 = 0;
  _DAT_180072460 = 0;
  _DAT_180072468 = 0;
  _DAT_180072470 = 0;
  _DAT_180072478 = 0;
  _DAT_180072480 = 0;
  _DAT_180072488 = 0;
  _DAT_180072490 = 0;
  _DAT_180072430 = 0xfffffffffffffffe;
  FUN_180034980(0x180052efc);
  return;
}


==================================================================

### EXPORT FUNC 180052d3c (32 bytes) name=FUN_180052d3c

void FUN_180052d3c(void)

{
  FUN_18002fe50((AUX_DATA *)&DAT_1800724c0);
  FUN_180034980(0x180052f08);
  return;
}


==================================================================

### EXPORT FUNC 180052d5c (72 bytes) name=FUN_180052d5c

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

void FUN_180052d5c(void)

{
  FUN_18001ee18(0x180072540,0);
  _DAT_180072554 = 0;
  _DAT_180072558 = 0;
  _DAT_18007265c = 0xf022;
  _DAT_180072540 = CResourceException::vftable;
  FUN_180034980(0x180052f14);
  return;
}


==================================================================

### EXPORT FUNC 180052da4 (72 bytes) name=FUN_180052da4

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

void FUN_180052da4(void)

{
  FUN_18001ee18(0x180072660,0);
  _DAT_180072674 = 0;
  _DAT_180072678 = 0;
  _DAT_18007277c = 0xf024;
  _DAT_180072660 = CUserException::vftable;
  FUN_180034980(0x180052f24);
  return;
}


==================================================================

### EXPORT FUNC 180052df8 (32 bytes) name=FUN_180052df8

void FUN_180052df8(void)

{
  FUN_1800504a4((undefined4 *)&DAT_180073670);
  FUN_180034980(0x180052f34);
  return;
}


==================================================================

### EXPORT FUNC 180052e18 (108 bytes) name=FUN_180052e18

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

void FUN_180052e18(void)

{
  undefined8 uVar1;
  
  FUN_1800357d0((ulonglong *)&DAT_1800736d8,0,0x28);
  DAT_180073708 = 0;
  _DAT_180073710 = 0;
  _DAT_180073714 = 0;
  _DAT_180073700 = 0;
  _DAT_1800736d0 = 0x48;
  uVar1 = FUN_180050364((LPCRITICAL_SECTION)&DAT_1800736d8);
  if ((int)uVar1 < 0) {
    _DAT_1800736d0 = 0;
    DAT_1800da4a4 = 1;
  }
  FUN_180034980(0x180052f40);
  return;
}


==================================================================

### EXPORT FUNC 180052f40 (67 bytes) name=FUN_180052f40

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

void FUN_180052f40(void)

{
  FUN_1800503b8((int *)&DAT_1800736d0,DAT_180073678);
  if (DAT_180073708 != (LPVOID)0x0) {
    FUN_180034a70(DAT_180073708);
    DAT_180073708 = (LPVOID)0x0;
  }
  _DAT_180073710 = 0;
  _DAT_180073714 = 0;
  return;
}


==================================================================

