NormBuffer__RecheckStartCombinations

VOID __fastcall NormBuffer__RecheckStartCombinations(INT64 a1){
  bool v1; 
  INT64 v2; 
  __int64 v3; 
  __int64 v4; 
  char v5; 
  __int64 v6; 
  unsigned int CurrentOutputChar; 
  int CanCombinableCharactersCombine; 
  int v9; 
  char v10; 
  unsigned __int64 v11; 
  _WORD *v12; 
  unsigned __int64 v13; 
  unsigned __int64 v14; 
  __int64 v15; 
  char v16; 
  char v17; 
  __int64 v18; 
  v1 = *(_BYTE *)(a1 + 93) == 64;
  v2 = a1;
  v3 = *(_QWORD *)(a1 + 80);
  v18 = v3;
  if( v1 )
  {
    v4 = *(_QWORD *)(a1 + 40);
    v5 = 0;
    if( v3 != v4 )
    {
      v6 = *(_QWORD *)(a1 + 112);
      while( 1 )
      {
        v16 = 0;
        v17 = 0;
        CurrentOutputChar = NormBuffer__GetCurrentOutputChar((WCHAR **)a1);
        Normalization__GetCharacterInfo(v6, CurrentOutputChar, &v16, &v17);
        if( v16 == v5 )
          goto LABEL_17;
        if( v17 != -64 )
          break;
        CanCombinableCharactersCombine = Normalization__CanCombinableCharactersCombine(
                                           v6,
                                           *(unsigned int *)(v2 + 88),
                                           CurrentOutputChar);
        v9 = CanCombinableCharactersCombine;
        if( !CanCombinableCharactersCombine )
          break;
        Normalization__GetCharacterInfo(v6, CanCombinableCharactersCombine, &v16, &v17);
        v10 = v17;
        v4 = *(_QWORD *)(v2 + 40) - 2i64;
        v11 = v18;
        *(_BYTE *)(v2 + 92) = v16;
        v12 = (_WORD *)v11;
        v13 = *(_QWORD *)(v2 + 64);
        *(_WORD *)(v3 - 2) = v9;
        *(_DWORD *)(v2 + 88) = v9;
        *(_BYTE *)(v2 + 93) = v10;
        *(_QWORD *)(v2 + 40) = v4;
        if( v13 == v4 )
        {
          if( v11 >= v13 )
          {
            v15 = *(_QWORD *)(v2 + 24);
            *(_DWORD *)(v2 + 56) = 0;
            v14 = v15 - 2;
            *(_WORD *)(v2 + 72) = 0;
          }
          else
          {
            v14 = v13 - 2;
          }
          *(_QWORD *)(v2 + 64) = v14;
        }
        if( v11 != v4 )
        {
          do
          {
            a1 = (INT64)(v12 + 1);
            *v12 = v12[1];
            v12 = (_WORD *)a1;
          }
          while( a1 != v4 );
        }
        if( v10 != 64 )
          return;
LABEL_18:
        if( v11 == v4 )
          return;
      }
      v5 = v16;
LABEL_17:
      v11 = v18 + 2;
      v18 += 2i64;
      goto LABEL_18;
    }
  }
}

Referenced by:

Normalization__NormalizeCharacter