
char * mbschr(char *string,wchar_t c)

{
  mbstate_t_conflict *ps;
  char cVar1;
  long lVar2;
  _Bool _Var3;
  int iVar4;
  size_t sVar5;
  char *pcVar6;
  size_t n;
  ulong uVar7;
  long in_FS_OFFSET;
  byte bVar8;
  mbui_iterator_t iter;
  
  bVar8 = 0;
  lVar2 = *(long *)(in_FS_OFFSET + 0x28);
  sVar5 = __ctype_get_mb_cur_max();
  if ((sVar5 < 2) || ((byte)c < 0x30)) {
    pcVar6 = strchr(string,c);
LAB_00104691:
    if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {
      return pcVar6;
    }
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  iter.in_shift = false;
  iter.state.__count = L'\0';
  iter.state.__value = (anon_union_4_2_91654ee9_for___value)0x0;
  ps = &iter.state;
  iter.cur.ptr = string;
  do {
    iter.next_done = false;
    if (iter.in_shift == false) {
      if ((*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>
           (*iter.cur.ptr & 0x1fU) & 1) == 0) {
        iVar4 = mbsinit((mbstate_t *)ps);
        if (iVar4 == 0) {
                    /* WARNING: Subroutine does not return */
          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");
        }
        iter.in_shift = true;
        goto LAB_001046f1;
      }
      iter.cur.bytes = 1;
      iter.cur.wc = (wchar_t)*iter.cur.ptr;
      iter.cur.wc_valid = true;
    }
    else {
LAB_001046f1:
      sVar5 = __ctype_get_mb_cur_max();
      pcVar6 = iter.cur.ptr;
      n = strnlen1(iter.cur.ptr,sVar5);
      iter.cur.bytes = rpl_mbrtowc(&iter.cur.wc,pcVar6,n,ps);
      if (iter.cur.bytes == 0xffffffffffffffff) {
        iter.cur.bytes = 1;
        iter.cur.wc_valid = false;
      }
      else if (iter.cur.bytes == 0xfffffffffffffffe) {
        uVar7 = 0xffffffffffffffff;
        pcVar6 = iter.cur.ptr;
        do {
          if (uVar7 == 0) break;
          uVar7 = uVar7 - 1;
          cVar1 = *pcVar6;
          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;
        } while (cVar1 != '\0');
        iter.cur.bytes = ~uVar7 - 1;
        iter.cur.wc_valid = false;
      }
      else {
        if (iter.cur.bytes == 0) {
          iter.cur.bytes = 1;
          if (*iter.cur.ptr != '\0') {
                    /* WARNING: Subroutine does not return */
            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");
          }
          if (iter.cur.wc != L'\0') {
                    /* WARNING: Subroutine does not return */
            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");
          }
        }
        iter.cur.wc_valid = true;
        iVar4 = mbsinit((mbstate_t *)ps);
        if (iVar4 != 0) {
          iter.in_shift = false;
        }
      }
    }
    iter.next_done = true;
    _Var3 = iter.next_done;
    iter.next_done = true;
    if ((iter.cur.wc_valid != false) && (iter.cur.wc == L'\0')) {
      pcVar6 = (char *)0x0;
      goto LAB_00104691;
    }
    if ((iter.cur.bytes == 1) &&
       (pcVar6 = iter.cur.ptr, iter.next_done = _Var3, *iter.cur.ptr == (byte)c)) goto LAB_00104691;
    iter.cur.ptr = iter.cur.ptr + iter.cur.bytes;
  } while( true );
}



byte * FUN_00104655(byte *param_1,int param_2)

{
  byte bVar1;
  bool bVar2;
  undefined1 uVar3;
  int iVar4;
  size_t sVar5;
  byte *pbVar6;
  undefined8 uVar7;
  ulong uVar8;
  long in_FS_OFFSET;
  byte bVar9;
  mbstate_t local_74;
  undefined1 local_6c;
  byte *local_68;
  long local_60;
  char local_58;
  int local_54 [9];
  long local_30;
  
  bVar9 = 0;
  local_30 = *(long *)(in_FS_OFFSET + 0x28);
  sVar5 = __ctype_get_mb_cur_max();
  if ((sVar5 < 2) || ((byte)param_2 < 0x30)) {
    pbVar6 = (byte *)strchr((char *)param_1,param_2);
LAB_00104691:
    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {
      return pbVar6;
    }
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  bVar2 = false;
  local_74.__count = 0;
  local_74.__value = (_union_27)0x0;
  local_68 = param_1;
  do {
    local_6c = 0;
    if (bVar2) {
LAB_001046f1:
      sVar5 = __ctype_get_mb_cur_max();
      pbVar6 = local_68;
      uVar7 = FUN_001065ef(local_68,sVar5);
      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);
      if (local_60 == -1) {
        local_60 = 1;
        local_58 = '\0';
      }
      else if (local_60 == -2) {
        uVar8 = 0xffffffffffffffff;
        pbVar6 = local_68;
        do {
          if (uVar8 == 0) break;
          uVar8 = uVar8 - 1;
          bVar1 = *pbVar6;
          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;
        } while (bVar1 != 0);
        local_60 = ~uVar8 - 1;
        local_58 = '\0';
      }
      else {
        if (local_60 == 0) {
          local_60 = 1;
          if (*local_68 != 0) {
                    /* WARNING: Subroutine does not return */
            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");
          }
          if (local_54[0] != 0) {
                    /* WARNING: Subroutine does not return */
            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");
          }
        }
        local_58 = '\x01';
        iVar4 = mbsinit(&local_74);
        if (iVar4 != 0) {
          bVar2 = false;
        }
      }
    }
    else {
      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {
        iVar4 = mbsinit(&local_74);
        if (iVar4 == 0) {
                    /* WARNING: Subroutine does not return */
          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");
        }
        bVar2 = true;
        goto LAB_001046f1;
      }
      local_60 = 1;
      local_54[0] = (int)(char)*local_68;
      local_58 = '\x01';
    }
    local_6c = 1;
    uVar3 = local_6c;
    local_6c = 1;
    if ((local_58 != '\0') && (local_54[0] == 0)) {
      pbVar6 = (byte *)0x0;
      goto LAB_00104691;
    }
    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))
    goto LAB_00104691;
    local_68 = local_68 + local_60;
  } while( true );
}


