
uint print_symbol(wchar_t width,char *symbol)

{
  byte *pbVar1;
  byte *pbVar2;
  byte bVar3;
  bool bVar4;
  size_t sVar5;
  wchar_t wVar6;
  wchar_t wVar7;
  wchar_t w;
  mbstate_t state;
  
  if (width < L'\0') {
    width = -width;
    bVar4 = true;
  }
  else {
    if (width == L'\0') {
      return 0;
    }
    bVar4 = false;
  }
  state.__count = 0;
  state.__value = (anon_union_4_2_91654ee9_for___value)0x0;
  wVar7 = L'\x7fffffff';
  if (do_wide == 0) {
    wVar7 = width;
  }
  wVar6 = L'\0';
  do {
    while( true ) {
      bVar3 = *symbol;
      pbVar1 = (byte *)symbol + 1;
      if (bVar3 == 0) goto LAB_00112370;
      if ((_sch_istable[bVar3] & 2) == 0) break;
      if (wVar7 == L'\x01') goto LAB_00112370;
      wVar7 = wVar7 + L'\xfffffffe';
      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));
      wVar6 = wVar6 + L'\x02';
      symbol = (char *)pbVar1;
LAB_00112331:
      if (wVar7 == L'\0') goto LAB_00112370;
    }
    wVar7 = wVar7 + L'\xffffffff';
    wVar6 = wVar6 + L'\x01';
    if ((_sch_istable[bVar3] & 0x10) == 0) {
      printf("%.1s",symbol);
      sVar5 = __ctype_get_mb_cur_max();
      sVar5 = mbrtowc(&w,symbol,sVar5,(mbstate_t *)&state);
      pbVar2 = (byte *)symbol + sVar5;
      symbol = (char *)pbVar1;
      if (sVar5 - 1 < 0xfffffffffffffffd) {
        symbol = (char *)pbVar2;
      }
      goto LAB_00112331;
    }
    putc((int)(char)bVar3,stdout);
    symbol = (char *)pbVar1;
  } while (wVar7 != L'\0');
LAB_00112370:
  if ((wVar6 < width) && (bVar4)) {
    printf("%-*s",(ulong)(uint)(width - wVar6),&DAT_0016a397);
    wVar6 = width;
  }
  return wVar6;
}



int FUN_001122a0(int param_1,byte *param_2)

{
  byte *pbVar1;
  byte *pbVar2;
  byte bVar3;
  bool bVar4;
  size_t sVar5;
  int iVar6;
  int iVar7;
  wchar_t local_44;
  mbstate_t local_40 [2];
  
  if (param_1 < 0) {
    param_1 = -param_1;
    bVar4 = true;
  }
  else {
    if (param_1 == 0) {
      return 0;
    }
    bVar4 = false;
  }
  local_40[0].__count = 0;
  local_40[0].__value = (_union_27)0x0;
  iVar7 = 0x7fffffff;
  if (DAT_00196f50 == 0) {
    iVar7 = param_1;
  }
  iVar6 = 0;
  do {
    while( true ) {
      bVar3 = *param_2;
      pbVar1 = param_2 + 1;
      if (bVar3 == 0) goto LAB_00112370;
      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;
      if (iVar7 == 1) goto LAB_00112370;
      iVar7 = iVar7 + -2;
      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));
      iVar6 = iVar6 + 2;
      param_2 = pbVar1;
LAB_00112331:
      if (iVar7 == 0) goto LAB_00112370;
    }
    iVar7 = iVar7 + -1;
    iVar6 = iVar6 + 1;
    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {
      printf("%.1s",param_2);
      sVar5 = __ctype_get_mb_cur_max();
      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);
      pbVar2 = param_2 + sVar5;
      param_2 = pbVar1;
      if (sVar5 - 1 < 0xfffffffffffffffd) {
        param_2 = pbVar2;
      }
      goto LAB_00112331;
    }
    putc((int)(char)bVar3,stdout);
    param_2 = pbVar1;
  } while (iVar7 != 0);
LAB_00112370:
  if ((iVar6 < param_1) && (bVar4)) {
    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);
    iVar6 = param_1;
  }
  return iVar6;
}


