{"type": "func", "start": 354340, "end": 355112, "name": "sub_56824", "pseudocode": "// \n// sub_56824 from 0x56824 to 0x56b28 (772 bytes)\n// \n// 2 xrefs:\n// > sub_59214 @ 0x59228\n// > <???> @ 0x10c738\n// \n// This function is hookable on this platform!\n// \n// Using BromaIDA 8.0.0 @ https://github.com/Stazzical/BromaIDA\n// Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings\n// \n\n__int64 __fastcall sub_56824(__int64 a1, __int64 a2)\n{\n  __int64 v2; // x8\n  __int64 v4; // x21\n  unsigned int *v6; // x24\n  char v7; // w8\n  unsigned int v8; // w23\n  __int64 j; // x20\n  int v10; // w8\n  __int64 v11; // x0\n  int v12; // w20\n  int i; // w22\n  __int64 v14; // x8\n  unsigned int v15; // w8\n  _QWORD *v16; // x22\n  __int64 v17; // t1\n  _QWORD *v18; // x9\n  _QWORD *v19; // x9\n  __int64 v20; // x10\n  int v21; // w8\n  __int64 v22; // x21\n  __int64 v23; // x8\n  int v24; // w10\n  __int64 v25; // x9\n  __int64 v26; // x11\n  __int64 v28; // [xsp+8h] [xbp-58h] BYREF\n  int v29; // [xsp+10h] [xbp-50h]\n  char v30; // [xsp+14h] [xbp-4Ch]\n  __int128 v31; // [xsp+18h] [xbp-48h] BYREF\n  int v32; // [xsp+2Ch] [xbp-34h]\n\n  v2 = *(_QWORD *)(a1 + 96);\n  if ( !v2 )\n    return 9;\n  if ( v2 == *(_QWORD *)(a1 + 104) )\n    return 0;\n  v4 = *(_QWORD *)(a1 + 112);\n  if ( !a2 )\n  {\n    v11 = sub_579A8();\n    if ( (_DWORD)v11 )\n      return (unsigned int)v11;\n    v12 = 0;\n    for ( i = 0; i < SDWORD2(v31); ++i )\n    {\n      v11 = sub_57924();\n      if ( (_DWORD)v11 )\n        return (unsigned int)v11;\n      if ( v28 == v4 )\n        ++v12;\n      else\n        v11 = (*(__int64 (__fastcall **)(__int64))(*(_QWORD *)a1 + 280LL))(a1);\n    }\nLABEL_52:\n    LODWORD(v11) = ((__int64 (__fastcall *)(__int64))loc_57870)(v11);\n    return (unsigned int)v11;\n  }\n  v31 = 0u;\n  v6 = (unsigned int *)(a2 + 100);\n  v7 = atomic_load((unsigned int *)(a2 + 100));\n  if ( (v7 & 0x20) != 0 )\n    return 10;\n  v8 = sub_579A8();\n  if ( !v8 )\n  {\n    for ( j = 0; ; ++j )\n    {\n      v10 = v32;\n      if ( (int)j >= v32 )\n        break;\n      v28 = 0;\n      LODWORD(v11) = sub_57924();\n      if ( (_DWORD)v11 )\n        return (unsigned int)v11;\n      if ( v28 == a2 )\n      {\n        v10 = v32;\n        break;\n      }\n    }\n    if ( (int)j < v10 )\n    {\n      if ( (_DWORD)j )\n      {\n        if ( (_DWORD)j - v10 == -1 )\n          (*(void (__fastcall **)(__int64, _QWORD, __int128 *))(*(_QWORD *)a1 + 288LL))(\n            a1,\n            (unsigned int)(v10 - 2),\n            &v31);\n      }\n      else\n      {\n        sub_5793C(a1, 1, (char *)&v31 + 8);\n      }\n      v14 = *(_QWORD *)(a1 + 8);\n      v30 = 0;\n      v28 = v14;\n      v29 = 1;\n      sub_520A0((__int64)&v28);\n      do\n        v15 = __ldaxr(v6);\n      while ( __stlxr(v15 & 0xFFFFFFBF, v6) );\n      *(_QWORD *)(a2 + 512) = 0;\n      v8 = sub_C7D1C(a2, 0, 0);\n      if ( v8\n        || (v8 = sub_CBBD4(a2, a2, 0)) != 0\n        || *((_QWORD *)&v31 + 1) && (v8 = sub_579A0(v4, *((_QWORD *)&v31 + 1) + 8LL)) != 0 )\n      {\n        sub_51F94((__int64)&v28);\n      }\n      else\n      {\n        v11 = sub_51F94((__int64)&v28);\n        v17 = *(_QWORD *)(a2 + 144);\n        v16 = (_QWORD *)(a2 + 144);\n        v18 = (_QWORD *)v16[1];\n        *v18 = v17;\n        *(_QWORD *)(*v16 + 8LL) = v18;\n        v19 = (_QWORD *)(a1 + 272);\n        *v16 = v16;\n        v16[1] = v16;\n        while ( 1 )\n        {\n          v19 = (_QWORD *)*v19;\n          if ( v19 == (_QWORD *)(a1 + 272) )\n            break;\n          v20 = v19[2];\n          if ( (int)j < (int)v20 >> 16 )\n            v19[2] = v20 & 0xFFFFFFFF0000FFFFLL | ((unsigned __int64)((unsigned int)(v20 - 0x10000) >> 16) << 16);\n        }\n        v21 = *(_DWORD *)(a1 + 24);\n        if ( v21 < 3 )\n        {\n          v22 = 0;\n        }\n        else\n        {\n          v11 = ((__int64 (__fastcall *)(__int64, _QWORD, __int64))loc_57858)(\n                  *(_QWORD *)(a1 + 8) + 67656LL,\n                  (unsigned int)(8 * v21 - 8),\n                  184320);\n          if ( !v11 )\n            return 38;\n          v22 = v11;\n          v23 = 0;\n          v24 = 0;\n          v25 = *(int *)(a1 + 24) - 1LL;\n          while ( v23 < v25 )\n          {\n            if ( !j )\n              ++v24;\n            --j;\n            v26 = *(_QWORD *)(*(_QWORD *)(a1 + 16) + 8LL * v24++);\n            *(_QWORD *)(v11 + 8 * v23++) = v26;\n          }\n        }\n        if ( *(_QWORD *)(a1 + 16) )\n          v11 = ((__int64 (__fastcall *)(__int64))loc_577E4)(v11);\n        *(_QWORD *)(a1 + 16) = v22;\n        if ( v31 == 0 || (v11 = sub_5794C(v11), (v8 = v11) == 0) )\n        {\n          --*(_DWORD *)(a1 + 24);\n          goto LABEL_52;\n        }\n      }\n      return v8;\n    }\n    return 9;\n  }\n  return v8;\n}", "assembly": "; \n; sub_56824 from 0x56824 to 0x56b28 (772 bytes)\n; \n; 2 xrefs:\n; > sub_59214 @ 0x59228\n; > <???> @ 0x10c738\n; \n; This function is hookable on this platform!\n; \n; Using BromaIDA 8.0.0 @ https:;github.com/Stazzical/BromaIDA\n; Using bindings at commit ba9f177b at Thu Jul 16 22:52:06 2026 from https:;github.com/geode-sdk/bindings\n; \n\nSUB             SP, SP, #0x70                                          ; +0x0, 0x56824\nSTP             X24, X23, [SP,#0x60+var_30]                            ; +0x4, 0x56828\nSTP             X22, X21, [SP,#0x60+var_20]                            ; +0x8, 0x5682c\nSTP             X20, X19, [SP,#0x60+var_10]                            ; +0xc, 0x56830\nSTP             X29, X30, [SP,#0x60+var_s0]                            ; +0x10, 0x56834\nLDR             X8, [X0,#0x60]                                         ; +0x14, 0x56838\nADD             X29, SP, #0x60                                         ; +0x18, 0x5683c\nCBZ             X8, loc_56954                                          ; +0x1c, 0x56840\nLDR             X9, [X0,#0x68]                                         ; +0x20, 0x56844\nMOV             X19, X0                                                ; +0x24, 0x56848\nCMP             X8, X9                                                 ; +0x28, 0x5684c\nB.EQ            loc_568B4                                              ; +0x2c, 0x56850\nLDR             X21, [X19,#0x70]                                       ; +0x30, 0x56854\nMOV             X22, X1                                                ; +0x34, 0x56858\nCBZ             X1, loc_568BC                                          ; +0x38, 0x5685c\nSTP             XZR, XZR, [SP,#0x60+var_48]                            ; +0x3c, 0x56860\nADD             X24, X22, #0x64 ; 'd'                                  ; +0x40, 0x56864\nLDAR            W8, [X24]                                              ; +0x44, 0x56868\nTBNZ            W8, #5, loc_56914                                      ; +0x48, 0x5686c\nLDR             X8, [X19]                                              ; +0x4c, 0x56870\nADD             X1, SP, #0x60+var_34                                   ; +0x50, 0x56874\nBL              sub_579A8                                              ; +0x54, 0x56878\nMOV             W23, W0                                                ; +0x58, 0x5687c\nCBNZ            W0, loc_56B04                                          ; +0x5c, 0x56880\nMOV             X20, XZR                                               ; +0x60, 0x56884\nLDR             W8, [SP,#0x60+var_34]                                  ; +0x64, 0x56888\nCMP             W20, W8                                                ; +0x68, 0x5688c\nB.GE            loc_56920                                              ; +0x6c, 0x56890\nSTR             XZR, [SP,#0x60+var_58]                                 ; +0x70, 0x56894\nBL              sub_57924                                              ; +0x74, 0x56898\nCBNZ            W0, loc_56B00                                          ; +0x78, 0x5689c\nLDR             X8, [SP,#0x60+var_58]                                  ; +0x7c, 0x568a0\nCMP             X8, X22                                                ; +0x80, 0x568a4\nB.EQ            loc_5691C                                              ; +0x84, 0x568a8\nADD             X20, X20, #1                                           ; +0x88, 0x568ac\nB               loc_56888                                              ; +0x8c, 0x568b0\nMOV             W23, WZR                                               ; +0x90, 0x568b4\nB               loc_56B04                                              ; +0x94, 0x568b8\nLDR             X8, [X19]                                              ; +0x98, 0x568bc\nADD             X1, SP, #0x60+var_48+8                                 ; +0x9c, 0x568c0\nBL              sub_579A8                                              ; +0xa0, 0x568c4\nCBNZ            W0, loc_56B00                                          ; +0xa4, 0x568c8\nMOV             W20, WZR                                               ; +0xa8, 0x568cc\nMOV             W22, WZR                                               ; +0xac, 0x568d0\nLDR             W8, [SP,#0x60+var_48+8]                                ; +0xb0, 0x568d4\nCMP             W22, W8                                                ; +0xb4, 0x568d8\nB.GE            loc_56AFC                                              ; +0xb8, 0x568dc\nBL              sub_57924                                              ; +0xbc, 0x568e0\nCBNZ            W0, loc_56B00                                          ; +0xc0, 0x568e4\nLDR             X1, [SP,#0x60+var_58]                                  ; +0xc4, 0x568e8\nCMP             X1, X21                                                ; +0xc8, 0x568ec\nB.EQ            loc_56908                                              ; +0xcc, 0x568f0\nLDR             X8, [X19]                                              ; +0xd0, 0x568f4\nMOV             X0, X19                                                ; +0xd4, 0x568f8\nLDR             X8, [X8,#0x118]                                        ; +0xd8, 0x568fc\nBLR             X8                                                     ; +0xdc, 0x56900\nB               loc_5690C                                              ; +0xe0, 0x56904\nADD             W20, W20, #1                                           ; +0xe4, 0x56908\nADD             W22, W22, #1                                           ; +0xe8, 0x5690c\nB               loc_568D4                                              ; +0xec, 0x56910\nMOV             W23, #0xA                                              ; +0xf0, 0x56914\nB               loc_56B04                                              ; +0xf4, 0x56918\nLDR             W8, [SP,#0x60+var_34]                                  ; +0xf8, 0x5691c\nCMP             W20, W8                                                ; +0xfc, 0x56920\nB.GE            loc_56954                                              ; +0x100, 0x56924\nCBZ             W20, loc_5695C                                         ; +0x104, 0x56928\nSUB             W9, W20, W8                                            ; +0x108, 0x5692c\nCMN             W9, #1                                                 ; +0x10c, 0x56930\nB.NE            loc_56970                                              ; +0x110, 0x56934\nLDR             X9, [X19]                                              ; +0x114, 0x56938\nSUB             W1, W8, #2                                             ; +0x118, 0x5693c\nADD             X2, SP, #0x60+var_48                                   ; +0x11c, 0x56940\nMOV             X0, X19                                                ; +0x120, 0x56944\nLDR             X9, [X9,#0x120]                                        ; +0x124, 0x56948\nBLR             X9                                                     ; +0x128, 0x5694c\nB               loc_56970                                              ; +0x12c, 0x56950\nMOV             W23, #9                                                ; +0x130, 0x56954\nB               loc_56B04                                              ; +0x134, 0x56958\nLDR             X8, [X19]                                              ; +0x138, 0x5695c\nADD             X2, SP, #0x60+var_48+8                                 ; +0x13c, 0x56960\nMOV             W1, #1                                                 ; +0x140, 0x56964\nMOV             X0, X19                                                ; +0x144, 0x56968\nBL              sub_5793C                                              ; +0x148, 0x5696c\nLDR             X8, [X19,#8]                                           ; +0x14c, 0x56970\nMOV             W9, #1                                                 ; +0x150, 0x56974\nADD             X0, SP, #0x60+var_58                                   ; +0x154, 0x56978\nSTRB            WZR, [SP,#0x60+var_4C]                                 ; +0x158, 0x5697c\nSTR             X8, [SP,#0x60+var_58]                                  ; +0x15c, 0x56980\nSTR             W9, [SP,#0x60+var_50]                                  ; +0x160, 0x56984\nBL              sub_520A0                                              ; +0x164, 0x56988\nLDAXR           W8, [X24]                                              ; +0x168, 0x5698c\nAND             W8, W8, #0xFFFFFFBF                                    ; +0x16c, 0x56990\nSTLXR           W9, W8, [X24]                                          ; +0x170, 0x56994\nCBNZ            W9, loc_5698C                                          ; +0x174, 0x56998\nMOV             X0, X22                                                ; +0x178, 0x5699c\nMOV             W1, WZR                                                ; +0x17c, 0x569a0\nMOV             W2, WZR                                                ; +0x180, 0x569a4\nSTR             XZR, [X22,#0x200]                                      ; +0x184, 0x569a8\nBL              sub_C7D1C                                              ; +0x188, 0x569ac\nMOV             W23, W0                                                ; +0x18c, 0x569b0\nCBNZ            W0, loc_569D0                                          ; +0x190, 0x569b4\nMOV             X0, X22                                                ; +0x194, 0x569b8\nMOV             X1, X22                                                ; +0x198, 0x569bc\nMOV             W2, WZR                                                ; +0x19c, 0x569c0\nBL              sub_CBBD4                                              ; +0x1a0, 0x569c4\nMOV             W23, W0                                                ; +0x1a4, 0x569c8\nCBZ             W0, loc_569DC                                          ; +0x1a8, 0x569cc\nADD             X0, SP, #0x60+var_58                                   ; +0x1ac, 0x569d0\nBL              sub_51F94                                              ; +0x1b0, 0x569d4\nB               loc_56B04                                              ; +0x1b4, 0x569d8\nLDR             X8, [SP,#0x60+var_48+8]                                ; +0x1b8, 0x569dc\nCBZ             X8, loc_569F8                                          ; +0x1bc, 0x569e0\nADD             X1, X8, #8                                             ; +0x1c0, 0x569e4\nMOV             X0, X21                                                ; +0x1c4, 0x569e8\nBL              sub_579A0                                              ; +0x1c8, 0x569ec\nMOV             W23, W0                                                ; +0x1cc, 0x569f0\nCBNZ            W0, loc_569D0                                          ; +0x1d0, 0x569f4\nADD             X0, SP, #0x60+var_58                                   ; +0x1d4, 0x569f8\nBL              sub_51F94                                              ; +0x1d8, 0x569fc\nLDR             X8, [X22,#0x90]!                                       ; +0x1dc, 0x56a00\nLDR             X9, [X22,#8]                                           ; +0x1e0, 0x56a04\nSTR             X8, [X9]                                               ; +0x1e4, 0x56a08\nLDR             X10, [X22]                                             ; +0x1e8, 0x56a0c\nADD             X8, X19, #0x110                                        ; +0x1ec, 0x56a10\nSTR             X9, [X10,#8]                                           ; +0x1f0, 0x56a14\nMOV             X9, X8                                                 ; +0x1f4, 0x56a18\nSTP             X22, X22, [X22]                                        ; +0x1f8, 0x56a1c\nLDR             X9, [X9]                                               ; +0x1fc, 0x56a20\nCMP             X9, X8                                                 ; +0x200, 0x56a24\nB.EQ            loc_56A4C                                              ; +0x204, 0x56a28\nLDR             X10, [X9,#0x10]                                        ; +0x208, 0x56a2c\nCMP             W20, W10,ASR#16                                        ; +0x20c, 0x56a30\nB.GE            loc_56A20                                              ; +0x210, 0x56a34\nSUB             W11, W10, #0x10,LSL#12                                 ; +0x214, 0x56a38\nLSR             X11, X11, #0x10                                        ; +0x218, 0x56a3c\nBFI             X10, X11, #0x10, #0x10                                 ; +0x21c, 0x56a40\nSTR             X10, [X9,#0x10]                                        ; +0x220, 0x56a44\nB               loc_56A20                                              ; +0x224, 0x56a48\nLDR             W8, [X19,#0x18]                                        ; +0x228, 0x56a4c\nCMP             W8, #3                                                 ; +0x22c, 0x56a50\nB.LT            loc_56ABC                                              ; +0x230, 0x56a54\nLDR             X9, [X19,#8]                                           ; +0x234, 0x56a58\nMOV             W10, #0x10848                                          ; +0x238, 0x56a5c\nLSL             W8, W8, #3                                             ; +0x240, 0x56a64\nADRP            X2, #0x2D000                                           ; +0x244, 0x56a68\nADD             X0, X9, X10                                            ; +0x248, 0x56a6c\nSUB             W1, W8, #8                                             ; +0x24c, 0x56a70\nBL              loc_57858                                              ; +0x250, 0x56a74\nCBZ             X0, loc_56B20                                          ; +0x254, 0x56a78\nLDRSW           X9, [X19,#0x18]                                        ; +0x258, 0x56a7c\nMOV             X21, X0                                                ; +0x25c, 0x56a80\nMOV             X8, XZR                                                ; +0x260, 0x56a84\nMOV             W10, WZR                                               ; +0x264, 0x56a88\nSUB             X9, X9, #1                                             ; +0x268, 0x56a8c\nCMP             X8, X9                                                 ; +0x26c, 0x56a90\nB.GE            loc_56AC0                                              ; +0x270, 0x56a94\nLDR             X11, [X19,#0x10]                                       ; +0x274, 0x56a98\nCMP             X20, #0                                                ; +0x278, 0x56a9c\nCINC            W10, W10, EQ                                           ; +0x27c, 0x56aa0\nSUB             X20, X20, #1                                           ; +0x280, 0x56aa4\nLDR             X11, [X11,W10,SXTW#3]                                  ; +0x284, 0x56aa8\nADD             W10, W10, #1                                           ; +0x288, 0x56aac\nSTR             X11, [X21,X8,LSL#3]                                    ; +0x28c, 0x56ab0\nADD             X8, X8, #1                                             ; +0x290, 0x56ab4\nB               loc_56A90                                              ; +0x294, 0x56ab8\nMOV             X21, XZR                                               ; +0x298, 0x56abc\nLDR             X1, [X19,#0x10]                                        ; +0x29c, 0x56ac0\nCBZ             X1, loc_56AD4                                          ; +0x2a0, 0x56ac4\nLDR             X8, [X19,#8]                                           ; +0x2a4, 0x56ac8\nMOV             W9, #0x848                                             ; +0x2a8, 0x56acc\nBL              loc_577E4                                              ; +0x2ac, 0x56ad0\nSTR             X21, [X19,#0x10]                                       ; +0x2b0, 0x56ad4\nLDP             X2, X1, [SP,#0x60+var_48]                              ; +0x2b4, 0x56ad8\nORR             X8, X1, X2                                             ; +0x2b8, 0x56adc\nCBZ             X8, loc_56AF0                                          ; +0x2bc, 0x56ae0\nBL              sub_5794C                                              ; +0x2c0, 0x56ae4\nMOV             W23, W0                                                ; +0x2c4, 0x56ae8\nCBNZ            W0, loc_56B04                                          ; +0x2c8, 0x56aec\nLDR             W8, [X19,#0x18]                                        ; +0x2cc, 0x56af0\nSUB             W8, W8, #1                                             ; +0x2d0, 0x56af4\nSTR             W8, [X19,#0x18]                                        ; +0x2d4, 0x56af8\nBL              loc_57870                                              ; +0x2d8, 0x56afc\nMOV             W23, W0                                                ; +0x2dc, 0x56b00\nMOV             W0, W23                                                ; +0x2e0, 0x56b04\nLDP             X29, X30, [SP,#0x60+var_s0]                            ; +0x2e4, 0x56b08\nLDP             X20, X19, [SP,#0x60+var_10]                            ; +0x2e8, 0x56b0c\nLDP             X22, X21, [SP,#0x60+var_20]                            ; +0x2ec, 0x56b10\nLDP             X24, X23, [SP,#0x60+var_30]                            ; +0x2f0, 0x56b14\nADD             SP, SP, #0x70 ; 'p'                                    ; +0x2f4, 0x56b18\nRET                                                                    ; +0x2f8, 0x56b1c\nMOV             W23, #0x26 ; '&'                                       ; +0x2fc, 0x56b20\nB               loc_56B04                                              ; +0x300, 0x56b24", "xrefs": ["sub_59214 @ 0x59228", "<???> @ 0x10c738"], "is_objc": false, "is_arm32": false, "is_arm64": false, "bida_info": "8.0.0 @ https://github.com/Stazzical/BromaIDA", "bindings_info": "commit ba9f177b at Thu Jul 16 22:52:06 2026 from https://github.com/geode-sdk/bindings"}