mono_trace_eval_exception (struct MonoClass * klass)
{
  gboolean D.21988;
  struct MonoTraceOperation * D.21989;
  unsigned int i.0;
  unsigned int D.21991;
  <unnamed type> D.21992;
  int D.21674;
  int iftmp.1;
  int D.21670;
  const char[1] * D.21998;
  unsigned char D.21999;
  int D.22000;
  unsigned char D.22001;
  int D.22002;
  const unsigned char * D.22007;
  unsigned char D.22008;
  int D.22009;
  const unsigned char * D.22010;
  unsigned char D.22011;
  int D.22012;
  const unsigned char * D.22017;
  unsigned char D.22018;
  int D.22019;
  const unsigned char * D.22020;
  unsigned char D.22021;
  int D.22022;
  const unsigned char * D.22027;
  unsigned char D.22028;
  int D.22029;
  const unsigned char * D.22030;
  unsigned char D.22031;
  int D.22032;
  void * D.22034;
  unsigned char D.22035;
  int D.22036;
  int D.21683;
  int iftmp.2;
  int D.21679;
  const char[4] * D.22041;
  unsigned char D.22042;
  int D.22043;
  unsigned char D.22044;
  int D.22045;
  const unsigned char * D.22050;
  unsigned char D.22051;
  int D.22052;
  const unsigned char * D.22053;
  unsigned char D.22054;
  int D.22055;
  const unsigned char * D.22060;
  unsigned char D.22061;
  int D.22062;
  const unsigned char * D.22063;
  unsigned char D.22064;
  int D.22065;
  const unsigned char * D.22070;
  unsigned char D.22071;
  int D.22072;
  const unsigned char * D.22073;
  unsigned char D.22074;
  int D.22075;
  void * D.22077;
  int D.21692;
  int iftmp.3;
  int D.21688;
  unsigned char D.22084;
  int D.22085;
  const unsigned char * D.22090;
  unsigned char D.22091;
  int D.22092;
  const unsigned char * D.22097;
  unsigned char D.22098;
  int D.22099;
  const unsigned char * D.22104;
  unsigned char D.22105;
  int D.22106;
  int D.21701;
  const char * D.22109;
  int D.21710;
  const char * D.22110;
  int D.22113;
  int D.22121;
  int include;
  int i;

  include = 0;
  if (klass == 0B) goto <D.21986>; else goto <D.21987>;
  <D.21986>:
  D.21988 = 0;
  return D.21988;
  <D.21987>:
  i = 0;
  goto <D.21714>;
  <D.21713>:
  {
    struct MonoTraceOperation * op;
    int inc;

    D.21989 = trace_spec.ops;
    i.0 = (unsigned int) i;
    D.21991 = i.0 * 16;
    op = D.21989 + D.21991;
    inc = 0;
    D.21992 = op->op;
    switch (D.21992) <default: <D.21712>, case 6: <D.21665>>
    <D.21665>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 0;
      if (__s1_len <= 3) goto <D.21996>; else goto <D.21997>;
      <D.21996>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = op->data;
        D.21998 = "";
        D.21999 = MEM[(const unsigned char *)D.21998];
        D.22000 = (int) D.21999;
        D.22001 = *__s2;
        D.22002 = (int) D.22001;
        __result = D.22000 - D.22002;
        {
          if (__s1_len != 0) goto <D.22003>; else goto <D.22004>;
          <D.22003>:
          if (__result == 0) goto <D.22005>; else goto <D.22006>;
          <D.22005>:
          D.22007 = &MEM[(void *)"" + 1B];
          D.22008 = *D.22007;
          D.22009 = (int) D.22008;
          D.22010 = __s2 + 1;
          D.22011 = *D.22010;
          D.22012 = (int) D.22011;
          __result = D.22009 - D.22012;
          if (__s1_len > 1) goto <D.22013>; else goto <D.22014>;
          <D.22013>:
          if (__result == 0) goto <D.22015>; else goto <D.22016>;
          <D.22015>:
          D.22017 = &MEM[(void *)"" + 2B];
          D.22018 = *D.22017;
          D.22019 = (int) D.22018;
          D.22020 = __s2 + 2;
          D.22021 = *D.22020;
          D.22022 = (int) D.22021;
          __result = D.22019 - D.22022;
          if (__s1_len > 2) goto <D.22023>; else goto <D.22024>;
          <D.22023>:
          if (__result == 0) goto <D.22025>; else goto <D.22026>;
          <D.22025>:
          D.22027 = &MEM[(void *)"" + 3B];
          D.22028 = *D.22027;
          D.22029 = (int) D.22028;
          D.22030 = __s2 + 3;
          D.22031 = *D.22030;
          D.22032 = (int) D.22031;
          __result = D.22029 - D.22032;
          <D.22026>:
          <D.22024>:
          <D.22016>:
          <D.22014>:
          <D.22006>:
          <D.22004>:
        }
        D.21670 = __result;
      }
      iftmp.1 = D.21670;
      goto <D.22033>;
      <D.21997>:
      D.22034 = op->data;
      D.22035 = MEM[(const unsigned char * {ref-all})D.22034];
      D.22036 = (int) D.22035;
      iftmp.1 = -D.22036;
      <D.22033>:
      D.21674 = iftmp.1;
    }
    if (D.21674 == 0) goto <D.22037>; else goto <D.21993>;
    <D.22037>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 3;
      if (__s1_len <= 3) goto <D.22039>; else goto <D.22040>;
      <D.22039>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = op->data2;
        D.22041 = "all";
        D.22042 = MEM[(const unsigned char *)D.22041];
        D.22043 = (int) D.22042;
        D.22044 = *__s2;
        D.22045 = (int) D.22044;
        __result = D.22043 - D.22045;
        {
          if (__s1_len != 0) goto <D.22046>; else goto <D.22047>;
          <D.22046>:
          if (__result == 0) goto <D.22048>; else goto <D.22049>;
          <D.22048>:
          D.22050 = &MEM[(void *)"all" + 1B];
          D.22051 = *D.22050;
          D.22052 = (int) D.22051;
          D.22053 = __s2 + 1;
          D.22054 = *D.22053;
          D.22055 = (int) D.22054;
          __result = D.22052 - D.22055;
          if (__s1_len > 1) goto <D.22056>; else goto <D.22057>;
          <D.22056>:
          if (__result == 0) goto <D.22058>; else goto <D.22059>;
          <D.22058>:
          D.22060 = &MEM[(void *)"all" + 2B];
          D.22061 = *D.22060;
          D.22062 = (int) D.22061;
          D.22063 = __s2 + 2;
          D.22064 = *D.22063;
          D.22065 = (int) D.22064;
          __result = D.22062 - D.22065;
          if (__s1_len > 2) goto <D.22066>; else goto <D.22067>;
          <D.22066>:
          if (__result == 0) goto <D.22068>; else goto <D.22069>;
          <D.22068>:
          D.22070 = &MEM[(void *)"all" + 3B];
          D.22071 = *D.22070;
          D.22072 = (int) D.22071;
          D.22073 = __s2 + 3;
          D.22074 = *D.22073;
          D.22075 = (int) D.22074;
          __result = D.22072 - D.22075;
          <D.22069>:
          <D.22067>:
          <D.22059>:
          <D.22057>:
          <D.22049>:
          <D.22047>:
        }
        D.21679 = __result;
      }
      iftmp.2 = D.21679;
      goto <D.22076>;
      <D.22040>:
      D.22077 = op->data2;
      iftmp.2 = __builtin_strcmp ("all", D.22077);
      <D.22076>:
      D.21683 = iftmp.2;
    }
    if (D.21683 == 0) goto <D.22078>; else goto <D.21993>;
    <D.22078>:
    inc = 1;
    goto <D.21994>;
    <D.21993>:
    {
      size_t __s1_len;
      size_t __s2_len;

      __s1_len = 0;
      if (__s1_len <= 3) goto <D.22082>; else goto <D.22083>;
      <D.22082>:
      {
        const unsigned char * __s2;
        int __result;

        __s2 = op->data;
        D.21998 = "";
        D.21999 = MEM[(const unsigned char *)D.21998];
        D.22000 = (int) D.21999;
        D.22084 = *__s2;
        D.22085 = (int) D.22084;
        __result = D.22000 - D.22085;
        {
          if (__s1_len != 0) goto <D.22086>; else goto <D.22087>;
          <D.22086>:
          if (__result == 0) goto <D.22088>; else goto <D.22089>;
          <D.22088>:
          D.22007 = &MEM[(void *)"" + 1B];
          D.22008 = *D.22007;
          D.22009 = (int) D.22008;
          D.22090 = __s2 + 1;
          D.22091 = *D.22090;
          D.22092 = (int) D.22091;
          __result = D.22009 - D.22092;
          if (__s1_len > 1) goto <D.22093>; else goto <D.22094>;
          <D.22093>:
          if (__result == 0) goto <D.22095>; else goto <D.22096>;
          <D.22095>:
          D.22017 = &MEM[(void *)"" + 2B];
          D.22018 = *D.22017;
          D.22019 = (int) D.22018;
          D.22097 = __s2 + 2;
          D.22098 = *D.22097;
          D.22099 = (int) D.22098;
          __result = D.22019 - D.22099;
          if (__s1_len > 2) goto <D.22100>; else goto <D.22101>;
          <D.22100>:
          if (__result == 0) goto <D.22102>; else goto <D.22103>;
          <D.22102>:
          D.22027 = &MEM[(void *)"" + 3B];
          D.22028 = *D.22027;
          D.22029 = (int) D.22028;
          D.22104 = __s2 + 3;
          D.22105 = *D.22104;
          D.22106 = (int) D.22105;
          __result = D.22029 - D.22106;
          <D.22103>:
          <D.22101>:
          <D.22096>:
          <D.22094>:
          <D.22089>:
          <D.22087>:
        }
        D.21688 = __result;
      }
      iftmp.3 = D.21688;
      goto <D.22107>;
      <D.22083>:
      D.22034 = op->data;
      D.22035 = MEM[(const unsigned char * {ref-all})D.22034];
      D.22036 = (int) D.22035;
      iftmp.3 = -D.22036;
      <D.22107>:
      D.21692 = iftmp.3;
    }
    if (D.21692 == 0) goto <D.22079>; else goto <D.22108>;
    <D.22108>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.22109 = klass->name_space;
      D.22034 = op->data;
      D.21701 = __builtin_strcmp (D.22109, D.22034);
    }
    if (D.21701 == 0) goto <D.22079>; else goto <D.22080>;
    <D.22079>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.22110 = klass->name;
      D.22077 = op->data2;
      D.21710 = __builtin_strcmp (D.22110, D.22077);
    }
    if (D.21710 == 0) goto <D.22111>; else goto <D.22112>;
    <D.22111>:
    inc = 1;
    <D.22112>:
    <D.22080>:
    <D.21994>:
    goto <D.21711>;
    <D.21712>:
    goto <D.21711>;
    <D.21711>:
    D.22113 = op->exclude;
    if (D.22113 != 0) goto <D.22114>; else goto <D.22115>;
    <D.22114>:
    if (inc != 0) goto <D.22116>; else goto <D.22117>;
    <D.22116>:
    include = 0;
    <D.22117>:
    goto <D.22118>;
    <D.22115>:
    if (inc != 0) goto <D.22119>; else goto <D.22120>;
    <D.22119>:
    include = 1;
    <D.22120>:
    <D.22118>:
  }
  i = i + 1;
  <D.21714>:
  D.22121 = trace_spec.len;
  if (D.22121 > i) goto <D.21713>; else goto <D.21715>;
  <D.21715>:
  D.21988 = include;
  return D.21988;
}