PUSH R15
MOV R15,RSI
PUSH R14
PUSH R13
MOV R13D,EDI
PUSH R12
PUSH RBP
PUSH RBX
SUB RSP,0x38
TEST EDI,EDI
JS 0x001123f8
MOV EAX,0x0
JZ 0x0011239b
MOV byte ptr [RSP + 0x1f],0x0
MOV EAX,dword ptr [0x00196f50]
MOV R9D,0x7fffffff
MOV qword ptr [RSP + 0x28],0x0
LEA R12,[0x187e40]
TEST EAX,EAX
LEA RAX,[RSP + 0x28]
CMOVZ R9D,R13D
MOV qword ptr [RSP + 0x8],RAX
LEA RAX,[RSP + 0x24]
XOR EBX,EBX
MOV qword ptr [RSP + 0x10],RAX
MOV R14D,R9D
JMP 0x00112336
CMP R14D,0x1
JZ 0x00112370
LEA ESI,[RDI + 0x40]
XOR EAX,EAX
LEA RDI,[0x1648f6]
SUB R14D,0x2
CALL 0x00107190
ADD EBX,0x2
MOV R15,RBP
TEST R14D,R14D
JZ 0x00112370
MOVZX EAX,byte ptr [R15]
LEA RBP,[R15 + 0x1]
TEST AL,AL
JZ 0x00112370
MOVSX EDI,AL
MOVZX EAX,AL
MOVZX EAX,word ptr [R12 + RAX*0x2]
TEST AL,0x2
JNZ 0x00112310
SUB R14D,0x1
ADD EBX,0x1
TEST AL,0x10
JZ 0x001123b0
MOV RSI,qword ptr [0x001923a0]
MOV R15,RBP
CALL 0x00107270
TEST R14D,R14D
JNZ 0x00112336
CMP EBX,R13D
JGE 0x00112399
CMP byte ptr [RSP + 0x1f],0x0
JZ 0x00112399
MOV ESI,R13D
LEA RDX,[0x16a397]
LEA RDI,[0x169683]
XOR EAX,EAX
SUB ESI,EBX
MOV EBX,R13D
CALL 0x00107190
MOV EAX,EBX
ADD RSP,0x38
POP RBX
POP RBP
POP R12
POP R13
POP R14
POP R15
RET
MOV RSI,R15
LEA RDI,[0x1648fa]
XOR EAX,EAX
CALL 0x00107190
CALL 0x00107140
MOV RCX,qword ptr [RSP + 0x8]
MOV RDI,qword ptr [RSP + 0x10]
MOV RSI,R15
MOV RDX,RAX
CALL 0x00107170
LEA RDX,[RAX + -0x1]
LEA R8,[R15 + RAX*0x1]
MOV R15,RBP
CMP RDX,-0x3
CMOVC R15,R8
JMP 0x00112331
NEG R13D
MOV byte ptr [RSP + 0x1f],0x1
JMP 0x001122cc
(translation_unit "int FUN_001122a0(int param_1,byte *param_2)\n\n{\n  byte *pbVar1;\n  byte *pbVar2;\n  byte bVar3;\n  bool bVar4;\n  size_t sVar5;\n  int iVar6;\n  int iVar7;\n  wchar_t local_44;\n  mbstate_t local_40 [2];\n  \n  if (param_1 < 0) {\n    param_1 = -param_1;\n    bVar4 = true;\n  }\n  else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }\n  local_40[0].__count = 0;\n  local_40[0].__value = (_union_27)0x0;\n  iVar7 = 0x7fffffff;\n  if (DAT_00196f50 == 0) {\n    iVar7 = param_1;\n  }\n  iVar6 = 0;\n  do {\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  } while (iVar7 != 0);\nLAB_00112370:\n  if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }\n  return iVar6;\n}\n\n" (function_definition "int FUN_001122a0(int param_1,byte *param_2)\n\n{\n  byte *pbVar1;\n  byte *pbVar2;\n  byte bVar3;\n  bool bVar4;\n  size_t sVar5;\n  int iVar6;\n  int iVar7;\n  wchar_t local_44;\n  mbstate_t local_40 [2];\n  \n  if (param_1 < 0) {\n    param_1 = -param_1;\n    bVar4 = true;\n  }\n  else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }\n  local_40[0].__count = 0;\n  local_40[0].__value = (_union_27)0x0;\n  iVar7 = 0x7fffffff;\n  if (DAT_00196f50 == 0) {\n    iVar7 = param_1;\n  }\n  iVar6 = 0;\n  do {\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  } while (iVar7 != 0);\nLAB_00112370:\n  if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }\n  return iVar6;\n}" primitive_type (function_declarator "FUN_001122a0(int param_1,byte *param_2)" identifier (parameter_list "(int param_1,byte *param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "byte *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  byte *pbVar1;\n  byte *pbVar2;\n  byte bVar3;\n  bool bVar4;\n  size_t sVar5;\n  int iVar6;\n  int iVar7;\n  wchar_t local_44;\n  mbstate_t local_40 [2];\n  \n  if (param_1 < 0) {\n    param_1 = -param_1;\n    bVar4 = true;\n  }\n  else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }\n  local_40[0].__count = 0;\n  local_40[0].__value = (_union_27)0x0;\n  iVar7 = 0x7fffffff;\n  if (DAT_00196f50 == 0) {\n    iVar7 = param_1;\n  }\n  iVar6 = 0;\n  do {\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  } while (iVar7 != 0);\nLAB_00112370:\n  if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }\n  return iVar6;\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "byte *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "size_t sVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "wchar_t local_44;" type_identifier identifier ;) (declaration "mbstate_t local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (if_statement "if (param_1 < 0) {\n    param_1 = -param_1;\n    bVar4 = true;\n  }\n  else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }" if (parenthesized_expression "(param_1 < 0)" ( (binary_expression "param_1 < 0" identifier < number_literal) )) (compound_statement "{\n    param_1 = -param_1;\n    bVar4 = true;\n  }" { (expression_statement "param_1 = -param_1;" (assignment_expression "param_1 = -param_1" identifier = (unary_expression "-param_1" - identifier)) ;) (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;) }) (else_clause "else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }" else (compound_statement "{\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }" { (if_statement "if (param_1 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) }))) (expression_statement "local_40[0].__count = 0;" (assignment_expression "local_40[0].__count = 0" (field_expression "local_40[0].__count" (subscript_expression "local_40[0]" identifier [ number_literal ]) . field_identifier) = number_literal) ;) (expression_statement "local_40[0].__value = (_union_27)0x0;" (assignment_expression "local_40[0].__value = (_union_27)0x0" (field_expression "local_40[0].__value" (subscript_expression "local_40[0]" identifier [ number_literal ]) . field_identifier) = (cast_expression "(_union_27)0x0" ( (type_descriptor "_union_27" type_identifier) ) number_literal)) ;) (expression_statement "iVar7 = 0x7fffffff;" (assignment_expression "iVar7 = 0x7fffffff" identifier = number_literal) ;) (if_statement "if (DAT_00196f50 == 0) {\n    iVar7 = param_1;\n  }" if (parenthesized_expression "(DAT_00196f50 == 0)" ( (binary_expression "DAT_00196f50 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar7 = param_1;\n  }" { (expression_statement "iVar7 = param_1;" (assignment_expression "iVar7 = param_1" identifier = identifier) ;) })) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  } while (iVar7 != 0);" do (compound_statement "{\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  }" { (while_statement "while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }" { (expression_statement "bVar3 = *param_2;" (assignment_expression "bVar3 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "pbVar1 = param_2 + 1;" (assignment_expression "pbVar1 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (if_statement "if (bVar3 == 0) goto LAB_00112370;" if (parenthesized_expression "(bVar3 == 0)" ( (binary_expression "bVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00112370;" goto statement_identifier ;)) (if_statement "if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;" if (parenthesized_expression "((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0)" ( (binary_expression "(*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0" (parenthesized_expression "(*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2)" ( (binary_expression "*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2" (pointer_expression "*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2)" * (cast_expression "(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00187e40 + (ulong)bVar3 * 2)" ( (binary_expression "&DAT_00187e40 + (ulong)bVar3 * 2" (pointer_expression "&DAT_00187e40" & identifier) + (binary_expression "(ulong)bVar3 * 2" (cast_expression "(ulong)bVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) )))) & number_literal) )) == number_literal) )) (break_statement "break;" break ;)) (if_statement "if (iVar7 == 1) goto LAB_00112370;" if (parenthesized_expression "(iVar7 == 1)" ( (binary_expression "iVar7 == 1" identifier == number_literal) )) (goto_statement "goto LAB_00112370;" goto statement_identifier ;)) (expression_statement "iVar7 = iVar7 + -2;" (assignment_expression "iVar7 = iVar7 + -2" identifier = (binary_expression "iVar7 + -2" identifier + number_literal)) ;) (expression_statement "printf("^%c",(ulong)((int)(char)bVar3 + 0x40));" (call_expression "printf("^%c",(ulong)((int)(char)bVar3 + 0x40))" identifier (argument_list "("^%c",(ulong)((int)(char)bVar3 + 0x40))" ( (string_literal ""^%c"" " string_content ") , (call_expression "(ulong)((int)(char)bVar3 + 0x40)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((int)(char)bVar3 + 0x40)" ( (binary_expression "(int)(char)bVar3 + 0x40" (cast_expression "(int)(char)bVar3" ( (type_descriptor "int" primitive_type) ) (cast_expression "(char)bVar3" ( (type_descriptor "char" primitive_type) ) identifier)) + number_literal) ))) ))) ;) (expression_statement "iVar6 = iVar6 + 2;" (assignment_expression "iVar6 = iVar6 + 2" identifier = (binary_expression "iVar6 + 2" identifier + number_literal)) ;) (expression_statement "param_2 = pbVar1;" (assignment_expression "param_2 = pbVar1" identifier = identifier) ;) (labeled_statement "LAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;" statement_identifier : (if_statement "if (iVar7 == 0) goto LAB_00112370;" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00112370;" goto statement_identifier ;))) })) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (if_statement "if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }" if (parenthesized_expression "((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0)" ( (binary_expression "(*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0" (parenthesized_expression "(*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10)" ( (binary_expression "*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10" (pointer_expression "*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2)" * (cast_expression "(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00187e40 + (ulong)bVar3 * 2)" ( (binary_expression "&DAT_00187e40 + (ulong)bVar3 * 2" (pointer_expression "&DAT_00187e40" & identifier) + (binary_expression "(ulong)bVar3 * 2" (cast_expression "(ulong)bVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }" { (expression_statement "printf("%.1s",param_2);" (call_expression "printf("%.1s",param_2)" identifier (argument_list "("%.1s",param_2)" ( (string_literal ""%.1s"" " string_content ") , 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 "sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);" (assignment_expression "sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40)" identifier = (call_expression "mbrtowc(&local_44,(char *)param_2,sVar5,local_40)" identifier (argument_list "(&local_44,(char *)param_2,sVar5,local_40)" ( (pointer_expression "&local_44" & identifier) , (cast_expression "(char *)param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier )))) ;) (expression_statement "pbVar2 = param_2 + sVar5;" (assignment_expression "pbVar2 = param_2 + sVar5" identifier = (binary_expression "param_2 + sVar5" identifier + identifier)) ;) (expression_statement "param_2 = pbVar1;" (assignment_expression "param_2 = pbVar1" identifier = identifier) ;) (if_statement "if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }" if (parenthesized_expression "(sVar5 - 1 < 0xfffffffffffffffd)" ( (binary_expression "sVar5 - 1 < 0xfffffffffffffffd" (binary_expression "sVar5 - 1" identifier - number_literal) < number_literal) )) (compound_statement "{\n        param_2 = pbVar2;\n      }" { (expression_statement "param_2 = pbVar2;" (assignment_expression "param_2 = pbVar2" identifier = identifier) ;) })) (goto_statement "goto LAB_00112331;" goto statement_identifier ;) })) (expression_statement "putc((int)(char)bVar3,stdout);" (call_expression "putc((int)(char)bVar3,stdout)" identifier (argument_list "((int)(char)bVar3,stdout)" ( (cast_expression "(int)(char)bVar3" ( (type_descriptor "int" primitive_type) ) (cast_expression "(char)bVar3" ( (type_descriptor "char" primitive_type) ) identifier)) , identifier ))) ;) (expression_statement "param_2 = pbVar1;" (assignment_expression "param_2 = pbVar1" identifier = identifier) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) (labeled_statement "LAB_00112370:\n  if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }" statement_identifier : (if_statement "if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }" if (parenthesized_expression "((iVar6 < param_1) && (bVar4))" ( (binary_expression "(iVar6 < param_1) && (bVar4)" (parenthesized_expression "(iVar6 < param_1)" ( (binary_expression "iVar6 < param_1" identifier < identifier) )) && (parenthesized_expression "(bVar4)" ( identifier ))) )) (compound_statement "{\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }" { (expression_statement "printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);" (call_expression "printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397)" identifier (argument_list "("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397)" ( (string_literal ""%-*s"" " string_content ") , (call_expression "(ulong)(uint)(param_1 - iVar6)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uint)" ( identifier ))) (argument_list "(param_1 - iVar6)" ( (binary_expression "param_1 - iVar6" identifier - identifier) ))) , (pointer_expression "&DAT_0016a397" & identifier) ))) ;) (expression_statement "iVar6 = param_1;" (assignment_expression "iVar6 = param_1" identifier = identifier) ;) }))) (return_statement "return iVar6;" return identifier ;) })))
(translation_unit "uint print_symbol(wchar_t width,char *symbol)\n\n{\n  byte *pbVar1;\n  byte *pbVar2;\n  byte bVar3;\n  bool bVar4;\n  size_t sVar5;\n  wchar_t wVar6;\n  wchar_t wVar7;\n  wchar_t w;\n  mbstate_t state;\n  \n  if (width < L'\0') {\n    width = -width;\n    bVar4 = true;\n  }\n  else {\n    if (width == L'\0') {\n      return 0;\n    }\n    bVar4 = false;\n  }\n  state.__count = 0;\n  state.__value = (anon_union_4_2_91654ee9_for___value)0x0;\n  wVar7 = L'\x7fffffff';\n  if (do_wide == 0) {\n    wVar7 = width;\n  }\n  wVar6 = L'\0';\n  do {\n    while( true ) {\n      bVar3 = *symbol;\n      pbVar1 = (byte *)symbol + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((_sch_istable[bVar3] & 2) == 0) break;\n      if (wVar7 == L'\x01') goto LAB_00112370;\n      wVar7 = wVar7 + L'\xfffffffe';\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      wVar6 = wVar6 + L'\x02';\n      symbol = (char *)pbVar1;\nLAB_00112331:\n      if (wVar7 == L'\0') goto LAB_00112370;\n    }\n    wVar7 = wVar7 + L'\xffffffff';\n    wVar6 = wVar6 + L'\x01';\n    if ((_sch_istable[bVar3] & 0x10) == 0) {\n      printf("%.1s",symbol);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&w,symbol,sVar5,(mbstate_t *)&state);\n      pbVar2 = (byte *)symbol + sVar5;\n      symbol = (char *)pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        symbol = (char *)pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    symbol = (char *)pbVar1;\n  } while (wVar7 != L'\0');\nLAB_00112370:\n  if ((wVar6 < width) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(width - wVar6),&DAT_0016a397);\n    wVar6 = width;\n  }\n  return wVar6;\n}\n\n" (function_definition "uint print_symbol(wchar_t width,char *symbol)\n\n{\n  byte *pbVar1;\n  byte *pbVar2;\n  byte bVar3;\n  bool bVar4;\n  size_t sVar5;\n  wchar_t wVar6;\n  wchar_t wVar7;\n  wchar_t w;\n  mbstate_t state;\n  \n  if (width < L'\0') {\n    width = -width;\n    bVar4 = true;\n  }\n  else {\n    if (width == L'\0') {\n      return 0;\n    }\n    bVar4 = false;\n  }\n  state.__count = 0;\n  state.__value = (anon_union_4_2_91654ee9_for___value)0x0;\n  wVar7 = L'\x7fffffff';\n  if (do_wide == 0) {\n    wVar7 = width;\n  }\n  wVar6 = L'\0';\n  do {\n    while( true ) {\n      bVar3 = *symbol;\n      pbVar1 = (byte *)symbol + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((_sch_istable[bVar3] & 2) == 0) break;\n      if (wVar7 == L'\x01') goto LAB_00112370;\n      wVar7 = wVar7 + L'\xfffffffe';\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      wVar6 = wVar6 + L'\x02';\n      symbol = (char *)pbVar1;\nLAB_00112331:\n      if (wVar7 == L'\0') goto LAB_00112370;\n    }\n    wVar7 = wVar7 + L'\xffffffff';\n    wVar6 = wVar6 + L'\x01';\n    if ((_sch_istable[bVar3] & 0x10) == 0) {\n      printf("%.1s",symbol);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&w,symbol,sVar5,(mbstate_t *)&state);\n      pbVar2 = (byte *)symbol + sVar5;\n      symbol = (char *)pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        symbol = (char *)pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    symbol = (char *)pbVar1;\n  } while (wVar7 != L'\0');\nLAB_00112370:\n  if ((wVar6 < width) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(width - wVar6),&DAT_0016a397);\n    wVar6 = width;\n  }\n  return wVar6;\n}" type_identifier (function_declarator "print_symbol(wchar_t width,char *symbol)" identifier (parameter_list "(wchar_t width,char *symbol)" ( (parameter_declaration "wchar_t width" type_identifier identifier) , (parameter_declaration "char *symbol" primitive_type (pointer_declarator "*symbol" * identifier)) ))) (compound_statement "{\n  byte *pbVar1;\n  byte *pbVar2;\n  byte bVar3;\n  bool bVar4;\n  size_t sVar5;\n  wchar_t wVar6;\n  wchar_t wVar7;\n  wchar_t w;\n  mbstate_t state;\n  \n  if (width < L'\0') {\n    width = -width;\n    bVar4 = true;\n  }\n  else {\n    if (width == L'\0') {\n      return 0;\n    }\n    bVar4 = false;\n  }\n  state.__count = 0;\n  state.__value = (anon_union_4_2_91654ee9_for___value)0x0;\n  wVar7 = L'\x7fffffff';\n  if (do_wide == 0) {\n    wVar7 = width;\n  }\n  wVar6 = L'\0';\n  do {\n    while( true ) {\n      bVar3 = *symbol;\n      pbVar1 = (byte *)symbol + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((_sch_istable[bVar3] & 2) == 0) break;\n      if (wVar7 == L'\x01') goto LAB_00112370;\n      wVar7 = wVar7 + L'\xfffffffe';\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      wVar6 = wVar6 + L'\x02';\n      symbol = (char *)pbVar1;\nLAB_00112331:\n      if (wVar7 == L'\0') goto LAB_00112370;\n    }\n    wVar7 = wVar7 + L'\xffffffff';\n    wVar6 = wVar6 + L'\x01';\n    if ((_sch_istable[bVar3] & 0x10) == 0) {\n      printf("%.1s",symbol);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&w,symbol,sVar5,(mbstate_t *)&state);\n      pbVar2 = (byte *)symbol + sVar5;\n      symbol = (char *)pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        symbol = (char *)pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    symbol = (char *)pbVar1;\n  } while (wVar7 != L'\0');\nLAB_00112370:\n  if ((wVar6 < width) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(width - wVar6),&DAT_0016a397);\n    wVar6 = width;\n  }\n  return wVar6;\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "byte *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "size_t sVar5;" primitive_type identifier ;) (declaration "wchar_t wVar6;" type_identifier identifier ;) (declaration "wchar_t wVar7;" type_identifier identifier ;) (declaration "wchar_t w;" type_identifier identifier ;) (declaration "mbstate_t state;" type_identifier identifier ;) (if_statement "if (width < L'\0') {\n    width = -width;\n    bVar4 = true;\n  }\n  else {\n    if (width == L'\0') {\n      return 0;\n    }\n    bVar4 = false;\n  }" if (parenthesized_expression "(width < L'\0')" ( (binary_expression "width < L'\0'" identifier < (char_literal "L'\0'" L' escape_sequence ')) )) (compound_statement "{\n    width = -width;\n    bVar4 = true;\n  }" { (expression_statement "width = -width;" (assignment_expression "width = -width" identifier = (unary_expression "-width" - identifier)) ;) (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;) }) (else_clause "else {\n    if (width == L'\0') {\n      return 0;\n    }\n    bVar4 = false;\n  }" else (compound_statement "{\n    if (width == L'\0') {\n      return 0;\n    }\n    bVar4 = false;\n  }" { (if_statement "if (width == L'\0') {\n      return 0;\n    }" if (parenthesized_expression "(width == L'\0')" ( (binary_expression "width == L'\0'" identifier == (char_literal "L'\0'" L' escape_sequence ')) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) }))) (expression_statement "state.__count = 0;" (assignment_expression "state.__count = 0" (field_expression "state.__count" identifier . field_identifier) = number_literal) ;) (expression_statement "state.__value = (anon_union_4_2_91654ee9_for___value)0x0;" (assignment_expression "state.__value = (anon_union_4_2_91654ee9_for___value)0x0" (field_expression "state.__value" 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 "wVar7 = L'\x7fffffff';" (assignment_expression "wVar7 = L'\x7fffffff'" identifier = (char_literal "L'\x7fffffff'" L' escape_sequence character character character character ')) ;) (if_statement "if (do_wide == 0) {\n    wVar7 = width;\n  }" if (parenthesized_expression "(do_wide == 0)" ( (binary_expression "do_wide == 0" identifier == number_literal) )) (compound_statement "{\n    wVar7 = width;\n  }" { (expression_statement "wVar7 = width;" (assignment_expression "wVar7 = width" identifier = identifier) ;) })) (expression_statement "wVar6 = L'\0';" (assignment_expression "wVar6 = L'\0'" identifier = (char_literal "L'\0'" L' escape_sequence ')) ;) (do_statement "do {\n    while( true ) {\n      bVar3 = *symbol;\n      pbVar1 = (byte *)symbol + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((_sch_istable[bVar3] & 2) == 0) break;\n      if (wVar7 == L'\x01') goto LAB_00112370;\n      wVar7 = wVar7 + L'\xfffffffe';\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      wVar6 = wVar6 + L'\x02';\n      symbol = (char *)pbVar1;\nLAB_00112331:\n      if (wVar7 == L'\0') goto LAB_00112370;\n    }\n    wVar7 = wVar7 + L'\xffffffff';\n    wVar6 = wVar6 + L'\x01';\n    if ((_sch_istable[bVar3] & 0x10) == 0) {\n      printf("%.1s",symbol);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&w,symbol,sVar5,(mbstate_t *)&state);\n      pbVar2 = (byte *)symbol + sVar5;\n      symbol = (char *)pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        symbol = (char *)pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    symbol = (char *)pbVar1;\n  } while (wVar7 != L'\0');" do (compound_statement "{\n    while( true ) {\n      bVar3 = *symbol;\n      pbVar1 = (byte *)symbol + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((_sch_istable[bVar3] & 2) == 0) break;\n      if (wVar7 == L'\x01') goto LAB_00112370;\n      wVar7 = wVar7 + L'\xfffffffe';\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      wVar6 = wVar6 + L'\x02';\n      symbol = (char *)pbVar1;\nLAB_00112331:\n      if (wVar7 == L'\0') goto LAB_00112370;\n    }\n    wVar7 = wVar7 + L'\xffffffff';\n    wVar6 = wVar6 + L'\x01';\n    if ((_sch_istable[bVar3] & 0x10) == 0) {\n      printf("%.1s",symbol);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&w,symbol,sVar5,(mbstate_t *)&state);\n      pbVar2 = (byte *)symbol + sVar5;\n      symbol = (char *)pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        symbol = (char *)pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    symbol = (char *)pbVar1;\n  }" { (while_statement "while( true ) {\n      bVar3 = *symbol;\n      pbVar1 = (byte *)symbol + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((_sch_istable[bVar3] & 2) == 0) break;\n      if (wVar7 == L'\x01') goto LAB_00112370;\n      wVar7 = wVar7 + L'\xfffffffe';\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      wVar6 = wVar6 + L'\x02';\n      symbol = (char *)pbVar1;\nLAB_00112331:\n      if (wVar7 == L'\0') goto LAB_00112370;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      bVar3 = *symbol;\n      pbVar1 = (byte *)symbol + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((_sch_istable[bVar3] & 2) == 0) break;\n      if (wVar7 == L'\x01') goto LAB_00112370;\n      wVar7 = wVar7 + L'\xfffffffe';\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      wVar6 = wVar6 + L'\x02';\n      symbol = (char *)pbVar1;\nLAB_00112331:\n      if (wVar7 == L'\0') goto LAB_00112370;\n    }" { (expression_statement "bVar3 = *symbol;" (assignment_expression "bVar3 = *symbol" identifier = (pointer_expression "*symbol" * identifier)) ;) (expression_statement "pbVar1 = (byte *)symbol + 1;" (assignment_expression "pbVar1 = (byte *)symbol + 1" identifier = (binary_expression "(byte *)symbol + 1" (cast_expression "(byte *)symbol" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) + number_literal)) ;) (if_statement "if (bVar3 == 0) goto LAB_00112370;" if (parenthesized_expression "(bVar3 == 0)" ( (binary_expression "bVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00112370;" goto statement_identifier ;)) (if_statement "if ((_sch_istable[bVar3] & 2) == 0) break;" if (parenthesized_expression "((_sch_istable[bVar3] & 2) == 0)" ( (binary_expression "(_sch_istable[bVar3] & 2) == 0" (parenthesized_expression "(_sch_istable[bVar3] & 2)" ( (binary_expression "_sch_istable[bVar3] & 2" (subscript_expression "_sch_istable[bVar3]" identifier [ identifier ]) & number_literal) )) == number_literal) )) (break_statement "break;" break ;)) (if_statement "if (wVar7 == L'\x01') goto LAB_00112370;" if (parenthesized_expression "(wVar7 == L'\x01')" ( (binary_expression "wVar7 == L'\x01'" identifier == (char_literal "L'\x01'" L' escape_sequence ')) )) (goto_statement "goto LAB_00112370;" goto statement_identifier ;)) (expression_statement "wVar7 = wVar7 + L'\xfffffffe';" (assignment_expression "wVar7 = wVar7 + L'\xfffffffe'" identifier = (binary_expression "wVar7 + L'\xfffffffe'" identifier + (char_literal "L'\xfffffffe'" L' escape_sequence character character character character '))) ;) (expression_statement "printf("^%c",(ulong)((int)(char)bVar3 + 0x40));" (call_expression "printf("^%c",(ulong)((int)(char)bVar3 + 0x40))" identifier (argument_list "("^%c",(ulong)((int)(char)bVar3 + 0x40))" ( (string_literal ""^%c"" " string_content ") , (call_expression "(ulong)((int)(char)bVar3 + 0x40)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((int)(char)bVar3 + 0x40)" ( (binary_expression "(int)(char)bVar3 + 0x40" (cast_expression "(int)(char)bVar3" ( (type_descriptor "int" primitive_type) ) (cast_expression "(char)bVar3" ( (type_descriptor "char" primitive_type) ) identifier)) + number_literal) ))) ))) ;) (expression_statement "wVar6 = wVar6 + L'\x02';" (assignment_expression "wVar6 = wVar6 + L'\x02'" identifier = (binary_expression "wVar6 + L'\x02'" identifier + (char_literal "L'\x02'" L' escape_sequence '))) ;) (expression_statement "symbol = (char *)pbVar1;" (assignment_expression "symbol = (char *)pbVar1" identifier = (cast_expression "(char *)pbVar1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (labeled_statement "LAB_00112331:\n      if (wVar7 == L'\0') goto LAB_00112370;" statement_identifier : (if_statement "if (wVar7 == L'\0') goto LAB_00112370;" if (parenthesized_expression "(wVar7 == L'\0')" ( (binary_expression "wVar7 == L'\0'" identifier == (char_literal "L'\0'" L' escape_sequence ')) )) (goto_statement "goto LAB_00112370;" goto statement_identifier ;))) })) (expression_statement "wVar7 = wVar7 + L'\xffffffff';" (assignment_expression "wVar7 = wVar7 + L'\xffffffff'" identifier = (binary_expression "wVar7 + L'\xffffffff'" identifier + (char_literal "L'\xffffffff'" L' escape_sequence character character character character '))) ;) (expression_statement "wVar6 = wVar6 + L'\x01';" (assignment_expression "wVar6 = wVar6 + L'\x01'" identifier = (binary_expression "wVar6 + L'\x01'" identifier + (char_literal "L'\x01'" L' escape_sequence '))) ;) (if_statement "if ((_sch_istable[bVar3] & 0x10) == 0) {\n      printf("%.1s",symbol);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&w,symbol,sVar5,(mbstate_t *)&state);\n      pbVar2 = (byte *)symbol + sVar5;\n      symbol = (char *)pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        symbol = (char *)pbVar2;\n      }\n      goto LAB_00112331;\n    }" if (parenthesized_expression "((_sch_istable[bVar3] & 0x10) == 0)" ( (binary_expression "(_sch_istable[bVar3] & 0x10) == 0" (parenthesized_expression "(_sch_istable[bVar3] & 0x10)" ( (binary_expression "_sch_istable[bVar3] & 0x10" (subscript_expression "_sch_istable[bVar3]" identifier [ identifier ]) & number_literal) )) == number_literal) )) (compound_statement "{\n      printf("%.1s",symbol);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&w,symbol,sVar5,(mbstate_t *)&state);\n      pbVar2 = (byte *)symbol + sVar5;\n      symbol = (char *)pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        symbol = (char *)pbVar2;\n      }\n      goto LAB_00112331;\n    }" { (expression_statement "printf("%.1s",symbol);" (call_expression "printf("%.1s",symbol)" identifier (argument_list "("%.1s",symbol)" ( (string_literal ""%.1s"" " string_content ") , 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 "sVar5 = mbrtowc(&w,symbol,sVar5,(mbstate_t *)&state);" (assignment_expression "sVar5 = mbrtowc(&w,symbol,sVar5,(mbstate_t *)&state)" identifier = (call_expression "mbrtowc(&w,symbol,sVar5,(mbstate_t *)&state)" identifier (argument_list "(&w,symbol,sVar5,(mbstate_t *)&state)" ( (pointer_expression "&w" & identifier) , identifier , identifier , (cast_expression "(mbstate_t *)&state" ( (type_descriptor "mbstate_t *" type_identifier (abstract_pointer_declarator "*" *)) ) (pointer_expression "&state" & identifier)) )))) ;) (expression_statement "pbVar2 = (byte *)symbol + sVar5;" (assignment_expression "pbVar2 = (byte *)symbol + sVar5" identifier = (binary_expression "(byte *)symbol + sVar5" (cast_expression "(byte *)symbol" ( (type_descriptor "byte *" type_identifier (abstract_pointer_declarator "*" *)) ) identifier) + identifier)) ;) (expression_statement "symbol = (char *)pbVar1;" (assignment_expression "symbol = (char *)pbVar1" identifier = (cast_expression "(char *)pbVar1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) (if_statement "if (sVar5 - 1 < 0xfffffffffffffffd) {\n        symbol = (char *)pbVar2;\n      }" if (parenthesized_expression "(sVar5 - 1 < 0xfffffffffffffffd)" ( (binary_expression "sVar5 - 1 < 0xfffffffffffffffd" (binary_expression "sVar5 - 1" identifier - number_literal) < number_literal) )) (compound_statement "{\n        symbol = (char *)pbVar2;\n      }" { (expression_statement "symbol = (char *)pbVar2;" (assignment_expression "symbol = (char *)pbVar2" identifier = (cast_expression "(char *)pbVar2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) })) (goto_statement "goto LAB_00112331;" goto statement_identifier ;) })) (expression_statement "putc((int)(char)bVar3,stdout);" (call_expression "putc((int)(char)bVar3,stdout)" identifier (argument_list "((int)(char)bVar3,stdout)" ( (cast_expression "(int)(char)bVar3" ( (type_descriptor "int" primitive_type) ) (cast_expression "(char)bVar3" ( (type_descriptor "char" primitive_type) ) identifier)) , identifier ))) ;) (expression_statement "symbol = (char *)pbVar1;" (assignment_expression "symbol = (char *)pbVar1" identifier = (cast_expression "(char *)pbVar1" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier)) ;) }) while (parenthesized_expression "(wVar7 != L'\0')" ( (binary_expression "wVar7 != L'\0'" identifier != (char_literal "L'\0'" L' escape_sequence ')) )) ;) (labeled_statement "LAB_00112370:\n  if ((wVar6 < width) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(width - wVar6),&DAT_0016a397);\n    wVar6 = width;\n  }" statement_identifier : (if_statement "if ((wVar6 < width) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(width - wVar6),&DAT_0016a397);\n    wVar6 = width;\n  }" if (parenthesized_expression "((wVar6 < width) && (bVar4))" ( (binary_expression "(wVar6 < width) && (bVar4)" (parenthesized_expression "(wVar6 < width)" ( (binary_expression "wVar6 < width" identifier < identifier) )) && (parenthesized_expression "(bVar4)" ( identifier ))) )) (compound_statement "{\n    printf("%-*s",(ulong)(uint)(width - wVar6),&DAT_0016a397);\n    wVar6 = width;\n  }" { (expression_statement "printf("%-*s",(ulong)(uint)(width - wVar6),&DAT_0016a397);" (call_expression "printf("%-*s",(ulong)(uint)(width - wVar6),&DAT_0016a397)" identifier (argument_list "("%-*s",(ulong)(uint)(width - wVar6),&DAT_0016a397)" ( (string_literal ""%-*s"" " string_content ") , (call_expression "(ulong)(uint)(width - wVar6)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uint)" ( identifier ))) (argument_list "(width - wVar6)" ( (binary_expression "width - wVar6" identifier - identifier) ))) , (pointer_expression "&DAT_0016a397" & identifier) ))) ;) (expression_statement "wVar6 = width;" (assignment_expression "wVar6 = width" identifier = identifier) ;) }))) (return_statement "return wVar6;" return identifier ;) })))
(translation_unit "int FUN_001122a0(int param_1,byte *param_2)\n\n{\n  byte *pbVar1;\n  byte *pbVar2;\n  byte bVar3;\n  bool bVar4;\n  size_t sVar5;\n  int iVar6;\n  int iVar7;\n  wchar_t local_44;\n  mbstate_t local_40 [2];\n  \n  if (param_1 < 0) {\n    param_1 = -param_1;\n    bVar4 = true;\n  }\n  else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }\n  local_40[0].__count = 0;\n  local_40[0].__value = (_union_27)0x0;\n  iVar7 = 0x7fffffff;\n  if (DAT_00196f50 == 0) {\n    iVar7 = param_1;\n  }\n  iVar6 = 0;\n  do {\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  } while (iVar7 != 0);\nLAB_00112370:\n  if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }\n  return iVar6;\n}\n\n" (function_definition "int FUN_001122a0(int param_1,byte *param_2)\n\n{\n  byte *pbVar1;\n  byte *pbVar2;\n  byte bVar3;\n  bool bVar4;\n  size_t sVar5;\n  int iVar6;\n  int iVar7;\n  wchar_t local_44;\n  mbstate_t local_40 [2];\n  \n  if (param_1 < 0) {\n    param_1 = -param_1;\n    bVar4 = true;\n  }\n  else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }\n  local_40[0].__count = 0;\n  local_40[0].__value = (_union_27)0x0;\n  iVar7 = 0x7fffffff;\n  if (DAT_00196f50 == 0) {\n    iVar7 = param_1;\n  }\n  iVar6 = 0;\n  do {\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  } while (iVar7 != 0);\nLAB_00112370:\n  if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }\n  return iVar6;\n}" primitive_type (function_declarator "FUN_001122a0(int param_1,byte *param_2)" identifier (parameter_list "(int param_1,byte *param_2)" ( (parameter_declaration "int param_1" primitive_type identifier) , (parameter_declaration "byte *param_2" type_identifier (pointer_declarator "*param_2" * identifier)) ))) (compound_statement "{\n  byte *pbVar1;\n  byte *pbVar2;\n  byte bVar3;\n  bool bVar4;\n  size_t sVar5;\n  int iVar6;\n  int iVar7;\n  wchar_t local_44;\n  mbstate_t local_40 [2];\n  \n  if (param_1 < 0) {\n    param_1 = -param_1;\n    bVar4 = true;\n  }\n  else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }\n  local_40[0].__count = 0;\n  local_40[0].__value = (_union_27)0x0;\n  iVar7 = 0x7fffffff;\n  if (DAT_00196f50 == 0) {\n    iVar7 = param_1;\n  }\n  iVar6 = 0;\n  do {\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  } while (iVar7 != 0);\nLAB_00112370:\n  if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }\n  return iVar6;\n}" { (declaration "byte *pbVar1;" type_identifier (pointer_declarator "*pbVar1" * identifier) ;) (declaration "byte *pbVar2;" type_identifier (pointer_declarator "*pbVar2" * identifier) ;) (declaration "byte bVar3;" type_identifier identifier ;) (declaration "bool bVar4;" primitive_type identifier ;) (declaration "size_t sVar5;" primitive_type identifier ;) (declaration "int iVar6;" primitive_type identifier ;) (declaration "int iVar7;" primitive_type identifier ;) (declaration "wchar_t local_44;" type_identifier identifier ;) (declaration "mbstate_t local_40 [2];" type_identifier (array_declarator "local_40 [2]" identifier [ number_literal ]) ;) (if_statement "if (param_1 < 0) {\n    param_1 = -param_1;\n    bVar4 = true;\n  }\n  else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }" if (parenthesized_expression "(param_1 < 0)" ( (binary_expression "param_1 < 0" identifier < number_literal) )) (compound_statement "{\n    param_1 = -param_1;\n    bVar4 = true;\n  }" { (expression_statement "param_1 = -param_1;" (assignment_expression "param_1 = -param_1" identifier = (unary_expression "-param_1" - identifier)) ;) (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" identifier = true) ;) }) (else_clause "else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }" else (compound_statement "{\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }" { (if_statement "if (param_1 == 0) {\n      return 0;\n    }" if (parenthesized_expression "(param_1 == 0)" ( (binary_expression "param_1 == 0" identifier == number_literal) )) (compound_statement "{\n      return 0;\n    }" { (return_statement "return 0;" return number_literal ;) })) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" identifier = false) ;) }))) (expression_statement "local_40[0].__count = 0;" (assignment_expression "local_40[0].__count = 0" (field_expression "local_40[0].__count" (subscript_expression "local_40[0]" identifier [ number_literal ]) . field_identifier) = number_literal) ;) (expression_statement "local_40[0].__value = (_union_27)0x0;" (assignment_expression "local_40[0].__value = (_union_27)0x0" (field_expression "local_40[0].__value" (subscript_expression "local_40[0]" identifier [ number_literal ]) . field_identifier) = (cast_expression "(_union_27)0x0" ( (type_descriptor "_union_27" type_identifier) ) number_literal)) ;) (expression_statement "iVar7 = 0x7fffffff;" (assignment_expression "iVar7 = 0x7fffffff" identifier = number_literal) ;) (if_statement "if (DAT_00196f50 == 0) {\n    iVar7 = param_1;\n  }" if (parenthesized_expression "(DAT_00196f50 == 0)" ( (binary_expression "DAT_00196f50 == 0" identifier == number_literal) )) (compound_statement "{\n    iVar7 = param_1;\n  }" { (expression_statement "iVar7 = param_1;" (assignment_expression "iVar7 = param_1" identifier = identifier) ;) })) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" identifier = number_literal) ;) (do_statement "do {\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  } while (iVar7 != 0);" do (compound_statement "{\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  }" { (while_statement "while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }" while (parenthesized_expression "( true )" ( true )) (compound_statement "{\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }" { (expression_statement "bVar3 = *param_2;" (assignment_expression "bVar3 = *param_2" identifier = (pointer_expression "*param_2" * identifier)) ;) (expression_statement "pbVar1 = param_2 + 1;" (assignment_expression "pbVar1 = param_2 + 1" identifier = (binary_expression "param_2 + 1" identifier + number_literal)) ;) (if_statement "if (bVar3 == 0) goto LAB_00112370;" if (parenthesized_expression "(bVar3 == 0)" ( (binary_expression "bVar3 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00112370;" goto statement_identifier ;)) (if_statement "if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;" if (parenthesized_expression "((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0)" ( (binary_expression "(*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0" (parenthesized_expression "(*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2)" ( (binary_expression "*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2" (pointer_expression "*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2)" * (cast_expression "(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00187e40 + (ulong)bVar3 * 2)" ( (binary_expression "&DAT_00187e40 + (ulong)bVar3 * 2" (pointer_expression "&DAT_00187e40" & identifier) + (binary_expression "(ulong)bVar3 * 2" (cast_expression "(ulong)bVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) )))) & number_literal) )) == number_literal) )) (break_statement "break;" break ;)) (if_statement "if (iVar7 == 1) goto LAB_00112370;" if (parenthesized_expression "(iVar7 == 1)" ( (binary_expression "iVar7 == 1" identifier == number_literal) )) (goto_statement "goto LAB_00112370;" goto statement_identifier ;)) (expression_statement "iVar7 = iVar7 + -2;" (assignment_expression "iVar7 = iVar7 + -2" identifier = (binary_expression "iVar7 + -2" identifier + number_literal)) ;) (expression_statement "printf("^%c",(ulong)((int)(char)bVar3 + 0x40));" (call_expression "printf("^%c",(ulong)((int)(char)bVar3 + 0x40))" identifier (argument_list "("^%c",(ulong)((int)(char)bVar3 + 0x40))" ( (string_literal ""^%c"" " string_content ") , (call_expression "(ulong)((int)(char)bVar3 + 0x40)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "((int)(char)bVar3 + 0x40)" ( (binary_expression "(int)(char)bVar3 + 0x40" (cast_expression "(int)(char)bVar3" ( (type_descriptor "int" primitive_type) ) (cast_expression "(char)bVar3" ( (type_descriptor "char" primitive_type) ) identifier)) + number_literal) ))) ))) ;) (expression_statement "iVar6 = iVar6 + 2;" (assignment_expression "iVar6 = iVar6 + 2" identifier = (binary_expression "iVar6 + 2" identifier + number_literal)) ;) (expression_statement "param_2 = pbVar1;" (assignment_expression "param_2 = pbVar1" identifier = identifier) ;) (labeled_statement "LAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;" statement_identifier : (if_statement "if (iVar7 == 0) goto LAB_00112370;" if (parenthesized_expression "(iVar7 == 0)" ( (binary_expression "iVar7 == 0" identifier == number_literal) )) (goto_statement "goto LAB_00112370;" goto statement_identifier ;))) })) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" identifier = (binary_expression "iVar7 + -1" identifier + number_literal)) ;) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" identifier = (binary_expression "iVar6 + 1" identifier + number_literal)) ;) (if_statement "if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }" if (parenthesized_expression "((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0)" ( (binary_expression "(*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0" (parenthesized_expression "(*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10)" ( (binary_expression "*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10" (pointer_expression "*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2)" * (cast_expression "(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2)" ( (type_descriptor "ushort *" type_identifier (abstract_pointer_declarator "*" *)) ) (parenthesized_expression "(&DAT_00187e40 + (ulong)bVar3 * 2)" ( (binary_expression "&DAT_00187e40 + (ulong)bVar3 * 2" (pointer_expression "&DAT_00187e40" & identifier) + (binary_expression "(ulong)bVar3 * 2" (cast_expression "(ulong)bVar3" ( (type_descriptor "ulong" type_identifier) ) identifier) * number_literal)) )))) & number_literal) )) == number_literal) )) (compound_statement "{\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }" { (expression_statement "printf("%.1s",param_2);" (call_expression "printf("%.1s",param_2)" identifier (argument_list "("%.1s",param_2)" ( (string_literal ""%.1s"" " string_content ") , 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 "sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);" (assignment_expression "sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40)" identifier = (call_expression "mbrtowc(&local_44,(char *)param_2,sVar5,local_40)" identifier (argument_list "(&local_44,(char *)param_2,sVar5,local_40)" ( (pointer_expression "&local_44" & identifier) , (cast_expression "(char *)param_2" ( (type_descriptor "char *" primitive_type (abstract_pointer_declarator "*" *)) ) identifier) , identifier , identifier )))) ;) (expression_statement "pbVar2 = param_2 + sVar5;" (assignment_expression "pbVar2 = param_2 + sVar5" identifier = (binary_expression "param_2 + sVar5" identifier + identifier)) ;) (expression_statement "param_2 = pbVar1;" (assignment_expression "param_2 = pbVar1" identifier = identifier) ;) (if_statement "if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }" if (parenthesized_expression "(sVar5 - 1 < 0xfffffffffffffffd)" ( (binary_expression "sVar5 - 1 < 0xfffffffffffffffd" (binary_expression "sVar5 - 1" identifier - number_literal) < number_literal) )) (compound_statement "{\n        param_2 = pbVar2;\n      }" { (expression_statement "param_2 = pbVar2;" (assignment_expression "param_2 = pbVar2" identifier = identifier) ;) })) (goto_statement "goto LAB_00112331;" goto statement_identifier ;) })) (expression_statement "putc((int)(char)bVar3,stdout);" (call_expression "putc((int)(char)bVar3,stdout)" identifier (argument_list "((int)(char)bVar3,stdout)" ( (cast_expression "(int)(char)bVar3" ( (type_descriptor "int" primitive_type) ) (cast_expression "(char)bVar3" ( (type_descriptor "char" primitive_type) ) identifier)) , identifier ))) ;) (expression_statement "param_2 = pbVar1;" (assignment_expression "param_2 = pbVar1" identifier = identifier) ;) }) while (parenthesized_expression "(iVar7 != 0)" ( (binary_expression "iVar7 != 0" identifier != number_literal) )) ;) (labeled_statement "LAB_00112370:\n  if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }" statement_identifier : (if_statement "if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }" if (parenthesized_expression "((iVar6 < param_1) && (bVar4))" ( (binary_expression "(iVar6 < param_1) && (bVar4)" (parenthesized_expression "(iVar6 < param_1)" ( (binary_expression "iVar6 < param_1" identifier < identifier) )) && (parenthesized_expression "(bVar4)" ( identifier ))) )) (compound_statement "{\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }" { (expression_statement "printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);" (call_expression "printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397)" identifier (argument_list "("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397)" ( (string_literal ""%-*s"" " string_content ") , (call_expression "(ulong)(uint)(param_1 - iVar6)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" ( identifier )) (argument_list "(uint)" ( identifier ))) (argument_list "(param_1 - iVar6)" ( (binary_expression "param_1 - iVar6" identifier - identifier) ))) , (pointer_expression "&DAT_0016a397" & identifier) ))) ;) (expression_statement "iVar6 = param_1;" (assignment_expression "iVar6 = param_1" identifier = identifier) ;) }))) (return_statement "return iVar6;" return identifier ;) })))
(translation_unit (function_definition TYPE (function_declarator IDENT (parameter_list ( (parameter_declaration TYPE IDENT) , (parameter_declaration TYPE (pointer_declarator * IDENT)) ))) (compound_statement { (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE (pointer_declarator * IDENT) ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE IDENT ;) (declaration TYPE (array_declarator IDENT [ LIT ]) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = (unary_expression - IDENT)) ;) (expression_statement (assignment_expression IDENT = BOOL) ;) }) (else_clause else (compound_statement { (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (return_statement return LIT ;) })) (expression_statement (assignment_expression IDENT = BOOL) ;) }))) (expression_statement (assignment_expression (field_expression (subscript_expression IDENT [ LIT ]) . field_identifier) = LIT) ;) (expression_statement (assignment_expression (field_expression (subscript_expression IDENT [ LIT ]) . field_identifier) = (cast_expression ( (type_descriptor TYPE) ) LIT)) ;) (expression_statement (assignment_expression IDENT = LIT) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (expression_statement (assignment_expression IDENT = LIT) ;) (do_statement do (compound_statement { (while_statement while (parenthesized_expression ( BOOL )) (compound_statement { (expression_statement (assignment_expression IDENT = (pointer_expression * IDENT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) )))) & LIT) )) == LIT) )) (break_statement break ;)) (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;)) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (call_expression (parenthesized_expression ( IDENT )) (argument_list ( (binary_expression (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) + LIT) ))) ))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression IDENT == LIT) )) (goto_statement goto statement_identifier ;))) })) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + LIT)) ;) (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression (pointer_expression * (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) (parenthesized_expression ( (binary_expression (pointer_expression & IDENT) + (binary_expression (cast_expression ( (type_descriptor TYPE) ) IDENT) * LIT)) )))) & LIT) )) == LIT) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , IDENT ))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( )))) ;) (expression_statement (assignment_expression IDENT = (call_expression IDENT (argument_list ( (pointer_expression & IDENT) , (cast_expression ( (type_descriptor TYPE (abstract_pointer_declarator *)) ) IDENT) , IDENT , IDENT )))) ;) (expression_statement (assignment_expression IDENT = (binary_expression IDENT + IDENT)) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) (if_statement if (parenthesized_expression ( (binary_expression (binary_expression IDENT - LIT) < LIT) )) (compound_statement { (expression_statement (assignment_expression IDENT = IDENT) ;) })) (goto_statement goto statement_identifier ;) })) (expression_statement (call_expression IDENT (argument_list ( (cast_expression ( (type_descriptor TYPE) ) (cast_expression ( (type_descriptor TYPE) ) IDENT)) , IDENT ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }) while (parenthesized_expression ( (binary_expression IDENT != LIT) )) ;) (labeled_statement statement_identifier : (if_statement if (parenthesized_expression ( (binary_expression (parenthesized_expression ( (binary_expression IDENT < IDENT) )) && (parenthesized_expression ( IDENT ))) )) (compound_statement { (expression_statement (call_expression IDENT (argument_list ( (string_literal " string_content ") , (call_expression (call_expression (parenthesized_expression ( IDENT )) (argument_list ( IDENT ))) (argument_list ( (binary_expression IDENT - IDENT) ))) , (pointer_expression & IDENT) ))) ;) (expression_statement (assignment_expression IDENT = IDENT) ;) }))) (return_statement return IDENT ;) })))
(function_definition "int FUN_001122a0(int param_1,byte *param_2)\n\n{\n  byte *pbVar1;\n  byte *pbVar2;\n  byte bVar3;\n  bool bVar4;\n  size_t sVar5;\n  int iVar6;\n  int iVar7;\n  wchar_t local_44;\n  mbstate_t local_40 [2];\n  \n  if (param_1 < 0) {\n    param_1 = -param_1;\n    bVar4 = true;\n  }\n  else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }\n  local_40[0].__count = 0;\n  local_40[0].__value = (_union_27)0x0;\n  iVar7 = 0x7fffffff;\n  if (DAT_00196f50 == 0) {\n    iVar7 = param_1;\n  }\n  iVar6 = 0;\n  do {\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  } while (iVar7 != 0);\nLAB_00112370:\n  if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }\n  return iVar6;\n}" (primitive_type "int") (function_declarator "FUN_001122a0(int param_1,byte *param_2)" (identifier "FUN_001122a0") (parameter_list "(int param_1,byte *param_2)" (( "(") (parameter_declaration "int param_1" (primitive_type "int") (identifier "param_1")) (, ",") (parameter_declaration "byte *param_2" (type_identifier "byte") (pointer_declarator "*param_2" (* "*") (identifier "param_2"))) () ")"))) (compound_statement "{\n  byte *pbVar1;\n  byte *pbVar2;\n  byte bVar3;\n  bool bVar4;\n  size_t sVar5;\n  int iVar6;\n  int iVar7;\n  wchar_t local_44;\n  mbstate_t local_40 [2];\n  \n  if (param_1 < 0) {\n    param_1 = -param_1;\n    bVar4 = true;\n  }\n  else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }\n  local_40[0].__count = 0;\n  local_40[0].__value = (_union_27)0x0;\n  iVar7 = 0x7fffffff;\n  if (DAT_00196f50 == 0) {\n    iVar7 = param_1;\n  }\n  iVar6 = 0;\n  do {\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  } while (iVar7 != 0);\nLAB_00112370:\n  if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }\n  return iVar6;\n}" ({ "{") (declaration "byte *pbVar1;" (type_identifier "byte") (pointer_declarator "*pbVar1" (* "*") (identifier "pbVar1")) (; ";")) (declaration "byte *pbVar2;" (type_identifier "byte") (pointer_declarator "*pbVar2" (* "*") (identifier "pbVar2")) (; ";")) (declaration "byte bVar3;" (type_identifier "byte") (identifier "bVar3") (; ";")) (declaration "bool bVar4;" (primitive_type "bool") (identifier "bVar4") (; ";")) (declaration "size_t sVar5;" (primitive_type "size_t") (identifier "sVar5") (; ";")) (declaration "int iVar6;" (primitive_type "int") (identifier "iVar6") (; ";")) (declaration "int iVar7;" (primitive_type "int") (identifier "iVar7") (; ";")) (declaration "wchar_t local_44;" (type_identifier "wchar_t") (identifier "local_44") (; ";")) (declaration "mbstate_t local_40 [2];" (type_identifier "mbstate_t") (array_declarator "local_40 [2]" (identifier "local_40") ([ "[") (number_literal "2") (] "]")) (; ";")) (if_statement "if (param_1 < 0) {\n    param_1 = -param_1;\n    bVar4 = true;\n  }\n  else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }" (if "if") (parenthesized_expression "(param_1 < 0)" (( "(") (binary_expression "param_1 < 0" (identifier "param_1") (< "<") (number_literal "0")) () ")")) (compound_statement "{\n    param_1 = -param_1;\n    bVar4 = true;\n  }" ({ "{") (expression_statement "param_1 = -param_1;" (assignment_expression "param_1 = -param_1" (identifier "param_1") (= "=") (unary_expression "-param_1" (- "-") (identifier "param_1"))) (; ";")) (expression_statement "bVar4 = true;" (assignment_expression "bVar4 = true" (identifier "bVar4") (= "=") (true "true")) (; ";")) (} "}")) (else_clause "else {\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }" (else "else") (compound_statement "{\n    if (param_1 == 0) {\n      return 0;\n    }\n    bVar4 = false;\n  }" ({ "{") (if_statement "if (param_1 == 0) {\n      return 0;\n    }" (if "if") (parenthesized_expression "(param_1 == 0)" (( "(") (binary_expression "param_1 == 0" (identifier "param_1") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      return 0;\n    }" ({ "{") (return_statement "return 0;" (return "return") (number_literal "0") (; ";")) (} "}"))) (expression_statement "bVar4 = false;" (assignment_expression "bVar4 = false" (identifier "bVar4") (= "=") (false "false")) (; ";")) (} "}")))) (expression_statement "local_40[0].__count = 0;" (assignment_expression "local_40[0].__count = 0" (field_expression "local_40[0].__count" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (. ".") (field_identifier "__count")) (= "=") (number_literal "0")) (; ";")) (expression_statement "local_40[0].__value = (_union_27)0x0;" (assignment_expression "local_40[0].__value = (_union_27)0x0" (field_expression "local_40[0].__value" (subscript_expression "local_40[0]" (identifier "local_40") ([ "[") (number_literal "0") (] "]")) (. ".") (field_identifier "__value")) (= "=") (cast_expression "(_union_27)0x0" (( "(") (type_descriptor "_union_27" (type_identifier "_union_27")) () ")") (number_literal "0x0"))) (; ";")) (expression_statement "iVar7 = 0x7fffffff;" (assignment_expression "iVar7 = 0x7fffffff" (identifier "iVar7") (= "=") (number_literal "0x7fffffff")) (; ";")) (if_statement "if (DAT_00196f50 == 0) {\n    iVar7 = param_1;\n  }" (if "if") (parenthesized_expression "(DAT_00196f50 == 0)" (( "(") (binary_expression "DAT_00196f50 == 0" (identifier "DAT_00196f50") (== "==") (number_literal "0")) () ")")) (compound_statement "{\n    iVar7 = param_1;\n  }" ({ "{") (expression_statement "iVar7 = param_1;" (assignment_expression "iVar7 = param_1" (identifier "iVar7") (= "=") (identifier "param_1")) (; ";")) (} "}"))) (expression_statement "iVar6 = 0;" (assignment_expression "iVar6 = 0" (identifier "iVar6") (= "=") (number_literal "0")) (; ";")) (do_statement "do {\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  } while (iVar7 != 0);" (do "do") (compound_statement "{\n    while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }\n    iVar7 = iVar7 + -1;\n    iVar6 = iVar6 + 1;\n    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }\n    putc((int)(char)bVar3,stdout);\n    param_2 = pbVar1;\n  }" ({ "{") (while_statement "while( true ) {\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }" (while "while") (parenthesized_expression "( true )" (( "(") (true "true") () ")")) (compound_statement "{\n      bVar3 = *param_2;\n      pbVar1 = param_2 + 1;\n      if (bVar3 == 0) goto LAB_00112370;\n      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;\n      if (iVar7 == 1) goto LAB_00112370;\n      iVar7 = iVar7 + -2;\n      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));\n      iVar6 = iVar6 + 2;\n      param_2 = pbVar1;\nLAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;\n    }" ({ "{") (expression_statement "bVar3 = *param_2;" (assignment_expression "bVar3 = *param_2" (identifier "bVar3") (= "=") (pointer_expression "*param_2" (* "*") (identifier "param_2"))) (; ";")) (expression_statement "pbVar1 = param_2 + 1;" (assignment_expression "pbVar1 = param_2 + 1" (identifier "pbVar1") (= "=") (binary_expression "param_2 + 1" (identifier "param_2") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if (bVar3 == 0) goto LAB_00112370;" (if "if") (parenthesized_expression "(bVar3 == 0)" (( "(") (binary_expression "bVar3 == 0" (identifier "bVar3") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00112370;" (goto "goto") (statement_identifier "LAB_00112370") (; ";"))) (if_statement "if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;" (if "if") (parenthesized_expression "((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0)" (( "(") (binary_expression "(*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0" (parenthesized_expression "(*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2)" (( "(") (binary_expression "*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2" (pointer_expression "*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2)" (* "*") (cast_expression "(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_00187e40 + (ulong)bVar3 * 2)" (( "(") (binary_expression "&DAT_00187e40 + (ulong)bVar3 * 2" (pointer_expression "&DAT_00187e40" (& "&") (identifier "DAT_00187e40")) (+ "+") (binary_expression "(ulong)bVar3 * 2" (cast_expression "(ulong)bVar3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar3")) (* "*") (number_literal "2"))) () ")")))) (& "&") (number_literal "2")) () ")")) (== "==") (number_literal "0")) () ")")) (break_statement "break;" (break "break") (; ";"))) (if_statement "if (iVar7 == 1) goto LAB_00112370;" (if "if") (parenthesized_expression "(iVar7 == 1)" (( "(") (binary_expression "iVar7 == 1" (identifier "iVar7") (== "==") (number_literal "1")) () ")")) (goto_statement "goto LAB_00112370;" (goto "goto") (statement_identifier "LAB_00112370") (; ";"))) (expression_statement "iVar7 = iVar7 + -2;" (assignment_expression "iVar7 = iVar7 + -2" (identifier "iVar7") (= "=") (binary_expression "iVar7 + -2" (identifier "iVar7") (+ "+") (number_literal "-2"))) (; ";")) (expression_statement "printf("^%c",(ulong)((int)(char)bVar3 + 0x40));" (call_expression "printf("^%c",(ulong)((int)(char)bVar3 + 0x40))" (identifier "printf") (argument_list "("^%c",(ulong)((int)(char)bVar3 + 0x40))" (( "(") (string_literal ""^%c"" (" """) (string_content "^%c") (" """)) (, ",") (call_expression "(ulong)((int)(char)bVar3 + 0x40)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "((int)(char)bVar3 + 0x40)" (( "(") (binary_expression "(int)(char)bVar3 + 0x40" (cast_expression "(int)(char)bVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(char)bVar3" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar3"))) (+ "+") (number_literal "0x40")) () ")"))) () ")"))) (; ";")) (expression_statement "iVar6 = iVar6 + 2;" (assignment_expression "iVar6 = iVar6 + 2" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 2" (identifier "iVar6") (+ "+") (number_literal "2"))) (; ";")) (expression_statement "param_2 = pbVar1;" (assignment_expression "param_2 = pbVar1" (identifier "param_2") (= "=") (identifier "pbVar1")) (; ";")) (labeled_statement "LAB_00112331:\n      if (iVar7 == 0) goto LAB_00112370;" (statement_identifier "LAB_00112331") (: ":") (if_statement "if (iVar7 == 0) goto LAB_00112370;" (if "if") (parenthesized_expression "(iVar7 == 0)" (( "(") (binary_expression "iVar7 == 0" (identifier "iVar7") (== "==") (number_literal "0")) () ")")) (goto_statement "goto LAB_00112370;" (goto "goto") (statement_identifier "LAB_00112370") (; ";")))) (} "}"))) (expression_statement "iVar7 = iVar7 + -1;" (assignment_expression "iVar7 = iVar7 + -1" (identifier "iVar7") (= "=") (binary_expression "iVar7 + -1" (identifier "iVar7") (+ "+") (number_literal "-1"))) (; ";")) (expression_statement "iVar6 = iVar6 + 1;" (assignment_expression "iVar6 = iVar6 + 1" (identifier "iVar6") (= "=") (binary_expression "iVar6 + 1" (identifier "iVar6") (+ "+") (number_literal "1"))) (; ";")) (if_statement "if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }" (if "if") (parenthesized_expression "((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0)" (( "(") (binary_expression "(*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0" (parenthesized_expression "(*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10)" (( "(") (binary_expression "*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10" (pointer_expression "*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2)" (* "*") (cast_expression "(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2)" (( "(") (type_descriptor "ushort *" (type_identifier "ushort") (abstract_pointer_declarator "*" (* "*"))) () ")") (parenthesized_expression "(&DAT_00187e40 + (ulong)bVar3 * 2)" (( "(") (binary_expression "&DAT_00187e40 + (ulong)bVar3 * 2" (pointer_expression "&DAT_00187e40" (& "&") (identifier "DAT_00187e40")) (+ "+") (binary_expression "(ulong)bVar3 * 2" (cast_expression "(ulong)bVar3" (( "(") (type_descriptor "ulong" (type_identifier "ulong")) () ")") (identifier "bVar3")) (* "*") (number_literal "2"))) () ")")))) (& "&") (number_literal "0x10")) () ")")) (== "==") (number_literal "0")) () ")")) (compound_statement "{\n      printf("%.1s",param_2);\n      sVar5 = __ctype_get_mb_cur_max();\n      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);\n      pbVar2 = param_2 + sVar5;\n      param_2 = pbVar1;\n      if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }\n      goto LAB_00112331;\n    }" ({ "{") (expression_statement "printf("%.1s",param_2);" (call_expression "printf("%.1s",param_2)" (identifier "printf") (argument_list "("%.1s",param_2)" (( "(") (string_literal ""%.1s"" (" """) (string_content "%.1s") (" """)) (, ",") (identifier "param_2") () ")"))) (; ";")) (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 "sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);" (assignment_expression "sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40)" (identifier "sVar5") (= "=") (call_expression "mbrtowc(&local_44,(char *)param_2,sVar5,local_40)" (identifier "mbrtowc") (argument_list "(&local_44,(char *)param_2,sVar5,local_40)" (( "(") (pointer_expression "&local_44" (& "&") (identifier "local_44")) (, ",") (cast_expression "(char *)param_2" (( "(") (type_descriptor "char *" (primitive_type "char") (abstract_pointer_declarator "*" (* "*"))) () ")") (identifier "param_2")) (, ",") (identifier "sVar5") (, ",") (identifier "local_40") () ")")))) (; ";")) (expression_statement "pbVar2 = param_2 + sVar5;" (assignment_expression "pbVar2 = param_2 + sVar5" (identifier "pbVar2") (= "=") (binary_expression "param_2 + sVar5" (identifier "param_2") (+ "+") (identifier "sVar5"))) (; ";")) (expression_statement "param_2 = pbVar1;" (assignment_expression "param_2 = pbVar1" (identifier "param_2") (= "=") (identifier "pbVar1")) (; ";")) (if_statement "if (sVar5 - 1 < 0xfffffffffffffffd) {\n        param_2 = pbVar2;\n      }" (if "if") (parenthesized_expression "(sVar5 - 1 < 0xfffffffffffffffd)" (( "(") (binary_expression "sVar5 - 1 < 0xfffffffffffffffd" (binary_expression "sVar5 - 1" (identifier "sVar5") (- "-") (number_literal "1")) (< "<") (number_literal "0xfffffffffffffffd")) () ")")) (compound_statement "{\n        param_2 = pbVar2;\n      }" ({ "{") (expression_statement "param_2 = pbVar2;" (assignment_expression "param_2 = pbVar2" (identifier "param_2") (= "=") (identifier "pbVar2")) (; ";")) (} "}"))) (goto_statement "goto LAB_00112331;" (goto "goto") (statement_identifier "LAB_00112331") (; ";")) (} "}"))) (expression_statement "putc((int)(char)bVar3,stdout);" (call_expression "putc((int)(char)bVar3,stdout)" (identifier "putc") (argument_list "((int)(char)bVar3,stdout)" (( "(") (cast_expression "(int)(char)bVar3" (( "(") (type_descriptor "int" (primitive_type "int")) () ")") (cast_expression "(char)bVar3" (( "(") (type_descriptor "char" (primitive_type "char")) () ")") (identifier "bVar3"))) (, ",") (identifier "stdout") () ")"))) (; ";")) (expression_statement "param_2 = pbVar1;" (assignment_expression "param_2 = pbVar1" (identifier "param_2") (= "=") (identifier "pbVar1")) (; ";")) (} "}")) (while "while") (parenthesized_expression "(iVar7 != 0)" (( "(") (binary_expression "iVar7 != 0" (identifier "iVar7") (!= "!=") (number_literal "0")) () ")")) (; ";")) (labeled_statement "LAB_00112370:\n  if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }" (statement_identifier "LAB_00112370") (: ":") (if_statement "if ((iVar6 < param_1) && (bVar4)) {\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }" (if "if") (parenthesized_expression "((iVar6 < param_1) && (bVar4))" (( "(") (binary_expression "(iVar6 < param_1) && (bVar4)" (parenthesized_expression "(iVar6 < param_1)" (( "(") (binary_expression "iVar6 < param_1" (identifier "iVar6") (< "<") (identifier "param_1")) () ")")) (&& "&&") (parenthesized_expression "(bVar4)" (( "(") (identifier "bVar4") () ")"))) () ")")) (compound_statement "{\n    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);\n    iVar6 = param_1;\n  }" ({ "{") (expression_statement "printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);" (call_expression "printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397)" (identifier "printf") (argument_list "("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397)" (( "(") (string_literal ""%-*s"" (" """) (string_content "%-*s") (" """)) (, ",") (call_expression "(ulong)(uint)(param_1 - iVar6)" (call_expression "(ulong)(uint)" (parenthesized_expression "(ulong)" (( "(") (identifier "ulong") () ")")) (argument_list "(uint)" (( "(") (identifier "uint") () ")"))) (argument_list "(param_1 - iVar6)" (( "(") (binary_expression "param_1 - iVar6" (identifier "param_1") (- "-") (identifier "iVar6")) () ")"))) (, ",") (pointer_expression "&DAT_0016a397" (& "&") (identifier "DAT_0016a397")) () ")"))) (; ";")) (expression_statement "iVar6 = param_1;" (assignment_expression "iVar6 = param_1" (identifier "iVar6") (= "=") (identifier "param_1")) (; ";")) (} "}")))) (return_statement "return iVar6;" (return "return") (identifier "iVar6") (; ";")) (} "}")))

