/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x1400d2050 FUN_1400d2050 * Pseudocode, not original source. */ void FUN_1400d2050(uint *param_1,uint *param_2,undefined8 param_3,ulonglong param_4) { longlong lVar1; uint *puVar2; undefined8 uVar3; uint *puVar4; undefined *puVar5; int *piVar6; uint *puVar7; uint *puVar8; uint *puVar9; uint *puVar10; uint *puVar11; ulonglong uVar12; ulonglong uVar13; uint uVar14; param_2[0xc] = param_1[0x1be]; uVar14 = param_1[0x1c5]; param_2[6] = param_1[0x1c4]; *(short *)(param_2 + 7) = (short)uVar14; uVar12 = *(ulonglong *)(param_1 + 0x1d2); param_2[2] = *(uint *)(uVar12 + 0x130); *(undefined2 *)(param_2 + 3) = *(undefined2 *)(uVar12 + 0x134); param_2[10] = param_1[0x1c8]; *(short *)(param_2 + 0xb) = (short)param_1[0x1c9]; *(undefined8 *)(param_2 + 0x28) = *(undefined8 *)(param_1 + 0x72); param_2[0x2a] = param_1[0x7a]; *(char *)((longlong)param_2 + 0x91) = (char)param_1[0x1c0]; puVar11 = (uint *)0x0; puVar2 = param_1; puVar9 = param_2; puVar10 = puVar11; if (*(longlong *)(param_1 + 0x1a) != 0) { puVar10 = *(uint **)(param_1 + 0x16); } for (; puVar10 != (uint *)0x0; puVar10 = *(uint **)(puVar10 + 4)) { uVar12 = (ulonglong)param_2[0x18]; uVar14 = *puVar10; param_4 = (ulonglong)uVar14; lVar1 = *(longlong *)(param_2 + 0x10); if (lVar1 != 0) { puVar2 = *(uint **)(lVar1 + (param_4 % uVar12) * 8); while ((puVar2 != (uint *)0x0 && (puVar9 = (uint *)((ulonglong)puVar2[6] % uVar12), (int)(param_4 % uVar12) == (int)puVar9))) { if (*puVar2 == uVar14) goto LAB_1400d21a1; puVar2 = *(uint **)(puVar2 + 2); } } uVar13 = param_4 % uVar12; if (lVar1 != 0) { puVar2 = *(uint **)(lVar1 + uVar13 * 8); while ((puVar2 != (uint *)0x0 && (puVar9 = (uint *)((ulonglong)puVar2[6] % uVar12), (uint)uVar13 == (uint)puVar9))) { if (*puVar2 == uVar14) goto LAB_1400d219d; puVar2 = *(uint **)(puVar2 + 2); } } puVar9 = puVar10; puVar2 = FUN_1400802f0((char *)(param_2 + 0xe),puVar10,(uint)uVar13,uVar14); uVar12 = uVar13; LAB_1400d219d: *(char *)(puVar2 + 1) = '\0'; LAB_1400d21a1: } puVar10 = puVar11; if (0 < (int)param_1[0x96]) { do { if (((longlong)puVar11 < 0) || ((int)param_1[0x96] <= (int)puVar10)) { /* WARNING: Subroutine does not return */ FUN_14006be30(puVar2,puVar9,uVar12,param_4); } puVar8 = (uint *)(*(longlong *)(param_1 + 0x94) + (longlong)puVar11 * 4); puVar7 = param_2 + 0xe; uVar14 = *puVar8; param_4 = (ulonglong)param_2[0x18]; uVar12 = (ulonglong)uVar14 % param_4; lVar1 = *(longlong *)(param_2 + 0x10); if (lVar1 != 0) { puVar2 = *(uint **)(lVar1 + uVar12 * 8); while ((puVar2 != (uint *)0x0 && (puVar9 = (uint *)((ulonglong)puVar2[6] % param_4), (int)uVar12 == (int)puVar9))) { if (*puVar2 == uVar14) goto LAB_1400d229e; puVar2 = *(uint **)(puVar2 + 2); } } uVar13 = (ulonglong)uVar14 % param_4; if (lVar1 == 0) { LAB_1400d225f: uVar3 = FUN_1400a1910((longlong)puVar7,param_2[0x18],'\x01'); if ((char)uVar3 == '\0') { /* WARNING: Subroutine does not return */ FUN_1400064e0(0x8007000e); } } else { puVar4 = *(uint **)(lVar1 + uVar13 * 8); while ((puVar4 != (uint *)0x0 && ((uint)uVar13 == (uint)(uint *)((ulonglong)puVar4[6] % param_4)))) { puVar9 = (uint *)((ulonglong)puVar4[6] % param_4); if (*puVar4 == uVar14) goto LAB_1400d2295; puVar4 = *(uint **)(puVar4 + 2); } if (lVar1 == 0) goto LAB_1400d225f; } FUN_1400cadd0((char *)puVar7); param_4 = (ulonglong)uVar14; puVar4 = FUN_14007d400((char *)puVar7,puVar8,(uint)uVar13,uVar14); FUN_1400cadd0((char *)puVar7); puVar2 = puVar7; puVar9 = puVar8; uVar12 = uVar13; LAB_1400d2295: *(undefined1 *)(puVar4 + 1) = 0; LAB_1400d229e: uVar14 = (int)puVar10 + 1; puVar10 = (uint *)(ulonglong)uVar14; puVar11 = (uint *)((longlong)puVar11 + 1); } while ((int)uVar14 < (int)param_1[0x96]); } *(undefined1 *)(param_2 + 0xd) = 0; *(bool *)(param_2 + 0x24) = param_1[0x1c4] != param_1[0x1c8]; puVar5 = *(undefined **)(param_2 + 0x26); if (*(undefined **)(param_2 + 0x26) == (undefined *)0x0) { puVar5 = PTR_DAT_1401ac010; } *(undefined **)(param_2 + 0x26) = puVar5; if (*(undefined **)(param_1 + 0x7c) != puVar5) { piVar6 = (int *)FUN_14006cb70(puVar2,puVar9,uVar12,param_4); FUN_14006b350(piVar6); FUN_1400031e0((longlong *)(param_2 + 0x26),puVar9,uVar12,param_4); puVar5 = *(undefined **)(param_1 + 0x7c); *(undefined **)(param_2 + 0x26) = puVar5; if (((puVar5 != PTR_DAT_1401ac010) && (puVar5 != (undefined *)0x0)) && (puVar5 != (undefined *)0x8)) { *(int *)(puVar5 + -4) = *(int *)(puVar5 + -4) + 1; } FUN_14006b3e0((longlong)piVar6); } *(undefined8 *)(param_2 + 0x2c) = *(undefined8 *)(param_1 + 0xc); *(undefined8 *)(param_2 + 0x2e) = *(undefined8 *)(param_1 + 0x78); uVar14 = (**(code **)(**(longlong **)(*(longlong *)(param_1 + 0x8e) + 0x478) + 0x18)) (*(longlong **)(*(longlong *)(param_1 + 0x8e) + 0x478),param_1[0x1be]); param_2[0x32] = uVar14; param_2[0x30] = param_1[0x76]; param_2[0x31] = param_1[0x77]; return; }