/* Generated by Snowball 2.2.0 - https://snowballstem.org/ */

#include "header.h"

#ifdef __cplusplus
extern "C" {
#endif
extern int tamil_UTF_8_stem(struct SN_env * z);
#ifdef __cplusplus
}
#endif
static int r_has_min_length(struct SN_env * z);
static int r_remove_common_word_endings(struct SN_env * z);
static int r_remove_tense_suffixes(struct SN_env * z);
static int r_remove_tense_suffix(struct SN_env * z);
static int r_fix_endings(struct SN_env * z);
static int r_fix_ending(struct SN_env * z);
static int r_fix_va_start(struct SN_env * z);
static int r_remove_vetrumai_urupukal(struct SN_env * z);
static int r_remove_um(struct SN_env * z);
static int r_remove_command_suffixes(struct SN_env * z);
static int r_remove_pronoun_prefixes(struct SN_env * z);
static int r_remove_question_prefixes(struct SN_env * z);
static int r_remove_question_suffixes(struct SN_env * z);
static int r_remove_plural_suffix(struct SN_env * z);
#ifdef __cplusplus
extern "C" {
#endif


extern struct SN_env * tamil_UTF_8_create_env(void);
extern void tamil_UTF_8_close_env(struct SN_env * z);


#ifdef __cplusplus
}
#endif
static const symbol s_0_0[6] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x81 };
static const symbol s_0_1[6] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x82 };
static const symbol s_0_2[6] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x8A };
static const symbol s_0_3[6] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x8B };

static const struct among a_0[4] =
{
{ 6, s_0_0, -1, 3, 0},
{ 6, s_0_1, -1, 4, 0},
{ 6, s_0_2, -1, 2, 0},
{ 6, s_0_3, -1, 1, 0}
};

static const symbol s_1_0[3] = { 0xE0, 0xAE, 0x95 };
static const symbol s_1_1[3] = { 0xE0, 0xAE, 0x99 };
static const symbol s_1_2[3] = { 0xE0, 0xAE, 0x9A };
static const symbol s_1_3[3] = { 0xE0, 0xAE, 0x9E };
static const symbol s_1_4[3] = { 0xE0, 0xAE, 0xA4 };
static const symbol s_1_5[3] = { 0xE0, 0xAE, 0xA8 };
static const symbol s_1_6[3] = { 0xE0, 0xAE, 0xAA };
static const symbol s_1_7[3] = { 0xE0, 0xAE, 0xAE };
static const symbol s_1_8[3] = { 0xE0, 0xAE, 0xAF };
static const symbol s_1_9[3] = { 0xE0, 0xAE, 0xB5 };

static const struct among a_1[10] =
{
{ 3, s_1_0, -1, -1, 0},
{ 3, s_1_1, -1, -1, 0},
{ 3, s_1_2, -1, -1, 0},
{ 3, s_1_3, -1, -1, 0},
{ 3, s_1_4, -1, -1, 0},
{ 3, s_1_5, -1, -1, 0},
{ 3, s_1_6, -1, -1, 0},
{ 3, s_1_7, -1, -1, 0},
{ 3, s_1_8, -1, -1, 0},
{ 3, s_1_9, -1, -1, 0}
};

static const symbol s_2_0[3] = { 0xE0, 0xAF, 0x80 };
static const symbol s_2_1[3] = { 0xE0, 0xAF, 0x88 };
static const symbol s_2_2[3] = { 0xE0, 0xAE, 0xBF };

static const struct among a_2[3] =
{
{ 3, s_2_0, -1, -1, 0},
{ 3, s_2_1, -1, -1, 0},
{ 3, s_2_2, -1, -1, 0}
};

static const symbol s_3_0[3] = { 0xE0, 0xAF, 0x80 };
static const symbol s_3_1[3] = { 0xE0, 0xAF, 0x81 };
static const symbol s_3_2[3] = { 0xE0, 0xAF, 0x82 };
static const symbol s_3_3[3] = { 0xE0, 0xAF, 0x86 };
static const symbol s_3_4[3] = { 0xE0, 0xAF, 0x87 };
static const symbol s_3_5[3] = { 0xE0, 0xAF, 0x88 };
static const symbol s_3_6[3] = { 0xE0, 0xAE, 0xBE };
static const symbol s_3_7[3] = { 0xE0, 0xAE, 0xBF };

static const struct among a_3[8] =
{
{ 3, s_3_0, -1, -1, 0},
{ 3, s_3_1, -1, -1, 0},
{ 3, s_3_2, -1, -1, 0},
{ 3, s_3_3, -1, -1, 0},
{ 3, s_3_4, -1, -1, 0},
{ 3, s_3_5, -1, -1, 0},
{ 3, s_3_6, -1, -1, 0},
{ 3, s_3_7, -1, -1, 0}
};

static const symbol s_4_1[3] = { 0xE0, 0xAF, 0x88 };
static const symbol s_4_2[3] = { 0xE0, 0xAF, 0x8D };

static const struct among a_4[3] =
{
{ 0, 0, -1, 2, 0},
{ 3, s_4_1, 0, 1, 0},
{ 3, s_4_2, 0, 1, 0}
};

static const symbol s_5_0[6] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x81 };
static const symbol s_5_1[9] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x8D };
static const symbol s_5_2[15] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x8D };
static const symbol s_5_3[12] = { 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x8D };
static const symbol s_5_4[12] = { 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x8D };
static const symbol s_5_5[6] = { 0xE0, 0xAE, 0x99, 0xE0, 0xAF, 0x8D };
static const symbol s_5_6[12] = { 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D };
static const symbol s_5_7[12] = { 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x8D };
static const symbol s_5_8[12] = { 0xE0, 0xAE, 0xA8, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x8D };
static const symbol s_5_9[6] = { 0xE0, 0xAE, 0xA8, 0xE0, 0xAF, 0x8D };
static const symbol s_5_10[12] = { 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xAA, 0xE0, 0xAF, 0x8D };
static const symbol s_5_11[6] = { 0xE0, 0xAE, 0xAF, 0xE0, 0xAF, 0x8D };
static const symbol s_5_12[12] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D };
static const symbol s_5_13[6] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x8D };
static const symbol s_5_14[9] = { 0xE0, 0xAE, 0xA8, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xA4 };
static const symbol s_5_15[3] = { 0xE0, 0xAE, 0xAF };
static const symbol s_5_16[3] = { 0xE0, 0xAE, 0xB5 };

static const struct among a_5[17] =
{
{ 6, s_5_0, -1, 8, 0},
{ 9, s_5_1, -1, 7, 0},
{ 15, s_5_2, -1, 7, 0},
{ 12, s_5_3, -1, 3, 0},
{ 12, s_5_4, -1, 4, 0},
{ 6, s_5_5, -1, 9, 0},
{ 12, s_5_6, -1, 5, 0},
{ 12, s_5_7, -1, 6, 0},
{ 12, s_5_8, -1, 1, 0},
{ 6, s_5_9, -1, 1, 0},
{ 12, s_5_10, -1, 3, 0},
{ 6, s_5_11, -1, 2, 0},
{ 12, s_5_12, -1, 4, 0},
{ 6, s_5_13, -1, 1, 0},
{ 9, s_5_14, -1, 1, 0},
{ 3, s_5_15, -1, 1, 0},
{ 3, s_5_16, -1, 1, 0}
};

