/* Agent_Release_x64.exe sha256 6f2be7b8eb799ba51b359d1958720aac5baee5b7ee0d1d36684d3cbd72d45469 * Ghidra 12.1.2 decompiler output for 0x1400d1cf0 FUN_1400d1cf0 * Pseudocode, not original source. */ undefined8 FUN_1400d1cf0(byte *param_1,uint param_2,uint *param_3,uint *param_4) { byte bVar1; byte *pbVar2; uint uVar3; uint uVar4; uint uVar5; int iVar6; longlong lVar7; if (((param_1 == (byte *)0x0) || (param_3 == (uint *)0x0)) || (param_4 == (uint *)0x0)) { return 0x10; } if (2 < param_2) { if (*param_4 < 2) { return 6; } if ((*param_1 & 0x1f) == 6) { bVar1 = param_1[1]; if (bVar1 < 0x80) { uVar4 = (uint)bVar1; iVar6 = 2; } else { if (bVar1 < 0x81) { return 7; } if (0x82 < bVar1) { return 7; } uVar4 = 0; uVar3 = bVar1 & 0x7f; if ((bVar1 & 0x7f) == 0) { return 7; } pbVar2 = param_1 + 2; iVar6 = uVar3 + 2; do { bVar1 = *pbVar2; pbVar2 = pbVar2 + 1; uVar4 = uVar4 << 8 | (uint)bVar1; uVar3 = uVar3 - 1; } while (uVar3 != 0); } if ((uVar4 != 0) && (uVar4 + iVar6 <= param_2)) { uVar3 = 0; uVar5 = 0; lVar7 = 0; if (uVar4 != 0) { pbVar2 = param_1 + iVar6; do { bVar1 = *pbVar2; uVar4 = uVar4 - 1; pbVar2 = pbVar2 + 1; uVar5 = bVar1 & 0x7f | uVar5 << 7; if ((bVar1 & 0x80) == 0) { if (*param_4 <= uVar3) { return 6; } if (uVar3 == 0) { uVar3 = 2; lVar7 = 2; *param_3 = uVar5 / 0x28; param_3[1] = uVar5 % 0x28; } else { param_3[lVar7] = uVar5; uVar3 = uVar3 + 1; lVar7 = lVar7 + 1; } uVar5 = 0; } } while (uVar4 != 0); } *param_4 = uVar3; return 0; } } } return 7; }