mono_trace_eval (struct MonoMethod * method)
{
  struct MonoTraceOperation * D.22124;
  unsigned int i.4;
  unsigned int D.22126;
  <unnamed type> D.22127;
  struct MonoAssembly * D.22128;
  struct MonoClass * D.22131;
  struct MonoImage * D.22132;
  struct MonoImage * D.22133;
  unsigned int D.22138;
  unsigned int D.22139;
  void * D.22141;
  int D.22142;
  int D.21737;
  const char * D.22145;
  int D.21746;
  const char * D.22148;
  void * D.22149;
  int D.21756;
  const char * D.22152;
  int D.21766;
  int D.22158;
  int D.22166;
  gboolean D.22167;
  int include;
  int i;

  include = 0;
  i = 0;
  goto <D.21769>;
  <D.21768>:
  {
    struct MonoTraceOperation * op;
    int inc;

    D.22124 = trace_spec.ops;
    i.4 = (unsigned int) i;
    D.22126 = i.4 * 16;
    op = D.22124 + D.22126;
    inc = 0;
    D.22127 = op->op;
    switch (D.22127) <default: <D.22157>, case 0: <D.21723>, case 1: <D.21725>, case 2: <D.21727>, case 3: <D.21747>, case 4: <D.21728>, case 5: <D.21757>, case 6: <D.21767>, case 7: <D.21726>>
    <D.21723>:
    inc = 1;
    goto <D.21724>;
    <D.21725>:
    D.22128 = trace_spec.assembly;
    if (D.22128 != 0B) goto <D.22129>; else goto <D.22130>;
    <D.22129>:
    D.22131 = method->klass;
    D.22132 = D.22131->image;
    D.22128 = trace_spec.assembly;
    D.22133 = mono_assembly_get_image (D.22128);
    if (D.22132 == D.22133) goto <D.22134>; else goto <D.22135>;
    <D.22134>:
    inc = 1;
    <D.22135>:
    <D.22130>:
    goto <D.21724>;
    <D.21726>:
    D.22138 = BIT_FIELD_REF <*method, 32, 160>;
    D.22139 = D.22138 & 124;
    if (D.22139 == 20) goto <D.22136>; else goto <D.22140>;
    <D.22140>:
    D.22138 = BIT_FIELD_REF <*method, 32, 160>;
    D.22139 = D.22138 & 124;
    if (D.22139 == 24) goto <D.22136>; else goto <D.22137>;
    <D.22136>:
    inc = 1;
    <D.22137>:
    goto <D.21724>;
    <D.21727>:
    D.22141 = op->data;
    D.22142 = mono_method_desc_full_match (D.22141, method);
    if (D.22142 != 0) goto <D.22143>; else goto <D.22144>;
    <D.22143>:
    inc = 1;
    <D.22144>:
    goto <D.21724>;
    <D.21728>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.22131 = method->klass;
      D.22145 = D.22131->name_space;
      D.22141 = op->data;
      D.21737 = __builtin_strcmp (D.22145, D.22141);
    }
    if (D.21737 == 0) goto <D.22146>; else goto <D.22147>;
    <D.22146>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.22131 = method->klass;
      D.22148 = D.22131->name;
      D.22149 = op->data2;
      D.21746 = __builtin_strcmp (D.22148, D.22149);
    }
    if (D.21746 == 0) goto <D.22150>; else goto <D.22151>;
    <D.22150>:
    inc = 1;
    <D.22151>:
    <D.22147>:
    goto <D.21724>;
    <D.21747>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.22131 = method->klass;
      D.22132 = D.22131->image;
      D.22152 = mono_image_get_name (D.22132);
      D.22141 = op->data;
      D.21756 = __builtin_strcmp (D.22152, D.22141);
    }
    if (D.21756 == 0) goto <D.22153>; else goto <D.22154>;
    <D.22153>:
    inc = 1;
    <D.22154>:
    goto <D.21724>;
    <D.21757>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.22131 = method->klass;
      D.22145 = D.22131->name_space;
      D.22141 = op->data;
      D.21766 = __builtin_strcmp (D.22145, D.22141);
    }
    if (D.21766 == 0) goto <D.22155>; else goto <D.22156>;
    <D.22155>:
    inc = 1;
    <D.22156>:
    <D.21767>:
    goto <D.21724>;
    <D.22157>:
    <D.21724>:
    D.22158 = op->exclude;
    if (D.22158 != 0) goto <D.22159>; else goto <D.22160>;
    <D.22159>:
    if (inc != 0) goto <D.22161>; else goto <D.22162>;
    <D.22161>:
    include = 0;
    <D.22162>:
    goto <D.22163>;
    <D.22160>:
    if (inc != 0) goto <D.22164>; else goto <D.22165>;
    <D.22164>:
    include = 1;
    <D.22165>:
    <D.22163>:
  }
  i = i + 1;
  <D.21769>:
  D.22166 = trace_spec.len;
  if (D.22166 > i) goto <D.21768>; else goto <D.21770>;
  <D.21770>:
  D.22167 = include;
  return D.22167;
}


mono_trace_parse_options (const char * options)
{
  char D.22169;
  void * D.22172;
  struct MonoTraceOperation * D.22173;
  struct MonoTraceSpec * D.22174;
  unsigned int size.5;
  unsigned int D.22178;
  void * D.22179;
  int last_used.6;
  char * p;
  int size;
  int last_used;
  int token;

  try
    {
      p = options;
      size = 1;
      trace_spec.enabled = 1;
      D.22169 = *p;
      if (D.22169 == 0) goto <D.22170>; else goto <D.22171>;
      <D.22170>:
      trace_spec.len = 1;
      D.22172 = monoeg_malloc0 (16);
      trace_spec.ops = D.22172;
      D.22173 = trace_spec.ops;
      D.22173->op = 0;
      D.22174 = &trace_spec;
      return D.22174;
      <D.22171>:
      p = options;
      goto <D.21856>;
      <D.21855>:
      D.22169 = *p;
      if (D.22169 == 44) goto <D.22175>; else goto <D.22176>;
      <D.22175>:
      size = size + 1;
      <D.22176>:
      p = p + 1;
      <D.21856>:
      D.22169 = *p;
      if (D.22169 != 0) goto <D.21855>; else goto <D.21857>;
      <D.21857>:
      size.5 = (unsigned int) size;
      D.22178 = size.5 * 16;
      D.22179 = monoeg_malloc0 (D.22178);
      trace_spec.ops = D.22179;
      input = options;
      last_used = 0;
      goto <D.21858>;
      <D.21859>:
      if (token == 12) goto <D.22180>; else goto <D.22181>;
      <D.22180>:
      D.22174 = 0B;
      return D.22174;
      <D.22181>:
      if (token == 10) goto <D.22182>; else goto <D.22183>;
      <D.22182>:
      // predicted unlikely by continue predictor.
      goto <D.21858>;
      <D.22183>:
      <D.21858>:
      token = get_spec (&last_used);
      if (token != 11) goto <D.21859>; else goto <D.21860>;
      <D.21860>:
      last_used.6 = last_used;
      trace_spec.len = last_used.6;
      cleanup ();
      D.22174 = &trace_spec;
      return D.22174;
    }
  finally
    {
      last_used = {CLOBBER};
    }
}