static const symbol s_6_0[3] = { 0xE0, 0xAE, 0x95 };
static const symbol s_6_1[3] = { 0xE0, 0xAE, 0x9A };
static const symbol s_6_2[3] = { 0xE0, 0xAE, 0x9F };
static const symbol s_6_3[3] = { 0xE0, 0xAE, 0xA4 };
static const symbol s_6_4[3] = { 0xE0, 0xAE, 0xAA };
static const symbol s_6_5[3] = { 0xE0, 0xAE, 0xB1 };

static const struct among a_6[6] =
{
{ 3, s_6_0, -1, -1, 0},
{ 3, s_6_1, -1, -1, 0},
{ 3, s_6_2, -1, -1, 0},
{ 3, s_6_3, -1, -1, 0},
{ 3, s_6_4, -1, -1, 0},
{ 3, s_6_5, -1, -1, 0}
};

static const symbol s_7_0[3] = { 0xE0, 0xAE, 0x95 };
static const symbol s_7_1[3] = { 0xE0, 0xAE, 0x9A };
static const symbol s_7_2[3] = { 0xE0, 0xAE, 0x9F };
static const symbol s_7_3[3] = { 0xE0, 0xAE, 0xA4 };
static const symbol s_7_4[3] = { 0xE0, 0xAE, 0xAA };
static const symbol s_7_5[3] = { 0xE0, 0xAE, 0xB1 };

static const struct among a_7[6] =
{
{ 3, s_7_0, -1, -1, 0},
{ 3, s_7_1, -1, -1, 0},
{ 3, s_7_2, -1, -1, 0},
{ 3, s_7_3, -1, -1, 0},
{ 3, s_7_4, -1, -1, 0},
{ 3, s_7_5, -1, -1, 0}
};

static const symbol s_8_0[3] = { 0xE0, 0xAE, 0x9E };
static const symbol s_8_1[3] = { 0xE0, 0xAE, 0xA3 };
static const symbol s_8_2[3] = { 0xE0, 0xAE, 0xA8 };
static const symbol s_8_3[3] = { 0xE0, 0xAE, 0xA9 };
static const symbol s_8_4[3] = { 0xE0, 0xAE, 0xAE };
static const symbol s_8_5[3] = { 0xE0, 0xAE, 0xAF };
static const symbol s_8_6[3] = { 0xE0, 0xAE, 0xB0 };
static const symbol s_8_7[3] = { 0xE0, 0xAE, 0xB2 };
static const symbol s_8_8[3] = { 0xE0, 0xAE, 0xB3 };
static const symbol s_8_9[3] = { 0xE0, 0xAE, 0xB4 };
static const symbol s_8_10[3] = { 0xE0, 0xAE, 0xB5 };

static const struct among a_8[11] =
{
{ 3, s_8_0, -1, -1, 0},
{ 3, s_8_1, -1, -1, 0},
{ 3, s_8_2, -1, -1, 0},
{ 3, s_8_3, -1, -1, 0},
{ 3, s_8_4, -1, -1, 0},
{ 3, s_8_5, -1, -1, 0},
{ 3, s_8_6, -1, -1, 0},
{ 3, s_8_7, -1, -1, 0},
{ 3, s_8_8, -1, -1, 0},
{ 3, s_8_9, -1, -1, 0},
{ 3, s_8_10, -1, -1, 0}
};

static const symbol s_9_0[3] = { 0xE0, 0xAF, 0x80 };
static const symbol s_9_1[3] = { 0xE0, 0xAF, 0x81 };
static const symbol s_9_2[3] = { 0xE0, 0xAF, 0x82 };
static const symbol s_9_3[3] = { 0xE0, 0xAF, 0x86 };
static const symbol s_9_4[3] = { 0xE0, 0xAF, 0x87 };
static const symbol s_9_5[3] = { 0xE0, 0xAF, 0x88 };
static const symbol s_9_6[3] = { 0xE0, 0xAF, 0x8D };
static const symbol s_9_7[3] = { 0xE0, 0xAE, 0xBE };
static const symbol s_9_8[3] = { 0xE0, 0xAE, 0xBF };

static const struct among a_9[9] =
{
{ 3, s_9_0, -1, -1, 0},
{ 3, s_9_1, -1, -1, 0},
{ 3, s_9_2, -1, -1, 0},
{ 3, s_9_3, -1, -1, 0},
{ 3, s_9_4, -1, -1, 0},
{ 3, s_9_5, -1, -1, 0},
{ 3, s_9_6, -1, -1, 0},
{ 3, s_9_7, -1, -1, 0},
{ 3, s_9_8, -1, -1, 0}
};

static const symbol s_10_0[3] = { 0xE0, 0xAE, 0x85 };
static const symbol s_10_1[3] = { 0xE0, 0xAE, 0x87 };
static const symbol s_10_2[3] = { 0xE0, 0xAE, 0x89 };

static const struct among a_10[3] =
{
{ 3, s_10_0, -1, -1, 0},
{ 3, s_10_1, -1, -1, 0},
{ 3, s_10_2, -1, -1, 0}
};

static const symbol s_11_0[3] = { 0xE0, 0xAE, 0x95 };
static const symbol s_11_1[3] = { 0xE0, 0xAE, 0x99 };
static const symbol s_11_2[3] = { 0xE0, 0xAE, 0x9A };
static const symbol s_11_3[3] = { 0xE0, 0xAE, 0x9E };
static const symbol s_11_4[3] = { 0xE0, 0xAE, 0xA4 };
static const symbol s_11_5[3] = { 0xE0, 0xAE, 0xA8 };
static const symbol s_11_6[3] = { 0xE0, 0xAE, 0xAA };
static const symbol s_11_7[3] = { 0xE0, 0xAE, 0xAE };
static const symbol s_11_8[3] = { 0xE0, 0xAE, 0xAF };
static const symbol s_11_9[3] = { 0xE0, 0xAE, 0xB5 };

static const struct among a_11[10] =
{
{ 3, s_11_0, -1, -1, 0},
{ 3, s_11_1, -1, -1, 0},
{ 3, s_11_2, -1, -1, 0},
{ 3, s_11_3, -1, -1, 0},
{ 3, s_11_4, -1, -1, 0},
{ 3, s_11_5, -1, -1, 0},
{ 3, s_11_6, -1, -1, 0},
{ 3, s_11_7, -1, -1, 0},
{ 3, s_11_8, -1, -1, 0},
{ 3, s_11_9, -1, -1, 0}
};

static const symbol s_12_0[3] = { 0xE0, 0xAE, 0x95 };
static const symbol s_12_1[3] = { 0xE0, 0xAE, 0x9A };
static const symbol s_12_2[3] = { 0xE0, 0xAE, 0x9F };
static const symbol s_12_3[3] = { 0xE0, 0xAE, 0xA4 };
static const symbol s_12_4[3] = { 0xE0, 0xAE, 0xAA };
static const symbol s_12_5[3] = { 0xE0, 0xAE, 0xB1 };

