/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400d6edc FUN_1400d6edc * Pseudocode, not original source. */ ulonglong FUN_1400d6edc(longlong *param_1,uint param_2) { byte bVar1; int iVar2; undefined8 *puVar3; int *piVar4; uint uVar5; uint uVar6; int iVar7; undefined8 *puVar8; undefined1 uVar9; ulonglong uVar10; ulonglong uVar11; uint uVar12; if (((param_1 == (longlong *)0x0) || (puVar3 = (undefined8 *)param_1[5], puVar3 == (undefined8 *)0x0)) || (4 < param_2)) { return 0xfffffffe; } if (((param_1[2] == 0) || ((*param_1 == 0 && ((int)param_1[1] != 0)))) || ((*(int *)(puVar3 + 1) == 0x29a && (param_2 != 4)))) { param_1[4] = (longlong)"stream error"; return 0xfffffffe; } if ((int)param_1[3] == 0) { param_1[4] = (longlong)"buffer error"; return 0xfffffffb; } iVar7 = *(int *)(puVar3 + 8); uVar12 = 1; *puVar3 = param_1; *(uint *)(puVar3 + 8) = param_2; if (*(int *)(puVar3 + 1) == 0x2a) { if (*(int *)((longlong)puVar3 + 0x2c) == 2) { uVar5 = FUN_1400da318(0,(uint *)0x0,0); *(uint *)((longlong)param_1 + 0x4c) = uVar5; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0x1f; *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0x8b; *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 8; piVar4 = (int *)puVar3[6]; *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; if (piVar4 == (int *)0x0) { *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0; *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0; *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0; *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0; *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0; *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; if (*(int *)((longlong)puVar3 + 0xac) == 9) { uVar9 = 2; } else if ((1 < *(int *)(puVar3 + 0x16)) || (uVar9 = 0, *(int *)((longlong)puVar3 + 0xac) < 2) ) { uVar9 = 4; } *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = uVar9; *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = 0xb; *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined4 *)(puVar3 + 1) = 0x71; } else { *(byte *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = (-(*(longlong *)(piVar4 + 0xc) != 0) & 0x10U) + (-(piVar4[0xf] != 0) & 2U) + (-(*(longlong *)(piVar4 + 8) != 0) & 8U) + (-(*(longlong *)(piVar4 + 4) != 0) & 4U) + (*piVar4 != 0); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)(puVar3[6] + 4); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)(puVar3[6] + 5); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)(puVar3[6] + 6); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)(puVar3[6] + 7); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; if (*(int *)((longlong)puVar3 + 0xac) == 9) { uVar9 = 2; } else if ((1 < *(int *)(puVar3 + 0x16)) || (uVar9 = 0, *(int *)((longlong)puVar3 + 0xac) < 2) ) { uVar9 = 4; } *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = uVar9; *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)(puVar3[6] + 0xc); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; uVar5 = *(uint *)(puVar3 + 5); if (*(longlong *)(puVar3[6] + 0x10) != 0) { *(undefined1 *)((ulonglong)uVar5 + puVar3[2]) = *(undefined1 *)(puVar3[6] + 0x18); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)(puVar3[6] + 0x19); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; uVar5 = *(uint *)(puVar3 + 5); } if (*(int *)(puVar3[6] + 0x3c) != 0) { uVar5 = FUN_1400da318(*(uint *)((longlong)param_1 + 0x4c),(uint *)puVar3[2],uVar5); *(uint *)((longlong)param_1 + 0x4c) = uVar5; } *(undefined4 *)(puVar3 + 7) = 0; *(undefined4 *)(puVar3 + 1) = 0x45; } } else { uVar5 = 0; if (((*(int *)(puVar3 + 0x16) < 2) && (iVar2 = *(int *)((longlong)puVar3 + 0xac), 1 < iVar2)) && (uVar5 = uVar12, 5 < iVar2)) { uVar5 = (iVar2 != 6) + 2; } uVar5 = (*(int *)(puVar3 + 9) + -8) * 0x1000 + 0x800U | uVar5 << 6; if (*(int *)((longlong)puVar3 + 0x94) != 0) { uVar5 = uVar5 | 0x20; } *(undefined4 *)(puVar3 + 1) = 0x71; puVar8 = puVar3; FUN_1400d6e2c((longlong)puVar3,(uVar5 / 0x1f + 1) * 0x1f); if (*(int *)((longlong)puVar3 + 0x94) != 0) { FUN_1400d6e2c((longlong)puVar8,(uint)*(ushort *)((longlong)param_1 + 0x4e)); FUN_1400d6e2c((longlong)puVar8,(uint)*(ushort *)((longlong)param_1 + 0x4c)); } uVar5 = FUN_1400d978c(0,(byte *)0x0,0); *(uint *)((longlong)param_1 + 0x4c) = uVar5; } } if (*(int *)(puVar3 + 1) == 0x45) { if (*(longlong *)(puVar3[6] + 0x10) != 0) { uVar5 = *(uint *)(puVar3 + 5); if (*(uint *)(puVar3 + 7) < (uint)*(ushort *)(puVar3[6] + 0x18)) { do { uVar6 = *(uint *)(puVar3 + 5); if (uVar6 == *(uint *)(puVar3 + 3)) { if ((*(int *)(puVar3[6] + 0x3c) != 0) && (uVar5 < uVar6)) { uVar5 = FUN_1400da318(*(uint *)((longlong)param_1 + 0x4c), (uint *)((ulonglong)uVar5 + puVar3[2]),uVar6 - uVar5); *(uint *)((longlong)param_1 + 0x4c) = uVar5; } FUN_1400d6e5c((longlong)param_1); uVar5 = *(uint *)(puVar3 + 5); uVar6 = uVar5; if (uVar5 == *(uint *)(puVar3 + 3)) break; } *(undefined1 *)((ulonglong)uVar6 + puVar3[2]) = *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 7) + *(longlong *)(puVar3[6] + 0x10)); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(int *)(puVar3 + 7) = *(int *)(puVar3 + 7) + 1; } while (*(uint *)(puVar3 + 7) < (uint)*(ushort *)(puVar3[6] + 0x18)); } if ((*(int *)(puVar3[6] + 0x3c) != 0) && (uVar5 < *(uint *)(puVar3 + 5))) { uVar5 = FUN_1400da318(*(uint *)((longlong)param_1 + 0x4c), (uint *)((ulonglong)uVar5 + puVar3[2]),*(uint *)(puVar3 + 5) - uVar5); *(uint *)((longlong)param_1 + 0x4c) = uVar5; } if (*(int *)(puVar3 + 7) != *(int *)(puVar3[6] + 0x18)) goto LAB_1400d7320; *(undefined4 *)(puVar3 + 7) = 0; } *(undefined4 *)(puVar3 + 1) = 0x49; } LAB_1400d7320: if (*(int *)(puVar3 + 1) == 0x49) { if (*(longlong *)(puVar3[6] + 0x20) != 0) { uVar10 = (ulonglong)*(uint *)(puVar3 + 5); do { uVar5 = *(uint *)(puVar3 + 5); uVar11 = (ulonglong)uVar5; if (uVar5 == *(uint *)(puVar3 + 3)) { if ((*(int *)(puVar3[6] + 0x3c) != 0) && ((uint)uVar10 < uVar5)) { uVar5 = FUN_1400da318(*(uint *)((longlong)param_1 + 0x4c),(uint *)(uVar10 + puVar3[2]), uVar5 - (uint)uVar10); *(uint *)((longlong)param_1 + 0x4c) = uVar5; } FUN_1400d6e5c((longlong)param_1); uVar10 = (ulonglong)*(uint *)(puVar3 + 5); uVar11 = uVar10; uVar5 = uVar12; if (*(uint *)(puVar3 + 5) == *(uint *)(puVar3 + 3)) break; } bVar1 = *(byte *)(*(longlong *)(puVar3[6] + 0x20) + (ulonglong)*(uint *)(puVar3 + 7)); *(uint *)(puVar3 + 7) = *(uint *)(puVar3 + 7) + 1; *(byte *)(uVar11 + puVar3[2]) = bVar1; *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; uVar5 = (uint)bVar1; } while (bVar1 != 0); if (*(int *)(puVar3[6] + 0x3c) != 0) { if ((uint)uVar10 < *(uint *)(puVar3 + 5)) { uVar6 = FUN_1400da318(*(uint *)((longlong)param_1 + 0x4c),(uint *)(uVar10 + puVar3[2]), *(uint *)(puVar3 + 5) - (uint)uVar10); *(uint *)((longlong)param_1 + 0x4c) = uVar6; } } if (uVar5 != 0) goto LAB_1400d73de; *(undefined4 *)(puVar3 + 7) = 0; } *(undefined4 *)(puVar3 + 1) = 0x5b; } LAB_1400d73de: if (*(int *)(puVar3 + 1) == 0x5b) { if (*(longlong *)(puVar3[6] + 0x30) != 0) { uVar10 = (ulonglong)*(uint *)(puVar3 + 5); do { uVar5 = *(uint *)(puVar3 + 5); uVar11 = (ulonglong)uVar5; if (uVar5 == *(uint *)(puVar3 + 3)) { if ((*(int *)(puVar3[6] + 0x3c) != 0) && ((uint)uVar10 < uVar5)) { uVar5 = FUN_1400da318(*(uint *)((longlong)param_1 + 0x4c),(uint *)(uVar10 + puVar3[2]), uVar5 - (uint)uVar10); *(uint *)((longlong)param_1 + 0x4c) = uVar5; } FUN_1400d6e5c((longlong)param_1); uVar10 = (ulonglong)*(uint *)(puVar3 + 5); uVar11 = uVar10; uVar5 = uVar12; if (*(uint *)(puVar3 + 5) == *(uint *)(puVar3 + 3)) break; } bVar1 = *(byte *)(*(longlong *)(puVar3[6] + 0x30) + (ulonglong)*(uint *)(puVar3 + 7)); *(uint *)(puVar3 + 7) = *(uint *)(puVar3 + 7) + 1; *(byte *)(uVar11 + puVar3[2]) = bVar1; *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; uVar5 = (uint)bVar1; } while (bVar1 != 0); if (*(int *)(puVar3[6] + 0x3c) != 0) { if ((uint)uVar10 < *(uint *)(puVar3 + 5)) { uVar12 = FUN_1400da318(*(uint *)((longlong)param_1 + 0x4c),(uint *)(uVar10 + puVar3[2]), *(uint *)(puVar3 + 5) - (uint)uVar10); *(uint *)((longlong)param_1 + 0x4c) = uVar12; } } if (uVar5 != 0) goto LAB_1400d7499; } *(undefined4 *)(puVar3 + 1) = 0x67; } LAB_1400d7499: if (*(int *)(puVar3 + 1) == 0x67) { if (*(int *)(puVar3[6] + 0x3c) != 0) { if (*(uint *)(puVar3 + 3) < *(int *)(puVar3 + 5) + 2U) { FUN_1400d6e5c((longlong)param_1); } if (*(uint *)(puVar3 + 3) < *(uint *)(puVar3 + 5) + 2) goto LAB_1400d74fd; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)((longlong)param_1 + 0x4c); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)((longlong)param_1 + 0x4d); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; uVar12 = FUN_1400da318(0,(uint *)0x0,0); *(uint *)((longlong)param_1 + 0x4c) = uVar12; } *(undefined4 *)(puVar3 + 1) = 0x71; } LAB_1400d74fd: if (*(int *)(puVar3 + 5) == 0) { if ((((int)param_1[1] == 0) && ((int)param_2 <= iVar7)) && (param_2 != 4)) goto LAB_1400d7529; LAB_1400d7539: if (*(int *)(puVar3 + 1) == 0x29a) { if ((int)param_1[1] != 0) { LAB_1400d7529: param_1[4] = (longlong)"buffer error"; return 0xfffffffb; } LAB_1400d7551: if ((*(int *)((longlong)puVar3 + 0x9c) != 0) || ((param_2 != 0 && (*(int *)(puVar3 + 1) != 0x29a)))) goto LAB_1400d756b; } else { if ((int)param_1[1] == 0) goto LAB_1400d7551; LAB_1400d756b: iVar7 = (*(code *)(&PTR_FUN_1401181b8)[(longlong)*(int *)((longlong)puVar3 + 0xac) * 2]) (puVar3); if ((iVar7 == 2) || (iVar7 == 3)) { *(undefined4 *)(puVar3 + 1) = 0x29a; } if ((iVar7 == 0) || (iVar7 == 2)) { if ((int)param_1[3] != 0) { return 0; } goto LAB_1400d750f; } if (iVar7 == 1) { if (param_2 == 1) { FUN_1400dbb08((longlong)puVar3); } else { FUN_1400dba68((longlong)puVar3,(undefined1 *)0x0,0,0); if (param_2 == 3) { *(undefined2 *)(puVar3[0xd] + (ulonglong)(*(int *)((longlong)puVar3 + 0x74) - 1) * 2) = 0; memset((void *)puVar3[0xd],0,(ulonglong)(*(int *)((longlong)puVar3 + 0x74) - 1) * 2); } } FUN_1400d6e5c((longlong)param_1); if ((int)param_1[3] == 0) goto LAB_1400d750f; } } if (param_2 == 4) { if (0 < *(int *)((longlong)puVar3 + 0x2c)) { if (*(int *)((longlong)puVar3 + 0x2c) == 2) { *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)((longlong)param_1 + 0x4c); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)((longlong)param_1 + 0x4d); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)((longlong)param_1 + 0x4e); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)((longlong)param_1 + 0x4f); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)((longlong)param_1 + 0xc); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)((longlong)param_1 + 0xd); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)((longlong)param_1 + 0xe); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; *(undefined1 *)((ulonglong)*(uint *)(puVar3 + 5) + puVar3[2]) = *(undefined1 *)((longlong)param_1 + 0xf); *(int *)(puVar3 + 5) = *(int *)(puVar3 + 5) + 1; } else { puVar8 = puVar3; FUN_1400d6e2c((longlong)puVar3,(uint)*(ushort *)((longlong)param_1 + 0x4e)); FUN_1400d6e2c((longlong)puVar8,(uint)*(ushort *)((longlong)param_1 + 0x4c)); } FUN_1400d6e5c((longlong)param_1); if (0 < *(int *)((longlong)puVar3 + 0x2c)) { *(int *)((longlong)puVar3 + 0x2c) = -*(int *)((longlong)puVar3 + 0x2c); } return (ulonglong)(*(int *)(puVar3 + 5) == 0); } return 1; } } else { FUN_1400d6e5c((longlong)param_1); if ((int)param_1[3] != 0) goto LAB_1400d7539; LAB_1400d750f: *(undefined4 *)(puVar3 + 8) = 0xffffffff; } return 0; }