get_spec (int * last)
{
  struct _IO_FILE * stderr.7;
  int D.22192;
  struct MonoTraceOperation * D.22195;
  int D.22196;
  sizetype D.22197;
  sizetype D.22198;
  sizetype D.22199;
  struct MonoTraceOperation * D.22200;
  unsigned int token.8;
  unsigned int D.22202;
  char * value.9;
  unsigned int D.22210;
  unsigned int D.22211;
  struct MonoTraceOperation * D.22212;
  gchar * D.22225;
  char * p.10;
  gchar * D.22234;
  gchar * D.22235;
  gchar * D.22237;
  gchar * D.22238;
  MonoTraceOpcode iftmp.11;
  gchar * D.22245;
  int D.22250;
  int token;

  token = get_token ();
  if (token == 8) goto <D.22187>; else goto <D.22188>;
  <D.22187>:
  token = get_spec (last);
  if (token == 8) goto <D.22189>; else goto <D.22190>;
  <D.22189>:
  stderr.7 = stderr;
  fprintf (stderr.7, "Expecting an expression");
  D.22192 = 12;
  return D.22192;
  <D.22190>:
  if (token == 12) goto <D.22193>; else goto <D.22194>;
  <D.22193>:
  D.22192 = token;
  return D.22192;
  <D.22194>:
  D.22195 = trace_spec.ops;
  D.22196 = *last;
  D.22197 = (sizetype) D.22196;
  D.22198 = D.22197 + 268435455;
  D.22199 = D.22198 * 16;
  D.22200 = D.22195 + D.22199;
  D.22200->exclude = 1;
  D.22192 = 10;
  return D.22192;
  <D.22188>:
  token.8 = (unsigned int) token;
  D.22202 = token.8 + 4294967286;
  if (D.22202 <= 2) goto <D.22203>; else goto <D.22204>;
  <D.22203>:
  D.22192 = token;
  return D.22192;
  <D.22204>:
  if (token == 0) goto <D.22205>; else goto <D.22206>;
  <D.22205>:
  {
    struct MonoMethodDesc * desc;

    value.9 = value;
    desc = mono_method_desc_new (value.9, 1);
    if (desc == 0B) goto <D.22208>; else goto <D.22209>;
    <D.22208>:
    stderr.7 = stderr;
    value.9 = value;
    fprintf (stderr.7, "Invalid method name: %s\n", value.9);
    D.22192 = 12;
    return D.22192;
    <D.22209>:
    D.22195 = trace_spec.ops;
    D.22196 = *last;
    D.22210 = (unsigned int) D.22196;
    D.22211 = D.22210 * 16;
    D.22212 = D.22195 + D.22211;
    D.22212->op = 2;
    D.22195 = trace_spec.ops;
    D.22196 = *last;
    D.22210 = (unsigned int) D.22196;
    D.22211 = D.22210 * 16;
    D.22212 = D.22195 + D.22211;
    D.22212->data = desc;
  }
  goto <D.22213>;
  <D.22206>:
  if (token == 2) goto <D.22214>; else goto <D.22215>;
  <D.22214>:
  D.22195 = trace_spec.ops;
  D.22196 = *last;
  D.22210 = (unsigned int) D.22196;
  D.22211 = D.22210 * 16;
  D.22212 = D.22195 + D.22211;
  D.22212->op = 0;
  goto <D.22216>;
  <D.22215>:
  if (token == 3) goto <D.22217>; else goto <D.22218>;
  <D.22217>:
  D.22195 = trace_spec.ops;
  D.22196 = *last;
  D.22210 = (unsigned int) D.22196;
  D.22211 = D.22210 * 16;
  D.22212 = D.22195 + D.22211;
  D.22212->op = 1;
  goto <D.22219>;
  <D.22218>:
  if (token == 6) goto <D.22220>; else goto <D.22221>;
  <D.22220>:
  D.22195 = trace_spec.ops;
  D.22196 = *last;
  D.22210 = (unsigned int) D.22196;
  D.22211 = D.22210 * 16;
  D.22212 = D.22195 + D.22211;
  D.22212->op = 7;
  goto <D.22222>;
  <D.22221>:
  if (token == 5) goto <D.22223>; else goto <D.22224>;
  <D.22223>:
  D.22195 = trace_spec.ops;
  D.22196 = *last;
  D.22210 = (unsigned int) D.22196;
  D.22211 = D.22210 * 16;
  D.22212 = D.22195 + D.22211;
  D.22212->op = 5;
  D.22195 = trace_spec.ops;
  D.22196 = *last;
  D.22210 = (unsigned int) D.22196;
  D.22211 = D.22210 * 16;
  D.22212 = D.22195 + D.22211;
  value.9 = value;
  D.22225 = monoeg_strdup (value.9);
  D.22212->data = D.22225;
  goto <D.22226>;
  <D.22224>:
  if (token == 1) goto <D.22227>; else goto <D.22230>;
  <D.22230>:
  if (token == 4) goto <D.22227>; else goto <D.22228>;
  <D.22227>:
  {
    char * p;

    value.9 = value;
    p = strrchr (value.9, 46);
    if (p != 0B) goto <D.22231>; else goto <D.22232>;
    <D.22231>:
    p.10 = p;
    p = p.10 + 1;
    *p.10 = 0;
    D.22195 = trace_spec.ops;
    D.22196 = *last;
    D.22210 = (unsigned int) D.22196;
    D.22211 = D.22210 * 16;
    D.22212 = D.22195 + D.22211;
    value.9 = value;
    D.22234 = monoeg_strdup (value.9);
    D.22212->data = D.22234;
    D.22195 = trace_spec.ops;
    D.22196 = *last;
    D.22210 = (unsigned int) D.22196;
    D.22211 = D.22210 * 16;
    D.22212 = D.22195 + D.22211;
    D.22235 = monoeg_strdup (p);
    D.22212->data2 = D.22235;
    goto <D.22236>;
    <D.22232>:
    D.22195 = trace_spec.ops;
    D.22196 = *last;
    D.22210 = (unsigned int) D.22196;
    D.22211 = D.22210 * 16;
    D.22212 = D.22195 + D.22211;
    D.22237 = monoeg_strdup ("");
    D.22212->data = D.22237;
    D.22195 = trace_spec.ops;
    D.22196 = *last;
    D.22210 = (unsigned int) D.22196;
    D.22211 = D.22210 * 16;
    D.22212 = D.22195 + D.22211;
    value.9 = value;
    D.22238 = monoeg_strdup (value.9);
    D.22212->data2 = D.22238;
    <D.22236>:
    D.22195 = trace_spec.ops;
    D.22196 = *last;
    D.22210 = (unsigned int) D.22196;
    D.22211 = D.22210 * 16;
    D.22212 = D.22195 + D.22211;
    if (token == 1) goto <D.22240>; else goto <D.22241>;
    <D.22240>:
    iftmp.11 = 4;
    goto <D.22242>;
    <D.22241>:
    iftmp.11 = 6;
    <D.22242>:
    D.22212->op = iftmp.11;
  }
  goto <D.22229>;
  <D.22228>:
  if (token == 7) goto <D.22243>; else goto <D.22244>;
  <D.22243>:
  D.22195 = trace_spec.ops;
  D.22196 = *last;
  D.22210 = (unsigned int) D.22196;
  D.22211 = D.22210 * 16;
  D.22212 = D.22195 + D.22211;
  D.22212->op = 3;
  D.22195 = trace_spec.ops;
  D.22196 = *last;
  D.22210 = (unsigned int) D.22196;
  D.22211 = D.22210 * 16;
  D.22212 = D.22195 + D.22211;
  value.9 = value;
  D.22245 = monoeg_strdup (value.9);
  D.22212->data = D.22245;
  goto <D.22246>;
  <D.22244>:
  if (token == 9) goto <D.22247>; else goto <D.22248>;
  <D.22247>:
  trace_spec.enabled = 0;
  goto <D.22249>;
  <D.22248>:
  stderr.7 = stderr;
  fprintf (stderr.7, "Syntax error in trace option specification\n");
  D.22192 = 12;
  return D.22192;
  <D.22249>:
  <D.22246>:
  <D.22229>:
  <D.22226>:
  <D.22222>:
  <D.22219>:
  <D.22216>:
  <D.22213>:
  D.22196 = *last;
  D.22250 = D.22196 + 1;
  *last = D.22250;
  D.22192 = 10;
  return D.22192;
}


