1208 lines
40 KiB
C
1208 lines
40 KiB
C
/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469
|
|
* Ghidra 12.1.2 decompiler output for 0x1400ba400 FUN_1400ba400
|
|
* Pseudocode, not original source. */
|
|
|
|
ulonglong FUN_1400ba400(longlong *param_1,int param_2)
|
|
|
|
{
|
|
uint *puVar1;
|
|
uint uVar2;
|
|
char cVar3;
|
|
int iVar4;
|
|
uint uVar5;
|
|
uint uVar6;
|
|
undefined8 uVar7;
|
|
byte bVar8;
|
|
ushort uVar9;
|
|
uint uVar10;
|
|
uint uVar11;
|
|
int iVar12;
|
|
uint uVar13;
|
|
longlong lVar14;
|
|
uint *puVar15;
|
|
uint uVar16;
|
|
uint uVar17;
|
|
uint *puVar18;
|
|
ulonglong uVar19;
|
|
undefined1 *puVar20;
|
|
undefined1 *puVar21;
|
|
uint uVar22;
|
|
ulonglong uVar23;
|
|
uint local_res18;
|
|
uint local_res20;
|
|
undefined2 local_68;
|
|
undefined1 local_66;
|
|
undefined1 local_65;
|
|
undefined4 local_64;
|
|
uint local_60;
|
|
uint local_5c;
|
|
undefined1 *local_58;
|
|
|
|
if ((((param_1 == (longlong *)0x0) || (puVar1 = (uint *)param_1[5], puVar1 == (uint *)0x0)) ||
|
|
(param_1[2] == 0)) || ((*param_1 == 0 && ((int)param_1[1] != 0)))) {
|
|
return 0xfffffffe;
|
|
}
|
|
uVar17 = *puVar1;
|
|
uVar5 = puVar1[0x11];
|
|
uVar6 = puVar1[0x10];
|
|
if (uVar17 == 0xb) {
|
|
uVar17 = 0xc;
|
|
}
|
|
*puVar1 = uVar17;
|
|
uVar10 = *(uint *)(param_1 + 3);
|
|
puVar20 = (undefined1 *)param_1[2];
|
|
uVar16 = *(uint *)(param_1 + 1);
|
|
puVar15 = (uint *)*param_1;
|
|
local_res18 = 0;
|
|
local_res20 = uVar10;
|
|
local_60 = uVar10;
|
|
local_58 = puVar20;
|
|
local_5c = uVar16;
|
|
do {
|
|
if (0x1e < uVar17) {
|
|
return 0xfffffffe;
|
|
}
|
|
uVar23 = 0;
|
|
uVar13 = 0;
|
|
uVar11 = local_64;
|
|
switch(uVar17) {
|
|
case 0:
|
|
if (puVar1[2] == 0) {
|
|
*puVar1 = 0xc;
|
|
}
|
|
else {
|
|
for (; uVar5 < 0x10; uVar5 = uVar5 + 8) {
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar17 = *puVar15;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f));
|
|
}
|
|
if (((puVar1[2] & 2) == 0) || (uVar6 != 0x8b1f)) {
|
|
puVar1[4] = 0;
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(undefined4 *)(*(longlong *)(puVar1 + 8) + 0x40) = 0xffffffff;
|
|
}
|
|
if (((puVar1[2] & 1) == 0) ||
|
|
(uVar17 = (uVar6 & 0xff) * 0x100 + (uVar6 >> 8), uVar17 != (uVar17 / 0x1f) * 0x1f)) {
|
|
param_1[4] = (longlong)"incorrect header check";
|
|
*puVar1 = 0x1d;
|
|
}
|
|
else {
|
|
if (((byte)uVar6 & 0xf) != 8) goto LAB_1400ba59f;
|
|
uVar5 = uVar5 - 4;
|
|
uVar17 = (uVar6 >> 4 & 0xf) + 8;
|
|
if (puVar1[10] == 0) {
|
|
puVar1[10] = uVar17;
|
|
}
|
|
else if (puVar1[10] < uVar17) {
|
|
param_1[4] = (longlong)"invalid window size";
|
|
*puVar1 = 0x1d;
|
|
uVar6 = uVar6 >> 4;
|
|
break;
|
|
}
|
|
puVar1[5] = 1 << (sbyte)uVar17;
|
|
uVar17 = FUN_1400c1b80(0,(byte *)0x0,0);
|
|
puVar1[6] = uVar17;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar17;
|
|
uVar5 = 0;
|
|
*puVar1 = ~(uVar6 >> 0xc) & 2 | 9;
|
|
uVar6 = 0;
|
|
puVar20 = local_58;
|
|
uVar10 = local_res20;
|
|
}
|
|
}
|
|
else {
|
|
uVar17 = FUN_1400ba3f0(0,(uint *)0x0,0);
|
|
puVar1[6] = uVar17;
|
|
local_68 = 0x8b1f;
|
|
uVar17 = FUN_1400ba0d0(uVar17,(uint *)&local_68,2);
|
|
uVar6 = 0;
|
|
uVar5 = 0;
|
|
puVar1[6] = uVar17;
|
|
*puVar1 = 1;
|
|
puVar20 = local_58;
|
|
uVar10 = local_res20;
|
|
}
|
|
}
|
|
break;
|
|
case 1:
|
|
for (; uVar5 < 0x10; uVar5 = uVar5 + 8) {
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar17 = *puVar15;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f));
|
|
}
|
|
puVar1[4] = uVar6;
|
|
if ((char)uVar6 == '\b') {
|
|
if ((uVar6 & 0xe000) == 0) {
|
|
if (*(uint **)(puVar1 + 8) != (uint *)0x0) {
|
|
**(uint **)(puVar1 + 8) = uVar6 >> 8 & 1;
|
|
}
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
local_68 = (undefined2)uVar6;
|
|
uVar17 = FUN_1400ba0d0(puVar1[6],(uint *)&local_68,2);
|
|
puVar1[6] = uVar17;
|
|
}
|
|
*puVar1 = 2;
|
|
uVar5 = uVar13;
|
|
uVar6 = uVar13;
|
|
do {
|
|
uVar2 = 0;
|
|
uVar11 = local_64;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar10 = *puVar15;
|
|
uVar17 = uVar5 + 8;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar10 << ((byte)uVar5 & 0x1f));
|
|
joined_r0x0001400ba6e6:
|
|
uVar5 = uVar17;
|
|
} while (uVar17 < 0x20);
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(uint *)(*(longlong *)(puVar1 + 8) + 4) = uVar6;
|
|
}
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
local_68 = (undefined2)uVar6;
|
|
local_65 = (undefined1)(uVar6 >> 0x18);
|
|
local_66 = (undefined1)(uVar6 >> 0x10);
|
|
uVar17 = FUN_1400ba0d0(puVar1[6],(uint *)&local_68,4);
|
|
puVar1[6] = uVar17;
|
|
}
|
|
*puVar1 = 3;
|
|
uVar5 = uVar13;
|
|
uVar6 = uVar13;
|
|
do {
|
|
uVar2 = 0;
|
|
uVar11 = local_64;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar10 = *puVar15;
|
|
uVar17 = uVar5 + 8;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar10 << ((byte)uVar5 & 0x1f));
|
|
joined_r0x0001400ba767:
|
|
uVar5 = uVar17;
|
|
} while (uVar17 < 0x10);
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(uint *)(*(longlong *)(puVar1 + 8) + 8) = uVar6 & 0xff;
|
|
*(uint *)(*(longlong *)(puVar1 + 8) + 0xc) = uVar6 >> 8;
|
|
}
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
local_68 = (undefined2)uVar6;
|
|
uVar17 = FUN_1400ba0d0(puVar1[6],(uint *)&local_68,2);
|
|
puVar1[6] = uVar17;
|
|
}
|
|
*puVar1 = 4;
|
|
uVar5 = uVar13;
|
|
uVar6 = uVar13;
|
|
goto switchD_1400ba4c1_caseD_4;
|
|
}
|
|
param_1[4] = (longlong)"unknown header flags set";
|
|
*puVar1 = 0x1d;
|
|
}
|
|
else {
|
|
LAB_1400ba59f:
|
|
param_1[4] = (longlong)"unknown compression method";
|
|
*puVar1 = 0x1d;
|
|
}
|
|
break;
|
|
case 2:
|
|
uVar17 = uVar5;
|
|
goto joined_r0x0001400ba6e6;
|
|
case 3:
|
|
uVar17 = uVar5;
|
|
goto joined_r0x0001400ba767;
|
|
case 4:
|
|
switchD_1400ba4c1_caseD_4:
|
|
if ((puVar1[4] & 0x400) == 0) {
|
|
uVar17 = uVar6;
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(undefined8 *)(*(longlong *)(puVar1 + 8) + 0x10) = 0;
|
|
}
|
|
}
|
|
else {
|
|
for (; uVar5 < 0x10; uVar5 = uVar5 + 8) {
|
|
uVar2 = 0;
|
|
uVar11 = local_64;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar17 = *puVar15;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f));
|
|
}
|
|
puVar1[0x12] = uVar6;
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(uint *)(*(longlong *)(puVar1 + 8) + 0x18) = uVar6;
|
|
}
|
|
uVar5 = uVar13;
|
|
uVar17 = uVar13;
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
local_68 = (undefined2)uVar6;
|
|
uVar6 = FUN_1400ba0d0(puVar1[6],(uint *)&local_68,2);
|
|
puVar1[6] = uVar6;
|
|
}
|
|
}
|
|
uVar6 = uVar17;
|
|
*puVar1 = 5;
|
|
case 5:
|
|
if ((puVar1[4] & 0x400) == 0) {
|
|
LAB_1400ba903:
|
|
puVar1[0x12] = 0;
|
|
*puVar1 = 6;
|
|
switchD_1400ba4c1_caseD_6:
|
|
if ((puVar1[4] & 0x800) == 0) {
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(undefined8 *)(*(longlong *)(puVar1 + 8) + 0x20) = 0;
|
|
}
|
|
LAB_1400ba9ae:
|
|
puVar1[0x12] = 0;
|
|
*puVar1 = 7;
|
|
switchD_1400ba4c1_caseD_7:
|
|
uVar23 = 0;
|
|
if ((puVar1[4] & 0x1000) == 0) {
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(undefined8 *)(*(longlong *)(puVar1 + 8) + 0x30) = 0;
|
|
}
|
|
LAB_1400baa4e:
|
|
*puVar1 = 8;
|
|
puVar20 = local_58;
|
|
uVar10 = local_res20;
|
|
switchD_1400ba4c1_caseD_8:
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
for (; uVar5 < 0x10; uVar5 = uVar5 + 8) {
|
|
uVar2 = 0;
|
|
uVar11 = local_64;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar17 = *puVar15;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f));
|
|
}
|
|
if (uVar6 != (ushort)puVar1[6]) {
|
|
param_1[4] = (longlong)"header crc mismatch";
|
|
*puVar1 = 0x1d;
|
|
break;
|
|
}
|
|
uVar5 = 0;
|
|
uVar6 = uVar5;
|
|
}
|
|
if (*(longlong *)(puVar1 + 8) != 0) {
|
|
*(uint *)(*(longlong *)(puVar1 + 8) + 0x3c) = (int)puVar1[4] >> 9 & 1;
|
|
*(undefined4 *)(*(longlong *)(puVar1 + 8) + 0x40) = 1;
|
|
}
|
|
uVar17 = FUN_1400ba3f0(0,(uint *)0x0,0);
|
|
puVar1[6] = uVar17;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar17;
|
|
LAB_1400baae9:
|
|
*puVar1 = 0xb;
|
|
puVar20 = local_58;
|
|
uVar10 = local_res20;
|
|
break;
|
|
}
|
|
puVar18 = puVar15;
|
|
uVar2 = uVar16;
|
|
uVar11 = local_64;
|
|
if (uVar16 != 0) {
|
|
do {
|
|
lVar14 = *(longlong *)(puVar1 + 8);
|
|
cVar3 = (char)*puVar18;
|
|
uVar17 = (int)uVar23 + 1;
|
|
uVar23 = (ulonglong)uVar17;
|
|
if (((lVar14 != 0) && (*(longlong *)(lVar14 + 0x30) != 0)) &&
|
|
(puVar1[0x12] < *(uint *)(lVar14 + 0x38))) {
|
|
*(char *)((ulonglong)puVar1[0x12] + *(longlong *)(lVar14 + 0x30)) = cVar3;
|
|
puVar1[0x12] = puVar1[0x12] + 1;
|
|
}
|
|
} while ((cVar3 != '\0') && (puVar18 = (uint *)((longlong)puVar18 + 1), uVar17 < uVar16)
|
|
);
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
if (puVar15 == (uint *)0x0) {
|
|
uVar10 = 0;
|
|
}
|
|
else {
|
|
uVar10 = FUN_1400ba0d0(puVar1[6],puVar15,uVar17);
|
|
}
|
|
puVar1[6] = uVar10;
|
|
}
|
|
uVar16 = uVar16 - uVar17;
|
|
puVar15 = (uint *)((longlong)puVar15 + uVar23);
|
|
uVar2 = uVar16;
|
|
uVar11 = local_64;
|
|
if (cVar3 == '\0') goto LAB_1400baa4e;
|
|
}
|
|
}
|
|
else {
|
|
puVar18 = puVar15;
|
|
uVar2 = uVar16;
|
|
uVar11 = local_64;
|
|
if (uVar16 != 0) {
|
|
do {
|
|
lVar14 = *(longlong *)(puVar1 + 8);
|
|
cVar3 = (char)*puVar18;
|
|
uVar17 = (int)uVar23 + 1;
|
|
uVar23 = (ulonglong)uVar17;
|
|
if (((lVar14 != 0) && (*(longlong *)(lVar14 + 0x20) != 0)) &&
|
|
(puVar1[0x12] < *(uint *)(lVar14 + 0x28))) {
|
|
*(char *)((ulonglong)puVar1[0x12] + *(longlong *)(lVar14 + 0x20)) = cVar3;
|
|
puVar1[0x12] = puVar1[0x12] + 1;
|
|
}
|
|
} while ((cVar3 != '\0') && (puVar18 = (uint *)((longlong)puVar18 + 1), uVar17 < uVar16)
|
|
);
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
if (puVar15 == (uint *)0x0) {
|
|
uVar10 = 0;
|
|
}
|
|
else {
|
|
uVar10 = FUN_1400ba0d0(puVar1[6],puVar15,uVar17);
|
|
}
|
|
puVar1[6] = uVar10;
|
|
}
|
|
uVar16 = uVar16 - uVar17;
|
|
puVar15 = (uint *)((longlong)puVar15 + uVar23);
|
|
uVar2 = uVar16;
|
|
uVar11 = local_64;
|
|
if (cVar3 == '\0') goto LAB_1400ba9ae;
|
|
}
|
|
}
|
|
}
|
|
else {
|
|
uVar17 = puVar1[0x12];
|
|
uVar10 = uVar17;
|
|
if (uVar16 < uVar17) {
|
|
uVar10 = uVar16;
|
|
}
|
|
if (uVar10 != 0) {
|
|
lVar14 = *(longlong *)(puVar1 + 8);
|
|
if ((lVar14 != 0) && (*(longlong *)(lVar14 + 0x10) != 0)) {
|
|
uVar17 = *(int *)(lVar14 + 0x18) - uVar17;
|
|
uVar11 = uVar10;
|
|
if (*(uint *)(lVar14 + 0x1c) < uVar10 + uVar17) {
|
|
uVar11 = *(uint *)(lVar14 + 0x1c) - uVar17;
|
|
}
|
|
memcpy((void *)((ulonglong)uVar17 + *(longlong *)(lVar14 + 0x10)),puVar15,
|
|
(ulonglong)uVar11);
|
|
}
|
|
if ((puVar1[4] & 0x200) != 0) {
|
|
if (puVar15 != (uint *)0x0) {
|
|
uVar13 = FUN_1400ba0d0(puVar1[6],puVar15,uVar10);
|
|
}
|
|
puVar1[6] = uVar13;
|
|
}
|
|
uVar16 = uVar16 - uVar10;
|
|
puVar15 = (uint *)((longlong)puVar15 + (ulonglong)uVar10);
|
|
puVar1[0x12] = puVar1[0x12] - uVar10;
|
|
}
|
|
uVar2 = uVar16;
|
|
uVar11 = local_64;
|
|
if (puVar1[0x12] == 0) goto LAB_1400ba903;
|
|
}
|
|
LAB_1400bac9a:
|
|
local_64 = uVar11;
|
|
uVar16 = uVar2;
|
|
uVar23 = (ulonglong)local_res18;
|
|
LAB_1400bac9e:
|
|
uVar17 = local_60;
|
|
param_1[2] = (longlong)local_58;
|
|
*param_1 = (longlong)puVar15;
|
|
*(uint *)(param_1 + 3) = local_res20;
|
|
*(uint *)(param_1 + 1) = uVar16;
|
|
puVar1[0x11] = uVar5;
|
|
puVar1[0x10] = uVar6;
|
|
if (((puVar1[0xb] == 0) && ((0x19 < (int)*puVar1 || (local_60 == *(uint *)(param_1 + 3))))) ||
|
|
(uVar7 = FUN_1400b9f70((longlong)param_1,local_60), (int)uVar7 == 0)) {
|
|
uVar17 = uVar17 - (int)param_1[3];
|
|
local_5c = local_5c - (int)param_1[1];
|
|
*(int *)((longlong)param_1 + 0x1c) = *(int *)((longlong)param_1 + 0x1c) + uVar17;
|
|
*(int *)((longlong)param_1 + 0xc) = *(int *)((longlong)param_1 + 0xc) + local_5c;
|
|
puVar1[7] = puVar1[7] + uVar17;
|
|
if ((puVar1[2] != 0) && (uVar17 != 0)) {
|
|
if (puVar1[4] == 0) {
|
|
uVar6 = FUN_1400c1b80(puVar1[6],(byte *)(param_1[2] - (ulonglong)uVar17),uVar17);
|
|
}
|
|
else {
|
|
puVar15 = (uint *)(param_1[2] - (ulonglong)uVar17);
|
|
if (puVar15 == (uint *)0x0) {
|
|
uVar6 = 0;
|
|
}
|
|
else {
|
|
uVar6 = FUN_1400ba0d0(puVar1[6],puVar15,uVar17);
|
|
}
|
|
}
|
|
puVar1[6] = uVar6;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar6;
|
|
}
|
|
uVar6 = *puVar1;
|
|
if ((uVar6 == 0x13) || (uVar6 == 0xe)) {
|
|
iVar12 = 0x100;
|
|
}
|
|
else {
|
|
iVar12 = 0;
|
|
}
|
|
iVar4 = 0;
|
|
if (uVar6 == 0xb) {
|
|
iVar4 = 0x80;
|
|
}
|
|
*(uint *)(param_1 + 9) = iVar4 + iVar12 + (-(uint)(puVar1[1] != 0) & 0x40) + puVar1[0x11];
|
|
if (((local_5c != 0) || (uVar17 != 0)) && (param_2 != 4)) {
|
|
return uVar23;
|
|
}
|
|
if ((int)uVar23 != 0) {
|
|
return uVar23;
|
|
}
|
|
return 0xfffffffb;
|
|
}
|
|
*puVar1 = 0x1e;
|
|
LAB_1400bacf9:
|
|
return 0xfffffffc;
|
|
case 6:
|
|
goto switchD_1400ba4c1_caseD_6;
|
|
case 7:
|
|
goto switchD_1400ba4c1_caseD_7;
|
|
case 8:
|
|
goto switchD_1400ba4c1_caseD_8;
|
|
case 9:
|
|
for (; uVar5 < 0x20; uVar5 = uVar5 + 8) {
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar17 = *puVar15;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f));
|
|
}
|
|
uVar17 = (uVar6 >> 8 & 0xff00) + ((uVar6 & 0xff00) + uVar6 * 0x10000) * 0x100 +
|
|
(uVar6 >> 0x18);
|
|
puVar1[6] = uVar17;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar17;
|
|
*puVar1 = 10;
|
|
uVar5 = uVar13;
|
|
uVar6 = uVar13;
|
|
case 10:
|
|
if (puVar1[3] == 0) {
|
|
param_1[2] = (longlong)puVar20;
|
|
*(uint *)(param_1 + 3) = uVar10;
|
|
*param_1 = (longlong)puVar15;
|
|
*(uint *)(param_1 + 1) = uVar16;
|
|
puVar1[0x10] = uVar6;
|
|
puVar1[0x11] = uVar5;
|
|
return 2;
|
|
}
|
|
uVar17 = FUN_1400c1b80(0,(byte *)0x0,0);
|
|
puVar1[6] = uVar17;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar17;
|
|
*puVar1 = 0xb;
|
|
puVar20 = local_58;
|
|
uVar10 = local_res20;
|
|
switchD_1400ba4c1_caseD_b:
|
|
uVar2 = uVar16;
|
|
uVar11 = local_64;
|
|
if ((param_2 != 5) && (param_2 != 6)) {
|
|
switchD_1400ba4c1_caseD_c:
|
|
if (puVar1[1] == 0) {
|
|
for (; uVar11 = local_64, uVar5 < 3; uVar5 = uVar5 + 8) {
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar17 = *puVar15;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f));
|
|
}
|
|
puVar1[1] = uVar6 & 1;
|
|
uVar17 = uVar6 >> 1 & 3;
|
|
if (uVar17 == 0) {
|
|
*puVar1 = 0xd;
|
|
}
|
|
else {
|
|
if (uVar17 != 1) {
|
|
if (uVar17 == 2) {
|
|
*puVar1 = 0x10;
|
|
uVar5 = uVar5 - 3;
|
|
uVar6 = uVar6 >> 3;
|
|
}
|
|
else {
|
|
if (uVar17 != 3) goto LAB_1400bad25;
|
|
uVar5 = uVar5 - 3;
|
|
param_1[4] = (longlong)"invalid block type";
|
|
*puVar1 = 0x1d;
|
|
uVar6 = uVar6 >> 3;
|
|
}
|
|
break;
|
|
}
|
|
puVar1[0x1a] = 9;
|
|
puVar1[0x1b] = 5;
|
|
*(undefined **)(puVar1 + 0x16) = &DAT_14010d2f0;
|
|
*puVar1 = 0x13;
|
|
*(undefined **)(puVar1 + 0x18) = &DAT_14010daf0;
|
|
if (param_2 == 6) {
|
|
uVar6 = uVar6 >> 3;
|
|
uVar5 = uVar5 - 3;
|
|
uVar2 = uVar16;
|
|
goto LAB_1400bac9a;
|
|
}
|
|
}
|
|
LAB_1400bad25:
|
|
uVar5 = uVar5 - 3;
|
|
uVar6 = uVar6 >> 3;
|
|
}
|
|
else {
|
|
*puVar1 = 0x1a;
|
|
uVar17 = uVar5 & 7;
|
|
uVar5 = uVar5 - uVar17;
|
|
uVar6 = uVar6 >> (sbyte)uVar17;
|
|
}
|
|
break;
|
|
}
|
|
goto LAB_1400bac9a;
|
|
case 0xb:
|
|
goto switchD_1400ba4c1_caseD_b;
|
|
case 0xc:
|
|
goto switchD_1400ba4c1_caseD_c;
|
|
case 0xd:
|
|
uVar6 = uVar6 >> (sbyte)(uVar5 & 7);
|
|
for (uVar5 = uVar5 - (uVar5 & 7); uVar5 < 0x20; uVar5 = uVar5 + 8) {
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar17 = *puVar15;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f));
|
|
}
|
|
if ((uVar6 & 0xffff) == ~uVar6 >> 0x10) {
|
|
puVar1[0x12] = uVar6 & 0xffff;
|
|
*puVar1 = 0xe;
|
|
uVar5 = uVar13;
|
|
uVar6 = uVar13;
|
|
uVar2 = uVar16;
|
|
if (param_2 == 6) goto LAB_1400bac9a;
|
|
goto switchD_1400ba4c1_caseD_e;
|
|
}
|
|
param_1[4] = (longlong)"invalid stored block lengths";
|
|
*puVar1 = 0x1d;
|
|
break;
|
|
case 0xe:
|
|
switchD_1400ba4c1_caseD_e:
|
|
*puVar1 = 0xf;
|
|
case 0xf:
|
|
uVar17 = puVar1[0x12];
|
|
if (uVar17 == 0) {
|
|
*puVar1 = 0xb;
|
|
break;
|
|
}
|
|
if (uVar16 < uVar17) {
|
|
uVar17 = uVar16;
|
|
}
|
|
if (uVar10 < uVar17) {
|
|
uVar17 = uVar10;
|
|
}
|
|
uVar23 = (ulonglong)uVar17;
|
|
uVar2 = uVar16;
|
|
if (uVar17 != 0) {
|
|
memcpy(puVar20,puVar15,uVar23);
|
|
local_res20 = local_res20 - uVar17;
|
|
puVar15 = (uint *)((longlong)puVar15 + uVar23);
|
|
local_58 = local_58 + uVar23;
|
|
uVar16 = uVar16 - uVar17;
|
|
puVar1[0x12] = puVar1[0x12] - uVar17;
|
|
puVar20 = local_58;
|
|
uVar10 = local_res20;
|
|
break;
|
|
}
|
|
goto LAB_1400bac9a;
|
|
case 0x10:
|
|
for (; uVar5 < 0xe; uVar5 = uVar5 + 8) {
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar17 = *puVar15;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f));
|
|
}
|
|
uVar5 = uVar5 - 0xe;
|
|
uVar22 = uVar6 >> 10;
|
|
uVar17 = (uVar6 & 0x1f) + 0x101;
|
|
uVar13 = (uVar6 >> 5 & 0x1f) + 1;
|
|
uVar6 = uVar6 >> 0xe;
|
|
puVar1[0x1d] = uVar17;
|
|
puVar1[0x1e] = uVar13;
|
|
puVar1[0x1c] = (uVar22 & 0xf) + 4;
|
|
if ((uVar17 < 0x11f) && (uVar13 < 0x1f)) {
|
|
puVar1[0x1f] = 0;
|
|
*puVar1 = 0x11;
|
|
goto switchD_1400ba4c1_caseD_11;
|
|
}
|
|
param_1[4] = (longlong)"too many length or distance symbols";
|
|
*puVar1 = 0x1d;
|
|
break;
|
|
case 0x11:
|
|
switchD_1400ba4c1_caseD_11:
|
|
if (puVar1[0x1f] < puVar1[0x1c]) {
|
|
do {
|
|
for (; uVar5 < 3; uVar5 = uVar5 + 8) {
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar17 = *puVar15;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f));
|
|
}
|
|
uVar5 = uVar5 - 3;
|
|
uVar9 = (ushort)uVar6;
|
|
uVar6 = uVar6 >> 3;
|
|
*(ushort *)
|
|
((longlong)puVar1 +
|
|
(ulonglong)*(ushort *)(&DAT_14010db70 + (ulonglong)puVar1[0x1f] * 2) * 2 + 0x88) =
|
|
uVar9 & 7;
|
|
puVar1[0x1f] = puVar1[0x1f] + 1;
|
|
} while (puVar1[0x1f] < puVar1[0x1c]);
|
|
}
|
|
uVar17 = puVar1[0x1f];
|
|
while (uVar17 < 0x13) {
|
|
*(undefined2 *)
|
|
((longlong)puVar1 +
|
|
(ulonglong)*(ushort *)(&DAT_14010db70 + (ulonglong)puVar1[0x1f] * 2) * 2 + 0x88) = 0;
|
|
puVar1[0x1f] = puVar1[0x1f] + 1;
|
|
uVar17 = puVar1[0x1f];
|
|
}
|
|
*(uint **)(puVar1 + 0x20) = puVar1 + 0x152;
|
|
*(uint **)(puVar1 + 0x16) = puVar1 + 0x152;
|
|
puVar1[0x1a] = 7;
|
|
uVar7 = FUN_1400c5ab0(0,(ushort *)(puVar1 + 0x22),0x13,(longlong *)(puVar1 + 0x20),
|
|
puVar1 + 0x1a,(undefined *)(puVar1 + 0xc2));
|
|
local_res18 = (uint)uVar7;
|
|
if (local_res18 == 0) {
|
|
puVar1[0x1f] = 0;
|
|
*puVar1 = 0x12;
|
|
uVar10 = local_res20;
|
|
goto switchD_1400ba4c1_caseD_12;
|
|
}
|
|
param_1[4] = (longlong)"invalid code lengths set";
|
|
*puVar1 = 0x1d;
|
|
puVar20 = local_58;
|
|
uVar10 = local_res20;
|
|
break;
|
|
case 0x12:
|
|
switchD_1400ba4c1_caseD_12:
|
|
puVar20 = local_58;
|
|
if (puVar1[0x1f] < puVar1[0x1e] + puVar1[0x1d]) {
|
|
do {
|
|
uVar11 = *(uint *)(*(longlong *)(puVar1 + 0x16) +
|
|
(ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar6) * 4);
|
|
uVar17 = uVar5;
|
|
local_64 = uVar11;
|
|
if (uVar5 < (uVar11 >> 8 & 0xff)) {
|
|
do {
|
|
uVar5 = uVar17;
|
|
uVar2 = 0;
|
|
uVar11 = local_64;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar5 = uVar17 + 8;
|
|
uVar16 = uVar16 - 1;
|
|
uVar6 = uVar6 + ((uint)(byte)*puVar15 << ((byte)uVar17 & 0x1f));
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar11 = *(uint *)(*(longlong *)(puVar1 + 0x16) +
|
|
(ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar6) * 4);
|
|
uVar17 = uVar5;
|
|
local_64 = uVar11;
|
|
} while (uVar5 < (uVar11 >> 8 & 0xff));
|
|
}
|
|
uVar9 = (ushort)(uVar11 >> 0x10);
|
|
local_64._1_1_ = (byte)(uVar11 >> 8);
|
|
local_64 = uVar11;
|
|
if (0xf < uVar9) {
|
|
if (uVar9 == 0x10) {
|
|
for (; uVar5 < local_64._1_1_ + 2; uVar5 = uVar5 + 8) {
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar17 = *puVar15;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f));
|
|
}
|
|
uVar5 = uVar5 - local_64._1_1_;
|
|
uVar6 = uVar6 >> (local_64._1_1_ & 0x1f);
|
|
if (puVar1[0x1f] != 0) {
|
|
iVar12 = (uVar6 & 3) + 3;
|
|
uVar5 = uVar5 - 2;
|
|
uVar19 = (ulonglong)
|
|
*(ushort *)((longlong)puVar1 + (ulonglong)(puVar1[0x1f] - 1) * 2 + 0x88);
|
|
uVar6 = uVar6 >> 2;
|
|
goto LAB_1400bb1a0;
|
|
}
|
|
}
|
|
else {
|
|
if (uVar9 == 0x11) {
|
|
for (; uVar5 < local_64._1_1_ + 3; uVar5 = uVar5 + 8) {
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar17 = *puVar15;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f));
|
|
}
|
|
iVar4 = -3;
|
|
uVar6 = uVar6 >> (local_64._1_1_ & 0x1f);
|
|
iVar12 = (uVar6 & 7) + 3;
|
|
uVar6 = uVar6 >> 3;
|
|
}
|
|
else {
|
|
for (; uVar5 < local_64._1_1_ + 7; uVar5 = uVar5 + 8) {
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar17 = *puVar15;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar17 << ((byte)uVar5 & 0x1f));
|
|
}
|
|
iVar4 = -7;
|
|
uVar6 = uVar6 >> (local_64._1_1_ & 0x1f);
|
|
iVar12 = (uVar6 & 0x7f) + 0xb;
|
|
uVar6 = uVar6 >> 7;
|
|
}
|
|
uVar5 = uVar5 + (iVar4 - (uint)local_64._1_1_);
|
|
uVar19 = uVar23;
|
|
LAB_1400bb1a0:
|
|
if (iVar12 + puVar1[0x1f] <= puVar1[0x1e] + puVar1[0x1d]) {
|
|
for (; iVar12 != 0; iVar12 = iVar12 + -1) {
|
|
*(short *)((longlong)puVar1 + (ulonglong)puVar1[0x1f] * 2 + 0x88) = (short)uVar19;
|
|
puVar1[0x1f] = puVar1[0x1f] + 1;
|
|
}
|
|
goto LAB_1400bb1d5;
|
|
}
|
|
}
|
|
param_1[4] = (longlong)"invalid bit length repeat";
|
|
*puVar1 = 0x1d;
|
|
goto LAB_1400baaf8;
|
|
}
|
|
uVar17 = uVar5;
|
|
if (uVar5 < (uVar11 >> 8 & 0xff)) {
|
|
do {
|
|
uVar5 = uVar17;
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar13 = *puVar15;
|
|
uVar5 = uVar17 + 8;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar13 << ((byte)uVar17 & 0x1f));
|
|
uVar17 = uVar5;
|
|
} while (uVar5 < local_64._1_1_);
|
|
}
|
|
uVar6 = uVar6 >> (local_64._1_1_ & 0x1f);
|
|
uVar5 = uVar5 - local_64._1_1_;
|
|
*(ushort *)((longlong)puVar1 + (ulonglong)puVar1[0x1f] * 2 + 0x88) = uVar9;
|
|
puVar1[0x1f] = puVar1[0x1f] + 1;
|
|
LAB_1400bb1d5:
|
|
} while (puVar1[0x1f] < puVar1[0x1e] + puVar1[0x1d]);
|
|
}
|
|
if (*puVar1 != 0x1d) {
|
|
if ((short)puVar1[0xa2] == 0) {
|
|
param_1[4] = (longlong)"invalid code -- missing end-of-block";
|
|
*puVar1 = 0x1d;
|
|
}
|
|
else {
|
|
*(uint **)(puVar1 + 0x20) = puVar1 + 0x152;
|
|
*(uint **)(puVar1 + 0x16) = puVar1 + 0x152;
|
|
puVar1[0x1a] = 9;
|
|
uVar7 = FUN_1400c5ab0(1,(ushort *)(puVar1 + 0x22),puVar1[0x1d],(longlong *)(puVar1 + 0x20)
|
|
,puVar1 + 0x1a,(undefined *)(puVar1 + 0xc2));
|
|
local_res18 = (uint)uVar7;
|
|
if (local_res18 == 0) {
|
|
*(undefined8 *)(puVar1 + 0x18) = *(undefined8 *)(puVar1 + 0x20);
|
|
puVar1[0x1b] = 6;
|
|
uVar23 = FUN_1400c5ab0(2,(ushort *)
|
|
((longlong)puVar1 + (ulonglong)puVar1[0x1d] * 2 + 0x88),
|
|
puVar1[0x1e],(longlong *)(puVar1 + 0x20),puVar1 + 0x1b,
|
|
(undefined *)(puVar1 + 0xc2));
|
|
local_res18 = (uint)uVar23;
|
|
uVar23 = uVar23 & 0xffffffff;
|
|
puVar20 = local_58;
|
|
if (local_res18 == 0) {
|
|
*puVar1 = 0x13;
|
|
uVar10 = local_res20;
|
|
if (param_2 != 6) goto switchD_1400ba4c1_caseD_13;
|
|
goto LAB_1400bac9e;
|
|
}
|
|
param_1[4] = (longlong)"invalid distances set";
|
|
*puVar1 = 0x1d;
|
|
uVar10 = local_res20;
|
|
}
|
|
else {
|
|
param_1[4] = (longlong)"invalid literal/lengths set";
|
|
*puVar1 = 0x1d;
|
|
puVar20 = local_58;
|
|
uVar10 = local_res20;
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
case 0x13:
|
|
switchD_1400ba4c1_caseD_13:
|
|
*puVar1 = 0x14;
|
|
case 0x14:
|
|
if ((5 < uVar16) && (0x101 < uVar10)) {
|
|
param_1[2] = (longlong)puVar20;
|
|
*(uint *)(param_1 + 3) = uVar10;
|
|
*param_1 = (longlong)puVar15;
|
|
*(uint *)(param_1 + 1) = uVar16;
|
|
puVar1[0x10] = uVar6;
|
|
puVar1[0x11] = uVar5;
|
|
FUN_1400c42d0(param_1,local_60);
|
|
local_58 = (undefined1 *)param_1[2];
|
|
local_res20 = *(uint *)(param_1 + 3);
|
|
puVar15 = (uint *)*param_1;
|
|
uVar16 = *(uint *)(param_1 + 1);
|
|
uVar5 = puVar1[0x11];
|
|
puVar20 = local_58;
|
|
uVar6 = puVar1[0x10];
|
|
uVar10 = local_res20;
|
|
if (*puVar1 == 0xb) {
|
|
puVar1[0x6f7] = 0xffffffff;
|
|
}
|
|
break;
|
|
}
|
|
puVar1[0x6f7] = 0;
|
|
uVar11 = *(uint *)(*(longlong *)(puVar1 + 0x16) +
|
|
(ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar6) * 4);
|
|
uVar17 = uVar5;
|
|
if (uVar5 < (uVar11 >> 8 & 0xff)) {
|
|
do {
|
|
uVar5 = uVar17;
|
|
uVar2 = 0;
|
|
uVar11 = local_64;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar5 = uVar17 + 8;
|
|
uVar16 = uVar16 - 1;
|
|
uVar6 = uVar6 + ((uint)(byte)*puVar15 << ((byte)uVar17 & 0x1f));
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar11 = *(uint *)(*(longlong *)(puVar1 + 0x16) +
|
|
(ulonglong)((1 << ((byte)puVar1[0x1a] & 0x1f)) - 1U & uVar6) * 4);
|
|
uVar17 = uVar5;
|
|
} while (uVar5 < (uVar11 >> 8 & 0xff));
|
|
}
|
|
cVar3 = (char)uVar11;
|
|
uVar17 = uVar11;
|
|
if ((cVar3 != '\0') && ((uVar11 & 0xf0) == 0)) {
|
|
bVar8 = (byte)(uVar11 >> 8);
|
|
uVar17 = *(uint *)(*(longlong *)(puVar1 + 0x16) +
|
|
(ulonglong)
|
|
((((1 << (cVar3 + bVar8 & 0x1f)) - 1U & uVar6) >> (bVar8 & 0x1f)) +
|
|
(uVar11 >> 0x10)) * 4);
|
|
if (uVar5 < (uVar17 >> 8 & 0xff) + (uVar11 >> 8 & 0xff)) {
|
|
do {
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar6 = uVar6 + ((uint)(byte)*puVar15 << ((byte)uVar5 & 0x1f));
|
|
uVar5 = uVar5 + 8;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar17 = *(uint *)(*(longlong *)(puVar1 + 0x16) +
|
|
(ulonglong)
|
|
((((1 << (cVar3 + bVar8 & 0x1f)) - 1U & uVar6) >> (bVar8 & 0x1f)) +
|
|
(uVar11 >> 0x10)) * 4);
|
|
} while (uVar5 < (uVar17 >> 8 & 0xff) + (uint)bVar8);
|
|
}
|
|
uVar6 = uVar6 >> (bVar8 & 0x1f);
|
|
uVar5 = uVar5 - bVar8;
|
|
puVar1[0x6f7] = (uint)bVar8;
|
|
local_64 = uVar11;
|
|
}
|
|
uVar10 = uVar17 >> 8 & 0xff;
|
|
puVar1[0x6f7] = puVar1[0x6f7] + uVar10;
|
|
uVar6 = uVar6 >> ((byte)(uVar17 >> 8) & 0x1f);
|
|
uVar5 = uVar5 - uVar10;
|
|
puVar1[0x12] = uVar17 >> 0x10;
|
|
puVar20 = local_58;
|
|
if ((char)uVar17 == '\0') {
|
|
*puVar1 = 0x19;
|
|
uVar10 = local_res20;
|
|
break;
|
|
}
|
|
if ((uVar17 & 0x20) != 0) {
|
|
puVar1[0x6f7] = 0xffffffff;
|
|
goto LAB_1400baae9;
|
|
}
|
|
if ((uVar17 & 0x40) != 0) {
|
|
param_1[4] = (longlong)"invalid literal/length code";
|
|
*puVar1 = 0x1d;
|
|
uVar10 = local_res20;
|
|
break;
|
|
}
|
|
*puVar1 = 0x15;
|
|
puVar1[0x14] = uVar17 & 0xf;
|
|
switchD_1400ba4c1_caseD_15:
|
|
uVar17 = puVar1[0x14];
|
|
if (uVar17 != 0) {
|
|
uVar10 = uVar5;
|
|
if (uVar5 < uVar17) {
|
|
do {
|
|
uVar2 = 0;
|
|
uVar11 = local_64;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar11 = *puVar15;
|
|
uVar10 = uVar5 + 8;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar11 << ((byte)uVar5 & 0x1f));
|
|
uVar5 = uVar10;
|
|
} while (uVar10 < puVar1[0x14]);
|
|
}
|
|
uVar5 = uVar10 - uVar17;
|
|
uVar10 = (1 << ((byte)uVar17 & 0x1f)) - 1U & uVar6;
|
|
uVar6 = uVar6 >> ((byte)uVar17 & 0x1f);
|
|
puVar1[0x12] = puVar1[0x12] + uVar10;
|
|
puVar1[0x6f7] = puVar1[0x6f7] + uVar17;
|
|
}
|
|
*puVar1 = 0x16;
|
|
puVar1[0x6f8] = puVar1[0x12];
|
|
switchD_1400ba4c1_caseD_16:
|
|
uVar11 = *(uint *)(*(longlong *)(puVar1 + 0x18) +
|
|
(ulonglong)((1 << ((byte)puVar1[0x1b] & 0x1f)) - 1U & uVar6) * 4);
|
|
uVar17 = uVar5;
|
|
if (uVar5 < (uVar11 >> 8 & 0xff)) {
|
|
do {
|
|
uVar5 = uVar17;
|
|
uVar2 = 0;
|
|
uVar11 = local_64;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar5 = uVar17 + 8;
|
|
uVar16 = uVar16 - 1;
|
|
uVar6 = uVar6 + ((uint)(byte)*puVar15 << ((byte)uVar17 & 0x1f));
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar11 = *(uint *)(*(longlong *)(puVar1 + 0x18) +
|
|
(ulonglong)((1 << ((byte)puVar1[0x1b] & 0x1f)) - 1U & uVar6) * 4);
|
|
uVar17 = uVar5;
|
|
} while (uVar5 < (uVar11 >> 8 & 0xff));
|
|
}
|
|
uVar17 = uVar11;
|
|
if ((uVar11 & 0xf0) == 0) {
|
|
bVar8 = (byte)(uVar11 >> 8);
|
|
uVar17 = *(uint *)(*(longlong *)(puVar1 + 0x18) +
|
|
(ulonglong)
|
|
((((1 << ((char)uVar11 + bVar8 & 0x1f)) - 1U & uVar6) >> (bVar8 & 0x1f)) +
|
|
(uVar11 >> 0x10)) * 4);
|
|
if (uVar5 < (uVar17 >> 8 & 0xff) + (uVar11 >> 8 & 0xff)) {
|
|
do {
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar6 = uVar6 + ((uint)(byte)*puVar15 << ((byte)uVar5 & 0x1f));
|
|
uVar5 = uVar5 + 8;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar17 = *(uint *)(*(longlong *)(puVar1 + 0x18) +
|
|
(ulonglong)
|
|
((((1 << ((char)uVar11 + bVar8 & 0x1f)) - 1U & uVar6) >>
|
|
(bVar8 & 0x1f)) + (uVar11 >> 0x10)) * 4);
|
|
} while (uVar5 < (uVar17 >> 8 & 0xff) + (uint)bVar8);
|
|
}
|
|
uVar6 = uVar6 >> (bVar8 & 0x1f);
|
|
uVar5 = uVar5 - bVar8;
|
|
puVar1[0x6f7] = puVar1[0x6f7] + (uint)bVar8;
|
|
local_64 = uVar11;
|
|
}
|
|
uVar10 = uVar17 >> 8 & 0xff;
|
|
puVar1[0x6f7] = puVar1[0x6f7] + uVar10;
|
|
uVar6 = uVar6 >> ((byte)(uVar17 >> 8) & 0x1f);
|
|
uVar5 = uVar5 - uVar10;
|
|
puVar20 = local_58;
|
|
if ((uVar17 & 0x40) != 0) {
|
|
param_1[4] = (longlong)"invalid distance code";
|
|
*puVar1 = 0x1d;
|
|
uVar10 = local_res20;
|
|
break;
|
|
}
|
|
*puVar1 = 0x17;
|
|
puVar1[0x13] = uVar17 >> 0x10;
|
|
puVar1[0x14] = uVar17 & 0xf;
|
|
uVar10 = local_res20;
|
|
switchD_1400ba4c1_caseD_17:
|
|
uVar17 = puVar1[0x14];
|
|
if (uVar17 != 0) {
|
|
uVar13 = uVar5;
|
|
if (uVar5 < uVar17) {
|
|
do {
|
|
uVar5 = uVar13;
|
|
uVar2 = 0;
|
|
uVar11 = local_64;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar11 = *puVar15;
|
|
uVar5 = uVar13 + 8;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar6 = uVar6 + ((uint)(byte)uVar11 << ((byte)uVar13 & 0x1f));
|
|
uVar13 = uVar5;
|
|
} while (uVar5 < puVar1[0x14]);
|
|
}
|
|
uVar5 = uVar5 - uVar17;
|
|
uVar11 = (1 << ((byte)uVar17 & 0x1f)) - 1U & uVar6;
|
|
uVar6 = uVar6 >> ((byte)uVar17 & 0x1f);
|
|
puVar1[0x13] = puVar1[0x13] + uVar11;
|
|
puVar1[0x6f7] = puVar1[0x6f7] + uVar17;
|
|
}
|
|
*puVar1 = 0x18;
|
|
switchD_1400ba4c1_caseD_18:
|
|
uVar2 = uVar16;
|
|
uVar11 = local_64;
|
|
if (uVar10 != 0) {
|
|
uVar17 = puVar1[0x13];
|
|
if (local_60 - uVar10 < uVar17) {
|
|
uVar17 = uVar17 - (local_60 - uVar10);
|
|
if ((puVar1[0xc] < uVar17) && (puVar1[0x6f6] != 0)) {
|
|
param_1[4] = (longlong)"invalid distance too far back";
|
|
*puVar1 = 0x1d;
|
|
break;
|
|
}
|
|
uVar13 = puVar1[0xd];
|
|
if (uVar13 < uVar17) {
|
|
uVar17 = uVar17 - uVar13;
|
|
uVar13 = puVar1[0xb] - uVar17;
|
|
}
|
|
else {
|
|
uVar13 = uVar13 - uVar17;
|
|
}
|
|
uVar11 = puVar1[0x12];
|
|
lVar14 = (ulonglong)uVar13 + *(longlong *)(puVar1 + 0xe);
|
|
if (uVar11 < uVar17) goto LAB_1400bb7f5;
|
|
}
|
|
else {
|
|
lVar14 = (longlong)puVar20 - (ulonglong)uVar17;
|
|
uVar11 = puVar1[0x12];
|
|
LAB_1400bb7f5:
|
|
uVar17 = uVar11;
|
|
uVar11 = uVar17;
|
|
}
|
|
if (uVar10 < uVar17) {
|
|
uVar17 = uVar10;
|
|
}
|
|
local_res20 = uVar10 - uVar17;
|
|
puVar1[0x12] = uVar11 - uVar17;
|
|
puVar21 = puVar20;
|
|
do {
|
|
local_58 = puVar21 + 1;
|
|
uVar17 = uVar17 - 1;
|
|
*puVar21 = puVar21[lVar14 - (longlong)puVar20];
|
|
puVar21 = local_58;
|
|
} while (uVar17 != 0);
|
|
puVar20 = local_58;
|
|
uVar10 = local_res20;
|
|
if (puVar1[0x12] == 0) {
|
|
*puVar1 = 0x14;
|
|
}
|
|
break;
|
|
}
|
|
goto LAB_1400bac9a;
|
|
case 0x15:
|
|
goto switchD_1400ba4c1_caseD_15;
|
|
case 0x16:
|
|
goto switchD_1400ba4c1_caseD_16;
|
|
case 0x17:
|
|
goto switchD_1400ba4c1_caseD_17;
|
|
case 0x18:
|
|
goto switchD_1400ba4c1_caseD_18;
|
|
case 0x19:
|
|
uVar2 = uVar16;
|
|
if (uVar10 != 0) {
|
|
local_58 = puVar20 + 1;
|
|
local_res20 = uVar10 - 1;
|
|
*puVar20 = (char)puVar1[0x12];
|
|
*puVar1 = 0x14;
|
|
puVar20 = local_58;
|
|
uVar10 = local_res20;
|
|
break;
|
|
}
|
|
goto LAB_1400bac9a;
|
|
case 0x1a:
|
|
uVar17 = uVar5;
|
|
uVar22 = uVar6;
|
|
if (puVar1[2] != 0) {
|
|
for (; uVar17 < 0x20; uVar17 = uVar17 + 8) {
|
|
uVar5 = uVar17;
|
|
uVar6 = uVar22;
|
|
uVar2 = 0;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar6 = *puVar15;
|
|
bVar8 = (byte)uVar17;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar22 = uVar22 + ((uint)(byte)uVar6 << (bVar8 & 0x1f));
|
|
}
|
|
uVar6 = local_60 - uVar10;
|
|
*(int *)((longlong)param_1 + 0x1c) = *(int *)((longlong)param_1 + 0x1c) + uVar6;
|
|
puVar1[7] = puVar1[7] + uVar6;
|
|
if (uVar6 != 0) {
|
|
if (puVar1[4] == 0) {
|
|
uVar5 = FUN_1400c1b80(puVar1[6],puVar20 + -(ulonglong)uVar6,uVar6);
|
|
puVar20 = local_58;
|
|
uVar10 = local_res20;
|
|
}
|
|
else {
|
|
uVar5 = uVar13;
|
|
if ((uint *)(puVar20 + -(ulonglong)uVar6) != (uint *)0x0) {
|
|
uVar5 = FUN_1400ba0d0(puVar1[6],(uint *)(puVar20 + -(ulonglong)uVar6),uVar6);
|
|
puVar20 = local_58;
|
|
uVar10 = local_res20;
|
|
}
|
|
}
|
|
puVar1[6] = uVar5;
|
|
*(uint *)((longlong)param_1 + 0x4c) = uVar5;
|
|
}
|
|
uVar11 = uVar22;
|
|
if (puVar1[4] == 0) {
|
|
uVar11 = ((uVar22 & 0xff00) + uVar22 * 0x10000) * 0x100 + (uVar22 >> 8 & 0xff00) +
|
|
(uVar22 >> 0x18);
|
|
}
|
|
uVar5 = uVar13;
|
|
uVar6 = uVar13;
|
|
local_60 = uVar10;
|
|
if (uVar11 != puVar1[6]) {
|
|
param_1[4] = (longlong)"incorrect data check";
|
|
*puVar1 = 0x1d;
|
|
uVar5 = uVar17;
|
|
uVar6 = uVar22;
|
|
break;
|
|
}
|
|
}
|
|
*puVar1 = 0x1b;
|
|
case 0x1b:
|
|
if ((puVar1[2] != 0) && (uVar17 = uVar5, uVar22 = uVar6, puVar1[4] != 0)) {
|
|
for (; uVar17 < 0x20; uVar17 = uVar17 + 8) {
|
|
uVar5 = uVar17;
|
|
uVar6 = uVar22;
|
|
uVar2 = 0;
|
|
uVar11 = local_64;
|
|
if (uVar16 == 0) goto LAB_1400bac9a;
|
|
uVar6 = *puVar15;
|
|
bVar8 = (byte)uVar17;
|
|
uVar16 = uVar16 - 1;
|
|
puVar15 = (uint *)((longlong)puVar15 + 1);
|
|
uVar22 = uVar22 + ((uint)(byte)uVar6 << (bVar8 & 0x1f));
|
|
}
|
|
uVar5 = uVar13;
|
|
uVar6 = uVar13;
|
|
if (uVar22 != puVar1[7]) {
|
|
param_1[4] = (longlong)"incorrect length check";
|
|
*puVar1 = 0x1d;
|
|
uVar5 = uVar17;
|
|
uVar6 = uVar22;
|
|
break;
|
|
}
|
|
}
|
|
*puVar1 = 0x1c;
|
|
switchD_1400ba4c1_caseD_1c:
|
|
uVar23 = 1;
|
|
goto LAB_1400bac9e;
|
|
case 0x1c:
|
|
goto switchD_1400ba4c1_caseD_1c;
|
|
case 0x1d:
|
|
uVar23 = 0xfffffffd;
|
|
goto LAB_1400bac9e;
|
|
case 0x1e:
|
|
goto LAB_1400bacf9;
|
|
}
|
|
LAB_1400baaf8:
|
|
uVar17 = *puVar1;
|
|
} while( true );
|
|
}
|
|
|