PUSH R14
PUSH R13
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x50
MOV RBX,RDI
MOV EBP,ESI
MOV RAX,qword ptr FS:[0x28]
MOV qword ptr [RSP + 0x48],RAX
XOR EAX,EAX
CALL 0x00102110
CMP RAX,0x1
JBE 0x00104687
CMP BPL,0x2f
JA 0x001046b2
MOV ESI,EBP
MOV RDI,RBX
CALL 0x00102160
MOV RBX,qword ptr [RSP + 0x48]
XOR RBX,qword ptr FS:[0x28]
JNZ 0x00104896
ADD RSP,0x50
POP RBX
POP RBP
POP R12
POP R13
POP R14
RET
MOV qword ptr [RSP + 0x10],RBX
MOV byte ptr [RSP],0x0
MOV qword ptr [RSP + 0x4],0x0
MOV byte ptr [RSP + 0xc],0x0
MOV R12,RSP
LEA RBX,[R12 + 0x4]
ADD R12,0x24
MOV R13,-0x1
JMP 0x001047c7
MOV RDI,RBX
CALL 0x00102390
TEST EAX,EAX
JZ 0x0010476a
MOV byte ptr [RSP],0x1
CALL 0x00102110
MOV R14,qword ptr [RSP + 0x10]
MOV RSI,RAX
MOV RDI,R14
CALL 0x001065ef
MOV RCX,RBX
MOV RDX,RAX
MOV RSI,R14
MOV RDI,R12
CALL 0x0010717f
MOV qword ptr [RSP + 0x18],RAX
CMP RAX,-0x1
JZ 0x00104789
CMP RAX,-0x2
JZ 0x00104813
TEST RAX,RAX
JNZ 0x00104753
MOV qword ptr [RSP + 0x18],0x1
MOV RAX,qword ptr [RSP + 0x10]
CMP byte ptr [RAX],0x0
JNZ 0x0010483b
CMP dword ptr [RSP + 0x24],0x0
JNZ 0x0010485a
MOV byte ptr [RSP + 0x20],0x1
MOV RDI,RBX
CALL 0x00102390
TEST EAX,EAX
JZ 0x00104797
MOV byte ptr [RSP],0x0
JMP 0x00104797
LEA RCX,[0x108be0]
MOV EDX,0x96
LEA RSI,[0x108093]
LEA RDI,[0x1080a1]
CALL 0x001021b0
MOV qword ptr [RSP + 0x18],0x1
MOV byte ptr [RSP + 0x20],0x0
MOV byte ptr [RSP + 0xc],0x1
CMP byte ptr [RSP + 0x20],0x0
JZ 0x001047ae
CMP dword ptr [RSP + 0x24],0x0
JZ 0x0010488c
MOV RDX,qword ptr [RSP + 0x18]
CMP RDX,0x1
JZ 0x00104879
ADD qword ptr [RSP + 0x10],RDX
MOV byte ptr [RSP + 0xc],0x0
CMP byte ptr [RSP + 0xc],0x0
JNZ 0x0010479c
CMP byte ptr [RSP],0x0
JNZ 0x001046f1
MOV RDX,qword ptr [RSP + 0x10]
MOVZX ECX,byte ptr [RDX]
MOV EAX,ECX
SHR AL,0x5
AND EAX,0x7
LEA RSI,[0x108bc0]
MOV EAX,dword ptr [RSI + RAX*0x4]
SHR EAX,CL
TEST AL,0x1
JZ 0x001046e1
MOV qword ptr [RSP + 0x18],0x1
MOVSX EAX,byte ptr [RDX]
MOV dword ptr [RSP + 0x24],EAX
MOV byte ptr [RSP + 0x20],0x1
JMP 0x00104797
MOV RDI,qword ptr [RSP + 0x10]
MOV EAX,0x0
MOV RCX,R13
SCASB.REPNE RDI
MOV RAX,RCX
NOT RAX
SUB RAX,0x1
MOV qword ptr [RSP + 0x18],RAX
MOV byte ptr [RSP + 0x20],0x0
JMP 0x00104797
LEA RCX,[0x108be0]
MOV EDX,0xb2
LEA RSI,[0x108093]
LEA RDI,[0x1080b8]
CALL 0x001021b0
LEA RCX,[0x108be0]
MOV EDX,0xb3
LEA RSI,[0x108093]
LEA RDI,[0x1080cf]
CALL 0x001021b0
MOV RAX,qword ptr [RSP + 0x10]
CMP byte ptr [RAX],BPL
JNZ 0x001047bd
JMP 0x00104691
MOV EAX,0x0
JMP 0x00104691
CALL 0x00102130
(translation_unit "byte * FUN_00104655(byte *param_1,int param_2)\n\n{\n  byte bVar1;\n  bool bVar2;\n  undefined1 uVar3;\n  int iVar4;\n  size_t sVar5;\n  byte *pbVar6;\n  undefined8 uVar7;\n  ulong uVar8;\n  long in_FS_OFFSET;\n  byte bVar9;\n  mbstate_t local_74;\n  undefined1 local_6c;\n  byte *local_68;\n  long local_60;\n  char local_58;\n  int local_54 [9];\n  long local_30;\n  \n  bVar9 = 0;\n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  sVar5 = __ctype_get_mb_cur_max();\n  if ((sVar5 < 2) || ((byte)param_2 < 0x30)) {\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  bVar2 = false;\n  local_74.__count = 0;\n  local_74.__value = (_union_27)0x0;\n  local_68 = param_1;\n  do {\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  } while( true );\n}\n\n" (function_definition "byte * FUN_00104655(byte *param_1,int param_2)\n\n{\n  byte bVar1;\n  bool bVar2;\n  undefined1 uVar3;\n  int iVar4;\n  size_t sVar5;\n  byte *pbVar6;\n  undefined8 uVar7;\n  ulong uVar8;\n  long in_FS_OFFSET;\n  byte bVar9;\n  mbstate_t local_74;\n  undefined1 local_6c;\n  byte *local_68;\n  long local_60;\n  char local_58;\n  int local_54 [9];\n  long local_30;\n  \n  bVar9 = 0;\n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  sVar5 = __ctype_get_mb_cur_max();\n  if ((sVar5 < 2) || ((byte)param_2 < 0x30)) {\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  bVar2 = false;\n  local_74.__count = 0;\n  local_74.__value = (_union_27)0x0;\n  local_68 = param_1;\n  do {\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  } while( true );\n}" type_identifier (pointer_declarator "* FUN_00104655(byte *param_1,int param_2)" * (function_declarator "FUN_00104655(byte *param_1,int param_2)" identifier (parameter_list "(byte *param_1,int param_2)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) )))) (compound_statement "{\n  byte bVar1;\n  bool bVar2;\n  undefined1 uVar3;\n  int iVar4;\n  size_t sVar5;\n  byte *pbVar6;\n  undefined8 uVar7;\n  ulong uVar8;\n  long in_FS_OFFSET;\n  byte bVar9;\n  mbstate_t local_74;\n  undefined1 local_6c;\n  byte *local_68;\n  long local_60;\n  char local_58;\n  int local_54 [9];\n  long local_30;\n  \n  bVar9 = 0;\n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  sVar5 = __ctype_get_mb_cur_max();\n  if ((sVar5 < 2) || ((byte)param_2 < 0x30)) {\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  bVar2 = false;\n  local_74.__count = 0;\n  local_74.__value = (_union_27)0x0;\n  local_68 = param_1;\n  do {\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  } while( true );\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "undefined1 uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "size_t sVar5;" primitive_type identifier ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "undefined8 uVar7;" type_identifier identifier ;) (declaration "ulong uVar8;" type_identifier identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "byte bVar9;" type_identifier identifier ;) (declaration "mbstate_t local_74;" type_identifier identifier ;) (declaration "undefined1 local_6c;" type_identifier identifier ;) (declaration "byte *local_68;" type_identifier (pointer_declarator "*local_68" * identifier) ;) (declaration "long local_60;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_58;" primitive_type identifier ;) (declaration "int local_54 [9];" primitive_type (array_declarator "local_54 [9]" identifier [ number_literal ]) ;) (declaration "long local_30;" (sized_type_specifier "long" long) identifier ;) (expression_statement "bVar9 = 0;" (assignment_expression "bVar9 = 0" identifier = number_literal) ;) (expression_statement "local_30 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_30 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "sVar5 = __ctype_get_mb_cur_max();" (assignment_expression "sVar5 = __ctype_get_mb_cur_max()" identifier = (call_expression "__ctype_get_mb_cur_max()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((sVar5 < 2) || ((byte)param_2 < 0x30)) {\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" if (parenthesized_expression "((sVar5 < 2) || ((byte)param_2 < 0x30))" ( (binary_expression "(sVar5 < 2) || ((byte)param_2 < 0x30)" (parenthesized_expression "(sVar5 < 2)" ( (binary_expression "sVar5 < 2" identifier < number_literal) )) || (parenthesized_expression "((byte)param_2 < 0x30)" ( (binary_expression "(byte)param_2 < 0x30" (cast_expression "(byte)param_2" ( (type_descriptor "byte" type_identifier) ) identifier) < number_literal) ))) )) (compound_statement "{\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" { (expression_statement "pbVar6 = (byte *)strchr((char *)param_1,param_2);" (assignment_expression "pbVar6 = (byte *)strchr((char *)param_1,param_2)" identifier = (cast_expression "(byte *)strchr((char *)param_1,param_2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "strchr((char *)param_1,param_2)" identifier (argument_list "((char *)param_1,param_2)" ( (cast_expression "(char *)param_1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))))) ;) (labeled_statement "LAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }" statement_identifier : (if_statement "if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }" if (parenthesized_expression "(local_30 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_30 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n      return pbVar6;\n    }" { (return_statement "return pbVar6;" return identifier ;) }))) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "local_74.__count = 0;" (assignment_expression "local_74.__count = 0" (field_expression "local_74.__count" identifier . field_identifier) = number_literal) ;) (expression_statement "local_74.__value = (_union_27)0x0;" (assignment_expression "local_74.__value = (_union_27)0x0" (field_expression "local_74.__value" identifier . field_identifier) = (cast_expression "(_union_27)0x0" ( (type_descriptor "_union_27" type_identifier) ) number_literal)) ;) (expression_statement "local_68 = param_1;" (assignment_expression "local_68 = param_1" identifier = identifier) ;) (do_statement "do {\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  } while( true );" do (compound_statement "{\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  }" { (expression_statement "local_6c = 0;" (assignment_expression "local_6c = 0" identifier = number_literal) ;) (if_statement "if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }" if (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }" { (labeled_statement "LAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();" statement_identifier : (expression_statement "sVar5 = __ctype_get_mb_cur_max();" (assignment_expression "sVar5 = __ctype_get_mb_cur_max()" identifier = (call_expression "__ctype_get_mb_cur_max()" identifier (argument_list "()" ( )))) ;)) (expression_statement "pbVar6 = local_68;" (assignment_expression "pbVar6 = local_68" identifier = identifier) ;) (expression_statement "uVar7 = FUN_001065ef(local_68,sVar5);" (assignment_expression "uVar7 = FUN_001065ef(local_68,sVar5)" identifier = (call_expression "FUN_001065ef(local_68,sVar5)" identifier (argument_list "(local_68,sVar5)" ( identifier , identifier )))) ;) (expression_statement "local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);" (assignment_expression "local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74)" identifier = (call_expression "FUN_0010717f(local_54,pbVar6,uVar7,&local_74)" identifier (argument_list "(local_54,pbVar6,uVar7,&local_74)" ( identifier , identifier , identifier , (pointer_expression "&local_74" & identifier) )))) ;) (if_statement "if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" if (parenthesized_expression "(local_60 == -1)" ( (binary_expression "local_60 == -1" identifier == number_literal) )) (compound_statement "{\n        local_60 = 1;\n        local_58 = '\0';\n      }" { (expression_statement "local_60 = 1;" (assignment_expression "local_60 = 1" identifier = number_literal) ;) (expression_statement "local_58 = '\0';" (assignment_expression "local_58 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) }) (else_clause "else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" else (if_statement "if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" if (parenthesized_expression "(local_60 == -2)" ( (binary_expression "local_60 == -2" identifier == number_literal) )) (compound_statement "{\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }" { (expression_statement "uVar8 = 0xffffffffffffffff;" (assignment_expression "uVar8 = 0xffffffffffffffff" identifier = number_literal) ;) (expression_statement "pbVar6 = local_68;" (assignment_expression "pbVar6 = local_68" identifier = identifier) ;) (do_statement "do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);" do (compound_statement "{\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        }" { (if_statement "if (uVar8 == 0) break;" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar8 = uVar8 - 1;" (assignment_expression "uVar8 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) (expression_statement "bVar1 = *pbVar6;" (assignment_expression "bVar1 = *pbVar6" identifier = (pointer_expression "*pbVar6" * identifier)) ;) (expression_statement "pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1" identifier = (binary_expression "pbVar6 + (ulong)bVar9 * -2 + 1" (binary_expression "pbVar6 + (ulong)bVar9 * -2" identifier + (binary_expression "(ulong)bVar9 * -2" (cast_expression "(ulong)bVar9" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar1 != 0)" ( (binary_expression "bVar1 != 0" identifier != number_literal) )) ;) (expression_statement "local_60 = ~uVar8 - 1;" (assignment_expression "local_60 = ~uVar8 - 1" identifier = (binary_expression "~uVar8 - 1" (unary_expression "~uVar8" ~ identifier) - number_literal)) ;) (expression_statement "local_58 = '\0';" (assignment_expression "local_58 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) }) (else_clause "else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" else (compound_statement "{\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" { (if_statement "if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }" if (parenthesized_expression "(local_60 == 0)" ( (binary_expression "local_60 == 0" identifier == number_literal) )) (compound_statement "{\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }" { (expression_statement "local_60 = 1;" (assignment_expression "local_60 = 1" identifier = number_literal) ;) (if_statement "if (*local_68 != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }" if (parenthesized_expression "(*local_68 != 0)" ( (binary_expression "*local_68 != 0" (pointer_expression "*local_68" * identifier) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }" { comment (expression_statement "__assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");" (call_expression "__assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next")" identifier (argument_list "("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next")" ( (string_literal ""*iter->cur.ptr == \'\\0\'"" " string_content escape_sequence escape_sequence string_content escape_sequence ") , (string_literal ""lib/mbuiter.h"" " string_content ") , number_literal , (string_literal ""mbuiter_multi_next"" " string_content ") ))) ;) })) (if_statement "if (local_54[0] != 0) {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }" if (parenthesized_expression "(local_54[0] != 0)" ( (binary_expression "local_54[0] != 0" (subscript_expression "local_54[0]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }" { comment (expression_statement "__assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");" (call_expression "__assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next")" identifier (argument_list "("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next")" ( (string_literal ""iter->cur.wc == 0"" " string_content ") , (string_literal ""lib/mbuiter.h"" " string_content ") , number_literal , (string_literal ""mbuiter_multi_next"" " string_content ") ))) ;) })) })) (expression_statement "local_58 = '\x01';" (assignment_expression "local_58 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (expression_statement "iVar4 = mbsinit(&local_74);" (assignment_expression "iVar4 = mbsinit(&local_74)" identifier = (call_expression "mbsinit(&local_74)" identifier (argument_list "(&local_74)" ( (pointer_expression "&local_74" & identifier) )))) ;) (if_statement "if (iVar4 != 0) {\n          bVar2 = false;\n        }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n          bVar2 = false;\n        }" { (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) })) }))))) }) (else_clause "else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }" else (compound_statement "{\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }" { (if_statement "if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }" if (parenthesized_expression "((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0)" ( (binary_expression "(*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0" (parenthesized_expression "(*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1)" ( (binary_expression "*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1" (binary_expression "*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f)" (pointer_expression "*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4)" * (cast_expression "(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4)" ( (binary_expression "&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4" (pointer_expression "&DAT_00108bc0" & identifier) + (binary_expression "(ulong)(*local_68 >> 5) * 4" (call_expression "(ulong)(*local_68 >> 5)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(*local_68 >> 5)" ( (binary_expression "*local_68 >> 5" (pointer_expression "*local_68" * identifier) >> number_literal) ))) * number_literal)) )))) >> (parenthesized_expression "(*local_68 & 0x1f)" ( (binary_expression "*local_68 & 0x1f" (pointer_expression "*local_68" * identifier) & number_literal) ))) & number_literal) )) == number_literal) )) (compound_statement "{\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }" { (expression_statement "iVar4 = mbsinit(&local_74);" (assignment_expression "iVar4 = mbsinit(&local_74)" identifier = (call_expression "mbsinit(&local_74)" identifier (argument_list "(&local_74)" ( (pointer_expression "&local_74" & identifier) )))) ;) (if_statement "if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }" { comment (expression_statement "__assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");" (call_expression "__assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next")" identifier (argument_list "("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next")" ( (string_literal ""mbsinit (&iter->state)"" " string_content ") , (string_literal ""lib/mbuiter.h"" " string_content ") , number_literal , (string_literal ""mbuiter_multi_next"" " string_content ") ))) ;) })) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) (goto_statement "goto LAB_001046f1;" goto statement_identifier ;) })) (expression_statement "local_60 = 1;" (assignment_expression "local_60 = 1" identifier = number_literal) ;) (expression_statement "local_54[0] = (int)(char)*local_68;" (assignment_expression "local_54[0] = (int)(char)*local_68" (subscript_expression "local_54[0]" identifier [ number_literal ]) = (cast_expression "(int)(char)*local_68" ( (type_descriptor "int" primitive_type) ) (cast_expression "(char)*local_68" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*local_68" * identifier)))) ;) (expression_statement "local_58 = '\x01';" (assignment_expression "local_58 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) }))) (expression_statement "local_6c = 1;" (assignment_expression "local_6c = 1" identifier = number_literal) ;) (expression_statement "uVar3 = local_6c;" (assignment_expression "uVar3 = local_6c" identifier = identifier) ;) (expression_statement "local_6c = 1;" (assignment_expression "local_6c = 1" identifier = number_literal) ;) (if_statement "if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }" if (parenthesized_expression "((local_58 != '\0') && (local_54[0] == 0))" ( (binary_expression "(local_58 != '\0') && (local_54[0] == 0)" (parenthesized_expression "(local_58 != '\0')" ( (binary_expression "local_58 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) && (parenthesized_expression "(local_54[0] == 0)" ( (binary_expression "local_54[0] == 0" (subscript_expression "local_54[0]" identifier [ number_literal ]) == number_literal) ))) )) (compound_statement "{\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }" { (expression_statement "pbVar6 = (byte *)0x0;" (assignment_expression "pbVar6 = (byte *)0x0" identifier = (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_00104691;" goto statement_identifier ;) })) (if_statement "if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;" if (parenthesized_expression "((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))" ( (binary_expression "(local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2)" (parenthesized_expression "(local_60 == 1)" ( (binary_expression "local_60 == 1" identifier == number_literal) )) && (parenthesized_expression "(pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2)" ( (comma_expression "pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2" (assignment_expression "pbVar6 = local_68" identifier = identifier) , (comma_expression "local_6c = uVar3, *local_68 == (byte)param_2" (assignment_expression "local_6c = uVar3" identifier = identifier) , (binary_expression "*local_68 == (byte)param_2" (pointer_expression "*local_68" * identifier) == (cast_expression "(byte)param_2" ( (type_descriptor "byte" type_identifier) ) identifier)))) ))) )) (goto_statement "goto LAB_00104691;" goto statement_identifier ;)) (expression_statement "local_68 = local_68 + local_60;" (assignment_expression "local_68 = local_68 + local_60" identifier = (binary_expression "local_68 + local_60" identifier + identifier)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "char * mbschr(char *string,wchar_t c)\n\n{\n  mbstate_t_conflict *ps;\n  char cVar1;\n  long lVar2;\n  _Bool _Var3;\n  int iVar4;\n  size_t sVar5;\n  char *pcVar6;\n  size_t n;\n  ulong uVar7;\n  long in_FS_OFFSET;\n  byte bVar8;\n  mbui_iterator_t iter;\n  \n  bVar8 = 0;\n  lVar2 = *(long *)(in_FS_OFFSET + 0x28);\n  sVar5 = __ctype_get_mb_cur_max();\n  if ((sVar5 < 2) || ((byte)c < 0x30)) {\n    pcVar6 = strchr(string,c);\nLAB_00104691:\n    if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pcVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  iter.in_shift = false;\n  iter.state.__count = L'\0';\n  iter.state.__value = (anon_union_4_2_91654ee9_for___value)0x0;\n  ps = &iter.state;\n  iter.cur.ptr = string;\n  do {\n    iter.next_done = false;\n    if (iter.in_shift == false) {\n      if ((*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>\n           (*iter.cur.ptr & 0x1fU) & 1) == 0) {\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        iter.in_shift = true;\n        goto LAB_001046f1;\n      }\n      iter.cur.bytes = 1;\n      iter.cur.wc = (wchar_t)*iter.cur.ptr;\n      iter.cur.wc_valid = true;\n    }\n    else {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pcVar6 = iter.cur.ptr;\n      n = strnlen1(iter.cur.ptr,sVar5);\n      iter.cur.bytes = rpl_mbrtowc(&iter.cur.wc,pcVar6,n,ps);\n      if (iter.cur.bytes == 0xffffffffffffffff) {\n        iter.cur.bytes = 1;\n        iter.cur.wc_valid = false;\n      }\n      else if (iter.cur.bytes == 0xfffffffffffffffe) {\n        uVar7 = 0xffffffffffffffff;\n        pcVar6 = iter.cur.ptr;\n        do {\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        } while (cVar1 != '\0');\n        iter.cur.bytes = ~uVar7 - 1;\n        iter.cur.wc_valid = false;\n      }\n      else {\n        if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        iter.cur.wc_valid = true;\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 != 0) {\n          iter.in_shift = false;\n        }\n      }\n    }\n    iter.next_done = true;\n    _Var3 = iter.next_done;\n    iter.next_done = true;\n    if ((iter.cur.wc_valid != false) && (iter.cur.wc == L'\0')) {\n      pcVar6 = (char *)0x0;\n      goto LAB_00104691;\n    }\n    if ((iter.cur.bytes == 1) &&\n       (pcVar6 = iter.cur.ptr, iter.next_done = _Var3, *iter.cur.ptr == (byte)c)) goto LAB_00104691;\n    iter.cur.ptr = iter.cur.ptr + iter.cur.bytes;\n  } while( true );\n}\n\n" (function_definition "char * mbschr(char *string,wchar_t c)\n\n{\n  mbstate_t_conflict *ps;\n  char cVar1;\n  long lVar2;\n  _Bool _Var3;\n  int iVar4;\n  size_t sVar5;\n  char *pcVar6;\n  size_t n;\n  ulong uVar7;\n  long in_FS_OFFSET;\n  byte bVar8;\n  mbui_iterator_t iter;\n  \n  bVar8 = 0;\n  lVar2 = *(long *)(in_FS_OFFSET + 0x28);\n  sVar5 = __ctype_get_mb_cur_max();\n  if ((sVar5 < 2) || ((byte)c < 0x30)) {\n    pcVar6 = strchr(string,c);\nLAB_00104691:\n    if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pcVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  iter.in_shift = false;\n  iter.state.__count = L'\0';\n  iter.state.__value = (anon_union_4_2_91654ee9_for___value)0x0;\n  ps = &iter.state;\n  iter.cur.ptr = string;\n  do {\n    iter.next_done = false;\n    if (iter.in_shift == false) {\n      if ((*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>\n           (*iter.cur.ptr & 0x1fU) & 1) == 0) {\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        iter.in_shift = true;\n        goto LAB_001046f1;\n      }\n      iter.cur.bytes = 1;\n      iter.cur.wc = (wchar_t)*iter.cur.ptr;\n      iter.cur.wc_valid = true;\n    }\n    else {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pcVar6 = iter.cur.ptr;\n      n = strnlen1(iter.cur.ptr,sVar5);\n      iter.cur.bytes = rpl_mbrtowc(&iter.cur.wc,pcVar6,n,ps);\n      if (iter.cur.bytes == 0xffffffffffffffff) {\n        iter.cur.bytes = 1;\n        iter.cur.wc_valid = false;\n      }\n      else if (iter.cur.bytes == 0xfffffffffffffffe) {\n        uVar7 = 0xffffffffffffffff;\n        pcVar6 = iter.cur.ptr;\n        do {\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        } while (cVar1 != '\0');\n        iter.cur.bytes = ~uVar7 - 1;\n        iter.cur.wc_valid = false;\n      }\n      else {\n        if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        iter.cur.wc_valid = true;\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 != 0) {\n          iter.in_shift = false;\n        }\n      }\n    }\n    iter.next_done = true;\n    _Var3 = iter.next_done;\n    iter.next_done = true;\n    if ((iter.cur.wc_valid != false) && (iter.cur.wc == L'\0')) {\n      pcVar6 = (char *)0x0;\n      goto LAB_00104691;\n    }\n    if ((iter.cur.bytes == 1) &&\n       (pcVar6 = iter.cur.ptr, iter.next_done = _Var3, *iter.cur.ptr == (byte)c)) goto LAB_00104691;\n    iter.cur.ptr = iter.cur.ptr + iter.cur.bytes;\n  } while( true );\n}" primitive_type (pointer_declarator "* mbschr(char *string,wchar_t c)" * (function_declarator "mbschr(char *string,wchar_t c)" identifier (parameter_list "(char *string,wchar_t c)" ( (parameter_declaration "char *string" primitive_type (pointer_declarator "*string" * identifier)) , (parameter_declaration "wchar_t c" type_identifier identifier) )))) (compound_statement "{\n  mbstate_t_conflict *ps;\n  char cVar1;\n  long lVar2;\n  _Bool _Var3;\n  int iVar4;\n  size_t sVar5;\n  char *pcVar6;\n  size_t n;\n  ulong uVar7;\n  long in_FS_OFFSET;\n  byte bVar8;\n  mbui_iterator_t iter;\n  \n  bVar8 = 0;\n  lVar2 = *(long *)(in_FS_OFFSET + 0x28);\n  sVar5 = __ctype_get_mb_cur_max();\n  if ((sVar5 < 2) || ((byte)c < 0x30)) {\n    pcVar6 = strchr(string,c);\nLAB_00104691:\n    if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pcVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }\n  iter.in_shift = false;\n  iter.state.__count = L'\0';\n  iter.state.__value = (anon_union_4_2_91654ee9_for___value)0x0;\n  ps = &iter.state;\n  iter.cur.ptr = string;\n  do {\n    iter.next_done = false;\n    if (iter.in_shift == false) {\n      if ((*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>\n           (*iter.cur.ptr & 0x1fU) & 1) == 0) {\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        iter.in_shift = true;\n        goto LAB_001046f1;\n      }\n      iter.cur.bytes = 1;\n      iter.cur.wc = (wchar_t)*iter.cur.ptr;\n      iter.cur.wc_valid = true;\n    }\n    else {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pcVar6 = iter.cur.ptr;\n      n = strnlen1(iter.cur.ptr,sVar5);\n      iter.cur.bytes = rpl_mbrtowc(&iter.cur.wc,pcVar6,n,ps);\n      if (iter.cur.bytes == 0xffffffffffffffff) {\n        iter.cur.bytes = 1;\n        iter.cur.wc_valid = false;\n      }\n      else if (iter.cur.bytes == 0xfffffffffffffffe) {\n        uVar7 = 0xffffffffffffffff;\n        pcVar6 = iter.cur.ptr;\n        do {\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        } while (cVar1 != '\0');\n        iter.cur.bytes = ~uVar7 - 1;\n        iter.cur.wc_valid = false;\n      }\n      else {\n        if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        iter.cur.wc_valid = true;\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 != 0) {\n          iter.in_shift = false;\n        }\n      }\n    }\n    iter.next_done = true;\n    _Var3 = iter.next_done;\n    iter.next_done = true;\n    if ((iter.cur.wc_valid != false) && (iter.cur.wc == L'\0')) {\n      pcVar6 = (char *)0x0;\n      goto LAB_00104691;\n    }\n    if ((iter.cur.bytes == 1) &&\n       (pcVar6 = iter.cur.ptr, iter.next_done = _Var3, *iter.cur.ptr == (byte)c)) goto LAB_00104691;\n    iter.cur.ptr = iter.cur.ptr + iter.cur.bytes;\n  } while( true );\n}" { (declaration "mbstate_t_conflict *ps;" type_identifier (pointer_declarator "*ps" * identifier) ;) (declaration "char cVar1;" primitive_type identifier ;) (declaration "long lVar2;" (sized_type_specifier "long" long) identifier ;) (declaration "_Bool _Var3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "size_t sVar5;" primitive_type identifier ;) (declaration "char *pcVar6;" primitive_type (pointer_declarator "*pcVar6" * identifier) ;) (declaration "size_t n;" primitive_type identifier ;) (declaration "ulong uVar7;" type_identifier identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "byte bVar8;" type_identifier identifier ;) (declaration "mbui_iterator_t iter;" type_identifier identifier ;) (expression_statement "bVar8 = 0;" (assignment_expression "bVar8 = 0" identifier = number_literal) ;) (expression_statement "lVar2 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "lVar2 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "sVar5 = __ctype_get_mb_cur_max();" (assignment_expression "sVar5 = __ctype_get_mb_cur_max()" identifier = (call_expression "__ctype_get_mb_cur_max()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((sVar5 < 2) || ((byte)c < 0x30)) {\n    pcVar6 = strchr(string,c);\nLAB_00104691:\n    if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pcVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" if (parenthesized_expression "((sVar5 < 2) || ((byte)c < 0x30))" ( (binary_expression "(sVar5 < 2) || ((byte)c < 0x30)" (parenthesized_expression "(sVar5 < 2)" ( (binary_expression "sVar5 < 2" identifier < number_literal) )) || (parenthesized_expression "((byte)c < 0x30)" ( (binary_expression "(byte)c < 0x30" (cast_expression "(byte)c" ( (type_descriptor "byte" type_identifier) ) identifier) < number_literal) ))) )) (compound_statement "{\n    pcVar6 = strchr(string,c);\nLAB_00104691:\n    if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pcVar6;\n    }\n                    /* WARNING: Subroutine does not return */\n    __stack_chk_fail();\n  }" { (expression_statement "pcVar6 = strchr(string,c);" (assignment_expression "pcVar6 = strchr(string,c)" identifier = (call_expression "strchr(string,c)" identifier (argument_list "(string,c)" ( identifier , identifier )))) ;) (labeled_statement "LAB_00104691:\n    if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pcVar6;\n    }" statement_identifier : (if_statement "if (lVar2 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pcVar6;\n    }" if (parenthesized_expression "(lVar2 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "lVar2 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n      return pcVar6;\n    }" { (return_statement "return pcVar6;" return identifier ;) }))) comment (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "iter.in_shift = false;" (assignment_expression "iter.in_shift = false" (field_expression "iter.in_shift" identifier . field_identifier) = false) ;) (expression_statement "iter.state.__count = L'\0';" (assignment_expression "iter.state.__count = L'\0'" (field_expression "iter.state.__count" (field_expression "iter.state" identifier . field_identifier) . field_identifier) = (char_literal "L'\0'" L' escape_sequence ')) ;) (expression_statement "iter.state.__value = (anon_union_4_2_91654ee9_for___value)0x0;" (assignment_expression "iter.state.__value = (anon_union_4_2_91654ee9_for___value)0x0" (field_expression "iter.state.__value" (field_expression "iter.state" identifier . field_identifier) . field_identifier) = (cast_expression "(anon_union_4_2_91654ee9_for___value)0x0" ( (type_descriptor "anon_union_4_2_91654ee9_for___value" type_identifier) ) number_literal)) ;) (expression_statement "ps = &iter.state;" (assignment_expression "ps = &iter.state" identifier = (pointer_expression "&iter.state" & (field_expression "iter.state" identifier . field_identifier))) ;) (expression_statement "iter.cur.ptr = string;" (assignment_expression "iter.cur.ptr = string" (field_expression "iter.cur.ptr" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) = identifier) ;) (do_statement "do {\n    iter.next_done = false;\n    if (iter.in_shift == false) {\n      if ((*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>\n           (*iter.cur.ptr & 0x1fU) & 1) == 0) {\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        iter.in_shift = true;\n        goto LAB_001046f1;\n      }\n      iter.cur.bytes = 1;\n      iter.cur.wc = (wchar_t)*iter.cur.ptr;\n      iter.cur.wc_valid = true;\n    }\n    else {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pcVar6 = iter.cur.ptr;\n      n = strnlen1(iter.cur.ptr,sVar5);\n      iter.cur.bytes = rpl_mbrtowc(&iter.cur.wc,pcVar6,n,ps);\n      if (iter.cur.bytes == 0xffffffffffffffff) {\n        iter.cur.bytes = 1;\n        iter.cur.wc_valid = false;\n      }\n      else if (iter.cur.bytes == 0xfffffffffffffffe) {\n        uVar7 = 0xffffffffffffffff;\n        pcVar6 = iter.cur.ptr;\n        do {\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        } while (cVar1 != '\0');\n        iter.cur.bytes = ~uVar7 - 1;\n        iter.cur.wc_valid = false;\n      }\n      else {\n        if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        iter.cur.wc_valid = true;\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 != 0) {\n          iter.in_shift = false;\n        }\n      }\n    }\n    iter.next_done = true;\n    _Var3 = iter.next_done;\n    iter.next_done = true;\n    if ((iter.cur.wc_valid != false) && (iter.cur.wc == L'\0')) {\n      pcVar6 = (char *)0x0;\n      goto LAB_00104691;\n    }\n    if ((iter.cur.bytes == 1) &&\n       (pcVar6 = iter.cur.ptr, iter.next_done = _Var3, *iter.cur.ptr == (byte)c)) goto LAB_00104691;\n    iter.cur.ptr = iter.cur.ptr + iter.cur.bytes;\n  } while( true );" do (compound_statement "{\n    iter.next_done = false;\n    if (iter.in_shift == false) {\n      if ((*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>\n           (*iter.cur.ptr & 0x1fU) & 1) == 0) {\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        iter.in_shift = true;\n        goto LAB_001046f1;\n      }\n      iter.cur.bytes = 1;\n      iter.cur.wc = (wchar_t)*iter.cur.ptr;\n      iter.cur.wc_valid = true;\n    }\n    else {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pcVar6 = iter.cur.ptr;\n      n = strnlen1(iter.cur.ptr,sVar5);\n      iter.cur.bytes = rpl_mbrtowc(&iter.cur.wc,pcVar6,n,ps);\n      if (iter.cur.bytes == 0xffffffffffffffff) {\n        iter.cur.bytes = 1;\n        iter.cur.wc_valid = false;\n      }\n      else if (iter.cur.bytes == 0xfffffffffffffffe) {\n        uVar7 = 0xffffffffffffffff;\n        pcVar6 = iter.cur.ptr;\n        do {\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        } while (cVar1 != '\0');\n        iter.cur.bytes = ~uVar7 - 1;\n        iter.cur.wc_valid = false;\n      }\n      else {\n        if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        iter.cur.wc_valid = true;\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 != 0) {\n          iter.in_shift = false;\n        }\n      }\n    }\n    iter.next_done = true;\n    _Var3 = iter.next_done;\n    iter.next_done = true;\n    if ((iter.cur.wc_valid != false) && (iter.cur.wc == L'\0')) {\n      pcVar6 = (char *)0x0;\n      goto LAB_00104691;\n    }\n    if ((iter.cur.bytes == 1) &&\n       (pcVar6 = iter.cur.ptr, iter.next_done = _Var3, *iter.cur.ptr == (byte)c)) goto LAB_00104691;\n    iter.cur.ptr = iter.cur.ptr + iter.cur.bytes;\n  }" { (expression_statement "iter.next_done = false;" (assignment_expression "iter.next_done = false" (field_expression "iter.next_done" identifier . field_identifier) = false) ;) (if_statement "if (iter.in_shift == false) {\n      if ((*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>\n           (*iter.cur.ptr & 0x1fU) & 1) == 0) {\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        iter.in_shift = true;\n        goto LAB_001046f1;\n      }\n      iter.cur.bytes = 1;\n      iter.cur.wc = (wchar_t)*iter.cur.ptr;\n      iter.cur.wc_valid = true;\n    }\n    else {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pcVar6 = iter.cur.ptr;\n      n = strnlen1(iter.cur.ptr,sVar5);\n      iter.cur.bytes = rpl_mbrtowc(&iter.cur.wc,pcVar6,n,ps);\n      if (iter.cur.bytes == 0xffffffffffffffff) {\n        iter.cur.bytes = 1;\n        iter.cur.wc_valid = false;\n      }\n      else if (iter.cur.bytes == 0xfffffffffffffffe) {\n        uVar7 = 0xffffffffffffffff;\n        pcVar6 = iter.cur.ptr;\n        do {\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        } while (cVar1 != '\0');\n        iter.cur.bytes = ~uVar7 - 1;\n        iter.cur.wc_valid = false;\n      }\n      else {\n        if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        iter.cur.wc_valid = true;\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 != 0) {\n          iter.in_shift = false;\n        }\n      }\n    }" if (parenthesized_expression "(iter.in_shift == false)" ( (binary_expression "iter.in_shift == false" (field_expression "iter.in_shift" identifier . field_identifier) == false) )) (compound_statement "{\n      if ((*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>\n           (*iter.cur.ptr & 0x1fU) & 1) == 0) {\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        iter.in_shift = true;\n        goto LAB_001046f1;\n      }\n      iter.cur.bytes = 1;\n      iter.cur.wc = (wchar_t)*iter.cur.ptr;\n      iter.cur.wc_valid = true;\n    }" { (if_statement "if ((*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>\n           (*iter.cur.ptr & 0x1fU) & 1) == 0) {\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        iter.in_shift = true;\n        goto LAB_001046f1;\n      }" if (parenthesized_expression "((*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>\n           (*iter.cur.ptr & 0x1fU) & 1) == 0)" ( (binary_expression "(*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>\n           (*iter.cur.ptr & 0x1fU) & 1) == 0" (parenthesized_expression "(*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>\n           (*iter.cur.ptr & 0x1fU) & 1)" ( (binary_expression "*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>\n           (*iter.cur.ptr & 0x1fU) & 1" (binary_expression "*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4) >>\n           (*iter.cur.ptr & 0x1fU)" (pointer_expression "*(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4)" * (cast_expression "(uint *)(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4)" ( (binary_expression "is_basic_table + (ulong)((byte)*iter.cur.ptr >> 5) * 4" identifier + (binary_expression "(ulong)((byte)*iter.cur.ptr >> 5) * 4" (call_expression "(ulong)((byte)*iter.cur.ptr >> 5)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((byte)*iter.cur.ptr >> 5)" ( (binary_expression "(byte)*iter.cur.ptr >> 5" (binary_expression "(byte)*iter.cur.ptr" (parenthesized_expression "(byte)" ( identifier )) * (field_expression "iter.cur.ptr" (field_expression "iter.cur" identifier . field_identifier) . field_identifier)) >> number_literal) ))) * number_literal)) )))) >> (parenthesized_expression "(*iter.cur.ptr & 0x1fU)" ( (binary_expression "*iter.cur.ptr & 0x1fU" (pointer_expression "*iter.cur.ptr" * (field_expression "iter.cur.ptr" (field_expression "iter.cur" identifier . field_identifier) . field_identifier)) & number_literal) ))) & number_literal) )) == number_literal) )) (compound_statement "{\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        iter.in_shift = true;\n        goto LAB_001046f1;\n      }" { (expression_statement "iVar4 = mbsinit((mbstate_t *)ps);" (assignment_expression "iVar4 = mbsinit((mbstate_t *)ps)" identifier = (call_expression "mbsinit((mbstate_t *)ps)" identifier (argument_list "((mbstate_t *)ps)" ( (cast_expression "(mbstate_t *)ps" ( (type_descriptor "mbstate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (if_statement "if (iVar4 == 0) {\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }" { comment (expression_statement "__assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");" (call_expression "__assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next")" identifier (argument_list "("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next")" ( (string_literal ""mbsinit (&iter->state)"" " string_content ") , (string_literal ""lib/mbuiter.h"" " string_content ") , number_literal , (string_literal ""mbuiter_multi_next"" " string_content ") ))) ;) })) (expression_statement "iter.in_shift = true;" (assignment_expression "iter.in_shift = true" (field_expression "iter.in_shift" identifier . field_identifier) = true) ;) (goto_statement "goto LAB_001046f1;" goto statement_identifier ;) })) (expression_statement "iter.cur.bytes = 1;" (assignment_expression "iter.cur.bytes = 1" (field_expression "iter.cur.bytes" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) = number_literal) ;) (expression_statement "iter.cur.wc = (wchar_t)*iter.cur.ptr;" (assignment_expression "iter.cur.wc = (wchar_t)*iter.cur.ptr" (field_expression "iter.cur.wc" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) = (binary_expression "(wchar_t)*iter.cur.ptr" (parenthesized_expression "(wchar_t)" ( identifier )) * (field_expression "iter.cur.ptr" (field_expression "iter.cur" identifier . field_identifier) . field_identifier))) ;) (expression_statement "iter.cur.wc_valid = true;" (assignment_expression "iter.cur.wc_valid = true" (field_expression "iter.cur.wc_valid" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) = true) ;) }) (else_clause "else {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pcVar6 = iter.cur.ptr;\n      n = strnlen1(iter.cur.ptr,sVar5);\n      iter.cur.bytes = rpl_mbrtowc(&iter.cur.wc,pcVar6,n,ps);\n      if (iter.cur.bytes == 0xffffffffffffffff) {\n        iter.cur.bytes = 1;\n        iter.cur.wc_valid = false;\n      }\n      else if (iter.cur.bytes == 0xfffffffffffffffe) {\n        uVar7 = 0xffffffffffffffff;\n        pcVar6 = iter.cur.ptr;\n        do {\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        } while (cVar1 != '\0');\n        iter.cur.bytes = ~uVar7 - 1;\n        iter.cur.wc_valid = false;\n      }\n      else {\n        if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        iter.cur.wc_valid = true;\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 != 0) {\n          iter.in_shift = false;\n        }\n      }\n    }" else (compound_statement "{\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pcVar6 = iter.cur.ptr;\n      n = strnlen1(iter.cur.ptr,sVar5);\n      iter.cur.bytes = rpl_mbrtowc(&iter.cur.wc,pcVar6,n,ps);\n      if (iter.cur.bytes == 0xffffffffffffffff) {\n        iter.cur.bytes = 1;\n        iter.cur.wc_valid = false;\n      }\n      else if (iter.cur.bytes == 0xfffffffffffffffe) {\n        uVar7 = 0xffffffffffffffff;\n        pcVar6 = iter.cur.ptr;\n        do {\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        } while (cVar1 != '\0');\n        iter.cur.bytes = ~uVar7 - 1;\n        iter.cur.wc_valid = false;\n      }\n      else {\n        if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        iter.cur.wc_valid = true;\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 != 0) {\n          iter.in_shift = false;\n        }\n      }\n    }" { (labeled_statement "LAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();" statement_identifier : (expression_statement "sVar5 = __ctype_get_mb_cur_max();" (assignment_expression "sVar5 = __ctype_get_mb_cur_max()" identifier = (call_expression "__ctype_get_mb_cur_max()" identifier (argument_list "()" ( )))) ;)) (expression_statement "pcVar6 = iter.cur.ptr;" (assignment_expression "pcVar6 = iter.cur.ptr" identifier = (field_expression "iter.cur.ptr" (field_expression "iter.cur" identifier . field_identifier) . field_identifier)) ;) (expression_statement "n = strnlen1(iter.cur.ptr,sVar5);" (assignment_expression "n = strnlen1(iter.cur.ptr,sVar5)" identifier = (call_expression "strnlen1(iter.cur.ptr,sVar5)" identifier (argument_list "(iter.cur.ptr,sVar5)" ( (field_expression "iter.cur.ptr" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) , identifier )))) ;) (expression_statement "iter.cur.bytes = rpl_mbrtowc(&iter.cur.wc,pcVar6,n,ps);" (assignment_expression "iter.cur.bytes = rpl_mbrtowc(&iter.cur.wc,pcVar6,n,ps)" (field_expression "iter.cur.bytes" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) = (call_expression "rpl_mbrtowc(&iter.cur.wc,pcVar6,n,ps)" identifier (argument_list "(&iter.cur.wc,pcVar6,n,ps)" ( (pointer_expression "&iter.cur.wc" & (field_expression "iter.cur.wc" (field_expression "iter.cur" identifier . field_identifier) . field_identifier)) , identifier , identifier , identifier )))) ;) (if_statement "if (iter.cur.bytes == 0xffffffffffffffff) {\n        iter.cur.bytes = 1;\n        iter.cur.wc_valid = false;\n      }\n      else if (iter.cur.bytes == 0xfffffffffffffffe) {\n        uVar7 = 0xffffffffffffffff;\n        pcVar6 = iter.cur.ptr;\n        do {\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        } while (cVar1 != '\0');\n        iter.cur.bytes = ~uVar7 - 1;\n        iter.cur.wc_valid = false;\n      }\n      else {\n        if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        iter.cur.wc_valid = true;\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 != 0) {\n          iter.in_shift = false;\n        }\n      }" if (parenthesized_expression "(iter.cur.bytes == 0xffffffffffffffff)" ( (binary_expression "iter.cur.bytes == 0xffffffffffffffff" (field_expression "iter.cur.bytes" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) == number_literal) )) (compound_statement "{\n        iter.cur.bytes = 1;\n        iter.cur.wc_valid = false;\n      }" { (expression_statement "iter.cur.bytes = 1;" (assignment_expression "iter.cur.bytes = 1" (field_expression "iter.cur.bytes" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) = number_literal) ;) (expression_statement "iter.cur.wc_valid = false;" (assignment_expression "iter.cur.wc_valid = false" (field_expression "iter.cur.wc_valid" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) = false) ;) }) (else_clause "else if (iter.cur.bytes == 0xfffffffffffffffe) {\n        uVar7 = 0xffffffffffffffff;\n        pcVar6 = iter.cur.ptr;\n        do {\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        } while (cVar1 != '\0');\n        iter.cur.bytes = ~uVar7 - 1;\n        iter.cur.wc_valid = false;\n      }\n      else {\n        if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        iter.cur.wc_valid = true;\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 != 0) {\n          iter.in_shift = false;\n        }\n      }" else (if_statement "if (iter.cur.bytes == 0xfffffffffffffffe) {\n        uVar7 = 0xffffffffffffffff;\n        pcVar6 = iter.cur.ptr;\n        do {\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        } while (cVar1 != '\0');\n        iter.cur.bytes = ~uVar7 - 1;\n        iter.cur.wc_valid = false;\n      }\n      else {\n        if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        iter.cur.wc_valid = true;\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 != 0) {\n          iter.in_shift = false;\n        }\n      }" if (parenthesized_expression "(iter.cur.bytes == 0xfffffffffffffffe)" ( (binary_expression "iter.cur.bytes == 0xfffffffffffffffe" (field_expression "iter.cur.bytes" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) == number_literal) )) (compound_statement "{\n        uVar7 = 0xffffffffffffffff;\n        pcVar6 = iter.cur.ptr;\n        do {\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        } while (cVar1 != '\0');\n        iter.cur.bytes = ~uVar7 - 1;\n        iter.cur.wc_valid = false;\n      }" { (expression_statement "uVar7 = 0xffffffffffffffff;" (assignment_expression "uVar7 = 0xffffffffffffffff" identifier = number_literal) ;) (expression_statement "pcVar6 = iter.cur.ptr;" (assignment_expression "pcVar6 = iter.cur.ptr" identifier = (field_expression "iter.cur.ptr" (field_expression "iter.cur" identifier . field_identifier) . field_identifier)) ;) (do_statement "do {\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        } while (cVar1 != '\0');" do (compound_statement "{\n          if (uVar7 == 0) break;\n          uVar7 = uVar7 - 1;\n          cVar1 = *pcVar6;\n          pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;\n        }" { (if_statement "if (uVar7 == 0) break;" if (parenthesized_expression "(uVar7 == 0)" ( (binary_expression "uVar7 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar7 = uVar7 - 1;" (assignment_expression "uVar7 = uVar7 - 1" identifier = (binary_expression "uVar7 - 1" identifier - number_literal)) ;) (expression_statement "cVar1 = *pcVar6;" (assignment_expression "cVar1 = *pcVar6" identifier = (pointer_expression "*pcVar6" * identifier)) ;) (expression_statement "pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1;" (assignment_expression "pcVar6 = pcVar6 + (ulong)bVar8 * -2 + 1" identifier = (binary_expression "pcVar6 + (ulong)bVar8 * -2 + 1" (binary_expression "pcVar6 + (ulong)bVar8 * -2" identifier + (binary_expression "(ulong)bVar8 * -2" (cast_expression "(ulong)bVar8" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(cVar1 != '\0')" ( (binary_expression "cVar1 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) ;) (expression_statement "iter.cur.bytes = ~uVar7 - 1;" (assignment_expression "iter.cur.bytes = ~uVar7 - 1" (field_expression "iter.cur.bytes" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) = (binary_expression "~uVar7 - 1" (unary_expression "~uVar7" ~ identifier) - number_literal)) ;) (expression_statement "iter.cur.wc_valid = false;" (assignment_expression "iter.cur.wc_valid = false" (field_expression "iter.cur.wc_valid" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) = false) ;) }) (else_clause "else {\n        if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        iter.cur.wc_valid = true;\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 != 0) {\n          iter.in_shift = false;\n        }\n      }" else (compound_statement "{\n        if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        iter.cur.wc_valid = true;\n        iVar4 = mbsinit((mbstate_t *)ps);\n        if (iVar4 != 0) {\n          iter.in_shift = false;\n        }\n      }" { (if_statement "if (iter.cur.bytes == 0) {\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }" if (parenthesized_expression "(iter.cur.bytes == 0)" ( (binary_expression "iter.cur.bytes == 0" (field_expression "iter.cur.bytes" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) == number_literal) )) (compound_statement "{\n          iter.cur.bytes = 1;\n          if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }" { (expression_statement "iter.cur.bytes = 1;" (assignment_expression "iter.cur.bytes = 1" (field_expression "iter.cur.bytes" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) = number_literal) ;) (if_statement "if (*iter.cur.ptr != '\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }" if (parenthesized_expression "(*iter.cur.ptr != '\0')" ( (binary_expression "*iter.cur.ptr != '\0'" (pointer_expression "*iter.cur.ptr" * (field_expression "iter.cur.ptr" (field_expression "iter.cur" identifier . field_identifier) . field_identifier)) != (char_literal "'\0'" ' escape_sequence ')) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }" { comment (expression_statement "__assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");" (call_expression "__assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next")" identifier (argument_list "("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next")" ( (string_literal ""*iter->cur.ptr == \'\\0\'"" " string_content escape_sequence escape_sequence string_content escape_sequence ") , (string_literal ""lib/mbuiter.h"" " string_content ") , number_literal , (string_literal ""mbuiter_multi_next"" " string_content ") ))) ;) })) (if_statement "if (iter.cur.wc != L'\0') {\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }" if (parenthesized_expression "(iter.cur.wc != L'\0')" ( (binary_expression "iter.cur.wc != L'\0'" (field_expression "iter.cur.wc" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) != (char_literal "L'\0'" L' escape_sequence ')) )) (compound_statement "{\n                    /* WARNING: Subroutine does not return */\n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }" { comment (expression_statement "__assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");" (call_expression "__assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next")" identifier (argument_list "("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next")" ( (string_literal ""iter->cur.wc == 0"" " string_content ") , (string_literal ""lib/mbuiter.h"" " string_content ") , number_literal , (string_literal ""mbuiter_multi_next"" " string_content ") ))) ;) })) })) (expression_statement "iter.cur.wc_valid = true;" (assignment_expression "iter.cur.wc_valid = true" (field_expression "iter.cur.wc_valid" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) = true) ;) (expression_statement "iVar4 = mbsinit((mbstate_t *)ps);" (assignment_expression "iVar4 = mbsinit((mbstate_t *)ps)" identifier = (call_expression "mbsinit((mbstate_t *)ps)" identifier (argument_list "((mbstate_t *)ps)" ( (cast_expression "(mbstate_t *)ps" ( (type_descriptor "mbstate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) )))) ;) (if_statement "if (iVar4 != 0) {\n          iter.in_shift = false;\n        }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n          iter.in_shift = false;\n        }" { (expression_statement "iter.in_shift = false;" (assignment_expression "iter.in_shift = false" (field_expression "iter.in_shift" identifier . field_identifier) = false) ;) })) }))))) }))) (expression_statement "iter.next_done = true;" (assignment_expression "iter.next_done = true" (field_expression "iter.next_done" identifier . field_identifier) = true) ;) (expression_statement "_Var3 = iter.next_done;" (assignment_expression "_Var3 = iter.next_done" identifier = (field_expression "iter.next_done" identifier . field_identifier)) ;) (expression_statement "iter.next_done = true;" (assignment_expression "iter.next_done = true" (field_expression "iter.next_done" identifier . field_identifier) = true) ;) (if_statement "if ((iter.cur.wc_valid != false) && (iter.cur.wc == L'\0')) {\n      pcVar6 = (char *)0x0;\n      goto LAB_00104691;\n    }" if (parenthesized_expression "((iter.cur.wc_valid != false) && (iter.cur.wc == L'\0'))" ( (binary_expression "(iter.cur.wc_valid != false) && (iter.cur.wc == L'\0')" (parenthesized_expression "(iter.cur.wc_valid != false)" ( (binary_expression "iter.cur.wc_valid != false" (field_expression "iter.cur.wc_valid" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) != false) )) && (parenthesized_expression "(iter.cur.wc == L'\0')" ( (binary_expression "iter.cur.wc == L'\0'" (field_expression "iter.cur.wc" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) == (char_literal "L'\0'" L' escape_sequence ')) ))) )) (compound_statement "{\n      pcVar6 = (char *)0x0;\n      goto LAB_00104691;\n    }" { (expression_statement "pcVar6 = (char *)0x0;" (assignment_expression "pcVar6 = (char *)0x0" identifier = (cast_expression "(char *)0x0" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_00104691;" goto statement_identifier ;) })) (if_statement "if ((iter.cur.bytes == 1) &&\n       (pcVar6 = iter.cur.ptr, iter.next_done = _Var3, *iter.cur.ptr == (byte)c)) goto LAB_00104691;" if (parenthesized_expression "((iter.cur.bytes == 1) &&\n       (pcVar6 = iter.cur.ptr, iter.next_done = _Var3, *iter.cur.ptr == (byte)c))" ( (binary_expression "(iter.cur.bytes == 1) &&\n       (pcVar6 = iter.cur.ptr, iter.next_done = _Var3, *iter.cur.ptr == (byte)c)" (parenthesized_expression "(iter.cur.bytes == 1)" ( (binary_expression "iter.cur.bytes == 1" (field_expression "iter.cur.bytes" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) == number_literal) )) && (parenthesized_expression "(pcVar6 = iter.cur.ptr, iter.next_done = _Var3, *iter.cur.ptr == (byte)c)" ( (comma_expression "pcVar6 = iter.cur.ptr, iter.next_done = _Var3, *iter.cur.ptr == (byte)c" (assignment_expression "pcVar6 = iter.cur.ptr" identifier = (field_expression "iter.cur.ptr" (field_expression "iter.cur" identifier . field_identifier) . field_identifier)) , (comma_expression "iter.next_done = _Var3, *iter.cur.ptr == (byte)c" (assignment_expression "iter.next_done = _Var3" (field_expression "iter.next_done" identifier . field_identifier) = identifier) , (binary_expression "*iter.cur.ptr == (byte)c" (pointer_expression "*iter.cur.ptr" * (field_expression "iter.cur.ptr" (field_expression "iter.cur" identifier . field_identifier) . field_identifier)) == (cast_expression "(byte)c" ( (type_descriptor "byte" type_identifier) ) identifier)))) ))) )) (goto_statement "goto LAB_00104691;" goto statement_identifier ;)) (expression_statement "iter.cur.ptr = iter.cur.ptr + iter.cur.bytes;" (assignment_expression "iter.cur.ptr = iter.cur.ptr + iter.cur.bytes" (field_expression "iter.cur.ptr" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) = (binary_expression "iter.cur.ptr + iter.cur.bytes" (field_expression "iter.cur.ptr" (field_expression "iter.cur" identifier . field_identifier) . field_identifier) + (field_expression "iter.cur.bytes" (field_expression "iter.cur" identifier . field_identifier) . field_identifier))) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit "byte * FUN_00104655(byte *param_1,int param_2)\n\n{\n  byte bVar1;\n  bool bVar2;\n  undefined1 uVar3;\n  int iVar4;\n  size_t sVar5;\n  byte *pbVar6;\n  undefined8 uVar7;\n  ulong uVar8;\n  long in_FS_OFFSET;\n  byte bVar9;\n  mbstate_t local_74;\n  undefined1 local_6c;\n  byte *local_68;\n  long local_60;\n  char local_58;\n  int local_54 [9];\n  long local_30;\n  \n  bVar9 = 0;\n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  sVar5 = __ctype_get_mb_cur_max();\n  if ((sVar5 < 2) || ((byte)param_2 < 0x30)) {\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    \n    __stack_chk_fail();\n  }\n  bVar2 = false;\n  local_74.__count = 0;\n  local_74.__value = (_union_27)0x0;\n  local_68 = param_1;\n  do {\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  } while( true );\n}\n\n" (function_definition "byte * FUN_00104655(byte *param_1,int param_2)\n\n{\n  byte bVar1;\n  bool bVar2;\n  undefined1 uVar3;\n  int iVar4;\n  size_t sVar5;\n  byte *pbVar6;\n  undefined8 uVar7;\n  ulong uVar8;\n  long in_FS_OFFSET;\n  byte bVar9;\n  mbstate_t local_74;\n  undefined1 local_6c;\n  byte *local_68;\n  long local_60;\n  char local_58;\n  int local_54 [9];\n  long local_30;\n  \n  bVar9 = 0;\n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  sVar5 = __ctype_get_mb_cur_max();\n  if ((sVar5 < 2) || ((byte)param_2 < 0x30)) {\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    \n    __stack_chk_fail();\n  }\n  bVar2 = false;\n  local_74.__count = 0;\n  local_74.__value = (_union_27)0x0;\n  local_68 = param_1;\n  do {\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  } while( true );\n}" type_identifier (pointer_declarator "* FUN_00104655(byte *param_1,int param_2)" * (function_declarator "FUN_00104655(byte *param_1,int param_2)" identifier (parameter_list "(byte *param_1,int param_2)" ( (parameter_declaration "byte *param_1" type_identifier (pointer_declarator "*param_1" * identifier)) , (parameter_declaration "int param_2" primitive_type identifier) )))) (compound_statement "{\n  byte bVar1;\n  bool bVar2;\n  undefined1 uVar3;\n  int iVar4;\n  size_t sVar5;\n  byte *pbVar6;\n  undefined8 uVar7;\n  ulong uVar8;\n  long in_FS_OFFSET;\n  byte bVar9;\n  mbstate_t local_74;\n  undefined1 local_6c;\n  byte *local_68;\n  long local_60;\n  char local_58;\n  int local_54 [9];\n  long local_30;\n  \n  bVar9 = 0;\n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  sVar5 = __ctype_get_mb_cur_max();\n  if ((sVar5 < 2) || ((byte)param_2 < 0x30)) {\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    \n    __stack_chk_fail();\n  }\n  bVar2 = false;\n  local_74.__count = 0;\n  local_74.__value = (_union_27)0x0;\n  local_68 = param_1;\n  do {\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  } while( true );\n}" { (declaration "byte bVar1;" type_identifier identifier ;) (declaration "bool bVar2;" primitive_type identifier ;) (declaration "undefined1 uVar3;" type_identifier identifier ;) (declaration "int iVar4;" primitive_type identifier ;) (declaration "size_t sVar5;" primitive_type identifier ;) (declaration "byte *pbVar6;" type_identifier (pointer_declarator "*pbVar6" * identifier) ;) (declaration "undefined8 uVar7;" type_identifier identifier ;) (declaration "ulong uVar8;" type_identifier identifier ;) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" long) identifier ;) (declaration "byte bVar9;" type_identifier identifier ;) (declaration "mbstate_t local_74;" type_identifier identifier ;) (declaration "undefined1 local_6c;" type_identifier identifier ;) (declaration "byte *local_68;" type_identifier (pointer_declarator "*local_68" * identifier) ;) (declaration "long local_60;" (sized_type_specifier "long" long) identifier ;) (declaration "char local_58;" primitive_type identifier ;) (declaration "int local_54 [9];" primitive_type (array_declarator "local_54 [9]" identifier [ number_literal ]) ;) (declaration "long local_30;" (sized_type_specifier "long" long) identifier ;) (expression_statement "bVar9 = 0;" (assignment_expression "bVar9 = 0" identifier = number_literal) ;) (expression_statement "local_30 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_30 = *(long *)(in_FS_OFFSET + 0x28)" identifier = (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) ;) (expression_statement "sVar5 = __ctype_get_mb_cur_max();" (assignment_expression "sVar5 = __ctype_get_mb_cur_max()" identifier = (call_expression "__ctype_get_mb_cur_max()" identifier (argument_list "()" ( )))) ;) (if_statement "if ((sVar5 < 2) || ((byte)param_2 < 0x30)) {\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    \n    __stack_chk_fail();\n  }" if (parenthesized_expression "((sVar5 < 2) || ((byte)param_2 < 0x30))" ( (binary_expression "(sVar5 < 2) || ((byte)param_2 < 0x30)" (parenthesized_expression "(sVar5 < 2)" ( (binary_expression "sVar5 < 2" identifier < number_literal) )) || (parenthesized_expression "((byte)param_2 < 0x30)" ( (binary_expression "(byte)param_2 < 0x30" (cast_expression "(byte)param_2" ( (type_descriptor "byte" type_identifier) ) identifier) < number_literal) ))) )) (compound_statement "{\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    \n    __stack_chk_fail();\n  }" { (expression_statement "pbVar6 = (byte *)strchr((char *)param_1,param_2);" (assignment_expression "pbVar6 = (byte *)strchr((char *)param_1,param_2)" identifier = (cast_expression "(byte *)strchr((char *)param_1,param_2)" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) (call_expression "strchr((char *)param_1,param_2)" identifier (argument_list "((char *)param_1,param_2)" ( (cast_expression "(char *)param_1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier ))))) ;) (labeled_statement "LAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }" statement_identifier : (if_statement "if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }" if (parenthesized_expression "(local_30 == *(long *)(in_FS_OFFSET + 0x28))" ( (binary_expression "local_30 == *(long *)(in_FS_OFFSET + 0x28)" identifier == (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" * (cast_expression "(long *)(in_FS_OFFSET + 0x28)" ( (type_descriptor "long *" (sized_type_specifier "long" long) (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(in_FS_OFFSET + 0x28)" ( (binary_expression "in_FS_OFFSET + 0x28" identifier + number_literal) ))))) )) (compound_statement "{\n      return pbVar6;\n    }" { (return_statement "return pbVar6;" return identifier ;) }))) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" identifier (argument_list "()" ( ))) ;) })) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) (expression_statement "local_74.__count = 0;" (assignment_expression "local_74.__count = 0" (field_expression "local_74.__count" identifier . field_identifier) = number_literal) ;) (expression_statement "local_74.__value = (_union_27)0x0;" (assignment_expression "local_74.__value = (_union_27)0x0" (field_expression "local_74.__value" identifier . field_identifier) = (cast_expression "(_union_27)0x0" ( (type_descriptor "_union_27" type_identifier) ) number_literal)) ;) (expression_statement "local_68 = param_1;" (assignment_expression "local_68 = param_1" identifier = identifier) ;) (do_statement "do {\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  } while( true );" do (compound_statement "{\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  }" { (expression_statement "local_6c = 0;" (assignment_expression "local_6c = 0" identifier = number_literal) ;) (if_statement "if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }" if (parenthesized_expression "(bVar2)" ( identifier )) (compound_statement "{\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }" { (labeled_statement "LAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();" statement_identifier : (expression_statement "sVar5 = __ctype_get_mb_cur_max();" (assignment_expression "sVar5 = __ctype_get_mb_cur_max()" identifier = (call_expression "__ctype_get_mb_cur_max()" identifier (argument_list "()" ( )))) ;)) (expression_statement "pbVar6 = local_68;" (assignment_expression "pbVar6 = local_68" identifier = identifier) ;) (expression_statement "uVar7 = FUN_001065ef(local_68,sVar5);" (assignment_expression "uVar7 = FUN_001065ef(local_68,sVar5)" identifier = (call_expression "FUN_001065ef(local_68,sVar5)" identifier (argument_list "(local_68,sVar5)" ( identifier , identifier )))) ;) (expression_statement "local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);" (assignment_expression "local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74)" identifier = (call_expression "FUN_0010717f(local_54,pbVar6,uVar7,&local_74)" identifier (argument_list "(local_54,pbVar6,uVar7,&local_74)" ( identifier , identifier , identifier , (pointer_expression "&local_74" & identifier) )))) ;) (if_statement "if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" if (parenthesized_expression "(local_60 == -1)" ( (binary_expression "local_60 == -1" identifier == number_literal) )) (compound_statement "{\n        local_60 = 1;\n        local_58 = '\0';\n      }" { (expression_statement "local_60 = 1;" (assignment_expression "local_60 = 1" identifier = number_literal) ;) (expression_statement "local_58 = '\0';" (assignment_expression "local_58 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) }) (else_clause "else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" else (if_statement "if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" if (parenthesized_expression "(local_60 == -2)" ( (binary_expression "local_60 == -2" identifier == number_literal) )) (compound_statement "{\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }" { (expression_statement "uVar8 = 0xffffffffffffffff;" (assignment_expression "uVar8 = 0xffffffffffffffff" identifier = number_literal) ;) (expression_statement "pbVar6 = local_68;" (assignment_expression "pbVar6 = local_68" identifier = identifier) ;) (do_statement "do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);" do (compound_statement "{\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        }" { (if_statement "if (uVar8 == 0) break;" if (parenthesized_expression "(uVar8 == 0)" ( (binary_expression "uVar8 == 0" identifier == number_literal) )) (break_statement "break;" break ;)) (expression_statement "uVar8 = uVar8 - 1;" (assignment_expression "uVar8 = uVar8 - 1" identifier = (binary_expression "uVar8 - 1" identifier - number_literal)) ;) (expression_statement "bVar1 = *pbVar6;" (assignment_expression "bVar1 = *pbVar6" identifier = (pointer_expression "*pbVar6" * identifier)) ;) (expression_statement "pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1" identifier = (binary_expression "pbVar6 + (ulong)bVar9 * -2 + 1" (binary_expression "pbVar6 + (ulong)bVar9 * -2" identifier + (binary_expression "(ulong)bVar9 * -2" (cast_expression "(ulong)bVar9" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) + number_literal)) ;) }) while (parenthesized_expression "(bVar1 != 0)" ( (binary_expression "bVar1 != 0" identifier != number_literal) )) ;) (expression_statement "local_60 = ~uVar8 - 1;" (assignment_expression "local_60 = ~uVar8 - 1" identifier = (binary_expression "~uVar8 - 1" (unary_expression "~uVar8" ~ identifier) - number_literal)) ;) (expression_statement "local_58 = '\0';" (assignment_expression "local_58 = '\0'" identifier = (char_literal "'\0'" ' escape_sequence ')) ;) }) (else_clause "else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" else (compound_statement "{\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" { (if_statement "if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }" if (parenthesized_expression "(local_60 == 0)" ( (binary_expression "local_60 == 0" identifier == number_literal) )) (compound_statement "{\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }" { (expression_statement "local_60 = 1;" (assignment_expression "local_60 = 1" identifier = number_literal) ;) (if_statement "if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }" if (parenthesized_expression "(*local_68 != 0)" ( (binary_expression "*local_68 != 0" (pointer_expression "*local_68" * identifier) != number_literal) )) (compound_statement "{\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }" { (expression_statement "__assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");" (call_expression "__assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next")" identifier (argument_list "("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next")" ( (string_literal ""*iter->cur.ptr == \'\\0\'"" " string_content escape_sequence escape_sequence string_content escape_sequence ") , (string_literal ""lib/mbuiter.h"" " string_content ") , number_literal , (string_literal ""mbuiter_multi_next"" " string_content ") ))) ;) })) (if_statement "if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }" if (parenthesized_expression "(local_54[0] != 0)" ( (binary_expression "local_54[0] != 0" (subscript_expression "local_54[0]" identifier [ number_literal ]) != number_literal) )) (compound_statement "{\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }" { (expression_statement "__assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");" (call_expression "__assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next")" identifier (argument_list "("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next")" ( (string_literal ""iter->cur.wc == 0"" " string_content ") , (string_literal ""lib/mbuiter.h"" " string_content ") , number_literal , (string_literal ""mbuiter_multi_next"" " string_content ") ))) ;) })) })) (expression_statement "local_58 = '\x01';" (assignment_expression "local_58 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) (expression_statement "iVar4 = mbsinit(&local_74);" (assignment_expression "iVar4 = mbsinit(&local_74)" identifier = (call_expression "mbsinit(&local_74)" identifier (argument_list "(&local_74)" ( (pointer_expression "&local_74" & identifier) )))) ;) (if_statement "if (iVar4 != 0) {\n          bVar2 = false;\n        }" if (parenthesized_expression "(iVar4 != 0)" ( (binary_expression "iVar4 != 0" identifier != number_literal) )) (compound_statement "{\n          bVar2 = false;\n        }" { (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" identifier = false) ;) })) }))))) }) (else_clause "else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }" else (compound_statement "{\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }" { (if_statement "if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }" if (parenthesized_expression "((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0)" ( (binary_expression "(*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0" (parenthesized_expression "(*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1)" ( (binary_expression "*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1" (binary_expression "*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f)" (pointer_expression "*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4)" * (cast_expression "(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4)" ( (type_descriptor "uint *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4)" ( (binary_expression "&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4" (pointer_expression "&DAT_00108bc0" & identifier) + (binary_expression "(ulong)(*local_68 >> 5) * 4" (call_expression "(ulong)(*local_68 >> 5)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(*local_68 >> 5)" ( (binary_expression "*local_68 >> 5" (pointer_expression "*local_68" * identifier) >> number_literal) ))) * number_literal)) )))) >> (parenthesized_expression "(*local_68 & 0x1f)" ( (binary_expression "*local_68 & 0x1f" (pointer_expression "*local_68" * identifier) & number_literal) ))) & number_literal) )) == number_literal) )) (compound_statement "{\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }" { (expression_statement "iVar4 = mbsinit(&local_74);" (assignment_expression "iVar4 = mbsinit(&local_74)" identifier = (call_expression "mbsinit(&local_74)" identifier (argument_list "(&local_74)" ( (pointer_expression "&local_74" & identifier) )))) ;) (if_statement "if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }" if (parenthesized_expression "(iVar4 == 0)" ( (binary_expression "iVar4 == 0" identifier == number_literal) )) (compound_statement "{\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }" { (expression_statement "__assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");" (call_expression "__assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next")" identifier (argument_list "("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next")" ( (string_literal ""mbsinit (&iter->state)"" " string_content ") , (string_literal ""lib/mbuiter.h"" " string_content ") , number_literal , (string_literal ""mbuiter_multi_next"" " string_content ") ))) ;) })) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" identifier = true) ;) (goto_statement "goto LAB_001046f1;" goto statement_identifier ;) })) (expression_statement "local_60 = 1;" (assignment_expression "local_60 = 1" identifier = number_literal) ;) (expression_statement "local_54[0] = (int)(char)*local_68;" (assignment_expression "local_54[0] = (int)(char)*local_68" (subscript_expression "local_54[0]" identifier [ number_literal ]) = (cast_expression "(int)(char)*local_68" ( (type_descriptor "int" primitive_type) ) (cast_expression "(char)*local_68" ( (type_descriptor "char" primitive_type) ) (pointer_expression "*local_68" * identifier)))) ;) (expression_statement "local_58 = '\x01';" (assignment_expression "local_58 = '\x01'" identifier = (char_literal "'\x01'" ' escape_sequence ')) ;) }))) (expression_statement "local_6c = 1;" (assignment_expression "local_6c = 1" identifier = number_literal) ;) (expression_statement "uVar3 = local_6c;" (assignment_expression "uVar3 = local_6c" identifier = identifier) ;) (expression_statement "local_6c = 1;" (assignment_expression "local_6c = 1" identifier = number_literal) ;) (if_statement "if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }" if (parenthesized_expression "((local_58 != '\0') && (local_54[0] == 0))" ( (binary_expression "(local_58 != '\0') && (local_54[0] == 0)" (parenthesized_expression "(local_58 != '\0')" ( (binary_expression "local_58 != '\0'" identifier != (char_literal "'\0'" ' escape_sequence ')) )) && (parenthesized_expression "(local_54[0] == 0)" ( (binary_expression "local_54[0] == 0" (subscript_expression "local_54[0]" identifier [ number_literal ]) == number_literal) ))) )) (compound_statement "{\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }" { (expression_statement "pbVar6 = (byte *)0x0;" (assignment_expression "pbVar6 = (byte *)0x0" identifier = (cast_expression "(byte *)0x0" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) number_literal)) ;) (goto_statement "goto LAB_00104691;" goto statement_identifier ;) })) (if_statement "if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;" if (parenthesized_expression "((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))" ( (binary_expression "(local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2)" (parenthesized_expression "(local_60 == 1)" ( (binary_expression "local_60 == 1" identifier == number_literal) )) && (parenthesized_expression "(pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2)" ( (comma_expression "pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2" (assignment_expression "pbVar6 = local_68" identifier = identifier) , (comma_expression "local_6c = uVar3, *local_68 == (byte)param_2" (assignment_expression "local_6c = uVar3" identifier = identifier) , (binary_expression "*local_68 == (byte)param_2" (pointer_expression "*local_68" * identifier) == (cast_expression "(byte)param_2" ( (type_descriptor "byte" type_identifier) ) identifier)))) ))) )) (goto_statement "goto LAB_00104691;" goto statement_identifier ;)) (expression_statement "local_68 = local_68 + local_60;" (assignment_expression "local_68 = local_68 + local_60" identifier = (binary_expression "local_68 + local_60" identifier + identifier)) ;) }) while (parenthesized_expression "( true )" ( true )) ;) })))
(translation_unit (function_definition TYPE (pointer_declarator * (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE (pointer_declarator * IDENT)) , (parameter_declaration TYPE IDENT) )))) (compound_statement { (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration (sized_type_specifier long) IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (declaration (sized_type_specifier long) IDENT ;) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < LIT) )) || (parenthesized_expression ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) < LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) , IDENT ))))) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == (pointer_expression * (cast_expression ( (type_descriptor (sized_type_specifier long) (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression IDENT + LIT) ))))) )) (compound_statement { (return_statement return IDENT ;) }))) (expression_statement (call_expression IDENT (argument_list ( ))) ;) })) (expression_statement (assignment_expression IDENT = BOOL) ;) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = LIT) ;) (expression_statement (assignment_expression (field_expression IDENT . field_identifier) = (cast_expression ( (type_descriptor TYPE) ) LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( IDENT )) (compound_statement { (labeled_statement statement_identifier : (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;)) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( IDENT , IDENT , IDENT , (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) }) (else_clause else (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (do_statement do (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (break_statement break ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT - LIT)) ;) (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression (binary_expression IDENT + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) + LIT)) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (expression_statement (assignment_expression IDENT = (binary_expression (unary_expression ~ IDENT) - LIT)) ;) (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content escape_sequence escape_sequence string_content escape_sequence ") , (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (if_statement if (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) != LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) })) (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT != LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = BOOL) ;) })) }))))) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (pointer_expression * IDENT) >> LIT) ))) * LIT)) )))) >> (parenthesized_expression ( (binary_expression (pointer_expression * IDENT) & LIT) ))) & LIT) )) == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) )))) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (string_literal " string_content ") , LIT , (string_literal " string_content ") ))) ;) })) (expression_statement (assignment_expression IDENT = BOOL) ;) (goto_statement goto statement_identifier ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression (subscript_expression IDENT [ LIT ]) = (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) (pointer_expression * IDENT)))) ;) (expression_statement (assignment_expression IDENT = (char_literal ' escape_sequence ')) ;) }))) (expression_statement (assignment_expression IDENT = LIT) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT != (char_literal ' escape_sequence ')) )) && (parenthesized_expression ( (binary_expression (subscript_expression IDENT [ LIT ]) == LIT) ))) )) (compound_statement { (expression_statement (assignment_expression IDENT = (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) LIT)) ;) (goto_statement goto statement_identifier ;) })) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT == LIT) )) && (parenthesized_expression ( (comma_expression (assignment_expression IDENT = IDENT) , (comma_expression (assignment_expression IDENT = IDENT) , (binary_expression (pointer_expression * IDENT) == (cast_expression ( (type_descriptor TYPE) ) IDENT)))) ))) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) }) while (parenthesized_expression ( BOOL )) ;) })))
(function_definition "byte * FUN_00104655(byte *param_1,int param_2)\n\n{\n  byte bVar1;\n  bool bVar2;\n  undefined1 uVar3;\n  int iVar4;\n  size_t sVar5;\n  byte *pbVar6;\n  undefined8 uVar7;\n  ulong uVar8;\n  long in_FS_OFFSET;\n  byte bVar9;\n  mbstate_t local_74;\n  undefined1 local_6c;\n  byte *local_68;\n  long local_60;\n  char local_58;\n  int local_54 [9];\n  long local_30;\n  \n  bVar9 = 0;\n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  sVar5 = __ctype_get_mb_cur_max();\n  if ((sVar5 < 2) || ((byte)param_2 < 0x30)) {\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    \n    __stack_chk_fail();\n  }\n  bVar2 = false;\n  local_74.__count = 0;\n  local_74.__value = (_union_27)0x0;\n  local_68 = param_1;\n  do {\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  } while( true );\n}" (type_identifier "byte") (pointer_declarator "* FUN_00104655(byte *param_1,int param_2)" (* "*") (function_declarator "FUN_00104655(byte *param_1,int param_2)" (identifier "FUN_00104655") (parameter_list "(byte *param_1,int param_2)" (( "(") (parameter_declaration "byte *param_1" (type_identifier "byte") (pointer_declarator "*param_1" (* "*") (identifier "param_1"))) (, ",") (parameter_declaration "int param_2" (primitive_type "int") (identifier "param_2")) () ")")))) (compound_statement "{\n  byte bVar1;\n  bool bVar2;\n  undefined1 uVar3;\n  int iVar4;\n  size_t sVar5;\n  byte *pbVar6;\n  undefined8 uVar7;\n  ulong uVar8;\n  long in_FS_OFFSET;\n  byte bVar9;\n  mbstate_t local_74;\n  undefined1 local_6c;\n  byte *local_68;\n  long local_60;\n  char local_58;\n  int local_54 [9];\n  long local_30;\n  \n  bVar9 = 0;\n  local_30 = *(long *)(in_FS_OFFSET + 0x28);\n  sVar5 = __ctype_get_mb_cur_max();\n  if ((sVar5 < 2) || ((byte)param_2 < 0x30)) {\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    \n    __stack_chk_fail();\n  }\n  bVar2 = false;\n  local_74.__count = 0;\n  local_74.__value = (_union_27)0x0;\n  local_68 = param_1;\n  do {\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  } while( true );\n}" ({ "{") (declaration "byte bVar1;" (type_identifier "byte") (identifier "bVar1") (; ";")) (declaration "bool bVar2;" (primitive_type "bool") (identifier "bVar2") (; ";")) (declaration "undefined1 uVar3;" (type_identifier "undefined1") (identifier "uVar3") (; ";")) (declaration "int iVar4;" (primitive_type "int") (identifier "iVar4") (; ";")) (declaration "size_t sVar5;" (primitive_type "size_t") (identifier "sVar5") (; ";")) (declaration "byte *pbVar6;" (type_identifier "byte") (pointer_declarator "*pbVar6" (* "*") (identifier "pbVar6")) (; ";")) (declaration "undefined8 uVar7;" (type_identifier "undefined8") (identifier "uVar7") (; ";")) (declaration "ulong uVar8;" (type_identifier "ulong") (identifier "uVar8") (; ";")) (declaration "long in_FS_OFFSET;" (sized_type_specifier "long" (long "long")) (identifier "in_FS_OFFSET") (; ";")) (declaration "byte bVar9;" (type_identifier "byte") (identifier "bVar9") (; ";")) (declaration "mbstate_t local_74;" (type_identifier "mbstate_t") (identifier "local_74") (; ";")) (declaration "undefined1 local_6c;" (type_identifier "undefined1") (identifier "local_6c") (; ";")) (declaration "byte *local_68;" (type_identifier "byte") (pointer_declarator "*local_68" (* "*") (identifier "local_68")) (; ";")) (declaration "long local_60;" (sized_type_specifier "long" (long "long")) (identifier "local_60") (; ";")) (declaration "char local_58;" (primitive_type "char") (identifier "local_58") (; ";")) (declaration "int local_54 [9];" (primitive_type "int") (array_declarator "local_54 [9]" (identifier "local_54") ([ "[") (number_literal "9") (] "]")) (; ";")) (declaration "long local_30;" (sized_type_specifier "long" (long "long")) (identifier "local_30") (; ";")) (expression_statement "bVar9 = 0;" (assignment_expression "bVar9 = 0" (identifier "bVar9") (= "=") (number_literal "0")) (; ";")) (expression_statement "local_30 = *(long *)(in_FS_OFFSET + 0x28);" (assignment_expression "local_30 = *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_30") (= "=") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) (; ";")) (expression_statement "sVar5 = __ctype_get_mb_cur_max();" (assignment_expression "sVar5 = __ctype_get_mb_cur_max()" (identifier "sVar5") (= "=") (call_expression "__ctype_get_mb_cur_max()" (identifier "__ctype_get_mb_cur_max") (argument_list "()" (( "(") () ")")))) (; ";")) (if_statement "if ((sVar5 < 2) || ((byte)param_2 < 0x30)) {\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    \n    __stack_chk_fail();\n  }" (if "if") (parenthesized_expression "((sVar5 < 2) || ((byte)param_2 < 0x30))" (( "(") (binary_expression "(sVar5 < 2) || ((byte)param_2 < 0x30)" (parenthesized_expression "(sVar5 < 2)" (( "(") (binary_expression "sVar5 < 2" (identifier "sVar5") (< "<") (number_literal "2")) () ")")) (|| "||") (parenthesized_expression "((byte)param_2 < 0x30)" (( "(") (binary_expression "(byte)param_2 < 0x30" (cast_expression "(byte)param_2" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "param_2")) (< "<") (number_literal "0x30")) () ")"))) () ")")) (compound_statement "{\n    pbVar6 = (byte *)strchr((char *)param_1,param_2);\nLAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }\n                    \n    __stack_chk_fail();\n  }" ({ "{") (expression_statement "pbVar6 = (byte *)strchr((char *)param_1,param_2);" (assignment_expression "pbVar6 = (byte *)strchr((char *)param_1,param_2)" (identifier "pbVar6") (= "=") (cast_expression "(byte *)strchr((char *)param_1,param_2)" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (call_expression "strchr((char *)param_1,param_2)" (identifier "strchr") (argument_list "((char *)param_1,param_2)" (( "(") (cast_expression "(char *)param_1" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_1")) (, ",") (identifier "param_2") () ")"))))) (; ";")) (labeled_statement "LAB_00104691:\n    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }" (statement_identifier "LAB_00104691") (: ":") (if_statement "if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {\n      return pbVar6;\n    }" (if "if") (parenthesized_expression "(local_30 == *(long *)(in_FS_OFFSET + 0x28))" (( "(") (binary_expression "local_30 == *(long *)(in_FS_OFFSET + 0x28)" (identifier "local_30") (== "==") (pointer_expression "*(long *)(in_FS_OFFSET + 0x28)" (* "*") (cast_expression "(long *)(in_FS_OFFSET + 0x28)" (( "(") (type_descriptor "long *" (sized_type_specifier "long" (long "long")) (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(in_FS_OFFSET + 0x28)" (( "(") (binary_expression "in_FS_OFFSET + 0x28" (identifier "in_FS_OFFSET") (+ "+") (number_literal "0x28")) () ")"))))) () ")")) (compound_statement "{\n      return pbVar6;\n    }" ({ "{") (return_statement "return pbVar6;" (return "return") (identifier "pbVar6") (; ";")) (} "}")))) (expression_statement "__stack_chk_fail();" (call_expression "__stack_chk_fail()" (identifier "__stack_chk_fail") (argument_list "()" (( "(") () ")"))) (; ";")) (} "}"))) (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" (identifier "bVar2") (= "=") (false "false")) (; ";")) (expression_statement "local_74.__count = 0;" (assignment_expression "local_74.__count = 0" (field_expression "local_74.__count" (identifier "local_74") (. ".") (field_identifier "__count")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_74.__value = (_union_27)0x0;" (assignment_expression "local_74.__value = (_union_27)0x0" (field_expression "local_74.__value" (identifier "local_74") (. ".") (field_identifier "__value")) (= "=") (cast_expression "(_union_27)0x0" (( "(") (type_descriptor "_union_27" (type_identifier "_union_27")) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "local_68 = param_1;" (assignment_expression "local_68 = param_1" (identifier "local_68") (= "=") (identifier "param_1")) (; ";")) (do_statement "do {\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  } while( true );" (do "do") (compound_statement "{\n    local_6c = 0;\n    if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }\n    local_6c = 1;\n    uVar3 = local_6c;\n    local_6c = 1;\n    if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }\n    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;\n    local_68 = local_68 + local_60;\n  }" ({ "{") (expression_statement "local_6c = 0;" (assignment_expression "local_6c = 0" (identifier "local_6c") (= "=") (number_literal "0")) (; ";")) (if_statement "if (bVar2) {\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }\n    else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }" (if "if") (parenthesized_expression "(bVar2)" (( "(") (identifier "bVar2") () ")")) (compound_statement "{\nLAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();\n      pbVar6 = local_68;\n      uVar7 = FUN_001065ef(local_68,sVar5);\n      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);\n      if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }\n    }" ({ "{") (labeled_statement "LAB_001046f1:\n      sVar5 = __ctype_get_mb_cur_max();" (statement_identifier "LAB_001046f1") (: ":") (expression_statement "sVar5 = __ctype_get_mb_cur_max();" (assignment_expression "sVar5 = __ctype_get_mb_cur_max()" (identifier "sVar5") (= "=") (call_expression "__ctype_get_mb_cur_max()" (identifier "__ctype_get_mb_cur_max") (argument_list "()" (( "(") () ")")))) (; ";"))) (expression_statement "pbVar6 = local_68;" (assignment_expression "pbVar6 = local_68" (identifier "pbVar6") (= "=") (identifier "local_68")) (; ";")) (expression_statement "uVar7 = FUN_001065ef(local_68,sVar5);" (assignment_expression "uVar7 = FUN_001065ef(local_68,sVar5)" (identifier "uVar7") (= "=") (call_expression "FUN_001065ef(local_68,sVar5)" (identifier "FUN_001065ef") (argument_list "(local_68,sVar5)" (( "(") (identifier "local_68") (, ",") (identifier "sVar5") () ")")))) (; ";")) (expression_statement "local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);" (assignment_expression "local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74)" (identifier "local_60") (= "=") (call_expression "FUN_0010717f(local_54,pbVar6,uVar7,&local_74)" (identifier "FUN_0010717f") (argument_list "(local_54,pbVar6,uVar7,&local_74)" (( "(") (identifier "local_54") (, ",") (identifier "pbVar6") (, ",") (identifier "uVar7") (, ",") (pointer_expression "&local_74" (& "&") (identifier "local_74")) () ")")))) (; ";")) (if_statement "if (local_60 == -1) {\n        local_60 = 1;\n        local_58 = '\0';\n      }\n      else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" (if "if") (parenthesized_expression "(local_60 == -1)" (( "(") (binary_expression "local_60 == -1" (identifier "local_60") (== "==") (number_literal "-1")) () ")")) (compound_statement "{\n        local_60 = 1;\n        local_58 = '\0';\n      }" ({ "{") (expression_statement "local_60 = 1;" (assignment_expression "local_60 = 1" (identifier "local_60") (= "=") (number_literal "1")) (; ";")) (expression_statement "local_58 = '\0';" (assignment_expression "local_58 = '\0'" (identifier "local_58") (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (} "}")) (else_clause "else if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" (else "else") (if_statement "if (local_60 == -2) {\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }\n      else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" (if "if") (parenthesized_expression "(local_60 == -2)" (( "(") (binary_expression "local_60 == -2" (identifier "local_60") (== "==") (number_literal "-2")) () ")")) (compound_statement "{\n        uVar8 = 0xffffffffffffffff;\n        pbVar6 = local_68;\n        do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);\n        local_60 = ~uVar8 - 1;\n        local_58 = '\0';\n      }" ({ "{") (expression_statement "uVar8 = 0xffffffffffffffff;" (assignment_expression "uVar8 = 0xffffffffffffffff" (identifier "uVar8") (= "=") (number_literal "0xffffffffffffffff")) (; ";")) (expression_statement "pbVar6 = local_68;" (assignment_expression "pbVar6 = local_68" (identifier "pbVar6") (= "=") (identifier "local_68")) (; ";")) (do_statement "do {\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        } while (bVar1 != 0);" (do "do") (compound_statement "{\n          if (uVar8 == 0) break;\n          uVar8 = uVar8 - 1;\n          bVar1 = *pbVar6;\n          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;\n        }" ({ "{") (if_statement "if (uVar8 == 0) break;" (if "if") (parenthesized_expression "(uVar8 == 0)" (( "(") (binary_expression "uVar8 == 0" (identifier "uVar8") (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (expression_statement "uVar8 = uVar8 - 1;" (assignment_expression "uVar8 = uVar8 - 1" (identifier "uVar8") (= "=") (binary_expression "uVar8 - 1" (identifier "uVar8") (- "-") (number_literal "1"))) (; ";")) (expression_statement "bVar1 = *pbVar6;" (assignment_expression "bVar1 = *pbVar6" (identifier "bVar1") (= "=") (pointer_expression "*pbVar6" (* "*") (identifier "pbVar6"))) (; ";")) (expression_statement "pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;" (assignment_expression "pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1" (identifier "pbVar6") (= "=") (binary_expression "pbVar6 + (ulong)bVar9 * -2 + 1" (binary_expression "pbVar6 + (ulong)bVar9 * -2" (identifier "pbVar6") (+ "+") (binary_expression "(ulong)bVar9 * -2" (cast_expression "(ulong)bVar9" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar9")) (* "*") (number_literal "-2"))) (+ "+") (number_literal "1"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "(bVar1 != 0)" (( "(") (binary_expression "bVar1 != 0" (identifier "bVar1") (!= "!=") (number_literal "0")) () ")")) (; ";")) (expression_statement "local_60 = ~uVar8 - 1;" (assignment_expression "local_60 = ~uVar8 - 1" (identifier "local_60") (= "=") (binary_expression "~uVar8 - 1" (unary_expression "~uVar8" (~ "~") (identifier "uVar8")) (- "-") (number_literal "1"))) (; ";")) (expression_statement "local_58 = '\0';" (assignment_expression "local_58 = '\0'" (identifier "local_58") (= "=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) (; ";")) (} "}")) (else_clause "else {\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" (else "else") (compound_statement "{\n        if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }\n        local_58 = '\x01';\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 != 0) {\n          bVar2 = false;\n        }\n      }" ({ "{") (if_statement "if (local_60 == 0) {\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }" (if "if") (parenthesized_expression "(local_60 == 0)" (( "(") (binary_expression "local_60 == 0" (identifier "local_60") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n          local_60 = 1;\n          if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }\n          if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }\n        }" ({ "{") (expression_statement "local_60 = 1;" (assignment_expression "local_60 = 1" (identifier "local_60") (= "=") (number_literal "1")) (; ";")) (if_statement "if (*local_68 != 0) {\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }" (if "if") (parenthesized_expression "(*local_68 != 0)" (( "(") (binary_expression "*local_68 != 0" (pointer_expression "*local_68" (* "*") (identifier "local_68")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                    \n            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");\n          }" ({ "{") (expression_statement "__assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");" (call_expression "__assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next")" (identifier "__assert_fail") (argument_list "("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next")" (( "(") (string_literal ""*iter->cur.ptr == \'\\0\'"" (" """) (string_content "*iter->cur.ptr == ") (escape_sequence "\'") (escape_sequence "\\") (string_content "0") (escape_sequence "\'") (" """)) (, ",") (string_literal ""lib/mbuiter.h"" (" """) (string_content "lib/mbuiter.h") (" """)) (, ",") (number_literal "0xb2") (, ",") (string_literal ""mbuiter_multi_next"" (" """) (string_content "mbuiter_multi_next") (" """)) () ")"))) (; ";")) (} "}"))) (if_statement "if (local_54[0] != 0) {\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }" (if "if") (parenthesized_expression "(local_54[0] != 0)" (( "(") (binary_expression "local_54[0] != 0" (subscript_expression "local_54[0]" (identifier "local_54") ([ "[") (number_literal "0") (] "]")) (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n                    \n            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");\n          }" ({ "{") (expression_statement "__assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");" (call_expression "__assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next")" (identifier "__assert_fail") (argument_list "("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next")" (( "(") (string_literal ""iter->cur.wc == 0"" (" """) (string_content "iter->cur.wc == 0") (" """)) (, ",") (string_literal ""lib/mbuiter.h"" (" """) (string_content "lib/mbuiter.h") (" """)) (, ",") (number_literal "0xb3") (, ",") (string_literal ""mbuiter_multi_next"" (" """) (string_content "mbuiter_multi_next") (" """)) () ")"))) (; ";")) (} "}"))) (} "}"))) (expression_statement "local_58 = '\x01';" (assignment_expression "local_58 = '\x01'" (identifier "local_58") (= "=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) (; ";")) (expression_statement "iVar4 = mbsinit(&local_74);" (assignment_expression "iVar4 = mbsinit(&local_74)" (identifier "iVar4") (= "=") (call_expression "mbsinit(&local_74)" (identifier "mbsinit") (argument_list "(&local_74)" (( "(") (pointer_expression "&local_74" (& "&") (identifier "local_74")) () ")")))) (; ";")) (if_statement "if (iVar4 != 0) {\n          bVar2 = false;\n        }" (if "if") (parenthesized_expression "(iVar4 != 0)" (( "(") (binary_expression "iVar4 != 0" (identifier "iVar4") (!= "!=") (number_literal "0")) () ")")) (compound_statement "{\n          bVar2 = false;\n        }" ({ "{") (expression_statement "bVar2 = false;" (assignment_expression "bVar2 = false" (identifier "bVar2") (= "=") (false "false")) (; ";")) (} "}"))) (} "}")))))) (} "}")) (else_clause "else {\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }" (else "else") (compound_statement "{\n      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }\n      local_60 = 1;\n      local_54[0] = (int)(char)*local_68;\n      local_58 = '\x01';\n    }" ({ "{") (if_statement "if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }" (if "if") (parenthesized_expression "((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0)" (( "(") (binary_expression "(*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0" (parenthesized_expression "(*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1)" (( "(") (binary_expression "*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1" (binary_expression "*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f)" (pointer_expression "*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4)" (* "*") (cast_expression "(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4)" (( "(") (type_descriptor "uint *" (type_identifier "uint") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4)" (( "(") (binary_expression "&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4" (pointer_expression "&DAT_00108bc0" (& "&") (identifier "DAT_00108bc0")) (+ "+") (binary_expression "(ulong)(*local_68 >> 5) * 4" (call_expression "(ulong)(*local_68 >> 5)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(*local_68 >> 5)" (( "(") (binary_expression "*local_68 >> 5" (pointer_expression "*local_68" (* "*") (identifier "local_68")) (>> ">>") (number_literal "5")) () ")"))) (* "*") (number_literal "4"))) () ")")))) (>> ">>") (parenthesized_expression "(*local_68 & 0x1f)" (( "(") (binary_expression "*local_68 & 0x1f" (pointer_expression "*local_68" (* "*") (identifier "local_68")) (& "&") (number_literal "0x1f")) () ")"))) (& "&") (number_literal "1")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n        iVar4 = mbsinit(&local_74);\n        if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }\n        bVar2 = true;\n        goto LAB_001046f1;\n      }" ({ "{") (expression_statement "iVar4 = mbsinit(&local_74);" (assignment_expression "iVar4 = mbsinit(&local_74)" (identifier "iVar4") (= "=") (call_expression "mbsinit(&local_74)" (identifier "mbsinit") (argument_list "(&local_74)" (( "(") (pointer_expression "&local_74" (& "&") (identifier "local_74")) () ")")))) (; ";")) (if_statement "if (iVar4 == 0) {\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }" (if "if") (parenthesized_expression "(iVar4 == 0)" (( "(") (binary_expression "iVar4 == 0" (identifier "iVar4") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n                    \n          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");\n        }" ({ "{") (expression_statement "__assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");" (call_expression "__assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next")" (identifier "__assert_fail") (argument_list "("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next")" (( "(") (string_literal ""mbsinit (&iter->state)"" (" """) (string_content "mbsinit (&iter->state)") (" """)) (, ",") (string_literal ""lib/mbuiter.h"" (" """) (string_content "lib/mbuiter.h") (" """)) (, ",") (number_literal "0x96") (, ",") (string_literal ""mbuiter_multi_next"" (" """) (string_content "mbuiter_multi_next") (" """)) () ")"))) (; ";")) (} "}"))) (expression_statement "bVar2 = true;" (assignment_expression "bVar2 = true" (identifier "bVar2") (= "=") (true "true")) (; ";")) (goto_statement "goto LAB_001046f1;" (goto "goto") (statement_identifier "LAB_001046f1") (; ";")) (} "}"))) (expression_statement "local_60 = 1;" (assignment_expression "local_60 = 1" (identifier "local_60") (= "=") (number_literal "1")) (; ";")) (expression_statement "local_54[0] = (int)(char)*local_68;" (assignment_expression "local_54[0] = (int)(char)*local_68" (subscript_expression "local_54[0]" (identifier "local_54") ([ "[") (number_literal "0") (] "]")) (= "=") (cast_expression "(int)(char)*local_68" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(char)*local_68" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (pointer_expression "*local_68" (* "*") (identifier "local_68"))))) (; ";")) (expression_statement "local_58 = '\x01';" (assignment_expression "local_58 = '\x01'" (identifier "local_58") (= "=") (char_literal "'\x01'" (' "'") (escape_sequence "\x01") (' "'"))) (; ";")) (} "}")))) (expression_statement "local_6c = 1;" (assignment_expression "local_6c = 1" (identifier "local_6c") (= "=") (number_literal "1")) (; ";")) (expression_statement "uVar3 = local_6c;" (assignment_expression "uVar3 = local_6c" (identifier "uVar3") (= "=") (identifier "local_6c")) (; ";")) (expression_statement "local_6c = 1;" (assignment_expression "local_6c = 1" (identifier "local_6c") (= "=") (number_literal "1")) (; ";")) (if_statement "if ((local_58 != '\0') && (local_54[0] == 0)) {\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }" (if "if") (parenthesized_expression "((local_58 != '\0') && (local_54[0] == 0))" (( "(") (binary_expression "(local_58 != '\0') && (local_54[0] == 0)" (parenthesized_expression "(local_58 != '\0')" (( "(") (binary_expression "local_58 != '\0'" (identifier "local_58") (!= "!=") (char_literal "'\0'" (' "'") (escape_sequence "\0") (' "'"))) () ")")) (&& "&&") (parenthesized_expression "(local_54[0] == 0)" (( "(") (binary_expression "local_54[0] == 0" (subscript_expression "local_54[0]" (identifier "local_54") ([ "[") (number_literal "0") (] "]")) (== "==") (number_literal "0")) () ")"))) () ")")) (compound_statement "{\n      pbVar6 = (byte *)0x0;\n      goto LAB_00104691;\n    }" ({ "{") (expression_statement "pbVar6 = (byte *)0x0;" (assignment_expression "pbVar6 = (byte *)0x0" (identifier "pbVar6") (= "=") (cast_expression "(byte *)0x0" (( "(") (type_descriptor "byte *" (type_identifier "byte") (abstract_pointer_declarator "*" (* "*"))) () ")") (number_literal "0x0"))) (; ";")) (goto_statement "goto LAB_00104691;" (goto "goto") (statement_identifier "LAB_00104691") (; ";")) (} "}"))) (if_statement "if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))\n    goto LAB_00104691;" (if "if") (parenthesized_expression "((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))" (( "(") (binary_expression "(local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2)" (parenthesized_expression "(local_60 == 1)" (( "(") (binary_expression "local_60 == 1" (identifier "local_60") (== "==") (number_literal "1")) () ")")) (&& "&&") (parenthesized_expression "(pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2)" (( "(") (comma_expression "pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2" (assignment_expression "pbVar6 = local_68" (identifier "pbVar6") (= "=") (identifier "local_68")) (, ",") (comma_expression "local_6c = uVar3, *local_68 == (byte)param_2" (assignment_expression "local_6c = uVar3" (identifier "local_6c") (= "=") (identifier "uVar3")) (, ",") (binary_expression "*local_68 == (byte)param_2" (pointer_expression "*local_68" (* "*") (identifier "local_68")) (== "==") (cast_expression "(byte)param_2" (( "(") (type_descriptor "byte" (type_identifier "byte")) () ")") (identifier "param_2"))))) () ")"))) () ")")) (goto_statement "goto LAB_00104691;" (goto "goto") (statement_identifier "LAB_00104691") (; ";"))) (expression_statement "local_68 = local_68 + local_60;" (assignment_expression "local_68 = local_68 + local_60" (identifier "local_68") (= "=") (binary_expression "local_68 + local_60" (identifier "local_68") (+ "+") (identifier "local_60"))) (; ";")) (} "}")) (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (; ";")) (} "}")))

char * function_1(char *string,type_1 c)

{
  type_2 *ps;
  char var_15;
  long var_5;
  type_3 _Var3;
  int var_9;
  size_t var_3;
  char *var_14;
  size_t n;
  type_4 var_13;
  long var_1;
  type_5 bVar8;
  type_6 iter;
  
  bVar8 = 0;
  var_5 = *(long *)(var_1 + 0x28);
  var_3 = var_2();
  if ((var_3 < 2) || ((type_5)c < 0x30)) {
    var_14 = var_4(string,c);
LAB_00104691:
    if (var_5 == *(long *)(var_1 + 0x28)) {
      return var_14;
    }
                    /* WARNING: Subroutine does not return */
    var_6();
  }
  iter.in_shift = false;
  iter.state.__count = L'\0';
  iter.state.__value = (type_7)0x0;
  ps = &iter.state;
  iter.cur.ptr = string;
  do {
    iter.next_done = false;
    if (iter.in_shift == false) {
      if ((*(type_8 *)(var_7 + (type_4)((type_5)*iter.cur.ptr >> 5) * 4) >>
           (*iter.cur.ptr & 0x1fU) & 1) == 0) {
        var_9 = var_8((type_9 *)ps);
        if (var_9 == 0) {
                    /* WARNING: Subroutine does not return */
          var_10("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");
        }
        iter.in_shift = true;
        goto LAB_001046f1;
      }
      iter.cur.bytes = 1;
      iter.cur.wc = (type_1)*iter.cur.ptr;
      iter.cur.wc_valid = true;
    }
    else {
LAB_001046f1:
      var_3 = var_2();
      var_14 = iter.cur.ptr;
      n = var_11(iter.cur.ptr,var_3);
      iter.cur.bytes = var_12(&iter.cur.wc,var_14,n,ps);
      if (iter.cur.bytes == 0xffffffffffffffff) {
        iter.cur.bytes = 1;
        iter.cur.wc_valid = false;
      }
      else if (iter.cur.bytes == 0xfffffffffffffffe) {
        var_13 = 0xffffffffffffffff;
        var_14 = iter.cur.ptr;
        do {
          if (var_13 == 0) break;
          var_13 = var_13 - 1;
          var_15 = *var_14;
          var_14 = var_14 + (type_4)bVar8 * -2 + 1;
        } while (var_15 != '\0');
        iter.cur.bytes = ~var_13 - 1;
        iter.cur.wc_valid = false;
      }
      else {
        if (iter.cur.bytes == 0) {
          iter.cur.bytes = 1;
          if (*iter.cur.ptr != '\0') {
                    /* WARNING: Subroutine does not return */
            var_10("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");
          }
          if (iter.cur.wc != L'\0') {
                    /* WARNING: Subroutine does not return */
            var_10("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");
          }
        }
        iter.cur.wc_valid = true;
        var_9 = var_8((type_9 *)ps);
        if (var_9 != 0) {
          iter.in_shift = false;
        }
      }
    }
    iter.next_done = true;
    _Var3 = iter.next_done;
    iter.next_done = true;
    if ((iter.cur.wc_valid != false) && (iter.cur.wc == L'\0')) {
      var_14 = (char *)0x0;
      goto LAB_00104691;
    }
    if ((iter.cur.bytes == 1) &&
       (var_14 = iter.cur.ptr, iter.next_done = _Var3, *iter.cur.ptr == (type_5)c)) goto LAB_00104691;
    iter.cur.ptr = iter.cur.ptr + iter.cur.bytes;
  } while( true );
}


(translation_unit (function_definition type: (type_identifier) declarator: (pointer_declarator declarator: (function_declarator declarator: (identifier) parameters: (parameter_list (parameter_declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (parameter_declaration type: (primitive_type) declarator: (identifier))))) body: (compound_statement (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (identifier)) (declaration type: (type_identifier) declarator: (pointer_declarator declarator: (identifier))) (declaration type: (sized_type_specifier) declarator: (identifier)) (declaration type: (primitive_type) declarator: (identifier)) (declaration type: (primitive_type) declarator: (array_declarator declarator: (identifier) size: (number_literal))) (declaration type: (sized_type_specifier) declarator: (identifier)) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (call_expression function: (identifier) arguments: (argument_list (cast_expression type: (type_descriptor type: (primitive_type) declarator: (abstract_pointer_declarator)) value: (identifier)) (identifier)))))) (labeled_statement label: (statement_identifier) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (pointer_expression argument: (cast_expression type: (type_descriptor type: (sized_type_specifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))))))) consequence: (compound_statement (return_statement (identifier))))) (expression_statement (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (false))) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (number_literal))) (expression_statement (assignment_expression left: (field_expression argument: (identifier) field: (field_identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (identifier)) consequence: (compound_statement (labeled_statement label: (statement_identifier) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list))))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier))))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (identifier) (identifier) (identifier) (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (char_literal (escape_sequence))))) alternative: (else_clause (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (do_statement body: (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (break_statement)) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (pointer_expression argument: (identifier)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (binary_expression left: (identifier) right: (binary_expression left: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)) right: (number_literal))) right: (number_literal))))) condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (unary_expression argument: (identifier)) right: (number_literal)))) (expression_statement (assignment_expression left: (identifier) right: (char_literal (escape_sequence))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content) (escape_sequence) (escape_sequence) (string_content) (escape_sequence)) (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (if_statement condition: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal) (string_literal (string_content))))))))) (expression_statement (assignment_expression left: (identifier) right: (char_literal (escape_sequence)))) (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (false))))))))))) alternative: (else_clause (compound_statement (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (binary_expression left: (pointer_expression argument: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (binary_expression left: (call_expression function: (parenthesized_expression (identifier)) arguments: (argument_list (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) right: (number_literal)))))) right: (parenthesized_expression (binary_expression left: (pointer_expression argument: (identifier)) right: (number_literal)))) right: (number_literal))) right: (number_literal))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (call_expression function: (identifier) arguments: (argument_list (pointer_expression argument: (identifier)))))) (if_statement condition: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) consequence: (compound_statement (expression_statement (call_expression function: (identifier) arguments: (argument_list (string_literal (string_content)) (string_literal (string_content)) (number_literal) (string_literal (string_content))))))) (expression_statement (assignment_expression left: (identifier) right: (true))) (goto_statement label: (statement_identifier)))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (cast_expression type: (type_descriptor type: (primitive_type)) value: (cast_expression type: (type_descriptor type: (primitive_type)) value: (pointer_expression argument: (identifier)))))) (expression_statement (assignment_expression left: (identifier) right: (char_literal (escape_sequence))))))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (expression_statement (assignment_expression left: (identifier) right: (identifier))) (expression_statement (assignment_expression left: (identifier) right: (number_literal))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (char_literal (escape_sequence)))) right: (parenthesized_expression (binary_expression left: (subscript_expression argument: (identifier) index: (number_literal)) right: (number_literal))))) consequence: (compound_statement (expression_statement (assignment_expression left: (identifier) right: (cast_expression type: (type_descriptor type: (type_identifier) declarator: (abstract_pointer_declarator)) value: (number_literal)))) (goto_statement label: (statement_identifier)))) (if_statement condition: (parenthesized_expression (binary_expression left: (parenthesized_expression (binary_expression left: (identifier) right: (number_literal))) right: (parenthesized_expression (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (comma_expression left: (assignment_expression left: (identifier) right: (identifier)) right: (binary_expression left: (pointer_expression argument: (identifier)) right: (cast_expression type: (type_descriptor type: (type_identifier)) value: (identifier)))))))) consequence: (goto_statement label: (statement_identifier))) (expression_statement (assignment_expression left: (identifier) right: (binary_expression left: (identifier) right: (identifier))))) condition: (parenthesized_expression (true))))))