static const struct among a_12[6] =
{
{ 3, s_12_0, -1, -1, 0},
{ 3, s_12_1, -1, -1, 0},
{ 3, s_12_2, -1, -1, 0},
{ 3, s_12_3, -1, -1, 0},
{ 3, s_12_4, -1, -1, 0},
{ 3, s_12_5, -1, -1, 0}
};

static const symbol s_13_0[9] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D };
static const symbol s_13_1[18] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x99, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D };
static const symbol s_13_2[15] = { 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D };
static const symbol s_13_3[15] = { 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D };

static const struct among a_13[4] =
{
{ 9, s_13_0, -1, 4, 0},
{ 18, s_13_1, 0, 1, 0},
{ 15, s_13_2, 0, 3, 0},
{ 15, s_13_3, 0, 2, 0}
};

static const symbol s_14_0[3] = { 0xE0, 0xAF, 0x87 };
static const symbol s_14_1[3] = { 0xE0, 0xAF, 0x8B };
static const symbol s_14_2[3] = { 0xE0, 0xAE, 0xBE };

static const struct among a_14[3] =
{
{ 3, s_14_0, -1, -1, 0},
{ 3, s_14_1, -1, -1, 0},
{ 3, s_14_2, -1, -1, 0}
};

static const symbol s_15_0[6] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0xBF };
static const symbol s_15_1[6] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xBF };

static const struct among a_15[2] =
{
{ 6, s_15_0, -1, -1, 0},
{ 6, s_15_1, -1, -1, 0}
};

static const symbol s_16_0[3] = { 0xE0, 0xAF, 0x80 };
static const symbol s_16_1[3] = { 0xE0, 0xAF, 0x81 };
static const symbol s_16_2[3] = { 0xE0, 0xAF, 0x82 };
static const symbol s_16_3[3] = { 0xE0, 0xAF, 0x86 };
static const symbol s_16_4[3] = { 0xE0, 0xAF, 0x87 };
static const symbol s_16_5[3] = { 0xE0, 0xAF, 0x88 };
static const symbol s_16_6[3] = { 0xE0, 0xAE, 0xBE };
static const symbol s_16_7[3] = { 0xE0, 0xAE, 0xBF };

static const struct among a_16[8] =
{
{ 3, s_16_0, -1, -1, 0},
{ 3, s_16_1, -1, -1, 0},
{ 3, s_16_2, -1, -1, 0},
{ 3, s_16_3, -1, -1, 0},
{ 3, s_16_4, -1, -1, 0},
{ 3, s_16_5, -1, -1, 0},
{ 3, s_16_6, -1, -1, 0},
{ 3, s_16_7, -1, -1, 0}
};

static const symbol s_17_0[15] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 };
static const symbol s_17_1[18] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 };
static const symbol s_17_2[9] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 };
static const symbol s_17_3[12] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 };
static const symbol s_17_4[18] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x81 };
static const symbol s_17_5[15] = { 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x81 };
static const symbol s_17_6[9] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x88 };
static const symbol s_17_7[15] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x88 };
static const symbol s_17_8[12] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D };
static const symbol s_17_9[15] = { 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_17_10[12] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_17_11[21] = { 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB2, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_17_12[12] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F };
static const symbol s_17_13[15] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xA3 };
static const symbol s_17_14[6] = { 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xA9 };
static const symbol s_17_15[9] = { 0xE0, 0xAE, 0xA4, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xA9 };
static const symbol s_17_16[18] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA4, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xA9 };
static const symbol s_17_17[12] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x88, 0xE0, 0xAE, 0xAF };
static const symbol s_17_18[12] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xAF };
static const symbol s_17_19[15] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xB0, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xAF };
static const symbol s_17_20[9] = { 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB2 };
static const symbol s_17_21[12] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB3 };
static const symbol s_17_22[9] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xBF };
static const symbol s_17_23[9] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xBF };
static const symbol s_17_24[15] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAE, 0xBF };
static const symbol s_17_25[15] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAE, 0xBF };

static const struct among a_17[26] =
{
{ 15, s_17_0, -1, 3, 0},
{ 18, s_17_1, -1, 3, 0},
{ 9, s_17_2, -1, 3, 0},
{ 12, s_17_3, -1, 3, 0},
{ 18, s_17_4, -1, 3, 0},
{ 15, s_17_5, -1, 1, 0},
{ 9, s_17_6, -1, 1, 0},
{ 15, s_17_7, -1, 1, 0},
{ 12, s_17_8, -1, 1, 0},
{ 15, s_17_9, -1, 1, 0},
{ 12, s_17_10, -1, 1, 0},
{ 21, s_17_11, -1, 3, 0},
{ 12, s_17_12, -1, 3, 0},
{ 15, s_17_13, -1, 3, 0},
{ 6, s_17_14, -1, 1, 0},
{ 9, s_17_15, -1, 3, 0},
{ 18, s_17_16, 15, 3, 0},
{ 12, s_17_17, -1, 1, 0},
{ 12, s_17_18, -1, 1, 0},
{ 15, s_17_19, -1, 3, 0},
{ 9, s_17_20, -1, 2, 0},
{ 12, s_17_21, -1, 1, 0},
{ 9, s_17_22, -1, 1, 0},
{ 9, s_17_23, -1, 3, 0},
{ 15, s_17_24, -1, 1, 0},
{ 15, s_17_25, -1, 3, 0}
};

static const symbol s_18_0[3] = { 0xE0, 0xAF, 0x80 };
static const symbol s_18_1[3] = { 0xE0, 0xAF, 0x81 };
static const symbol s_18_2[3] = { 0xE0, 0xAF, 0x82 };
static const symbol s_18_3[3] = { 0xE0, 0xAF, 0x86 };
static const symbol s_18_4[3] = { 0xE0, 0xAF, 0x87 };
static const symbol s_18_5[3] = { 0xE0, 0xAF, 0x88 };
static const symbol s_18_6[3] = { 0xE0, 0xAE, 0xBE };
static const symbol s_18_7[3] = { 0xE0, 0xAE, 0xBF };

static const struct among a_18[8] =
{
{ 3, s_18_0, -1, -1, 0},
{ 3, s_18_1, -1, -1, 0},
{ 3, s_18_2, -1, -1, 0},
{ 3, s_18_3, -1, -1, 0},
{ 3, s_18_4, -1, -1, 0},
{ 3, s_18_5, -1, -1, 0},
{ 3, s_18_6, -1, -1, 0},
{ 3, s_18_7, -1, -1, 0}
};

static const symbol s_19_0[3] = { 0xE0, 0xAF, 0x80 };
static const symbol s_19_1[3] = { 0xE0, 0xAF, 0x81 };
static const symbol s_19_2[3] = { 0xE0, 0xAF, 0x82 };
static const symbol s_19_3[3] = { 0xE0, 0xAF, 0x86 };
static const symbol s_19_4[3] = { 0xE0, 0xAF, 0x87 };
static const symbol s_19_5[3] = { 0xE0, 0xAF, 0x88 };
static const symbol s_19_6[3] = { 0xE0, 0xAE, 0xBE };
static const symbol s_19_7[3] = { 0xE0, 0xAE, 0xBF };

