/* MessageServer_Release_x64.exe sha256 7911b15c4379625eaa12ff227708aa3a033bc6ac2cf6b34283136e3a62df25f1 * Ghidra 12.1.2 decompiler output for 0x14009bfe0 FUN_14009bfe0 * Pseudocode, not original source. */ void FUN_14009bfe0(SIZE_T *param_1,undefined8 param_2,undefined8 param_3,undefined8 param_4) { int iVar1; int iVar2; uint uVar3; byte *pbVar4; undefined *puVar5; longlong *plVar6; int *piVar7; ulonglong uVar8; byte *pbVar9; int iVar10; undefined *puVar11; byte *local_res10; byte *local_res18; longlong *local_res20; uint local_50 [2]; longlong local_48; longlong local_40; undefined4 local_38; int local_34; FUN_14006cb70(param_1,param_2,param_3,param_4); local_res10 = PTR_DAT_1401ac008; iVar1 = FUN_14006ca90(&DAT_14013af48); if (local_res10 == (byte *)0x0) { iVar10 = 0; } else if (local_res10 == PTR_DAT_1401ac008) { iVar10 = 0; } else { iVar10 = *(int *)(local_res10 + -8); } iVar2 = iVar1; if (iVar1 <= iVar10) { if (local_res10 == (byte *)0x0) { iVar2 = 0; } else if (local_res10 == PTR_DAT_1401ac008) { iVar2 = 0; } else { iVar2 = *(int *)(local_res10 + -8); } } iVar10 = 1; if (1 < iVar2) { iVar10 = iVar2; } if (local_res10 == (byte *)0x0) { iVar2 = 0; } else if (local_res10 == PTR_DAT_1401ac008) { iVar2 = 0; } else { iVar2 = *(int *)(local_res10 + -8); } if (iVar10 <= iVar2) goto LAB_14009c13a; if (local_res10 == (byte *)0x0) { local_res10 = PTR_DAT_1401ac008; } if (iVar10 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } if (iVar10 == 0) { FUN_140008440((longlong *)&local_res10); goto LAB_14009c13a; } if (local_res10 == (byte *)0x0) { iVar2 = 0; } else if (local_res10 == PTR_DAT_1401ac008) { iVar2 = 0; } else { iVar2 = *(int *)(local_res10 + -8); } if (iVar10 == iVar2) goto LAB_14009c13a; piVar7 = (int *)FUN_14006cbf0((longlong)iVar10 + 9); if (piVar7 != (int *)0x0) { *piVar7 = 0; piVar7[1] = 1; } *piVar7 = iVar10; if (local_res10 == (byte *)0x0) { iVar2 = 0; } else if (local_res10 == PTR_DAT_1401ac008) { iVar2 = 0; } else { iVar2 = *(int *)(local_res10 + -8); } pbVar4 = PTR_DAT_1401ac008; if (iVar10 < iVar2) { LAB_14009c116: if (local_res10 != (byte *)0x0) { pbVar4 = local_res10; } } else { if (local_res10 != (byte *)0x0) { if (local_res10 == PTR_DAT_1401ac008) { iVar10 = 0; } else { iVar10 = *(int *)(local_res10 + -8); } goto LAB_14009c116; } iVar10 = 0; } FUN_14006cac0(piVar7 + 2,pbVar4,iVar10); FUN_140008440((longlong *)&local_res10); local_res10 = (byte *)(piVar7 + 2); LAB_14009c13a: FUN_140053e30((longlong *)&local_res10); pbVar4 = local_res10; if (local_res10 == (byte *)0x0) { pbVar4 = PTR_DAT_1401ac008; } FUN_14006cac0(pbVar4,&DAT_14013af48,iVar1); pbVar4 = local_res10; if (local_res10 == (byte *)0x0) { pbVar4 = PTR_DAT_1401ac008; } uVar3 = FUN_14006ca90((char *)pbVar4); puVar11 = PTR_DAT_1401ac008; uVar8 = 0; if (0 < (int)uVar3) { uVar8 = (ulonglong)uVar3; } if (local_res10 == (byte *)0x0) { pbVar4 = (byte *)0x0; } else if (local_res10 == PTR_DAT_1401ac008) { pbVar4 = (byte *)0x0; } else { pbVar4 = (byte *)(ulonglong)*(uint *)(local_res10 + -8); } if ((int)pbVar4 <= (int)uVar8) { if (local_res10 == (byte *)0x0) { uVar8 = 0; } else if (local_res10 == PTR_DAT_1401ac008) { uVar8 = 0; } else { uVar8 = (ulonglong)*(uint *)(local_res10 + -8); } } if (((local_res10 != PTR_DAT_1401ac008) && (local_res10 != (byte *)0x0)) && (pbVar4 = local_res10 + -8, pbVar4 != (byte *)0x0)) { *(int *)pbVar4 = (int)uVar8; pbVar4[(longlong)(int)uVar8 + 8] = 0; } FUN_14006cb70(uVar8,pbVar4,puVar11,param_4); local_res18 = PTR_DAT_1401ac008; FUN_1400bca00(local_50); FUN_1400bc4d0((longlong)local_50,pbVar4,(SIZE_T)puVar11,param_4); FUN_1400be190((longlong)local_50,(longlong *)&local_res10,puVar11,param_4); FUN_1400bc600((int *)local_50,0,puVar11,param_4); thunk_FUN_1400bd710(local_50,(LPCWSTR)&local_res18,puVar11,param_4); pbVar4 = local_res10; if (local_res10 == (byte *)0x0) { pbVar4 = PTR_DAT_1401ac008; } puVar11 = PTR_DAT_1401ac008; if (pbVar4 != local_res18) { pbVar4 = local_res18; if (local_res18 == (byte *)0x0) { pbVar4 = PTR_DAT_1401ac008; } pbVar9 = local_res10; if (local_res10 == (byte *)0x0) { pbVar9 = PTR_DAT_1401ac008; } iVar1 = FUN_14006caf0(pbVar9,(longlong)pbVar4); if (iVar1 != 0) { FUN_14006cb70(pbVar9,pbVar4,puVar11,param_4); local_res20 = (longlong *)PTR_DAT_1401ac010; uVar3 = FUN_14006c9f0(L"Proud.String serialization failed!"); puVar5 = FUN_140002f30((longlong *)&local_res20,uVar3); puVar11 = (undefined *)(ulonglong)uVar3; FUN_14006ca20(puVar5,L"Proud.String serialization failed!",uVar3); FUN_140003010((longlong *)&local_res20); FUN_14009b550(param_1,(wchar_t *)&local_res20,(SIZE_T)puVar11,param_4); } } local_res20 = &local_48; plVar6 = &local_48; FUN_1400d1800(plVar6); pbVar4 = local_res18; if (local_40 != 0) { if (local_34 < 0) { /* WARNING: Subroutine does not return */ FUN_14006be00(); } local_38 = 0; } if (((local_res18 != (byte *)0x0) && (local_res18 != PTR_DAT_1401ac008)) && (pbVar9 = local_res18 + -8, pbVar9 != (byte *)0x0)) { plVar6 = (longlong *)FUN_14006cb70(plVar6,PTR_DAT_1401ac008,puVar11,param_4); FUN_14006b350((int *)plVar6); pbVar4 = pbVar4 + -4; *(int *)pbVar4 = *(int *)pbVar4 + -1; if (*(int *)pbVar4 == 0) { FUN_14006cc60(pbVar9); } FUN_14006b3e0((longlong)plVar6); } pbVar4 = local_res10; if (((local_res10 != (byte *)0x0) && (local_res10 != PTR_DAT_1401ac008)) && (pbVar9 = local_res10 + -8, pbVar9 != (byte *)0x0)) { local_res18 = PTR_DAT_1401ac008; piVar7 = (int *)FUN_14006cb70(plVar6,PTR_DAT_1401ac008,puVar11,param_4); FUN_14006b350(piVar7); pbVar4 = pbVar4 + -4; *(int *)pbVar4 = *(int *)pbVar4 + -1; if (*(int *)pbVar4 == 0) { FUN_14006cc60(pbVar9); } FUN_14006b3e0((longlong)piVar7); } return; }