get_token ()
{
  char * input.12;
  char * input.13;
  char D.22254;
  int D.22257;
  char D.22260;
  char * input.14;
  int D.22278;
  int D.22279;
  int D.21811;
  int iftmp.15;
  int D.21810;
  const char[4] * D.22285;
  unsigned char D.22286;
  int D.22287;
  unsigned char D.22288;
  int D.22289;
  const unsigned char * D.22294;
  unsigned char D.22295;
  int D.22296;
  const unsigned char * D.22297;
  unsigned char D.22298;
  int D.22299;
  const unsigned char * D.22304;
  unsigned char D.22305;
  int D.22306;
  const unsigned char * D.22307;
  unsigned char D.22308;
  int D.22309;
  const unsigned char * D.22314;
  unsigned char D.22315;
  int D.22316;
  const unsigned char * D.22317;
  unsigned char D.22318;
  int D.22319;
  char * value.16;
  int D.21820;
  int iftmp.17;
  int D.21819;
  const char[8] * D.22327;
  unsigned char D.22328;
  int D.22329;
  unsigned char D.22330;
  int D.22331;
  const unsigned char * D.22336;
  unsigned char D.22337;
  int D.22338;
  const unsigned char * D.22339;
  unsigned char D.22340;
  int D.22341;
  const unsigned char * D.22346;
  unsigned char D.22347;
  int D.22348;
  const unsigned char * D.22349;
  unsigned char D.22350;
  int D.22351;
  const unsigned char * D.22356;
  unsigned char D.22357;
  int D.22358;
  const unsigned char * D.22359;
  unsigned char D.22360;
  int D.22361;
  int D.21829;
  int iftmp.18;
  int D.21828;
  const char[8] * D.22368;
  unsigned char D.22369;
  int D.22370;
  unsigned char D.22371;
  int D.22372;
  const unsigned char * D.22377;
  unsigned char D.22378;
  int D.22379;
  const unsigned char * D.22380;
  unsigned char D.22381;
  int D.22382;
  const unsigned char * D.22387;
  unsigned char D.22388;
  int D.22389;
  const unsigned char * D.22390;
  unsigned char D.22391;
  int D.22392;
  const unsigned char * D.22397;
  unsigned char D.22398;
  int D.22399;
  const unsigned char * D.22400;
  unsigned char D.22401;
  int D.22402;
  int D.21838;
  int iftmp.19;
  int D.21837;
  const char[9] * D.22409;
  unsigned char D.22410;
  int D.22411;
  unsigned char D.22412;
  int D.22413;
  const unsigned char * D.22418;
  unsigned char D.22419;
  int D.22420;
  const unsigned char * D.22421;
  unsigned char D.22422;
  int D.22423;
  const unsigned char * D.22428;
  unsigned char D.22429;
  int D.22430;
  const unsigned char * D.22431;
  unsigned char D.22432;
  int D.22433;
  const unsigned char * D.22438;
  unsigned char D.22439;
  int D.22440;
  const unsigned char * D.22441;
  unsigned char D.22442;
  int D.22443;
  struct _IO_FILE * stderr.20;

  goto <D.21801>;
  <D.21800>:
  input.12 = input;
  input.13 = input.12 + 1;
  input = input.13;
  <D.21801>:
  input.12 = input;
  D.22254 = *input.12;
  if (D.22254 == 43) goto <D.21800>; else goto <D.21802>;
  <D.21802>:
  input.12 = input;
  D.22254 = *input.12;
  if (D.22254 == 0) goto <D.22255>; else goto <D.22256>;
  <D.22255>:
  D.22257 = 11;
  return D.22257;
  <D.22256>:
  input.12 = input;
  D.22254 = *input.12;
  if (D.22254 == 77) goto <D.22258>; else goto <D.22259>;
  <D.22258>:
  input.12 = input;
  input.13 = input.12 + 1;
  D.22260 = *input.13;
  if (D.22260 == 58) goto <D.22261>; else goto <D.22262>;
  <D.22261>:
  input.12 = input;
  input.14 = input.12 + 2;
  input = input.14;
  get_string ();
  D.22257 = 0;
  return D.22257;
  <D.22262>:
  <D.22259>:
  input.12 = input;
  D.22254 = *input.12;
  if (D.22254 == 78) goto <D.22264>; else goto <D.22265>;
  <D.22264>:
  input.12 = input;
  input.13 = input.12 + 1;
  D.22260 = *input.13;
  if (D.22260 == 58) goto <D.22266>; else goto <D.22267>;
  <D.22266>:
  input.12 = input;
  input.14 = input.12 + 2;
  input = input.14;
  get_string ();
  D.22257 = 5;
  return D.22257;
  <D.22267>:
  <D.22265>:
  input.12 = input;
  D.22254 = *input.12;
  if (D.22254 == 84) goto <D.22268>; else goto <D.22269>;
  <D.22268>:
  input.12 = input;
  input.13 = input.12 + 1;
  D.22260 = *input.13;
  if (D.22260 == 58) goto <D.22270>; else goto <D.22271>;
  <D.22270>:
  input.12 = input;
  input.14 = input.12 + 2;
  input = input.14;
  get_string ();
  D.22257 = 1;
  return D.22257;
  <D.22271>:
  <D.22269>:
  input.12 = input;
  D.22254 = *input.12;
  if (D.22254 == 69) goto <D.22272>; else goto <D.22273>;
  <D.22272>:
  input.12 = input;
  input.13 = input.12 + 1;
  D.22260 = *input.13;
  if (D.22260 == 58) goto <D.22274>; else goto <D.22275>;
  <D.22274>:
  input.12 = input;
  input.14 = input.12 + 2;
  input = input.14;
  get_string ();
  D.22257 = 4;
  return D.22257;
  <D.22275>:
  <D.22273>:
  input.12 = input;
  D.22254 = *input.12;
  if (D.22254 == 45) goto <D.22276>; else goto <D.22277>;
  <D.22276>:
  input.12 = input;
  input.13 = input.12 + 1;
  input = input.13;
  D.22257 = 8;
  return D.22257;
  <D.22277>:
  input.12 = input;
  D.22254 = *input.12;
  D.22278 = (int) D.22254;
  D.22279 = is_filenamechar (D.22278);
  if (D.22279 != 0) goto <D.22280>; else goto <D.22281>;
  <D.22280>:
  get_string ();
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 3;
    if (__s2_len <= 3) goto <D.22283>; else goto <D.22284>;
    <D.22283>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = value;
      D.22285 = "all";
      D.22286 = MEM[(const unsigned char *)D.22285];
      D.22287 = (int) D.22286;
      D.22288 = *__s2;
      D.22289 = (int) D.22288;
      __result = D.22287 - D.22289;
      {
        if (__s2_len != 0) goto <D.22290>; else goto <D.22291>;
        <D.22290>:
        if (__result == 0) goto <D.22292>; else goto <D.22293>;
        <D.22292>:
        D.22294 = &MEM[(void *)"all" + 1B];
        D.22295 = *D.22294;
        D.22296 = (int) D.22295;
        D.22297 = __s2 + 1;
        D.22298 = *D.22297;
        D.22299 = (int) D.22298;
        __result = D.22296 - D.22299;
        if (__s2_len > 1) goto <D.22300>; else goto <D.22301>;
        <D.22300>:
        if (__result == 0) goto <D.22302>; else goto <D.22303>;
        <D.22302>:
        D.22304 = &MEM[(void *)"all" + 2B];
        D.22305 = *D.22304;
        D.22306 = (int) D.22305;
        D.22307 = __s2 + 2;
        D.22308 = *D.22307;
        D.22309 = (int) D.22308;
        __result = D.22306 - D.22309;
        if (__s2_len > 2) goto <D.22310>; else goto <D.22311>;
        <D.22310>:
        if (__result == 0) goto <D.22312>; else goto <D.22313>;
        <D.22312>:
        D.22314 = &MEM[(void *)"all" + 3B];
        D.22315 = *D.22314;
        D.22316 = (int) D.22315;
        D.22317 = __s2 + 3;
        D.22318 = *D.22317;
        D.22319 = (int) D.22318;
        __result = D.22316 - D.22319;
        <D.22313>:
        <D.22311>:
        <D.22303>:
        <D.22301>:
        <D.22293>:
        <D.22291>:
      }
      D.21810 = __result;
    }
    iftmp.15 = -D.21810;
    goto <D.22320>;
    <D.22284>:
    value.16 = value;
    iftmp.15 = __builtin_strcmp (value.16, "all");
    <D.22320>:
    D.21811 = iftmp.15;
  }
  if (D.21811 == 0) goto <D.22322>; else goto <D.22323>;
  <D.22322>:
  D.22257 = 2;
  return D.22257;
  <D.22323>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 7;
    if (__s2_len <= 3) goto <D.22325>; else goto <D.22326>;
    <D.22325>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = value;
      D.22327 = "program";
      D.22328 = MEM[(const unsigned char *)D.22327];
      D.22329 = (int) D.22328;
      D.22330 = *__s2;
      D.22331 = (int) D.22330;
      __result = D.22329 - D.22331;
      {
        if (__s2_len != 0) goto <D.22332>; else goto <D.22333>;
        <D.22332>:
        if (__result == 0) goto <D.22334>; else goto <D.22335>;
        <D.22334>:
        D.22336 = &MEM[(void *)"program" + 1B];
        D.22337 = *D.22336;
        D.22338 = (int) D.22337;
        D.22339 = __s2 + 1;
        D.22340 = *D.22339;
        D.22341 = (int) D.22340;
        __result = D.22338 - D.22341;
        if (__s2_len > 1) goto <D.22342>; else goto <D.22343>;
        <D.22342>:
        if (__result == 0) goto <D.22344>; else goto <D.22345>;
        <D.22344>:
        D.22346 = &MEM[(void *)"program" + 2B];
        D.22347 = *D.22346;
        D.22348 = (int) D.22347;
        D.22349 = __s2 + 2;
        D.22350 = *D.22349;
        D.22351 = (int) D.22350;
        __result = D.22348 - D.22351;
        if (__s2_len > 2) goto <D.22352>; else goto <D.22353>;
        <D.22352>:
        if (__result == 0) goto <D.22354>; else goto <D.22355>;
        <D.22354>:
        D.22356 = &MEM[(void *)"program" + 3B];
        D.22357 = *D.22356;
        D.22358 = (int) D.22357;
        D.22359 = __s2 + 3;
        D.22360 = *D.22359;
        D.22361 = (int) D.22360;
        __result = D.22358 - D.22361;
        <D.22355>:
        <D.22353>:
        <D.22345>:
        <D.22343>:
        <D.22335>:
        <D.22333>:
      }
      D.21819 = __result;
    }
    iftmp.17 = -D.21819;
    goto <D.22362>;
    <D.22326>:
    value.16 = value;
    iftmp.17 = __builtin_strcmp (value.16, "program");
    <D.22362>:
    D.21820 = iftmp.17;
  }
  if (D.21820 == 0) goto <D.22363>; else goto <D.22364>;
  <D.22363>:
  D.22257 = 3;
  return D.22257;
  <D.22364>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 7;
    if (__s2_len <= 3) goto <D.22366>; else goto <D.22367>;
    <D.22366>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = value;
      D.22368 = "wrapper";
      D.22369 = MEM[(const unsigned char *)D.22368];
      D.22370 = (int) D.22369;
      D.22371 = *__s2;
      D.22372 = (int) D.22371;
      __result = D.22370 - D.22372;
      {
        if (__s2_len != 0) goto <D.22373>; else goto <D.22374>;
        <D.22373>:
        if (__result == 0) goto <D.22375>; else goto <D.22376>;
        <D.22375>:
        D.22377 = &MEM[(void *)"wrapper" + 1B];
        D.22378 = *D.22377;
        D.22379 = (int) D.22378;
        D.22380 = __s2 + 1;
        D.22381 = *D.22380;
        D.22382 = (int) D.22381;
        __result = D.22379 - D.22382;
        if (__s2_len > 1) goto <D.22383>; else goto <D.22384>;
        <D.22383>:
        if (__result == 0) goto <D.22385>; else goto <D.22386>;
        <D.22385>:
        D.22387 = &MEM[(void *)"wrapper" + 2B];
        D.22388 = *D.22387;
        D.22389 = (int) D.22388;
        D.22390 = __s2 + 2;
        D.22391 = *D.22390;
        D.22392 = (int) D.22391;
        __result = D.22389 - D.22392;
        if (__s2_len > 2) goto <D.22393>; else goto <D.22394>;
        <D.22393>:
        if (__result == 0) goto <D.22395>; else goto <D.22396>;
        <D.22395>:
        D.22397 = &MEM[(void *)"wrapper" + 3B];
        D.22398 = *D.22397;
        D.22399 = (int) D.22398;
        D.22400 = __s2 + 3;
        D.22401 = *D.22400;
        D.22402 = (int) D.22401;
        __result = D.22399 - D.22402;
        <D.22396>:
        <D.22394>:
        <D.22386>:
        <D.22384>:
        <D.22376>:
        <D.22374>:
      }
      D.21828 = __result;
    }
    iftmp.18 = -D.21828;
    goto <D.22403>;
    <D.22367>:
    value.16 = value;
    iftmp.18 = __builtin_strcmp (value.16, "wrapper");
    <D.22403>:
    D.21829 = iftmp.18;
  }
  if (D.21829 == 0) goto <D.22404>; else goto <D.22405>;
  <D.22404>:
  D.22257 = 6;
  return D.22257;
  <D.22405>:
  {
    size_t __s1_len;
    size_t __s2_len;

    __s2_len = 8;
    if (__s2_len <= 3) goto <D.22407>; else goto <D.22408>;
    <D.22407>:
    {
      const unsigned char * __s2;
      int __result;

      __s2 = value;
      D.22409 = "disabled";
      D.22410 = MEM[(const unsigned char *)D.22409];
      D.22411 = (int) D.22410;
      D.22412 = *__s2;
      D.22413 = (int) D.22412;
      __result = D.22411 - D.22413;
      {
        if (__s2_len != 0) goto <D.22414>; else goto <D.22415>;
        <D.22414>:
        if (__result == 0) goto <D.22416>; else goto <D.22417>;
        <D.22416>:
        D.22418 = &MEM[(void *)"disabled" + 1B];
        D.22419 = *D.22418;
        D.22420 = (int) D.22419;
        D.22421 = __s2 + 1;
        D.22422 = *D.22421;
        D.22423 = (int) D.22422;
        __result = D.22420 - D.22423;
        if (__s2_len > 1) goto <D.22424>; else goto <D.22425>;
        <D.22424>:
        if (__result == 0) goto <D.22426>; else goto <D.22427>;
        <D.22426>:
        D.22428 = &MEM[(void *)"disabled" + 2B];
        D.22429 = *D.22428;
        D.22430 = (int) D.22429;
        D.22431 = __s2 + 2;
        D.22432 = *D.22431;
        D.22433 = (int) D.22432;
        __result = D.22430 - D.22433;
        if (__s2_len > 2) goto <D.22434>; else goto <D.22435>;
        <D.22434>:
        if (__result == 0) goto <D.22436>; else goto <D.22437>;
        <D.22436>:
        D.22438 = &MEM[(void *)"disabled" + 3B];
        D.22439 = *D.22438;
        D.22440 = (int) D.22439;
        D.22441 = __s2 + 3;
        D.22442 = *D.22441;
        D.22443 = (int) D.22442;
        __result = D.22440 - D.22443;
        <D.22437>:
        <D.22435>:
        <D.22427>:
        <D.22425>:
        <D.22417>:
        <D.22415>:
      }
      D.21837 = __result;
    }
    iftmp.19 = -D.21837;
    goto <D.22444>;
    <D.22408>:
    value.16 = value;
    iftmp.19 = __builtin_strcmp (value.16, "disabled");
    <D.22444>:
    D.21838 = iftmp.19;
  }
  if (D.21838 == 0) goto <D.22445>; else goto <D.22446>;
  <D.22445>:
  D.22257 = 9;
  return D.22257;
  <D.22446>:
  D.22257 = 7;
  return D.22257;
  <D.22281>:
  input.12 = input;
  D.22254 = *input.12;
  if (D.22254 == 44) goto <D.22447>; else goto <D.22448>;
  <D.22447>:
  input.12 = input;
  input.13 = input.12 + 1;
  input = input.13;
  D.22257 = 10;
  return D.22257;
  <D.22448>:
  stderr.20 = stderr;
  input.12 = input;
  fprintf (stderr.20, "Syntax error at or around \'%s\'\n", input.12);
  D.22257 = 12;
  return D.22257;
}