static const struct among a_19[8] =
{
{ 3, s_19_0, -1, -1, 0},
{ 3, s_19_1, -1, -1, 0},
{ 3, s_19_2, -1, -1, 0},
{ 3, s_19_3, -1, -1, 0},
{ 3, s_19_4, -1, -1, 0},
{ 3, s_19_5, -1, -1, 0},
{ 3, s_19_6, -1, -1, 0},
{ 3, s_19_7, -1, -1, 0}
};

static const symbol s_20_0[3] = { 0xE0, 0xAF, 0x80 };
static const symbol s_20_1[9] = { 0xE0, 0xAF, 0x8A, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 };
static const symbol s_20_2[9] = { 0xE0, 0xAF, 0x8B, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 };
static const symbol s_20_3[6] = { 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x81 };
static const symbol s_20_4[21] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xA8, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x81 };
static const symbol s_20_5[15] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x81 };
static const symbol s_20_6[9] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x88 };
static const symbol s_20_7[6] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x88 };
static const symbol s_20_8[9] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xA3, 0xE0, 0xAF, 0x8D };
static const symbol s_20_9[12] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D };
static const symbol s_20_10[9] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D };
static const symbol s_20_11[12] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_20_12[12] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x87, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D };
static const symbol s_20_13[9] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D };
static const symbol s_20_14[6] = { 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D };
static const symbol s_20_15[12] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x87, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D };
static const symbol s_20_16[12] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xAE, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D };
static const symbol s_20_17[9] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D };
static const symbol s_20_18[9] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D };
static const symbol s_20_19[9] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D };
static const symbol s_20_20[12] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x80, 0xE0, 0xAE, 0xB4, 0xE0, 0xAF, 0x8D };
static const symbol s_20_21[9] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0x9F };

static const struct among a_20[22] =
{
{ 3, s_20_0, -1, 7, 0},
{ 9, s_20_1, -1, 2, 0},
{ 9, s_20_2, -1, 2, 0},
{ 6, s_20_3, -1, 6, 0},
{ 21, s_20_4, 3, 2, 0},
{ 15, s_20_5, -1, 2, 0},
{ 9, s_20_6, -1, 2, 0},
{ 6, s_20_7, -1, 1, 0},
{ 9, s_20_8, -1, 1, 0},
{ 12, s_20_9, -1, 1, 0},
{ 9, s_20_10, -1, 3, 0},
{ 12, s_20_11, -1, 4, 0},
{ 12, s_20_12, -1, 1, 0},
{ 9, s_20_13, -1, 2, 0},
{ 6, s_20_14, -1, 5, 0},
{ 12, s_20_15, 14, 1, 0},
{ 12, s_20_16, 14, 2, 0},
{ 9, s_20_17, 14, 2, 0},
{ 9, s_20_18, 14, 2, 0},
{ 9, s_20_19, -1, 2, 0},
{ 12, s_20_20, -1, 1, 0},
{ 9, s_20_21, -1, 2, 0}
};

static const symbol s_21_0[3] = { 0xE0, 0xAE, 0x95 };
static const symbol s_21_1[3] = { 0xE0, 0xAE, 0x9A };
static const symbol s_21_2[3] = { 0xE0, 0xAE, 0x9F };
static const symbol s_21_3[3] = { 0xE0, 0xAE, 0xA4 };
static const symbol s_21_4[3] = { 0xE0, 0xAE, 0xAA };
static const symbol s_21_5[3] = { 0xE0, 0xAE, 0xB1 };

static const struct among a_21[6] =
{
{ 3, s_21_0, -1, -1, 0},
{ 3, s_21_1, -1, -1, 0},
{ 3, s_21_2, -1, -1, 0},
{ 3, s_21_3, -1, -1, 0},
{ 3, s_21_4, -1, -1, 0},
{ 3, s_21_5, -1, -1, 0}
};

static const symbol s_22_0[3] = { 0xE0, 0xAE, 0x95 };
static const symbol s_22_1[3] = { 0xE0, 0xAE, 0x9A };
static const symbol s_22_2[3] = { 0xE0, 0xAE, 0x9F };
static const symbol s_22_3[3] = { 0xE0, 0xAE, 0xA4 };
static const symbol s_22_4[3] = { 0xE0, 0xAE, 0xAA };
static const symbol s_22_5[3] = { 0xE0, 0xAE, 0xB1 };

static const struct among a_22[6] =
{
{ 3, s_22_0, -1, -1, 0},
{ 3, s_22_1, -1, -1, 0},
{ 3, s_22_2, -1, -1, 0},
{ 3, s_22_3, -1, -1, 0},
{ 3, s_22_4, -1, -1, 0},
{ 3, s_22_5, -1, -1, 0}
};

static const symbol s_23_0[3] = { 0xE0, 0xAE, 0x85 };
static const symbol s_23_1[3] = { 0xE0, 0xAE, 0x86 };
static const symbol s_23_2[3] = { 0xE0, 0xAE, 0x87 };
static const symbol s_23_3[3] = { 0xE0, 0xAE, 0x88 };
static const symbol s_23_4[3] = { 0xE0, 0xAE, 0x89 };
static const symbol s_23_5[3] = { 0xE0, 0xAE, 0x8A };
static const symbol s_23_6[3] = { 0xE0, 0xAE, 0x8E };
static const symbol s_23_7[3] = { 0xE0, 0xAE, 0x8F };
static const symbol s_23_8[3] = { 0xE0, 0xAE, 0x90 };
static const symbol s_23_9[3] = { 0xE0, 0xAE, 0x92 };
static const symbol s_23_10[3] = { 0xE0, 0xAE, 0x93 };
static const symbol s_23_11[3] = { 0xE0, 0xAE, 0x94 };

static const struct among a_23[12] =
{
{ 3, s_23_0, -1, -1, 0},
{ 3, s_23_1, -1, -1, 0},
{ 3, s_23_2, -1, -1, 0},
{ 3, s_23_3, -1, -1, 0},
{ 3, s_23_4, -1, -1, 0},
{ 3, s_23_5, -1, -1, 0},
{ 3, s_23_6, -1, -1, 0},
{ 3, s_23_7, -1, -1, 0},
{ 3, s_23_8, -1, -1, 0},
{ 3, s_23_9, -1, -1, 0},
{ 3, s_23_10, -1, -1, 0},
{ 3, s_23_11, -1, -1, 0}
};

static const symbol s_24_0[3] = { 0xE0, 0xAF, 0x80 };
static const symbol s_24_1[3] = { 0xE0, 0xAF, 0x81 };
static const symbol s_24_2[3] = { 0xE0, 0xAF, 0x82 };
static const symbol s_24_3[3] = { 0xE0, 0xAF, 0x86 };
static const symbol s_24_4[3] = { 0xE0, 0xAF, 0x87 };
static const symbol s_24_5[3] = { 0xE0, 0xAF, 0x88 };
static const symbol s_24_6[3] = { 0xE0, 0xAE, 0xBE };
static const symbol s_24_7[3] = { 0xE0, 0xAE, 0xBF };