byte * MASKED(byte *param_1,int param_2)

{
  byte bVar1;
  bool bVar2;
  undefined1 uVar3;
  int iVar4;
  size_t sVar5;
  byte *pbVar6;
  undefined8 uVar7;
  ulong uVar8;
  long in_FS_OFFSET;
  byte bVar9;
  mbstate_t local_74;
  undefined1 local_6c;
  byte *local_68;
  long local_60;
  char local_58;
  int local_54 [9];
  long local_30;
  
  bVar9 = 0;
  local_30 = *(long *)(in_FS_OFFSET + 0x28);
  sVar5 = __ctype_get_mb_cur_max();
  if ((sVar5 < 2) || ((byte)param_2 < 0x30)) {
    pbVar6 = (byte *)strchr((char *)param_1,param_2);
LAB_00104691:
    if (local_30 == *(long *)(in_FS_OFFSET + 0x28)) {
      return pbVar6;
    }
                    /* WARNING: Subroutine does not return */
    __stack_chk_fail();
  }
  bVar2 = false;
  local_74.__count = 0;
  local_74.__value = (_union_27)0x0;
  local_68 = param_1;
  do {
    local_6c = 0;
    if (bVar2) {
LAB_001046f1:
      sVar5 = __ctype_get_mb_cur_max();
      pbVar6 = local_68;
      uVar7 = FUN_001065ef(local_68,sVar5);
      local_60 = FUN_0010717f(local_54,pbVar6,uVar7,&local_74);
      if (local_60 == -1) {
        local_60 = 1;
        local_58 = '\0';
      }
      else if (local_60 == -2) {
        uVar8 = 0xffffffffffffffff;
        pbVar6 = local_68;
        do {
          if (uVar8 == 0) break;
          uVar8 = uVar8 - 1;
          bVar1 = *pbVar6;
          pbVar6 = pbVar6 + (ulong)bVar9 * -2 + 1;
        } while (bVar1 != 0);
        local_60 = ~uVar8 - 1;
        local_58 = '\0';
      }
      else {
        if (local_60 == 0) {
          local_60 = 1;
          if (*local_68 != 0) {
                    /* WARNING: Subroutine does not return */
            __assert_fail("*iter->cur.ptr == \'\\0\'","lib/mbuiter.h",0xb2,"mbuiter_multi_next");
          }
          if (local_54[0] != 0) {
                    /* WARNING: Subroutine does not return */
            __assert_fail("iter->cur.wc == 0","lib/mbuiter.h",0xb3,"mbuiter_multi_next");
          }
        }
        local_58 = '\x01';
        iVar4 = mbsinit(&local_74);
        if (iVar4 != 0) {
          bVar2 = false;
        }
      }
    }
    else {
      if ((*(uint *)(&DAT_00108bc0 + (ulong)(*local_68 >> 5) * 4) >> (*local_68 & 0x1f) & 1) == 0) {
        iVar4 = mbsinit(&local_74);
        if (iVar4 == 0) {
                    /* WARNING: Subroutine does not return */
          __assert_fail("mbsinit (&iter->state)","lib/mbuiter.h",0x96,"mbuiter_multi_next");
        }
        bVar2 = true;
        goto LAB_001046f1;
      }
      local_60 = 1;
      local_54[0] = (int)(char)*local_68;
      local_58 = '\x01';
    }
    local_6c = 1;
    uVar3 = local_6c;
    local_6c = 1;
    if ((local_58 != '\0') && (local_54[0] == 0)) {
      pbVar6 = (byte *)0x0;
      goto LAB_00104691;
    }
    if ((local_60 == 1) && (pbVar6 = local_68, local_6c = uVar3, *local_68 == (byte)param_2))
    goto LAB_00104691;
    local_68 = local_68 + local_60;
  } while( true );
}