is_filenamechar (char p)
{
  unsigned char p.21;
  unsigned char D.22452;
  int D.22455;
  unsigned char D.22456;
  unsigned char D.22459;

  p.21 = (unsigned char) p;
  D.22452 = p.21 + 191;
  if (D.22452 <= 25) goto <D.22453>; else goto <D.22454>;
  <D.22453>:
  D.22455 = 1;
  return D.22455;
  <D.22454>:
  p.21 = (unsigned char) p;
  D.22456 = p.21 + 159;
  if (D.22456 <= 25) goto <D.22457>; else goto <D.22458>;
  <D.22457>:
  D.22455 = 1;
  return D.22455;
  <D.22458>:
  p.21 = (unsigned char) p;
  D.22459 = p.21 + 208;
  if (D.22459 <= 9) goto <D.22460>; else goto <D.22461>;
  <D.22460>:
  D.22455 = 1;
  return D.22455;
  <D.22461>:
  if (p == 46) goto <D.22462>; else goto <D.22464>;
  <D.22464>:
  if (p == 58) goto <D.22462>; else goto <D.22465>;
  <D.22465>:
  if (p == 95) goto <D.22462>; else goto <D.22466>;
  <D.22466>:
  if (p == 45) goto <D.22462>; else goto <D.22463>;
  <D.22462>:
  D.22455 = 1;
  return D.22455;
  <D.22463>:
  D.22455 = 0;
  return D.22455;
}


get_string ()
{
  char * input.22;
  char * input.23;
  char D.22470;
  int D.22471;
  int D.22472;
  char * value.24;
  int input.25;
  int start.26;
  int D.22478;
  int D.22479;
  unsigned int D.22480;
  void * value.27;
  unsigned int D.22482;
  sizetype D.22483;
  char * D.22484;
  char * start;

  start = input;
  goto <D.21781>;
  <D.21780>:
  input.22 = input;
  input.23 = input.22 + 1;
  input = input.23;
  <D.21781>:
  input.22 = input;
  D.22470 = *input.22;
  D.22471 = (int) D.22470;
  D.22472 = is_filenamechar (D.22471);
  if (D.22472 != 0) goto <D.21780>; else goto <D.21782>;
  <D.21782>:
  value.24 = value;
  if (value.24 != 0B) goto <D.22474>; else goto <D.22475>;
  <D.22474>:
  value.24 = value;
  monoeg_g_free (value.24);
  <D.22475>:
  input.22 = input;
  input.25 = (int) input.22;
  start.26 = (int) start;
  D.22478 = input.25 - start.26;
  D.22479 = D.22478 + 1;
  D.22480 = (unsigned int) D.22479;
  value.27 = monoeg_malloc (D.22480);
  value = value.27;
  value.24 = value;
  input.22 = input;
  input.25 = (int) input.22;
  start.26 = (int) start;
  D.22478 = input.25 - start.26;
  D.22482 = (unsigned int) D.22478;
  strncpy (value.24, start, D.22482);
  value.24 = value;
  input.22 = input;
  input.25 = (int) input.22;
  start.26 = (int) start;
  D.22478 = input.25 - start.26;
  D.22483 = (sizetype) D.22478;
  D.22484 = value.24 + D.22483;
  *D.22484 = 0;
}


strncpy (char * restrict __dest, const char * restrict __src, size_t __len)
{
  char * D.22485;
  unsigned int D.22486;

  D.22486 = __builtin_object_size (__dest, 1);
  D.22485 = __builtin___strncpy_chk (__dest, __src, __len, D.22486);
  return D.22485;
}


monoeg_strdup (const gchar * str)
{
  gchar * D.22490;

  if (str != 0B) goto <D.22488>; else goto <D.22489>;
  <D.22488>:
  D.22490 = __strdup (str);
  return D.22490;
  <D.22489>:
  D.22490 = 0B;
  return D.22490;
}


fprintf (struct FILE * restrict __stream, const char * restrict __fmt)
{
  int D.22492;

  D.22492 = __fprintf_chk (__stream, 1, __fmt, __builtin_va_arg_pack ());
  return D.22492;
}


cleanup ()
{
  char * value.28;

  value.28 = value;
  if (value.28 != 0B) goto <D.22495>; else goto <D.22496>;
  <D.22495>:
  value.28 = value;
  monoeg_g_free (value.28);
  <D.22496>:
}


mono_trace_set_assembly (struct MonoAssembly * assembly)
{
  trace_spec.assembly = assembly;
}