type_1 function_1(type_2 var_1,char *symbol)

{
  type_3 *pbVar1;
  type_3 *pbVar2;
  type_3 var_3;
  bool bVar4;
  size_t var_9;
  type_2 var_6;
  type_2 var_4;
  type_2 w;
  type_4 state;
  
  if (var_1 < L'\0') {
    var_1 = -var_1;
    bVar4 = true;
  }
  else {
    if (var_1 == L'\0') {
      return 0;
    }
    bVar4 = false;
  }
  state.__count = 0;
  state.__value = (type_5)0x0;
  var_4 = L'\x7fffffff';
  if (var_2 == 0) {
    var_4 = var_1;
  }
  var_6 = L'\0';
  do {
    while( true ) {
      var_3 = *symbol;
      pbVar1 = (type_3 *)symbol + 1;
      if (var_3 == 0) goto LAB_00112370;
      if ((_sch_istable[var_3] & 2) == 0) break;
      if (var_4 == L'\x01') goto LAB_00112370;
      var_4 = var_4 + L'\xfffffffe';
      var_5("^%c",(ulong)((int)(char)var_3 + 0x40));
      var_6 = var_6 + L'\x02';
      symbol = (char *)pbVar1;
LAB_00112331:
      if (var_4 == L'\0') goto LAB_00112370;
    }
    var_4 = var_4 + L'\xffffffff';
    var_6 = var_6 + L'\x01';
    if ((_sch_istable[var_3] & 0x10) == 0) {
      var_5("%.1s",symbol);
      var_9 = var_7();
      var_9 = var_8(&w,symbol,var_9,(type_4 *)&state);
      pbVar2 = (type_3 *)symbol + var_9;
      symbol = (char *)pbVar1;
      if (var_9 - 1 < 0xfffffffffffffffd) {
        symbol = (char *)pbVar2;
      }
      goto LAB_00112331;
    }
    var_10((int)(char)var_3,stdout);
    symbol = (char *)pbVar1;
  } while (var_4 != L'\0');
LAB_00112370:
  if ((var_6 < var_1) && (bVar4)) {
    var_5("%-*s",(ulong)(type_1)(var_1 - var_6),&DAT_0016a397);
    var_6 = var_1;
  }
  return var_6;
}


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