static const struct among a_24[8] =
{
{ 3, s_24_0, -1, -1, 0},
{ 3, s_24_1, -1, -1, 0},
{ 3, s_24_2, -1, -1, 0},
{ 3, s_24_3, -1, -1, 0},
{ 3, s_24_4, -1, -1, 0},
{ 3, s_24_5, -1, -1, 0},
{ 3, s_24_6, -1, -1, 0},
{ 3, s_24_7, -1, -1, 0}
};

static const symbol s_25_0[6] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x81 };
static const symbol s_25_1[9] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 };
static const symbol s_25_2[6] = { 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x81 };
static const symbol s_25_3[15] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x81 };
static const symbol s_25_4[6] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x88 };
static const symbol s_25_5[6] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAF, 0x88 };
static const symbol s_25_6[12] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D };
static const symbol s_25_7[9] = { 0xE0, 0xAF, 0x87, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D };
static const symbol s_25_8[9] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D };
static const symbol s_25_9[9] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D };
static const symbol s_25_10[9] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D };
static const symbol s_25_11[9] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D };
static const symbol s_25_12[12] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D };
static const symbol s_25_13[12] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D };
static const symbol s_25_14[12] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_25_15[12] = { 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_25_16[12] = { 0xE0, 0xAE, 0xA4, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_25_17[12] = { 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_25_18[9] = { 0xE0, 0xAF, 0x86, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_25_19[9] = { 0xE0, 0xAF, 0x87, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_25_20[9] = { 0xE0, 0xAF, 0x8B, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_25_21[9] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_25_22[9] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_25_23[9] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_25_24[9] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xAF, 0xE0, 0xAF, 0x8D };
static const symbol s_25_25[9] = { 0xE0, 0xAF, 0x80, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D };
static const symbol s_25_26[9] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D };
static const symbol s_25_27[9] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D };
static const symbol s_25_28[12] = { 0xE0, 0xAF, 0x80, 0xE0, 0xAE, 0xAF, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D };
static const symbol s_25_29[9] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D };
static const symbol s_25_30[9] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D };
static const symbol s_25_31[12] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D };
static const symbol s_25_32[12] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D };
static const symbol s_25_33[24] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAF, 0x8A, 0xE0, 0xAE, 0xA3, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0x9F, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D };
static const symbol s_25_34[12] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB0, 0xE0, 0xAF, 0x8D };
static const symbol s_25_35[9] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D };
static const symbol s_25_36[9] = { 0xE0, 0xAE, 0xAA, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D };
static const symbol s_25_37[9] = { 0xE0, 0xAE, 0xB5, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D };
static const symbol s_25_38[9] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D };
static const symbol s_25_39[12] = { 0xE0, 0xAE, 0xA9, 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D };
static const symbol s_25_40[3] = { 0xE0, 0xAE, 0x95 };
static const symbol s_25_41[3] = { 0xE0, 0xAE, 0xA4 };
static const symbol s_25_42[3] = { 0xE0, 0xAE, 0xA9 };
static const symbol s_25_43[3] = { 0xE0, 0xAE, 0xAA };
static const symbol s_25_44[3] = { 0xE0, 0xAE, 0xAF };
static const symbol s_25_45[3] = { 0xE0, 0xAE, 0xBE };

static const struct among a_25[46] =
{
{ 6, s_25_0, -1, 6, 0},
{ 9, s_25_1, -1, 1, 0},
{ 6, s_25_2, -1, 3, 0},
{ 15, s_25_3, -1, 1, 0},
{ 6, s_25_4, -1, 1, 0},
{ 6, s_25_5, -1, 1, 0},
{ 12, s_25_6, -1, 1, 0},
{ 9, s_25_7, -1, 5, 0},
{ 9, s_25_8, -1, 1, 0},
{ 9, s_25_9, -1, 1, 0},
{ 9, s_25_10, -1, 2, 0},
{ 9, s_25_11, -1, 4, 0},
{ 12, s_25_12, 11, 1, 0},
{ 12, s_25_13, -1, 1, 0},
{ 12, s_25_14, -1, 1, 0},
{ 12, s_25_15, -1, 5, 0},
{ 12, s_25_16, -1, 1, 0},
{ 12, s_25_17, -1, 1, 0},
{ 9, s_25_18, -1, 5, 0},
{ 9, s_25_19, -1, 5, 0},
{ 9, s_25_20, -1, 5, 0},
{ 9, s_25_21, -1, 1, 0},
{ 9, s_25_22, -1, 1, 0},
{ 9, s_25_23, -1, 5, 0},
{ 9, s_25_24, -1, 5, 0},
{ 9, s_25_25, -1, 5, 0},
{ 9, s_25_26, -1, 1, 0},
{ 9, s_25_27, -1, 1, 0},
{ 12, s_25_28, -1, 5, 0},
{ 9, s_25_29, -1, 1, 0},
{ 9, s_25_30, -1, 5, 0},
{ 12, s_25_31, 30, 1, 0},
{ 12, s_25_32, 30, 1, 0},
{ 24, s_25_33, -1, 1, 0},
{ 12, s_25_34, -1, 5, 0},
{ 9, s_25_35, -1, 1, 0},
{ 9, s_25_36, -1, 1, 0},
{ 9, s_25_37, -1, 1, 0},
{ 9, s_25_38, -1, 5, 0},
{ 12, s_25_39, 38, 1, 0},
{ 3, s_25_40, -1, 1, 0},
{ 3, s_25_41, -1, 1, 0},
{ 3, s_25_42, -1, 1, 0},
{ 3, s_25_43, -1, 1, 0},
{ 3, s_25_44, -1, 1, 0},
{ 3, s_25_45, -1, 5, 0}
};

static const symbol s_26_0[18] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D };
static const symbol s_26_1[21] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xA8, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D };
static const symbol s_26_2[12] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB1, 0xE0, 0xAF, 0x8D };
static const symbol s_26_3[15] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1 };
static const symbol s_26_4[18] = { 0xE0, 0xAE, 0xBE, 0xE0, 0xAE, 0xA8, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D, 0xE0, 0xAE, 0xB1 };
static const symbol s_26_5[9] = { 0xE0, 0xAE, 0x95, 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xB1 };

static const struct among a_26[6] =
{
{ 18, s_26_0, -1, -1, 0},
{ 21, s_26_1, -1, -1, 0},
{ 12, s_26_2, -1, -1, 0},
{ 15, s_26_3, -1, -1, 0},
{ 18, s_26_4, -1, -1, 0},
{ 9, s_26_5, -1, -1, 0}
};