mono_trace_enter_method (struct MonoMethod * method, char * ebp)
{
  int D.22497;
  void * D.22502;
  void * D.22503;
  short unsigned int D.22504;
  int D.22505;
  int D.22506;
  unsigned int D.22507;
  unsigned int D.22508;
  unsigned int D.22509;
  unsigned int D.22510;
  struct MonoDomain * D.22513;
  void * D.22514;
  void * D.22515;
  gboolean * D.22522;
  gboolean * D.22524;
  struct MonoMethodSignature * D.22525;
  struct MonoType * D.22526;
  int D.22527;
  struct MonoMethodSignature * D.22530;
  struct MonoType * D.22531;
  unsigned int D.22532;
  unsigned int D.22533;
  _Bool D.22534;
  long int D.22535;
  long int D.22536;
  void * * D.22539;
  void * D.22540;
  struct MonoMethodSignature * D.22541;
  unsigned int D.22542;
  unsigned int D.22543;
  short unsigned int D.22546;
  sizetype D.22547;
  struct MonoClass * D.22548;
  unsigned int D.22549;
  unsigned int D.22550;
  void * * D.22553;
  struct MonoVTable * D.22557;
  struct MonoClass * D.22558;
  const char * D.22562;
  const char * D.22563;
  struct MonoDomain * D.22564;
  char * D.22565;
  sizetype i.29;
  sizetype D.22568;
  sizetype D.22569;
  struct MonoJitArgumentInfo * D.22570;
  short unsigned int D.22571;
  sizetype D.22572;
  short unsigned int D.22573;
  struct MonoMethodSignature * D.22574;
  unsigned int D.22575;
  unsigned int D.22576;
  void * * D.22579;
  struct MonoType * D.22581;
  unsigned char D.22582;
  int D.22583;
  signed char D.22584;
  int D.22585;
  short int D.22586;
  int D.22587;
  int D.22588;
  struct MonoVTable * D.22591;
  struct MonoClass * D.22592;
  _Bool D.22593;
  long int D.22594;
  long int D.22595;
  struct MonoClass * D.22604;
  gint32 * D.22607;
  int D.22608;
  struct MonoClass * D.22610;
  struct MonoType * D.22613;
  char * D.22614;
  void * D.22617;
  long long int D.22618;
  float D.22619;
  double D.22620;
  double D.22621;
  sizetype j.30;
  guint8 * D.22623;
  unsigned char D.22624;
  int D.22625;
  struct MonoMethodSignature * D.22626;
  short unsigned int D.22627;
  int D.22628;
  struct _IO_FILE * stdout.31;
  int i;
  int j;
  struct MonoClass * class;
  struct MonoObject * o;
  struct MonoJitArgumentInfo * arg_info;
  struct MonoMethodSignature * sig;
  char * fname;
  struct MonoGenericSharingContext * gsctx;

  gsctx = 0B;
  D.22497 = trace_spec.enabled;
  if (D.22497 == 0) goto <D.22498>; else goto <D.22499>;
  <D.22498>:
  return;
  <D.22499>:
  fname = mono_method_full_name (method, 1);
  indent (1);
  printf ("ENTER: %s(", fname);
  monoeg_g_free (fname);
  if (ebp == 0B) goto <D.22500>; else goto <D.22501>;
  <D.22500>:
  D.22502 = __builtin_return_address (1);
  D.22503 = __builtin_extract_return_addr (D.22502);
  printf (") ip: %p\n", D.22503);
  return;
  <D.22501>:
  sig = mono_method_signature (method);
  D.22504 = sig->param_count;
  D.22505 = (int) D.22504;
  D.22506 = D.22505 + 1;
  D.22507 = (unsigned int) D.22506;
  D.22508 = D.22507 * 6;
  arg_info = __builtin_alloca (D.22508);
  D.22509 = BIT_FIELD_REF <*method, 32, 160>;
  D.22510 = D.22509 & 4096;
  if (D.22510 != 0) goto <D.22511>; else goto <D.22512>;
  <D.22511>:
  {
    struct MonoJitInfo * ji;

    D.22513 = mono_domain_get ();
    D.22514 = __builtin_return_address (0);
    D.22515 = __builtin_extract_return_addr (D.22514);
    ji = mini_jit_info_table_find (D.22513, D.22515, 0B);
    if (ji != 0B) goto <D.22516>; else goto <D.22517>;
    <D.22516>:
    gsctx = mono_jit_info_get_generic_sharing_context (ji);
    if (gsctx != 0B) goto <D.22520>; else goto <D.22521>;
    <D.22520>:
    D.22522 = gsctx->var_is_vt;
    if (D.22522 != 0B) goto <D.22518>; else goto <D.22523>;
    <D.22523>:
    D.22524 = gsctx->mvar_is_vt;
    if (D.22524 != 0B) goto <D.22518>; else goto <D.22519>;
    <D.22518>:
    printf (") <gsharedvt>\n");
    return;
    <D.22519>:
    <D.22521>:
    <D.22517>:
  }
  <D.22512>:
  D.22504 = sig->param_count;
  D.22505 = (int) D.22504;
  mono_arch_get_argument_info (gsctx, sig, D.22505, arg_info);
  D.22525 = mono_method_signature (method);
  D.22526 = D.22525->ret;
  D.22527 = mono_type_is_struct (D.22526);
  if (D.22527 != 0) goto <D.22528>; else goto <D.22529>;
  <D.22528>:
  D.22530 = mono_method_signature (method);
  D.22531 = D.22530->ret;
  D.22532 = BIT_FIELD_REF <*D.22531, 32, 32>;
  D.22533 = D.22532 & 1073741824;
  D.22534 = D.22533 != 0;
  D.22535 = (long int) D.22534;
  D.22536 = __builtin_expect (D.22535, 0);
  if (D.22536 != 0) goto <D.22537>; else goto <D.22538>;
  <D.22537>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "trace.c", 430, "!mono_method_signature (method)->ret->byref");
  <D.22538>:
  D.22539 = ebp + 8;
  D.22540 = *D.22539;
  printf ("VALUERET:%p, ", D.22540);
  <D.22529>:
  D.22541 = mono_method_signature (method);
  D.22542 = BIT_FIELD_REF <*D.22541, 32, 64>;
  D.22543 = D.22542 & 4194304;
  if (D.22543 != 0) goto <D.22544>; else goto <D.22545>;
  <D.22544>:
  {
    void * * this;

    D.22546 = arg_info->offset;
    D.22547 = (sizetype) D.22546;
    this = ebp + D.22547;
    D.22548 = method->klass;
    D.22549 = BIT_FIELD_REF <*D.22548, 32, 160>;
    D.22550 = D.22549 & 8;
    if (D.22550 != 0) goto <D.22551>; else goto <D.22552>;
    <D.22551>:
    D.22553 = MEM[(void * * *)this];
    printf ("value:%p, ", D.22553);
    goto <D.22554>;
    <D.22552>:
    o = MEM[(struct MonoObject * *)this];
    if (o != 0B) goto <D.22555>; else goto <D.22556>;
    <D.22555>:
    D.22557 = o->vtable;
    class = D.22557->klass;
    D.22558 = mono_defaults.string_class;
    if (D.22558 == class) goto <D.22559>; else goto <D.22560>;
    <D.22559>:
    {
      struct MonoString * s;
      char * as;

      s = o;
      as = string_to_utf8 (s);
      printf ("this:[STRING:%p:%s], ", o, as);
      monoeg_g_free (as);
    }
    goto <D.22561>;
    <D.22560>:
    D.22562 = class->name_space;
    D.22563 = class->name;
    D.22557 = o->vtable;
    D.22564 = D.22557->domain;
    D.22565 = D.22564->friendly_name;
    printf ("this:%p[%s.%s %s], ", o, D.22562, D.22563, D.22565);
    <D.22561>:
    goto <D.22566>;
    <D.22556>:
    printf ("this:NULL, ");
    <D.22566>:
    <D.22554>:
  }
  <D.22545>:
  i = 0;
  goto <D.21928>;
  <D.21927>:
  {
    void * * cpos;
    int size;
    struct MonoType * type;

    i.29 = (sizetype) i;
    D.22568 = i.29 + 1;
    D.22569 = D.22568 * 6;
    D.22570 = arg_info + D.22569;
    D.22571 = D.22570->offset;
    D.22572 = (sizetype) D.22571;
    cpos = ebp + D.22572;
    i.29 = (sizetype) i;
    D.22568 = i.29 + 1;
    D.22569 = D.22568 * 6;
    D.22570 = arg_info + D.22569;
    D.22573 = D.22570->size;
    size = (int) D.22573;
    D.22574 = mono_method_signature (method);
    type = D.22574->params[i];
    D.22575 = BIT_FIELD_REF <*type, 32, 32>;
    D.22576 = D.22575 & 1073741824;
    if (D.22576 != 0) goto <D.22577>; else goto <D.22578>;
    <D.22577>:
    D.22579 = MEM[(void * * *)cpos];
    printf ("[BYREF:%p], ", D.22579);
    goto <D.22580>;
    <D.22578>:
    D.22581 = mono_type_get_underlying_type (type);
    D.22582 = D.22581->type;
    D.22583 = (int) D.22582;
    switch (D.22583) <default: <D.21926>, case 2: <D.21900>, case 3: <D.21901>, case 4: <D.21902>, case 5: <D.21903>, case 6: <D.21904>, case 7: <D.21905>, case 8: <D.21906>, case 9: <D.21907>, case 10: <D.21918>, case 11: <D.21919>, case 12: <D.21920>, case 13: <D.21921>, case 14: <D.21908>, case 15: <D.21914>, case 17: <D.21922>, case 18: <D.21911>, case 20: <D.21916>, case 24: <D.21897>, case 25: <D.21898>, case 27: <D.21915>, case 28: <D.21912>, case 29: <D.21917>>
    <D.21897>:
    <D.21898>:
    D.22579 = MEM[(void * * *)cpos];
    printf ("%p, ", D.22579);
    goto <D.21899>;
    <D.21900>:
    <D.21901>:
    <D.21902>:
    <D.21903>:
    D.22584 = MEM[(gint8 *)cpos];
    D.22585 = (int) D.22584;
    printf ("%d, ", D.22585);
    goto <D.21899>;
    <D.21904>:
    <D.21905>:
    D.22586 = MEM[(gint16 *)cpos];
    D.22587 = (int) D.22586;
    printf ("%d, ", D.22587);
    goto <D.21899>;
    <D.21906>:
    <D.21907>:
    D.22588 = MEM[(int *)cpos];
    printf ("%d, ", D.22588);
    goto <D.21899>;
    <D.21908>:
    {
      struct MonoString * s;

      s = MEM[(struct MonoString * *)cpos];
      if (s != 0B) goto <D.22589>; else goto <D.22590>;
      <D.22589>:
      {
        char * as;

        D.22591 = MEM[(struct MonoObject *)s].vtable;
        D.22592 = D.22591->klass;
        D.22558 = mono_defaults.string_class;
        D.22593 = D.22592 != D.22558;
        D.22594 = (long int) D.22593;
        D.22595 = __builtin_expect (D.22594, 0);
        if (D.22595 != 0) goto <D.22596>; else goto <D.22597>;
        <D.22596>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "trace.c", 492, "((MonoObject *)s)->vtable->klass == mono_defaults.string_class");
        <D.22597>:
        as = string_to_utf8 (s);
        printf ("[STRING:%p:%s], ", s, as);
        monoeg_g_free (as);
      }
      goto <D.22598>;
      <D.22590>:
      printf ("[STRING:null], ");
      <D.22598>:
      goto <D.21899>;
    }
    <D.21911>:
    <D.21912>:
    o = MEM[(struct MonoObject * *)cpos];
    if (o != 0B) goto <D.22599>; else goto <D.22600>;
    <D.22599>:
    D.22557 = o->vtable;
    class = D.22557->klass;
    D.22558 = mono_defaults.string_class;
    if (D.22558 == class) goto <D.22601>; else goto <D.22602>;
    <D.22601>:
    {
      char * as;

      as = string_to_utf8 (o);
      printf ("[STRING:%p:%s], ", o, as);
      monoeg_g_free (as);
    }
    goto <D.22603>;
    <D.22602>:
    D.22604 = mono_defaults.int32_class;
    if (D.22604 == class) goto <D.22605>; else goto <D.22606>;
    <D.22605>:
    D.22607 = o + 8;
    D.22608 = *D.22607;
    printf ("[INT32:%p:%d], ", o, D.22608);
    goto <D.22609>;
    <D.22606>:
    D.22610 = mono_defaults.monotype_class;
    if (D.22610 == class) goto <D.22611>; else goto <D.22612>;
    <D.22611>:
    D.22613 = MEM[(struct MonoReflectionType *)o].type;
    D.22614 = mono_type_full_name (D.22613);
    printf ("[TYPE:%s], ", D.22614);
    goto <D.22615>;
    <D.22612>:
    D.22562 = class->name_space;
    D.22563 = class->name;
    printf ("[%s.%s:%p], ", D.22562, D.22563, o);
    <D.22615>:
    <D.22609>:
    <D.22603>:
    goto <D.22616>;
    <D.22600>:
    D.22617 = *cpos;
    printf ("%p, ", D.22617);
    <D.22616>:
    goto <D.21899>;
    <D.21914>:
    <D.21915>:
    <D.21916>:
    <D.21917>:
    D.22617 = *cpos;
    printf ("%p, ", D.22617);
    goto <D.21899>;
    <D.21918>:
    <D.21919>:
    D.22618 = MEM[(gint64 *)cpos];
    printf ("0x%016llx, ", D.22618);
    goto <D.21899>;
    <D.21920>:
    D.22619 = MEM[(float *)cpos];
    D.22620 = (double) D.22619;
    printf ("%f, ", D.22620);
    goto <D.21899>;
    <D.21921>:
    D.22621 = MEM[(double *)cpos];
    printf ("%f, ", D.22621);
    goto <D.21899>;
    <D.21922>:
    printf ("[");
    j = 0;
    goto <D.21924>;
    <D.21923>:
    j.30 = (sizetype) j;
    D.22623 = cpos + j.30;
    D.22624 = *D.22623;
    D.22625 = (int) D.22624;
    printf ("%02x,", D.22625);
    j = j + 1;
    <D.21924>:
    if (j < size) goto <D.21923>; else goto <D.21925>;
    <D.21925>:
    printf ("], ");
    goto <D.21899>;
    <D.21926>:
    printf ("XX, ");
    <D.21899>:
    <D.22580>:
  }
  i = i + 1;
  <D.21928>:
  D.22626 = mono_method_signature (method);
  D.22627 = D.22626->param_count;
  D.22628 = (int) D.22627;
  if (D.22628 > i) goto <D.21927>; else goto <D.21929>;
  <D.21929>:
  printf (")\n");
  stdout.31 = stdout;
  fflush (stdout.31);
}