int MASKED(int param_1,byte *param_2)

{
  byte *pbVar1;
  byte *pbVar2;
  byte bVar3;
  bool bVar4;
  size_t sVar5;
  int iVar6;
  int iVar7;
  wchar_t local_44;
  mbstate_t local_40 [2];
  
  if (param_1 < 0) {
    param_1 = -param_1;
    bVar4 = true;
  }
  else {
    if (param_1 == 0) {
      return 0;
    }
    bVar4 = false;
  }
  local_40[0].__count = 0;
  local_40[0].__value = (_union_27)0x0;
  iVar7 = 0x7fffffff;
  if (DAT_00196f50 == 0) {
    iVar7 = param_1;
  }
  iVar6 = 0;
  do {
    while( true ) {
      bVar3 = *param_2;
      pbVar1 = param_2 + 1;
      if (bVar3 == 0) goto LAB_00112370;
      if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 2) == 0) break;
      if (iVar7 == 1) goto LAB_00112370;
      iVar7 = iVar7 + -2;
      printf("^%c",(ulong)((int)(char)bVar3 + 0x40));
      iVar6 = iVar6 + 2;
      param_2 = pbVar1;
LAB_00112331:
      if (iVar7 == 0) goto LAB_00112370;
    }
    iVar7 = iVar7 + -1;
    iVar6 = iVar6 + 1;
    if ((*(ushort *)(&DAT_00187e40 + (ulong)bVar3 * 2) & 0x10) == 0) {
      printf("%.1s",param_2);
      sVar5 = __ctype_get_mb_cur_max();
      sVar5 = mbrtowc(&local_44,(char *)param_2,sVar5,local_40);
      pbVar2 = param_2 + sVar5;
      param_2 = pbVar1;
      if (sVar5 - 1 < 0xfffffffffffffffd) {
        param_2 = pbVar2;
      }
      goto LAB_00112331;
    }
    putc((int)(char)bVar3,stdout);
    param_2 = pbVar1;
  } while (iVar7 != 0);
LAB_00112370:
  if ((iVar6 < param_1) && (bVar4)) {
    printf("%-*s",(ulong)(uint)(param_1 - iVar6),&DAT_0016a397);
    iVar6 = param_1;
  }
  return iVar6;
}