static const symbol s_0[] = { 0xE0, 0xAE, 0x93 };
static const symbol s_1[] = { 0xE0, 0xAE, 0x92 };
static const symbol s_2[] = { 0xE0, 0xAE, 0x89 };
static const symbol s_3[] = { 0xE0, 0xAE, 0x8A };
static const symbol s_4[] = { 0xE0, 0xAE, 0x8E };
static const symbol s_5[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_6[] = { 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D };
static const symbol s_7[] = { 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D };
static const symbol s_8[] = { 0xE0, 0xAE, 0x9F, 0xE0, 0xAF, 0x81 };
static const symbol s_9[] = { 0xE0, 0xAF, 0x88 };
static const symbol s_10[] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_11[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_12[] = { 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_13[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_14[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_15[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_16[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_17[] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0x99, 0xE0, 0xAF, 0x8D };
static const symbol s_18[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_19[] = { 0xE0, 0xAE, 0xB2, 0xE0, 0xAF, 0x8D };
static const symbol s_20[] = { 0xE0, 0xAE, 0xB3, 0xE0, 0xAF, 0x8D };
static const symbol s_21[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_22[] = { 0xE0, 0xAF, 0x81, 0xE0, 0xAE, 0xAE, 0xE0, 0xAF, 0x8D };
static const symbol s_23[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_24[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_25[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_26[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_27[] = { 0xE0, 0xAE, 0xAE };
static const symbol s_28[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_29[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_30[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_31[] = { 0xE0, 0xAE, 0xBF };
static const symbol s_32[] = { 0xE0, 0xAF, 0x88 };
static const symbol s_33[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_34[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_35[] = { 0xE0, 0xAE, 0xBF, 0xE0, 0xAE, 0xA9, 0xE0, 0xAF, 0x8D };
static const symbol s_36[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_37[] = { 0xE0, 0xAE, 0x9A };
static const symbol s_38[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_39[] = { 0xE0, 0xAF, 0x8D };
static const symbol s_40[] = { 0xE0, 0xAF, 0x8D };

static int r_has_min_length(struct SN_env * z) {
    return len_utf8(z->p) > 4;
}

static int r_fix_va_start(struct SN_env * z) {
    int among_var;
    z->bra = z->c;
    if (z->c + 5 >= z->l || z->p[z->c + 5] >> 5 != 4 || !((3078 >> (z->p[z->c + 5] & 0x1f)) & 1)) return 0;
    among_var = find_among(z, a_0, 4);
    if (!among_var) return 0;
    z->ket = z->c;
    switch (among_var) {
        case 1:
            {   int ret = slice_from_s(z, 3, s_0);
                if (ret < 0) return ret;
            }
            break;
        case 2:
            {   int ret = slice_from_s(z, 3, s_1);
                if (ret < 0) return ret;
            }
            break;
        case 3:
            {   int ret = slice_from_s(z, 3, s_2);
                if (ret < 0) return ret;
            }
            break;
        case 4:
            {   int ret = slice_from_s(z, 3, s_3);
                if (ret < 0) return ret;
            }
            break;
    }
    return 1;
}

static int r_fix_endings(struct SN_env * z) {
    {   int c1 = z->c;
        while(1) {
            int c2 = z->c;
            {   int ret = r_fix_ending(z);
                if (ret == 0) goto lab1;
                if (ret < 0) return ret;
            }
            continue;
        lab1:
            z->c = c2;
            break;
        }
        z->c = c1;
    }
    return 1;
}

static int r_remove_question_prefixes(struct SN_env * z) {
    z->bra = z->c;
    if (!(eq_s(z, 3, s_4))) return 0;
    if (!find_among(z, a_1, 10)) return 0;
    if (!(eq_s(z, 3, s_5))) return 0;
    z->ket = z->c;
    {   int ret = slice_del(z);
        if (ret < 0) return ret;
    }
    {   int c1 = z->c;
        {   int ret = r_fix_va_start(z);
            if (ret < 0) return ret;
        }
        z->c = c1;
    }
    return 1;
}

static int r_fix_ending(struct SN_env * z) {
    int among_var;
    if (len_utf8(z->p) <= 3) return 0;
    z->lb = z->c; z->c = z->l;

    {   int m1 = z->l - z->c; (void)m1;
        z->ket = z->c;
        among_var = find_among_b(z, a_5, 17);
        if (!among_var) goto lab1;
        z->bra = z->c;
        switch (among_var) {
            case 1:
                {   int ret = slice_del(z);
                    if (ret < 0) return ret;
                }
                break;
            case 2:
                {   int m_test2 = z->l - z->c;
                    if (!find_among_b(z, a_2, 3)) goto lab1;
                    z->c = z->l - m_test2;
                }
                {   int ret = slice_del(z);
                    if (ret < 0) return ret;
                }
                break;
            case 3:
                {   int ret = slice_from_s(z, 6, s_6);
                    if (ret < 0) return ret;
                }
                break;
            case 4:
                {   int ret = slice_from_s(z, 6, s_7);
                    if (ret < 0) return ret;
                }
                break;
            case 5:
                {   int ret = slice_from_s(z, 6, s_8);
                    if (ret < 0) return ret;
                }
                break;
            case 6:
                if (!(z->I[0])) goto lab1;
                {   int m3 = z->l - z->c; (void)m3;
                    if (!(eq_s_b(z, 3, s_9))) goto lab2;
                    goto lab1;
                lab2:
                    z->c = z->l - m3;
                }
                {   int ret = slice_from_s(z, 6, s_10);
                    if (ret < 0) return ret;
                }
                break;
            case 7:
                {   int ret = slice_from_s(z, 3, s_11);
                    if (ret < 0) return ret;
                }
                break;
            case 8:
                {   int m4 = z->l - z->c; (void)m4;
                    if (!find_among_b(z, a_3, 8)) goto lab3;
                    goto lab1;
                lab3:
                    z->c = z->l - m4;
                }
                {   int ret = slice_del(z);
                    if (ret < 0) return ret;
                }
                break;
            case 9:
                if (z->c - 2 <= z->lb || (z->p[z->c - 1] != 136 && z->p[z->c - 1] != 141)) among_var = 2; else
                among_var = find_among_b(z, a_4, 3);
                switch (among_var) {
                    case 1:
                        {   int ret = slice_del(z);
                            if (ret < 0) return ret;
                        }
                        break;
                    case 2:
                        {   int ret = slice_from_s(z, 6, s_12);
                            if (ret < 0) return ret;
                        }
                        break;
                }
                break;
        }
        goto lab0;
    lab1:
        z->c = z->l - m1;
        z->ket = z->c;
        if (!(eq_s_b(z, 3, s_13))) return 0;
        {   int m5 = z->l - z->c; (void)m5;
            if (!find_among_b(z, a_6, 6)) goto lab5;
            {   int m6 = z->l - z->c; (void)m6;
                if (!(eq_s_b(z, 3, s_14))) { z->c = z->l - m6; goto lab6; }
                if (!find_among_b(z, a_7, 6)) { z->c = z->l - m6; goto lab6; }
            lab6:
                ;
            }
            z->bra = z->c;
            {   int ret = slice_del(z);
                if (ret < 0) return ret;
            }
            goto lab4;
        lab5:
            z->c = z->l - m5;
            if (!find_among_b(z, a_8, 11)) goto lab7;
            z->bra = z->c;
            if (!(eq_s_b(z, 3, s_15))) goto lab7;
            {   int ret = slice_del(z);
                if (ret < 0) return ret;
            }
            goto lab4;
        lab7:
            z->c = z->l - m5;
            {   int m_test7 = z->l - z->c;
                if (!find_among_b(z, a_9, 9)) return 0;
                z->c = z->l - m_test7;
            }
            z->bra = z->c;
            {   int ret = slice_del(z);
                if (ret < 0) return ret;
            }
        }
    lab4:
        ;
    }
lab0:
    z->c = z->lb;
    return 1;
}

static int r_remove_pronoun_prefixes(struct SN_env * z) {
    z->bra = z->c;
    if (z->c + 2 >= z->l || z->p[z->c + 2] >> 5 != 4 || !((672 >> (z->p[z->c + 2] & 0x1f)) & 1)) return 0;
    if (!find_among(z, a_10, 3)) return 0;
    if (!find_among(z, a_11, 10)) return 0;
    if (!(eq_s(z, 3, s_16))) return 0;
    z->ket = z->c;
    {   int ret = slice_del(z);
        if (ret < 0) return ret;
    }
    {   int c1 = z->c;
        {   int ret = r_fix_va_start(z);
            if (ret < 0) return ret;
        }
        z->c = c1;
    }
    return 1;
}

static int r_remove_plural_suffix(struct SN_env * z) {
    int among_var;
    z->lb = z->c; z->c = z->l;

    z->ket = z->c;
    if (z->c - 8 <= z->lb || z->p[z->c - 1] != 141) return 0;
    among_var = find_among_b(z, a_13, 4);
    if (!among_var) return 0;
    z->bra = z->c;
    switch (among_var) {
        case 1:
            {   int m1 = z->l - z->c; (void)m1;
                if (!find_among_b(z, a_12, 6)) goto lab1;
                {   int ret = slice_from_s(z, 9, s_17);
                    if (ret < 0) return ret;
                }
                goto lab0;
            lab1:
                z->c = z->l - m1;
                {   int ret = slice_from_s(z, 3, s_18);
                    if (ret < 0) return ret;
                }
            }
        lab0:
            break;
        case 2:
            {   int ret = slice_from_s(z, 6, s_19);
                if (ret < 0) return ret;
            }
            break;
        case 3:
            {   int ret = slice_from_s(z, 6, s_20);
                if (ret < 0) return ret;
            }
            break;
        case 4:
            {   int ret = slice_del(z);
                if (ret < 0) return ret;
            }
            break;
    }
    z->c = z->lb;
    return 1;
}

static int r_remove_question_suffixes(struct SN_env * z) {
    {   int ret = r_has_min_length(z);
        if (ret <= 0) return ret;
    }
    z->lb = z->c; z->c = z->l;

    {   int m1 = z->l - z->c; (void)m1;
        z->ket = z->c;
        if (!find_among_b(z, a_14, 3)) goto lab0;
        z->bra = z->c;
        {   int ret = slice_from_s(z, 3, s_21);
            if (ret < 0) return ret;
        }
    lab0:
        z->c = z->l - m1;
    }
    z->c = z->lb;

    {   int ret = r_fix_endings(z);
        if (ret < 0) return ret;
    }
    return 1;
}

static int r_remove_command_suffixes(struct SN_env * z) {
    {   int ret = r_has_min_length(z);
        if (ret <= 0) return ret;
    }
    z->lb = z->c; z->c = z->l;

    z->ket = z->c;
    if (z->c - 5 <= z->lb || z->p[z->c - 1] != 191) return 0;
    if (!find_among_b(z, a_15, 2)) return 0;
    z->bra = z->c;
    {   int ret = slice_del(z);
        if (ret < 0) return ret;
    }
    z->c = z->lb;
    return 1;
}

static int r_remove_um(struct SN_env * z) {
    {   int ret = r_has_min_length(z);
        if (ret <= 0) return ret;
    }
    z->lb = z->c; z->c = z->l;

    z->ket = z->c;
    if (!(eq_s_b(z, 9, s_22))) return 0;
    z->bra = z->c;
    {   int ret = slice_from_s(z, 3, s_23);
        if (ret < 0) return ret;
    }
    z->c = z->lb;
    {   int c1 = z->c;
        {   int ret = r_fix_ending(z);
            if (ret < 0) return ret;
        }
        z->c = c1;
    }
    return 1;
}

static int r_remove_common_word_endings(struct SN_env * z) {
    int among_var;
    {   int ret = r_has_min_length(z);
        if (ret <= 0) return ret;
    }
    z->lb = z->c; z->c = z->l;

    z->ket = z->c;
    among_var = find_among_b(z, a_17, 26);
    if (!among_var) return 0;
    z->bra = z->c;
    switch (among_var) {
        case 1:
            {   int ret = slice_from_s(z, 3, s_24);
                if (ret < 0) return ret;
            }
            break;
        case 2:
            {   int m1 = z->l - z->c; (void)m1;
                if (!find_among_b(z, a_16, 8)) goto lab0;
                return 0;
            lab0:
                z->c = z->l - m1;
            }
            {   int ret = slice_from_s(z, 3, s_25);
                if (ret < 0) return ret;
            }
            break;
        case 3:
            {   int ret = slice_del(z);
                if (ret < 0) return ret;
            }
            break;
    }
    z->c = z->lb;

    {   int ret = r_fix_endings(z);
        if (ret < 0) return ret;
    }
    return 1;
}

static int r_remove_vetrumai_urupukal(struct SN_env * z) {
    int among_var;
    z->I[0] = 0;
    {   int ret = r_has_min_length(z);
        if (ret <= 0) return ret;
    }
    z->lb = z->c; z->c = z->l;

    {   int m1 = z->l - z->c; (void)m1;
        {   int m_test2 = z->l - z->c;
            z->ket = z->c;
            if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 4 || !((-2147475197 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab1;
            among_var = find_among_b(z, a_20, 22);
            if (!among_var) goto lab1;
            z->bra = z->c;
            switch (among_var) {
                case 1:
                    {   int ret = slice_del(z);
                        if (ret < 0) return ret;
                    }
                    break;
                case 2:
                    {   int ret = slice_from_s(z, 3, s_26);
                        if (ret < 0) return ret;
                    }
                    break;
                case 3:
                    {   int m3 = z->l - z->c; (void)m3;
                        if (!(eq_s_b(z, 3, s_27))) goto lab2;
                        goto lab1;
                    lab2:
                        z->c = z->l - m3;
                    }
                    {   int ret = slice_from_s(z, 3, s_28);
                        if (ret < 0) return ret;
                    }
                    break;
                case 4:
                    if (len_utf8(z->p) < 7) goto lab1;
                    {   int ret = slice_from_s(z, 3, s_29);
                        if (ret < 0) return ret;
                    }
                    break;
                case 5:
                    {   int m4 = z->l - z->c; (void)m4;
                        if (!find_among_b(z, a_18, 8)) goto lab3;
                        goto lab1;
                    lab3:
                        z->c = z->l - m4;
                    }
                    {   int ret = slice_from_s(z, 3, s_30);
                        if (ret < 0) return ret;
                    }
                    break;
                case 6:
                    {   int m5 = z->l - z->c; (void)m5;
                        if (!find_among_b(z, a_19, 8)) goto lab4;
                        goto lab1;
                    lab4:
                        z->c = z->l - m5;
                    }
                    {   int ret = slice_del(z);
                        if (ret < 0) return ret;
                    }
                    break;
                case 7:
                    {   int ret = slice_from_s(z, 3, s_31);
                        if (ret < 0) return ret;
                    }
                    break;
            }
            z->c = z->l - m_test2;
        }
        goto lab0;
    lab1:
        z->c = z->l - m1;
        {   int m_test6 = z->l - z->c;
            z->ket = z->c;
            if (!(eq_s_b(z, 3, s_32))) return 0;
            {   int m7 = z->l - z->c; (void)m7;
                {   int m8 = z->l - z->c; (void)m8;
                    if (!find_among_b(z, a_21, 6)) goto lab7;
                    goto lab6;
                lab7:
                    z->c = z->l - m8;
                }
                goto lab5;
            lab6:
                z->c = z->l - m7;
                {   int m_test9 = z->l - z->c;
                    if (!find_among_b(z, a_22, 6)) return 0;
                    if (!(eq_s_b(z, 3, s_33))) return 0;
                    z->c = z->l - m_test9;
                }
            }
        lab5:
            z->bra = z->c;
            {   int ret = slice_from_s(z, 3, s_34);
                if (ret < 0) return ret;
            }
            z->c = z->l - m_test6;
        }
    }
lab0:
    z->I[0] = 1;
    {   int m10 = z->l - z->c; (void)m10;
        z->ket = z->c;
        if (!(eq_s_b(z, 9, s_35))) goto lab8;
        z->bra = z->c;
        {   int ret = slice_from_s(z, 3, s_36);
            if (ret < 0) return ret;
        }
    lab8:
        z->c = z->l - m10;
    }
    z->c = z->lb;

    {   int ret = r_fix_endings(z);
        if (ret < 0) return ret;
    }
    return 1;
}

static int r_remove_tense_suffixes(struct SN_env * z) {
    z->I[1] = 1;
    while(1) {
        int c1 = z->c;
        if (!(z->I[1])) goto lab0;
        {   int c2 = z->c;
            {   int ret = r_remove_tense_suffix(z);
                if (ret < 0) return ret;
            }
            z->c = c2;
        }
        continue;
    lab0:
        z->c = c1;
        break;
    }
    return 1;
}

static int r_remove_tense_suffix(struct SN_env * z) {
    int among_var;
    z->I[1] = 0;
    {   int ret = r_has_min_length(z);
        if (ret <= 0) return ret;
    }
    z->lb = z->c; z->c = z->l;

    {   int m1 = z->l - z->c; (void)m1;
        {   int m_test2 = z->l - z->c;
            z->ket = z->c;
            among_var = find_among_b(z, a_25, 46);
            if (!among_var) goto lab0;
            z->bra = z->c;
            switch (among_var) {
                case 1:
                    {   int ret = slice_del(z);
                        if (ret < 0) return ret;
                    }
                    break;
                case 2:
                    {   int m3 = z->l - z->c; (void)m3;
                        if (z->c - 2 <= z->lb || z->p[z->c - 1] >> 5 != 4 || !((1951712 >> (z->p[z->c - 1] & 0x1f)) & 1)) goto lab1;
                        if (!find_among_b(z, a_23, 12)) goto lab1;
                        goto lab0;
                    lab1:
                        z->c = z->l - m3;
                    }
                    {   int ret = slice_del(z);
                        if (ret < 0) return ret;
                    }
                    break;
                case 3:
                    {   int m4 = z->l - z->c; (void)m4;
                        if (!find_among_b(z, a_24, 8)) goto lab2;
                        goto lab0;
                    lab2:
                        z->c = z->l - m4;
                    }
                    {   int ret = slice_del(z);
                        if (ret < 0) return ret;
                    }
                    break;
                case 4:
                    {   int m5 = z->l - z->c; (void)m5;
                        if (!(eq_s_b(z, 3, s_37))) goto lab3;
                        goto lab0;
                    lab3:
                        z->c = z->l - m5;
                    }
                    {   int ret = slice_from_s(z, 3, s_38);
                        if (ret < 0) return ret;
                    }
                    break;
                case 5:
                    {   int ret = slice_from_s(z, 3, s_39);
                        if (ret < 0) return ret;
                    }
                    break;
                case 6:
                    {   int m_test6 = z->l - z->c;
                        if (!(eq_s_b(z, 3, s_40))) goto lab0;
                        z->c = z->l - m_test6;
                    }
                    {   int ret = slice_del(z);
                        if (ret < 0) return ret;
                    }
                    break;
            }
            z->I[1] = 1;
            z->c = z->l - m_test2;
        }
    lab0:
        z->c = z->l - m1;
    }
    {   int m7 = z->l - z->c; (void)m7;
        z->ket = z->c;
        if (z->c - 8 <= z->lb || (z->p[z->c - 1] != 141 && z->p[z->c - 1] != 177)) goto lab4;
        if (!find_among_b(z, a_26, 6)) goto lab4;
        z->bra = z->c;
        {   int ret = slice_del(z);
            if (ret < 0) return ret;
        }
        z->I[1] = 1;
    lab4:
        z->c = z->l - m7;
    }
    z->c = z->lb;

    {   int ret = r_fix_endings(z);
        if (ret < 0) return ret;
    }
    return 1;
}

extern int tamil_UTF_8_stem(struct SN_env * z) {
    z->I[0] = 0;
    {   int c1 = z->c;
        {   int ret = r_fix_ending(z);
            if (ret < 0) return ret;
        }
        z->c = c1;
    }
    {   int ret = r_has_min_length(z);
        if (ret <= 0) return ret;
    }
    {   int c2 = z->c;
        {   int ret = r_remove_question_prefixes(z);
            if (ret < 0) return ret;
        }
        z->c = c2;
    }
    {   int c3 = z->c;
        {   int ret = r_remove_pronoun_prefixes(z);
            if (ret < 0) return ret;
        }
        z->c = c3;
    }
    {   int c4 = z->c;
        {   int ret = r_remove_question_suffixes(z);
            if (ret < 0) return ret;
        }
        z->c = c4;
    }
    {   int c5 = z->c;
        {   int ret = r_remove_um(z);
            if (ret < 0) return ret;
        }
        z->c = c5;
    }
    {   int c6 = z->c;
        {   int ret = r_remove_common_word_endings(z);
            if (ret < 0) return ret;
        }
        z->c = c6;
    }
    {   int c7 = z->c;
        {   int ret = r_remove_vetrumai_urupukal(z);
            if (ret < 0) return ret;
        }
        z->c = c7;
    }
    {   int c8 = z->c;
        {   int ret = r_remove_plural_suffix(z);
            if (ret < 0) return ret;
        }
        z->c = c8;
    }
    {   int c9 = z->c;
        {   int ret = r_remove_command_suffixes(z);
            if (ret < 0) return ret;
        }
        z->c = c9;
    }
    {   int c10 = z->c;
        {   int ret = r_remove_tense_suffixes(z);
            if (ret < 0) return ret;
        }
        z->c = c10;
    }
    return 1;
}

extern struct SN_env * tamil_UTF_8_create_env(void) { return SN_create_env(0, 2); }

extern void tamil_UTF_8_close_env(struct SN_env * z) { SN_close_env(z, 0); }