indent (int diff)
{
  int indent_level.32;
  int indent_level.33;
  long long unsigned int start_time.34;
  long long int D.22638;
  long long unsigned int start_time.35;
  unsigned int D.22640;
  void * D.22641;
  double D.22642;

  if (diff < 0) goto <D.22631>; else goto <D.22632>;
  <D.22631>:
  indent_level.32 = indent_level;
  indent_level.33 = indent_level.32 + diff;
  indent_level = indent_level.33;
  <D.22632>:
  start_time.34 = start_time;
  if (start_time.34 == 0) goto <D.22636>; else goto <D.22637>;
  <D.22636>:
  D.22638 = mono_100ns_ticks ();
  start_time.35 = (long long unsigned int) D.22638;
  start_time = start_time.35;
  <D.22637>:
  D.22640 = GetCurrentThreadId ();
  D.22641 = (void *) D.22640;
  D.22642 = seconds_since_start ();
  indent_level.32 = indent_level;
  printf ("[%p: %.5f %d] ", D.22641, D.22642, indent_level.32);
  if (diff > 0) goto <D.22643>; else goto <D.22644>;
  <D.22643>:
  indent_level.32 = indent_level;
  indent_level.33 = indent_level.32 + diff;
  indent_level = indent_level.33;
  <D.22644>:
}


seconds_since_start ()
{
  long long int D.22645;
  long long unsigned int D.22646;
  long long unsigned int start_time.36;
  double D.22648;
  double D.22649;
  guint64 diff;

  D.22645 = mono_100ns_ticks ();
  D.22646 = (long long unsigned int) D.22645;
  start_time.36 = start_time;
  diff = D.22646 - start_time.36;
  D.22649 = (double) diff;
  D.22648 = D.22649 / 1.0e+7;
  return D.22648;
}


string_to_utf8 (struct MonoString * s)
{
  _Bool D.22651;
  long int D.22652;
  long int D.22653;
  int D.22656;
  char * D.22659;
  mono_unichar2 * D.22660;
  struct GError * error.37;
  char * as;
  struct GError * error;

  try
    {
      error = 0B;
      D.22651 = s == 0B;
      D.22652 = (long int) D.22651;
      D.22653 = __builtin_expect (D.22652, 0);
      if (D.22653 != 0) goto <D.22654>; else goto <D.22655>;
      <D.22654>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "trace.c", 355, "s");
      <D.22655>:
      D.22656 = s->length;
      if (D.22656 == 0) goto <D.22657>; else goto <D.22658>;
      <D.22657>:
      D.22659 = monoeg_strdup ("");
      return D.22659;
      <D.22658>:
      D.22660 = mono_string_chars (s);
      D.22656 = s->length;
      as = monoeg_g_utf16_to_utf8 (D.22660, D.22656, 0B, 0B, &error);
      error.37 = error;
      if (error.37 != 0B) goto <D.22662>; else goto <D.22663>;
      <D.22662>:
      error.37 = error;
      monoeg_g_error_free (error.37);
      D.22659 = monoeg_strdup ("<INVALID UTF8>");
      return D.22659;
      <D.22663>:
      D.22659 = as;
      return D.22659;
    }
  finally
    {
      error = {CLOBBER};
    }
}


printf (const char * restrict __fmt)
{
  int D.22666;

  D.22666 = __printf_chk (1, __fmt, __builtin_va_arg_pack ());
  return D.22666;
}


mono_trace_leave_method (struct MonoMethod * method)
{
  int D.22668;
  unsigned int D.22671;
  unsigned int D.22672;
  struct MonoDomain * D.22675;
  void * D.22676;
  void * D.22677;
  gboolean * D.22684;
  gboolean * D.22686;
  struct MonoMethodSignature * D.22687;
  unsigned char D.22688;
  int D.22689;
  void * ap.38;
  void * ap.39;
  void * ap.40;
  void * ap.41;
  void * ap.42;
  void * ap.43;
  struct MonoVTable * D.22701;
  struct MonoClass * D.22702;
  struct MonoClass * D.22703;
  _Bool D.22704;
  long int D.22705;
  long int D.22706;
  void * ap.44;
  void * ap.45;
  struct MonoVTable * D.22714;
  struct MonoClass * D.22715;
  struct MonoClass * D.22716;
  guint8 * D.22719;
  unsigned char D.22720;
  int D.22721;
  struct MonoClass * D.22723;
  gint32 * D.22726;
  int D.22727;
  struct MonoClass * D.22729;
  gint64 * D.22732;
  long long int D.22733;
  const char * D.22735;
  const char * D.22736;
  void * ap.46;
  void * ap.47;
  void * ap.48;
  void * ap.49;
  void * ap.50;
  void * ap.51;
  void * ap.52;
  void * ap.53;
  struct MonoClass * D.22746;
  unsigned int D.22747;
  unsigned int D.22748;
  void * ap.54;
  void * ap.55;
  sizetype j.56;
  guint8 * D.22754;
  unsigned char D.22755;
  int D.22756;
  struct MonoMethodSignature * D.22758;
  struct MonoType * D.22759;
  unsigned char D.22760;
  int D.22761;
  struct _IO_FILE * stdout.57;
  struct MonoType * type;
  char * fname;
  void * ap;
  struct MonoGenericSharingContext * gsctx;
  void handle_enum = <<< error >>>;

  try
    {
      D.22668 = trace_spec.enabled;
      if (D.22668 == 0) goto <D.22669>; else goto <D.22670>;
      <D.22669>:
      return;
      <D.22670>:
      __builtin_va_start (&ap, 0);
      fname = mono_method_full_name (method, 1);
      indent (-1);
      printf ("LEAVE: %s", fname);
      monoeg_g_free (fname);
      D.22671 = BIT_FIELD_REF <*method, 32, 160>;
      D.22672 = D.22671 & 4096;
      if (D.22672 != 0) goto <D.22673>; else goto <D.22674>;
      <D.22673>:
      {
        struct MonoJitInfo * ji;

        D.22675 = mono_domain_get ();
        D.22676 = __builtin_return_address (0);
        D.22677 = __builtin_extract_return_addr (D.22676);
        ji = mini_jit_info_table_find (D.22675, D.22677, 0B);
        if (ji != 0B) goto <D.22678>; else goto <D.22679>;
        <D.22678>:
        gsctx = mono_jit_info_get_generic_sharing_context (ji);
        if (gsctx != 0B) goto <D.22682>; else goto <D.22683>;
        <D.22682>:
        D.22684 = gsctx->var_is_vt;
        if (D.22684 != 0B) goto <D.22680>; else goto <D.22685>;
        <D.22685>:
        D.22686 = gsctx->mvar_is_vt;
        if (D.22686 != 0B) goto <D.22680>; else goto <D.22681>;
        <D.22680>:
        printf (") <gsharedvt>\n");
        return;
        <D.22681>:
        <D.22683>:
        <D.22679>:
      }
      <D.22674>:
      D.22687 = mono_method_signature (method);
      type = D.22687->ret;
      handle_enum:
      D.22688 = type->type;
      D.22689 = (int) D.22688;
      switch (D.22689) <default: <D.21979>, case 1: <D.21939>, case 2: <D.21941>, case 3: <D.21943>, case 4: <D.21944>, case 5: <D.21945>, case 6: <D.21946>, case 7: <D.21947>, case 8: <D.21948>, case 9: <D.21949>, case 10: <D.21964>, case 11: <D.21966>, case 12: <D.21968>, case 13: <D.21969>, case 14: <D.21953>, case 15: <D.21959>, case 17: <D.21971>, case 18: <D.21956>, case 20: <D.21961>, case 24: <D.21950>, case 25: <D.21951>, case 27: <D.21960>, case 28: <D.21957>, case 29: <D.21962>>
      <D.21939>:
      goto <D.21940>;
      <D.21941>:
      {
        int eax;

        ap.38 = ap;
        ap.39 = ap.38 + 4;
        ap = ap.39;
        eax = MEM[(int *)ap.38];
        if (eax != 0) goto <D.22692>; else goto <D.22693>;
        <D.22692>:
        printf ("TRUE:%d", eax);
        goto <D.22694>;
        <D.22693>:
        printf ("FALSE");
        <D.22694>:
        goto <D.21940>;
      }
      <D.21943>:
      <D.21944>:
      <D.21945>:
      <D.21946>:
      <D.21947>:
      <D.21948>:
      <D.21949>:
      <D.21950>:
      <D.21951>:
      {
        int eax;

        ap.40 = ap;
        ap.41 = ap.40 + 4;
        ap = ap.41;
        eax = MEM[(int *)ap.40];
        printf ("result=%d", eax);
        goto <D.21940>;
      }
      <D.21953>:
      {
        struct MonoString * s;

        ap.42 = ap;
        ap.43 = ap.42 + 4;
        ap = ap.43;
        s = MEM[(struct MonoString * *)ap.42];
        if (s != 0B) goto <D.22699>; else goto <D.22700>;
        <D.22699>:
        {
          char * as;

          D.22701 = MEM[(struct MonoObject *)s].vtable;
          D.22702 = D.22701->klass;
          D.22703 = mono_defaults.string_class;
          D.22704 = D.22702 != D.22703;
          D.22705 = (long int) D.22704;
          D.22706 = __builtin_expect (D.22705, 0);
          if (D.22706 != 0) goto <D.22707>; else goto <D.22708>;
          <D.22707>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "trace.c", 619, "((MonoObject *)s)->vtable->klass == mono_defaults.string_class");
          <D.22708>:
          as = string_to_utf8 (s);
          printf ("[STRING:%p:%s]", s, as);
          monoeg_g_free (as);
        }
        goto <D.22709>;
        <D.22700>:
        printf ("[STRING:null], ");
        <D.22709>:
        goto <D.21940>;
      }
      <D.21956>:
      <D.21957>:
      {
        struct MonoObject * o;

        ap.44 = ap;
        ap.45 = ap.44 + 4;
        ap = ap.45;
        o = MEM[(struct MonoObject * *)ap.44];
        if (o != 0B) goto <D.22712>; else goto <D.22713>;
        <D.22712>:
        D.22714 = o->vtable;
        D.22715 = D.22714->klass;
        D.22716 = mono_defaults.boolean_class;
        if (D.22715 == D.22716) goto <D.22717>; else goto <D.22718>;
        <D.22717>:
        D.22719 = o + 8;
        D.22720 = *D.22719;
        D.22721 = (int) D.22720;
        printf ("[BOOLEAN:%p:%d]", o, D.22721);
        goto <D.22722>;
        <D.22718>:
        D.22714 = o->vtable;
        D.22715 = D.22714->klass;
        D.22723 = mono_defaults.int32_class;
        if (D.22715 == D.22723) goto <D.22724>; else goto <D.22725>;
        <D.22724>:
        D.22726 = o + 8;
        D.22727 = *D.22726;
        printf ("[INT32:%p:%d]", o, D.22727);
        goto <D.22728>;
        <D.22725>:
        D.22714 = o->vtable;
        D.22715 = D.22714->klass;
        D.22729 = mono_defaults.int64_class;
        if (D.22715 == D.22729) goto <D.22730>; else goto <D.22731>;
        <D.22730>:
        D.22732 = o + 8;
        D.22733 = *D.22732;
        printf ("[INT64:%p:%lld]", o, D.22733);
        goto <D.22734>;
        <D.22731>:
        D.22714 = o->vtable;
        D.22715 = D.22714->klass;
        D.22735 = D.22715->name_space;
        D.22714 = o->vtable;
        D.22715 = D.22714->klass;
        D.22736 = D.22715->name;
        printf ("[%s.%s:%p]", D.22735, D.22736, o);
        <D.22734>:
        <D.22728>:
        <D.22722>:
        goto <D.22737>;
        <D.22713>:
        printf ("[OBJECT:%p]", o);
        <D.22737>:
        goto <D.21940>;
      }
      <D.21959>:
      <D.21960>:
      <D.21961>:
      <D.21962>:
      {
        void * p;

        ap.46 = ap;
        ap.47 = ap.46 + 4;
        ap = ap.47;
        p = MEM[(void * *)ap.46];
        printf ("result=%p", p);
        goto <D.21940>;
      }
      <D.21964>:
      {
        gint64 l;

        ap.48 = ap;
        ap.48 = ap.48 + 7;
        ap.48 = ap.48 & 4294967288B;
        ap.49 = ap.48 + 8;
        ap = ap.49;
        l = MEM[(gint64 *)ap.48];
        printf ("lresult=0x%16llx", l);
        goto <D.21940>;
      }
      <D.21966>:
      {
        gint64 l;

        ap.50 = ap;
        ap.50 = ap.50 + 7;
        ap.50 = ap.50 & 4294967288B;
        ap.51 = ap.50 + 8;
        ap = ap.51;
        l = MEM[(gint64 *)ap.50];
        printf ("lresult=0x%16llx", l);
        goto <D.21940>;
      }
      <D.21968>:
      <D.21969>:
      {
        double f;

        ap.52 = ap;
        ap.52 = ap.52 + 7;
        ap.52 = ap.52 & 4294967288B;
        ap.53 = ap.52 + 8;
        ap = ap.53;
        f = MEM[(double *)ap.52];
        printf ("FP=%f", f);
        goto <D.21940>;
      }
      <D.21971>:
      D.22746 = type->data.klass;
      D.22747 = BIT_FIELD_REF <*D.22746, 32, 160>;
      D.22748 = D.22747 & 16;
      if (D.22748 != 0) goto <D.22749>; else goto <D.22750>;
      <D.22749>:
      D.22746 = type->data.klass;
      type = mono_class_enum_basetype (D.22746);
      goto handle_enum;
      <D.22750>:
      {
        guint8 * p;
        int j;
        int size;
        int align;

        try
          {
            ap.54 = ap;
            ap.55 = ap.54 + 4;
            ap = ap.55;
            p = MEM[(void * *)ap.54];
            size = mono_type_size (type, &align);
            printf ("[");
            j = 0;
            goto <D.21977>;
            <D.21976>:
            j.56 = (sizetype) j;
            D.22754 = p + j.56;
            D.22755 = *D.22754;
            D.22756 = (int) D.22755;
            printf ("%02x,", D.22756);
            j = j + 1;
            <D.21977>:
            if (p != 0B) goto <D.22757>; else goto <D.21978>;
            <D.22757>:
            if (j < size) goto <D.21976>; else goto <D.21978>;
            <D.21978>:
            printf ("]");
          }
        finally
          {
            align = {CLOBBER};
          }
      }
      goto <D.21940>;
      <D.21979>:
      D.22758 = mono_method_signature (method);
      D.22759 = D.22758->ret;
      D.22760 = D.22759->type;
      D.22761 = (int) D.22760;
      printf ("(unknown return type %x)", D.22761);
      <D.21940>:
      printf ("\n");
      stdout.57 = stdout;
      fflush (stdout.57);
    }
  finally
    {
      ap = {CLOBBER};
    }
}


mono_trace_enable (gboolean enable)
{
  trace_spec.enabled = enable;
}


mono_trace_is_enabled ()
{
  gboolean D.22767;

  D.22767 = trace_spec.enabled;
  return D.22767;
}


