mono_class_get_methods_by_name (struct MonoClass * klass, const char * name, guint32 bflags, gboolean ignore_case, gboolean allow_ctors, struct MonoException * * ex)
{
  int (*<T39ce>) (const char *, const char *) iftmp.0;
  unsigned char D.25599;
  unsigned char D.25600;
  int D.22233;
  int iftmp.1;
  int D.22232;
  const char[7] * D.25608;
  unsigned char D.25609;
  int D.25610;
  unsigned char D.25611;
  int D.25612;
  _Bool D.25613;
  _Bool D.25614;
  _Bool D.25615;
  const unsigned char * D.25618;
  unsigned char D.25619;
  int D.25620;
  const unsigned char * D.25621;
  unsigned char D.25622;
  int D.25623;
  _Bool D.25624;
  _Bool D.25625;
  const unsigned char * D.25628;
  unsigned char D.25629;
  int D.25630;
  const unsigned char * D.25631;
  unsigned char D.25632;
  int D.25633;
  _Bool D.25634;
  _Bool D.25635;
  const unsigned char * D.25638;
  unsigned char D.25639;
  int D.25640;
  const unsigned char * D.25641;
  unsigned char D.25642;
  int D.25643;
  struct MonoLoaderError * D.25649;
  struct GPtrArray * D.25651;
  unsigned char D.25652;
  struct MonoLoaderError * D.25654;
  struct MonoType * D.25656;
  unsigned char D.25657;
  struct MonoClass * D.25660;
  int iftmp.2;
  unsigned int D.25666;
  unsigned int D.25667;
  unsigned char D.25669;
  unsigned int nslots.3;
  int D.25674;
  int D.25675;
  long unsigned int D.25676;
  long unsigned int D.25677;
  struct MonoLoaderError * D.25680;
  short int D.25682;
  int D.25685;
  _Bool D.25686;
  long int D.25687;
  long int D.25688;
  short int D.25691;
  long unsigned int D.25692;
  long unsigned int D.25693;
  guint32 * D.25694;
  unsigned int D.25695;
  int D.25696;
  int D.25697;
  unsigned int D.25698;
  unsigned int D.25699;
  short unsigned int D.25702;
  int D.25703;
  int D.25704;
  unsigned int D.25707;
  const char * D.25712;
  char D.25713;
  int D.22245;
  int iftmp.4;
  int D.22244;
  const char[6] * D.25719;
  unsigned char D.25720;
  int D.25721;
  unsigned char D.25722;
  int D.25723;
  _Bool D.25724;
  _Bool D.25725;
  _Bool D.25726;
  const unsigned char * D.25729;
  unsigned char D.25730;
  int D.25731;
  const unsigned char * D.25732;
  unsigned char D.25733;
  int D.25734;
  _Bool D.25735;
  _Bool D.25736;
  const unsigned char * D.25739;
  unsigned char D.25740;
  int D.25741;
  const unsigned char * D.25742;
  unsigned char D.25743;
  int D.25744;
  _Bool D.25745;
  _Bool D.25746;
  const unsigned char * D.25749;
  unsigned char D.25750;
  int D.25751;
  const unsigned char * D.25752;
  unsigned char D.25753;
  int D.25754;
  int D.22254;
  int iftmp.5;
  int D.22253;
  const char[7] * D.25760;
  unsigned char D.25761;
  int D.25762;
  unsigned char D.25763;
  int D.25764;
  _Bool D.25765;
  _Bool D.25766;
  _Bool D.25767;
  const unsigned char * D.25770;
  unsigned char D.25771;
  int D.25772;
  const unsigned char * D.25773;
  unsigned char D.25774;
  int D.25775;
  _Bool D.25776;
  _Bool D.25777;
  const unsigned char * D.25780;
  unsigned char D.25781;
  int D.25782;
  const unsigned char * D.25783;
  unsigned char D.25784;
  int D.25785;
  _Bool D.25786;
  _Bool D.25787;
  const unsigned char * D.25790;
  unsigned char D.25791;
  int D.25792;
  const unsigned char * D.25793;
  unsigned char D.25794;
  int D.25795;
  int D.25797;
  unsigned int D.25800;
  unsigned int D.25804;
  _Bool D.25807;
  int D.25808;
  int D.25809;
  int D.25814;
  unsigned int D.25817;
  unsigned int D.25822;
  unsigned int D.25825;
  int D.25832;
  unsigned int D.25835;
  struct MonoException * D.25845;
  struct MonoLoaderError * D.25847;
  struct MonoException * D.25848;
  struct GPtrArray * array;
  struct MonoClass * startklass;
  struct MonoMethod * method;
  void * iter;
  int len;
  int match;
  int nslots;
  guint32 method_slots_default[8];
  guint32 * method_slots;
  int (*<T39ce>) (const char *, const char *) compare_func;
  void loader_error = <<< error >>>;
  void handle_parent = <<< error >>>;

  try
    {
      method_slots = 0B;
      compare_func = 0B;
      array = monoeg_g_ptr_array_new ();
      startklass = klass;
      *ex = 0B;
      len = 0;
      if (name != 0B) goto <D.25593>; else goto <D.25594>;
      <D.25593>:
      if (ignore_case != 0) goto <D.25596>; else goto <D.25597>;
      <D.25596>:
      iftmp.0 = monoeg_ascii_strcasecmp;
      goto <D.25598>;
      <D.25597>:
      iftmp.0 = strcmp;
      <D.25598>:
      compare_func = iftmp.0;
      <D.25594>:
      D.25599 = BIT_FIELD_REF <*klass, 8, 280>;
      D.25600 = D.25599 & 1;
      if (D.25600 != 0) goto <D.25601>; else goto <D.25602>;
      <D.25601>:
      if (name != 0B) goto <D.25603>; else goto <D.25604>;
      <D.25603>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name;
          D.25608 = "Invoke";
          D.25609 = MEM[(const unsigned char *)D.25608];
          D.25610 = (int) D.25609;
          D.25611 = *__s2;
          D.25612 = (int) D.25611;
          __result = D.25610 - D.25612;
          {
            D.25613 = __s2_len != 0;
            D.25614 = __result == 0;
            D.25615 = D.25613 & D.25614;
            if (D.25615 != 0) goto <D.25616>; else goto <D.25617>;
            <D.25616>:
            D.25618 = &MEM[(void *)"Invoke" + 1B];
            D.25619 = *D.25618;
            D.25620 = (int) D.25619;
            D.25621 = __s2 + 1;
            D.25622 = *D.25621;
            D.25623 = (int) D.25622;
            __result = D.25620 - D.25623;
            D.25624 = __s2_len > 1;
            D.25614 = __result == 0;
            D.25625 = D.25624 & D.25614;
            if (D.25625 != 0) goto <D.25626>; else goto <D.25627>;
            <D.25626>:
            D.25628 = &MEM[(void *)"Invoke" + 2B];
            D.25629 = *D.25628;
            D.25630 = (int) D.25629;
            D.25631 = __s2 + 2;
            D.25632 = *D.25631;
            D.25633 = (int) D.25632;
            __result = D.25630 - D.25633;
            D.25634 = __s2_len > 2;
            D.25614 = __result == 0;
            D.25635 = D.25634 & D.25614;
            if (D.25635 != 0) goto <D.25636>; else goto <D.25637>;
            <D.25636>:
            D.25638 = &MEM[(void *)"Invoke" + 3B];
            D.25639 = *D.25638;
            D.25640 = (int) D.25639;
            D.25641 = __s2 + 3;
            D.25642 = *D.25641;
            D.25643 = (int) D.25642;
            __result = D.25640 - D.25643;
            <D.25637>:
            <D.25627>:
            <D.25617>:
          }
          D.22232 = __result;
        }
        iftmp.1 = -D.22232;
        goto <D.25644>;
        <D.25607>:
        iftmp.1 = __builtin_strcmp (name, "Invoke");
        <D.25644>:
        D.22233 = iftmp.1;
      }
      if (D.22233 == 0) goto <D.25645>; else goto <D.25646>;
      <D.25645>:
      if (bflags == 28) goto <D.25647>; else goto <D.25648>;
      <D.25647>:
      method = mono_get_delegate_invoke (klass);
      D.25649 = mono_loader_get_last_error ();
      if (D.25649 != 0B) goto loader_error; else goto <D.25650>;
      <D.25650>:
      monoeg_g_ptr_array_add (array, method);
      D.25651 = array;
      return D.25651;
      <D.25648>:
      <D.25646>:
      <D.25604>:
      <D.25602>:
      mono_class_setup_vtable (klass);
      D.25652 = klass->exception_type;
      if (D.25652 != 0) goto loader_error; else goto <D.25653>;
      <D.25653>:
      D.25654 = mono_loader_get_last_error ();
      if (D.25654 != 0B) goto loader_error; else goto <D.25655>;
      <D.25655>:
      D.25656 = &klass->byval_arg;
      D.25657 = is_generic_parameter (D.25656);
      if (D.25657 != 0) goto <D.25658>; else goto <D.25659>;
      <D.25658>:
      D.25660 = klass->parent;
      nslots = mono_class_get_vtable_size (D.25660);
      goto <D.25661>;
      <D.25659>:
      D.25666 = klass->flags;
      D.25667 = D.25666 & 32;
      if (D.25667 != 0) goto <D.25663>; else goto <D.25668>;
      <D.25668>:
      D.25669 = klass->byval_arg.type;
      if (D.25669 == 19) goto <D.25663>; else goto <D.25670>;
      <D.25670>:
      D.25669 = klass->byval_arg.type;
      if (D.25669 == 30) goto <D.25663>; else goto <D.25664>;
      <D.25663>:
      iftmp.2 = mono_class_num_methods (klass);
      goto <D.25665>;
      <D.25664>:
      iftmp.2 = mono_class_get_vtable_size (klass);
      <D.25665>:
      nslots = iftmp.2;
      <D.25661>:
      nslots.3 = (unsigned int) nslots;
      if (nslots.3 > 255) goto <D.25672>; else goto <D.25673>;
      <D.25672>:
      D.25674 = nslots / 32;
      D.25675 = D.25674 + 1;
      D.25676 = (long unsigned int) D.25675;
      D.25677 = D.25676 * 4;
      method_slots = monoeg_malloc0 (D.25677);
      goto <D.25678>;
      <D.25673>:
      method_slots = &method_slots_default;
      memset (method_slots, 0, 32);
      <D.25678>:
      handle_parent:
      mono_class_setup_vtable (klass);
      D.25652 = klass->exception_type;
      if (D.25652 != 0) goto loader_error; else goto <D.25679>;
      <D.25679>:
      D.25680 = mono_loader_get_last_error ();
      if (D.25680 != 0B) goto loader_error; else goto <D.25681>;
      <D.25681>:
      iter = 0B;
      goto <D.22236>;
      <D.22255>:
      match = 0;
      D.25682 = method->slot;
      if (D.25682 != -1) goto <D.25683>; else goto <D.25684>;
      <D.25683>:
      D.25682 = method->slot;
      D.25685 = (int) D.25682;
      D.25686 = D.25685 >= nslots;
      D.25687 = (long int) D.25686;
      D.25688 = __builtin_expect (D.25687, 0);
      if (D.25688 != 0) goto <D.25689>; else goto <D.25690>;
      <D.25689>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 3493, "method->slot < nslots");
      <D.25690>:
      D.25682 = method->slot;
      D.25691 = D.25682 >> 5;
      D.25692 = (long unsigned int) D.25691;
      D.25693 = D.25692 * 4;
      D.25694 = method_slots + D.25693;
      D.25695 = *D.25694;
      D.25682 = method->slot;
      D.25685 = (int) D.25682;
      D.25696 = D.25685 & 31;
      D.25697 = 1 << D.25696;
      D.25698 = (unsigned int) D.25697;
      D.25699 = D.25695 & D.25698;
      if (D.25699 != 0) goto <D.25700>; else goto <D.25701>;
      <D.25700>:
      // predicted unlikely by continue predictor.
      goto <D.22236>;
      <D.25701>:
      D.25702 = method->flags;
      D.25703 = (int) D.25702;
      D.25704 = D.25703 & 256;
      if (D.25704 == 0) goto <D.25705>; else goto <D.25706>;
      <D.25705>:
      D.25682 = method->slot;
      D.25691 = D.25682 >> 5;
      D.25692 = (long unsigned int) D.25691;
      D.25693 = D.25692 * 4;
      D.25694 = method_slots + D.25693;
      D.25682 = method->slot;
      D.25691 = D.25682 >> 5;
      D.25692 = (long unsigned int) D.25691;
      D.25693 = D.25692 * 4;
      D.25694 = method_slots + D.25693;
      D.25695 = *D.25694;
      D.25682 = method->slot;
      D.25685 = (int) D.25682;
      D.25696 = D.25685 & 31;
      D.25697 = 1 << D.25696;
      D.25698 = (unsigned int) D.25697;
      D.25707 = D.25695 | D.25698;
      *D.25694 = D.25707;
      <D.25706>:
      <D.25684>:
      if (allow_ctors == 0) goto <D.25710>; else goto <D.25711>;
      <D.25710>:
      D.25712 = method->name;
      D.25713 = *D.25712;
      if (D.25713 == 46) goto <D.25714>; else goto <D.25715>;
      <D.25714>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = method->name;
          D.25719 = ".ctor";
          D.25720 = MEM[(const unsigned char *)D.25719];
          D.25721 = (int) D.25720;
          D.25722 = *__s2;
          D.25723 = (int) D.25722;
          __result = D.25721 - D.25723;
          {
            D.25724 = __s2_len != 0;
            D.25725 = __result == 0;
            D.25726 = D.25724 & D.25725;
            if (D.25726 != 0) goto <D.25727>; else goto <D.25728>;
            <D.25727>:
            D.25729 = &MEM[(void *)".ctor" + 1B];
            D.25730 = *D.25729;
            D.25731 = (int) D.25730;
            D.25732 = __s2 + 1;
            D.25733 = *D.25732;
            D.25734 = (int) D.25733;
            __result = D.25731 - D.25734;
            D.25735 = __s2_len > 1;
            D.25725 = __result == 0;
            D.25736 = D.25735 & D.25725;
            if (D.25736 != 0) goto <D.25737>; else goto <D.25738>;
            <D.25737>:
            D.25739 = &MEM[(void *)".ctor" + 2B];
            D.25740 = *D.25739;
            D.25741 = (int) D.25740;
            D.25742 = __s2 + 2;
            D.25743 = *D.25742;
            D.25744 = (int) D.25743;
            __result = D.25741 - D.25744;
            D.25745 = __s2_len > 2;
            D.25725 = __result == 0;
            D.25746 = D.25745 & D.25725;
            if (D.25746 != 0) goto <D.25747>; else goto <D.25748>;
            <D.25747>:
            D.25749 = &MEM[(void *)".ctor" + 3B];
            D.25750 = *D.25749;
            D.25751 = (int) D.25750;
            D.25752 = __s2 + 3;
            D.25753 = *D.25752;
            D.25754 = (int) D.25753;
            __result = D.25751 - D.25754;
            <D.25748>:
            <D.25738>:
            <D.25728>:
          }
          D.22244 = __result;
        }
        iftmp.4 = -D.22244;
        goto <D.25755>;
        <D.25718>:
        D.25712 = method->name;
        iftmp.4 = __builtin_strcmp (D.25712, ".ctor");
        <D.25755>:
        D.22245 = iftmp.4;
      }
      if (D.22245 == 0) goto <D.25708>; else goto <D.25756>;
      <D.25756>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = method->name;
          D.25760 = ".cctor";
          D.25761 = MEM[(const unsigned char *)D.25760];
          D.25762 = (int) D.25761;
          D.25763 = *__s2;
          D.25764 = (int) D.25763;
          __result = D.25762 - D.25764;
          {
            D.25765 = __s2_len != 0;
            D.25766 = __result == 0;
            D.25767 = D.25765 & D.25766;
            if (D.25767 != 0) goto <D.25768>; else goto <D.25769>;
            <D.25768>:
            D.25770 = &MEM[(void *)".cctor" + 1B];
            D.25771 = *D.25770;
            D.25772 = (int) D.25771;
            D.25773 = __s2 + 1;
            D.25774 = *D.25773;
            D.25775 = (int) D.25774;
            __result = D.25772 - D.25775;
            D.25776 = __s2_len > 1;
            D.25766 = __result == 0;
            D.25777 = D.25776 & D.25766;
            if (D.25777 != 0) goto <D.25778>; else goto <D.25779>;
            <D.25778>:
            D.25780 = &MEM[(void *)".cctor" + 2B];
            D.25781 = *D.25780;
            D.25782 = (int) D.25781;
            D.25783 = __s2 + 2;
            D.25784 = *D.25783;
            D.25785 = (int) D.25784;
            __result = D.25782 - D.25785;
            D.25786 = __s2_len > 2;
            D.25766 = __result == 0;
            D.25787 = D.25786 & D.25766;
            if (D.25787 != 0) goto <D.25788>; else goto <D.25789>;
            <D.25788>:
            D.25790 = &MEM[(void *)".cctor" + 3B];
            D.25791 = *D.25790;
            D.25792 = (int) D.25791;
            D.25793 = __s2 + 3;
            D.25794 = *D.25793;
            D.25795 = (int) D.25794;
            __result = D.25792 - D.25795;
            <D.25789>:
            <D.25779>:
            <D.25769>:
          }
          D.22253 = __result;
        }
        iftmp.5 = -D.22253;
        goto <D.25796>;
        <D.25759>:
        D.25712 = method->name;
        iftmp.5 = __builtin_strcmp (D.25712, ".cctor");
        <D.25796>:
        D.22254 = iftmp.5;
      }
      if (D.22254 == 0) goto <D.25708>; else goto <D.25709>;
      <D.25708>:
      // predicted unlikely by continue predictor.
      goto <D.22236>;
      <D.25709>:
      <D.25715>:
      <D.25711>:
      D.25702 = method->flags;
      D.25703 = (int) D.25702;
      D.25797 = D.25703 & 7;
      if (D.25797 == 6) goto <D.25798>; else goto <D.25799>;
      <D.25798>:
      D.25800 = bflags & 16;
      if (D.25800 != 0) goto <D.25801>; else goto <D.25802>;
      <D.25801>:
      match = match + 1;
      <D.25802>:
      goto <D.25803>;
      <D.25799>:
      D.25804 = bflags & 32;
      if (D.25804 != 0) goto <D.25805>; else goto <D.25806>;
      <D.25805>:
      D.25807 = klass == startklass;
      D.25808 = (int) D.25807;
      D.25809 = method_nonpublic (method, D.25808);
      if (D.25809 != 0) goto <D.25810>; else goto <D.25811>;
      <D.25810>:
      match = match + 1;
      <D.25811>:
      <D.25806>:
      <D.25803>:
      if (match == 0) goto <D.25812>; else goto <D.25813>;
      <D.25812>:
      // predicted unlikely by continue predictor.
      goto <D.22236>;
      <D.25813>:
      match = 0;
      D.25702 = method->flags;
      D.25703 = (int) D.25702;
      D.25814 = D.25703 & 16;
      if (D.25814 != 0) goto <D.25815>; else goto <D.25816>;
      <D.25815>:
      D.25817 = bflags & 8;
      if (D.25817 != 0) goto <D.25818>; else goto <D.25819>;
      <D.25818>:
      D.25822 = bflags & 64;
      if (D.25822 != 0) goto <D.25820>; else goto <D.25823>;
      <D.25823>:
      if (klass == startklass) goto <D.25820>; else goto <D.25821>;
      <D.25820>:
      match = match + 1;
      <D.25821>:
      <D.25819>:
      goto <D.25824>;
      <D.25816>:
      D.25825 = bflags & 4;
      if (D.25825 != 0) goto <D.25826>; else goto <D.25827>;
      <D.25826>:
      match = match + 1;
      <D.25827>:
      <D.25824>:
      if (match == 0) goto <D.25828>; else goto <D.25829>;
      <D.25828>:
      // predicted unlikely by continue predictor.
      goto <D.22236>;
      <D.25829>:
      if (name != 0B) goto <D.25830>; else goto <D.25831>;
      <D.25830>:
      D.25712 = method->name;
      D.25832 = compare_func (name, D.25712);
      if (D.25832 != 0) goto <D.25833>; else goto <D.25834>;
      <D.25833>:
      // predicted unlikely by continue predictor.
      goto <D.22236>;
      <D.25834>:
      <D.25831>:
      match = 0;
      monoeg_g_ptr_array_add (array, method);
      <D.22236>:
      method = mono_class_get_methods (klass, &iter);
      if (method != 0B) goto <D.22255>; else goto <D.22256>;
      <D.22256>:
      D.25835 = bflags & 2;
      if (D.25835 == 0) goto <D.25836>; else goto <D.25837>;
      <D.25836>:
      klass = klass->parent;
      if (klass != 0B) goto handle_parent; else goto <D.25838>;
      <D.25838>:
      <D.25837>:
      if (&method_slots_default != method_slots) goto <D.25839>; else goto <D.25840>;
      <D.25839>:
      monoeg_g_free (method_slots);
      <D.25840>:
      D.25651 = array;
      return D.25651;
      loader_error:
      if (&method_slots_default != method_slots) goto <D.25841>; else goto <D.25842>;
      <D.25841>:
      monoeg_g_free (method_slots);
      <D.25842>:
      monoeg_g_ptr_array_free (array, 1);
      D.25652 = klass->exception_type;
      if (D.25652 != 0) goto <D.25843>; else goto <D.25844>;
      <D.25843>:
      D.25845 = mono_class_get_exception_for_failure (klass);
      *ex = D.25845;
      goto <D.25846>;
      <D.25844>:
      D.25847 = mono_loader_get_last_error ();
      D.25848 = mono_loader_error_prepare_exception (D.25847);
      *ex = D.25848;
      mono_loader_clear_error ();
      <D.25846>:
      D.25651 = 0B;
      return D.25651;
    }
  finally
    {
      iter = {CLOBBER};
      method_slots_default = {CLOBBER};
    }
}


is_generic_parameter (struct MonoType * type)
{
  MonoBoolean D.25851;
  int iftmp.6;
  unsigned char D.25855;
  unsigned char D.25856;
  unsigned char D.25858;
  _Bool D.25859;
  _Bool D.25860;
  _Bool D.25861;

  D.25855 = BIT_FIELD_REF <*type, 8, 88>;
  D.25856 = D.25855 & 64;
  if (D.25856 == 0) goto <D.25857>; else goto <D.25853>;
  <D.25857>:
  D.25858 = type->type;
  D.25859 = D.25858 == 19;
  D.25860 = D.25858 == 30;
  D.25861 = D.25859 | D.25860;
  if (D.25861 != 0) goto <D.25862>; else goto <D.25853>;
  <D.25862>:
  iftmp.6 = 1;
  goto <D.25854>;
  <D.25853>:
  iftmp.6 = 0;
  <D.25854>:
  D.25851 = (MonoBoolean) iftmp.6;
  return D.25851;
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.25866;
  int D.25871;
  void * D.25873;
  long unsigned int D.25874;

  D.25866 = __builtin_constant_p (__len);
  if (D.25866 != 0) goto <D.25867>; else goto <D.25868>;
  <D.25867>:
  if (__len == 0) goto <D.25869>; else goto <D.25870>;
  <D.25869>:
  D.25871 = __builtin_constant_p (__ch);
  if (D.25871 == 0) goto <D.25864>; else goto <D.25872>;
  <D.25872>:
  if (__ch != 0) goto <D.25864>; else goto <D.25865>;
  <D.25864>:
  __warn_memset_zero_len ();
  D.25873 = __dest;
  return D.25873;
  <D.25865>:
  <D.25870>:
  <D.25868>:
  D.25874 = __builtin_object_size (__dest, 0);
  D.25873 = __builtin___memset_chk (__dest, __ch, __len, D.25874);
  return D.25873;
}


method_nonpublic (struct MonoMethod * method, gboolean start_klass)
{
  short unsigned int D.25876;
  int D.25877;
  int D.25878;
  gboolean D.25879;
  int iftmp.7;
  struct MonoClass * D.25885;

  D.25876 = method->flags;
  D.25877 = (int) D.25876;
  D.25878 = D.25877 & 7;
  switch (D.25878) <default: <D.22204>, case 1: <D.22202>, case 3: <D.22201>, case 6: <D.22203>>
  <D.22201>:
  if (start_klass != 0) goto <D.25881>; else goto <D.25884>;
  <D.25884>:
  D.25885 = mono_defaults.generic_ilist_class;
  if (D.25885 != 0B) goto <D.25881>; else goto <D.25882>;
  <D.25881>:
  iftmp.7 = 1;
  goto <D.25883>;
  <D.25882>:
  iftmp.7 = 0;
  <D.25883>:
  D.25879 = iftmp.7;
  return D.25879;
  <D.22202>:
  D.25879 = start_klass;
  return D.25879;
  <D.22203>:
  D.25879 = 0;
  return D.25879;
  <D.22204>:
  D.25879 = 1;
  return D.25879;
}


ves_icall_System_Environment_get_UserName ()
{
  struct MonoString * D.25887;
  const gchar * D.25888;
  struct MonoDomain * D.25889;

  D.25888 = monoeg_g_get_user_name ();
  D.25889 = mono_domain_get ();
  D.25887 = mono_string_new (D.25889, D.25888);
  return D.25887;
}


mono_icall_init ()
{
  int D.25286;
  short unsigned int D.25895;
  sizetype D.25896;
  const char * D.25897;
  const struct IcallTypeDesc * D.25900;
  short unsigned int D.25901;
  int D.25902;
  short unsigned int D.25903;
  int D.25904;
  int D.25905;
  short unsigned int D.25906;
  sizetype D.25907;
  int D.25296;
  struct GHashTable * icall_hash.8;
  int i;

  i = 0;
  if (1 != 0) goto <D.25891>; else goto <D.25892>;
  <D.25891>:
  {
    int j;
    const char * prev_class;
    const char * prev_method;

    prev_class = 0B;
    i = 0;
    goto <D.25301>;
    <D.25300>:
    {
      const struct IcallTypeDesc * desc;
      int num_icalls;

      prev_method = 0B;
      if (prev_class != 0B) goto <D.25893>; else goto <D.25894>;
      <D.25893>:
      {
        size_t __s1_len;
        size_t __s2_len;

        D.25895 = icall_type_names_idx[i];
        D.25896 = (sizetype) D.25895;
        D.25897 = &icall_type_names_str + D.25896;
        D.25286 = __builtin_strcmp (prev_class, D.25897);
      }
      if (D.25286 >= 0) goto <D.25898>; else goto <D.25899>;
      <D.25898>:
      D.25895 = icall_type_names_idx[i];
      D.25896 = (sizetype) D.25895;
      D.25897 = &icall_type_names_str + D.25896;
      monoeg_g_print ("class %s should come before class %s\n", D.25897, prev_class);
      <D.25899>:
      <D.25894>:
      D.25895 = icall_type_names_idx[i];
      D.25896 = (sizetype) D.25895;
      prev_class = &icall_type_names_str + D.25896;
      desc = &icall_type_descs[i];
      D.25900 = desc + 2;
      D.25901 = D.25900->first_icall;
      D.25902 = (int) D.25901;
      D.25903 = desc->first_icall;
      D.25904 = (int) D.25903;
      num_icalls = D.25902 - D.25904;
      j = 0;
      goto <D.25298>;
      <D.25297>:
      {
        const char * methodn;

        D.25903 = desc->first_icall;
        D.25904 = (int) D.25903;
        D.25905 = D.25904 + j;
        D.25906 = icall_names_idx[D.25905];
        D.25907 = (sizetype) D.25906;
        methodn = &icall_names_str + D.25907;
        if (prev_method != 0B) goto <D.25908>; else goto <D.25909>;
        <D.25908>:
        {
          size_t __s1_len;
          size_t __s2_len;

          D.25296 = __builtin_strcmp (prev_method, methodn);
        }
        if (D.25296 >= 0) goto <D.25910>; else goto <D.25911>;
        <D.25910>:
        monoeg_g_print ("method %s should come before method %s\n", methodn, prev_method);
        <D.25911>:
        <D.25909>:
        prev_method = methodn;
      }
      j = j + 1;
      <D.25298>:
      if (j < num_icalls) goto <D.25297>; else goto <D.25299>;
      <D.25299>:
    }
    i = i + 1;
    <D.25301>:
    if (i <= 107) goto <D.25300>; else goto <D.25302>;
    <D.25302>:
  }
  <D.25892>:
  icall_hash.8 = monoeg_g_hash_table_new_full (monoeg_g_str_hash, monoeg_g_str_equal, monoeg_g_free, 0B);
  icall_hash = icall_hash.8;
  pthread_mutex_init (&icall_mutex, 0B);
}


mono_icall_cleanup ()
{
  struct GHashTable * icall_hash.9;
  struct GHashTable * jit_icall_hash_name.10;
  struct GHashTable * jit_icall_hash_addr.11;

  icall_hash.9 = icall_hash;
  monoeg_g_hash_table_destroy (icall_hash.9);
  jit_icall_hash_name.10 = jit_icall_hash_name;
  monoeg_g_hash_table_destroy (jit_icall_hash_name.10);
  jit_icall_hash_addr.11 = jit_icall_hash_addr;
  monoeg_g_hash_table_destroy (jit_icall_hash_addr.11);
  pthread_mutex_destroy (&icall_mutex);
}


mono_add_internal_call (const char * name, const void * method)
{
  gchar * D.25916;
  struct GHashTable * icall_hash.12;

  mono_icall_lock ();
  D.25916 = monoeg_strdup (name);
  icall_hash.12 = icall_hash;
  monoeg_g_hash_table_insert_replace (icall_hash.12, D.25916, method, 0);
  mono_icall_unlock ();
}


mono_icall_lock ()
{
  pthread_mutex_lock (&icall_mutex);
}


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

  if (str != 0B) goto <D.25918>; else goto <D.25919>;
  <D.25918>:
  D.25920 = __strdup (str);
  return D.25920;
  <D.25919>:
  D.25920 = 0B;
  return D.25920;
}


mono_icall_unlock ()
{
  pthread_mutex_unlock (&icall_mutex);
}


mono_lookup_internal_call (struct MonoMethod * method)
{
  _Bool D.25922;
  long int D.25923;
  long int D.25924;
  unsigned char D.25927;
  unsigned char D.25928;
  struct MonoClass * D.25931;
  struct MonoClass * D.25932;
  void * D.25937;
  int pos.13;
  unsigned int pos.14;
  unsigned int D.25940;
  int D.25941;
  sizetype D.25942;
  char * D.25943;
  int D.25949;
  const char * D.25950;
  long unsigned int D.25951;
  long unsigned int D.25952;
  sizetype D.25953;
  sizetype D.25954;
  char * D.25955;
  sizetype D.25956;
  sizetype D.25957;
  sizetype D.25958;
  struct MonoMethodSignature * D.25959;
  long unsigned int D.25960;
  int D.25961;
  int D.25962;
  int D.25963;
  unsigned int D.25964;
  long unsigned int D.25967;
  char * D.25968;
  sizetype D.25969;
  sizetype D.25970;
  char * D.25971;
  sizetype D.25972;
  char * D.25973;
  struct GHashTable * icall_hash.15;
  sizetype D.25981;
  char * D.25982;
  struct MonoImage * D.25987;
  char * D.25988;
  char * sigstart;
  char * tmpsig;
  char mname[2048];
  int typelen;
  int mlen;
  int siglen;
  void * res;
  const struct IcallTypeDesc * imap;

  try
    {
      typelen = 0;
      imap = 0B;
      D.25922 = method == 0B;
      D.25923 = (long int) D.25922;
      D.25924 = __builtin_expect (D.25923, 0);
      if (D.25924 != 0) goto <D.25925>; else goto <D.25926>;
      <D.25925>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 8049, "method != NULL");
      <D.25926>:
      D.25927 = BIT_FIELD_REF <*method, 8, 264>;
      D.25928 = D.25927 & 16;
      if (D.25928 != 0) goto <D.25929>; else goto <D.25930>;
      <D.25929>:
      method = MEM[(struct MonoMethodInflated *)method].declaring;
      <D.25930>:
      D.25931 = method->klass;
      D.25932 = D.25931->nested_in;
      if (D.25932 != 0B) goto <D.25933>; else goto <D.25934>;
      <D.25933>:
      {
        int pos;

        D.25931 = method->klass;
        D.25932 = D.25931->nested_in;
        pos = concat_class_name (&mname, 2046, D.25932);
        if (pos == 0) goto <D.25935>; else goto <D.25936>;
        <D.25935>:
        D.25937 = 0B;
        return D.25937;
        <D.25936>:
        pos.13 = pos;
        pos = pos.13 + 1;
        mname[pos.13] = 47;
        mname[pos] = 0;
        D.25931 = method->klass;
        pos.14 = (unsigned int) pos;
        D.25940 = 2047 - pos.14;
        D.25941 = (int) D.25940;
        D.25942 = (sizetype) pos;
        D.25943 = &mname + D.25942;
        typelen = concat_class_name (D.25943, D.25941, D.25931);
        if (typelen == 0) goto <D.25944>; else goto <D.25945>;
        <D.25944>:
        D.25937 = 0B;
        return D.25937;
        <D.25945>:
        typelen = typelen + pos;
      }
      goto <D.25946>;
      <D.25934>:
      D.25931 = method->klass;
      typelen = concat_class_name (&mname, 2048, D.25931);
      if (typelen == 0) goto <D.25947>; else goto <D.25948>;
      <D.25947>:
      D.25937 = 0B;
      return D.25937;
      <D.25948>:
      <D.25946>:
      imap = find_class_icalls (&mname);
      mname[typelen] = 58;
      D.25949 = typelen + 1;
      mname[D.25949] = 58;
      D.25950 = method->name;
      D.25951 = strlen (D.25950);
      mlen = (int) D.25951;
      D.25952 = (long unsigned int) mlen;
      D.25950 = method->name;
      D.25953 = (sizetype) typelen;
      D.25954 = D.25953 + 2;
      D.25955 = &mname + D.25954;
      memcpy (D.25955, D.25950, D.25952);
      D.25953 = (sizetype) typelen;
      D.25956 = (sizetype) mlen;
      D.25957 = D.25953 + D.25956;
      D.25958 = D.25957 + 2;
      sigstart = &mname + D.25958;
      *sigstart = 0;
      D.25959 = mono_method_signature (method);
      tmpsig = mono_signature_get_desc (D.25959, 1);
      D.25960 = strlen (tmpsig);
      siglen = (int) D.25960;
      D.25961 = typelen + mlen;
      D.25962 = D.25961 + siglen;
      D.25963 = D.25962 + 6;
      D.25964 = (unsigned int) D.25963;
      if (D.25964 > 2048) goto <D.25965>; else goto <D.25966>;
      <D.25965>:
      D.25937 = 0B;
      return D.25937;
      <D.25966>:
      *sigstart = 40;
      D.25967 = (long unsigned int) siglen;
      D.25968 = sigstart + 1;
      memcpy (D.25968, tmpsig, D.25967);
      D.25969 = (sizetype) siglen;
      D.25970 = D.25969 + 1;
      D.25971 = sigstart + D.25970;
      *D.25971 = 41;
      D.25969 = (sizetype) siglen;
      D.25972 = D.25969 + 2;
      D.25973 = sigstart + D.25972;
      *D.25973 = 0;
      monoeg_g_free (tmpsig);
      mono_icall_lock ();
      icall_hash.15 = icall_hash;
      res = monoeg_g_hash_table_lookup (icall_hash.15, &mname);
      if (res != 0B) goto <D.25975>; else goto <D.25976>;
      <D.25975>:
      mono_icall_unlock ();
      D.25937 = res;
      return D.25937;
      <D.25976>:
      *sigstart = 0;
      icall_hash.15 = icall_hash;
      res = monoeg_g_hash_table_lookup (icall_hash.15, &mname);
      if (res != 0B) goto <D.25977>; else goto <D.25978>;
      <D.25977>:
      mono_icall_unlock ();
      D.25937 = res;
      return D.25937;
      <D.25978>:
      if (imap == 0B) goto <D.25979>; else goto <D.25980>;
      <D.25979>:
      mono_icall_unlock ();
      D.25937 = 0B;
      return D.25937;
      <D.25980>:
      D.25956 = (sizetype) mlen;
      D.25981 = -D.25956;
      D.25982 = sigstart + D.25981;
      res = find_method_icall (imap, D.25982);
      if (res != 0B) goto <D.25983>; else goto <D.25984>;
      <D.25983>:
      mono_icall_unlock ();
      D.25937 = res;
      return D.25937;
      <D.25984>:
      *sigstart = 40;
      D.25956 = (sizetype) mlen;
      D.25981 = -D.25956;
      D.25982 = sigstart + D.25981;
      res = find_method_icall (imap, D.25982);
      if (res != 0B) goto <D.25985>; else goto <D.25986>;
      <D.25985>:
      mono_icall_unlock ();
      D.25937 = res;
      return D.25937;
      <D.25986>:
      monoeg_g_log (0B, 16, "cant resolve internal call to \"%s\" (tested without signature also)", &mname);
      monoeg_g_print ("\nYour mono runtime and class libraries are out of sync.\n");
      D.25931 = method->klass;
      D.25987 = D.25931->image;
      D.25988 = D.25987->name;
      monoeg_g_print ("The out of sync library is: %s\n", D.25988);
      monoeg_g_print ("\nWhen you update one from svn you need to update, compile and install\nthe other too.\n");
      monoeg_g_print ("Do not report this as a bug unless you\'re sure you have updated correctly:\nyou probably have a broken mono install.\n");
      monoeg_g_print ("If you see other errors or faults after this message they are probably related\n");
      monoeg_g_print ("and you need to fix your mono install first.\n");
      mono_icall_unlock ();
      D.25937 = 0B;
      return D.25937;
    }
  finally
    {
      mname = {CLOBBER};
    }
}


concat_class_name (char * buf, int bufsize, struct MonoClass * klass)
{
  const char * D.25991;
  long unsigned int D.25992;
  const char * D.25993;
  long unsigned int D.25994;
  int D.25995;
  int D.25996;
  int D.25999;
  long unsigned int D.26002;
  int nspacelen.16;
  sizetype D.26004;
  char * D.26005;
  long unsigned int D.26006;
  sizetype D.26007;
  char * D.26008;
  sizetype D.26009;
  char * D.26010;
  int nspacelen;
  int cnamelen;

  D.25991 = klass->name_space;
  D.25992 = strlen (D.25991);
  nspacelen = (int) D.25992;
  D.25993 = klass->name;
  D.25994 = strlen (D.25993);
  cnamelen = (int) D.25994;
  D.25995 = nspacelen + cnamelen;
  D.25996 = D.25995 + 1;
  if (D.25996 >= bufsize) goto <D.25997>; else goto <D.25998>;
  <D.25997>:
  D.25999 = 0;
  return D.25999;
  <D.25998>:
  if (nspacelen != 0) goto <D.26000>; else goto <D.26001>;
  <D.26000>:
  D.26002 = (long unsigned int) nspacelen;
  D.25991 = klass->name_space;
  memcpy (buf, D.25991, D.26002);
  nspacelen.16 = nspacelen;
  nspacelen = nspacelen.16 + 1;
  D.26004 = (sizetype) nspacelen.16;
  D.26005 = buf + D.26004;
  *D.26005 = 46;
  <D.26001>:
  D.26006 = (long unsigned int) cnamelen;
  D.25993 = klass->name;
  D.26007 = (sizetype) nspacelen;
  D.26008 = buf + D.26007;
  memcpy (D.26008, D.25993, D.26006);
  D.25995 = nspacelen + cnamelen;
  D.26009 = (sizetype) D.25995;
  D.26010 = buf + D.26009;
  *D.26010 = 0;
  D.25999 = nspacelen + cnamelen;
  return D.25999;
}


find_class_icalls (const char * name)
{
  const struct IcallTypeDesc * D.26014;
  long int nameslot.17;
  long int D.26016;
  long int D.26017;
  long int D.26018;
  const guint16 * nameslot;

  nameslot = mono_binary_search (name, &icall_type_names_idx, 108, 2, compare_class_imap);
  if (nameslot == 0B) goto <D.26012>; else goto <D.26013>;
  <D.26012>:
  D.26014 = 0B;
  return D.26014;
  <D.26013>:
  nameslot.17 = (long int) nameslot;
  D.26016 = (long int) &icall_type_names_idx[0];
  D.26017 = nameslot.17 - D.26016;
  D.26018 = D.26017 /[ex] 2;
  D.26014 = &icall_type_descs[D.26018];
  return D.26014;
}


compare_class_imap (const void * key, const void * elem)
{
  short unsigned int D.26020;
  sizetype D.26021;
  int D.26022;
  int D.25348;
  const char * class_name;

  D.26020 = MEM[(guint16 *)elem];
  D.26021 = (sizetype) D.26020;
  class_name = &icall_type_names_str + D.26021;
  {
    size_t __s1_len;
    size_t __s2_len;

    D.25348 = __builtin_strcmp (key, class_name);
  }
  D.26022 = D.25348;
  return D.26022;
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.26024;
  long unsigned int D.26025;

  D.26025 = __builtin_object_size (__dest, 0);
  D.26024 = __builtin___memcpy_chk (__dest, __src, __len, D.26025);
  return D.26024;
}


find_method_icall (const struct IcallTypeDesc * imap, const char * name)
{
  const struct IcallTypeDesc * D.26027;
  short unsigned int D.26028;
  int D.26029;
  short unsigned int D.26030;
  int D.26031;
  int D.26032;
  long unsigned int D.26033;
  long unsigned int D.26034;
  long unsigned int D.26035;
  const void * D.26036;
  void * D.26039;
  long int nameslot.18;
  long int D.26041;
  long int D.26042;
  long int D.26043;
  const guint16 * nameslot;

  D.26027 = imap + 2;
  D.26028 = D.26027->first_icall;
  D.26029 = (int) D.26028;
  D.26030 = imap->first_icall;
  D.26031 = (int) D.26030;
  D.26032 = D.26029 - D.26031;
  D.26033 = (long unsigned int) D.26032;
  D.26030 = imap->first_icall;
  D.26034 = (long unsigned int) D.26030;
  D.26035 = D.26034 * 2;
  D.26036 = &icall_names_idx + D.26035;
  nameslot = mono_binary_search (name, D.26036, D.26033, 2, compare_method_imap);
  if (nameslot == 0B) goto <D.26037>; else goto <D.26038>;
  <D.26037>:
  D.26039 = 0B;
  return D.26039;
  <D.26038>:
  nameslot.18 = (long int) nameslot;
  D.26041 = (long int) &icall_names_idx[0];
  D.26042 = nameslot.18 - D.26041;
  D.26043 = D.26042 /[ex] 2;
  D.26039 = icall_functions[D.26043];
  return D.26039;
}


ves_icall_get_resources_ptr (struct MonoReflectionAssembly * assembly, void * * result, gint32 * size)
{
  _Bool D.26047;
  _Bool D.26048;
  _Bool D.26049;
  gboolean D.26051;
  struct MonoAssembly * D.26052;
  unsigned int D.26055;
  char * D.26056;
  void * D.26057;
  unsigned int D.26060;
  int D.26061;
  struct MonoPEResourceDataEntry * entry;
  struct MonoImage * image;

  D.26047 = assembly == 0B;
  D.26048 = result == 0B;
  D.26049 = D.26047 | D.26048;
  if (D.26049 != 0) goto <D.26045>; else goto <D.26050>;
  <D.26050>:
  if (size == 0B) goto <D.26045>; else goto <D.26046>;
  <D.26045>:
  D.26051 = 0;
  return D.26051;
  <D.26046>:
  *result = 0B;
  *size = 0;
  D.26052 = assembly->assembly;
  image = D.26052->image;
  entry = mono_image_lookup_resource (image, 101, 0, 0B);
  if (entry == 0B) goto <D.26053>; else goto <D.26054>;
  <D.26053>:
  D.26051 = 0;
  return D.26051;
  <D.26054>:
  D.26055 = entry->rde_data_offset;
  D.26056 = mono_image_rva_map (image, D.26055);
  *result = D.26056;
  D.26057 = *result;
  if (D.26057 == 0B) goto <D.26058>; else goto <D.26059>;
  <D.26058>:
  monoeg_g_free (entry);
  D.26051 = 0;
  return D.26051;
  <D.26059>:
  D.26060 = entry->rde_size;
  D.26061 = (int) D.26060;
  *size = D.26061;
  monoeg_g_free (entry);
  D.26051 = 1;
  return D.26051;
}


ves_icall_System_Web_Util_ICalls_get_machine_install_dir ()
{
  const char * D.26063;
  struct MonoDomain * D.26064;
  struct MonoString * D.26065;
  struct MonoString * ipath;
  gchar * path;

  D.26063 = mono_get_config_dir ();
  path = monoeg_g_path_get_dirname (D.26063);
  D.26064 = mono_domain_get ();
  ipath = mono_string_new (D.26064, path);
  monoeg_g_free (path);
  D.26065 = ipath;
  return D.26065;
}


ves_icall_System_ValueType_InternalGetHashCode (struct MonoObject * this, struct MonoArray * * fields)
{
  struct MonoVTable * D.26067;
  int D.26068;
  gint32 D.26071;
  struct MonoType * D.26072;
  short unsigned int D.26073;
  int D.26074;
  int D.26075;
  int D.26078;
  int D.21096;
  int iftmp.19;
  int D.21095;
  const char[9] * D.26084;
  unsigned char D.26085;
  int D.26086;
  unsigned char D.26087;
  int D.26088;
  _Bool D.26089;
  _Bool D.26090;
  _Bool D.26091;
  const unsigned char * D.26094;
  unsigned char D.26095;
  int D.26096;
  const unsigned char * D.26097;
  unsigned char D.26098;
  int D.26099;
  _Bool D.26100;
  _Bool D.26101;
  const unsigned char * D.26104;
  unsigned char D.26105;
  int D.26106;
  const unsigned char * D.26107;
  unsigned char D.26108;
  int D.26109;
  _Bool D.26110;
  _Bool D.26111;
  const unsigned char * D.26114;
  unsigned char D.26115;
  int D.26116;
  const unsigned char * D.26117;
  unsigned char D.26118;
  int D.26119;
  const char * D.26121;
  unsigned char D.26124;
  int D.26125;
  int D.26126;
  sizetype D.26127;
  gint32 * D.26128;
  int D.26129;
  struct MonoString * * D.26130;
  unsigned int D.26133;
  unsigned int result.20;
  unsigned int D.26135;
  int D.26138;
  long unsigned int D.26139;
  long unsigned int D.26140;
  struct MonoDomain * D.26141;
  int count.21;
  long unsigned int D.26143;
  long unsigned int D.26144;
  struct MonoObject * * D.26145;
  long unsigned int D.26148;
  struct MonoClass * D.26149;
  struct MonoDomain * D.26150;
  struct MonoArray * D.26151;
  long unsigned int D.26152;
  struct MonoArray * D.26153;
  long unsigned int D.26154;
  long unsigned int D.26155;
  struct MonoObject * * D.26156;
  struct MonoObject * D.26157;
  struct MonoClass * klass;
  struct MonoObject * * values;
  struct MonoObject * o;
  int count;
  gint32 result;
  struct MonoClassField * field;
  void * iter;

  try
    {
      values = 0B;
      count = 0;
      result = 0;
      D.26067 = this->vtable;
      klass = D.26067->klass;
      D.26068 = mono_class_num_fields (klass);
      if (D.26068 == 0) goto <D.26069>; else goto <D.26070>;
      <D.26069>:
      D.26071 = mono_object_hash (this);
      return D.26071;
      <D.26070>:
      iter = 0B;
      goto <D.21087>;
      <D.21102>:
      D.26072 = field->type;
      D.26073 = D.26072->attrs;
      D.26074 = (int) D.26073;
      D.26075 = D.26074 & 16;
      if (D.26075 != 0) goto <D.26076>; else goto <D.26077>;
      <D.26076>:
      // predicted unlikely by continue predictor.
      goto <D.21087>;
      <D.26077>:
      D.26072 = field->type;
      D.26073 = D.26072->attrs;
      D.26074 = (int) D.26073;
      D.26078 = D.26074 & 1536;
      if (D.26078 != 0) goto <D.26079>; else goto <D.26080>;
      <D.26079>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = mono_field_get_name (field);
          D.26084 = "_Deleted";
          D.26085 = MEM[(const unsigned char *)D.26084];
          D.26086 = (int) D.26085;
          D.26087 = *__s2;
          D.26088 = (int) D.26087;
          __result = D.26086 - D.26088;
          {
            D.26089 = __s2_len != 0;
            D.26090 = __result == 0;
            D.26091 = D.26089 & D.26090;
            if (D.26091 != 0) goto <D.26092>; else goto <D.26093>;
            <D.26092>:
            D.26094 = &MEM[(void *)"_Deleted" + 1B];
            D.26095 = *D.26094;
            D.26096 = (int) D.26095;
            D.26097 = __s2 + 1;
            D.26098 = *D.26097;
            D.26099 = (int) D.26098;
            __result = D.26096 - D.26099;
            D.26100 = __s2_len > 1;
            D.26090 = __result == 0;
            D.26101 = D.26100 & D.26090;
            if (D.26101 != 0) goto <D.26102>; else goto <D.26103>;
            <D.26102>:
            D.26104 = &MEM[(void *)"_Deleted" + 2B];
            D.26105 = *D.26104;
            D.26106 = (int) D.26105;
            D.26107 = __s2 + 2;
            D.26108 = *D.26107;
            D.26109 = (int) D.26108;
            __result = D.26106 - D.26109;
            D.26110 = __s2_len > 2;
            D.26090 = __result == 0;
            D.26111 = D.26110 & D.26090;
            if (D.26111 != 0) goto <D.26112>; else goto <D.26113>;
            <D.26112>:
            D.26114 = &MEM[(void *)"_Deleted" + 3B];
            D.26115 = *D.26114;
            D.26116 = (int) D.26115;
            D.26117 = __s2 + 3;
            D.26118 = *D.26117;
            D.26119 = (int) D.26118;
            __result = D.26116 - D.26119;
            <D.26113>:
            <D.26103>:
            <D.26093>:
          }
          D.21095 = __result;
        }
        iftmp.19 = -D.21095;
        goto <D.26120>;
        <D.26083>:
        D.26121 = mono_field_get_name (field);
        iftmp.19 = __builtin_strcmp (D.26121, "_Deleted");
        <D.26120>:
        D.21096 = iftmp.19;
      }
      if (D.21096 == 0) goto <D.26122>; else goto <D.26123>;
      <D.26122>:
      // predicted unlikely by continue predictor.
      goto <D.21087>;
      <D.26123>:
      <D.26080>:
      D.26072 = field->type;
      D.26124 = D.26072->type;
      D.26125 = (int) D.26124;
      switch (D.26125) <default: <D.21101>, case 8: <D.21097>, case 14: <D.21099>>
      <D.21097>:
      D.26126 = field->offset;
      D.26127 = (sizetype) D.26126;
      D.26128 = this + D.26127;
      D.26129 = *D.26128;
      result = D.26129 ^ result;
      goto <D.21098>;
      <D.21099>:
      {
        struct MonoString * s;

        D.26126 = field->offset;
        D.26127 = (sizetype) D.26126;
        D.26130 = this + D.26127;
        s = *D.26130;
        if (s != 0B) goto <D.26131>; else goto <D.26132>;
        <D.26131>:
        D.26133 = mono_string_hash (s);
        result.20 = (unsigned int) result;
        D.26135 = D.26133 ^ result.20;
        result = (gint32) D.26135;
        <D.26132>:
        goto <D.21098>;
      }
      <D.21101>:
      if (values == 0B) goto <D.26136>; else goto <D.26137>;
      <D.26136>:
      D.26138 = mono_class_num_fields (klass);
      D.26139 = (long unsigned int) D.26138;
      D.26140 = D.26139 * 8;
      values = __builtin_alloca (D.26140);
      <D.26137>:
      D.26067 = this->vtable;
      D.26141 = D.26067->domain;
      o = mono_field_get_value_object (D.26141, field, this);
      count.21 = count;
      count = count.21 + 1;
      D.26143 = (long unsigned int) count.21;
      D.26144 = D.26143 * 8;
      D.26145 = values + D.26144;
      *D.26145 = o;
      <D.21098>:
      <D.21087>:
      field = mono_class_get_fields (klass, &iter);
      if (field != 0B) goto <D.21102>; else goto <D.21103>;
      <D.21103>:
      if (values != 0B) goto <D.26146>; else goto <D.26147>;
      <D.26146>:
      {
        int i;

        D.26148 = (long unsigned int) count;
        D.26149 = mono_defaults.object_class;
        D.26150 = mono_domain_get ();
        D.26151 = mono_array_new (D.26150, D.26149, D.26148);
        mono_gc_wbarrier_generic_store (fields, D.26151);
        i = 0;
        goto <D.21107>;
        <D.21106>:
        {
          void * * __p;

          D.26152 = (long unsigned int) i;
          D.26153 = *fields;
          __p = mono_array_addr_with_size (D.26153, 8, D.26152);
          D.26154 = (long unsigned int) i;
          D.26155 = D.26154 * 8;
          D.26156 = values + D.26155;
          D.26157 = *D.26156;
          D.26153 = *fields;
          mono_gc_wbarrier_set_arrayref (D.26153, __p, D.26157);
        }
        i = i + 1;
        <D.21107>:
        if (i < count) goto <D.21106>; else goto <D.21108>;
        <D.21108>:
      }
      goto <D.26158>;
      <D.26147>:
      *fields = 0B;
      <D.26158>:
      D.26071 = result;
      return D.26071;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


ves_icall_System_ValueType_Equals (struct MonoObject * this, struct MonoObject * that, struct MonoArray * * fields)
{
  _Bool D.26161;
  long int D.26162;
  long int D.26163;
  struct MonoVTable * D.26168;
  struct MonoVTable * D.26169;
  MonoBoolean D.26172;
  unsigned char D.26173;
  unsigned char D.26174;
  struct MonoType * D.26177;
  struct MonoType * D.26180;
  unsigned char D.26181;
  gint32 * D.26184;
  int D.26185;
  gint32 * D.26186;
  int D.26187;
  _Bool D.26188;
  struct MonoType * D.26189;
  short unsigned int D.26190;
  int D.26191;
  int D.26192;
  int D.26195;
  int D.21130;
  int iftmp.22;
  int D.21129;
  const char[9] * D.26201;
  unsigned char D.26202;
  int D.26203;
  unsigned char D.26204;
  int D.26205;
  _Bool D.26206;
  _Bool D.26207;
  _Bool D.26208;
  const unsigned char * D.26211;
  unsigned char D.26212;
  int D.26213;
  const unsigned char * D.26214;
  unsigned char D.26215;
  int D.26216;
  _Bool D.26217;
  _Bool D.26218;
  const unsigned char * D.26221;
  unsigned char D.26222;
  int D.26223;
  const unsigned char * D.26224;
  unsigned char D.26225;
  int D.26226;
  _Bool D.26227;
  _Bool D.26228;
  const unsigned char * D.26231;
  unsigned char D.26232;
  int D.26233;
  const unsigned char * D.26234;
  unsigned char D.26235;
  int D.26236;
  const char * D.26238;
  unsigned char D.26241;
  int D.26242;
  int D.26243;
  sizetype D.26244;
  guint8 * D.26245;
  unsigned char D.26246;
  guint8 * D.26247;
  unsigned char D.26248;
  gint16 * D.26251;
  short int D.26252;
  gint16 * D.26253;
  short int D.26254;
  gint32 * D.26257;
  int D.26258;
  gint32 * D.26259;
  int D.26260;
  gint64 * D.26263;
  long int D.26264;
  gint64 * D.26265;
  long int D.26266;
  float * D.26269;
  float D.26270;
  float * D.26271;
  float D.26272;
  double * D.26275;
  double D.26276;
  double * D.26277;
  double D.26278;
  struct MonoString * * D.26281;
  struct MonoString * * D.26282;
  _Bool D.26284;
  _Bool D.26285;
  _Bool D.26286;
  int D.26289;
  int D.26290;
  long unsigned int D.26293;
  long unsigned int D.26294;
  mono_unichar2 * D.26295;
  mono_unichar2 * D.26296;
  int D.26297;
  int D.26302;
  int D.26303;
  long unsigned int D.26304;
  long unsigned int D.26305;
  struct MonoDomain * D.26306;
  int count.23;
  long unsigned int D.26308;
  long unsigned int D.26309;
  struct MonoObject * * D.26310;
  int count.24;
  long unsigned int D.26312;
  long unsigned int D.26313;
  struct MonoObject * * D.26314;
  long unsigned int D.26318;
  struct MonoClass * D.26319;
  struct MonoDomain * D.26320;
  struct MonoArray * D.26321;
  struct MonoArray * D.26322;
  sizetype D.26323;
  long unsigned int D.26324;
  long unsigned int D.26325;
  struct MonoObject * * D.26326;
  struct MonoObject * D.26327;
  struct MonoClass * klass;
  struct MonoObject * * values;
  struct MonoObject * o;
  struct MonoClassField * field;
  void * iter;
  int count;

  try
    {
      values = 0B;
      count = 0;
      D.26161 = that == 0B;
      D.26162 = (long int) D.26161;
      D.26163 = __builtin_expect (D.26162, 0);
      if (D.26163 != 0) goto <D.26164>; else goto <D.26165>;
      <D.26164>:
      {
        struct MonoException * ex;

        if (that != 0B) goto <D.26166>; else goto <D.26167>;
        <D.26166>:
        <D.26167>:
        ex = mono_get_exception_argument_null ("that");
        mono_raise_exception (ex);
      }
      <D.26165>:
      D.26168 = this->vtable;
      D.26169 = that->vtable;
      if (D.26168 != D.26169) goto <D.26170>; else goto <D.26171>;
      <D.26170>:
      D.26172 = 0;
      return D.26172;
      <D.26171>:
      D.26168 = this->vtable;
      klass = D.26168->klass;
      D.26173 = BIT_FIELD_REF <*klass, 8, 256>;
      D.26174 = D.26173 & 16;
      if (D.26174 != 0) goto <D.26175>; else goto <D.26176>;
      <D.26175>:
      D.26177 = mono_class_enum_basetype (klass);
      if (D.26177 != 0B) goto <D.26178>; else goto <D.26179>;
      <D.26178>:
      D.26180 = mono_class_enum_basetype (klass);
      D.26181 = D.26180->type;
      if (D.26181 == 8) goto <D.26182>; else goto <D.26183>;
      <D.26182>:
      D.26184 = this + 16;
      D.26185 = *D.26184;
      D.26186 = that + 16;
      D.26187 = *D.26186;
      D.26188 = D.26185 == D.26187;
      D.26172 = (MonoBoolean) D.26188;
      return D.26172;
      <D.26183>:
      <D.26179>:
      <D.26176>:
      *fields = 0B;
      iter = 0B;
      goto <D.21121>;
      <D.21151>:
      D.26189 = field->type;
      D.26190 = D.26189->attrs;
      D.26191 = (int) D.26190;
      D.26192 = D.26191 & 16;
      if (D.26192 != 0) goto <D.26193>; else goto <D.26194>;
      <D.26193>:
      // predicted unlikely by continue predictor.
      goto <D.21121>;
      <D.26194>:
      D.26189 = field->type;
      D.26190 = D.26189->attrs;
      D.26191 = (int) D.26190;
      D.26195 = D.26191 & 1536;
      if (D.26195 != 0) goto <D.26196>; else goto <D.26197>;
      <D.26196>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = mono_field_get_name (field);
          D.26201 = "_Deleted";
          D.26202 = MEM[(const unsigned char *)D.26201];
          D.26203 = (int) D.26202;
          D.26204 = *__s2;
          D.26205 = (int) D.26204;
          __result = D.26203 - D.26205;
          {
            D.26206 = __s2_len != 0;
            D.26207 = __result == 0;
            D.26208 = D.26206 & D.26207;
            if (D.26208 != 0) goto <D.26209>; else goto <D.26210>;
            <D.26209>:
            D.26211 = &MEM[(void *)"_Deleted" + 1B];
            D.26212 = *D.26211;
            D.26213 = (int) D.26212;
            D.26214 = __s2 + 1;
            D.26215 = *D.26214;
            D.26216 = (int) D.26215;
            __result = D.26213 - D.26216;
            D.26217 = __s2_len > 1;
            D.26207 = __result == 0;
            D.26218 = D.26217 & D.26207;
            if (D.26218 != 0) goto <D.26219>; else goto <D.26220>;
            <D.26219>:
            D.26221 = &MEM[(void *)"_Deleted" + 2B];
            D.26222 = *D.26221;
            D.26223 = (int) D.26222;
            D.26224 = __s2 + 2;
            D.26225 = *D.26224;
            D.26226 = (int) D.26225;
            __result = D.26223 - D.26226;
            D.26227 = __s2_len > 2;
            D.26207 = __result == 0;
            D.26228 = D.26227 & D.26207;
            if (D.26228 != 0) goto <D.26229>; else goto <D.26230>;
            <D.26229>:
            D.26231 = &MEM[(void *)"_Deleted" + 3B];
            D.26232 = *D.26231;
            D.26233 = (int) D.26232;
            D.26234 = __s2 + 3;
            D.26235 = *D.26234;
            D.26236 = (int) D.26235;
            __result = D.26233 - D.26236;
            <D.26230>:
            <D.26220>:
            <D.26210>:
          }
          D.21129 = __result;
        }
        iftmp.22 = -D.21129;
        goto <D.26237>;
        <D.26200>:
        D.26238 = mono_field_get_name (field);
        iftmp.22 = __builtin_strcmp (D.26238, "_Deleted");
        <D.26237>:
        D.21130 = iftmp.22;
      }
      if (D.21130 == 0) goto <D.26239>; else goto <D.26240>;
      <D.26239>:
      // predicted unlikely by continue predictor.
      goto <D.21121>;
      <D.26240>:
      <D.26197>:
      D.26189 = field->type;
      D.26241 = D.26189->type;
      D.26242 = (int) D.26241;
      switch (D.26242) <default: <D.21149>, case 2: <D.21133>, case 3: <D.21137>, case 4: <D.21132>, case 5: <D.21131>, case 6: <D.21136>, case 7: <D.21135>, case 8: <D.21139>, case 9: <D.21138>, case 10: <D.21141>, case 11: <D.21140>, case 12: <D.21142>, case 13: <D.21143>, case 14: <D.21144>>
      <D.21131>:
      <D.21132>:
      <D.21133>:
      D.26243 = field->offset;
      D.26244 = (sizetype) D.26243;
      D.26245 = this + D.26244;
      D.26246 = *D.26245;
      D.26243 = field->offset;
      D.26244 = (sizetype) D.26243;
      D.26247 = that + D.26244;
      D.26248 = *D.26247;
      if (D.26246 != D.26248) goto <D.26249>; else goto <D.26250>;
      <D.26249>:
      D.26172 = 0;
      return D.26172;
      <D.26250>:
      goto <D.21134>;
      <D.21135>:
      <D.21136>:
      <D.21137>:
      D.26243 = field->offset;
      D.26244 = (sizetype) D.26243;
      D.26251 = this + D.26244;
      D.26252 = *D.26251;
      D.26243 = field->offset;
      D.26244 = (sizetype) D.26243;
      D.26253 = that + D.26244;
      D.26254 = *D.26253;
      if (D.26252 != D.26254) goto <D.26255>; else goto <D.26256>;
      <D.26255>:
      D.26172 = 0;
      return D.26172;
      <D.26256>:
      goto <D.21134>;
      <D.21138>:
      <D.21139>:
      D.26243 = field->offset;
      D.26244 = (sizetype) D.26243;
      D.26257 = this + D.26244;
      D.26258 = *D.26257;
      D.26243 = field->offset;
      D.26244 = (sizetype) D.26243;
      D.26259 = that + D.26244;
      D.26260 = *D.26259;
      if (D.26258 != D.26260) goto <D.26261>; else goto <D.26262>;
      <D.26261>:
      D.26172 = 0;
      return D.26172;
      <D.26262>:
      goto <D.21134>;
      <D.21140>:
      <D.21141>:
      D.26243 = field->offset;
      D.26244 = (sizetype) D.26243;
      D.26263 = this + D.26244;
      D.26264 = *D.26263;
      D.26243 = field->offset;
      D.26244 = (sizetype) D.26243;
      D.26265 = that + D.26244;
      D.26266 = *D.26265;
      if (D.26264 != D.26266) goto <D.26267>; else goto <D.26268>;
      <D.26267>:
      D.26172 = 0;
      return D.26172;
      <D.26268>:
      goto <D.21134>;
      <D.21142>:
      D.26243 = field->offset;
      D.26244 = (sizetype) D.26243;
      D.26269 = this + D.26244;
      D.26270 = *D.26269;
      D.26243 = field->offset;
      D.26244 = (sizetype) D.26243;
      D.26271 = that + D.26244;
      D.26272 = *D.26271;
      if (D.26270 != D.26272) goto <D.26273>; else goto <D.26274>;
      <D.26273>:
      D.26172 = 0;
      return D.26172;
      <D.26274>:
      goto <D.21134>;
      <D.21143>:
      D.26243 = field->offset;
      D.26244 = (sizetype) D.26243;
      D.26275 = this + D.26244;
      D.26276 = *D.26275;
      D.26243 = field->offset;
      D.26244 = (sizetype) D.26243;
      D.26277 = that + D.26244;
      D.26278 = *D.26277;
      if (D.26276 != D.26278) goto <D.26279>; else goto <D.26280>;
      <D.26279>:
      D.26172 = 0;
      return D.26172;
      <D.26280>:
      goto <D.21134>;
      <D.21144>:
      {
        struct MonoString * s1;
        struct MonoString * s2;
        guint32 s1len;
        guint32 s2len;

        D.26243 = field->offset;
        D.26244 = (sizetype) D.26243;
        D.26281 = this + D.26244;
        s1 = *D.26281;
        D.26243 = field->offset;
        D.26244 = (sizetype) D.26243;
        D.26282 = that + D.26244;
        s2 = *D.26282;
        if (s1 == s2) goto <D.21134>; else goto <D.26283>;
        <D.26283>:
        D.26284 = s1 == 0B;
        D.26285 = s2 == 0B;
        D.26286 = D.26284 | D.26285;
        if (D.26286 != 0) goto <D.26287>; else goto <D.26288>;
        <D.26287>:
        D.26172 = 0;
        return D.26172;
        <D.26288>:
        D.26289 = mono_string_length (s1);
        s1len = (guint32) D.26289;
        D.26290 = mono_string_length (s2);
        s2len = (guint32) D.26290;
        if (s1len != s2len) goto <D.26291>; else goto <D.26292>;
        <D.26291>:
        D.26172 = 0;
        return D.26172;
        <D.26292>:
        D.26293 = (long unsigned int) s1len;
        D.26294 = D.26293 * 2;
        D.26295 = mono_string_chars (s2);
        D.26296 = mono_string_chars (s1);
        D.26297 = memcmp (D.26296, D.26295, D.26294);
        if (D.26297 != 0) goto <D.26298>; else goto <D.26299>;
        <D.26298>:
        D.26172 = 0;
        return D.26172;
        <D.26299>:
        goto <D.21134>;
      }
      <D.21149>:
      if (values == 0B) goto <D.26300>; else goto <D.26301>;
      <D.26300>:
      D.26302 = mono_class_num_fields (klass);
      D.26303 = D.26302 * 2;
      D.26304 = (long unsigned int) D.26303;
      D.26305 = D.26304 * 8;
      values = __builtin_alloca (D.26305);
      <D.26301>:
      D.26168 = this->vtable;
      D.26306 = D.26168->domain;
      o = mono_field_get_value_object (D.26306, field, this);
      count.23 = count;
      count = count.23 + 1;
      D.26308 = (long unsigned int) count.23;
      D.26309 = D.26308 * 8;
      D.26310 = values + D.26309;
      *D.26310 = o;
      D.26168 = this->vtable;
      D.26306 = D.26168->domain;
      o = mono_field_get_value_object (D.26306, field, that);
      count.24 = count;
      count = count.24 + 1;
      D.26312 = (long unsigned int) count.24;
      D.26313 = D.26312 * 8;
      D.26314 = values + D.26313;
      *D.26314 = o;
      <D.21134>:
      D.26173 = BIT_FIELD_REF <*klass, 8, 256>;
      D.26174 = D.26173 & 16;
      if (D.26174 != 0) goto <D.21150>; else goto <D.26315>;
      <D.26315>:
      <D.21121>:
      field = mono_class_get_fields (klass, &iter);
      if (field != 0B) goto <D.21151>; else goto <D.21150>;
      <D.21150>:
      if (values != 0B) goto <D.26316>; else goto <D.26317>;
      <D.26316>:
      {
        int i;

        D.26318 = (long unsigned int) count;
        D.26319 = mono_defaults.object_class;
        D.26320 = mono_domain_get ();
        D.26321 = mono_array_new (D.26320, D.26319, D.26318);
        mono_gc_wbarrier_generic_store (fields, D.26321);
        i = 0;
        goto <D.21155>;
        <D.21154>:
        {
          void * * __p;

          D.26322 = *fields;
          D.26323 = (sizetype) i;
          __p = &D.26322->vector[D.26323];
          D.26324 = (long unsigned int) i;
          D.26325 = D.26324 * 8;
          D.26326 = values + D.26325;
          D.26327 = *D.26326;
          D.26322 = *fields;
          mono_gc_wbarrier_set_arrayref (D.26322, __p, D.26327);
        }
        i = i + 1;
        <D.21155>:
        if (i < count) goto <D.21154>; else goto <D.21156>;
        <D.21156>:
        D.26172 = 0;
        return D.26172;
      }
      <D.26317>:
      D.26172 = 1;
      return D.26172;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


mono_TypedReference_ToObjectInternal (struct MonoType * type, void * value, struct MonoClass * klass)
{
  int D.26330;
  struct MonoObject * D.26333;
  struct MonoDomain * D.26334;

  D.26330 = mono_type_is_reference (type);
  if (D.26330 != 0) goto <D.26331>; else goto <D.26332>;
  <D.26331>:
  {
    struct MonoObject * * objp;

    objp = value;
    D.26333 = *objp;
    return D.26333;
  }
  <D.26332>:
  D.26334 = mono_domain_get ();
  D.26333 = mono_value_box (D.26334, klass, value);
  return D.26333;
}


mono_TypedReference_ToObject (struct MonoTypedRef tref)
{
  struct MonoType * D.26336;
  int D.26337;
  struct MonoObject * D.26340;
  void * D.26341;
  struct MonoClass * D.26342;
  struct MonoDomain * D.26343;

  D.26336 = tref.type;
  D.26337 = mono_type_is_reference (D.26336);
  if (D.26337 != 0) goto <D.26338>; else goto <D.26339>;
  <D.26338>:
  {
    struct MonoObject * * objp;

    objp = tref.value;
    D.26340 = *objp;
    return D.26340;
  }
  <D.26339>:
  D.26341 = tref.value;
  D.26342 = tref.klass;
  D.26343 = mono_domain_get ();
  D.26340 = mono_value_box (D.26343, D.26342, D.26341);
  return D.26340;
}


ves_icall_type_is_subtype_of (struct MonoReflectionType * type, struct MonoReflectionType * c, MonoBoolean check_interfaces)
{
  _Bool D.26345;
  long int D.26346;
  long int D.26347;
  struct MonoVTable * D.26350;
  guint32 D.26353;
  struct MonoType * D.26354;
  struct MonoType * D.26355;
  struct MonoClass * * D.26361;
  struct MonoClass * * D.26363;
  unsigned char D.26364;
  unsigned char D.26365;
  struct MonoClass * D.26368;
  _Bool D.26369;
  int D.26370;
  int D.26371;
  struct MonoDomain * domain;
  struct MonoClass * klass;
  struct MonoClass * klassc;

  D.26345 = type == 0B;
  D.26346 = (long int) D.26345;
  D.26347 = __builtin_expect (D.26346, 0);
  if (D.26347 != 0) goto <D.26348>; else goto <D.26349>;
  <D.26348>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 1502, "type != NULL");
  <D.26349>:
  D.26350 = MEM[(struct MonoObject *)type].vtable;
  domain = D.26350->domain;
  if (c == 0B) goto <D.26351>; else goto <D.26352>;
  <D.26351>:
  D.26353 = 0;
  return D.26353;
  <D.26352>:
  D.26354 = type->type;
  klass = mono_class_from_mono_type (D.26354);
  D.26355 = c->type;
  klassc = mono_class_from_mono_type (D.26355);
  if (check_interfaces != 0) goto <D.26356>; else goto <D.26357>;
  <D.26356>:
  mono_class_init_or_throw (klass);
  mono_class_init_or_throw (klassc);
  goto <D.26358>;
  <D.26357>:
  D.26361 = klass->supertypes;
  if (D.26361 == 0B) goto <D.26359>; else goto <D.26362>;
  <D.26362>:
  D.26363 = klassc->supertypes;
  if (D.26363 == 0B) goto <D.26359>; else goto <D.26360>;
  <D.26359>:
  mono_class_setup_supertypes (klass);
  mono_class_setup_supertypes (klassc);
  <D.26360>:
  <D.26358>:
  D.26354 = type->type;
  D.26364 = BIT_FIELD_REF <*D.26354, 8, 88>;
  D.26365 = D.26364 & 64;
  if (D.26365 != 0) goto <D.26366>; else goto <D.26367>;
  <D.26366>:
  D.26368 = mono_defaults.object_class;
  D.26369 = D.26368 == klassc;
  D.26353 = (guint32) D.26369;
  return D.26353;
  <D.26367>:
  D.26370 = (int) check_interfaces;
  D.26371 = mono_class_is_subclass_of (klass, klassc, D.26370);
  D.26353 = (guint32) D.26371;
  return D.26353;
}


mono_class_init_or_throw (struct MonoClass * klass)
{
  int D.26373;
  struct MonoException * D.26376;

  D.26373 = mono_class_init (klass);
  if (D.26373 == 0) goto <D.26374>; else goto <D.26375>;
  <D.26374>:
  D.26376 = mono_class_get_exception_for_failure (klass);
  mono_raise_exception (D.26376);
  <D.26375>:
}


ves_icall_type_is_assignable_from (struct MonoReflectionType * type, struct MonoReflectionType * c)
{
  _Bool D.26377;
  long int D.26378;
  long int D.26379;
  struct MonoVTable * D.26382;
  struct MonoType * D.26383;
  struct MonoType * D.26384;
  unsigned char D.26385;
  unsigned char D.26386;
  unsigned char D.26387;
  unsigned char D.26388;
  guint32 D.26391;
  unsigned char D.26392;
  int D.26395;
  int iftmp.25;
  int D.26401;
  int D.26403;
  int D.26404;
  unsigned char D.26406;
  _Bool D.26407;
  _Bool D.26408;
  _Bool D.26409;
  int iftmp.26;
  unsigned char D.26415;
  unsigned char D.26416;
  struct MonoGenericParam * D.26418;
  short unsigned int D.26419;
  struct MonoGenericParam * D.26420;
  short unsigned int D.26421;
  unsigned char D.26423;
  _Bool D.26424;
  _Bool D.26425;
  _Bool D.26426;
  _Bool D.26429;
  unsigned char D.26430;
  _Bool D.26431;
  _Bool D.26432;
  _Bool D.26433;
  unsigned char D.26436;
  unsigned char D.26437;
  _Bool D.26440;
  unsigned char D.26441;
  unsigned char D.26442;
  unsigned char D.26443;
  _Bool D.26444;
  int D.26445;
  struct MonoDomain * domain;
  struct MonoClass * klass;
  struct MonoClass * klassc;

  D.26377 = type == 0B;
  D.26378 = (long int) D.26377;
  D.26379 = __builtin_expect (D.26378, 0);
  if (D.26379 != 0) goto <D.26380>; else goto <D.26381>;
  <D.26380>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 1555, "type != NULL");
  <D.26381>:
  D.26382 = MEM[(struct MonoObject *)type].vtable;
  domain = D.26382->domain;
  D.26383 = type->type;
  klass = mono_class_from_mono_type (D.26383);
  D.26384 = c->type;
  klassc = mono_class_from_mono_type (D.26384);
  D.26383 = type->type;
  D.26385 = BIT_FIELD_REF <*D.26383, 8, 88>;
  D.26384 = c->type;
  D.26386 = BIT_FIELD_REF <*D.26384, 8, 88>;
  D.26387 = D.26385 ^ D.26386;
  D.26388 = D.26387 & 64;
  if (D.26388 != 0) goto <D.26389>; else goto <D.26390>;
  <D.26389>:
  D.26391 = 0;
  return D.26391;
  <D.26390>:
  D.26383 = type->type;
  D.26385 = BIT_FIELD_REF <*D.26383, 8, 88>;
  D.26392 = D.26385 & 64;
  if (D.26392 != 0) goto <D.26393>; else goto <D.26394>;
  <D.26393>:
  {
    struct MonoType * t;
    struct MonoType * ot;

    D.26383 = type->type;
    t = mono_type_get_underlying_type_ignore_byref (D.26383);
    D.26384 = c->type;
    ot = mono_type_get_underlying_type_ignore_byref (D.26384);
    klass = mono_class_from_mono_type (t);
    klassc = mono_class_from_mono_type (ot);
    D.26395 = mono_type_is_primitive (t);
    if (D.26395 != 0) goto <D.26396>; else goto <D.26397>;
    <D.26396>:
    D.26401 = mono_type_is_primitive (ot);
    if (D.26401 != 0) goto <D.26402>; else goto <D.26399>;
    <D.26402>:
    D.26403 = klass->instance_size;
    D.26404 = klassc->instance_size;
    if (D.26403 == D.26404) goto <D.26405>; else goto <D.26399>;
    <D.26405>:
    iftmp.25 = 1;
    goto <D.26400>;
    <D.26399>:
    iftmp.25 = 0;
    <D.26400>:
    D.26391 = (guint32) iftmp.25;
    return D.26391;
    <D.26397>:
    D.26406 = t->type;
    D.26407 = D.26406 == 19;
    D.26408 = D.26406 == 30;
    D.26409 = D.26407 | D.26408;
    if (D.26409 != 0) goto <D.26410>; else goto <D.26411>;
    <D.26410>:
    D.26415 = t->type;
    D.26416 = ot->type;
    if (D.26415 == D.26416) goto <D.26417>; else goto <D.26413>;
    <D.26417>:
    D.26418 = t->data.generic_param;
    D.26419 = D.26418->num;
    D.26420 = ot->data.generic_param;
    D.26421 = D.26420->num;
    if (D.26419 == D.26421) goto <D.26422>; else goto <D.26413>;
    <D.26422>:
    iftmp.26 = 1;
    goto <D.26414>;
    <D.26413>:
    iftmp.26 = 0;
    <D.26414>:
    D.26391 = (guint32) iftmp.26;
    return D.26391;
    <D.26411>:
    D.26423 = t->type;
    D.26424 = D.26423 == 15;
    D.26425 = D.26423 == 27;
    D.26426 = D.26424 | D.26425;
    if (D.26426 != 0) goto <D.26427>; else goto <D.26428>;
    <D.26427>:
    D.26415 = t->type;
    D.26416 = ot->type;
    D.26429 = D.26415 == D.26416;
    D.26391 = (guint32) D.26429;
    return D.26391;
    <D.26428>:
    D.26430 = ot->type;
    D.26431 = D.26430 == 19;
    D.26432 = D.26430 == 30;
    D.26433 = D.26431 | D.26432;
    if (D.26433 != 0) goto <D.26434>; else goto <D.26435>;
    <D.26434>:
    D.26391 = 0;
    return D.26391;
    <D.26435>:
    D.26436 = BIT_FIELD_REF <*klass, 8, 256>;
    D.26437 = D.26436 & 8;
    if (D.26437 != 0) goto <D.26438>; else goto <D.26439>;
    <D.26438>:
    D.26440 = klass == klassc;
    D.26391 = (guint32) D.26440;
    return D.26391;
    <D.26439>:
    D.26436 = BIT_FIELD_REF <*klass, 8, 256>;
    D.26441 = BIT_FIELD_REF <*klassc, 8, 256>;
    D.26442 = D.26436 ^ D.26441;
    D.26443 = D.26442 & 8;
    D.26444 = D.26443 == 0;
    D.26391 = (guint32) D.26444;
    return D.26391;
  }
  <D.26394>:
  D.26445 = mono_class_is_assignable_from (klass, klassc);
  D.26391 = (guint32) D.26445;
  return D.26391;
}


mono_type_get_underlying_type_ignore_byref (struct MonoType * type)
{
  unsigned char D.26447;
  struct MonoClass * D.26450;
  unsigned char D.26451;
  unsigned char D.26452;
  struct MonoType * D.26455;
  struct MonoGenericClass * D.26458;
  struct MonoClass * D.26459;
  unsigned char D.26460;
  unsigned char D.26461;

  D.26447 = type->type;
  if (D.26447 == 17) goto <D.26448>; else goto <D.26449>;
  <D.26448>:
  D.26450 = type->data.klass;
  D.26451 = BIT_FIELD_REF <*D.26450, 8, 256>;
  D.26452 = D.26451 & 16;
  if (D.26452 != 0) goto <D.26453>; else goto <D.26454>;
  <D.26453>:
  D.26450 = type->data.klass;
  D.26455 = mono_class_enum_basetype (D.26450);
  return D.26455;
  <D.26454>:
  <D.26449>:
  D.26447 = type->type;
  if (D.26447 == 21) goto <D.26456>; else goto <D.26457>;
  <D.26456>:
  D.26458 = type->data.generic_class;
  D.26459 = D.26458->container_class;
  D.26460 = BIT_FIELD_REF <*D.26459, 8, 256>;
  D.26461 = D.26460 & 16;
  if (D.26461 != 0) goto <D.26462>; else goto <D.26463>;
  <D.26462>:
  D.26458 = type->data.generic_class;
  D.26459 = D.26458->container_class;
  D.26455 = mono_class_enum_basetype (D.26459);
  return D.26455;
  <D.26463>:
  <D.26457>:
  D.26455 = type;
  return D.26455;
}


mono_type_is_primitive (struct MonoType * type)
{
  gboolean D.26465;
  int iftmp.27;
  unsigned char D.26470;
  unsigned char D.26471;
  _Bool D.26472;
  _Bool D.26473;
  _Bool D.26474;
  unsigned char D.26476;

  D.26470 = type->type;
  D.26471 = D.26470 + 254;
  D.26472 = D.26471 <= 11;
  D.26473 = D.26470 == 24;
  D.26474 = D.26472 | D.26473;
  if (D.26474 != 0) goto <D.26467>; else goto <D.26475>;
  <D.26475>:
  D.26476 = type->type;
  if (D.26476 == 25) goto <D.26467>; else goto <D.26468>;
  <D.26467>:
  iftmp.27 = 1;
  goto <D.26469>;
  <D.26468>:
  iftmp.27 = 0;
  <D.26469>:
  D.26465 = iftmp.27;
  return D.26465;
}


ves_icall_Type_make_byref_type (struct MonoReflectionType * type)
{
  struct MonoType * D.26478;
  struct MonoReflectionType * D.26479;
  struct MonoType * D.26480;
  struct MonoVTable * D.26481;
  struct MonoDomain * D.26482;
  struct MonoClass * klass;

  D.26478 = type->type;
  klass = mono_class_from_mono_type (D.26478);
  mono_class_init_or_throw (klass);
  check_for_invalid_type (klass);
  D.26480 = &klass->this_arg;
  D.26481 = MEM[(struct MonoObject *)type].vtable;
  D.26482 = D.26481->domain;
  D.26479 = mono_type_get_object (D.26482, D.26480);
  return D.26479;
}


check_for_invalid_type (struct MonoClass * klass)
{
  unsigned char D.26484;
  struct MonoDomain * D.26487;
  struct MonoException * D.26488;
  char * name;
  struct MonoString * str;

  D.26484 = klass->byval_arg.type;
  if (D.26484 != 22) goto <D.26485>; else goto <D.26486>;
  <D.26485>:
  return;
  <D.26486>:
  name = mono_type_get_full_name (klass);
  D.26487 = mono_domain_get ();
  str = mono_string_new (D.26487, name);
  monoeg_g_free (name);
  D.26488 = mono_get_exception_type_load (str, 0B);
  mono_raise_exception (D.26488);
}


ves_icall_Type_make_array_type (struct MonoReflectionType * type, int rank)
{
  struct MonoType * D.26490;
  unsigned int rank.28;
  struct MonoReflectionType * D.26495;
  struct MonoType * D.26496;
  struct MonoVTable * D.26497;
  struct MonoDomain * D.26498;
  struct MonoClass * klass;
  struct MonoClass * aklass;

  D.26490 = type->type;
  klass = mono_class_from_mono_type (D.26490);
  check_for_invalid_type (klass);
  if (rank == 0) goto <D.26491>; else goto <D.26492>;
  <D.26491>:
  aklass = mono_array_class_get (klass, 1);
  goto <D.26493>;
  <D.26492>:
  rank.28 = (unsigned int) rank;
  aklass = mono_bounded_array_class_get (klass, rank.28, 1);
  <D.26493>:
  D.26496 = &aklass->byval_arg;
  D.26497 = MEM[(struct MonoObject *)type].vtable;
  D.26498 = D.26497->domain;
  D.26495 = mono_type_get_object (D.26498, D.26496);
  return D.26495;
}


ves_icall_type_from_name (struct MonoString * name, MonoBoolean throwOnError, MonoBoolean ignoreCase)
{
  int D.26500;
  struct MonoReflectionType * D.26507;
  char * str;
  struct MonoReflectionType * type;

  str = mono_string_to_utf8 (name);
  D.26500 = (int) ignoreCase;
  type = type_from_name (str, D.26500);
  monoeg_g_free (str);
  if (type == 0B) goto <D.26501>; else goto <D.26502>;
  <D.26501>:
  {
    struct MonoException * e;

    e = 0B;
    if (throwOnError != 0) goto <D.26503>; else goto <D.26504>;
    <D.26503>:
    e = mono_get_exception_type_load (name, 0B);
    <D.26504>:
    mono_loader_clear_error ();
    if (e != 0B) goto <D.26505>; else goto <D.26506>;
    <D.26505>:
    mono_raise_exception (e);
    <D.26506>:
  }
  <D.26502>:
  D.26507 = type;
  return D.26507;
}


type_from_name (const char * str, MonoBoolean ignoreCase)
{
  int D.26509;
  struct MonoReflectionType * D.26512;
  const char * D.26513;
  struct MonoMethod * dest.29;
  struct MonoClass * D.26522;
  struct MonoImage * D.26523;
  int D.26527;
  struct MonoImage * D.26528;
  _Bool D.26533;
  _Bool D.26534;
  _Bool D.26535;
  int type_resolve.30;
  struct MonoDomain * D.26543;
  struct MonoType * type;
  struct MonoAssembly * assembly;
  struct MonoTypeNameParse info;
  char * temp_str;
  gboolean type_resolve;

  try
    {
      type = 0B;
      assembly = 0B;
      temp_str = monoeg_strdup (str);
      type_resolve = 0;
      D.26509 = mono_reflection_parse_type (temp_str, &info);
      if (D.26509 == 0) goto <D.26510>; else goto <D.26511>;
      <D.26510>:
      mono_reflection_free_type_info (&info);
      monoeg_g_free (temp_str);
      D.26512 = 0B;
      return D.26512;
      <D.26511>:
      D.26513 = info.assembly.name;
      if (D.26513 != 0B) goto <D.26514>; else goto <D.26515>;
      <D.26514>:
      assembly = mono_assembly_load (&info.assembly, 0B, 0B);
      goto <D.26516>;
      <D.26515>:
      {
        struct MonoMethod * m;
        struct MonoMethod * dest;

        try
          {
            m = mono_method_get_last_managed ();
            dest = m;
            mono_stack_walk_no_il (get_caller_no_reflection, &dest);
            dest.29 = dest;
            if (dest.29 == 0B) goto <D.26518>; else goto <D.26519>;
            <D.26518>:
            dest = m;
            <D.26519>:
            dest.29 = dest;
            if (dest.29 != 0B) goto <D.26520>; else goto <D.26521>;
            <D.26520>:
            dest.29 = dest;
            D.26522 = dest.29->klass;
            D.26523 = D.26522->image;
            assembly = D.26523->assembly;
            type_resolve = 1;
            goto <D.26524>;
            <D.26521>:
            monoeg_g_log (0B, 16, "icall.c:1303:");
            <D.26524>:
          }
        finally
          {
            dest = {CLOBBER};
          }
      }
      <D.26516>:
      if (assembly != 0B) goto <D.26525>; else goto <D.26526>;
      <D.26525>:
      D.26527 = (int) ignoreCase;
      D.26528 = assembly->image;
      type = mono_reflection_get_type (D.26528, &info, D.26527, &type_resolve);
      <D.26526>:
      D.26513 = info.assembly.name;
      if (D.26513 == 0B) goto <D.26529>; else goto <D.26530>;
      <D.26529>:
      if (type == 0B) goto <D.26531>; else goto <D.26532>;
      <D.26531>:
      D.26527 = (int) ignoreCase;
      type = mono_reflection_get_type (0B, &info, D.26527, &type_resolve);
      <D.26532>:
      <D.26530>:
      D.26533 = assembly != 0B;
      D.26534 = type == 0B;
      D.26535 = D.26533 & D.26534;
      if (D.26535 != 0) goto <D.26536>; else goto <D.26537>;
      <D.26536>:
      type_resolve.30 = type_resolve;
      if (type_resolve.30 != 0) goto <D.26539>; else goto <D.26540>;
      <D.26539>:
      type_resolve = 0;
      D.26527 = (int) ignoreCase;
      D.26528 = assembly->image;
      type = mono_reflection_get_type (D.26528, &info, D.26527, &type_resolve);
      <D.26540>:
      <D.26537>:
      mono_reflection_free_type_info (&info);
      monoeg_g_free (temp_str);
      if (type == 0B) goto <D.26541>; else goto <D.26542>;
      <D.26541>:
      D.26512 = 0B;
      return D.26512;
      <D.26542>:
      D.26543 = mono_domain_get ();
      D.26512 = mono_type_get_object (D.26543, type);
      return D.26512;
    }
  finally
    {
      info = {CLOBBER};
      type_resolve = {CLOBBER};
    }
}


get_caller_no_reflection (struct MonoMethod * m, gint32 no, gint32 ilo, gboolean managed, void * data)
{
  gboolean D.26548;
  unsigned char D.26549;
  unsigned char D.26550;
  struct MonoClass * D.26553;
  struct MonoImage * D.26554;
  struct MonoImage * D.26555;
  int D.21229;
  int iftmp.31;
  int D.21228;
  const char[18] * D.26561;
  unsigned char D.26562;
  int D.26563;
  unsigned char D.26564;
  int D.26565;
  _Bool D.26566;
  _Bool D.26567;
  _Bool D.26568;
  const unsigned char * D.26571;
  unsigned char D.26572;
  int D.26573;
  const unsigned char * D.26574;
  unsigned char D.26575;
  int D.26576;
  _Bool D.26577;
  _Bool D.26578;
  const unsigned char * D.26581;
  unsigned char D.26582;
  int D.26583;
  const unsigned char * D.26584;
  unsigned char D.26585;
  int D.26586;
  _Bool D.26587;
  _Bool D.26588;
  const unsigned char * D.26591;
  unsigned char D.26592;
  int D.26593;
  const unsigned char * D.26594;
  unsigned char D.26595;
  int D.26596;
  const char * D.26598;
  struct MonoMethod * D.26601;
  struct MonoMethod * * dest;

  dest = data;
  if (managed == 0) goto <D.26546>; else goto <D.26547>;
  <D.26546>:
  D.26548 = 0;
  return D.26548;
  <D.26547>:
  D.26549 = BIT_FIELD_REF <*m, 8, 256>;
  D.26550 = D.26549 & 124;
  if (D.26550 != 0) goto <D.26551>; else goto <D.26552>;
  <D.26551>:
  D.26548 = 0;
  return D.26548;
  <D.26552>:
  D.26553 = m->klass;
  D.26554 = D.26553->image;
  D.26555 = mono_defaults.corlib;
  if (D.26554 == D.26555) goto <D.26556>; else goto <D.26557>;
  <D.26556>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.26553 = m->klass;
      __s2 = D.26553->name_space;
      D.26561 = "System.Reflection";
      D.26562 = MEM[(const unsigned char *)D.26561];
      D.26563 = (int) D.26562;
      D.26564 = *__s2;
      D.26565 = (int) D.26564;
      __result = D.26563 - D.26565;
      {
        D.26566 = __s2_len != 0;
        D.26567 = __result == 0;
        D.26568 = D.26566 & D.26567;
        if (D.26568 != 0) goto <D.26569>; else goto <D.26570>;
        <D.26569>:
        D.26571 = &MEM[(void *)"System.Reflection" + 1B];
        D.26572 = *D.26571;
        D.26573 = (int) D.26572;
        D.26574 = __s2 + 1;
        D.26575 = *D.26574;
        D.26576 = (int) D.26575;
        __result = D.26573 - D.26576;
        D.26577 = __s2_len > 1;
        D.26567 = __result == 0;
        D.26578 = D.26577 & D.26567;
        if (D.26578 != 0) goto <D.26579>; else goto <D.26580>;
        <D.26579>:
        D.26581 = &MEM[(void *)"System.Reflection" + 2B];
        D.26582 = *D.26581;
        D.26583 = (int) D.26582;
        D.26584 = __s2 + 2;
        D.26585 = *D.26584;
        D.26586 = (int) D.26585;
        __result = D.26583 - D.26586;
        D.26587 = __s2_len > 2;
        D.26567 = __result == 0;
        D.26588 = D.26587 & D.26567;
        if (D.26588 != 0) goto <D.26589>; else goto <D.26590>;
        <D.26589>:
        D.26591 = &MEM[(void *)"System.Reflection" + 3B];
        D.26592 = *D.26591;
        D.26593 = (int) D.26592;
        D.26594 = __s2 + 3;
        D.26595 = *D.26594;
        D.26596 = (int) D.26595;
        __result = D.26593 - D.26596;
        <D.26590>:
        <D.26580>:
        <D.26570>:
      }
      D.21228 = __result;
    }
    iftmp.31 = -D.21228;
    goto <D.26597>;
    <D.26560>:
    D.26553 = m->klass;
    D.26598 = D.26553->name_space;
    iftmp.31 = __builtin_strcmp (D.26598, "System.Reflection");
    <D.26597>:
    D.21229 = iftmp.31;
  }
  if (D.21229 == 0) goto <D.26599>; else goto <D.26600>;
  <D.26599>:
  D.26548 = 0;
  return D.26548;
  <D.26600>:
  <D.26557>:
  D.26601 = *dest;
  if (D.26601 == m) goto <D.26602>; else goto <D.26603>;
  <D.26602>:
  *dest = 0B;
  D.26548 = 0;
  return D.26548;
  <D.26603>:
  D.26601 = *dest;
  if (D.26601 == 0B) goto <D.26604>; else goto <D.26605>;
  <D.26604>:
  *dest = m;
  D.26548 = 1;
  return D.26548;
  <D.26605>:
  D.26548 = 0;
  return D.26548;
}


ves_icall_type_from_handle (struct MonoType * handle)
{
  struct MonoReflectionType * D.26607;
  struct MonoDomain * domain;

  domain = mono_domain_get ();
  D.26607 = mono_type_get_object (domain, handle);
  return D.26607;
}


ves_icall_Type_get_IsGenericTypeDefinition (struct MonoReflectionType * type)
{
  struct MonoVTable * D.26613;
  struct MonoClass * D.26614;
  struct MonoImage * D.26615;
  struct MonoImage * D.26616;
  struct MonoType * D.26618;
  gboolean D.26619;
  unsigned char D.26620;
  unsigned char D.26621;
  struct MonoGenericContainer * D.26624;
  _Bool D.26625;
  struct MonoClass * klass;

  if (type != 0B) goto <D.26611>; else goto <D.26612>;
  <D.26611>:
  D.26613 = MEM[(struct MonoObject *)type].vtable;
  D.26614 = D.26613->klass;
  D.26615 = D.26614->image;
  D.26616 = mono_defaults.corlib;
  if (D.26615 != D.26616) goto <D.26609>; else goto <D.26617>;
  <D.26617>:
  D.26618 = type->type;
  if (D.26618 == 0B) goto <D.26609>; else goto <D.26610>;
  <D.26609>:
  D.26619 = 0;
  return D.26619;
  <D.26610>:
  <D.26612>:
  D.26618 = type->type;
  D.26620 = BIT_FIELD_REF <*D.26618, 8, 88>;
  D.26621 = D.26620 & 64;
  if (D.26621 != 0) goto <D.26622>; else goto <D.26623>;
  <D.26622>:
  D.26619 = 0;
  return D.26619;
  <D.26623>:
  D.26618 = type->type;
  klass = mono_class_from_mono_type (D.26618);
  D.26624 = klass->generic_container;
  D.26625 = D.26624 != 0B;
  D.26619 = (gboolean) D.26625;
  return D.26619;
}


ves_icall_Type_get_IsGenericType (struct MonoReflectionType * type)
{
  struct MonoVTable * D.26631;
  struct MonoClass * D.26632;
  struct MonoImage * D.26633;
  struct MonoImage * D.26634;
  struct MonoType * D.26636;
  gboolean D.26637;
  unsigned char D.26638;
  unsigned char D.26639;
  int iftmp.32;
  struct MonoGenericClass * D.26646;
  struct MonoGenericContainer * D.26648;
  struct MonoClass * klass;

  if (type != 0B) goto <D.26629>; else goto <D.26630>;
  <D.26629>:
  D.26631 = MEM[(struct MonoObject *)type].vtable;
  D.26632 = D.26631->klass;
  D.26633 = D.26632->image;
  D.26634 = mono_defaults.corlib;
  if (D.26633 != D.26634) goto <D.26627>; else goto <D.26635>;
  <D.26635>:
  D.26636 = type->type;
  if (D.26636 == 0B) goto <D.26627>; else goto <D.26628>;
  <D.26627>:
  D.26637 = 0;
  return D.26637;
  <D.26628>:
  <D.26630>:
  D.26636 = type->type;
  D.26638 = BIT_FIELD_REF <*D.26636, 8, 88>;
  D.26639 = D.26638 & 64;
  if (D.26639 != 0) goto <D.26640>; else goto <D.26641>;
  <D.26640>:
  D.26637 = 0;
  return D.26637;
  <D.26641>:
  D.26636 = type->type;
  klass = mono_class_from_mono_type (D.26636);
  D.26646 = klass->generic_class;
  if (D.26646 != 0B) goto <D.26643>; else goto <D.26647>;
  <D.26647>:
  D.26648 = klass->generic_container;
  if (D.26648 != 0B) goto <D.26643>; else goto <D.26644>;
  <D.26643>:
  iftmp.32 = 1;
  goto <D.26645>;
  <D.26644>:
  iftmp.32 = 0;
  <D.26645>:
  D.26637 = iftmp.32;
  return D.26637;
}


ves_icall_Type_get_IsGenericInstance (struct MonoReflectionType * type)
{
  struct MonoType * D.26650;
  unsigned char D.26651;
  unsigned char D.26652;
  gboolean D.26655;
  struct MonoGenericClass * D.26656;
  _Bool D.26657;
  struct MonoClass * klass;

  D.26650 = type->type;
  D.26651 = BIT_FIELD_REF <*D.26650, 8, 88>;
  D.26652 = D.26651 & 64;
  if (D.26652 != 0) goto <D.26653>; else goto <D.26654>;
  <D.26653>:
  D.26655 = 0;
  return D.26655;
  <D.26654>:
  D.26650 = type->type;
  klass = mono_class_from_mono_type (D.26650);
  D.26656 = klass->generic_class;
  D.26657 = D.26656 != 0B;
  D.26655 = (gboolean) D.26657;
  return D.26655;
}


ves_icall_Type_MakePointerType (struct MonoReflectionType * type)
{
  struct MonoType * D.26659;
  struct MonoReflectionType * D.26660;
  struct MonoType * D.26661;
  struct MonoVTable * D.26662;
  struct MonoDomain * D.26663;
  struct MonoClass * klass;
  struct MonoClass * pklass;

  D.26659 = type->type;
  klass = mono_class_from_mono_type (D.26659);
  mono_class_init_or_throw (klass);
  check_for_invalid_type (klass);
  D.26659 = type->type;
  pklass = mono_ptr_class_get (D.26659);
  D.26661 = &pklass->byval_arg;
  D.26662 = MEM[(struct MonoObject *)type].vtable;
  D.26663 = D.26662->domain;
  D.26660 = mono_type_get_object (D.26663, D.26661);
  return D.26660;
}


ves_icall_Type_MakeGenericType (struct MonoReflectionType * type, struct MonoArray * type_array)
{
  int iftmp.33;
  struct MonoVTable * D.26670;
  struct MonoClass * D.26671;
  struct MonoImage * D.26672;
  struct MonoImage * D.26673;
  struct MonoType * D.26675;
  _Bool D.26676;
  long int D.26677;
  long int D.26678;
  struct MonoClass * D.26681;
  long unsigned int D.26682;
  long unsigned int D.26683;
  long unsigned int D.26684;
  long unsigned int D.26685;
  char * D.26686;
  long unsigned int D.26687;
  long unsigned int D.26688;
  struct MonoType * * D.26689;
  struct MonoType * D.26690;
  struct MonoReflectionType * D.26693;
  struct MonoGenericClass * D.26694;
  int D.26697;
  struct MonoException * D.26700;
  struct MonoDomain * D.26701;
  struct MonoClass * class;
  struct MonoType * geninst;
  struct MonoType * * types;
  int i;
  int count;

  if (type != 0B) goto <D.26669>; else goto <D.26666>;
  <D.26669>:
  D.26670 = MEM[(struct MonoObject *)type].vtable;
  D.26671 = D.26670->klass;
  D.26672 = D.26671->image;
  D.26673 = mono_defaults.corlib;
  if (D.26672 != D.26673) goto <D.26667>; else goto <D.26674>;
  <D.26674>:
  D.26675 = type->type;
  if (D.26675 == 0B) goto <D.26667>; else goto <D.26666>;
  <D.26667>:
  iftmp.33 = 1;
  goto <D.26668>;
  <D.26666>:
  iftmp.33 = 0;
  <D.26668>:
  D.26676 = iftmp.33 != 0;
  D.26677 = (long int) D.26676;
  D.26678 = __builtin_expect (D.26677, 0);
  if (D.26678 != 0) goto <D.26679>; else goto <D.26680>;
  <D.26679>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2404, "IS_MONOTYPE (type)");
  <D.26680>:
  D.26675 = type->type;
  D.26681 = mono_class_from_mono_type (D.26675);
  mono_class_init_or_throw (D.26681);
  D.26682 = mono_array_length (type_array);
  count = (int) D.26682;
  D.26683 = (long unsigned int) count;
  D.26684 = D.26683 * 8;
  types = monoeg_malloc0 (D.26684);
  i = 0;
  goto <D.21730>;
  <D.21729>:
  {
    struct MonoReflectionType * t;

    D.26685 = (long unsigned int) i;
    D.26686 = mono_array_addr_with_size (type_array, 8, D.26685);
    t = MEM[(void * *)D.26686];
    D.26687 = (long unsigned int) i;
    D.26688 = D.26687 * 8;
    D.26689 = types + D.26688;
    D.26690 = t->type;
    *D.26689 = D.26690;
  }
  i = i + 1;
  <D.21730>:
  if (i < count) goto <D.21729>; else goto <D.21731>;
  <D.21731>:
  geninst = mono_reflection_bind_generic_parameters (type, count, types);
  monoeg_g_free (types);
  if (geninst == 0B) goto <D.26691>; else goto <D.26692>;
  <D.26691>:
  D.26693 = 0B;
  return D.26693;
  <D.26692>:
  class = mono_class_from_mono_type (geninst);
  D.26694 = class->generic_class;
  if (D.26694 != 0B) goto <D.26695>; else goto <D.26696>;
  <D.26695>:
  D.26697 = mono_verifier_class_is_valid_generic_instantiation (class);
  if (D.26697 == 0) goto <D.26698>; else goto <D.26699>;
  <D.26698>:
  D.26700 = mono_get_exception_argument ("typeArguments", "Invalid generic arguments");
  mono_raise_exception (D.26700);
  <D.26699>:
  <D.26696>:
  D.26670 = MEM[(struct MonoObject *)type].vtable;
  D.26701 = D.26670->domain;
  D.26693 = mono_type_get_object (D.26701, geninst);
  return D.26693;
}


ves_icall_type_IsInstanceOfType (struct MonoReflectionType * type, struct MonoObject * obj)
{
  struct MonoType * D.26703;
  guint32 D.26704;
  struct MonoObject * D.26705;
  _Bool D.26706;
  struct MonoClass * klass;

  D.26703 = type->type;
  klass = mono_class_from_mono_type (D.26703);
  mono_class_init_or_throw (klass);
  D.26705 = mono_object_isinst (obj, klass);
  D.26706 = D.26705 != 0B;
  D.26704 = (guint32) D.26706;
  return D.26704;
}


ves_icall_Type_IsArrayImpl (struct MonoReflectionType * t)
{
  int iftmp.34;
  unsigned char D.26711;
  unsigned char D.26712;
  unsigned char D.26714;
  _Bool D.26715;
  _Bool D.26716;
  _Bool D.26717;
  MonoBoolean D.26719;
  struct MonoType * type;
  MonoBoolean res;

  type = t->type;
  D.26711 = BIT_FIELD_REF <*type, 8, 88>;
  D.26712 = D.26711 & 64;
  if (D.26712 == 0) goto <D.26713>; else goto <D.26709>;
  <D.26713>:
  D.26714 = type->type;
  D.26715 = D.26714 == 20;
  D.26716 = D.26714 == 29;
  D.26717 = D.26715 | D.26716;
  if (D.26717 != 0) goto <D.26718>; else goto <D.26709>;
  <D.26718>:
  iftmp.34 = 1;
  goto <D.26710>;
  <D.26709>:
  iftmp.34 = 0;
  <D.26710>:
  res = (MonoBoolean) iftmp.34;
  D.26719 = res;
  return D.26719;
}


ves_icall_type_GetTypeCodeInternal (struct MonoReflectionType * type)
{
  struct MonoType * D.26721;
  unsigned char D.26722;
  unsigned char D.26723;
  unsigned char D.26724;
  guint32 D.26727;
  unsigned char D.26728;
  unsigned char D.26729;
  struct MonoType * D.26732;
  unsigned char D.26733;
  struct MonoImage * D.26734;
  int D.26735;
  int D.21308;
  int iftmp.35;
  int D.21307;
  const char[7] * D.26741;
  unsigned char D.26742;
  int D.26743;
  unsigned char D.26744;
  int D.26745;
  _Bool D.26746;
  _Bool D.26747;
  _Bool D.26748;
  const unsigned char * D.26751;
  unsigned char D.26752;
  int D.26753;
  const unsigned char * D.26754;
  unsigned char D.26755;
  int D.26756;
  _Bool D.26757;
  _Bool D.26758;
  const unsigned char * D.26761;
  unsigned char D.26762;
  int D.26763;
  const unsigned char * D.26764;
  unsigned char D.26765;
  int D.26766;
  _Bool D.26767;
  _Bool D.26768;
  const unsigned char * D.26771;
  unsigned char D.26772;
  int D.26773;
  const unsigned char * D.26774;
  unsigned char D.26775;
  int D.26776;
  const char * D.26778;
  int D.21317;
  int iftmp.36;
  int D.21316;
  const char[8] * D.26784;
  unsigned char D.26785;
  int D.26786;
  unsigned char D.26787;
  int D.26788;
  _Bool D.26789;
  _Bool D.26790;
  _Bool D.26791;
  const unsigned char * D.26794;
  unsigned char D.26795;
  int D.26796;
  const unsigned char * D.26797;
  unsigned char D.26798;
  int D.26799;
  _Bool D.26800;
  _Bool D.26801;
  const unsigned char * D.26804;
  unsigned char D.26805;
  int D.26806;
  const unsigned char * D.26807;
  unsigned char D.26808;
  int D.26809;
  _Bool D.26810;
  _Bool D.26811;
  const unsigned char * D.26814;
  unsigned char D.26815;
  int D.26816;
  const unsigned char * D.26817;
  unsigned char D.26818;
  int D.26819;
  const char * D.26821;
  int D.21326;
  int iftmp.37;
  int D.21325;
  const char[9] * D.26827;
  unsigned char D.26828;
  int D.26829;
  unsigned char D.26830;
  int D.26831;
  _Bool D.26832;
  _Bool D.26833;
  _Bool D.26834;
  const unsigned char * D.26837;
  unsigned char D.26838;
  int D.26839;
  const unsigned char * D.26840;
  unsigned char D.26841;
  int D.26842;
  _Bool D.26843;
  _Bool D.26844;
  const unsigned char * D.26847;
  unsigned char D.26848;
  int D.26849;
  const unsigned char * D.26850;
  unsigned char D.26851;
  int D.26852;
  _Bool D.26853;
  _Bool D.26854;
  const unsigned char * D.26857;
  unsigned char D.26858;
  int D.26859;
  const unsigned char * D.26860;
  unsigned char D.26861;
  int D.26862;
  struct MonoImage * D.26866;
  struct MonoImage * D.26867;
  int D.21344;
  int iftmp.38;
  int D.21343;
  unsigned char D.26873;
  int D.26874;
  _Bool D.26875;
  _Bool D.26876;
  _Bool D.26877;
  const unsigned char * D.26880;
  unsigned char D.26881;
  int D.26882;
  _Bool D.26883;
  _Bool D.26884;
  const unsigned char * D.26887;
  unsigned char D.26888;
  int D.26889;
  _Bool D.26890;
  _Bool D.26891;
  const unsigned char * D.26894;
  unsigned char D.26895;
  int D.26896;
  const char * D.26898;
  int D.21353;
  int iftmp.39;
  int D.21352;
  const char[7] * D.26904;
  unsigned char D.26905;
  int D.26906;
  unsigned char D.26907;
  int D.26908;
  _Bool D.26909;
  _Bool D.26910;
  _Bool D.26911;
  const unsigned char * D.26914;
  unsigned char D.26915;
  int D.26916;
  const unsigned char * D.26917;
  unsigned char D.26918;
  int D.26919;
  _Bool D.26920;
  _Bool D.26921;
  const unsigned char * D.26924;
  unsigned char D.26925;
  int D.26926;
  const unsigned char * D.26927;
  unsigned char D.26928;
  int D.26929;
  _Bool D.26930;
  _Bool D.26931;
  const unsigned char * D.26934;
  unsigned char D.26935;
  int D.26936;
  const unsigned char * D.26937;
  unsigned char D.26938;
  int D.26939;
  const char * D.26941;
  int t;
  void handle_enum = <<< error >>>;

  D.26721 = type->type;
  D.26722 = D.26721->type;
  t = (int) D.26722;
  D.26721 = type->type;
  D.26723 = BIT_FIELD_REF <*D.26721, 8, 88>;
  D.26724 = D.26723 & 64;
  if (D.26724 != 0) goto <D.26725>; else goto <D.26726>;
  <D.26725>:
  D.26727 = 1;
  return D.26727;
  <D.26726>:
  handle_enum:
  switch (t) <default: <D.21355>, case 1: <D.21282>, case 2: <D.21283>, case 3: <D.21288>, case 4: <D.21285>, case 5: <D.21284>, case 6: <D.21287>, case 7: <D.21286>, case 8: <D.21293>, case 9: <D.21292>, case 10: <D.21295>, case 11: <D.21294>, case 12: <D.21296>, case 13: <D.21297>, case 14: <D.21327>, case 15: <D.21289>, case 17: <D.21298>, case 18: <D.21334>, case 19: <D.21331>, case 20: <D.21329>, case 21: <D.21354>, case 22: <D.21333>, case 24: <D.21291>, case 25: <D.21290>, case 28: <D.21330>, case 29: <D.21328>, case 30: <D.21332>>
  <D.21282>:
  D.26727 = 1;
  return D.26727;
  <D.21283>:
  D.26727 = 3;
  return D.26727;
  <D.21284>:
  D.26727 = 6;
  return D.26727;
  <D.21285>:
  D.26727 = 5;
  return D.26727;
  <D.21286>:
  D.26727 = 8;
  return D.26727;
  <D.21287>:
  D.26727 = 7;
  return D.26727;
  <D.21288>:
  D.26727 = 4;
  return D.26727;
  <D.21289>:
  <D.21290>:
  <D.21291>:
  D.26727 = 1;
  return D.26727;
  <D.21292>:
  D.26727 = 10;
  return D.26727;
  <D.21293>:
  D.26727 = 9;
  return D.26727;
  <D.21294>:
  D.26727 = 12;
  return D.26727;
  <D.21295>:
  D.26727 = 11;
  return D.26727;
  <D.21296>:
  D.26727 = 13;
  return D.26727;
  <D.21297>:
  D.26727 = 14;
  return D.26727;
  <D.21298>:
  {
    struct MonoClass * klass;

    D.26721 = type->type;
    klass = D.26721->data.klass;
    D.26728 = BIT_FIELD_REF <*klass, 8, 256>;
    D.26729 = D.26728 & 16;
    if (D.26729 != 0) goto <D.26730>; else goto <D.26731>;
    <D.26730>:
    D.26732 = mono_class_enum_basetype (klass);
    D.26733 = D.26732->type;
    t = (int) D.26733;
    goto handle_enum;
    <D.26731>:
    D.26734 = klass->image;
    D.26735 = mono_is_corlib_image (D.26734);
    if (D.26735 != 0) goto <D.26736>; else goto <D.26737>;
    <D.26736>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = klass->name_space;
        D.26741 = "System";
        D.26742 = MEM[(const unsigned char *)D.26741];
        D.26743 = (int) D.26742;
        D.26744 = *__s2;
        D.26745 = (int) D.26744;
        __result = D.26743 - D.26745;
        {
          D.26746 = __s2_len != 0;
          D.26747 = __result == 0;
          D.26748 = D.26746 & D.26747;
          if (D.26748 != 0) goto <D.26749>; else goto <D.26750>;
          <D.26749>:
          D.26751 = &MEM[(void *)"System" + 1B];
          D.26752 = *D.26751;
          D.26753 = (int) D.26752;
          D.26754 = __s2 + 1;
          D.26755 = *D.26754;
          D.26756 = (int) D.26755;
          __result = D.26753 - D.26756;
          D.26757 = __s2_len > 1;
          D.26747 = __result == 0;
          D.26758 = D.26757 & D.26747;
          if (D.26758 != 0) goto <D.26759>; else goto <D.26760>;
          <D.26759>:
          D.26761 = &MEM[(void *)"System" + 2B];
          D.26762 = *D.26761;
          D.26763 = (int) D.26762;
          D.26764 = __s2 + 2;
          D.26765 = *D.26764;
          D.26766 = (int) D.26765;
          __result = D.26763 - D.26766;
          D.26767 = __s2_len > 2;
          D.26747 = __result == 0;
          D.26768 = D.26767 & D.26747;
          if (D.26768 != 0) goto <D.26769>; else goto <D.26770>;
          <D.26769>:
          D.26771 = &MEM[(void *)"System" + 3B];
          D.26772 = *D.26771;
          D.26773 = (int) D.26772;
          D.26774 = __s2 + 3;
          D.26775 = *D.26774;
          D.26776 = (int) D.26775;
          __result = D.26773 - D.26776;
          <D.26770>:
          <D.26760>:
          <D.26750>:
        }
        D.21307 = __result;
      }
      iftmp.35 = -D.21307;
      goto <D.26777>;
      <D.26740>:
      D.26778 = klass->name_space;
      iftmp.35 = __builtin_strcmp (D.26778, "System");
      <D.26777>:
      D.21308 = iftmp.35;
    }
    if (D.21308 == 0) goto <D.26779>; else goto <D.26780>;
    <D.26779>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = klass->name;
        D.26784 = "Decimal";
        D.26785 = MEM[(const unsigned char *)D.26784];
        D.26786 = (int) D.26785;
        D.26787 = *__s2;
        D.26788 = (int) D.26787;
        __result = D.26786 - D.26788;
        {
          D.26789 = __s2_len != 0;
          D.26790 = __result == 0;
          D.26791 = D.26789 & D.26790;
          if (D.26791 != 0) goto <D.26792>; else goto <D.26793>;
          <D.26792>:
          D.26794 = &MEM[(void *)"Decimal" + 1B];
          D.26795 = *D.26794;
          D.26796 = (int) D.26795;
          D.26797 = __s2 + 1;
          D.26798 = *D.26797;
          D.26799 = (int) D.26798;
          __result = D.26796 - D.26799;
          D.26800 = __s2_len > 1;
          D.26790 = __result == 0;
          D.26801 = D.26800 & D.26790;
          if (D.26801 != 0) goto <D.26802>; else goto <D.26803>;
          <D.26802>:
          D.26804 = &MEM[(void *)"Decimal" + 2B];
          D.26805 = *D.26804;
          D.26806 = (int) D.26805;
          D.26807 = __s2 + 2;
          D.26808 = *D.26807;
          D.26809 = (int) D.26808;
          __result = D.26806 - D.26809;
          D.26810 = __s2_len > 2;
          D.26790 = __result == 0;
          D.26811 = D.26810 & D.26790;
          if (D.26811 != 0) goto <D.26812>; else goto <D.26813>;
          <D.26812>:
          D.26814 = &MEM[(void *)"Decimal" + 3B];
          D.26815 = *D.26814;
          D.26816 = (int) D.26815;
          D.26817 = __s2 + 3;
          D.26818 = *D.26817;
          D.26819 = (int) D.26818;
          __result = D.26816 - D.26819;
          <D.26813>:
          <D.26803>:
          <D.26793>:
        }
        D.21316 = __result;
      }
      iftmp.36 = -D.21316;
      goto <D.26820>;
      <D.26783>:
      D.26821 = klass->name;
      iftmp.36 = __builtin_strcmp (D.26821, "Decimal");
      <D.26820>:
      D.21317 = iftmp.36;
    }
    if (D.21317 == 0) goto <D.26822>; else goto <D.26823>;
    <D.26822>:
    D.26727 = 15;
    return D.26727;
    <D.26823>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = klass->name;
        D.26827 = "DateTime";
        D.26828 = MEM[(const unsigned char *)D.26827];
        D.26829 = (int) D.26828;
        D.26830 = *__s2;
        D.26831 = (int) D.26830;
        __result = D.26829 - D.26831;
        {
          D.26832 = __s2_len != 0;
          D.26833 = __result == 0;
          D.26834 = D.26832 & D.26833;
          if (D.26834 != 0) goto <D.26835>; else goto <D.26836>;
          <D.26835>:
          D.26837 = &MEM[(void *)"DateTime" + 1B];
          D.26838 = *D.26837;
          D.26839 = (int) D.26838;
          D.26840 = __s2 + 1;
          D.26841 = *D.26840;
          D.26842 = (int) D.26841;
          __result = D.26839 - D.26842;
          D.26843 = __s2_len > 1;
          D.26833 = __result == 0;
          D.26844 = D.26843 & D.26833;
          if (D.26844 != 0) goto <D.26845>; else goto <D.26846>;
          <D.26845>:
          D.26847 = &MEM[(void *)"DateTime" + 2B];
          D.26848 = *D.26847;
          D.26849 = (int) D.26848;
          D.26850 = __s2 + 2;
          D.26851 = *D.26850;
          D.26852 = (int) D.26851;
          __result = D.26849 - D.26852;
          D.26853 = __s2_len > 2;
          D.26833 = __result == 0;
          D.26854 = D.26853 & D.26833;
          if (D.26854 != 0) goto <D.26855>; else goto <D.26856>;
          <D.26855>:
          D.26857 = &MEM[(void *)"DateTime" + 3B];
          D.26858 = *D.26857;
          D.26859 = (int) D.26858;
          D.26860 = __s2 + 3;
          D.26861 = *D.26860;
          D.26862 = (int) D.26861;
          __result = D.26859 - D.26862;
          <D.26856>:
          <D.26846>:
          <D.26836>:
        }
        D.21325 = __result;
      }
      iftmp.37 = -D.21325;
      goto <D.26863>;
      <D.26826>:
      D.26821 = klass->name;
      iftmp.37 = __builtin_strcmp (D.26821, "DateTime");
      <D.26863>:
      D.21326 = iftmp.37;
    }
    if (D.21326 == 0) goto <D.26864>; else goto <D.26865>;
    <D.26864>:
    D.26727 = 16;
    return D.26727;
    <D.26865>:
    <D.26780>:
    <D.26737>:
    D.26727 = 1;
    return D.26727;
  }
  <D.21327>:
  D.26727 = 18;
  return D.26727;
  <D.21328>:
  <D.21329>:
  <D.21330>:
  <D.21331>:
  <D.21332>:
  <D.21333>:
  D.26727 = 1;
  return D.26727;
  <D.21334>:
  {
    struct MonoClass * klass;

    D.26721 = type->type;
    klass = D.26721->data.klass;
    D.26866 = klass->image;
    D.26867 = mono_defaults.corlib;
    if (D.26866 == D.26867) goto <D.26868>; else goto <D.26869>;
    <D.26868>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = klass->name_space;
        D.26741 = "System";
        D.26742 = MEM[(const unsigned char *)D.26741];
        D.26743 = (int) D.26742;
        D.26873 = *__s2;
        D.26874 = (int) D.26873;
        __result = D.26743 - D.26874;
        {
          D.26875 = __s2_len != 0;
          D.26876 = __result == 0;
          D.26877 = D.26875 & D.26876;
          if (D.26877 != 0) goto <D.26878>; else goto <D.26879>;
          <D.26878>:
          D.26751 = &MEM[(void *)"System" + 1B];
          D.26752 = *D.26751;
          D.26753 = (int) D.26752;
          D.26880 = __s2 + 1;
          D.26881 = *D.26880;
          D.26882 = (int) D.26881;
          __result = D.26753 - D.26882;
          D.26883 = __s2_len > 1;
          D.26876 = __result == 0;
          D.26884 = D.26883 & D.26876;
          if (D.26884 != 0) goto <D.26885>; else goto <D.26886>;
          <D.26885>:
          D.26761 = &MEM[(void *)"System" + 2B];
          D.26762 = *D.26761;
          D.26763 = (int) D.26762;
          D.26887 = __s2 + 2;
          D.26888 = *D.26887;
          D.26889 = (int) D.26888;
          __result = D.26763 - D.26889;
          D.26890 = __s2_len > 2;
          D.26876 = __result == 0;
          D.26891 = D.26890 & D.26876;
          if (D.26891 != 0) goto <D.26892>; else goto <D.26893>;
          <D.26892>:
          D.26771 = &MEM[(void *)"System" + 3B];
          D.26772 = *D.26771;
          D.26773 = (int) D.26772;
          D.26894 = __s2 + 3;
          D.26895 = *D.26894;
          D.26896 = (int) D.26895;
          __result = D.26773 - D.26896;
          <D.26893>:
          <D.26886>:
          <D.26879>:
        }
        D.21343 = __result;
      }
      iftmp.38 = -D.21343;
      goto <D.26897>;
      <D.26872>:
      D.26898 = klass->name_space;
      iftmp.38 = __builtin_strcmp (D.26898, "System");
      <D.26897>:
      D.21344 = iftmp.38;
    }
    if (D.21344 == 0) goto <D.26899>; else goto <D.26900>;
    <D.26899>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = klass->name;
        D.26904 = "DBNull";
        D.26905 = MEM[(const unsigned char *)D.26904];
        D.26906 = (int) D.26905;
        D.26907 = *__s2;
        D.26908 = (int) D.26907;
        __result = D.26906 - D.26908;
        {
          D.26909 = __s2_len != 0;
          D.26910 = __result == 0;
          D.26911 = D.26909 & D.26910;
          if (D.26911 != 0) goto <D.26912>; else goto <D.26913>;
          <D.26912>:
          D.26914 = &MEM[(void *)"DBNull" + 1B];
          D.26915 = *D.26914;
          D.26916 = (int) D.26915;
          D.26917 = __s2 + 1;
          D.26918 = *D.26917;
          D.26919 = (int) D.26918;
          __result = D.26916 - D.26919;
          D.26920 = __s2_len > 1;
          D.26910 = __result == 0;
          D.26921 = D.26920 & D.26910;
          if (D.26921 != 0) goto <D.26922>; else goto <D.26923>;
          <D.26922>:
          D.26924 = &MEM[(void *)"DBNull" + 2B];
          D.26925 = *D.26924;
          D.26926 = (int) D.26925;
          D.26927 = __s2 + 2;
          D.26928 = *D.26927;
          D.26929 = (int) D.26928;
          __result = D.26926 - D.26929;
          D.26930 = __s2_len > 2;
          D.26910 = __result == 0;
          D.26931 = D.26930 & D.26910;
          if (D.26931 != 0) goto <D.26932>; else goto <D.26933>;
          <D.26932>:
          D.26934 = &MEM[(void *)"DBNull" + 3B];
          D.26935 = *D.26934;
          D.26936 = (int) D.26935;
          D.26937 = __s2 + 3;
          D.26938 = *D.26937;
          D.26939 = (int) D.26938;
          __result = D.26936 - D.26939;
          <D.26933>:
          <D.26923>:
          <D.26913>:
        }
        D.21352 = __result;
      }
      iftmp.39 = -D.21352;
      goto <D.26940>;
      <D.26903>:
      D.26941 = klass->name;
      iftmp.39 = __builtin_strcmp (D.26941, "DBNull");
      <D.26940>:
      D.21353 = iftmp.39;
    }
    if (D.21353 == 0) goto <D.26942>; else goto <D.26943>;
    <D.26942>:
    D.26727 = 2;
    return D.26727;
    <D.26943>:
    <D.26900>:
    <D.26869>:
  }
  D.26727 = 1;
  return D.26727;
  <D.21354>:
  D.26727 = 1;
  return D.26727;
  <D.21355>:
  monoeg_g_log (0B, 4, "type 0x%02x not handled in GetTypeCode()", t);
  <D.21356>:
  goto <D.21356>;
  D.26727 = 0;
  return D.26727;
}


ves_icall_Type_GetPacking (struct MonoReflectionType * type, guint32 * packing, guint32 * size)
{
  struct MonoType * D.26945;
  struct MonoImage * D.26946;
  unsigned char D.26947;
  unsigned char D.26948;
  int D.26951;
  unsigned int D.26952;
  int D.26953;
  unsigned int D.26954;
  unsigned int D.26956;
  struct MonoClass * klass;

  D.26945 = type->type;
  klass = mono_class_from_mono_type (D.26945);
  mono_class_init_or_throw (klass);
  D.26946 = klass->image;
  D.26947 = BIT_FIELD_REF <*D.26946, 8, 224>;
  D.26948 = D.26947 & 8;
  if (D.26948 != 0) goto <D.26949>; else goto <D.26950>;
  <D.26949>:
  {
    struct MonoReflectionTypeBuilder * tb;

    tb = type;
    D.26951 = tb->packing_size;
    D.26952 = (unsigned int) D.26951;
    *packing = D.26952;
    D.26953 = tb->class_size;
    D.26954 = (unsigned int) D.26953;
    *size = D.26954;
  }
  goto <D.26955>;
  <D.26950>:
  D.26956 = klass->type_token;
  D.26946 = klass->image;
  mono_metadata_packing_from_typedef (D.26946, D.26956, packing, size);
  <D.26955>:
}


ves_icall_Type_GetInterfaceMapData (struct MonoReflectionType * type, struct MonoReflectionType * iface, struct MonoArray * * targets, struct MonoArray * * methods)
{
  struct MonoType * D.26957;
  struct MonoType * D.26958;
  struct MonoVTable * D.26961;
  long unsigned int D.26962;
  struct MonoClass * D.26963;
  struct MonoArray * D.26964;
  struct MonoArray * D.26965;
  long unsigned int D.26966;
  struct MonoArray * D.26967;
  struct MonoMethod * * D.26968;
  int D.26969;
  long unsigned int D.26970;
  long unsigned int D.26971;
  struct MonoMethod * * D.26972;
  struct MonoMethod * D.26973;
  struct MonoArray * D.26974;
  gboolean variance_used;
  struct MonoClass * class;
  struct MonoClass * iclass;
  struct MonoReflectionMethod * member;
  struct MonoMethod * method;
  void * iter;
  int i;
  int len;
  int ioffset;
  struct MonoDomain * domain;

  try
    {
      D.26957 = type->type;
      class = mono_class_from_mono_type (D.26957);
      D.26958 = iface->type;
      iclass = mono_class_from_mono_type (D.26958);
      i = 0;
      mono_class_init_or_throw (class);
      mono_class_init_or_throw (iclass);
      mono_class_setup_vtable (class);
      ioffset = mono_class_interface_offset_with_variance (class, iclass, &variance_used);
      if (ioffset == -1) goto <D.26959>; else goto <D.26960>;
      <D.26959>:
      return;
      <D.26960>:
      len = mono_class_num_methods (iclass);
      D.26961 = MEM[(struct MonoObject *)type].vtable;
      domain = D.26961->domain;
      D.26962 = (long unsigned int) len;
      D.26963 = mono_defaults.method_info_class;
      D.26964 = mono_array_new (domain, D.26963, D.26962);
      mono_gc_wbarrier_generic_store (targets, D.26964);
      D.26962 = (long unsigned int) len;
      D.26963 = mono_defaults.method_info_class;
      D.26965 = mono_array_new (domain, D.26963, D.26962);
      mono_gc_wbarrier_generic_store (methods, D.26965);
      iter = 0B;
      goto <D.21625>;
      <D.21624>:
      member = mono_method_get_object (domain, method, iclass);
      {
        void * * __p;

        D.26966 = (long unsigned int) i;
        D.26967 = *methods;
        __p = mono_array_addr_with_size (D.26967, 8, D.26966);
        D.26967 = *methods;
        mono_gc_wbarrier_set_arrayref (D.26967, __p, member);
      }
      D.26968 = class->vtable;
      D.26969 = i + ioffset;
      D.26970 = (long unsigned int) D.26969;
      D.26971 = D.26970 * 8;
      D.26972 = D.26968 + D.26971;
      D.26973 = *D.26972;
      member = mono_method_get_object (domain, D.26973, class);
      {
        void * * __p;

        D.26966 = (long unsigned int) i;
        D.26974 = *targets;
        __p = mono_array_addr_with_size (D.26974, 8, D.26966);
        D.26974 = *targets;
        mono_gc_wbarrier_set_arrayref (D.26974, __p, member);
      }
      i = i + 1;
      <D.21625>:
      method = mono_class_get_methods (iclass, &iter);
      if (method != 0B) goto <D.21624>; else goto <D.21626>;
      <D.21626>:
    }
  finally
    {
      variance_used = {CLOBBER};
      iter = {CLOBBER};
    }
}


ves_icall_Type_GetGenericTypeDefinition_impl (struct MonoReflectionType * type)
{
  struct MonoType * D.26978;
  unsigned char D.26979;
  unsigned char D.26980;
  struct MonoReflectionType * D.26983;
  struct MonoGenericContainer * D.26984;
  struct MonoGenericClass * D.26987;
  unsigned char D.26991;
  unsigned char D.26992;
  struct MonoType * D.26995;
  struct MonoVTable * D.26996;
  struct MonoDomain * D.26997;
  struct MonoClass * klass;

  D.26978 = type->type;
  D.26979 = BIT_FIELD_REF <*D.26978, 8, 88>;
  D.26980 = D.26979 & 64;
  if (D.26980 != 0) goto <D.26981>; else goto <D.26982>;
  <D.26981>:
  D.26983 = 0B;
  return D.26983;
  <D.26982>:
  D.26978 = type->type;
  klass = mono_class_from_mono_type (D.26978);
  D.26984 = klass->generic_container;
  if (D.26984 != 0B) goto <D.26985>; else goto <D.26986>;
  <D.26985>:
  D.26983 = type;
  return D.26983;
  <D.26986>:
  D.26987 = klass->generic_class;
  if (D.26987 != 0B) goto <D.26988>; else goto <D.26989>;
  <D.26988>:
  {
    struct MonoClass * generic_class;
    void * tb;

    D.26987 = klass->generic_class;
    generic_class = D.26987->container_class;
    tb = mono_class_get_ref_info (generic_class);
    D.26991 = BIT_FIELD_REF <*generic_class, 8, 256>;
    D.26992 = D.26991 & 128;
    if (D.26992 != 0) goto <D.26993>; else goto <D.26990>;
    <D.26993>:
    if (tb != 0B) goto <D.26994>; else goto <D.26990>;
    <D.26994>:
    D.26983 = tb;
    return D.26983;
    <D.26990>:
    D.26995 = &generic_class->byval_arg;
    D.26996 = MEM[(struct MonoObject *)type].vtable;
    D.26997 = D.26996->domain;
    D.26983 = mono_type_get_object (D.26997, D.26995);
    return D.26983;
  }
  <D.26989>:
  D.26983 = 0B;
  return D.26983;
}


ves_icall_Type_GetGenericParameterPosition (struct MonoReflectionType * type)
{
  struct MonoVTable * D.27003;
  struct MonoClass * D.27004;
  struct MonoImage * D.27005;
  struct MonoImage * D.27006;
  struct MonoType * D.27008;
  gint32 D.27009;
  unsigned char D.27010;
  struct MonoGenericParam * D.27013;
  short unsigned int D.27014;

  if (type != 0B) goto <D.27001>; else goto <D.27002>;
  <D.27001>:
  D.27003 = MEM[(struct MonoObject *)type].vtable;
  D.27004 = D.27003->klass;
  D.27005 = D.27004->image;
  D.27006 = mono_defaults.corlib;
  if (D.27005 != D.27006) goto <D.26999>; else goto <D.27007>;
  <D.27007>:
  D.27008 = type->type;
  if (D.27008 == 0B) goto <D.26999>; else goto <D.27000>;
  <D.26999>:
  D.27009 = -1;
  return D.27009;
  <D.27000>:
  <D.27002>:
  D.27008 = type->type;
  D.27010 = is_generic_parameter (D.27008);
  if (D.27010 != 0) goto <D.27011>; else goto <D.27012>;
  <D.27011>:
  D.27008 = type->type;
  D.27013 = D.27008->data.generic_param;
  D.27014 = D.27013->num;
  D.27009 = (gint32) D.27014;
  return D.27009;
  <D.27012>:
  D.27009 = -1;
  return D.27009;
}


ves_icall_Type_GetGenericParameterConstraints (struct MonoReflectionType * type)
{
  int iftmp.40;
  struct MonoVTable * D.27021;
  struct MonoClass * D.27022;
  struct MonoImage * D.27023;
  struct MonoImage * D.27024;
  struct MonoType * D.27026;
  _Bool D.27027;
  long int D.27028;
  long int D.27029;
  struct MonoGenericParamInfo * iftmp.41;
  struct MonoGenericParam * D.27033;
  struct MonoGenericContainer * D.27034;
  struct MonoClass * D.27039;
  long unsigned int D.27040;
  struct MonoClass * D.27041;
  long unsigned int D.27042;
  struct MonoClass * * D.27043;
  long unsigned int D.27044;
  long unsigned int D.27045;
  struct MonoClass * * D.27046;
  struct MonoClass * D.27047;
  struct MonoType * D.27048;
  struct MonoReflectionType * D.27049;
  struct MonoArray * D.27050;
  struct MonoGenericParamInfo * param_info;
  struct MonoDomain * domain;
  struct MonoClass * * ptr;
  struct MonoArray * res;
  int i;
  int count;

  if (type != 0B) goto <D.27020>; else goto <D.27017>;
  <D.27020>:
  D.27021 = MEM[(struct MonoObject *)type].vtable;
  D.27022 = D.27021->klass;
  D.27023 = D.27022->image;
  D.27024 = mono_defaults.corlib;
  if (D.27023 != D.27024) goto <D.27018>; else goto <D.27025>;
  <D.27025>:
  D.27026 = type->type;
  if (D.27026 == 0B) goto <D.27018>; else goto <D.27017>;
  <D.27018>:
  iftmp.40 = 1;
  goto <D.27019>;
  <D.27017>:
  iftmp.40 = 0;
  <D.27019>:
  D.27027 = iftmp.40 != 0;
  D.27028 = (long int) D.27027;
  D.27029 = __builtin_expect (D.27028, 0);
  if (D.27029 != 0) goto <D.27030>; else goto <D.27031>;
  <D.27030>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2493, "IS_MONOTYPE (type)");
  <D.27031>:
  D.27021 = MEM[(struct MonoObject *)type].vtable;
  domain = D.27021->domain;
  D.27026 = type->type;
  D.27033 = D.27026->data.generic_param;
  D.27034 = D.27033->owner;
  if (D.27034 != 0B) goto <D.27035>; else goto <D.27036>;
  <D.27035>:
  D.27026 = type->type;
  D.27033 = D.27026->data.generic_param;
  iftmp.41 = &MEM[(struct MonoGenericParamFull *)D.27033].info;
  goto <D.27037>;
  <D.27036>:
  iftmp.41 = 0B;
  <D.27037>:
  param_info = iftmp.41;
  count = 0;
  ptr = param_info->constraints;
  goto <D.21756>;
  <D.21755>:
  ptr = ptr + 8;
  count = count + 1;
  <D.21756>:
  if (ptr != 0B) goto <D.27038>; else goto <D.21757>;
  <D.27038>:
  D.27039 = *ptr;
  if (D.27039 != 0B) goto <D.21755>; else goto <D.21757>;
  <D.21757>:
  D.27040 = (long unsigned int) count;
  D.27041 = mono_defaults.monotype_class;
  res = mono_array_new (domain, D.27041, D.27040);
  i = 0;
  goto <D.21760>;
  <D.21759>:
  {
    void * * __p;

    D.27042 = (long unsigned int) i;
    __p = mono_array_addr_with_size (res, 8, D.27042);
    D.27043 = param_info->constraints;
    D.27044 = (long unsigned int) i;
    D.27045 = D.27044 * 8;
    D.27046 = D.27043 + D.27045;
    D.27047 = *D.27046;
    D.27048 = &D.27047->byval_arg;
    D.27049 = mono_type_get_object (domain, D.27048);
    mono_gc_wbarrier_set_arrayref (res, __p, D.27049);
  }
  i = i + 1;
  <D.21760>:
  if (i < count) goto <D.21759>; else goto <D.21761>;
  <D.21761>:
  D.27050 = res;
  return D.27050;
}


ves_icall_Type_GetGenericParameterAttributes (struct MonoReflectionType * type)
{
  int iftmp.42;
  struct MonoVTable * D.27057;
  struct MonoClass * D.27058;
  struct MonoImage * D.27059;
  struct MonoImage * D.27060;
  struct MonoType * D.27062;
  _Bool D.27063;
  long int D.27064;
  long int D.27065;
  unsigned char D.27068;
  _Bool D.27069;
  long int D.27070;
  long int D.27071;
  GenericParameterAttributes D.27074;
  struct MonoGenericParamInfo * iftmp.43;
  struct MonoGenericParam * D.27076;
  struct MonoGenericContainer * D.27077;
  short unsigned int D.27081;

  if (type != 0B) goto <D.27056>; else goto <D.27053>;
  <D.27056>:
  D.27057 = MEM[(struct MonoObject *)type].vtable;
  D.27058 = D.27057->klass;
  D.27059 = D.27058->image;
  D.27060 = mono_defaults.corlib;
  if (D.27059 != D.27060) goto <D.27054>; else goto <D.27061>;
  <D.27061>:
  D.27062 = type->type;
  if (D.27062 == 0B) goto <D.27054>; else goto <D.27053>;
  <D.27054>:
  iftmp.42 = 1;
  goto <D.27055>;
  <D.27053>:
  iftmp.42 = 0;
  <D.27055>:
  D.27063 = iftmp.42 != 0;
  D.27064 = (long int) D.27063;
  D.27065 = __builtin_expect (D.27064, 0);
  if (D.27065 != 0) goto <D.27066>; else goto <D.27067>;
  <D.27066>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2477, "IS_MONOTYPE (type)");
  <D.27067>:
  D.27062 = type->type;
  D.27068 = is_generic_parameter (D.27062);
  D.27069 = D.27068 == 0;
  D.27070 = (long int) D.27069;
  D.27071 = __builtin_expect (D.27070, 0);
  if (D.27071 != 0) goto <D.27072>; else goto <D.27073>;
  <D.27072>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2478, "is_generic_parameter (type->type)");
  <D.27073>:
  D.27062 = type->type;
  D.27076 = D.27062->data.generic_param;
  D.27077 = D.27076->owner;
  if (D.27077 != 0B) goto <D.27078>; else goto <D.27079>;
  <D.27078>:
  D.27062 = type->type;
  D.27076 = D.27062->data.generic_param;
  iftmp.43 = &MEM[(struct MonoGenericParamFull *)D.27076].info;
  goto <D.27080>;
  <D.27079>:
  iftmp.43 = 0B;
  <D.27080>:
  D.27081 = iftmp.43->flags;
  D.27074 = (GenericParameterAttributes) D.27081;
  return D.27074;
}


ves_icall_System_Type_EqualsInternal (struct MonoReflectionType * type, struct MonoReflectionType * c)
{
  struct MonoType * D.27085;
  struct MonoType * D.27087;
  MonoBoolean D.27089;
  int D.27090;
  _Bool D.27091;

  if (c != 0B) goto <D.27084>; else goto <D.27083>;
  <D.27084>:
  D.27085 = type->type;
  if (D.27085 != 0B) goto <D.27086>; else goto <D.27083>;
  <D.27086>:
  D.27087 = c->type;
  if (D.27087 != 0B) goto <D.27088>; else goto <D.27083>;
  <D.27088>:
  D.27087 = c->type;
  D.27085 = type->type;
  D.27090 = mono_metadata_type_equal (D.27085, D.27087);
  D.27089 = (MonoBoolean) D.27090;
  return D.27089;
  <D.27083>:
  D.27091 = type == c;
  D.27089 = (MonoBoolean) D.27091;
  return D.27089;
}


ves_icall_System_Text_Encoding_InternalCodePage (gint32 * int_code_page)
{
  const char * cset.44;
  char D.27094;
  const short unsigned int * * D.27097;
  const short unsigned int * D.27098;
  long unsigned int D.27099;
  long unsigned int D.27100;
  const short unsigned int * D.27101;
  short unsigned int D.27102;
  int D.27103;
  int D.27104;
  int D.23307;
  int D.27109;
  int D.27110;
  const int iftmp.45;
  unsigned int __c.46;
  unsigned int D.27115;
  const __int32_t * * D.27118;
  const __int32_t * D.27119;
  long unsigned int D.27120;
  long unsigned int D.27121;
  const __int32_t * D.27122;
  long unsigned int D.27126;
  const __int32_t * D.27127;
  char D.27128;
  long int p.47;
  int D.23320;
  char * D.27136;
  int D.27139;
  int D.27140;
  struct MonoString * D.27144;
  struct MonoDomain * D.27145;
  const char * cset;
  const char * p;
  char * c;
  char * codepage;
  int code;
  int want_name;
  int i;

  try
    {
      codepage = 0B;
      want_name = *int_code_page;
      *int_code_page = -1;
      monoeg_g_get_charset (&cset);
      cset.44 = cset;
      codepage = __strdup (cset.44);
      c = codepage;
      c = codepage;
      goto <D.23309>;
      <D.23308>:
      D.27094 = *c;
      if (D.27094 >= 0) goto <D.27095>; else goto <D.27096>;
      <D.27095>:
      D.27097 = __ctype_b_loc ();
      D.27098 = *D.27097;
      D.27094 = *c;
      D.27099 = (long unsigned int) D.27094;
      D.27100 = D.27099 * 2;
      D.27101 = D.27098 + D.27100;
      D.27102 = *D.27101;
      D.27103 = (int) D.27102;
      D.27104 = D.27103 & 1024;
      if (D.27104 != 0) goto <D.27105>; else goto <D.27106>;
      <D.27105>:
      {
        int __res;

        {
          if (0 != 0) goto <D.27107>; else goto <D.27108>;
          <D.27107>:
          D.27094 = *c;
          D.27109 = (int) D.27094;
          D.27110 = __builtin_constant_p (D.27109);
          if (D.27110 != 0) goto <D.27111>; else goto <D.27112>;
          <D.27111>:
          {
            int __c;

            D.27094 = *c;
            __c = (int) D.27094;
            __c.46 = (unsigned int) __c;
            D.27115 = __c.46 + 128;
            if (D.27115 <= 383) goto <D.27116>; else goto <D.27117>;
            <D.27116>:
            D.27118 = __ctype_tolower_loc ();
            D.27119 = *D.27118;
            D.27120 = (long unsigned int) __c;
            D.27121 = D.27120 * 4;
            D.27122 = D.27119 + D.27121;
            iftmp.45 = *D.27122;
            goto <D.27123>;
            <D.27117>:
            iftmp.45 = __c;
            <D.27123>:
            __res = iftmp.45;
          }
          goto <D.27124>;
          <D.27112>:
          D.27094 = *c;
          D.27109 = (int) D.27094;
          __res = tolower (D.27109);
          <D.27124>:
          goto <D.27125>;
          <D.27108>:
          D.27118 = __ctype_tolower_loc ();
          D.27119 = *D.27118;
          D.27094 = *c;
          D.27099 = (long unsigned int) D.27094;
          D.27126 = D.27099 * 4;
          D.27127 = D.27119 + D.27126;
          __res = *D.27127;
          <D.27125>:
        }
        D.23307 = __res;
      }
      D.27128 = (char) D.23307;
      *c = D.27128;
      <D.27106>:
      <D.27096>:
      D.27094 = *c;
      if (D.27094 == 45) goto <D.27129>; else goto <D.27130>;
      <D.27129>:
      *c = 95;
      <D.27130>:
      c = c + 1;
      <D.23309>:
      D.27094 = *c;
      if (D.27094 != 0) goto <D.23308>; else goto <D.23310>;
      <D.23310>:
      p = encodings[0];
      code = 0;
      i = 0;
      goto <D.23311>;
      <D.23322>:
      p.47 = (long int) p;
      if (p.47 <= 6) goto <D.27132>; else goto <D.27133>;
      <D.27132>:
      p.47 = (long int) p;
      code = (int) p.47;
      i = i + 1;
      p = encodings[i];
      // predicted unlikely by continue predictor.
      goto <D.23311>;
      <D.27133>:
      {
        size_t __s1_len;
        size_t __s2_len;

        D.23320 = __builtin_strcmp (p, codepage);
      }
      if (D.23320 == 0) goto <D.27134>; else goto <D.27135>;
      <D.27134>:
      *int_code_page = code;
      goto <D.23321>;
      <D.27135>:
      i = i + 1;
      p = encodings[i];
      <D.23311>:
      if (p != 0B) goto <D.23322>; else goto <D.23321>;
      <D.23321>:
      D.27136 = strstr (codepage, "utf_8");
      if (D.27136 != 0B) goto <D.27137>; else goto <D.27138>;
      <D.27137>:
      D.27139 = *int_code_page;
      D.27140 = D.27139 | 268435456;
      *int_code_page = D.27140;
      <D.27138>:
      free (codepage);
      if (want_name != 0) goto <D.27142>; else goto <D.27141>;
      <D.27142>:
      D.27139 = *int_code_page;
      if (D.27139 == -1) goto <D.27143>; else goto <D.27141>;
      <D.27143>:
      cset.44 = cset;
      D.27145 = mono_domain_get ();
      D.27144 = mono_string_new (D.27145, cset.44);
      return D.27144;
      <D.27141>:
      D.27144 = 0B;
      return D.27144;
    }
  finally
    {
      cset = {CLOBBER};
    }
}


ves_icall_RuntimeMethod_GetFunctionPointer (struct MonoMethod * method)
{
  void * D.27148;

  D.27148 = mono_compile_method (method);
  return D.27148;
}


ves_icall_IsTransparentProxy (struct MonoObject * proxy)
{
  MonoBoolean D.27152;
  struct MonoVTable * D.27153;
  struct MonoClass * D.27154;
  struct MonoClass * D.27155;

  if (proxy == 0B) goto <D.27150>; else goto <D.27151>;
  <D.27150>:
  D.27152 = 0;
  return D.27152;
  <D.27151>:
  D.27153 = proxy->vtable;
  D.27154 = D.27153->klass;
  D.27155 = mono_defaults.transparent_proxy_class;
  if (D.27154 == D.27155) goto <D.27156>; else goto <D.27157>;
  <D.27156>:
  D.27152 = 1;
  return D.27152;
  <D.27157>:
  D.27152 = 0;
  return D.27152;
}


ves_icall_InternalExecute (struct MonoReflectionMethod * method, struct MonoObject * this, struct MonoArray * params, struct MonoArray * * outArgs)
{
  struct MonoVTable * D.27159;
  struct MonoClass * D.27160;
  struct MonoClass * D.27161;
  int D.21907;
  int iftmp.48;
  int D.21906;
  const char[12] * D.27167;
  unsigned char D.27168;
  int D.27169;
  unsigned char D.27170;
  int D.27171;
  _Bool D.27172;
  _Bool D.27173;
  _Bool D.27174;
  const unsigned char * D.27177;
  unsigned char D.27178;
  int D.27179;
  const unsigned char * D.27180;
  unsigned char D.27181;
  int D.27182;
  _Bool D.27183;
  _Bool D.27184;
  const unsigned char * D.27187;
  unsigned char D.27188;
  int D.27189;
  const unsigned char * D.27190;
  unsigned char D.27191;
  int D.27192;
  _Bool D.27193;
  _Bool D.27194;
  const unsigned char * D.27197;
  unsigned char D.27198;
  int D.27199;
  const unsigned char * D.27200;
  unsigned char D.27201;
  int D.27202;
  const char * D.27204;
  struct MonoVTable * D.27207;
  struct MonoClass * D.27208;
  struct MonoRealProxy * D.27211;
  _Bool D.27212;
  long int D.27213;
  long int D.27214;
  char * D.27217;
  struct MonoType * D.27220;
  unsigned char D.27221;
  unsigned char D.27222;
  int D.27225;
  sizetype D.27226;
  void * D.27227;
  void * * D.27229;
  struct MonoObject * D.27230;
  int D.21925;
  int iftmp.49;
  int D.21924;
  const char[12] * D.27234;
  unsigned char D.27235;
  int D.27236;
  unsigned char D.27237;
  int D.27238;
  _Bool D.27239;
  _Bool D.27240;
  _Bool D.27241;
  const unsigned char * D.27244;
  unsigned char D.27245;
  int D.27246;
  const unsigned char * D.27247;
  unsigned char D.27248;
  int D.27249;
  _Bool D.27250;
  _Bool D.27251;
  const unsigned char * D.27254;
  unsigned char D.27255;
  int D.27256;
  const unsigned char * D.27257;
  unsigned char D.27258;
  int D.27259;
  _Bool D.27260;
  _Bool D.27261;
  const unsigned char * D.27264;
  unsigned char D.27265;
  int D.27266;
  const unsigned char * D.27267;
  unsigned char D.27268;
  int D.27269;
  struct MonoRealProxy * D.27275;
  char * D.27278;
  struct MonoType * D.27281;
  char * D.27282;
  unsigned char D.27283;
  unsigned char D.27284;
  int D.27287;
  int D.27288;
  unsigned int D.27289;
  _Bool D.27290;
  long int D.27291;
  long int D.27292;
  void * D.27295;
  int D.27296;
  sizetype D.27297;
  void * D.27298;
  struct MonoType * D.27300;
  unsigned char D.27301;
  unsigned char D.27302;
  long unsigned int D.27305;
  long unsigned int D.27306;
  long unsigned int D.27307;
  int D.21948;
  int iftmp.50;
  int D.21947;
  struct MonoMethod * D.27311;
  const char[6] * D.27312;
  unsigned char D.27313;
  int D.27314;
  unsigned char D.27315;
  int D.27316;
  _Bool D.27317;
  _Bool D.27318;
  _Bool D.27319;
  const unsigned char * D.27322;
  unsigned char D.27323;
  int D.27324;
  const unsigned char * D.27325;
  unsigned char D.27326;
  int D.27327;
  _Bool D.27328;
  _Bool D.27329;
  const unsigned char * D.27332;
  unsigned char D.27333;
  int D.27334;
  const unsigned char * D.27335;
  unsigned char D.27336;
  int D.27337;
  _Bool D.27338;
  _Bool D.27339;
  const unsigned char * D.27342;
  unsigned char D.27343;
  int D.27344;
  const unsigned char * D.27345;
  unsigned char D.27346;
  int D.27347;
  const char * D.27349;
  struct MonoClass * D.27354;
  unsigned char D.27355;
  unsigned char D.27356;
  _Bool D.27357;
  long int D.27358;
  long int D.27359;
  char * D.27364;
  long unsigned int D.27365;
  long unsigned int D.27366;
  struct MonoDomain * domain;
  struct MonoMethod * m;
  struct MonoMethodSignature * sig;
  struct MonoArray * out_args;
  struct MonoObject * result;
  int i;
  int j;
  int outarg_count;

  D.27159 = MEM[(struct MonoObject *)method].vtable;
  domain = D.27159->domain;
  m = method->method;
  sig = mono_method_signature (m);
  outarg_count = 0;
  D.27160 = m->klass;
  D.27161 = mono_defaults.object_class;
  if (D.27160 == D.27161) goto <D.27162>; else goto <D.27163>;
  <D.27162>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = m->name;
      D.27167 = "FieldGetter";
      D.27168 = MEM[(const unsigned char *)D.27167];
      D.27169 = (int) D.27168;
      D.27170 = *__s2;
      D.27171 = (int) D.27170;
      __result = D.27169 - D.27171;
      {
        D.27172 = __s2_len != 0;
        D.27173 = __result == 0;
        D.27174 = D.27172 & D.27173;
        if (D.27174 != 0) goto <D.27175>; else goto <D.27176>;
        <D.27175>:
        D.27177 = &MEM[(void *)"FieldGetter" + 1B];
        D.27178 = *D.27177;
        D.27179 = (int) D.27178;
        D.27180 = __s2 + 1;
        D.27181 = *D.27180;
        D.27182 = (int) D.27181;
        __result = D.27179 - D.27182;
        D.27183 = __s2_len > 1;
        D.27173 = __result == 0;
        D.27184 = D.27183 & D.27173;
        if (D.27184 != 0) goto <D.27185>; else goto <D.27186>;
        <D.27185>:
        D.27187 = &MEM[(void *)"FieldGetter" + 2B];
        D.27188 = *D.27187;
        D.27189 = (int) D.27188;
        D.27190 = __s2 + 2;
        D.27191 = *D.27190;
        D.27192 = (int) D.27191;
        __result = D.27189 - D.27192;
        D.27193 = __s2_len > 2;
        D.27173 = __result == 0;
        D.27194 = D.27193 & D.27173;
        if (D.27194 != 0) goto <D.27195>; else goto <D.27196>;
        <D.27195>:
        D.27197 = &MEM[(void *)"FieldGetter" + 3B];
        D.27198 = *D.27197;
        D.27199 = (int) D.27198;
        D.27200 = __s2 + 3;
        D.27201 = *D.27200;
        D.27202 = (int) D.27201;
        __result = D.27199 - D.27202;
        <D.27196>:
        <D.27186>:
        <D.27176>:
      }
      D.21906 = __result;
    }
    iftmp.48 = -D.21906;
    goto <D.27203>;
    <D.27166>:
    D.27204 = m->name;
    iftmp.48 = __builtin_strcmp (D.27204, "FieldGetter");
    <D.27203>:
    D.21907 = iftmp.48;
  }
  if (D.21907 == 0) goto <D.27205>; else goto <D.27206>;
  <D.27205>:
  {
    struct MonoClass * k;
    struct MonoString * name;
    char * str;

    D.27207 = this->vtable;
    k = D.27207->klass;
    D.27208 = mono_defaults.transparent_proxy_class;
    if (D.27208 == k) goto <D.27209>; else goto <D.27210>;
    <D.27209>:
    {
      struct MonoTransparentProxy * tp;

      tp = this;
      D.27211 = tp->rp;
      this = D.27211->unwrapped_server;
      D.27212 = this == 0B;
      D.27213 = (long int) D.27212;
      D.27214 = __builtin_expect (D.27213, 0);
      if (D.27214 != 0) goto <D.27215>; else goto <D.27216>;
      <D.27215>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2870, "this");
      <D.27216>:
      D.27207 = this->vtable;
      k = D.27207->klass;
    }
    <D.27210>:
    D.27217 = mono_array_addr_with_size (params, 8, 1);
    name = MEM[(struct MonoString * *)D.27217];
    str = mono_string_to_utf8 (name);
    <D.21915>:
    {
      struct MonoClassField * field;

      field = mono_class_get_field_from_name (k, str);
      if (field != 0B) goto <D.27218>; else goto <D.27219>;
      <D.27218>:
      {
        struct MonoClass * field_klass;

        D.27220 = field->type;
        field_klass = mono_class_from_mono_type (D.27220);
        D.27221 = BIT_FIELD_REF <*field_klass, 8, 256>;
        D.27222 = D.27221 & 8;
        if (D.27222 != 0) goto <D.27223>; else goto <D.27224>;
        <D.27223>:
        D.27225 = field->offset;
        D.27226 = (sizetype) D.27225;
        D.27227 = this + D.27226;
        result = mono_value_box (domain, field_klass, D.27227);
        goto <D.27228>;
        <D.27224>:
        D.27225 = field->offset;
        D.27226 = (sizetype) D.27225;
        D.27229 = this + D.27226;
        result = *D.27229;
        <D.27228>:
        D.27161 = mono_defaults.object_class;
        out_args = mono_array_new (domain, D.27161, 1);
        mono_gc_wbarrier_generic_store (outArgs, out_args);
        {
          void * * __p;

          __p = mono_array_addr_with_size (out_args, 8, 0);
          mono_gc_wbarrier_set_arrayref (out_args, __p, result);
        }
        monoeg_g_free (str);
        D.27230 = 0B;
        return D.27230;
      }
      <D.27219>:
      k = k->parent;
    }
    if (k != 0B) goto <D.21915>; else goto <D.21916>;
    <D.21916>:
    monoeg_g_free (str);
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "icall.c", 2896);
  }
  <D.27206>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = m->name;
      D.27234 = "FieldSetter";
      D.27235 = MEM[(const unsigned char *)D.27234];
      D.27236 = (int) D.27235;
      D.27237 = *__s2;
      D.27238 = (int) D.27237;
      __result = D.27236 - D.27238;
      {
        D.27239 = __s2_len != 0;
        D.27240 = __result == 0;
        D.27241 = D.27239 & D.27240;
        if (D.27241 != 0) goto <D.27242>; else goto <D.27243>;
        <D.27242>:
        D.27244 = &MEM[(void *)"FieldSetter" + 1B];
        D.27245 = *D.27244;
        D.27246 = (int) D.27245;
        D.27247 = __s2 + 1;
        D.27248 = *D.27247;
        D.27249 = (int) D.27248;
        __result = D.27246 - D.27249;
        D.27250 = __s2_len > 1;
        D.27240 = __result == 0;
        D.27251 = D.27250 & D.27240;
        if (D.27251 != 0) goto <D.27252>; else goto <D.27253>;
        <D.27252>:
        D.27254 = &MEM[(void *)"FieldSetter" + 2B];
        D.27255 = *D.27254;
        D.27256 = (int) D.27255;
        D.27257 = __s2 + 2;
        D.27258 = *D.27257;
        D.27259 = (int) D.27258;
        __result = D.27256 - D.27259;
        D.27260 = __s2_len > 2;
        D.27240 = __result == 0;
        D.27261 = D.27260 & D.27240;
        if (D.27261 != 0) goto <D.27262>; else goto <D.27263>;
        <D.27262>:
        D.27264 = &MEM[(void *)"FieldSetter" + 3B];
        D.27265 = *D.27264;
        D.27266 = (int) D.27265;
        D.27267 = __s2 + 3;
        D.27268 = *D.27267;
        D.27269 = (int) D.27268;
        __result = D.27266 - D.27269;
        <D.27263>:
        <D.27253>:
        <D.27243>:
      }
      D.21924 = __result;
    }
    iftmp.49 = -D.21924;
    goto <D.27270>;
    <D.27233>:
    D.27204 = m->name;
    iftmp.49 = __builtin_strcmp (D.27204, "FieldSetter");
    <D.27270>:
    D.21925 = iftmp.49;
  }
  if (D.21925 == 0) goto <D.27271>; else goto <D.27272>;
  <D.27271>:
  {
    struct MonoClass * k;
    struct MonoString * name;
    guint32 size;
    gint32 align;
    char * str;

    try
      {
        D.27207 = this->vtable;
        k = D.27207->klass;
        D.27208 = mono_defaults.transparent_proxy_class;
        if (D.27208 == k) goto <D.27273>; else goto <D.27274>;
        <D.27273>:
        {
          struct MonoTransparentProxy * tp;

          tp = this;
          D.27275 = tp->rp;
          this = D.27275->unwrapped_server;
          D.27212 = this == 0B;
          D.27213 = (long int) D.27212;
          D.27214 = __builtin_expect (D.27213, 0);
          if (D.27214 != 0) goto <D.27276>; else goto <D.27277>;
          <D.27276>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2909, "this");
          <D.27277>:
          D.27207 = this->vtable;
          k = D.27207->klass;
        }
        <D.27274>:
        D.27278 = mono_array_addr_with_size (params, 8, 1);
        name = MEM[(struct MonoString * *)D.27278];
        str = mono_string_to_utf8 (name);
        <D.21935>:
        {
          struct MonoClassField * field;

          field = mono_class_get_field_from_name (k, str);
          if (field != 0B) goto <D.27279>; else goto <D.27280>;
          <D.27279>:
          {
            struct MonoClass * field_klass;
            struct MonoObject * val;

            D.27281 = field->type;
            field_klass = mono_class_from_mono_type (D.27281);
            D.27282 = mono_array_addr_with_size (params, 8, 2);
            val = MEM[(void * *)D.27282];
            D.27283 = BIT_FIELD_REF <*field_klass, 8, 256>;
            D.27284 = D.27283 & 8;
            if (D.27284 != 0) goto <D.27285>; else goto <D.27286>;
            <D.27285>:
            D.27281 = field->type;
            D.27287 = mono_type_size (D.27281, &align);
            size = (guint32) D.27287;
            D.27288 = mono_class_value_size (field_klass, 0B);
            D.27289 = (unsigned int) D.27288;
            D.27290 = D.27289 != size;
            D.27291 = (long int) D.27290;
            D.27292 = __builtin_expect (D.27291, 0);
            if (D.27292 != 0) goto <D.27293>; else goto <D.27294>;
            <D.27293>:
            monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2924, "size == mono_class_value_size (field_klass, NULL)");
            <D.27294>:
            D.27295 = val + 16;
            D.27296 = field->offset;
            D.27297 = (sizetype) D.27296;
            D.27298 = this + D.27297;
            mono_gc_wbarrier_value_copy (D.27298, D.27295, 1, field_klass);
            goto <D.27299>;
            <D.27286>:
            D.27296 = field->offset;
            D.27297 = (sizetype) D.27296;
            D.27298 = this + D.27297;
            mono_gc_wbarrier_set_field (this, D.27298, val);
            <D.27299>:
            D.27161 = mono_defaults.object_class;
            out_args = mono_array_new (domain, D.27161, 0);
            mono_gc_wbarrier_generic_store (outArgs, out_args);
            monoeg_g_free (str);
            D.27230 = 0B;
            return D.27230;
          }
          <D.27280>:
          k = k->parent;
        }
        if (k != 0B) goto <D.21935>; else goto <D.21936>;
        <D.21936>:
        monoeg_g_free (str);
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "icall.c", 2941);
      }
    finally
      {
        align = {CLOBBER};
      }
  }
  <D.27272>:
  <D.27163>:
  i = 0;
  goto <D.21938>;
  <D.21937>:
  D.27300 = sig->params[i];
  D.27301 = BIT_FIELD_REF <*D.27300, 8, 88>;
  D.27302 = D.27301 & 64;
  if (D.27302 != 0) goto <D.27303>; else goto <D.27304>;
  <D.27303>:
  outarg_count = outarg_count + 1;
  <D.27304>:
  i = i + 1;
  <D.21938>:
  D.27305 = (long unsigned int) i;
  D.27306 = mono_array_length (params);
  if (D.27305 < D.27306) goto <D.21937>; else goto <D.21939>;
  <D.21939>:
  D.27307 = (long unsigned int) outarg_count;
  D.27161 = mono_defaults.object_class;
  out_args = mono_array_new (domain, D.27161, D.27307);
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.27311 = method->method;
      __s2 = D.27311->name;
      D.27312 = ".ctor";
      D.27313 = MEM[(const unsigned char *)D.27312];
      D.27314 = (int) D.27313;
      D.27315 = *__s2;
      D.27316 = (int) D.27315;
      __result = D.27314 - D.27316;
      {
        D.27317 = __s2_len != 0;
        D.27318 = __result == 0;
        D.27319 = D.27317 & D.27318;
        if (D.27319 != 0) goto <D.27320>; else goto <D.27321>;
        <D.27320>:
        D.27322 = &MEM[(void *)".ctor" + 1B];
        D.27323 = *D.27322;
        D.27324 = (int) D.27323;
        D.27325 = __s2 + 1;
        D.27326 = *D.27325;
        D.27327 = (int) D.27326;
        __result = D.27324 - D.27327;
        D.27328 = __s2_len > 1;
        D.27318 = __result == 0;
        D.27329 = D.27328 & D.27318;
        if (D.27329 != 0) goto <D.27330>; else goto <D.27331>;
        <D.27330>:
        D.27332 = &MEM[(void *)".ctor" + 2B];
        D.27333 = *D.27332;
        D.27334 = (int) D.27333;
        D.27335 = __s2 + 2;
        D.27336 = *D.27335;
        D.27337 = (int) D.27336;
        __result = D.27334 - D.27337;
        D.27338 = __s2_len > 2;
        D.27318 = __result == 0;
        D.27339 = D.27338 & D.27318;
        if (D.27339 != 0) goto <D.27340>; else goto <D.27341>;
        <D.27340>:
        D.27342 = &MEM[(void *)".ctor" + 3B];
        D.27343 = *D.27342;
        D.27344 = (int) D.27343;
        D.27345 = __s2 + 3;
        D.27346 = *D.27345;
        D.27347 = (int) D.27346;
        __result = D.27344 - D.27347;
        <D.27341>:
        <D.27331>:
        <D.27321>:
      }
      D.21947 = __result;
    }
    iftmp.50 = -D.21947;
    goto <D.27348>;
    <D.27310>:
    D.27311 = method->method;
    D.27349 = D.27311->name;
    iftmp.50 = __builtin_strcmp (D.27349, ".ctor");
    <D.27348>:
    D.21948 = iftmp.50;
  }
  if (D.21948 == 0) goto <D.27350>; else goto <D.27351>;
  <D.27350>:
  D.27212 = this == 0B;
  D.27213 = (long int) D.27212;
  D.27214 = __builtin_expect (D.27213, 0);
  if (D.27214 != 0) goto <D.27352>; else goto <D.27353>;
  <D.27352>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2955, "this");
  <D.27353>:
  <D.27351>:
  D.27311 = method->method;
  D.27354 = D.27311->klass;
  D.27355 = BIT_FIELD_REF <*D.27354, 8, 256>;
  D.27356 = D.27355 & 8;
  D.27357 = D.27356 != 0;
  D.27358 = (long int) D.27357;
  D.27359 = __builtin_expect (D.27358, 0);
  if (D.27359 != 0) goto <D.27360>; else goto <D.27361>;
  <D.27360>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2958, "!method->method->klass->valuetype");
  <D.27361>:
  D.27311 = method->method;
  result = mono_runtime_invoke_array (D.27311, this, params, 0B);
  i = 0;
  j = 0;
  goto <D.21952>;
  <D.21951>:
  D.27300 = sig->params[i];
  D.27301 = BIT_FIELD_REF <*D.27300, 8, 88>;
  D.27302 = D.27301 & 64;
  if (D.27302 != 0) goto <D.27362>; else goto <D.27363>;
  <D.27362>:
  {
    void * arg;

    D.27305 = (long unsigned int) i;
    D.27364 = mono_array_addr_with_size (params, 8, D.27305);
    arg = MEM[(void * *)D.27364];
    {
      void * * __p;

      D.27365 = (long unsigned int) j;
      __p = mono_array_addr_with_size (out_args, 8, D.27365);
      mono_gc_wbarrier_set_arrayref (out_args, __p, arg);
    }
    j = j + 1;
  }
  <D.27363>:
  i = i + 1;
  <D.21952>:
  D.27305 = (long unsigned int) i;
  D.27366 = mono_array_length (params);
  if (D.27305 < D.27366) goto <D.21951>; else goto <D.21953>;
  <D.21953>:
  mono_gc_wbarrier_generic_store (outArgs, out_args);
  D.27230 = result;
  return D.27230;
}


ves_icall_Remoting_RemotingServices_GetVirtualMethod (struct MonoReflectionType * rtype, struct MonoReflectionMethod * rmethod)
{
  _Bool D.27369;
  long int D.27370;
  long int D.27371;
  _Bool D.27376;
  long int D.27377;
  long int D.27378;
  struct MonoType * D.27383;
  unsigned int D.27386;
  unsigned int D.27387;
  unsigned char D.27389;
  struct MonoReflectionMethod * D.27391;
  short unsigned int D.27392;
  int D.27393;
  int D.27394;
  unsigned int D.27397;
  unsigned int D.27398;
  struct MonoClass * D.27403;
  int D.27405;
  unsigned int D.27406;
  unsigned int D.27407;
  short int D.27412;
  int D.27413;
  int D.27414;
  long unsigned int D.27415;
  long unsigned int D.27416;
  struct MonoMethod * * D.27417;
  int D.27421;
  long unsigned int D.27426;
  long unsigned int D.27427;
  struct MonoMethod * * D.27428;
  struct MonoDomain * D.27431;
  struct MonoClass * klass;
  struct MonoMethod * method;
  struct MonoMethod * * vtable;
  struct MonoMethod * res;

  res = 0B;
  D.27369 = rtype == 0B;
  D.27370 = (long int) D.27369;
  D.27371 = __builtin_expect (D.27370, 0);
  if (D.27371 != 0) goto <D.27372>; else goto <D.27373>;
  <D.27372>:
  {
    struct MonoException * ex;

    if (rtype != 0B) goto <D.27374>; else goto <D.27375>;
    <D.27374>:
    <D.27375>:
    ex = mono_get_exception_argument_null ("rtype");
    mono_raise_exception (ex);
  }
  <D.27373>:
  D.27376 = rmethod == 0B;
  D.27377 = (long int) D.27376;
  D.27378 = __builtin_expect (D.27377, 0);
  if (D.27378 != 0) goto <D.27379>; else goto <D.27380>;
  <D.27379>:
  {
    struct MonoException * ex;

    if (rmethod != 0B) goto <D.27381>; else goto <D.27382>;
    <D.27381>:
    <D.27382>:
    ex = mono_get_exception_argument_null ("rmethod");
    mono_raise_exception (ex);
  }
  <D.27380>:
  method = rmethod->method;
  D.27383 = rtype->type;
  klass = mono_class_from_mono_type (D.27383);
  mono_class_init_or_throw (klass);
  D.27386 = klass->flags;
  D.27387 = D.27386 & 32;
  if (D.27387 != 0) goto <D.27384>; else goto <D.27388>;
  <D.27388>:
  D.27389 = klass->byval_arg.type;
  if (D.27389 == 19) goto <D.27384>; else goto <D.27390>;
  <D.27390>:
  D.27389 = klass->byval_arg.type;
  if (D.27389 == 30) goto <D.27384>; else goto <D.27385>;
  <D.27384>:
  D.27391 = 0B;
  return D.27391;
  <D.27385>:
  D.27392 = method->flags;
  D.27393 = (int) D.27392;
  D.27394 = D.27393 & 16;
  if (D.27394 != 0) goto <D.27395>; else goto <D.27396>;
  <D.27395>:
  D.27391 = 0B;
  return D.27391;
  <D.27396>:
  D.27392 = method->flags;
  D.27397 = (unsigned int) D.27392;
  D.27398 = D.27397 & 96;
  if (D.27398 != 64) goto <D.27399>; else goto <D.27400>;
  <D.27399>:
  D.27403 = method->klass;
  if (D.27403 == klass) goto <D.27401>; else goto <D.27404>;
  <D.27404>:
  D.27403 = method->klass;
  D.27405 = mono_class_is_subclass_of (klass, D.27403, 0);
  if (D.27405 != 0) goto <D.27401>; else goto <D.27402>;
  <D.27401>:
  D.27391 = rmethod;
  return D.27391;
  <D.27402>:
  D.27391 = 0B;
  return D.27391;
  <D.27400>:
  mono_class_setup_vtable (klass);
  vtable = klass->vtable;
  D.27403 = method->klass;
  D.27406 = D.27403->flags;
  D.27407 = D.27406 & 32;
  if (D.27407 != 0) goto <D.27408>; else goto <D.27409>;
  <D.27408>:
  {
    gboolean variance_used;
    int offs;

    try
      {
        variance_used = 0;
        D.27403 = method->klass;
        offs = mono_class_interface_offset_with_variance (klass, D.27403, &variance_used);
        if (offs >= 0) goto <D.27410>; else goto <D.27411>;
        <D.27410>:
        D.27412 = method->slot;
        D.27413 = (int) D.27412;
        D.27414 = D.27413 + offs;
        D.27415 = (long unsigned int) D.27414;
        D.27416 = D.27415 * 8;
        D.27417 = vtable + D.27416;
        res = *D.27417;
        <D.27411>:
      }
    finally
      {
        variance_used = {CLOBBER};
      }
  }
  goto <D.27418>;
  <D.27409>:
  D.27403 = method->klass;
  if (D.27403 != klass) goto <D.27419>; else goto <D.27420>;
  <D.27419>:
  D.27403 = method->klass;
  D.27421 = mono_class_is_subclass_of (klass, D.27403, 0);
  if (D.27421 == 0) goto <D.27422>; else goto <D.27423>;
  <D.27422>:
  D.27391 = 0B;
  return D.27391;
  <D.27423>:
  <D.27420>:
  D.27412 = method->slot;
  if (D.27412 != -1) goto <D.27424>; else goto <D.27425>;
  <D.27424>:
  D.27412 = method->slot;
  D.27426 = (long unsigned int) D.27412;
  D.27427 = D.27426 * 8;
  D.27428 = vtable + D.27427;
  res = *D.27428;
  <D.27425>:
  <D.27418>:
  if (res == 0B) goto <D.27429>; else goto <D.27430>;
  <D.27429>:
  D.27391 = 0B;
  return D.27391;
  <D.27430>:
  D.27431 = mono_domain_get ();
  D.27391 = mono_method_get_object (D.27431, res, 0B);
  return D.27391;
}


ves_icall_Remoting_RealProxy_GetTransparentProxy (struct MonoObject * this, struct MonoString * class_name)
{
  struct MonoVTable * D.27433;
  struct MonoClass * D.27434;
  struct MonoRealProxy * * D.27435;
  struct MonoReflectionType * D.27436;
  struct MonoClass * D.27437;
  struct MonoObject * D.27438;
  _Bool D.27439;
  unsigned char D.27440;
  struct MonoRemoteClass * D.27441;
  struct MonoRemoteClass * D.27442;
  void * D.27443;
  struct MonoObject * D.27444;
  struct MonoDomain * domain;
  struct MonoObject * res;
  struct MonoRealProxy * rp;
  struct MonoTransparentProxy * tp;
  struct MonoType * type;
  struct MonoClass * klass;

  D.27433 = this->vtable;
  domain = D.27433->domain;
  rp = this;
  D.27434 = mono_defaults.transparent_proxy_class;
  res = mono_object_new (domain, D.27434);
  tp = res;
  D.27435 = &tp->rp;
  mono_gc_wbarrier_set_field (tp, D.27435, rp);
  D.27436 = rp->class_to_proxy;
  type = D.27436->type;
  klass = mono_class_from_mono_type (type);
  D.27437 = mono_defaults.iremotingtypeinfo_class;
  D.27438 = mono_object_isinst (this, D.27437);
  D.27439 = D.27438 != 0B;
  D.27440 = (unsigned char) D.27439;
  tp->custom_type_info = D.27440;
  D.27441 = mono_remote_class (domain, class_name, klass);
  tp->remote_class = D.27441;
  D.27442 = tp->remote_class;
  D.27443 = mono_remote_class_vtable (domain, D.27442, rp);
  res->vtable = D.27443;
  D.27444 = res;
  return D.27444;
}


ves_icall_Remoting_RealProxy_InternalGetProxyType (struct MonoTransparentProxy * tp)
{
  struct MonoReflectionType * D.27446;
  struct MonoRemoteClass * D.27447;
  struct MonoClass * D.27448;
  struct MonoType * D.27449;
  struct MonoVTable * D.27450;
  struct MonoDomain * D.27451;

  D.27447 = tp->remote_class;
  D.27448 = D.27447->proxy_class;
  D.27449 = &D.27448->byval_arg;
  D.27450 = MEM[(struct MonoObject *)tp].vtable;
  D.27451 = D.27450->domain;
  D.27446 = mono_type_get_object (D.27451, D.27449);
  return D.27446;
}


ves_icall_MonoMethodMessage_InitMessage (struct MonoMethodMessage * this, struct MonoReflectionMethod * method, struct MonoArray * out_args)
{
  struct MonoVTable * D.27453;
  struct MonoDomain * D.27454;

  D.27453 = MEM[(struct MonoObject *)this].vtable;
  D.27454 = D.27453->domain;
  mono_message_init (D.27454, this, method, out_args);
}


ves_icall_System_Runtime_Activation_ActivationServices_EnableProxyActivation (struct MonoReflectionType * type, MonoBoolean enable)
{
  struct MonoType * D.27455;
  struct MonoDomain * D.27456;
  _Bool D.27457;
  struct MonoClass * klass;
  struct MonoVTable * vtable;

  D.27455 = type->type;
  klass = mono_class_from_mono_type (D.27455);
  D.27456 = mono_domain_get ();
  vtable = mono_class_vtable_full (D.27456, klass, 1);
  D.27457 = enable != 0;
  vtable->remote = D.27457;
}


ves_icall_System_Runtime_Activation_ActivationServices_AllocateUninitializedClassInstance (struct MonoReflectionType * type)
{
  struct MonoVTable * D.27458;
  struct MonoType * D.27459;
  unsigned int D.27462;
  unsigned int D.27463;
  unsigned char D.27465;
  unsigned int D.27468;
  struct MonoException * D.27469;
  unsigned char D.27470;
  _Bool D.27473;
  long int D.27474;
  long int D.27475;
  struct MonoObject * D.27478;
  struct MonoClass * D.27479;
  struct MonoVTable * D.27480;
  struct MonoClass * klass;
  struct MonoDomain * domain;

  D.27458 = MEM[(struct MonoObject *)type].vtable;
  domain = D.27458->domain;
  D.27459 = type->type;
  klass = mono_class_from_mono_type (D.27459);
  mono_class_init_or_throw (klass);
  D.27462 = klass->flags;
  D.27463 = D.27462 & 32;
  if (D.27463 != 0) goto <D.27460>; else goto <D.27464>;
  <D.27464>:
  D.27465 = klass->byval_arg.type;
  if (D.27465 == 19) goto <D.27460>; else goto <D.27466>;
  <D.27466>:
  D.27465 = klass->byval_arg.type;
  if (D.27465 == 30) goto <D.27460>; else goto <D.27467>;
  <D.27467>:
  D.27462 = klass->flags;
  D.27468 = D.27462 & 128;
  if (D.27468 != 0) goto <D.27460>; else goto <D.27461>;
  <D.27460>:
  D.27469 = mono_get_exception_argument ("type", "Type cannot be instantiated");
  mono_raise_exception (D.27469);
  <D.27461>:
  D.27470 = klass->rank;
  if (D.27470 != 0) goto <D.27471>; else goto <D.27472>;
  <D.27471>:
  D.27470 = klass->rank;
  D.27473 = D.27470 != 1;
  D.27474 = (long int) D.27473;
  D.27475 = __builtin_expect (D.27474, 0);
  if (D.27475 != 0) goto <D.27476>; else goto <D.27477>;
  <D.27476>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 6838, "klass->rank == 1");
  <D.27477>:
  D.27479 = klass->element_class;
  D.27478 = mono_array_new (domain, D.27479, 0);
  return D.27478;
  <D.27472>:
  D.27480 = mono_class_vtable_full (domain, klass, 1);
  D.27478 = mono_object_new_alloc_specific (D.27480);
  return D.27478;
}


ves_icall_System_Runtime_InteropServices_Marshal_PrelinkAll (struct MonoReflectionType * type)
{
  struct MonoType * D.27482;
  struct MonoClass * klass;
  struct MonoMethod * m;
  void * iter;

  try
    {
      D.27482 = type->type;
      klass = mono_class_from_mono_type (D.27482);
      iter = 0B;
      mono_class_init_or_throw (klass);
      goto <D.23502>;
      <D.23501>:
      prelink_method (m);
      <D.23502>:
      m = mono_class_get_methods (klass, &iter);
      if (m != 0B) goto <D.23501>; else goto <D.23503>;
      <D.23503>:
    }
  finally
    {
      iter = {CLOBBER};
    }
}


prelink_method (struct MonoMethod * method)
{
  short unsigned int D.27483;
  int D.27484;
  int D.27485;
  const char * exc_class.51;
  const char * exc_arg.52;
  struct MonoImage * D.27492;
  struct MonoException * D.27493;
  const char * exc_class;
  const char * exc_arg;

  try
    {
      D.27483 = method->flags;
      D.27484 = (int) D.27483;
      D.27485 = D.27484 & 8192;
      if (D.27485 == 0) goto <D.27486>; else goto <D.27487>;
      <D.27486>:
      return;
      <D.27487>:
      mono_lookup_pinvoke_call (method, &exc_class, &exc_arg);
      exc_class.51 = exc_class;
      if (exc_class.51 != 0B) goto <D.27489>; else goto <D.27490>;
      <D.27489>:
      exc_arg.52 = exc_arg;
      exc_class.51 = exc_class;
      D.27492 = mono_defaults.corlib;
      D.27493 = mono_exception_from_name_msg (D.27492, "System", exc_class.51, exc_arg.52);
      mono_raise_exception (D.27493);
      <D.27490>:
    }
  finally
    {
      exc_class = {CLOBBER};
      exc_arg = {CLOBBER};
    }
}


ves_icall_System_Runtime_InteropServices_Marshal_Prelink (struct MonoReflectionMethod * method)
{
  struct MonoMethod * D.27497;

  D.27497 = method->method;
  prelink_method (D.27497);
}


ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_SufficientExecutionStack ()
{
  guint8 * stack_addr.53;
  MonoBoolean D.27501;
  long int current.54;
  long int stack_addr.55;
  long int D.27506;
  long int D.27507;
  long unsigned int stack_size.56;
  sizetype D.27512;
  guint8 * D.27513;
  long int D.27514;
  long int D.27515;
  guint8 * stack_addr;
  guint8 * current;
  size_t stack_size;
  int min_size;

  try
    {
      min_size = 131072;
      mono_thread_get_stack_bounds (&stack_addr, &stack_size);
      stack_addr.53 = stack_addr;
      if (stack_addr.53 == 0B) goto <D.27499>; else goto <D.27500>;
      <D.27499>:
      D.27501 = 1;
      return D.27501;
      <D.27500>:
      current = &stack_addr;
      stack_addr.53 = stack_addr;
      if (current > stack_addr.53) goto <D.27502>; else goto <D.27503>;
      <D.27502>:
      current.54 = (long int) current;
      stack_addr.53 = stack_addr;
      stack_addr.55 = (long int) stack_addr.53;
      D.27506 = current.54 - stack_addr.55;
      D.27507 = (long int) min_size;
      if (D.27506 < D.27507) goto <D.27508>; else goto <D.27509>;
      <D.27508>:
      D.27501 = 0;
      return D.27501;
      <D.27509>:
      goto <D.27510>;
      <D.27503>:
      current.54 = (long int) current;
      stack_addr.53 = stack_addr;
      stack_size.56 = stack_size;
      D.27512 = -stack_size.56;
      D.27513 = stack_addr.53 + D.27512;
      D.27514 = (long int) D.27513;
      D.27515 = current.54 - D.27514;
      D.27507 = (long int) min_size;
      if (D.27515 < D.27507) goto <D.27516>; else goto <D.27517>;
      <D.27516>:
      D.27501 = 0;
      return D.27501;
      <D.27517>:
      <D.27510>:
      D.27501 = 1;
      return D.27501;
    }
  finally
    {
      stack_addr = {CLOBBER};
      stack_size = {CLOBBER};
    }
}


ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_RunModuleConstructor (struct MonoImage * image)
{
  unsigned char D.27520;
  unsigned char D.27521;
  struct MonoDomain * D.27524;
  struct MonoVTable * D.27525;

  mono_image_check_for_module_cctor (image);
  D.27520 = BIT_FIELD_REF <*image, 8, 224>;
  D.27521 = D.27520 & 128;
  if (D.27521 != 0) goto <D.27522>; else goto <D.27523>;
  <D.27522>:
  {
    struct MonoClass * module_klass;

    module_klass = mono_class_get (image, 33554433);
    D.27524 = mono_domain_get ();
    D.27525 = mono_class_vtable_full (D.27524, module_klass, 1);
    mono_runtime_class_init (D.27525);
  }
  <D.27523>:
}


ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_RunClassConstructor (struct MonoType * handle)
{
  _Bool D.27526;
  long int D.27527;
  long int D.27528;
  _Bool D.27533;
  long int D.27534;
  long int D.27535;
  struct MonoDomain * D.27540;
  struct MonoClass * klass;
  struct MonoVTable * vtable;

  D.27526 = handle == 0B;
  D.27527 = (long int) D.27526;
  D.27528 = __builtin_expect (D.27527, 0);
  if (D.27528 != 0) goto <D.27529>; else goto <D.27530>;
  <D.27529>:
  {
    struct MonoException * ex;

    if (handle != 0B) goto <D.27531>; else goto <D.27532>;
    <D.27531>:
    <D.27532>:
    ex = mono_get_exception_argument_null ("handle");
    mono_raise_exception (ex);
  }
  <D.27530>:
  klass = mono_class_from_mono_type (handle);
  D.27533 = klass == 0B;
  D.27534 = (long int) D.27533;
  D.27535 = __builtin_expect (D.27534, 0);
  if (D.27535 != 0) goto <D.27536>; else goto <D.27537>;
  <D.27536>:
  {
    struct MonoException * ex;
    char * msg;

    msg = monoeg_g_strdup_printf ("assertion `%s\' failed", "klass");
    if (handle != 0B) goto <D.27538>; else goto <D.27539>;
    <D.27538>:
    <D.27539>:
    ex = mono_get_exception_argument ("handle", msg);
    monoeg_g_free (msg);
    mono_raise_exception (ex);
  }
  <D.27537>:
  D.27540 = mono_domain_get ();
  vtable = mono_class_vtable_full (D.27540, klass, 1);
  mono_runtime_class_init (vtable);
}


ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_InitializeArray (struct MonoArray * array, struct MonoClassField * field_handle)
{
  struct MonoVTable * D.27541;
  int D.27542;
  struct MonoClass * D.27543;
  struct MonoType * D.27544;
  int D.27547;
  unsigned char D.27549;
  struct MonoType * D.27550;
  short unsigned int D.27551;
  int D.27552;
  int D.27553;
  unsigned int D.27556;
  int D.27557;
  unsigned int D.27558;
  long unsigned int D.27561;
  char * D.27562;
  struct MonoClass * klass;
  guint32 size;
  struct MonoType * type;
  int align;
  const char * field_data;

  try
    {
      D.27541 = array->obj.vtable;
      klass = D.27541->klass;
      D.27542 = mono_array_element_size (klass);
      size = (guint32) D.27542;
      D.27543 = klass->element_class;
      D.27544 = &D.27543->byval_arg;
      type = mono_type_get_underlying_type (D.27544);
      D.27547 = mono_type_is_reference (type);
      if (D.27547 != 0) goto <D.27545>; else goto <D.27548>;
      <D.27548>:
      D.27549 = type->type;
      if (D.27549 == 17) goto <D.27545>; else goto <D.27546>;
      <D.27545>:
      {
        struct MonoException * exc;

        exc = mono_get_exception_argument ("array", "Cannot initialize array of non-primitive type.");
        mono_raise_exception (exc);
      }
      <D.27546>:
      D.27550 = field_handle->type;
      D.27551 = D.27550->attrs;
      D.27552 = (int) D.27551;
      D.27553 = D.27552 & 256;
      if (D.27553 == 0) goto <D.27554>; else goto <D.27555>;
      <D.27554>:
      {
        struct MonoException * exc;

        exc = mono_get_exception_argument ("field_handle", "Field doesn\'t have an RVA");
        mono_raise_exception (exc);
      }
      <D.27555>:
      D.27556 = array->max_length;
      size = D.27556 * size;
      field_data = mono_field_get_data (field_handle);
      D.27550 = field_handle->type;
      D.27557 = mono_type_size (D.27550, &align);
      D.27558 = (unsigned int) D.27557;
      if (D.27558 < size) goto <D.27559>; else goto <D.27560>;
      <D.27559>:
      {
        struct MonoException * exc;

        exc = mono_get_exception_argument ("field_handle", "Field not large enough to fill array");
        mono_raise_exception (exc);
      }
      <D.27560>:
      D.27561 = (long unsigned int) size;
      D.27562 = mono_array_addr_with_size (array, 1, 0);
      memcpy (D.27562, field_data, D.27561);
    }
  finally
    {
      align = {CLOBBER};
    }
}


ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_GetOffsetToStringData ()
{
  gint D.27563;

  D.27563 = 20;
  return D.27563;
}


ves_icall_System_Runtime_CompilerServices_RuntimeHelpers_GetObjectValue (struct MonoObject * obj)
{
  struct MonoVTable * D.27568;
  struct MonoClass * D.27569;
  unsigned char D.27570;
  unsigned char D.27571;
  struct MonoObject * D.27572;

  if (obj == 0B) goto <D.27565>; else goto <D.27567>;
  <D.27567>:
  D.27568 = obj->vtable;
  D.27569 = D.27568->klass;
  D.27570 = BIT_FIELD_REF <*D.27569, 8, 256>;
  D.27571 = D.27570 & 8;
  if (D.27571 == 0) goto <D.27565>; else goto <D.27566>;
  <D.27565>:
  D.27572 = obj;
  return D.27572;
  <D.27566>:
  D.27572 = mono_object_clone (obj);
  return D.27572;
}


param_info_get_type_modifiers (struct MonoReflectionParameter * param, MonoBoolean optional)
{
  struct MonoReflectionType * D.27574;
  struct MonoObject * D.27575;
  struct MonoVTable * D.27576;
  int D.27577;
  struct MonoImage * D.27583;
  struct MonoImage * D.27584;
  int D.23566;
  int iftmp.57;
  int D.23562;
  const char[13] * D.27589;
  unsigned char D.27590;
  int D.27591;
  unsigned char D.27592;
  int D.27593;
  _Bool D.27594;
  _Bool D.27595;
  _Bool D.27596;
  const unsigned char * D.27599;
  unsigned char D.27600;
  int D.27601;
  const unsigned char * D.27602;
  unsigned char D.27603;
  int D.27604;
  _Bool D.27605;
  _Bool D.27606;
  const unsigned char * D.27609;
  unsigned char D.27610;
  int D.27611;
  const unsigned char * D.27612;
  unsigned char D.27613;
  int D.27614;
  _Bool D.27615;
  _Bool D.27616;
  const unsigned char * D.27619;
  unsigned char D.27620;
  int D.27621;
  const unsigned char * D.27622;
  unsigned char D.27623;
  int D.27624;
  const char * D.27626;
  struct MonoProperty * D.27628;
  _Bool D.27631;
  long int D.27632;
  long int D.27633;
  struct MonoClass * D.27636;
  struct MonoArray * D.27640;
  int D.27641;
  struct MonoType * type;
  struct MonoClass * member_class;
  struct MonoMethod * method;
  struct MonoImage * image;
  int pos;
  struct MonoMethodSignature * sig;

  D.27574 = param->ClassImpl;
  type = D.27574->type;
  D.27575 = param->MemberImpl;
  D.27576 = D.27575->vtable;
  member_class = D.27576->klass;
  method = 0B;
  D.27577 = mono_class_is_reflection_method_or_constructor (member_class);
  if (D.27577 != 0) goto <D.27578>; else goto <D.27579>;
  <D.27578>:
  {
    struct MonoReflectionMethod * rmethod;

    rmethod = param->MemberImpl;
    method = rmethod->method;
  }
  goto <D.27580>;
  <D.27579>:
  D.27583 = member_class->image;
  D.27584 = mono_defaults.corlib;
  if (D.27583 == D.27584) goto <D.27585>; else goto <D.27581>;
  <D.27585>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = member_class->name;
      D.27589 = "MonoProperty";
      D.27590 = MEM[(const unsigned char *)D.27589];
      D.27591 = (int) D.27590;
      D.27592 = *__s2;
      D.27593 = (int) D.27592;
      __result = D.27591 - D.27593;
      {
        D.27594 = __s1_len != 0;
        D.27595 = __result == 0;
        D.27596 = D.27594 & D.27595;
        if (D.27596 != 0) goto <D.27597>; else goto <D.27598>;
        <D.27597>:
        D.27599 = &MEM[(void *)"MonoProperty" + 1B];
        D.27600 = *D.27599;
        D.27601 = (int) D.27600;
        D.27602 = __s2 + 1;
        D.27603 = *D.27602;
        D.27604 = (int) D.27603;
        __result = D.27601 - D.27604;
        D.27605 = __s1_len > 1;
        D.27595 = __result == 0;
        D.27606 = D.27605 & D.27595;
        if (D.27606 != 0) goto <D.27607>; else goto <D.27608>;
        <D.27607>:
        D.27609 = &MEM[(void *)"MonoProperty" + 2B];
        D.27610 = *D.27609;
        D.27611 = (int) D.27610;
        D.27612 = __s2 + 2;
        D.27613 = *D.27612;
        D.27614 = (int) D.27613;
        __result = D.27611 - D.27614;
        D.27615 = __s1_len > 2;
        D.27595 = __result == 0;
        D.27616 = D.27615 & D.27595;
        if (D.27616 != 0) goto <D.27617>; else goto <D.27618>;
        <D.27617>:
        D.27619 = &MEM[(void *)"MonoProperty" + 3B];
        D.27620 = *D.27619;
        D.27621 = (int) D.27620;
        D.27622 = __s2 + 3;
        D.27623 = *D.27622;
        D.27624 = (int) D.27623;
        __result = D.27621 - D.27624;
        <D.27618>:
        <D.27608>:
        <D.27598>:
      }
      D.23562 = __result;
    }
    iftmp.57 = D.23562;
    goto <D.27625>;
    <D.27588>:
    D.27626 = member_class->name;
    iftmp.57 = __builtin_strcmp ("MonoProperty", D.27626);
    <D.27625>:
    D.23566 = iftmp.57;
  }
  if (D.23566 == 0) goto <D.27627>; else goto <D.27581>;
  <D.27627>:
  {
    struct MonoReflectionProperty * prop;

    prop = param->MemberImpl;
    D.27628 = prop->property;
    method = D.27628->get;
    if (method == 0B) goto <D.27629>; else goto <D.27630>;
    <D.27629>:
    D.27628 = prop->property;
    method = D.27628->set;
    <D.27630>:
    D.27631 = method == 0B;
    D.27632 = (long int) D.27631;
    D.27633 = __builtin_expect (D.27632, 0);
    if (D.27633 != 0) goto <D.27634>; else goto <D.27635>;
    <D.27634>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 7444, "method");
    <D.27635>:
  }
  goto <D.27582>;
  <D.27581>:
  {
    char * type_name;
    char * msg;
    struct MonoException * ex;

    type_name = mono_type_get_full_name (member_class);
    msg = monoeg_g_strdup_printf ("Custom modifiers on a ParamInfo with member %s are not supported", type_name);
    ex = mono_get_exception_not_supported (msg);
    monoeg_g_free (type_name);
    monoeg_g_free (msg);
    mono_raise_exception (ex);
  }
  <D.27582>:
  <D.27580>:
  D.27636 = method->klass;
  image = D.27636->image;
  pos = param->PositionImpl;
  sig = mono_method_signature (method);
  if (pos == -1) goto <D.27637>; else goto <D.27638>;
  <D.27637>:
  type = sig->ret;
  goto <D.27639>;
  <D.27638>:
  type = sig->params[pos];
  <D.27639>:
  D.27641 = (int) optional;
  D.27640 = type_array_from_modifiers (image, type, D.27641);
  return D.27640;
}


type_array_from_modifiers (struct MonoImage * image, struct MonoType * type, int optional)
{
  <unnamed-unsigned:1> D.27647;
  <unnamed-unsigned:6> D.27649;
  int D.27650;
  struct MonoArray * D.27653;
  long unsigned int D.27654;
  struct MonoClass * D.27655;
  struct MonoDomain * D.27656;
  <unnamed-unsigned:31> D.27662;
  unsigned int D.27663;
  struct MonoType * D.27664;
  struct MonoDomain * D.27665;
  struct MonoReflectionType * D.27666;
  struct MonoArray * res;
  int i;
  int count;

  count = 0;
  i = 0;
  goto <D.23540>;
  <D.23539>:
  if (optional != 0) goto <D.27646>; else goto <D.27643>;
  <D.27646>:
  D.27647 = type->modifiers[i].required;
  if (D.27647 == 0) goto <D.27644>; else goto <D.27643>;
  <D.27643>:
  if (optional == 0) goto <D.27648>; else goto <D.27645>;
  <D.27648>:
  D.27647 = type->modifiers[i].required;
  if (D.27647 != 0) goto <D.27644>; else goto <D.27645>;
  <D.27644>:
  count = count + 1;
  <D.27645>:
  i = i + 1;
  <D.23540>:
  D.27649 = type->num_mods;
  D.27650 = (int) D.27649;
  if (D.27650 > i) goto <D.23539>; else goto <D.23541>;
  <D.23541>:
  if (count == 0) goto <D.27651>; else goto <D.27652>;
  <D.27651>:
  D.27653 = 0B;
  return D.27653;
  <D.27652>:
  D.27654 = (long unsigned int) count;
  D.27655 = mono_defaults.systemtype_class;
  D.27656 = mono_domain_get ();
  res = mono_array_new (D.27656, D.27655, D.27654);
  count = 0;
  i = 0;
  goto <D.23545>;
  <D.23544>:
  if (optional != 0) goto <D.27660>; else goto <D.27657>;
  <D.27660>:
  D.27647 = type->modifiers[i].required;
  if (D.27647 == 0) goto <D.27658>; else goto <D.27657>;
  <D.27657>:
  if (optional == 0) goto <D.27661>; else goto <D.27659>;
  <D.27661>:
  D.27647 = type->modifiers[i].required;
  if (D.27647 != 0) goto <D.27658>; else goto <D.27659>;
  <D.27658>:
  {
    struct MonoClass * klass;

    D.27662 = type->modifiers[i].token;
    D.27663 = (unsigned int) D.27662;
    klass = mono_class_get (image, D.27663);
    {
      void * * __p;

      D.27654 = (long unsigned int) count;
      __p = mono_array_addr_with_size (res, 8, D.27654);
      D.27664 = &klass->byval_arg;
      D.27665 = mono_domain_get ();
      D.27666 = mono_type_get_object (D.27665, D.27664);
      mono_gc_wbarrier_set_arrayref (res, __p, D.27666);
    }
    count = count + 1;
  }
  <D.27659>:
  i = i + 1;
  <D.23545>:
  D.27649 = type->num_mods;
  D.27650 = (int) D.27649;
  if (D.27650 > i) goto <D.23544>; else goto <D.23546>;
  <D.23546>:
  D.27653 = res;
  return D.27653;
}


ves_icall_get_property_info (struct MonoReflectionProperty * property, struct MonoPropertyInfo * info, PInfo req_info)
{
  struct MonoVTable * D.27668;
  unsigned int D.27669;
  struct MonoClass * D.27672;
  struct MonoType * D.27673;
  struct MonoReflectionType * D.27674;
  struct MonoReflectionType * * D.27675;
  unsigned int D.27676;
  struct MonoProperty * D.27679;
  struct MonoClass * D.27680;
  struct MonoType * D.27681;
  struct MonoReflectionType * D.27682;
  struct MonoReflectionType * * D.27683;
  unsigned int D.27684;
  const char * D.27687;
  struct MonoString * D.27688;
  struct MonoString * * D.27689;
  unsigned int D.27690;
  unsigned int D.27693;
  unsigned int D.27694;
  struct MonoObject * iftmp.58;
  struct MonoMethod * D.27698;
  struct MonoReflectionMethod * * D.27702;
  unsigned int D.27703;
  struct MonoObject * iftmp.59;
  struct MonoMethod * D.27707;
  struct MonoReflectionMethod * * D.27711;
  struct MonoDomain * domain;

  D.27668 = MEM[(struct MonoObject *)property].vtable;
  domain = D.27668->domain;
  D.27669 = req_info & 8;
  if (D.27669 != 0) goto <D.27670>; else goto <D.27671>;
  <D.27670>:
  D.27672 = property->klass;
  D.27673 = &D.27672->byval_arg;
  D.27674 = mono_type_get_object (domain, D.27673);
  D.27675 = &info->parent;
  mono_gc_wbarrier_generic_store (D.27675, D.27674);
  <D.27671>:
  D.27676 = req_info & 16;
  if (D.27676 != 0) goto <D.27677>; else goto <D.27678>;
  <D.27677>:
  D.27679 = property->property;
  D.27680 = D.27679->parent;
  D.27681 = &D.27680->byval_arg;
  D.27682 = mono_type_get_object (domain, D.27681);
  D.27683 = &info->declaring_type;
  mono_gc_wbarrier_generic_store (D.27683, D.27682);
  <D.27678>:
  D.27684 = req_info & 32;
  if (D.27684 != 0) goto <D.27685>; else goto <D.27686>;
  <D.27685>:
  D.27679 = property->property;
  D.27687 = D.27679->name;
  D.27688 = mono_string_new (domain, D.27687);
  D.27689 = &info->name;
  mono_gc_wbarrier_generic_store (D.27689, D.27688);
  <D.27686>:
  D.27690 = req_info & 1;
  if (D.27690 != 0) goto <D.27691>; else goto <D.27692>;
  <D.27691>:
  D.27679 = property->property;
  D.27693 = D.27679->attrs;
  info->attrs = D.27693;
  <D.27692>:
  D.27694 = req_info & 2;
  if (D.27694 != 0) goto <D.27695>; else goto <D.27696>;
  <D.27695>:
  D.27679 = property->property;
  D.27698 = D.27679->get;
  if (D.27698 != 0B) goto <D.27699>; else goto <D.27700>;
  <D.27699>:
  D.27672 = property->klass;
  D.27679 = property->property;
  D.27698 = D.27679->get;
  iftmp.58 = mono_method_get_object (domain, D.27698, D.27672);
  goto <D.27701>;
  <D.27700>:
  iftmp.58 = 0B;
  <D.27701>:
  D.27702 = &info->get;
  mono_gc_wbarrier_generic_store (D.27702, iftmp.58);
  <D.27696>:
  D.27703 = req_info & 4;
  if (D.27703 != 0) goto <D.27704>; else goto <D.27705>;
  <D.27704>:
  D.27679 = property->property;
  D.27707 = D.27679->set;
  if (D.27707 != 0B) goto <D.27708>; else goto <D.27709>;
  <D.27708>:
  D.27672 = property->klass;
  D.27679 = property->property;
  D.27707 = D.27679->set;
  iftmp.59 = mono_method_get_object (domain, D.27707, D.27672);
  goto <D.27710>;
  <D.27709>:
  iftmp.59 = 0B;
  <D.27710>:
  D.27711 = &info->set;
  mono_gc_wbarrier_generic_store (D.27711, iftmp.59);
  <D.27705>:
}


property_info_get_default_value (struct MonoReflectionProperty * property)
{
  struct MonoVTable * D.27712;
  struct MonoClass * D.27713;
  unsigned int D.27714;
  unsigned int D.27715;
  struct MonoException * D.27718;
  <unnamed type> def_type.60;
  struct MonoObject * D.27720;
  struct MonoType blob_type;
  struct MonoProperty * prop;
  struct MonoType * type;
  struct MonoDomain * domain;
  MonoTypeEnum def_type;
  const char * def_value;
  struct MonoObject * o;

  try
    {
      prop = property->property;
      type = get_property_type (prop);
      D.27712 = MEM[(struct MonoObject *)property].vtable;
      domain = D.27712->domain;
      D.27713 = prop->parent;
      mono_class_init (D.27713);
      D.27714 = prop->attrs;
      D.27715 = D.27714 & 4096;
      if (D.27715 == 0) goto <D.27716>; else goto <D.27717>;
      <D.27716>:
      D.27718 = mono_get_exception_invalid_operation (0B);
      mono_raise_exception (D.27718);
      <D.27717>:
      def_value = mono_class_get_property_default_value (prop, &def_type);
      def_type.60 = def_type;
      mono_type_from_blob_type (&blob_type, def_type.60, type);
      o = mono_get_object_from_blob (domain, &blob_type, def_value);
      D.27720 = o;
      return D.27720;
    }
  finally
    {
      blob_type = {CLOBBER};
      def_type = {CLOBBER};
    }
}


get_property_type (struct MonoProperty * prop)
{
  struct MonoMethod * D.27723;
  struct MonoType * D.27726;
  struct MonoMethod * D.27727;
  short unsigned int D.27730;
  int D.27731;
  int D.27732;
  struct MonoMethodSignature * sig;

  D.27723 = prop->get;
  if (D.27723 != 0B) goto <D.27724>; else goto <D.27725>;
  <D.27724>:
  D.27723 = prop->get;
  sig = mono_method_signature (D.27723);
  D.27726 = sig->ret;
  return D.27726;
  <D.27725>:
  D.27727 = prop->set;
  if (D.27727 != 0B) goto <D.27728>; else goto <D.27729>;
  <D.27728>:
  D.27727 = prop->set;
  sig = mono_method_signature (D.27727);
  D.27730 = sig->param_count;
  D.27731 = (int) D.27730;
  D.27732 = D.27731 + -1;
  D.27726 = sig->params[D.27732];
  return D.27726;
  <D.27729>:
  D.27726 = 0B;
  return D.27726;
}


mono_type_from_blob_type (struct MonoType * type, MonoTypeEnum blob_type, struct MonoType * real_type)
{
  unsigned char D.27734;
  struct MonoClass * D.27737;
  unsigned char D.27741;
  struct MonoClass * D.27743;
  unsigned char D.27744;
  unsigned char D.27745;
  struct MonoClass * D.27747;
  struct MonoClass * D.27748;

  D.27734 = (unsigned char) blob_type;
  type->type = D.27734;
  type->data.klass = 0B;
  if (blob_type == 18) goto <D.27735>; else goto <D.27736>;
  <D.27735>:
  D.27737 = mono_defaults.object_class;
  type->data.klass = D.27737;
  goto <D.27738>;
  <D.27736>:
  D.27741 = real_type->type;
  if (D.27741 == 17) goto <D.27742>; else goto <D.27739>;
  <D.27742>:
  D.27743 = real_type->data.klass;
  D.27744 = BIT_FIELD_REF <*D.27743, 8, 256>;
  D.27745 = D.27744 & 16;
  if (D.27745 != 0) goto <D.27746>; else goto <D.27739>;
  <D.27746>:
  type->type = 17;
  D.27747 = mono_class_from_mono_type (real_type);
  type->data.klass = D.27747;
  goto <D.27740>;
  <D.27739>:
  D.27748 = mono_class_from_mono_type (real_type);
  type->data.klass = D.27748;
  <D.27740>:
  <D.27738>:
}


property_info_get_type_modifiers (struct MonoReflectionProperty * property, MonoBoolean optional)
{
  struct MonoProperty * D.27749;
  struct MonoClass * D.27750;
  struct MonoArray * D.27753;
  int D.27754;
  struct MonoType * type;
  struct MonoImage * image;

  D.27749 = property->property;
  type = get_property_type (D.27749);
  D.27750 = property->klass;
  image = D.27750->image;
  if (type == 0B) goto <D.27751>; else goto <D.27752>;
  <D.27751>:
  D.27753 = 0B;
  return D.27753;
  <D.27752>:
  D.27754 = (int) optional;
  D.27753 = type_array_from_modifiers (image, type, D.27754);
  return D.27753;
}


ves_icall_System_MonoMethodInfo_get_retval_marshal (struct MonoMethod * method)
{
  struct MonoMethodSignature * D.27756;
  short unsigned int D.27757;
  int D.27758;
  int D.27759;
  long unsigned int D.27760;
  long unsigned int D.27761;
  struct MonoMarshalSpec * D.27762;
  struct MonoClass * D.27765;
  struct MonoMethodSignature * D.27766;
  short unsigned int D.27767;
  long unsigned int D.27768;
  long unsigned int D.27769;
  struct MonoMarshalSpec * * D.27770;
  struct MonoMarshalSpec * D.27771;
  struct MonoReflectionMarshalAsAttribute * D.27774;
  struct MonoDomain * domain;
  struct MonoReflectionMarshalAsAttribute * res;
  struct MonoMarshalSpec * * mspecs;
  int i;

  domain = mono_domain_get ();
  res = 0B;
  D.27756 = mono_method_signature (method);
  D.27757 = D.27756->param_count;
  D.27758 = (int) D.27757;
  D.27759 = D.27758 + 1;
  D.27760 = (long unsigned int) D.27759;
  D.27761 = D.27760 * 8;
  mspecs = monoeg_malloc (D.27761);
  mono_method_get_marshal_info (method, mspecs);
  D.27762 = *mspecs;
  if (D.27762 != 0B) goto <D.27763>; else goto <D.27764>;
  <D.27763>:
  D.27762 = *mspecs;
  D.27765 = method->klass;
  res = mono_reflection_marshal_as_attribute_from_marshal_spec (domain, D.27765, D.27762);
  <D.27764>:
  D.27766 = mono_method_signature (method);
  D.27767 = D.27766->param_count;
  i = (int) D.27767;
  goto <D.21437>;
  <D.21436>:
  D.27768 = (long unsigned int) i;
  D.27769 = D.27768 * 8;
  D.27770 = mspecs + D.27769;
  D.27771 = *D.27770;
  if (D.27771 != 0B) goto <D.27772>; else goto <D.27773>;
  <D.27772>:
  D.27768 = (long unsigned int) i;
  D.27769 = D.27768 * 8;
  D.27770 = mspecs + D.27769;
  D.27771 = *D.27770;
  mono_metadata_free_marshal_spec (D.27771);
  <D.27773>:
  i = i + -1;
  <D.21437>:
  if (i >= 0) goto <D.21436>; else goto <D.21438>;
  <D.21438>:
  monoeg_g_free (mspecs);
  D.27774 = res;
  return D.27774;
}


ves_icall_get_parameter_info (struct MonoMethod * method, struct MonoReflectionMethod * member)
{
  struct MonoArray * D.27776;
  struct MonoClass * iftmp.61;
  struct MonoReflectionType * D.27778;
  struct MonoType * D.27781;
  struct MonoDomain * domain;

  domain = mono_domain_get ();
  D.27778 = member->reftype;
  if (D.27778 != 0B) goto <D.27779>; else goto <D.27780>;
  <D.27779>:
  D.27778 = member->reftype;
  D.27781 = D.27778->type;
  iftmp.61 = mono_class_from_mono_type (D.27781);
  goto <D.27782>;
  <D.27780>:
  iftmp.61 = 0B;
  <D.27782>:
  D.27776 = mono_param_get_objects_internal (domain, method, iftmp.61);
  return D.27776;
}


ves_icall_get_method_info (struct MonoMethod * method, struct MonoMethodInfo * info)
{
  int D.27784;
  struct MonoClass * D.27787;
  struct MonoType * D.27788;
  struct MonoReflectionType * D.27789;
  struct MonoReflectionType * * D.27790;
  struct MonoType * D.27791;
  struct MonoReflectionType * D.27792;
  struct MonoReflectionType * * D.27793;
  short unsigned int D.27794;
  unsigned int D.27795;
  short unsigned int D.27796;
  unsigned int D.27797;
  unsigned char D.27798;
  unsigned char D.27799;
  guint32 iftmp.62;
  short int D.27803;
  unsigned int D.27812;
  <unnamed-unsigned:1> D.27813;
  int D.27814;
  int D.27815;
  <unnamed-unsigned:1> D.27816;
  int D.27817;
  int D.27818;
  int D.27819;
  unsigned int D.27820;
  unsigned int D.27821;
  struct MonoError error;
  struct MonoDomain * domain;
  struct MonoMethodSignature * sig;

  try
    {
      domain = mono_domain_get ();
      sig = mono_method_signature_checked (method, &error);
      D.27784 = mono_error_ok (&error);
      if (D.27784 == 0) goto <D.27785>; else goto <D.27786>;
      <D.27785>:
      mono_error_raise_exception (&error);
      <D.27786>:
      D.27787 = method->klass;
      D.27788 = &D.27787->byval_arg;
      D.27789 = mono_type_get_object (domain, D.27788);
      D.27790 = &info->parent;
      mono_gc_wbarrier_generic_store (D.27790, D.27789);
      D.27791 = sig->ret;
      D.27792 = mono_type_get_object (domain, D.27791);
      D.27793 = &info->ret;
      mono_gc_wbarrier_generic_store (D.27793, D.27792);
      D.27794 = method->flags;
      D.27795 = (unsigned int) D.27794;
      info->attrs = D.27795;
      D.27796 = method->iflags;
      D.27797 = (unsigned int) D.27796;
      info->implattrs = D.27797;
      D.27798 = BIT_FIELD_REF <*sig, 8, 112>;
      D.27799 = D.27798 & 63;
      if (D.27799 == 0) goto <D.27800>; else goto <D.27801>;
      <D.27800>:
      D.27803 = sig->sentinelpos;
      if (D.27803 >= 0) goto <D.27804>; else goto <D.27805>;
      <D.27804>:
      iftmp.62 = 2;
      goto <D.27806>;
      <D.27805>:
      iftmp.62 = 1;
      <D.27806>:
      info->callconv = iftmp.62;
      goto <D.27807>;
      <D.27801>:
      D.27798 = BIT_FIELD_REF <*sig, 8, 112>;
      D.27799 = D.27798 & 63;
      if (D.27799 == 5) goto <D.27808>; else goto <D.27811>;
      <D.27811>:
      D.27803 = sig->sentinelpos;
      if (D.27803 >= 0) goto <D.27808>; else goto <D.27809>;
      <D.27808>:
      info->callconv = 2;
      goto <D.27810>;
      <D.27809>:
      info->callconv = 1;
      <D.27810>:
      <D.27807>:
      D.27812 = info->callconv;
      D.27813 = sig->hasthis;
      D.27814 = (int) D.27813;
      D.27815 = D.27814 << 5;
      D.27816 = sig->explicit_this;
      D.27817 = (int) D.27816;
      D.27818 = D.27817 << 6;
      D.27819 = D.27815 | D.27818;
      D.27820 = (unsigned int) D.27819;
      D.27821 = D.27812 | D.27820;
      info->callconv = D.27821;
    }
  finally
    {
      error = {CLOBBER};
    }
}


vell_icall_get_method_attributes (struct MonoMethod * method)
{
  int D.27822;
  short unsigned int D.27823;

  D.27823 = method->flags;
  D.27822 = (int) D.27823;
  return D.27822;
}


ves_icall_MonoMethod_get_name (struct MonoReflectionMethod * m)
{
  const char * D.27825;
  struct MonoVTable * D.27826;
  struct MonoDomain * D.27827;
  struct MonoString * D.27828;
  struct MonoString * * D.27829;
  struct MonoString * D.27830;
  struct MonoMethod * method;

  method = m->method;
  D.27825 = method->name;
  D.27826 = MEM[(struct MonoObject *)m].vtable;
  D.27827 = D.27826->domain;
  D.27828 = mono_string_new (D.27827, D.27825);
  D.27829 = &m->name;
  mono_gc_wbarrier_set_field (m, D.27829, D.27828);
  D.27830 = m->name;
  return D.27830;
}


ves_icall_MonoMethod_get_base_method (struct MonoReflectionMethod * m, gboolean definition)
{
  struct MonoClass * D.27832;
  struct MonoReflectionMethod * D.27835;
  short unsigned int D.27838;
  int D.27839;
  int D.27840;
  unsigned int D.27842;
  unsigned int D.27843;
  unsigned char D.27845;
  int D.27848;
  struct MonoGenericClass * D.27851;
  int D.27856;
  int D.27863;
  struct MonoMethod * * D.27866;
  long unsigned int D.27867;
  long unsigned int D.27868;
  struct MonoMethod * * D.27869;
  short int D.27872;
  int D.27873;
  struct MonoDomain * D.27877;
  struct MonoClass * klass;
  struct MonoClass * parent;
  struct MonoMethod * method;
  struct MonoMethod * result;
  int slot;

  method = m->method;
  result = 0B;
  D.27832 = method->klass;
  if (D.27832 == 0B) goto <D.27833>; else goto <D.27834>;
  <D.27833>:
  D.27835 = m;
  return D.27835;
  <D.27834>:
  D.27838 = method->flags;
  D.27839 = (int) D.27838;
  D.27840 = D.27839 & 64;
  if (D.27840 == 0) goto <D.27836>; else goto <D.27841>;
  <D.27841>:
  D.27832 = method->klass;
  D.27842 = D.27832->flags;
  D.27843 = D.27842 & 32;
  if (D.27843 != 0) goto <D.27836>; else goto <D.27844>;
  <D.27844>:
  D.27832 = method->klass;
  D.27845 = D.27832->byval_arg.type;
  if (D.27845 == 19) goto <D.27836>; else goto <D.27846>;
  <D.27846>:
  D.27832 = method->klass;
  D.27845 = D.27832->byval_arg.type;
  if (D.27845 == 30) goto <D.27836>; else goto <D.27847>;
  <D.27847>:
  D.27838 = method->flags;
  D.27839 = (int) D.27838;
  D.27848 = D.27839 & 256;
  if (D.27848 != 0) goto <D.27836>; else goto <D.27837>;
  <D.27836>:
  D.27835 = m;
  return D.27835;
  <D.27837>:
  slot = mono_method_get_vtable_slot (method);
  if (slot == -1) goto <D.27849>; else goto <D.27850>;
  <D.27849>:
  D.27835 = m;
  return D.27835;
  <D.27850>:
  klass = method->klass;
  D.27851 = klass->generic_class;
  if (D.27851 != 0B) goto <D.27852>; else goto <D.27853>;
  <D.27852>:
  D.27851 = klass->generic_class;
  klass = D.27851->container_class;
  <D.27853>:
  if (definition != 0) goto <D.27854>; else goto <D.27855>;
  <D.27854>:
  parent = klass->parent;
  goto <D.23441>;
  <D.23440>:
  mono_class_setup_vtable (parent);
  D.27856 = parent->vtable_size;
  if (D.27856 <= slot) goto <D.23439>; else goto <D.27857>;
  <D.27857>:
  klass = parent;
  parent = parent->parent;
  <D.23441>:
  if (parent != 0B) goto <D.23440>; else goto <D.23439>;
  <D.23439>:
  goto <D.27858>;
  <D.27855>:
  klass = klass->parent;
  if (klass == 0B) goto <D.27859>; else goto <D.27860>;
  <D.27859>:
  D.27835 = m;
  return D.27835;
  <D.27860>:
  <D.27858>:
  D.27832 = method->klass;
  if (D.27832 == klass) goto <D.27861>; else goto <D.27862>;
  <D.27861>:
  D.27835 = m;
  return D.27835;
  <D.27862>:
  D.27863 = klass->vtable_size;
  if (D.27863 <= slot) goto <D.27864>; else goto <D.27865>;
  <D.27864>:
  D.27835 = m;
  return D.27835;
  <D.27865>:
  mono_class_setup_vtable (klass);
  D.27866 = klass->vtable;
  D.27867 = (long unsigned int) slot;
  D.27868 = D.27867 * 8;
  D.27869 = D.27866 + D.27868;
  result = *D.27869;
  if (result == 0B) goto <D.27870>; else goto <D.27871>;
  <D.27870>:
  {
    void * iter;

    try
      {
        iter = 0B;
        goto <D.23445>;
        <D.23444>:
        D.27872 = result->slot;
        D.27873 = (int) D.27872;
        if (D.27873 == slot) goto <D.23443>; else goto <D.27874>;
        <D.27874>:
        <D.23445>:
        result = mono_class_get_methods (klass, &iter);
        if (result != 0B) goto <D.23444>; else goto <D.23443>;
        <D.23443>:
      }
    finally
      {
        iter = {CLOBBER};
      }
  }
  <D.27871>:
  if (result == 0B) goto <D.27875>; else goto <D.27876>;
  <D.27875>:
  D.27835 = m;
  return D.27835;
  <D.27876>:
  D.27877 = mono_domain_get ();
  D.27835 = mono_method_get_object (D.27877, result, 0B);
  return D.27835;
}


ves_icall_MonoMethod_get_IsGenericMethodDefinition (struct MonoReflectionMethod * method)
{
  gboolean D.27879;
  struct MonoMethod * D.27880;
  <unnamed-unsigned:1> D.27881;

  D.27880 = method->method;
  D.27881 = D.27880->is_generic;
  D.27879 = (gboolean) D.27881;
  return D.27879;
}


ves_icall_MonoMethod_get_IsGenericMethod (struct MonoReflectionMethod * method)
{
  gboolean D.27883;
  struct MonoMethod * D.27884;
  struct MonoMethodSignature * D.27885;
  short unsigned int D.27886;
  _Bool D.27887;

  D.27884 = method->method;
  D.27885 = mono_method_signature (D.27884);
  D.27886 = D.27885->generic_param_count;
  D.27887 = D.27886 != 0;
  D.27883 = (gboolean) D.27887;
  return D.27883;
}


ves_icall_MonoMethod_GetGenericArguments (struct MonoReflectionMethod * method)
{
  struct MonoVTable * D.27889;
  struct MonoMethod * D.27890;
  unsigned char D.27891;
  unsigned char D.27892;
  struct MonoGenericContext * D.27895;
  <unnamed-unsigned:22> D.27898;
  long unsigned int D.27899;
  struct MonoClass * D.27900;
  long unsigned int D.27901;
  struct MonoType * D.27902;
  struct MonoReflectionType * D.27903;
  struct MonoArray * D.27904;
  struct MonoMethodSignature * D.27905;
  short unsigned int D.27906;
  struct MonoGenericParamFull * D.27907;
  long unsigned int D.27908;
  long unsigned int D.27909;
  struct MonoClass * D.27910;
  struct MonoImage * D.27911;
  struct MonoType * D.27912;
  struct MonoReflectionType * D.27913;
  struct MonoArray * res;
  struct MonoDomain * domain;
  int count;
  int i;

  D.27889 = MEM[(struct MonoObject *)method].vtable;
  domain = D.27889->domain;
  D.27890 = method->method;
  D.27891 = BIT_FIELD_REF <*D.27890, 8, 264>;
  D.27892 = D.27891 & 16;
  if (D.27892 != 0) goto <D.27893>; else goto <D.27894>;
  <D.27893>:
  {
    struct MonoGenericInst * inst;

    D.27890 = method->method;
    D.27895 = mono_method_get_context (D.27890);
    inst = D.27895->method_inst;
    if (inst != 0B) goto <D.27896>; else goto <D.27897>;
    <D.27896>:
    D.27898 = inst->type_argc;
    count = (int) D.27898;
    D.27899 = (long unsigned int) count;
    D.27900 = mono_defaults.systemtype_class;
    res = mono_array_new (domain, D.27900, D.27899);
    i = 0;
    goto <D.21829>;
    <D.21828>:
    {
      void * * __p;

      D.27901 = (long unsigned int) i;
      __p = mono_array_addr_with_size (res, 8, D.27901);
      D.27902 = inst->type_argv[i];
      D.27903 = mono_type_get_object (domain, D.27902);
      mono_gc_wbarrier_set_arrayref (res, __p, D.27903);
    }
    i = i + 1;
    <D.21829>:
    if (i < count) goto <D.21828>; else goto <D.21830>;
    <D.21830>:
    D.27904 = res;
    return D.27904;
    <D.27897>:
  }
  <D.27894>:
  D.27890 = method->method;
  D.27905 = mono_method_signature (D.27890);
  D.27906 = D.27905->generic_param_count;
  count = (int) D.27906;
  D.27899 = (long unsigned int) count;
  D.27900 = mono_defaults.systemtype_class;
  res = mono_array_new (domain, D.27900, D.27899);
  i = 0;
  goto <D.21836>;
  <D.21835>:
  {
    struct MonoGenericContainer * container;
    struct MonoGenericParam * param;
    struct MonoClass * pklass;

    D.27890 = method->method;
    container = mono_method_get_generic_container (D.27890);
    D.27907 = container->type_params;
    D.27908 = (long unsigned int) i;
    D.27909 = D.27908 * 56;
    param = D.27907 + D.27909;
    D.27890 = method->method;
    D.27910 = D.27890->klass;
    D.27911 = D.27910->image;
    pklass = mono_class_from_generic_parameter (param, D.27911, 1);
    {
      void * * __p;

      D.27901 = (long unsigned int) i;
      __p = mono_array_addr_with_size (res, 8, D.27901);
      D.27912 = &pklass->byval_arg;
      D.27913 = mono_type_get_object (domain, D.27912);
      mono_gc_wbarrier_set_arrayref (res, __p, D.27913);
    }
  }
  i = i + 1;
  <D.21836>:
  if (i < count) goto <D.21835>; else goto <D.21837>;
  <D.21837>:
  D.27904 = res;
  return D.27904;
}


ves_icall_MonoMethod_GetDllImportAttribute (struct MonoMethod * method)
{
  struct MonoClass * D.27915;
  short unsigned int D.27916;
  int D.27917;
  int D.27918;
  struct MonoReflectionDllImportAttribute * D.27921;
  struct MonoClass * DllImportAttributeClass.63;
  struct MonoImage * D.27925;
  struct MonoClass * DllImportAttributeClass.64;
  _Bool D.27927;
  long int D.27928;
  long int D.27929;
  struct MonoImage * D.27932;
  unsigned char D.27933;
  unsigned char D.27934;
  struct GHashTable * D.27937;
  _Bool D.27940;
  _Bool D.27941;
  _Bool D.27942;
  struct MonoException * D.27945;
  short unsigned int D.27947;
  int D.27950;
  int D.27951;
  unsigned int D.27952;
  short unsigned int D.27953;
  unsigned int D.27954;
  unsigned int D.27955;
  unsigned int D.27956;
  int D.27957;
  short unsigned int D.27958;
  struct MonoString * D.27959;
  struct MonoString * * D.27960;
  struct MonoString * D.27961;
  struct MonoString * * D.27962;
  unsigned int D.27963;
  unsigned int D.27964;
  int D.27965;
  unsigned int D.27966;
  unsigned int D.27967;
  unsigned int D.27968;
  int D.27969;
  int D.27970;
  unsigned int D.27973;
  _Bool D.27974;
  unsigned char D.27975;
  unsigned int D.27976;
  _Bool D.27977;
  unsigned char D.27978;
  unsigned int D.27979;
  _Bool D.27980;
  unsigned char D.27981;
  unsigned int D.27982;
  _Bool D.27983;
  unsigned char D.27984;
  static struct MonoClass * DllImportAttributeClass = 0B;
  struct MonoDomain * domain;
  struct MonoReflectionDllImportAttribute * attr;
  struct MonoImage * image;
  struct MonoMethodPInvoke * piinfo;
  struct MonoTableInfo * tables;
  struct MonoTableInfo * im;
  struct MonoTableInfo * mr;
  guint32 im_cols[4];
  guint32 scope_token;
  const char * import;
  const char * scope;
  guint32 flags;

  try
    {
      domain = mono_domain_get ();
      D.27915 = method->klass;
      image = D.27915->image;
      piinfo = method;
      tables = &image->tables;
      im = tables + 448;
      mr = tables + 416;
      import = 0B;
      scope = 0B;
      D.27916 = method->flags;
      D.27917 = (int) D.27916;
      D.27918 = D.27917 & 8192;
      if (D.27918 == 0) goto <D.27919>; else goto <D.27920>;
      <D.27919>:
      D.27921 = 0B;
      return D.27921;
      <D.27920>:
      DllImportAttributeClass.63 = DllImportAttributeClass;
      if (DllImportAttributeClass.63 == 0B) goto <D.27923>; else goto <D.27924>;
      <D.27923>:
      D.27925 = mono_defaults.corlib;
      DllImportAttributeClass.64 = mono_class_from_name (D.27925, "System.Runtime.InteropServices", "DllImportAttribute");
      DllImportAttributeClass = DllImportAttributeClass.64;
      DllImportAttributeClass.63 = DllImportAttributeClass;
      D.27927 = DllImportAttributeClass.63 == 0B;
      D.27928 = (long int) D.27927;
      D.27929 = __builtin_expect (D.27928, 0);
      if (D.27929 != 0) goto <D.27930>; else goto <D.27931>;
      <D.27930>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2598, "DllImportAttributeClass");
      <D.27931>:
      <D.27924>:
      D.27915 = method->klass;
      D.27932 = D.27915->image;
      D.27933 = BIT_FIELD_REF <*D.27932, 8, 224>;
      D.27934 = D.27933 & 8;
      if (D.27934 != 0) goto <D.27935>; else goto <D.27936>;
      <D.27935>:
      {
        struct MonoReflectionMethodAux * method_aux;

        D.27915 = method->klass;
        D.27932 = D.27915->image;
        D.27937 = MEM[(struct MonoDynamicImage *)D.27932].method_aux_hash;
        method_aux = monoeg_g_hash_table_lookup (D.27937, method);
        if (method_aux != 0B) goto <D.27938>; else goto <D.27939>;
        <D.27938>:
        import = method_aux->dllentry;
        scope = method_aux->dll;
        <D.27939>:
        D.27940 = import == 0B;
        D.27941 = scope == 0B;
        D.27942 = D.27940 | D.27941;
        if (D.27942 != 0) goto <D.27943>; else goto <D.27944>;
        <D.27943>:
        D.27945 = mono_get_exception_argument ("method", "System.Reflection.Emit method with invalid pinvoke information");
        mono_raise_exception (D.27945);
        D.27921 = 0B;
        return D.27921;
        <D.27944>:
      }
      goto <D.27946>;
      <D.27936>:
      D.27947 = piinfo->implmap_idx;
      if (D.27947 != 0) goto <D.27948>; else goto <D.27949>;
      <D.27948>:
      D.27947 = piinfo->implmap_idx;
      D.27950 = (int) D.27947;
      D.27951 = D.27950 + -1;
      mono_metadata_decode_row (im, D.27951, &im_cols, 4);
      D.27952 = im_cols[0];
      D.27953 = (short unsigned int) D.27952;
      piinfo->piflags = D.27953;
      D.27954 = im_cols[2];
      import = mono_metadata_string_heap (image, D.27954);
      D.27955 = im_cols[3];
      D.27956 = D.27955 + 4294967295;
      D.27957 = (int) D.27956;
      scope_token = mono_metadata_decode_row_col (mr, D.27957, 0);
      scope = mono_metadata_string_heap (image, scope_token);
      <D.27949>:
      <D.27946>:
      D.27958 = piinfo->piflags;
      flags = (guint32) D.27958;
      DllImportAttributeClass.63 = DllImportAttributeClass;
      attr = mono_object_new (domain, DllImportAttributeClass.63);
      D.27959 = mono_string_new (domain, scope);
      D.27960 = &attr->dll;
      mono_gc_wbarrier_set_field (attr, D.27960, D.27959);
      D.27961 = mono_string_new (domain, import);
      D.27962 = &attr->entry_point;
      mono_gc_wbarrier_set_field (attr, D.27962, D.27961);
      D.27963 = flags & 1792;
      D.27964 = D.27963 >> 8;
      D.27965 = (int) D.27964;
      attr->call_conv = D.27965;
      D.27966 = flags & 6;
      D.27967 = D.27966 >> 1;
      D.27968 = D.27967 + 1;
      D.27969 = (int) D.27968;
      attr->charset = D.27969;
      D.27970 = attr->charset;
      if (D.27970 == 1) goto <D.27971>; else goto <D.27972>;
      <D.27971>:
      attr->charset = 2;
      <D.27972>:
      D.27973 = flags & 1;
      D.27974 = D.27973 != 0;
      D.27975 = (unsigned char) D.27974;
      attr->exact_spelling = D.27975;
      D.27976 = flags & 64;
      D.27977 = D.27976 != 0;
      D.27978 = (unsigned char) D.27977;
      attr->set_last_error = D.27978;
      D.27979 = flags & 48;
      D.27980 = D.27979 == 16;
      D.27981 = (unsigned char) D.27980;
      attr->best_fit_mapping = D.27981;
      D.27982 = flags & 12288;
      D.27983 = D.27982 == 4096;
      D.27984 = (unsigned char) D.27983;
      attr->throw_on_unmappable = D.27984;
      attr->preserve_sig = 0;
      D.27921 = attr;
      return D.27921;
    }
  finally
    {
      im_cols = {CLOBBER};
    }
}


ves_icall_MonoGenericMethod_get_ReflectedType (struct MonoReflectionGenericMethod * rmethod)
{
  struct MonoReflectionType * D.27987;
  struct MonoClass * D.27988;
  struct MonoType * D.27989;
  struct MonoVTable * D.27990;
  struct MonoDomain * D.27991;
  struct MonoMethod * method;

  method = rmethod->method.method;
  D.27988 = method->klass;
  D.27989 = &D.27988->byval_arg;
  D.27990 = MEM[(struct MonoObject *)rmethod].vtable;
  D.27991 = D.27990->domain;
  D.27987 = mono_type_get_object (D.27991, D.27989);
  return D.27987;
}


ves_icall_MonoField_SetValueInternal (struct MonoReflectionField * field, struct MonoObject * obj, struct MonoObject * value)
{
  struct MonoClass * D.27993;
  struct MonoImage * D.27994;
  struct MonoAssembly * D.27995;
  int D.27996;
  struct MonoException * D.27999;
  <unnamed type> D.28000;
  int D.28003;
  unsigned char D.28006;
  unsigned char D.28007;
  unsigned char D.28010;
  int D.28011;
  struct MonoGenericInst * D.28014;
  unsigned char D.28015;
  unsigned char D.28016;
  _Bool D.28017;
  long int D.28018;
  long int D.28019;
  struct MonoClass * D.28022;
  int D.28023;
  struct MonoDomain * D.28026;
  void * D.28027;
  struct MonoClass * D.28029;
  unsigned char D.28030;
  unsigned char D.28031;
  short unsigned int D.28036;
  int D.28037;
  int D.28038;
  struct MonoClass * D.28041;
  struct MonoVTable * D.28042;
  struct MonoDomain * D.28043;
  unsigned char D.28044;
  unsigned char D.28045;
  struct MonoError error;
  struct MonoClassField * cf;
  struct MonoType * type;
  gchar * v;

  try
    {
      cf = field->field;
      D.27993 = field->klass;
      D.27994 = D.27993->image;
      D.27995 = D.27994->assembly;
      D.27996 = D.27995->ref_only;
      if (D.27996 != 0) goto <D.27997>; else goto <D.27998>;
      <D.27997>:
      D.27999 = mono_get_exception_invalid_operation ("It is illegal to set the value on a field on a type loaded using the ReflectionOnly methods.");
      mono_raise_exception (D.27999);
      <D.27998>:
      D.28000 = mono_security_get_mode ();
      if (D.28000 == 1) goto <D.28001>; else goto <D.28002>;
      <D.28001>:
      mono_security_core_clr_ensure_reflection_access_field (cf);
      <D.28002>:
      type = mono_field_get_type_checked (cf, &error);
      D.28003 = mono_error_ok (&error);
      if (D.28003 == 0) goto <D.28004>; else goto <D.28005>;
      <D.28004>:
      mono_error_raise_exception (&error);
      <D.28005>:
      v = value;
      D.28006 = BIT_FIELD_REF <*type, 8, 88>;
      D.28007 = D.28006 & 64;
      if (D.28007 == 0) goto <D.28008>; else goto <D.28009>;
      <D.28008>:
      D.28010 = type->type;
      D.28011 = (int) D.28010;
      switch (D.28011) <default: <D.21490>, case 2: <D.21466>, case 3: <D.21469>, case 4: <D.21465>, case 5: <D.21464>, case 6: <D.21468>, case 7: <D.21467>, case 8: <D.21473>, case 9: <D.21472>, case 10: <D.21476>, case 11: <D.21475>, case 12: <D.21474>, case 13: <D.21477>, case 14: <D.21481>, case 15: <D.21479>, case 17: <D.21478>, case 18: <D.21483>, case 20: <D.21484>, case 21: <D.21486>, case 24: <D.21471>, case 25: <D.21470>, case 28: <D.21482>, case 29: <D.21485>>
      <D.21464>:
      <D.21465>:
      <D.21466>:
      <D.21467>:
      <D.21468>:
      <D.21469>:
      <D.21470>:
      <D.21471>:
      <D.21472>:
      <D.21473>:
      <D.21474>:
      <D.21475>:
      <D.21476>:
      <D.21477>:
      <D.21478>:
      <D.21479>:
      if (v != 0B) goto <D.28012>; else goto <D.28013>;
      <D.28012>:
      v = v + 16;
      <D.28013>:
      goto <D.21480>;
      <D.21481>:
      <D.21482>:
      <D.21483>:
      <D.21484>:
      <D.21485>:
      goto <D.21480>;
      <D.21486>:
      {
        struct MonoGenericClass * gclass;

        gclass = type->data.generic_class;
        D.28014 = gclass->context.class_inst;
        D.28015 = BIT_FIELD_REF <*D.28014, 8, 48>;
        D.28016 = D.28015 & 64;
        D.28017 = D.28016 != 0;
        D.28018 = (long int) D.28017;
        D.28019 = __builtin_expect (D.28018, 0);
        if (D.28019 != 0) goto <D.28020>; else goto <D.28021>;
        <D.28020>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 1825, "!gclass->context.class_inst->is_open");
        <D.28021>:
        D.28022 = mono_class_from_mono_type (type);
        D.28023 = mono_class_is_nullable (D.28022);
        if (D.28023 != 0) goto <D.28024>; else goto <D.28025>;
        <D.28024>:
        {
          struct MonoClass * nklass;
          struct MonoObject * nullable;

          nklass = mono_class_from_mono_type (type);
          D.28026 = mono_domain_get ();
          nullable = mono_object_new (D.28026, nklass);
          D.28027 = mono_object_unbox (nullable);
          mono_nullable_init (D.28027, value, nklass);
          v = mono_object_unbox (nullable);
        }
        goto <D.28028>;
        <D.28025>:
        D.28029 = gclass->container_class;
        D.28030 = BIT_FIELD_REF <*D.28029, 8, 256>;
        D.28031 = D.28030 & 8;
        if (D.28031 != 0) goto <D.28032>; else goto <D.28033>;
        <D.28032>:
        if (v != 0B) goto <D.28034>; else goto <D.28035>;
        <D.28034>:
        v = v + 16;
        <D.28035>:
        <D.28033>:
        <D.28028>:
        goto <D.21480>;
      }
      <D.21490>:
      D.28010 = type->type;
      D.28011 = (int) D.28010;
      monoeg_g_log (0B, 4, "type 0x%x not handled in ves_icall_FieldInfo_SetValueInternal", D.28011);
      <D.21491>:
      goto <D.21491>;
      return;
      <D.21480>:
      <D.28009>:
      D.28036 = type->attrs;
      D.28037 = (int) D.28036;
      D.28038 = D.28037 & 16;
      if (D.28038 != 0) goto <D.28039>; else goto <D.28040>;
      <D.28039>:
      {
        struct MonoVTable * vtable;

        D.28041 = cf->parent;
        D.28042 = MEM[(struct MonoObject *)field].vtable;
        D.28043 = D.28042->domain;
        vtable = mono_class_vtable_full (D.28043, D.28041, 1);
        D.28044 = BIT_FIELD_REF <*vtable, 8, 344>;
        D.28045 = D.28044 & 2;
        if (D.28045 == 0) goto <D.28046>; else goto <D.28047>;
        <D.28046>:
        mono_runtime_class_init (vtable);
        <D.28047>:
        mono_field_static_set_value (vtable, cf, v);
      }
      goto <D.28048>;
      <D.28040>:
      mono_field_set_value (obj, cf, v);
      <D.28048>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


ves_icall_MonoField_ResolveType (struct MonoReflectionField * ref_field)
{
  int D.28050;
  struct MonoReflectionType * D.28053;
  struct MonoVTable * D.28054;
  struct MonoDomain * D.28055;
  struct MonoError error;
  struct MonoClassField * field;
  struct MonoType * type;

  try
    {
      field = ref_field->field;
      type = mono_field_get_type_checked (field, &error);
      D.28050 = mono_error_ok (&error);
      if (D.28050 == 0) goto <D.28051>; else goto <D.28052>;
      <D.28051>:
      mono_error_raise_exception (&error);
      <D.28052>:
      D.28054 = MEM[(struct MonoObject *)ref_field].vtable;
      D.28055 = D.28054->domain;
      D.28053 = mono_type_get_object (D.28055, type);
      return D.28053;
    }
  finally
    {
      error = {CLOBBER};
    }
}


ves_icall_MonoField_GetValueInternal (struct MonoReflectionField * field, struct MonoObject * obj)
{
  struct MonoVTable * D.28058;
  struct MonoImage * D.28059;
  struct MonoAssembly * D.28060;
  int D.28061;
  struct MonoException * D.28064;
  <unnamed type> D.28065;
  struct MonoObject * D.28068;
  struct MonoClass * fklass;
  struct MonoClassField * cf;
  struct MonoDomain * domain;

  fklass = field->klass;
  cf = field->field;
  D.28058 = MEM[(struct MonoObject *)field].vtable;
  domain = D.28058->domain;
  D.28059 = fklass->image;
  D.28060 = D.28059->assembly;
  D.28061 = D.28060->ref_only;
  if (D.28061 != 0) goto <D.28062>; else goto <D.28063>;
  <D.28062>:
  D.28064 = mono_get_exception_invalid_operation ("It is illegal to get the value on a field on a type loaded using the ReflectionOnly methods.");
  mono_raise_exception (D.28064);
  <D.28063>:
  D.28065 = mono_security_get_mode ();
  if (D.28065 == 1) goto <D.28066>; else goto <D.28067>;
  <D.28066>:
  mono_security_core_clr_ensure_reflection_access_field (cf);
  <D.28067>:
  D.28068 = mono_field_get_value_object (domain, cf, obj);
  return D.28068;
}


ves_icall_MonoField_GetRawConstantValue (struct MonoReflectionField * this)
{
  struct MonoVTable * D.28070;
  struct MonoClass * D.28071;
  int D.28072;
  short unsigned int D.28075;
  signed short D.28076;
  struct MonoException * D.28079;
  struct MonoImage * D.28080;
  unsigned char D.28081;
  unsigned char D.28082;
  struct MonoException * D.28087;
  <unnamed type> def_type.65;
  unsigned char D.28089;
  struct MonoObject * o.66;
  struct MonoObject * o.67;
  struct MonoObject * D.28092;
  struct MonoObject * o;
  struct MonoClassField * field;
  struct MonoClass * klass;
  struct MonoDomain * domain;
  gchar * v;
  MonoTypeEnum def_type;
  const char * def_value;
  struct MonoType * t;
  struct MonoError error;

  try
    {
      o = 0B;
      field = this->field;
      D.28070 = MEM[(struct MonoObject *)this].vtable;
      domain = D.28070->domain;
      D.28071 = field->parent;
      mono_class_init (D.28071);
      t = mono_field_get_type_checked (field, &error);
      D.28072 = mono_error_ok (&error);
      if (D.28072 == 0) goto <D.28073>; else goto <D.28074>;
      <D.28073>:
      mono_error_raise_exception (&error);
      <D.28074>:
      D.28075 = t->attrs;
      D.28076 = (signed short) D.28075;
      if (D.28076 >= 0) goto <D.28077>; else goto <D.28078>;
      <D.28077>:
      D.28079 = mono_get_exception_invalid_operation (0B);
      mono_raise_exception (D.28079);
      <D.28078>:
      D.28071 = field->parent;
      D.28080 = D.28071->image;
      D.28081 = BIT_FIELD_REF <*D.28080, 8, 224>;
      D.28082 = D.28081 & 8;
      if (D.28082 != 0) goto <D.28083>; else goto <D.28084>;
      <D.28083>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "icall.c", 1890);
      <D.28084>:
      def_value = mono_class_get_field_default_value (field, &def_type);
      if (def_value == 0B) goto <D.28085>; else goto <D.28086>;
      <D.28085>:
      D.28087 = mono_get_exception_invalid_operation (0B);
      mono_raise_exception (D.28087);
      <D.28086>:
      def_type.65 = def_type;
      switch (def_type.65) <default: <D.21523>, case 2: <D.21507>, case 3: <D.21510>, case 4: <D.21506>, case 5: <D.21505>, case 6: <D.21509>, case 7: <D.21508>, case 8: <D.21514>, case 9: <D.21513>, case 10: <D.21517>, case 11: <D.21516>, case 12: <D.21515>, case 13: <D.21518>, case 14: <D.21521>, case 18: <D.21522>, case 24: <D.21512>, case 25: <D.21511>>
      <D.21505>:
      <D.21506>:
      <D.21507>:
      <D.21508>:
      <D.21509>:
      <D.21510>:
      <D.21511>:
      <D.21512>:
      <D.21513>:
      <D.21514>:
      <D.21515>:
      <D.21516>:
      <D.21517>:
      <D.21518>:
      {
        struct MonoType * t;

        t = monoeg_malloc0 (16);
        def_type.65 = def_type;
        D.28089 = (unsigned char) def_type.65;
        t->type = D.28089;
        klass = mono_class_from_mono_type (t);
        monoeg_g_free (t);
        o.66 = mono_object_new (domain, klass);
        o = o.66;
        o.67 = o;
        v = o.67 + 16;
        def_type.65 = def_type;
        mono_get_constant_value_from_blob (domain, def_type.65, def_value, v);
        goto <D.21520>;
      }
      <D.21521>:
      <D.21522>:
      def_type.65 = def_type;
      mono_get_constant_value_from_blob (domain, def_type.65, def_value, &o);
      goto <D.21520>;
      <D.21523>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "icall.c", 1930);
      <D.21520>:
      D.28092 = o;
      return D.28092;
    }
  finally
    {
      o = {CLOBBER};
      def_type = {CLOBBER};
      error = {CLOBBER};
    }
}


ves_icall_MonoField_GetParentType (struct MonoReflectionField * field, MonoBoolean declaring)
{
  struct MonoClass * iftmp.68;
  struct MonoClassField * D.28098;
  struct MonoReflectionType * D.28100;
  struct MonoType * D.28101;
  struct MonoVTable * D.28102;
  struct MonoDomain * D.28103;
  struct MonoClass * parent;

  if (declaring != 0) goto <D.28096>; else goto <D.28097>;
  <D.28096>:
  D.28098 = field->field;
  iftmp.68 = D.28098->parent;
  goto <D.28099>;
  <D.28097>:
  iftmp.68 = field->klass;
  <D.28099>:
  parent = iftmp.68;
  D.28101 = &parent->byval_arg;
  D.28102 = MEM[(struct MonoObject *)field].vtable;
  D.28103 = D.28102->domain;
  D.28100 = mono_type_get_object (D.28103, D.28101);
  return D.28100;
}


ves_icall_MonoField_GetFieldOffset (struct MonoReflectionField * field)
{
  struct MonoClassField * D.28105;
  unsigned char D.28106;
  unsigned char D.28107;
  gint32 D.28110;
  int D.28111;
  unsigned int D.28112;
  unsigned int D.28113;
  struct MonoClass * parent;

  D.28105 = field->field;
  parent = D.28105->parent;
  D.28106 = BIT_FIELD_REF <*parent, 8, 256>;
  D.28107 = D.28106 & 4;
  if (D.28107 == 0) goto <D.28108>; else goto <D.28109>;
  <D.28108>:
  mono_class_init (parent);
  <D.28109>:
  D.28105 = field->field;
  D.28111 = D.28105->offset;
  D.28112 = (unsigned int) D.28111;
  D.28113 = D.28112 + 4294967280;
  D.28110 = (gint32) D.28113;
  return D.28110;
}


ves_icall_get_event_info (struct MonoReflectionMonoEvent * event, struct MonoEventInfo * info)
{
  struct MonoVTable * D.28115;
  struct MonoClass * D.28116;
  struct MonoType * D.28117;
  struct MonoReflectionType * D.28118;
  struct MonoReflectionType * * D.28119;
  struct MonoEvent * D.28120;
  struct MonoClass * D.28121;
  struct MonoType * D.28122;
  struct MonoReflectionType * D.28123;
  struct MonoReflectionType * * D.28124;
  const char * D.28125;
  struct MonoString * D.28126;
  struct MonoString * * D.28127;
  unsigned int D.28128;
  struct MonoObject * iftmp.69;
  struct MonoMethod * D.28130;
  struct MonoReflectionMethod * * D.28134;
  struct MonoObject * iftmp.70;
  struct MonoMethod * D.28136;
  struct MonoReflectionMethod * * D.28140;
  struct MonoObject * iftmp.71;
  struct MonoMethod * D.28142;
  struct MonoReflectionMethod * * D.28146;
  struct MonoMethod * * D.28147;
  long unsigned int D.28150;
  long unsigned int D.28151;
  struct MonoMethod * * D.28152;
  struct MonoMethod * D.28153;
  long unsigned int D.28154;
  struct MonoClass * D.28155;
  struct MonoArray * D.28156;
  struct MonoArray * * D.28157;
  long unsigned int D.28158;
  struct MonoArray * D.28159;
  long unsigned int D.28160;
  long unsigned int D.28161;
  struct MonoMethod * * D.28162;
  struct MonoMethod * D.28163;
  struct MonoReflectionMethod * D.28164;
  struct MonoDomain * domain;

  D.28115 = MEM[(struct MonoObject *)event].vtable;
  domain = D.28115->domain;
  D.28116 = event->klass;
  D.28117 = &D.28116->byval_arg;
  D.28118 = mono_type_get_object (domain, D.28117);
  D.28119 = &info->reflected_type;
  mono_gc_wbarrier_generic_store (D.28119, D.28118);
  D.28120 = event->event;
  D.28121 = D.28120->parent;
  D.28122 = &D.28121->byval_arg;
  D.28123 = mono_type_get_object (domain, D.28122);
  D.28124 = &info->declaring_type;
  mono_gc_wbarrier_generic_store (D.28124, D.28123);
  D.28120 = event->event;
  D.28125 = D.28120->name;
  D.28126 = mono_string_new (domain, D.28125);
  D.28127 = &info->name;
  mono_gc_wbarrier_generic_store (D.28127, D.28126);
  D.28120 = event->event;
  D.28128 = D.28120->attrs;
  info->attrs = D.28128;
  D.28120 = event->event;
  D.28130 = D.28120->add;
  if (D.28130 != 0B) goto <D.28131>; else goto <D.28132>;
  <D.28131>:
  D.28120 = event->event;
  D.28130 = D.28120->add;
  iftmp.69 = mono_method_get_object (domain, D.28130, 0B);
  goto <D.28133>;
  <D.28132>:
  iftmp.69 = 0B;
  <D.28133>:
  D.28134 = &info->add_method;
  mono_gc_wbarrier_generic_store (D.28134, iftmp.69);
  D.28120 = event->event;
  D.28136 = D.28120->remove;
  if (D.28136 != 0B) goto <D.28137>; else goto <D.28138>;
  <D.28137>:
  D.28120 = event->event;
  D.28136 = D.28120->remove;
  iftmp.70 = mono_method_get_object (domain, D.28136, 0B);
  goto <D.28139>;
  <D.28138>:
  iftmp.70 = 0B;
  <D.28139>:
  D.28140 = &info->remove_method;
  mono_gc_wbarrier_generic_store (D.28140, iftmp.70);
  D.28120 = event->event;
  D.28142 = D.28120->raise;
  if (D.28142 != 0B) goto <D.28143>; else goto <D.28144>;
  <D.28143>:
  D.28120 = event->event;
  D.28142 = D.28120->raise;
  iftmp.71 = mono_method_get_object (domain, D.28142, 0B);
  goto <D.28145>;
  <D.28144>:
  iftmp.71 = 0B;
  <D.28145>:
  D.28146 = &info->raise_method;
  mono_gc_wbarrier_generic_store (D.28146, iftmp.71);
  D.28120 = event->event;
  D.28147 = D.28120->other;
  if (D.28147 != 0B) goto <D.28148>; else goto <D.28149>;
  <D.28148>:
  {
    int i;
    int n;

    n = 0;
    goto <D.21556>;
    <D.21555>:
    n = n + 1;
    <D.21556>:
    D.28120 = event->event;
    D.28147 = D.28120->other;
    D.28150 = (long unsigned int) n;
    D.28151 = D.28150 * 8;
    D.28152 = D.28147 + D.28151;
    D.28153 = *D.28152;
    if (D.28153 != 0B) goto <D.21555>; else goto <D.21557>;
    <D.21557>:
    D.28154 = (long unsigned int) n;
    D.28155 = mono_defaults.method_info_class;
    D.28156 = mono_array_new (domain, D.28155, D.28154);
    D.28157 = &info->other_methods;
    mono_gc_wbarrier_generic_store (D.28157, D.28156);
    i = 0;
    goto <D.21560>;
    <D.21559>:
    {
      void * * __p;

      D.28158 = (long unsigned int) i;
      D.28159 = info->other_methods;
      __p = mono_array_addr_with_size (D.28159, 8, D.28158);
      D.28120 = event->event;
      D.28147 = D.28120->other;
      D.28160 = (long unsigned int) i;
      D.28161 = D.28160 * 8;
      D.28162 = D.28147 + D.28161;
      D.28163 = *D.28162;
      D.28164 = mono_method_get_object (domain, D.28163, 0B);
      D.28159 = info->other_methods;
      mono_gc_wbarrier_set_arrayref (D.28159, __p, D.28164);
    }
    i = i + 1;
    <D.21560>:
    if (i < n) goto <D.21559>; else goto <D.21561>;
    <D.21561>:
  }
  <D.28149>:
}


ves_icall_InternalInvoke (struct MonoReflectionMethod * method, struct MonoObject * this, struct MonoArray * params, struct MonoException * * exc)
{
  <unnamed type> D.28165;
  short unsigned int D.28168;
  int D.28169;
  int D.28170;
  struct MonoClass * D.28173;
  struct MonoVTable * D.28174;
  struct MonoDomain * D.28175;
  struct MonoVTable * D.28176;
  struct MonoException * D.28179;
  struct MonoObject * D.28180;
  struct MonoObject * D.28183;
  struct MonoClass * D.28186;
  struct MonoImage * D.28187;
  struct MonoException * D.28188;
  unsigned char D.28189;
  unsigned char D.28190;
  int D.21860;
  int iftmp.72;
  int D.21859;
  const char[6] * D.28197;
  unsigned char D.28198;
  int D.28199;
  unsigned char D.28200;
  int D.28201;
  _Bool D.28202;
  _Bool D.28203;
  _Bool D.28204;
  const unsigned char * D.28207;
  unsigned char D.28208;
  int D.28209;
  const unsigned char * D.28210;
  unsigned char D.28211;
  int D.28212;
  _Bool D.28213;
  _Bool D.28214;
  const unsigned char * D.28217;
  unsigned char D.28218;
  int D.28219;
  const unsigned char * D.28220;
  unsigned char D.28221;
  int D.28222;
  _Bool D.28223;
  _Bool D.28224;
  const unsigned char * D.28227;
  unsigned char D.28228;
  int D.28229;
  const unsigned char * D.28230;
  unsigned char D.28231;
  int D.28232;
  const char * D.28234;
  unsigned char D.28237;
  unsigned char D.28238;
  struct MonoException * D.28241;
  struct MonoType * D.28242;
  unsigned char D.28243;
  unsigned char D.28244;
  struct MonoException * D.28247;
  int iftmp.73;
  long unsigned int D.28251;
  short unsigned int D.28253;
  int D.28254;
  struct MonoException * D.28257;
  unsigned int D.28258;
  unsigned int D.28259;
  int D.21869;
  int iftmp.74;
  int D.21868;
  unsigned char D.28265;
  int D.28266;
  _Bool D.28267;
  _Bool D.28268;
  _Bool D.28269;
  const unsigned char * D.28272;
  unsigned char D.28273;
  int D.28274;
  _Bool D.28275;
  _Bool D.28276;
  const unsigned char * D.28279;
  unsigned char D.28280;
  int D.28281;
  _Bool D.28282;
  _Bool D.28283;
  const unsigned char * D.28286;
  unsigned char D.28287;
  int D.28288;
  struct MonoException * D.28294;
  struct MonoAssembly * D.28295;
  int D.28296;
  struct MonoException * D.28299;
  unsigned char D.28300;
  unsigned char D.28301;
  int D.28304;
  struct MonoException * D.28307;
  unsigned char D.28308;
  int D.21878;
  int iftmp.75;
  int D.21877;
  unsigned char D.28314;
  int D.28315;
  _Bool D.28316;
  _Bool D.28317;
  _Bool D.28318;
  const unsigned char * D.28321;
  unsigned char D.28322;
  int D.28323;
  _Bool D.28324;
  _Bool D.28325;
  const unsigned char * D.28328;
  unsigned char D.28329;
  int D.28330;
  _Bool D.28331;
  _Bool D.28332;
  const unsigned char * D.28335;
  unsigned char D.28336;
  int D.28337;
  long unsigned int D.28341;
  long unsigned int D.28342;
  long unsigned int D.28343;
  long unsigned int D.28344;
  long unsigned int D.28345;
  uintptr_t * D.28346;
  long unsigned int D.28347;
  char * D.28348;
  void * D.28349;
  int32_t * D.28350;
  int D.28351;
  long unsigned int D.28352;
  int D.28353;
  int D.28357;
  _Bool D.28358;
  long int D.28359;
  long int D.28360;
  long unsigned int D.28363;
  long unsigned int D.28364;
  struct MonoVTable * D.28365;
  struct MonoDomain * D.28366;
  struct MonoMethod * m;
  struct MonoMethodSignature * sig;
  struct MonoImage * image;
  int pcount;
  void * obj;

  m = method->method;
  sig = mono_method_signature (m);
  obj = this;
  *exc = 0B;
  D.28165 = mono_security_get_mode ();
  if (D.28165 == 1) goto <D.28166>; else goto <D.28167>;
  <D.28166>:
  mono_security_core_clr_ensure_reflection_access_method (m);
  <D.28167>:
  D.28168 = m->flags;
  D.28169 = (int) D.28168;
  D.28170 = D.28169 & 16;
  if (D.28170 == 0) goto <D.28171>; else goto <D.28172>;
  <D.28171>:
  D.28173 = m->klass;
  D.28174 = MEM[(struct MonoObject *)method].vtable;
  D.28175 = D.28174->domain;
  D.28176 = mono_class_vtable_full (D.28175, D.28173, 0);
  if (D.28176 == 0B) goto <D.28177>; else goto <D.28178>;
  <D.28177>:
  D.28173 = m->klass;
  D.28179 = mono_class_get_exception_for_failure (D.28173);
  mono_gc_wbarrier_generic_store (exc, D.28179);
  D.28180 = 0B;
  return D.28180;
  <D.28178>:
  if (this != 0B) goto <D.28181>; else goto <D.28182>;
  <D.28181>:
  D.28173 = m->klass;
  D.28183 = mono_object_isinst (this, D.28173);
  if (D.28183 == 0B) goto <D.28184>; else goto <D.28185>;
  <D.28184>:
  {
    char * this_name;
    char * target_name;
    char * msg;

    D.28186 = mono_object_get_class (this);
    this_name = mono_type_get_full_name (D.28186);
    D.28173 = m->klass;
    target_name = mono_type_get_full_name (D.28173);
    msg = monoeg_g_strdup_printf ("Object of type \'%s\' doesn\'t match target type \'%s\'", this_name, target_name);
    D.28187 = mono_defaults.corlib;
    D.28188 = mono_exception_from_name_msg (D.28187, "System.Reflection", "TargetException", msg);
    mono_gc_wbarrier_generic_store (exc, D.28188);
    monoeg_g_free (msg);
    monoeg_g_free (target_name);
    monoeg_g_free (this_name);
    D.28180 = 0B;
    return D.28180;
  }
  <D.28185>:
  m = mono_object_get_virtual_method (this, m);
  D.28173 = m->klass;
  D.28189 = BIT_FIELD_REF <*D.28173, 8, 256>;
  D.28190 = D.28189 & 8;
  if (D.28190 != 0) goto <D.28191>; else goto <D.28192>;
  <D.28191>:
  obj = mono_object_unbox (this);
  <D.28192>:
  goto <D.28193>;
  <D.28182>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = m->name;
      D.28197 = ".ctor";
      D.28198 = MEM[(const unsigned char *)D.28197];
      D.28199 = (int) D.28198;
      D.28200 = *__s2;
      D.28201 = (int) D.28200;
      __result = D.28199 - D.28201;
      {
        D.28202 = __s2_len != 0;
        D.28203 = __result == 0;
        D.28204 = D.28202 & D.28203;
        if (D.28204 != 0) goto <D.28205>; else goto <D.28206>;
        <D.28205>:
        D.28207 = &MEM[(void *)".ctor" + 1B];
        D.28208 = *D.28207;
        D.28209 = (int) D.28208;
        D.28210 = __s2 + 1;
        D.28211 = *D.28210;
        D.28212 = (int) D.28211;
        __result = D.28209 - D.28212;
        D.28213 = __s2_len > 1;
        D.28203 = __result == 0;
        D.28214 = D.28213 & D.28203;
        if (D.28214 != 0) goto <D.28215>; else goto <D.28216>;
        <D.28215>:
        D.28217 = &MEM[(void *)".ctor" + 2B];
        D.28218 = *D.28217;
        D.28219 = (int) D.28218;
        D.28220 = __s2 + 2;
        D.28221 = *D.28220;
        D.28222 = (int) D.28221;
        __result = D.28219 - D.28222;
        D.28223 = __s2_len > 2;
        D.28203 = __result == 0;
        D.28224 = D.28223 & D.28203;
        if (D.28224 != 0) goto <D.28225>; else goto <D.28226>;
        <D.28225>:
        D.28227 = &MEM[(void *)".ctor" + 3B];
        D.28228 = *D.28227;
        D.28229 = (int) D.28228;
        D.28230 = __s2 + 3;
        D.28231 = *D.28230;
        D.28232 = (int) D.28231;
        __result = D.28229 - D.28232;
        <D.28226>:
        <D.28216>:
        <D.28206>:
      }
      D.21859 = __result;
    }
    iftmp.72 = -D.21859;
    goto <D.28233>;
    <D.28196>:
    D.28234 = m->name;
    iftmp.72 = __builtin_strcmp (D.28234, ".ctor");
    <D.28233>:
    D.21860 = iftmp.72;
  }
  if (D.21860 != 0) goto <D.28235>; else goto <D.28236>;
  <D.28235>:
  D.28237 = BIT_FIELD_REF <*m, 8, 256>;
  D.28238 = D.28237 & 124;
  if (D.28238 == 0) goto <D.28239>; else goto <D.28240>;
  <D.28239>:
  D.28187 = mono_defaults.corlib;
  D.28241 = mono_exception_from_name_msg (D.28187, "System.Reflection", "TargetException", "Non-static method requires a target.");
  mono_gc_wbarrier_generic_store (exc, D.28241);
  D.28180 = 0B;
  return D.28180;
  <D.28240>:
  <D.28236>:
  <D.28193>:
  <D.28172>:
  D.28242 = sig->ret;
  D.28243 = BIT_FIELD_REF <*D.28242, 8, 88>;
  D.28244 = D.28243 & 64;
  if (D.28244 != 0) goto <D.28245>; else goto <D.28246>;
  <D.28245>:
  D.28187 = mono_defaults.corlib;
  D.28247 = mono_exception_from_name_msg (D.28187, "System", "NotSupportedException", "Cannot invoke method returning ByRef type via reflection");
  mono_gc_wbarrier_generic_store (exc, D.28247);
  D.28180 = 0B;
  return D.28180;
  <D.28246>:
  if (params != 0B) goto <D.28249>; else goto <D.28250>;
  <D.28249>:
  D.28251 = mono_array_length (params);
  iftmp.73 = (int) D.28251;
  goto <D.28252>;
  <D.28250>:
  iftmp.73 = 0;
  <D.28252>:
  pcount = iftmp.73;
  D.28253 = sig->param_count;
  D.28254 = (int) D.28253;
  if (D.28254 != pcount) goto <D.28255>; else goto <D.28256>;
  <D.28255>:
  D.28187 = mono_defaults.corlib;
  D.28257 = mono_exception_from_name (D.28187, "System.Reflection", "TargetParameterCountException");
  mono_gc_wbarrier_generic_store (exc, D.28257);
  D.28180 = 0B;
  return D.28180;
  <D.28256>:
  D.28173 = m->klass;
  D.28258 = D.28173->flags;
  D.28259 = D.28258 & 128;
  if (D.28259 != 0) goto <D.28260>; else goto <D.28261>;
  <D.28260>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = m->name;
      D.28197 = ".ctor";
      D.28198 = MEM[(const unsigned char *)D.28197];
      D.28199 = (int) D.28198;
      D.28265 = *__s2;
      D.28266 = (int) D.28265;
      __result = D.28199 - D.28266;
      {
        D.28267 = __s2_len != 0;
        D.28268 = __result == 0;
        D.28269 = D.28267 & D.28268;
        if (D.28269 != 0) goto <D.28270>; else goto <D.28271>;
        <D.28270>:
        D.28207 = &MEM[(void *)".ctor" + 1B];
        D.28208 = *D.28207;
        D.28209 = (int) D.28208;
        D.28272 = __s2 + 1;
        D.28273 = *D.28272;
        D.28274 = (int) D.28273;
        __result = D.28209 - D.28274;
        D.28275 = __s2_len > 1;
        D.28268 = __result == 0;
        D.28276 = D.28275 & D.28268;
        if (D.28276 != 0) goto <D.28277>; else goto <D.28278>;
        <D.28277>:
        D.28217 = &MEM[(void *)".ctor" + 2B];
        D.28218 = *D.28217;
        D.28219 = (int) D.28218;
        D.28279 = __s2 + 2;
        D.28280 = *D.28279;
        D.28281 = (int) D.28280;
        __result = D.28219 - D.28281;
        D.28282 = __s2_len > 2;
        D.28268 = __result == 0;
        D.28283 = D.28282 & D.28268;
        if (D.28283 != 0) goto <D.28284>; else goto <D.28285>;
        <D.28284>:
        D.28227 = &MEM[(void *)".ctor" + 3B];
        D.28228 = *D.28227;
        D.28229 = (int) D.28228;
        D.28286 = __s2 + 3;
        D.28287 = *D.28286;
        D.28288 = (int) D.28287;
        __result = D.28229 - D.28288;
        <D.28285>:
        <D.28278>:
        <D.28271>:
      }
      D.21868 = __result;
    }
    iftmp.74 = -D.21868;
    goto <D.28289>;
    <D.28264>:
    D.28234 = m->name;
    iftmp.74 = __builtin_strcmp (D.28234, ".ctor");
    <D.28289>:
    D.21869 = iftmp.74;
  }
  if (D.21869 == 0) goto <D.28290>; else goto <D.28291>;
  <D.28290>:
  if (this == 0B) goto <D.28292>; else goto <D.28293>;
  <D.28292>:
  D.28187 = mono_defaults.corlib;
  D.28294 = mono_exception_from_name_msg (D.28187, "System.Reflection", "TargetException", "Cannot invoke constructor of an abstract class.");
  mono_gc_wbarrier_generic_store (exc, D.28294);
  D.28180 = 0B;
  return D.28180;
  <D.28293>:
  <D.28291>:
  <D.28261>:
  D.28173 = m->klass;
  image = D.28173->image;
  D.28295 = image->assembly;
  D.28296 = D.28295->ref_only;
  if (D.28296 != 0) goto <D.28297>; else goto <D.28298>;
  <D.28297>:
  D.28299 = mono_get_exception_invalid_operation ("It is illegal to invoke a method on a type loaded using the ReflectionOnly api.");
  mono_gc_wbarrier_generic_store (exc, D.28299);
  D.28180 = 0B;
  return D.28180;
  <D.28298>:
  D.28300 = BIT_FIELD_REF <*image, 8, 224>;
  D.28301 = D.28300 & 8;
  if (D.28301 != 0) goto <D.28302>; else goto <D.28303>;
  <D.28302>:
  D.28304 = MEM[(struct MonoDynamicImage *)image].run;
  if (D.28304 == 0) goto <D.28305>; else goto <D.28306>;
  <D.28305>:
  D.28307 = mono_get_exception_not_supported ("Cannot invoke a method in a dynamic assembly without run access.");
  mono_gc_wbarrier_generic_store (exc, D.28307);
  D.28180 = 0B;
  return D.28180;
  <D.28306>:
  <D.28303>:
  D.28173 = m->klass;
  D.28308 = D.28173->rank;
  if (D.28308 != 0) goto <D.28309>; else goto <D.28310>;
  <D.28309>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = m->name;
      D.28197 = ".ctor";
      D.28198 = MEM[(const unsigned char *)D.28197];
      D.28199 = (int) D.28198;
      D.28314 = *__s2;
      D.28315 = (int) D.28314;
      __result = D.28199 - D.28315;
      {
        D.28316 = __s2_len != 0;
        D.28317 = __result == 0;
        D.28318 = D.28316 & D.28317;
        if (D.28318 != 0) goto <D.28319>; else goto <D.28320>;
        <D.28319>:
        D.28207 = &MEM[(void *)".ctor" + 1B];
        D.28208 = *D.28207;
        D.28209 = (int) D.28208;
        D.28321 = __s2 + 1;
        D.28322 = *D.28321;
        D.28323 = (int) D.28322;
        __result = D.28209 - D.28323;
        D.28324 = __s2_len > 1;
        D.28317 = __result == 0;
        D.28325 = D.28324 & D.28317;
        if (D.28325 != 0) goto <D.28326>; else goto <D.28327>;
        <D.28326>:
        D.28217 = &MEM[(void *)".ctor" + 2B];
        D.28218 = *D.28217;
        D.28219 = (int) D.28218;
        D.28328 = __s2 + 2;
        D.28329 = *D.28328;
        D.28330 = (int) D.28329;
        __result = D.28219 - D.28330;
        D.28331 = __s2_len > 2;
        D.28317 = __result == 0;
        D.28332 = D.28331 & D.28317;
        if (D.28332 != 0) goto <D.28333>; else goto <D.28334>;
        <D.28333>:
        D.28227 = &MEM[(void *)".ctor" + 3B];
        D.28228 = *D.28227;
        D.28229 = (int) D.28228;
        D.28335 = __s2 + 3;
        D.28336 = *D.28335;
        D.28337 = (int) D.28336;
        __result = D.28229 - D.28337;
        <D.28334>:
        <D.28327>:
        <D.28320>:
      }
      D.21877 = __result;
    }
    iftmp.75 = -D.21877;
    goto <D.28338>;
    <D.28313>:
    D.28234 = m->name;
    iftmp.75 = __builtin_strcmp (D.28234, ".ctor");
    <D.28338>:
    D.21878 = iftmp.75;
  }
  if (D.21878 == 0) goto <D.28339>; else goto <D.28340>;
  <D.28339>:
  {
    int i;
    uintptr_t * lengths;
    intptr_t * lower_bounds;

    D.28341 = mono_array_length (params);
    pcount = (int) D.28341;
    D.28342 = (long unsigned int) pcount;
    D.28343 = D.28342 * 8;
    lengths = __builtin_alloca (D.28343);
    i = 0;
    goto <D.21883>;
    <D.21882>:
    D.28344 = (long unsigned int) i;
    D.28345 = D.28344 * 8;
    D.28346 = lengths + D.28345;
    D.28347 = (long unsigned int) i;
    D.28348 = mono_array_addr_with_size (params, 8, D.28347);
    D.28349 = MEM[(void * *)D.28348];
    D.28350 = D.28349 + 16;
    D.28351 = *D.28350;
    D.28352 = (long unsigned int) D.28351;
    *D.28346 = D.28352;
    i = i + 1;
    <D.21883>:
    if (i < pcount) goto <D.21882>; else goto <D.21884>;
    <D.21884>:
    D.28173 = m->klass;
    D.28308 = D.28173->rank;
    D.28353 = (int) D.28308;
    if (D.28353 == pcount) goto <D.28354>; else goto <D.28355>;
    <D.28354>:
    lower_bounds = 0B;
    goto <D.28356>;
    <D.28355>:
    D.28173 = m->klass;
    D.28308 = D.28173->rank;
    D.28353 = (int) D.28308;
    D.28357 = D.28353 * 2;
    D.28358 = D.28357 != pcount;
    D.28359 = (long int) D.28358;
    D.28360 = __builtin_expect (D.28359, 0);
    if (D.28360 != 0) goto <D.28361>; else goto <D.28362>;
    <D.28361>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2835, "pcount == (m->klass->rank * 2)");
    <D.28362>:
    lower_bounds = lengths;
    D.28173 = m->klass;
    D.28308 = D.28173->rank;
    D.28363 = (long unsigned int) D.28308;
    D.28364 = D.28363 * 8;
    lengths = lengths + D.28364;
    <D.28356>:
    D.28173 = m->klass;
    D.28365 = MEM[(struct MonoObject *)params].vtable;
    D.28366 = D.28365->domain;
    D.28180 = mono_array_new_full (D.28366, D.28173, lengths, lower_bounds);
    return D.28180;
  }
  <D.28340>:
  <D.28310>:
  D.28180 = mono_runtime_invoke_array (m, obj, params, 0B);
  return D.28180;
}


ves_icall_MonoMethod_GetGenericMethodDefinition (struct MonoReflectionMethod * method)
{
  struct MonoMethod * D.28368;
  unsigned char D.28369;
  unsigned char D.28370;
  struct MonoReflectionMethod * D.28373;
  unsigned char D.28374;
  unsigned char D.28377;
  unsigned char D.28378;
  struct MonoClass * D.28381;
  struct MonoImage * D.28382;
  unsigned char D.28383;
  unsigned char D.28384;
  struct MonoGHashTable * D.28387;
  struct MonoGenericInst * D.28390;
  struct MonoGenericContext * D.28393;
  struct MonoGenericContext * D.28396;
  struct MonoVTable * D.28397;
  struct MonoDomain * D.28398;
  struct MonoMethodInflated * imethod;
  struct MonoMethod * result;

  D.28368 = method->method;
  D.28369 = BIT_FIELD_REF <*D.28368, 8, 264>;
  D.28370 = D.28369 & 8;
  if (D.28370 != 0) goto <D.28371>; else goto <D.28372>;
  <D.28371>:
  D.28373 = method;
  return D.28373;
  <D.28372>:
  D.28368 = method->method;
  D.28369 = BIT_FIELD_REF <*D.28368, 8, 264>;
  D.28374 = D.28369 & 16;
  if (D.28374 == 0) goto <D.28375>; else goto <D.28376>;
  <D.28375>:
  D.28373 = 0B;
  return D.28373;
  <D.28376>:
  imethod = method->method;
  result = imethod->declaring;
  D.28377 = BIT_FIELD_REF <*result, 8, 264>;
  D.28378 = D.28377 & 8;
  if (D.28378 == 0) goto <D.28379>; else goto <D.28380>;
  <D.28379>:
  D.28373 = 0B;
  return D.28373;
  <D.28380>:
  D.28368 = method->method;
  D.28381 = D.28368->klass;
  D.28382 = D.28381->image;
  D.28383 = BIT_FIELD_REF <*D.28382, 8, 224>;
  D.28384 = D.28383 & 8;
  if (D.28384 != 0) goto <D.28385>; else goto <D.28386>;
  <D.28385>:
  {
    struct MonoDynamicImage * image;
    struct MonoReflectionMethod * res;

    D.28368 = method->method;
    D.28381 = D.28368->klass;
    image = D.28381->image;
    mono_image_lock (image);
    D.28387 = image->generic_def_objects;
    res = mono_g_hash_table_lookup (D.28387, imethod);
    mono_image_unlock (image);
    if (res != 0B) goto <D.28388>; else goto <D.28389>;
    <D.28388>:
    D.28373 = res;
    return D.28373;
    <D.28389>:
  }
  <D.28386>:
  D.28390 = imethod->context.class_inst;
  if (D.28390 != 0B) goto <D.28391>; else goto <D.28392>;
  <D.28391>:
  {
    struct MonoClass * klass;

    klass = MEM[(struct MonoMethod *)imethod].klass;
    D.28393 = mono_class_get_context (klass);
    if (D.28393 != 0B) goto <D.28394>; else goto <D.28395>;
    <D.28394>:
    D.28396 = mono_class_get_context (klass);
    result = mono_class_inflate_generic_method_full (result, klass, D.28396);
    <D.28395>:
  }
  <D.28392>:
  D.28397 = MEM[(struct MonoObject *)method].vtable;
  D.28398 = D.28397->domain;
  D.28373 = mono_method_get_object (D.28398, result, 0B);
  return D.28373;
}


ves_icall_System_Reflection_Module_ResolveTypeToken (struct MonoImage * image, guint32 token, struct MonoArray * type_args, struct MonoArray * method_args, MonoResolveTokenError * error)
{
  unsigned int D.28400;
  int token.76;
  unsigned int table.77;
  unsigned int D.28403;
  _Bool D.28404;
  _Bool D.28405;
  _Bool D.28406;
  struct MonoType * D.28409;
  unsigned char D.28410;
  unsigned char D.28411;
  struct MonoType * iftmp.78;
  struct MonoType * iftmp.79;
  <unnamed-unsigned:24> D.28427;
  int D.28428;
  struct MonoLoaderError * D.28429;
  struct MonoLoaderError * D.28432;
  struct MonoException * D.28433;
  struct MonoClass * klass;
  int table;
  int index;
  struct MonoGenericContext context;

  try
    {
      D.28400 = token >> 24;
      table = (int) D.28400;
      token.76 = (int) token;
      index = token.76 & 16777215;
      *error = 2;
      table.77 = (unsigned int) table;
      D.28403 = table.77 + 4294967295;
      D.28404 = D.28403 > 1;
      D.28405 = table != 27;
      D.28406 = D.28404 & D.28405;
      if (D.28406 != 0) goto <D.28407>; else goto <D.28408>;
      <D.28407>:
      *error = 1;
      D.28409 = 0B;
      return D.28409;
      <D.28408>:
      D.28410 = BIT_FIELD_REF <*image, 8, 224>;
      D.28411 = D.28410 & 8;
      if (D.28411 != 0) goto <D.28412>; else goto <D.28413>;
      <D.28412>:
      table.77 = (unsigned int) table;
      D.28403 = table.77 + 4294967295;
      if (D.28403 <= 1) goto <D.28414>; else goto <D.28415>;
      <D.28414>:
      klass = mono_lookup_dynamic_token_class (image, token, 0, 0B, 0B);
      if (klass != 0B) goto <D.28417>; else goto <D.28418>;
      <D.28417>:
      iftmp.78 = &klass->byval_arg;
      goto <D.28419>;
      <D.28418>:
      iftmp.78 = 0B;
      <D.28419>:
      D.28409 = iftmp.78;
      return D.28409;
      <D.28415>:
      init_generic_context_from_args (&context, type_args, method_args);
      klass = mono_lookup_dynamic_token_class (image, token, 0, 0B, &context);
      if (klass != 0B) goto <D.28421>; else goto <D.28422>;
      <D.28421>:
      iftmp.79 = &klass->byval_arg;
      goto <D.28423>;
      <D.28422>:
      iftmp.79 = 0B;
      <D.28423>:
      D.28409 = iftmp.79;
      return D.28409;
      <D.28413>:
      if (index <= 0) goto <D.28424>; else goto <D.28426>;
      <D.28426>:
      D.28427 = image->tables[table].rows;
      D.28428 = (int) D.28427;
      if (D.28428 < index) goto <D.28424>; else goto <D.28425>;
      <D.28424>:
      *error = 0;
      D.28409 = 0B;
      return D.28409;
      <D.28425>:
      init_generic_context_from_args (&context, type_args, method_args);
      klass = mono_class_get_full (image, token, &context);
      D.28429 = mono_loader_get_last_error ();
      if (D.28429 != 0B) goto <D.28430>; else goto <D.28431>;
      <D.28430>:
      D.28432 = mono_loader_get_last_error ();
      D.28433 = mono_loader_error_prepare_exception (D.28432);
      mono_raise_exception (D.28433);
      <D.28431>:
      if (klass != 0B) goto <D.28434>; else goto <D.28435>;
      <D.28434>:
      D.28409 = &klass->byval_arg;
      return D.28409;
      <D.28435>:
      D.28409 = 0B;
      return D.28409;
    }
  finally
    {
      context = {CLOBBER};
    }
}


init_generic_context_from_args (struct MonoGenericContext * context, struct MonoArray * type_args, struct MonoArray * method_args)
{
  char * D.28440;
  long unsigned int D.28441;
  int D.28442;
  struct MonoGenericInst * D.28443;
  char * D.28447;
  long unsigned int D.28448;
  int D.28449;
  struct MonoGenericInst * D.28450;

  if (type_args != 0B) goto <D.28438>; else goto <D.28439>;
  <D.28438>:
  D.28440 = mono_array_addr_with_size (type_args, 8, 0);
  D.28441 = mono_array_length (type_args);
  D.28442 = (int) D.28441;
  D.28443 = mono_metadata_get_generic_inst (D.28442, D.28440);
  context->class_inst = D.28443;
  goto <D.28444>;
  <D.28439>:
  context->class_inst = 0B;
  <D.28444>:
  if (method_args != 0B) goto <D.28445>; else goto <D.28446>;
  <D.28445>:
  D.28447 = mono_array_addr_with_size (method_args, 8, 0);
  D.28448 = mono_array_length (method_args);
  D.28449 = (int) D.28448;
  D.28450 = mono_metadata_get_generic_inst (D.28449, D.28447);
  context->method_inst = D.28450;
  goto <D.28451>;
  <D.28446>:
  context->method_inst = 0B;
  <D.28451>:
}


ves_icall_System_Reflection_Module_ResolveStringToken (struct MonoImage * image, guint32 token, MonoResolveTokenError * error)
{
  int token.80;
  unsigned int D.28453;
  struct MonoString * D.28456;
  unsigned char D.28457;
  unsigned char D.28458;
  unsigned int index.81;
  unsigned int D.28465;
  unsigned int index.82;
  struct MonoDomain * D.28467;
  int index;

  token.80 = (int) token;
  index = token.80 & 16777215;
  *error = 2;
  D.28453 = token & 4278190080;
  if (D.28453 != 1879048192) goto <D.28454>; else goto <D.28455>;
  <D.28454>:
  *error = 1;
  D.28456 = 0B;
  return D.28456;
  <D.28455>:
  D.28457 = BIT_FIELD_REF <*image, 8, 224>;
  D.28458 = D.28457 & 8;
  if (D.28458 != 0) goto <D.28459>; else goto <D.28460>;
  <D.28459>:
  D.28456 = mono_lookup_dynamic_token_class (image, token, 0, 0B, 0B);
  return D.28456;
  <D.28460>:
  if (index <= 0) goto <D.28461>; else goto <D.28463>;
  <D.28463>:
  index.81 = (unsigned int) index;
  D.28465 = image->heap_us.size;
  if (index.81 >= D.28465) goto <D.28461>; else goto <D.28462>;
  <D.28461>:
  *error = 0;
  D.28456 = 0B;
  return D.28456;
  <D.28462>:
  index.82 = (unsigned int) index;
  D.28467 = mono_domain_get ();
  D.28456 = mono_ldstr (D.28467, image, index.82);
  return D.28456;
}


ves_icall_System_Reflection_Module_ResolveSignature (struct MonoImage * image, guint32 token, MonoResolveTokenError * error)
{
  unsigned int D.28469;
  int token.83;
  struct MonoArray * D.28473;
  unsigned char D.28474;
  unsigned char D.28475;
  struct MonoTableInfo * D.28481;
  <unnamed-unsigned:24> D.28482;
  int D.28483;
  int D.28484;
  const struct MonoTableInfo * D.28485;
  const char * ptr.84;
  const char * ptr.85;
  long unsigned int D.28488;
  struct MonoClass * D.28489;
  struct MonoDomain * D.28490;
  long unsigned int D.28491;
  char * D.28492;
  int table;
  int idx;
  struct MonoTableInfo * tables;
  guint32 sig;
  guint32 len;
  const char * ptr;
  struct MonoArray * res;

  try
    {
      D.28469 = token >> 24;
      table = (int) D.28469;
      token.83 = (int) token;
      idx = token.83 & 16777215;
      tables = &image->tables;
      *error = 0;
      if (table != 17) goto <D.28471>; else goto <D.28472>;
      <D.28471>:
      D.28473 = 0B;
      return D.28473;
      <D.28472>:
      D.28474 = BIT_FIELD_REF <*image, 8, 224>;
      D.28475 = D.28474 & 8;
      if (D.28475 != 0) goto <D.28476>; else goto <D.28477>;
      <D.28476>:
      D.28473 = 0B;
      return D.28473;
      <D.28477>:
      if (idx == 0) goto <D.28478>; else goto <D.28480>;
      <D.28480>:
      D.28481 = tables + 272;
      D.28482 = D.28481->rows;
      D.28483 = (int) D.28482;
      if (D.28483 < idx) goto <D.28478>; else goto <D.28479>;
      <D.28478>:
      D.28473 = 0B;
      return D.28473;
      <D.28479>:
      D.28484 = idx + -1;
      D.28485 = tables + 272;
      sig = mono_metadata_decode_row_col (D.28485, D.28484, 0);
      ptr.84 = mono_metadata_blob_heap (image, sig);
      ptr = ptr.84;
      ptr.85 = ptr;
      len = mono_metadata_decode_blob_size (ptr.85, &ptr);
      D.28488 = (long unsigned int) len;
      D.28489 = mono_defaults.byte_class;
      D.28490 = mono_domain_get ();
      res = mono_array_new (D.28490, D.28489, D.28488);
      D.28491 = (long unsigned int) len;
      ptr.85 = ptr;
      D.28492 = mono_array_addr_with_size (res, 1, 0);
      memcpy (D.28492, ptr.85, D.28491);
      D.28473 = res;
      return D.28473;
    }
  finally
    {
      ptr = {CLOBBER};
    }
}


ves_icall_System_Reflection_Module_ResolveMethodToken (struct MonoImage * image, guint32 token, struct MonoArray * type_args, struct MonoArray * method_args, MonoResolveTokenError * error)
{
  unsigned int D.28495;
  int token.86;
  _Bool D.28497;
  _Bool D.28498;
  _Bool D.28499;
  struct MonoMethod * D.28504;
  unsigned char D.28505;
  unsigned char D.28506;
  int D.28513;
  <unnamed-unsigned:24> D.28519;
  int D.28520;
  int D.28523;
  struct MonoLoaderError * D.28526;
  struct MonoLoaderError * D.28529;
  struct MonoException * D.28530;
  int table;
  int index;
  struct MonoGenericContext context;
  struct MonoMethod * method;

  try
    {
      D.28495 = token >> 24;
      table = (int) D.28495;
      token.86 = (int) token;
      index = token.86 & 16777215;
      *error = 2;
      D.28497 = table != 6;
      D.28498 = table != 43;
      D.28499 = D.28497 & D.28498;
      if (D.28499 != 0) goto <D.28500>; else goto <D.28501>;
      <D.28500>:
      if (table != 10) goto <D.28502>; else goto <D.28503>;
      <D.28502>:
      *error = 1;
      D.28504 = 0B;
      return D.28504;
      <D.28503>:
      <D.28501>:
      D.28505 = BIT_FIELD_REF <*image, 8, 224>;
      D.28506 = D.28505 & 8;
      if (D.28506 != 0) goto <D.28507>; else goto <D.28508>;
      <D.28507>:
      if (table == 6) goto <D.28509>; else goto <D.28510>;
      <D.28509>:
      D.28504 = mono_lookup_dynamic_token_class (image, token, 0, 0B, 0B);
      return D.28504;
      <D.28510>:
      if (table == 10) goto <D.28511>; else goto <D.28512>;
      <D.28511>:
      D.28513 = mono_memberref_is_method (image, token);
      if (D.28513 == 0) goto <D.28514>; else goto <D.28515>;
      <D.28514>:
      *error = 1;
      D.28504 = 0B;
      return D.28504;
      <D.28515>:
      <D.28512>:
      init_generic_context_from_args (&context, type_args, method_args);
      D.28504 = mono_lookup_dynamic_token_class (image, token, 0, 0B, &context);
      return D.28504;
      <D.28508>:
      if (index <= 0) goto <D.28516>; else goto <D.28518>;
      <D.28518>:
      D.28519 = image->tables[table].rows;
      D.28520 = (int) D.28519;
      if (D.28520 < index) goto <D.28516>; else goto <D.28517>;
      <D.28516>:
      *error = 0;
      D.28504 = 0B;
      return D.28504;
      <D.28517>:
      if (table == 10) goto <D.28521>; else goto <D.28522>;
      <D.28521>:
      D.28523 = mono_memberref_is_method (image, token);
      if (D.28523 == 0) goto <D.28524>; else goto <D.28525>;
      <D.28524>:
      *error = 1;
      D.28504 = 0B;
      return D.28504;
      <D.28525>:
      <D.28522>:
      init_generic_context_from_args (&context, type_args, method_args);
      method = mono_get_method_full (image, token, 0B, &context);
      D.28526 = mono_loader_get_last_error ();
      if (D.28526 != 0B) goto <D.28527>; else goto <D.28528>;
      <D.28527>:
      D.28529 = mono_loader_get_last_error ();
      D.28530 = mono_loader_error_prepare_exception (D.28529);
      mono_raise_exception (D.28530);
      <D.28528>:
      D.28504 = method;
      return D.28504;
    }
  finally
    {
      context = {CLOBBER};
    }
}


mono_memberref_is_method (struct MonoImage * image, guint32 token)
{
  unsigned char D.28533;
  unsigned char D.28534;
  unsigned int D.28537;
  unsigned int D.28538;
  int D.28539;
  struct MonoTableInfo * D.28540;
  unsigned int D.28541;
  const char * sig.87;
  const char * sig.88;
  gboolean D.28544;
  char D.28545;
  _Bool D.28546;
  void * D.28547;
  struct MonoClass * D.28550;
  struct MonoClass * handle_class.89;
  _Bool D.28552;

  D.28533 = BIT_FIELD_REF <*image, 8, 224>;
  D.28534 = D.28533 & 8;
  if (D.28534 == 0) goto <D.28535>; else goto <D.28536>;
  <D.28535>:
  {
    guint32 cols[3];
    const char * sig;

    try
      {
        D.28537 = token & 16777215;
        D.28538 = D.28537 + 4294967295;
        D.28539 = (int) D.28538;
        D.28540 = &image->tables[10];
        mono_metadata_decode_row (D.28540, D.28539, &cols, 3);
        D.28541 = cols[2];
        sig.87 = mono_metadata_blob_heap (image, D.28541);
        sig = sig.87;
        sig.88 = sig;
        mono_metadata_decode_blob_size (sig.88, &sig);
        sig.88 = sig;
        D.28545 = *sig.88;
        D.28546 = D.28545 != 6;
        D.28544 = (gboolean) D.28546;
        return D.28544;
      }
    finally
      {
        cols = {CLOBBER};
        sig = {CLOBBER};
      }
  }
  <D.28536>:
  {
    struct MonoClass * handle_class;

    try
      {
        D.28547 = mono_lookup_dynamic_token_class (image, token, 0, &handle_class, 0B);
        if (D.28547 == 0B) goto <D.28548>; else goto <D.28549>;
        <D.28548>:
        D.28544 = 0;
        return D.28544;
        <D.28549>:
        D.28550 = mono_defaults.methodhandle_class;
        handle_class.89 = handle_class;
        D.28552 = D.28550 == handle_class.89;
        D.28544 = (gboolean) D.28552;
        return D.28544;
      }
    finally
      {
        handle_class = {CLOBBER};
      }
  }
}


ves_icall_System_Reflection_Module_ResolveMemberToken (struct MonoImage * image, guint32 token, struct MonoArray * type_args, struct MonoArray * method_args, MonoResolveTokenError * error)
{
  unsigned int D.28556;
  struct MonoObject * D.28559;
  struct MonoDomain * D.28560;
  struct MonoClass * D.28563;
  struct MonoDomain * D.28564;
  struct MonoClass * D.28567;
  struct MonoDomain * D.28568;
  int D.28569;
  struct MonoClass * D.28574;
  struct MonoDomain * D.28575;
  struct MonoClass * D.28578;
  struct MonoDomain * D.28579;
  int table;

  D.28556 = token >> 24;
  table = (int) D.28556;
  *error = 2;
  switch (table) <default: <D.23017>, case 1: <D.23006>, case 2: <D.23005>, case 4: <D.23012>, case 6: <D.23009>, case 10: <D.23014>, case 27: <D.23007>, case 43: <D.23010>>
  <D.23005>:
  <D.23006>:
  <D.23007>:
  {
    struct MonoType * t;

    t = ves_icall_System_Reflection_Module_ResolveTypeToken (image, token, type_args, method_args, error);
    if (t != 0B) goto <D.28557>; else goto <D.28558>;
    <D.28557>:
    D.28560 = mono_domain_get ();
    D.28559 = mono_type_get_object (D.28560, t);
    return D.28559;
    <D.28558>:
    D.28559 = 0B;
    return D.28559;
  }
  <D.23009>:
  <D.23010>:
  {
    struct MonoMethod * m;

    m = ves_icall_System_Reflection_Module_ResolveMethodToken (image, token, type_args, method_args, error);
    if (m != 0B) goto <D.28561>; else goto <D.28562>;
    <D.28561>:
    D.28563 = m->klass;
    D.28564 = mono_domain_get ();
    D.28559 = mono_method_get_object (D.28564, m, D.28563);
    return D.28559;
    <D.28562>:
    D.28559 = 0B;
    return D.28559;
  }
  <D.23012>:
  {
    struct MonoClassField * f;

    f = ves_icall_System_Reflection_Module_ResolveFieldToken (image, token, type_args, method_args, error);
    if (f != 0B) goto <D.28565>; else goto <D.28566>;
    <D.28565>:
    D.28567 = f->parent;
    D.28568 = mono_domain_get ();
    D.28559 = mono_field_get_object (D.28568, D.28567, f);
    return D.28559;
    <D.28566>:
    D.28559 = 0B;
    return D.28559;
  }
  <D.23014>:
  D.28569 = mono_memberref_is_method (image, token);
  if (D.28569 != 0) goto <D.28570>; else goto <D.28571>;
  <D.28570>:
  {
    struct MonoMethod * m;

    m = ves_icall_System_Reflection_Module_ResolveMethodToken (image, token, type_args, method_args, error);
    if (m != 0B) goto <D.28572>; else goto <D.28573>;
    <D.28572>:
    D.28574 = m->klass;
    D.28575 = mono_domain_get ();
    D.28559 = mono_method_get_object (D.28575, m, D.28574);
    return D.28559;
    <D.28573>:
    D.28559 = 0B;
    return D.28559;
  }
  <D.28571>:
  {
    struct MonoClassField * f;

    f = ves_icall_System_Reflection_Module_ResolveFieldToken (image, token, type_args, method_args, error);
    if (f != 0B) goto <D.28576>; else goto <D.28577>;
    <D.28576>:
    D.28578 = f->parent;
    D.28579 = mono_domain_get ();
    D.28559 = mono_field_get_object (D.28579, D.28578, f);
    return D.28559;
    <D.28577>:
    D.28559 = 0B;
    return D.28559;
  }
  <D.23017>:
  *error = 1;
  D.28559 = 0B;
  return D.28559;
}


ves_icall_System_Reflection_Module_ResolveFieldToken (struct MonoImage * image, guint32 token, struct MonoArray * type_args, struct MonoArray * method_args, MonoResolveTokenError * error)
{
  unsigned int D.28581;
  int token.90;
  _Bool D.28583;
  _Bool D.28584;
  _Bool D.28585;
  struct MonoClassField * D.28588;
  unsigned char D.28589;
  unsigned char D.28590;
  int D.28595;
  <unnamed-unsigned:24> D.28601;
  int D.28602;
  int D.28605;
  struct MonoLoaderError * D.28608;
  struct MonoLoaderError * D.28611;
  struct MonoException * D.28612;
  struct MonoClass * klass;
  int table;
  int index;
  struct MonoGenericContext context;
  struct MonoClassField * field;

  try
    {
      D.28581 = token >> 24;
      table = (int) D.28581;
      token.90 = (int) token;
      index = token.90 & 16777215;
      *error = 2;
      D.28583 = table != 4;
      D.28584 = table != 10;
      D.28585 = D.28583 & D.28584;
      if (D.28585 != 0) goto <D.28586>; else goto <D.28587>;
      <D.28586>:
      *error = 1;
      D.28588 = 0B;
      return D.28588;
      <D.28587>:
      D.28589 = BIT_FIELD_REF <*image, 8, 224>;
      D.28590 = D.28589 & 8;
      if (D.28590 != 0) goto <D.28591>; else goto <D.28592>;
      <D.28591>:
      if (table == 4) goto <D.28593>; else goto <D.28594>;
      <D.28593>:
      D.28588 = mono_lookup_dynamic_token_class (image, token, 0, 0B, 0B);
      return D.28588;
      <D.28594>:
      D.28595 = mono_memberref_is_method (image, token);
      if (D.28595 != 0) goto <D.28596>; else goto <D.28597>;
      <D.28596>:
      *error = 1;
      D.28588 = 0B;
      return D.28588;
      <D.28597>:
      init_generic_context_from_args (&context, type_args, method_args);
      D.28588 = mono_lookup_dynamic_token_class (image, token, 0, 0B, &context);
      return D.28588;
      <D.28592>:
      if (index <= 0) goto <D.28598>; else goto <D.28600>;
      <D.28600>:
      D.28601 = image->tables[table].rows;
      D.28602 = (int) D.28601;
      if (D.28602 < index) goto <D.28598>; else goto <D.28599>;
      <D.28598>:
      *error = 0;
      D.28588 = 0B;
      return D.28588;
      <D.28599>:
      if (table == 10) goto <D.28603>; else goto <D.28604>;
      <D.28603>:
      D.28605 = mono_memberref_is_method (image, token);
      if (D.28605 != 0) goto <D.28606>; else goto <D.28607>;
      <D.28606>:
      *error = 1;
      D.28588 = 0B;
      return D.28588;
      <D.28607>:
      <D.28604>:
      init_generic_context_from_args (&context, type_args, method_args);
      field = mono_field_from_token (image, token, &klass, &context);
      D.28608 = mono_loader_get_last_error ();
      if (D.28608 != 0B) goto <D.28609>; else goto <D.28610>;
      <D.28609>:
      D.28611 = mono_loader_get_last_error ();
      D.28612 = mono_loader_error_prepare_exception (D.28611);
      mono_raise_exception (D.28612);
      <D.28610>:
      D.28588 = field;
      return D.28588;
    }
  finally
    {
      klass = {CLOBBER};
      context = {CLOBBER};
    }
}


ves_icall_System_Reflection_Module_InternalGetTypes (struct MonoReflectionModule * module)
{
  struct MonoImage * D.28615;
  struct MonoArray * D.28618;
  struct MonoClass * D.28619;
  struct MonoVTable * D.28620;
  struct MonoDomain * D.28621;
  long unsigned int D.28622;
  struct MonoArray * exceptions.91;
  char * D.28624;
  long unsigned int D.28627;
  struct MonoArray * exceptions;
  int i;

  try
    {
      D.28615 = module->image;
      if (D.28615 == 0B) goto <D.28616>; else goto <D.28617>;
      <D.28616>:
      D.28619 = mono_defaults.monotype_class;
      D.28620 = MEM[(struct MonoObject *)module].vtable;
      D.28621 = D.28620->domain;
      D.28618 = mono_array_new (D.28621, D.28619, 0);
      return D.28618;
      <D.28617>:
      {
        struct MonoArray * res;

        D.28615 = module->image;
        D.28620 = MEM[(struct MonoObject *)module].vtable;
        D.28621 = D.28620->domain;
        res = mono_module_get_types (D.28621, D.28615, &exceptions, 0);
        i = 0;
        goto <D.22943>;
        <D.22942>:
        {
          struct MonoException * ex;

          D.28622 = (long unsigned int) i;
          exceptions.91 = exceptions;
          D.28624 = mono_array_addr_with_size (exceptions.91, 8, D.28622);
          ex = MEM[(struct MonoException * *)D.28624];
          if (ex != 0B) goto <D.28625>; else goto <D.28626>;
          <D.28625>:
          mono_raise_exception (ex);
          <D.28626>:
        }
        i = i + 1;
        <D.22943>:
        D.28622 = (long unsigned int) i;
        exceptions.91 = exceptions;
        D.28627 = mono_array_length (exceptions.91);
        if (D.28622 < D.28627) goto <D.22942>; else goto <D.22944>;
        <D.22944>:
        D.28618 = res;
        return D.28618;
      }
    }
  finally
    {
      exceptions = {CLOBBER};
    }
}


mono_module_get_types (struct MonoDomain * domain, struct MonoImage * image, struct MonoArray * * exceptions, MonoBoolean exportedOnly)
{
  unsigned int D.28632;
  <unnamed-unsigned:24> D.28635;
  int D.28636;
  long unsigned int D.28638;
  struct MonoClass * D.28639;
  struct MonoClass * D.28640;
  struct MonoArray * D.28641;
  int D.28645;
  int D.28646;
  unsigned int D.28647;
  struct MonoType * D.28650;
  struct MonoReflectionType * D.28651;
  _Bool D.28653;
  long int D.28654;
  long int D.28655;
  struct MonoArray * D.28658;
  struct MonoLoaderError * D.28659;
  struct MonoArray * D.28662;
  struct MonoArray * res;
  struct MonoClass * klass;
  struct MonoTableInfo * tdef;
  int i;
  int count;
  guint32 attrs;
  guint32 visibility;

  tdef = &image->tables[2];
  if (exportedOnly != 0) goto <D.28630>; else goto <D.28631>;
  <D.28630>:
  count = 0;
  i = 1;
  goto <D.22841>;
  <D.22840>:
  attrs = mono_metadata_decode_row_col (tdef, i, 0);
  visibility = attrs & 7;
  D.28632 = visibility + 4294967295;
  if (D.28632 <= 1) goto <D.28633>; else goto <D.28634>;
  <D.28633>:
  count = count + 1;
  <D.28634>:
  i = i + 1;
  <D.22841>:
  D.28635 = tdef->rows;
  D.28636 = (int) D.28635;
  if (D.28636 > i) goto <D.22840>; else goto <D.22842>;
  <D.22842>:
  goto <D.28637>;
  <D.28631>:
  D.28635 = tdef->rows;
  D.28636 = (int) D.28635;
  count = D.28636 + -1;
  <D.28637>:
  D.28638 = (long unsigned int) count;
  D.28639 = mono_defaults.monotype_class;
  res = mono_array_new (domain, D.28639, D.28638);
  D.28638 = (long unsigned int) count;
  D.28640 = mono_defaults.exception_class;
  D.28641 = mono_array_new (domain, D.28640, D.28638);
  *exceptions = D.28641;
  count = 0;
  i = 1;
  goto <D.22848>;
  <D.22847>:
  attrs = mono_metadata_decode_row_col (tdef, i, 0);
  visibility = attrs & 7;
  if (exportedOnly == 0) goto <D.28642>; else goto <D.28644>;
  <D.28644>:
  D.28632 = visibility + 4294967295;
  if (D.28632 <= 1) goto <D.28642>; else goto <D.28643>;
  <D.28642>:
  D.28645 = i + 1;
  D.28646 = D.28645 | 33554432;
  D.28647 = (unsigned int) D.28646;
  klass = mono_class_get (image, D.28647);
  if (klass != 0B) goto <D.28648>; else goto <D.28649>;
  <D.28648>:
  {
    void * * __p;

    D.28638 = (long unsigned int) count;
    __p = mono_array_addr_with_size (res, 8, D.28638);
    D.28650 = &klass->byval_arg;
    D.28651 = mono_type_get_object (domain, D.28650);
    mono_gc_wbarrier_set_arrayref (res, __p, D.28651);
  }
  goto <D.28652>;
  <D.28649>:
  {
    struct MonoLoaderError * error;
    struct MonoException * ex;

    error = mono_loader_get_last_error ();
    D.28653 = error == 0B;
    D.28654 = (long int) D.28653;
    D.28655 = __builtin_expect (D.28654, 0);
    if (D.28655 != 0) goto <D.28656>; else goto <D.28657>;
    <D.28656>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 5142, "error != NULL");
    <D.28657>:
    ex = mono_loader_error_prepare_exception (error);
    {
      void * * __p;

      D.28638 = (long unsigned int) count;
      D.28658 = *exceptions;
      __p = mono_array_addr_with_size (D.28658, 8, D.28638);
      D.28658 = *exceptions;
      mono_gc_wbarrier_set_arrayref (D.28658, __p, ex);
    }
  }
  <D.28652>:
  D.28659 = mono_loader_get_last_error ();
  if (D.28659 != 0B) goto <D.28660>; else goto <D.28661>;
  <D.28660>:
  mono_loader_clear_error ();
  <D.28661>:
  count = count + 1;
  <D.28643>:
  i = i + 1;
  <D.22848>:
  D.28635 = tdef->rows;
  D.28636 = (int) D.28635;
  if (D.28636 > i) goto <D.22847>; else goto <D.22849>;
  <D.22849>:
  D.28662 = res;
  return D.28662;
}


ves_icall_System_Reflection_Module_GetPEKind (struct MonoImage * image, gint32 * pe_kind, gint32 * machine)
{
  unsigned char D.28664;
  unsigned char D.28665;
  unsigned int D.28668;
  int D.28669;
  unsigned int D.28670;
  int D.28671;
  void * D.28673;
  unsigned int D.28674;
  int D.28675;
  int D.28676;
  short unsigned int D.28677;
  int D.28678;

  D.28664 = BIT_FIELD_REF <*image, 8, 224>;
  D.28665 = D.28664 & 8;
  if (D.28665 != 0) goto <D.28666>; else goto <D.28667>;
  <D.28666>:
  {
    struct MonoDynamicImage * dyn;

    dyn = image;
    D.28668 = dyn->pe_kind;
    D.28669 = (int) D.28668;
    *pe_kind = D.28669;
    D.28670 = dyn->machine;
    D.28671 = (int) D.28670;
    *machine = D.28671;
  }
  goto <D.28672>;
  <D.28667>:
  D.28673 = image->image_info;
  D.28674 = MEM[(struct MonoCLIImageInfo *)D.28673].cli_cli_header.ch_flags;
  D.28675 = (int) D.28674;
  D.28676 = D.28675 & 3;
  *pe_kind = D.28676;
  D.28673 = image->image_info;
  D.28677 = MEM[(struct MonoCLIImageInfo *)D.28673].cli_header.coff.coff_machine;
  D.28678 = (int) D.28677;
  *machine = D.28678;
  <D.28672>:
}


ves_icall_System_Reflection_Module_GetMDStreamVersion (struct MonoImage * image)
{
  gint32 D.28679;
  short int D.28680;
  int D.28681;
  int D.28682;
  short int D.28683;
  int D.28684;

  D.28680 = image->md_version_major;
  D.28681 = (int) D.28680;
  D.28682 = D.28681 << 16;
  D.28683 = image->md_version_minor;
  D.28684 = (int) D.28683;
  D.28679 = D.28682 | D.28684;
  return D.28679;
}


ves_icall_System_Reflection_Module_GetHINSTANCE (struct MonoReflectionModule * module)
{
  void * D.28686;

  D.28686 = -1B;
  return D.28686;
}


ves_icall_System_Reflection_Module_GetGuidInternal (struct MonoReflectionModule * module)
{
  struct MonoVTable * D.28688;
  struct MonoImage * D.28689;
  _Bool D.28690;
  long int D.28691;
  long int D.28692;
  struct MonoString * D.28695;
  char * D.28696;
  struct MonoDomain * domain;

  D.28688 = MEM[(struct MonoObject *)module].vtable;
  domain = D.28688->domain;
  D.28689 = module->image;
  D.28690 = D.28689 == 0B;
  D.28691 = (long int) D.28690;
  D.28692 = __builtin_expect (D.28691, 0);
  if (D.28692 != 0) goto <D.28693>; else goto <D.28694>;
  <D.28693>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 5323, "module->image");
  <D.28694>:
  D.28689 = module->image;
  D.28696 = D.28689->guid;
  D.28695 = mono_string_new (domain, D.28696);
  return D.28695;
}


ves_icall_System_Reflection_Module_GetGlobalType (struct MonoReflectionModule * module)
{
  struct MonoVTable * D.28698;
  struct MonoImage * D.28699;
  _Bool D.28700;
  long int D.28701;
  long int D.28702;
  unsigned char D.28705;
  unsigned char D.28706;
  int D.28709;
  struct MonoReflectionType * D.28712;
  struct MonoType * D.28713;
  struct MonoDomain * domain;
  struct MonoClass * klass;

  D.28698 = MEM[(struct MonoObject *)module].vtable;
  domain = D.28698->domain;
  D.28699 = module->image;
  D.28700 = D.28699 == 0B;
  D.28701 = (long int) D.28700;
  D.28702 = __builtin_expect (D.28701, 0);
  if (D.28702 != 0) goto <D.28703>; else goto <D.28704>;
  <D.28703>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 5299, "module->image");
  <D.28704>:
  D.28699 = module->image;
  D.28705 = BIT_FIELD_REF <*D.28699, 8, 224>;
  D.28706 = D.28705 & 8;
  if (D.28706 != 0) goto <D.28707>; else goto <D.28708>;
  <D.28707>:
  D.28699 = module->image;
  D.28709 = MEM[(struct MonoDynamicImage *)D.28699].initial_image;
  if (D.28709 != 0) goto <D.28710>; else goto <D.28711>;
  <D.28710>:
  D.28712 = 0B;
  return D.28712;
  <D.28711>:
  <D.28708>:
  D.28699 = module->image;
  klass = mono_class_get (D.28699, 33554433);
  D.28713 = &klass->byval_arg;
  D.28712 = mono_type_get_object (domain, D.28713);
  return D.28712;
}


ves_icall_System_Reflection_Module_Close (struct MonoReflectionModule * module)
{

}


ves_icall_System_Reflection_MethodBase_GetMethodFromHandleInternalType (struct MonoMethod * method, struct MonoType * type)
{
  struct MonoClass * D.28717;
  struct MonoClass * D.28718;
  struct MonoClass * D.28719;
  struct MonoReflectionMethod * D.28722;
  struct MonoDomain * D.28728;
  struct MonoClass * klass;

  if (type != 0B) goto <D.28715>; else goto <D.28716>;
  <D.28715>:
  klass = mono_class_from_mono_type (type);
  D.28717 = method->klass;
  D.28718 = mono_class_get_generic_type_definition (D.28717);
  D.28719 = mono_class_get_generic_type_definition (klass);
  if (D.28718 != D.28719) goto <D.28720>; else goto <D.28721>;
  <D.28720>:
  D.28722 = 0B;
  return D.28722;
  <D.28721>:
  D.28717 = method->klass;
  if (D.28717 != klass) goto <D.28723>; else goto <D.28724>;
  <D.28723>:
  method = mono_method_get_equivalent_method (method, klass);
  if (method == 0B) goto <D.28725>; else goto <D.28726>;
  <D.28725>:
  D.28722 = 0B;
  return D.28722;
  <D.28726>:
  <D.28724>:
  goto <D.28727>;
  <D.28716>:
  klass = method->klass;
  <D.28727>:
  D.28728 = mono_domain_get ();
  D.28722 = mono_method_get_object (D.28728, method, klass);
  return D.28722;
}


mono_method_get_equivalent_method (struct MonoMethod * method, struct MonoClass * klass)
{
  unsigned char D.28730;
  unsigned char D.28731;
  struct MonoGenericInst * D.28734;
  struct MonoGenericInst * D.28737;
  struct MonoGenericInst * D.28738;
  struct MonoGenericClass * D.28739;
  struct MonoGenericInst * D.28742;
  struct MonoGenericContainer * D.28744;
  struct MonoGenericInst * D.28747;
  struct MonoMethod * D.28748;
  struct MonoMethod * D.28749;
  struct MonoClass * D.28750;
  unsigned char D.28751;
  struct MonoMethod * * D.28754;
  long unsigned int D.28755;
  long unsigned int D.28756;
  struct MonoMethod * * D.28757;
  struct MonoMethod * D.28758;
  unsigned int i.92;
  unsigned int D.28762;
  unsigned char D.28763;
  int iftmp.93;
  unsigned int offset.94;
  unsigned int D.28772;
  _Bool D.28773;
  long int D.28774;
  long int D.28775;
  struct MonoMethod * * D.28778;
  long unsigned int D.28779;
  long unsigned int D.28780;
  struct MonoMethod * * D.28781;
  int offset;
  int i;

  offset = -1;
  D.28730 = BIT_FIELD_REF <*method, 8, 264>;
  D.28731 = D.28730 & 16;
  if (D.28731 != 0) goto <D.28732>; else goto <D.28733>;
  <D.28732>:
  D.28734 = MEM[(struct MonoMethodInflated *)method].context.method_inst;
  if (D.28734 != 0B) goto <D.28735>; else goto <D.28736>;
  <D.28735>:
  {
    struct MonoMethodInflated * inflated;
    struct MonoGenericContext ctx;

    try
      {
        inflated = method;
        D.28737 = inflated->context.method_inst;
        ctx.method_inst = D.28737;
        D.28738 = inflated->context.class_inst;
        ctx.class_inst = D.28738;
        D.28739 = klass->generic_class;
        if (D.28739 != 0B) goto <D.28740>; else goto <D.28741>;
        <D.28740>:
        D.28739 = klass->generic_class;
        D.28742 = D.28739->context.class_inst;
        ctx.class_inst = D.28742;
        goto <D.28743>;
        <D.28741>:
        D.28744 = klass->generic_container;
        if (D.28744 != 0B) goto <D.28745>; else goto <D.28746>;
        <D.28745>:
        D.28744 = klass->generic_container;
        D.28747 = D.28744->context.class_inst;
        ctx.class_inst = D.28747;
        <D.28746>:
        <D.28743>:
        D.28749 = inflated->declaring;
        D.28748 = mono_class_inflate_generic_method_full (D.28749, klass, &ctx);
        return D.28748;
      }
    finally
      {
        ctx = {CLOBBER};
      }
  }
  <D.28736>:
  <D.28733>:
  D.28750 = method->klass;
  mono_class_setup_methods (D.28750);
  D.28750 = method->klass;
  D.28751 = D.28750->exception_type;
  if (D.28751 != 0) goto <D.28752>; else goto <D.28753>;
  <D.28752>:
  D.28748 = 0B;
  return D.28748;
  <D.28753>:
  i = 0;
  goto <D.22730>;
  <D.22729>:
  D.28750 = method->klass;
  D.28754 = D.28750->methods;
  D.28755 = (long unsigned int) i;
  D.28756 = D.28755 * 8;
  D.28757 = D.28754 + D.28756;
  D.28758 = *D.28757;
  if (D.28758 == method) goto <D.28759>; else goto <D.28760>;
  <D.28759>:
  offset = i;
  goto <D.22728>;
  <D.28760>:
  i = i + 1;
  <D.22730>:
  i.92 = (unsigned int) i;
  D.28750 = method->klass;
  D.28762 = D.28750->method.count;
  if (i.92 < D.28762) goto <D.22729>; else goto <D.22728>;
  <D.22728>:
  mono_class_setup_methods (klass);
  D.28763 = klass->exception_type;
  if (D.28763 != 0) goto <D.28764>; else goto <D.28765>;
  <D.28764>:
  D.28748 = 0B;
  return D.28748;
  <D.28765>:
  if (offset < 0) goto <D.28767>; else goto <D.28770>;
  <D.28770>:
  offset.94 = (unsigned int) offset;
  D.28772 = klass->method.count;
  if (offset.94 >= D.28772) goto <D.28767>; else goto <D.28768>;
  <D.28767>:
  iftmp.93 = 1;
  goto <D.28769>;
  <D.28768>:
  iftmp.93 = 0;
  <D.28769>:
  D.28773 = iftmp.93 != 0;
  D.28774 = (long int) D.28773;
  D.28775 = __builtin_expect (D.28774, 0);
  if (D.28775 != 0) goto <D.28776>; else goto <D.28777>;
  <D.28776>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 4779, "offset >= 0 && offset < klass->method.count");
  <D.28777>:
  D.28778 = klass->methods;
  D.28779 = (long unsigned int) offset;
  D.28780 = D.28779 * 8;
  D.28781 = D.28778 + D.28780;
  D.28748 = *D.28781;
  return D.28748;
}


ves_icall_System_Reflection_MethodBase_GetMethodFromHandleInternal (struct MonoMethod * method)
{
  struct MonoReflectionMethod * D.28784;
  struct MonoDomain * D.28785;

  D.28785 = mono_domain_get ();
  D.28784 = mono_method_get_object (D.28785, method, 0B);
  return D.28784;
}


ves_icall_System_Reflection_MethodBase_GetMethodBodyInternal (struct MonoMethod * method)
{
  struct MonoReflectionMethodBody * D.28787;
  struct MonoDomain * D.28788;

  D.28788 = mono_domain_get ();
  D.28787 = mono_method_body_get_object (D.28788, method);
  return D.28787;
}


ves_icall_GetCurrentMethod ()
{
  unsigned char D.28790;
  unsigned char D.28791;
  struct MonoReflectionMethod * D.28792;
  struct MonoDomain * D.28793;
  struct MonoMethod * m;

  m = mono_method_get_last_managed ();
  goto <D.22718>;
  <D.22717>:
  m = MEM[(struct MonoMethodInflated *)m].declaring;
  <D.22718>:
  D.28790 = BIT_FIELD_REF <*m, 8, 264>;
  D.28791 = D.28790 & 16;
  if (D.28791 != 0) goto <D.22717>; else goto <D.22719>;
  <D.22719>:
  D.28793 = mono_domain_get ();
  D.28792 = mono_method_get_object (D.28793, m, 0B);
  return D.28792;
}


ves_icall_System_Reflection_FieldInfo_internal_from_handle_type (struct MonoClassField * handle, struct MonoType * type)
{
  _Bool D.28795;
  long int D.28796;
  long int D.28797;
  struct MonoClass * D.28803;
  struct MonoReflectionField * D.28808;
  struct MonoDomain * D.28809;
  gboolean found;
  struct MonoClass * klass;
  struct MonoClass * k;

  found = 0;
  D.28795 = handle == 0B;
  D.28796 = (long int) D.28795;
  D.28797 = __builtin_expect (D.28796, 0);
  if (D.28797 != 0) goto <D.28798>; else goto <D.28799>;
  <D.28798>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 1637, "handle");
  <D.28799>:
  if (type == 0B) goto <D.28800>; else goto <D.28801>;
  <D.28800>:
  klass = handle->parent;
  goto <D.28802>;
  <D.28801>:
  klass = mono_class_from_mono_type (type);
  k = klass;
  goto <D.21407>;
  <D.21406>:
  D.28803 = handle->parent;
  if (D.28803 == k) goto <D.28804>; else goto <D.28805>;
  <D.28804>:
  found = 1;
  goto <D.21405>;
  <D.28805>:
  k = k->parent;
  <D.21407>:
  if (k != 0B) goto <D.21406>; else goto <D.21405>;
  <D.21405>:
  if (found == 0) goto <D.28806>; else goto <D.28807>;
  <D.28806>:
  D.28808 = 0B;
  return D.28808;
  <D.28807>:
  <D.28802>:
  D.28809 = mono_domain_get ();
  D.28808 = mono_field_get_object (D.28809, klass, handle);
  return D.28808;
}


ves_icall_System_Reflection_FieldInfo_get_marshal_info (struct MonoReflectionField * field)
{
  struct MonoClassField * D.28811;
  struct MonoGenericContainer * D.28814;
  struct MonoGenericClass * D.28816;
  struct MonoGenericInst * D.28818;
  unsigned char D.28819;
  unsigned char D.28820;
  struct MonoReflectionMarshalAsAttribute * D.28821;
  struct MonoClassField * D.28822;
  struct MonoMarshalSpec * D.28825;
  struct MonoVTable * D.28828;
  struct MonoDomain * D.28829;
  unsigned int i.95;
  unsigned int D.28831;
  struct MonoClass * klass;
  struct MonoMarshalType * info;
  int i;

  D.28811 = field->field;
  klass = D.28811->parent;
  D.28814 = klass->generic_container;
  if (D.28814 != 0B) goto <D.28812>; else goto <D.28815>;
  <D.28815>:
  D.28816 = klass->generic_class;
  if (D.28816 != 0B) goto <D.28817>; else goto <D.28813>;
  <D.28817>:
  D.28816 = klass->generic_class;
  D.28818 = D.28816->context.class_inst;
  D.28819 = BIT_FIELD_REF <*D.28818, 8, 48>;
  D.28820 = D.28819 & 64;
  if (D.28820 != 0) goto <D.28812>; else goto <D.28813>;
  <D.28812>:
  D.28821 = 0B;
  return D.28821;
  <D.28813>:
  info = mono_marshal_load_type_info (klass);
  i = 0;
  goto <D.21396>;
  <D.21395>:
  D.28822 = info->fields[i].field;
  D.28811 = field->field;
  if (D.28822 == D.28811) goto <D.28823>; else goto <D.28824>;
  <D.28823>:
  D.28825 = info->fields[i].mspec;
  if (D.28825 == 0B) goto <D.28826>; else goto <D.28827>;
  <D.28826>:
  D.28821 = 0B;
  return D.28821;
  <D.28827>:
  D.28825 = info->fields[i].mspec;
  D.28828 = field->object.vtable;
  D.28829 = D.28828->domain;
  D.28821 = mono_reflection_marshal_as_attribute_from_marshal_spec (D.28829, klass, D.28825);
  return D.28821;
  <D.28824>:
  i = i + 1;
  <D.21396>:
  i.95 = (unsigned int) i;
  D.28831 = info->num_fields;
  if (i.95 < D.28831) goto <D.21395>; else goto <D.21397>;
  <D.21397>:
  D.28821 = 0B;
  return D.28821;
}


ves_icall_System_Reflection_FieldInfo_GetTypeModifiers (struct MonoReflectionField * field, MonoBoolean optional)
{
  struct MonoClassField * D.28833;
  int D.28834;
  struct MonoArray * D.28837;
  int D.28838;
  struct MonoClass * D.28839;
  struct MonoImage * D.28840;
  struct MonoError error;
  struct MonoType * type;

  try
    {
      D.28833 = field->field;
      type = mono_field_get_type_checked (D.28833, &error);
      D.28834 = mono_error_ok (&error);
      if (D.28834 == 0) goto <D.28835>; else goto <D.28836>;
      <D.28835>:
      mono_error_raise_exception (&error);
      <D.28836>:
      D.28838 = (int) optional;
      D.28833 = field->field;
      D.28839 = D.28833->parent;
      D.28840 = D.28839->image;
      D.28837 = type_array_from_modifiers (D.28840, type, D.28838);
      return D.28837;
    }
  finally
    {
      error = {CLOBBER};
    }
}


ves_icall_TypeBuilder_get_IsGenericParameter (struct MonoReflectionTypeBuilder * tb)
{
  MonoBoolean D.28843;
  struct MonoType * D.28844;

  D.28844 = tb->type.type;
  D.28843 = is_generic_parameter (D.28844);
  return D.28843;
}


ves_icall_ModuleBuilder_getToken (struct MonoReflectionModuleBuilder * mb, struct MonoObject * obj, gboolean create_open_instance)
{
  _Bool D.28846;
  long int D.28847;
  long int D.28848;
  gint32 D.28853;
  struct MonoDynamicImage * D.28854;
  unsigned int D.28855;

  D.28846 = obj == 0B;
  D.28847 = (long int) D.28846;
  D.28848 = __builtin_expect (D.28847, 0);
  if (D.28848 != 0) goto <D.28849>; else goto <D.28850>;
  <D.28849>:
  {
    struct MonoException * ex;

    if (obj != 0B) goto <D.28851>; else goto <D.28852>;
    <D.28851>:
    <D.28852>:
    ex = mono_get_exception_argument_null ("obj");
    mono_raise_exception (ex);
  }
  <D.28850>:
  D.28854 = mb->dynamic_image;
  D.28855 = mono_image_create_token (D.28854, obj, create_open_instance, 1);
  D.28853 = (gint32) D.28855;
  return D.28853;
}


ves_icall_ModuleBuilder_getMethodToken (struct MonoReflectionModuleBuilder * mb, struct MonoReflectionMethod * method, struct MonoArray * opt_param_types)
{
  _Bool D.28857;
  long int D.28858;
  long int D.28859;
  gint32 D.28864;
  struct MonoDynamicImage * D.28865;
  unsigned int D.28866;

  D.28857 = method == 0B;
  D.28858 = (long int) D.28857;
  D.28859 = __builtin_expect (D.28858, 0);
  if (D.28859 != 0) goto <D.28860>; else goto <D.28861>;
  <D.28860>:
  {
    struct MonoException * ex;

    if (method != 0B) goto <D.28862>; else goto <D.28863>;
    <D.28862>:
    <D.28863>:
    ex = mono_get_exception_argument_null ("method");
    mono_raise_exception (ex);
  }
  <D.28861>:
  D.28865 = mb->dynamic_image;
  D.28866 = mono_image_create_method_token (D.28865, method, opt_param_types);
  D.28864 = (gint32) D.28866;
  return D.28864;
}


ves_icall_ModuleBuilder_create_modified_type (struct MonoReflectionTypeBuilder * tb, struct MonoString * smodifiers)
{
  struct MonoType * D.28868;
  char D.28869;
  int D.28870;
  struct MonoReflectionType * D.28873;
  struct MonoType * D.28874;
  struct MonoVTable * D.28875;
  struct MonoDomain * D.28876;
  struct MonoType * D.28877;
  unsigned int rank.96;
  struct MonoClass * klass;
  int isbyref;
  int rank;
  char * str;
  char * p;

  isbyref = 0;
  str = mono_string_to_utf8 (smodifiers);
  D.28868 = tb->type.type;
  klass = mono_class_from_mono_type (D.28868);
  p = str;
  goto <D.23048>;
  <D.23047>:
  D.28869 = *p;
  D.28870 = (int) D.28869;
  switch (D.28870) <default: <D.23046>, case 38: <D.23039>, case 42: <D.23040>, case 91: <D.23042>>
  <D.23039>:
  if (isbyref != 0) goto <D.28871>; else goto <D.28872>;
  <D.28871>:
  monoeg_g_free (str);
  D.28873 = 0B;
  return D.28873;
  <D.28872>:
  isbyref = 1;
  p = p + 1;
  monoeg_g_free (str);
  D.28874 = &klass->this_arg;
  D.28875 = MEM[(struct MonoObject *)tb].vtable;
  D.28876 = D.28875->domain;
  D.28873 = mono_type_get_object (D.28876, D.28874);
  return D.28873;
  <D.23040>:
  D.28877 = &klass->byval_arg;
  klass = mono_ptr_class_get (D.28877);
  mono_class_init (klass);
  p = p + 1;
  goto <D.23041>;
  <D.23042>:
  rank = 1;
  p = p + 1;
  goto <D.23045>;
  <D.23044>:
  D.28869 = *p;
  if (D.28869 == 93) goto <D.23043>; else goto <D.28878>;
  <D.28878>:
  D.28869 = *p;
  if (D.28869 == 44) goto <D.28879>; else goto <D.28880>;
  <D.28879>:
  rank = rank + 1;
  goto <D.28881>;
  <D.28880>:
  D.28869 = *p;
  if (D.28869 != 42) goto <D.28882>; else goto <D.28883>;
  <D.28882>:
  monoeg_g_free (str);
  D.28873 = 0B;
  return D.28873;
  <D.28883>:
  <D.28881>:
  p = p + 1;
  <D.23045>:
  D.28869 = *p;
  if (D.28869 != 0) goto <D.23044>; else goto <D.23043>;
  <D.23043>:
  D.28869 = *p;
  if (D.28869 != 93) goto <D.28884>; else goto <D.28885>;
  <D.28884>:
  monoeg_g_free (str);
  D.28873 = 0B;
  return D.28873;
  <D.28885>:
  p = p + 1;
  rank.96 = (unsigned int) rank;
  klass = mono_array_class_get (klass, rank.96);
  mono_class_init (klass);
  goto <D.23041>;
  <D.23046>:
  goto <D.23041>;
  <D.23041>:
  <D.23048>:
  D.28869 = *p;
  if (D.28869 != 0) goto <D.23047>; else goto <D.23049>;
  <D.23049>:
  monoeg_g_free (str);
  D.28877 = &klass->byval_arg;
  D.28875 = MEM[(struct MonoObject *)tb].vtable;
  D.28876 = D.28875->domain;
  D.28873 = mono_type_get_object (D.28876, D.28877);
  return D.28873;
}


ves_icall_ModuleBuilder_build_metadata (struct MonoReflectionModuleBuilder * mb)
{
  mono_image_build_metadata (mb);
}


ves_icall_ModuleBuilder_WriteToFile (struct MonoReflectionModuleBuilder * mb, void * file)
{
  mono_image_create_pefile (mb, file);
}


ves_icall_ModuleBuilder_RegisterToken (struct MonoReflectionModuleBuilder * mb, struct MonoObject * obj, guint32 token)
{
  struct MonoDynamicImage * D.28889;

  D.28889 = mb->dynamic_image;
  mono_image_register_token (D.28889, token, obj);
}


ves_icall_EnumBuilder_setup_enum_type (struct MonoReflectionType * enumtype, struct MonoReflectionType * t)
{
  struct MonoType * D.28890;

  D.28890 = t->type;
  enumtype->type = D.28890;
}


ves_icall_System_Reflection_AssemblyName_ParseName (struct MonoReflectionAssemblyName * name, struct MonoString * assname)
{
  struct MonoVTable * D.28891;
  int D.28892;
  const mono_byte * D.28895;
  gboolean D.28896;
  int is_token_defined.97;
  int is_version_defined.98;
  struct MonoAssemblyName aname;
  struct MonoDomain * domain;
  char * val;
  gboolean is_version_defined;
  gboolean is_token_defined;

  try
    {
      D.28891 = MEM[(struct MonoObject *)name].vtable;
      domain = D.28891->domain;
      aname.public_key = 0B;
      val = mono_string_to_utf8 (assname);
      D.28892 = mono_assembly_name_parse_full (val, &aname, 1, &is_version_defined, &is_token_defined);
      if (D.28892 == 0) goto <D.28893>; else goto <D.28894>;
      <D.28893>:
      D.28895 = aname.public_key;
      monoeg_g_free (D.28895);
      monoeg_g_free (val);
      D.28896 = 0;
      return D.28896;
      <D.28894>:
      is_token_defined.97 = is_token_defined;
      is_version_defined.98 = is_version_defined;
      fill_reflection_assembly_name (domain, name, &aname, "", is_version_defined.98, 0, is_token_defined.97);
      mono_assembly_name_free (&aname);
      D.28895 = aname.public_key;
      monoeg_g_free (D.28895);
      monoeg_g_free (val);
      D.28896 = 1;
      return D.28896;
    }
  finally
    {
      aname = {CLOBBER};
      is_version_defined = {CLOBBER};
      is_token_defined = {CLOBBER};
    }
}


fill_reflection_assembly_name (struct MonoDomain * domain, struct MonoReflectionAssemblyName * aname, struct MonoAssemblyName * name, const char * absolute, gboolean by_default_version, gboolean default_publickey, gboolean default_token)
{
  const char * D.28901;
  struct MonoString * D.28902;
  struct MonoString * * D.28903;
  short unsigned int D.28904;
  int D.28905;
  short unsigned int D.28906;
  int D.28907;
  short unsigned int D.28908;
  int D.28909;
  unsigned int D.28910;
  short unsigned int D.28911;
  int D.28912;
  unsigned int D.28913;
  short unsigned int D.28914;
  unsigned int D.28915;
  unsigned int D.28918;
  unsigned int D.28919;
  unsigned int D.28920;
  unsigned int D.28921;
  struct MonoObject * D.28922;
  struct MonoObject * * D.28923;
  char D.28926;
  struct MonoString * D.28931;
  struct MonoString * * D.28932;
  struct MonoMethod * create_culture.99;
  struct MonoImage * D.28936;
  struct MonoMethod * create_culture.100;
  _Bool D.28938;
  long int D.28939;
  long int D.28940;
  const char * D.28943;
  struct MonoString * D.28946;
  struct MonoObject * D.28947;
  struct MonoObject * * D.28948;
  const mono_byte * pkey_ptr.101;
  const char * pkey_ptr.102;
  long unsigned int D.28953;
  struct MonoClass * D.28954;
  struct MonoArray * D.28955;
  struct MonoArray * * D.28956;
  long unsigned int D.28957;
  struct MonoArray * D.28958;
  char * D.28959;
  unsigned int D.28960;
  unsigned int D.28961;
  struct MonoArray * D.28965;
  unsigned char D.28966;
  struct MonoArray * D.28969;
  struct MonoArray * * D.28970;
  struct MonoArray * D.28971;
  int j.103;
  unsigned char D.28973;
  char D.28974;
  int D.28975;
  int D.28976;
  int D.28977;
  char D.28978;
  int j.104;
  unsigned char D.28980;
  char D.28981;
  int D.28982;
  int D.28983;
  char D.28984;
  char D.28985;
  char D.28986;
  struct MonoArray * D.28990;
  static struct MonoMethod * create_culture = 0B;
  void * args[2];
  guint32 pkey_len;
  const char * pkey_ptr;
  gchar * codebase;
  MonoBoolean assembly_ref;

  try
    {
      assembly_ref = 0;
      D.28901 = name->name;
      D.28902 = mono_string_new (domain, D.28901);
      D.28903 = &aname->name;
      mono_gc_wbarrier_set_field (aname, D.28903, D.28902);
      D.28904 = name->major;
      D.28905 = (int) D.28904;
      aname->major = D.28905;
      D.28906 = name->minor;
      D.28907 = (int) D.28906;
      aname->minor = D.28907;
      D.28908 = name->build;
      D.28909 = (int) D.28908;
      aname->build = D.28909;
      D.28910 = name->flags;
      aname->flags = D.28910;
      D.28911 = name->revision;
      D.28912 = (int) D.28911;
      aname->revision = D.28912;
      D.28913 = name->hash_alg;
      aname->hashalg = D.28913;
      aname->versioncompat = 1;
      D.28914 = name->arch;
      D.28915 = (unsigned int) D.28914;
      aname->processor_architecture = D.28915;
      if (by_default_version != 0) goto <D.28916>; else goto <D.28917>;
      <D.28916>:
      D.28911 = name->revision;
      D.28918 = (unsigned int) D.28911;
      D.28908 = name->build;
      D.28919 = (unsigned int) D.28908;
      D.28906 = name->minor;
      D.28920 = (unsigned int) D.28906;
      D.28904 = name->major;
      D.28921 = (unsigned int) D.28904;
      D.28922 = create_version (domain, D.28921, D.28920, D.28919, D.28918);
      D.28923 = &aname->version;
      mono_gc_wbarrier_set_field (aname, D.28923, D.28922);
      <D.28917>:
      codebase = 0B;
      if (absolute != 0B) goto <D.28924>; else goto <D.28925>;
      <D.28924>:
      D.28926 = *absolute;
      if (D.28926 != 0) goto <D.28927>; else goto <D.28928>;
      <D.28927>:
      {
        const gchar * prepend;
        gchar * result;

        prepend = "file://";
        codebase = monoeg_strdup (absolute);
        result = monoeg_g_strconcat (prepend, codebase, 0B);
        monoeg_g_free (codebase);
        codebase = result;
      }
      <D.28928>:
      <D.28925>:
      if (codebase != 0B) goto <D.28929>; else goto <D.28930>;
      <D.28929>:
      D.28931 = mono_string_new (domain, codebase);
      D.28932 = &aname->codebase;
      mono_gc_wbarrier_set_field (aname, D.28932, D.28931);
      monoeg_g_free (codebase);
      <D.28930>:
      create_culture.99 = create_culture;
      if (create_culture.99 == 0B) goto <D.28934>; else goto <D.28935>;
      <D.28934>:
      {
        struct MonoMethodDesc * desc;

        desc = mono_method_desc_new ("System.Globalization.CultureInfo:CreateCulture(string,bool)", 1);
        D.28936 = mono_defaults.corlib;
        create_culture.100 = mono_method_desc_search_in_image (desc, D.28936);
        create_culture = create_culture.100;
        create_culture.99 = create_culture;
        D.28938 = create_culture.99 == 0B;
        D.28939 = (long int) D.28938;
        D.28940 = __builtin_expect (D.28939, 0);
        if (D.28940 != 0) goto <D.28941>; else goto <D.28942>;
        <D.28941>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 4954, "create_culture");
        <D.28942>:
        mono_method_desc_free (desc);
      }
      <D.28935>:
      D.28943 = name->culture;
      if (D.28943 != 0B) goto <D.28944>; else goto <D.28945>;
      <D.28944>:
      D.28943 = name->culture;
      D.28946 = mono_string_new (domain, D.28943);
      args[0] = D.28946;
      args[1] = &assembly_ref;
      create_culture.99 = create_culture;
      D.28947 = mono_runtime_invoke (create_culture.99, 0B, &args, 0B);
      D.28948 = &aname->cultureInfo;
      mono_gc_wbarrier_set_field (aname, D.28948, D.28947);
      <D.28945>:
      pkey_ptr.101 = name->public_key;
      if (pkey_ptr.101 != 0B) goto <D.28950>; else goto <D.28951>;
      <D.28950>:
      pkey_ptr.101 = name->public_key;
      pkey_ptr = pkey_ptr.101;
      pkey_ptr.102 = pkey_ptr;
      pkey_len = mono_metadata_decode_blob_size (pkey_ptr.102, &pkey_ptr);
      D.28953 = (long unsigned int) pkey_len;
      D.28954 = mono_defaults.byte_class;
      D.28955 = mono_array_new (domain, D.28954, D.28953);
      D.28956 = &aname->publicKey;
      mono_gc_wbarrier_set_field (aname, D.28956, D.28955);
      D.28957 = (long unsigned int) pkey_len;
      pkey_ptr.102 = pkey_ptr;
      D.28958 = aname->publicKey;
      D.28959 = mono_array_addr_with_size (D.28958, 1, 0);
      memcpy (D.28959, pkey_ptr.102, D.28957);
      D.28960 = aname->flags;
      D.28961 = D.28960 | 1;
      aname->flags = D.28961;
      goto <D.28962>;
      <D.28951>:
      if (default_publickey != 0) goto <D.28963>; else goto <D.28964>;
      <D.28963>:
      D.28954 = mono_defaults.byte_class;
      D.28965 = mono_array_new (domain, D.28954, 0);
      D.28956 = &aname->publicKey;
      mono_gc_wbarrier_set_field (aname, D.28956, D.28965);
      D.28960 = aname->flags;
      D.28961 = D.28960 | 1;
      aname->flags = D.28961;
      <D.28964>:
      <D.28962>:
      D.28966 = name->public_key_token[0];
      if (D.28966 != 0) goto <D.28967>; else goto <D.28968>;
      <D.28967>:
      {
        int i;
        int j;
        char * p;

        D.28954 = mono_defaults.byte_class;
        D.28969 = mono_array_new (domain, D.28954, 8);
        D.28970 = &aname->keyToken;
        mono_gc_wbarrier_set_field (aname, D.28970, D.28969);
        D.28971 = aname->keyToken;
        p = mono_array_addr_with_size (D.28971, 1, 0);
        i = 0;
        j = 0;
        goto <D.22790>;
        <D.22789>:
        j.103 = j;
        j = j.103 + 1;
        D.28973 = name->public_key_token[j.103];
        D.28974 = (char) D.28973;
        D.28975 = (int) D.28974;
        D.28976 = monoeg_g_ascii_xdigit_value (D.28975);
        D.28977 = D.28976 << 4;
        D.28978 = (char) D.28977;
        *p = D.28978;
        j.104 = j;
        j = j.104 + 1;
        D.28980 = name->public_key_token[j.104];
        D.28981 = (char) D.28980;
        D.28982 = (int) D.28981;
        D.28983 = monoeg_g_ascii_xdigit_value (D.28982);
        D.28984 = *p;
        D.28985 = (char) D.28983;
        D.28986 = D.28984 | D.28985;
        *p = D.28986;
        p = p + 1;
        i = i + 1;
        <D.22790>:
        if (i <= 7) goto <D.22789>; else goto <D.22791>;
        <D.22791>:
      }
      goto <D.28987>;
      <D.28968>:
      if (default_token != 0) goto <D.28988>; else goto <D.28989>;
      <D.28988>:
      D.28954 = mono_defaults.byte_class;
      D.28990 = mono_array_new (domain, D.28954, 0);
      D.28970 = &aname->keyToken;
      mono_gc_wbarrier_set_field (aname, D.28970, D.28990);
      <D.28989>:
      <D.28987>:
    }
  finally
    {
      args = {CLOBBER};
      pkey_ptr = {CLOBBER};
      assembly_ref = {CLOBBER};
    }
}


create_version (struct MonoDomain * domain, guint32 major, guint32 minor, guint32 build, guint32 revision)
{
  struct MonoClass * System_Version.105;
  struct MonoImage * D.28994;
  struct MonoClass * System_Version.106;
  _Bool D.28996;
  long int D.28997;
  long int D.28998;
  struct MonoMethod * create_version.107;
  struct MonoMethod * create_version.108;
  _Bool D.29005;
  long int D.29006;
  long int D.29007;
  struct MonoObject * D.29010;
  static struct MonoClass * System_Version = 0B;
  static struct MonoMethod * create_version = 0B;
  struct MonoObject * result;
  void * args[4];

  try
    {
      System_Version.105 = System_Version;
      if (System_Version.105 == 0B) goto <D.28992>; else goto <D.28993>;
      <D.28992>:
      D.28994 = mono_defaults.corlib;
      System_Version.106 = mono_class_from_name (D.28994, "System", "Version");
      System_Version = System_Version.106;
      System_Version.105 = System_Version;
      D.28996 = System_Version.105 == 0B;
      D.28997 = (long int) D.28996;
      D.28998 = __builtin_expect (D.28997, 0);
      if (D.28998 != 0) goto <D.28999>; else goto <D.29000>;
      <D.28999>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 4404, "System_Version");
      <D.29000>:
      <D.28993>:
      create_version.107 = create_version;
      if (create_version.107 == 0B) goto <D.29002>; else goto <D.29003>;
      <D.29002>:
      {
        struct MonoMethodDesc * desc;

        desc = mono_method_desc_new (":.ctor(int,int,int,int)", 0);
        System_Version.105 = System_Version;
        create_version.108 = mono_method_desc_search_in_class (desc, System_Version.105);
        create_version = create_version.108;
        create_version.107 = create_version;
        D.29005 = create_version.107 == 0B;
        D.29006 = (long int) D.29005;
        D.29007 = __builtin_expect (D.29006, 0);
        if (D.29007 != 0) goto <D.29008>; else goto <D.29009>;
        <D.29008>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 4410, "create_version");
        <D.29009>:
        mono_method_desc_free (desc);
      }
      <D.29003>:
      args[0] = &major;
      args[1] = &minor;
      args[2] = &build;
      args[3] = &revision;
      System_Version.105 = System_Version;
      result = mono_object_new (domain, System_Version.105);
      create_version.107 = create_version;
      mono_runtime_invoke (create_version.107, result, &args, 0B);
      D.29010 = result;
      return D.29010;
    }
  finally
    {
      args = {CLOBBER};
    }
}


ves_icall_System_Reflection_Assembly_load_with_partial_name (struct MonoString * mname, struct MonoObject * evidence)
{
  struct MonoReflectionAssembly * D.29015;
  struct MonoDomain * D.29016;
  gchar * name;
  struct MonoAssembly * res;
  MonoImageOpenStatus status;

  try
    {
      name = mono_string_to_utf8 (mname);
      res = mono_assembly_load_with_partial_name (name, &status);
      monoeg_g_free (name);
      if (res == 0B) goto <D.29013>; else goto <D.29014>;
      <D.29013>:
      D.29015 = 0B;
      return D.29015;
      <D.29014>:
      D.29016 = mono_domain_get ();
      D.29015 = mono_assembly_get_object (D.29016, res);
      return D.29015;
    }
  finally
    {
      status = {CLOBBER};
    }
}


ves_icall_System_Reflection_Assembly_get_location (struct MonoReflectionAssembly * assembly)
{
  struct MonoVTable * D.29019;
  struct MonoAssembly * D.29020;
  struct MonoImage * D.29021;
  const char * D.29022;
  struct MonoString * D.29023;
  struct MonoDomain * domain;
  struct MonoString * res;

  D.29019 = MEM[(struct MonoObject *)assembly].vtable;
  domain = D.29019->domain;
  D.29020 = assembly->assembly;
  D.29021 = D.29020->image;
  D.29022 = mono_image_get_filename (D.29021);
  res = mono_string_new (domain, D.29022);
  D.29023 = res;
  return D.29023;
}


ves_icall_System_Reflection_Assembly_get_global_assembly_cache (struct MonoReflectionAssembly * assembly)
{
  MonoBoolean D.29025;
  struct MonoAssembly * mass;

  mass = assembly->assembly;
  D.29025 = mass->in_gac;
  return D.29025;
}


ves_icall_System_Reflection_Assembly_get_fullName (struct MonoReflectionAssembly * assembly)
{
  struct MonoVTable * D.29027;
  struct MonoAssemblyName * D.29028;
  struct MonoString * D.29029;
  struct MonoDomain * domain;
  struct MonoAssembly * mass;
  struct MonoString * res;
  gchar * name;

  D.29027 = MEM[(struct MonoObject *)assembly].vtable;
  domain = D.29027->domain;
  mass = assembly->assembly;
  D.29028 = &mass->aname;
  name = mono_stringify_assembly_name (D.29028);
  res = mono_string_new (domain, name);
  monoeg_g_free (name);
  D.29029 = res;
  return D.29029;
}


ves_icall_System_Reflection_Assembly_get_code_base (struct MonoReflectionAssembly * assembly, MonoBoolean escaped)
{
  struct MonoVTable * D.29031;
  struct MonoImage * D.29032;
  char * D.29033;
  int D.29034;
  gchar * absolute.109;
  gchar * absolute.110;
  char * D.29040;
  gchar * absolute.111;
  struct MonoString * D.29047;
  struct MonoDomain * domain;
  struct MonoAssembly * mass;
  struct MonoString * res;
  gchar * uri;
  gchar * absolute;
  gchar * dirname;

  try
    {
      D.29031 = MEM[(struct MonoObject *)assembly].vtable;
      domain = D.29031->domain;
      mass = assembly->assembly;
      res = 0B;
      D.29032 = mass->image;
      D.29033 = D.29032->name;
      D.29034 = monoeg_g_path_is_absolute (D.29033);
      if (D.29034 != 0) goto <D.29035>; else goto <D.29036>;
      <D.29035>:
      D.29032 = mass->image;
      D.29033 = D.29032->name;
      absolute.109 = monoeg_strdup (D.29033);
      absolute = absolute.109;
      absolute.110 = absolute;
      dirname = monoeg_g_path_get_dirname (absolute.110);
      goto <D.29039>;
      <D.29036>:
      D.29032 = mass->image;
      D.29033 = D.29032->name;
      D.29040 = mass->basedir;
      absolute.111 = monoeg_g_build_path ("/", D.29040, D.29033, 0B);
      absolute = absolute.111;
      D.29040 = mass->basedir;
      dirname = monoeg_strdup (D.29040);
      <D.29039>:
      replace_shadow_path (domain, dirname, &absolute);
      monoeg_g_free (dirname);
      if (escaped != 0) goto <D.29042>; else goto <D.29043>;
      <D.29042>:
      absolute.110 = absolute;
      uri = monoeg_g_filename_to_uri (absolute.110, 0B, 0B);
      goto <D.29044>;
      <D.29043>:
      {
        const char * prepend;

        prepend = "file://";
        absolute.110 = absolute;
        uri = monoeg_g_strconcat (prepend, absolute.110, 0B);
      }
      <D.29044>:
      if (uri != 0B) goto <D.29045>; else goto <D.29046>;
      <D.29045>:
      res = mono_string_new (domain, uri);
      monoeg_g_free (uri);
      <D.29046>:
      absolute.110 = absolute;
      monoeg_g_free (absolute.110);
      D.29047 = res;
      return D.29047;
    }
  finally
    {
      absolute = {CLOBBER};
    }
}


replace_shadow_path (struct MonoDomain * domain, gchar * dirname, gchar * * filename)
{
  int D.29050;
  int D.29055;
  gchar * content.112;
  int D.29058;
  gchar * D.29063;
  gboolean D.29066;
  gchar * content;
  gchar * shadow_ini_file;
  gsize len;

  try
    {
      D.29050 = mono_is_shadow_copy_enabled (domain, dirname);
      if (D.29050 != 0) goto <D.29051>; else goto <D.29052>;
      <D.29051>:
      shadow_ini_file = monoeg_g_build_path ("/", dirname, "__AssemblyInfo__.ini", 0B);
      content = 0B;
      D.29055 = monoeg_g_file_get_contents (shadow_ini_file, &content, &len, 0B);
      if (D.29055 == 0) goto <D.29053>; else goto <D.29056>;
      <D.29056>:
      content.112 = content;
      D.29058 = monoeg_g_file_test (content.112, 1);
      if (D.29058 == 0) goto <D.29053>; else goto <D.29054>;
      <D.29053>:
      content.112 = content;
      if (content.112 != 0B) goto <D.29059>; else goto <D.29060>;
      <D.29059>:
      content.112 = content;
      monoeg_g_free (content.112);
      content = 0B;
      <D.29060>:
      <D.29054>:
      monoeg_g_free (shadow_ini_file);
      content.112 = content;
      if (content.112 != 0B) goto <D.29061>; else goto <D.29062>;
      <D.29061>:
      D.29063 = *filename;
      if (D.29063 != 0B) goto <D.29064>; else goto <D.29065>;
      <D.29064>:
      D.29063 = *filename;
      monoeg_g_free (D.29063);
      <D.29065>:
      content.112 = content;
      *filename = content.112;
      D.29066 = 1;
      return D.29066;
      <D.29062>:
      <D.29052>:
      D.29066 = 0;
      return D.29066;
    }
  finally
    {
      content = {CLOBBER};
      len = {CLOBBER};
    }
}


ves_icall_System_Reflection_Assembly_get_ReflectionOnly (struct MonoReflectionAssembly * assembly)
{
  MonoBoolean D.29069;
  struct MonoAssembly * D.29070;
  int D.29071;

  D.29070 = assembly->assembly;
  D.29071 = D.29070->ref_only;
  D.29069 = (MonoBoolean) D.29071;
  return D.29069;
}


ves_icall_System_Reflection_Assembly_get_EntryPoint (struct MonoReflectionAssembly * assembly)
{
  struct MonoAssembly * D.29073;
  struct MonoImage * D.29074;
  struct MonoReflectionMethod * D.29077;
  struct MonoMethod * D.29078;
  struct MonoVTable * D.29079;
  struct MonoDomain * D.29080;
  guint32 token;

  D.29073 = assembly->assembly;
  D.29074 = D.29073->image;
  token = mono_image_get_entry_point (D.29074);
  if (token == 0) goto <D.29075>; else goto <D.29076>;
  <D.29075>:
  D.29077 = 0B;
  return D.29077;
  <D.29076>:
  D.29073 = assembly->assembly;
  D.29074 = D.29073->image;
  D.29078 = mono_get_method (D.29074, token, 0B);
  D.29079 = MEM[(struct MonoObject *)assembly].vtable;
  D.29080 = D.29079->domain;
  D.29077 = mono_method_get_object (D.29080, D.29078, 0B);
  return D.29077;
}


ves_icall_MonoDebugger_GetMethodToken (struct MonoReflectionMethod * method)
{
  gint32 D.29082;
  struct MonoMethod * D.29083;
  unsigned int D.29084;

  D.29083 = method->method;
  D.29084 = D.29083->token;
  D.29082 = (gint32) D.29084;
  return D.29082;
}


ves_icall_System_Reflection_Assembly_LoadPermissions (struct MonoReflectionAssembly * assembly, char * * minimum, guint32 * minLength, char * * optional, guint32 * optLength, char * * refused, guint32 * refLength)
{
  struct MonoAssembly * D.29086;
  unsigned char D.29087;
  char * D.29090;
  unsigned int D.29091;
  unsigned char D.29092;
  unsigned char D.29095;
  MonoBoolean D.29098;
  MonoBoolean result;
  struct MonoDeclSecurityEntry entry;

  try
    {
      result = 0;
      D.29086 = assembly->assembly;
      D.29087 = mono_declsec_get_assembly_action (D.29086, 8, &entry);
      if (D.29087 != 0) goto <D.29088>; else goto <D.29089>;
      <D.29088>:
      D.29090 = entry.blob;
      *minimum = D.29090;
      D.29091 = entry.size;
      *minLength = D.29091;
      result = 1;
      <D.29089>:
      D.29086 = assembly->assembly;
      D.29092 = mono_declsec_get_assembly_action (D.29086, 9, &entry);
      if (D.29092 != 0) goto <D.29093>; else goto <D.29094>;
      <D.29093>:
      D.29090 = entry.blob;
      *optional = D.29090;
      D.29091 = entry.size;
      *optLength = D.29091;
      result = 1;
      <D.29094>:
      D.29086 = assembly->assembly;
      D.29095 = mono_declsec_get_assembly_action (D.29086, 10, &entry);
      if (D.29095 != 0) goto <D.29096>; else goto <D.29097>;
      <D.29096>:
      D.29090 = entry.blob;
      *refused = D.29090;
      D.29091 = entry.size;
      *refLength = D.29091;
      result = 1;
      <D.29097>:
      D.29098 = result;
      return D.29098;
    }
  finally
    {
      entry = {CLOBBER};
    }
}


ves_icall_System_Reflection_Assembly_InternalImageRuntimeVersion (struct MonoReflectionAssembly * assembly)
{
  struct MonoVTable * D.29101;
  struct MonoString * D.29102;
  struct MonoAssembly * D.29103;
  struct MonoImage * D.29104;
  char * D.29105;
  struct MonoDomain * domain;

  D.29101 = MEM[(struct MonoObject *)assembly].vtable;
  domain = D.29101->domain;
  D.29103 = assembly->assembly;
  D.29104 = D.29103->image;
  D.29105 = D.29104->version;
  D.29102 = mono_string_new (domain, D.29105);
  return D.29102;
}


ves_icall_System_Reflection_Assembly_InternalGetType (struct MonoReflectionAssembly * assembly, struct MonoReflectionModule * module, struct MonoString * name, MonoBoolean throwOnError, MonoBoolean ignoreCase)
{
  int D.29107;
  struct MonoException * D.29112;
  struct MonoReflectionType * D.29113;
  const char * D.29114;
  struct MonoClass * D.29119;
  struct MonoException * D.29122;
  struct MonoException * D.29124;
  struct MonoImage * D.29127;
  int D.29130;
  struct MonoAssembly * D.29133;
  unsigned char D.29134;
  struct MonoArray * D.29137;
  long unsigned int D.29140;
  char * D.29141;
  struct MonoDynamicImage * D.29142;
  struct MonoImage * D.29143;
  long unsigned int D.29145;
  struct MonoArray * D.29148;
  char * D.29151;
  struct MonoImage * D.29152;
  long unsigned int D.29154;
  struct MonoImage * D.29156;
  struct MonoLoaderError * D.29161;
  struct MonoLoaderError * D.29166;
  struct MonoLoaderError * D.29169;
  struct MonoLoaderError * D.29174;
  struct MonoException * D.29175;
  unsigned char D.29176;
  int D.29179;
  unsigned char D.29182;
  int D.29189;
  struct MonoVTable * D.29194;
  struct MonoDomain * D.29195;
  gchar * str;
  struct MonoType * type;
  struct MonoTypeNameParse info;
  gboolean type_resolve;

  try
    {
      type = 0B;
      type_resolve = 1;
      str = mono_string_to_utf8 (name);
      D.29107 = mono_reflection_parse_type (str, &info);
      if (D.29107 == 0) goto <D.29108>; else goto <D.29109>;
      <D.29108>:
      monoeg_g_free (str);
      mono_reflection_free_type_info (&info);
      if (throwOnError != 0) goto <D.29110>; else goto <D.29111>;
      <D.29110>:
      D.29112 = mono_get_exception_type_load (name, 0B);
      mono_raise_exception (D.29112);
      <D.29111>:
      D.29113 = 0B;
      return D.29113;
      <D.29109>:
      D.29114 = info.assembly.name;
      if (D.29114 != 0B) goto <D.29115>; else goto <D.29116>;
      <D.29115>:
      monoeg_g_free (str);
      mono_reflection_free_type_info (&info);
      if (throwOnError != 0) goto <D.29117>; else goto <D.29118>;
      <D.29117>:
      D.29119 = mono_defaults.generic_ilist_class;
      if (D.29119 != 0B) goto <D.29120>; else goto <D.29121>;
      <D.29120>:
      D.29122 = mono_get_exception_argument (0B, "Type names passed to Assembly.GetType() must not specify an assembly.");
      mono_raise_exception (D.29122);
      goto <D.29123>;
      <D.29121>:
      D.29124 = mono_get_exception_type_load (name, 0B);
      mono_raise_exception (D.29124);
      <D.29123>:
      <D.29118>:
      D.29113 = 0B;
      return D.29113;
      <D.29116>:
      if (module != 0B) goto <D.29125>; else goto <D.29126>;
      <D.29125>:
      D.29127 = module->image;
      if (D.29127 != 0B) goto <D.29128>; else goto <D.29129>;
      <D.29128>:
      D.29130 = (int) ignoreCase;
      D.29127 = module->image;
      type = mono_reflection_get_type (D.29127, &info, D.29130, &type_resolve);
      goto <D.29131>;
      <D.29129>:
      type = 0B;
      <D.29131>:
      goto <D.29132>;
      <D.29126>:
      D.29133 = assembly->assembly;
      D.29134 = D.29133->dynamic;
      if (D.29134 != 0) goto <D.29135>; else goto <D.29136>;
      <D.29135>:
      {
        struct MonoReflectionAssemblyBuilder * abuilder;
        int i;

        abuilder = assembly;
        type = 0B;
        D.29137 = abuilder->modules;
        if (D.29137 != 0B) goto <D.29138>; else goto <D.29139>;
        <D.29138>:
        i = 0;
        goto <D.22491>;
        <D.22490>:
        {
          struct MonoReflectionModuleBuilder * mb;

          D.29140 = (long unsigned int) i;
          D.29137 = abuilder->modules;
          D.29141 = mono_array_addr_with_size (D.29137, 8, D.29140);
          mb = MEM[(struct MonoReflectionModuleBuilder * *)D.29141];
          D.29130 = (int) ignoreCase;
          D.29142 = mb->dynamic_image;
          D.29143 = &D.29142->image;
          type = mono_reflection_get_type (D.29143, &info, D.29130, &type_resolve);
          if (type != 0B) goto <D.22489>; else goto <D.29144>;
          <D.29144>:
        }
        i = i + 1;
        <D.22491>:
        D.29140 = (long unsigned int) i;
        D.29137 = abuilder->modules;
        D.29145 = mono_array_length (D.29137);
        if (D.29140 < D.29145) goto <D.22490>; else goto <D.22489>;
        <D.22489>:
        <D.29139>:
        if (type == 0B) goto <D.29146>; else goto <D.29147>;
        <D.29146>:
        D.29148 = abuilder->loaded_modules;
        if (D.29148 != 0B) goto <D.29149>; else goto <D.29150>;
        <D.29149>:
        i = 0;
        goto <D.22495>;
        <D.22494>:
        {
          struct MonoReflectionModule * mod;

          D.29140 = (long unsigned int) i;
          D.29148 = abuilder->loaded_modules;
          D.29151 = mono_array_addr_with_size (D.29148, 8, D.29140);
          mod = MEM[(struct MonoReflectionModule * *)D.29151];
          D.29130 = (int) ignoreCase;
          D.29152 = mod->image;
          type = mono_reflection_get_type (D.29152, &info, D.29130, &type_resolve);
          if (type != 0B) goto <D.22493>; else goto <D.29153>;
          <D.29153>:
        }
        i = i + 1;
        <D.22495>:
        D.29140 = (long unsigned int) i;
        D.29148 = abuilder->loaded_modules;
        D.29154 = mono_array_length (D.29148);
        if (D.29140 < D.29154) goto <D.22494>; else goto <D.22493>;
        <D.22493>:
        <D.29150>:
        <D.29147>:
      }
      goto <D.29155>;
      <D.29136>:
      D.29130 = (int) ignoreCase;
      D.29133 = assembly->assembly;
      D.29156 = D.29133->image;
      type = mono_reflection_get_type (D.29156, &info, D.29130, &type_resolve);
      <D.29155>:
      <D.29132>:
      monoeg_g_free (str);
      mono_reflection_free_type_info (&info);
      if (type == 0B) goto <D.29157>; else goto <D.29158>;
      <D.29157>:
      {
        struct MonoException * e;

        e = 0B;
        if (throwOnError != 0) goto <D.29159>; else goto <D.29160>;
        <D.29159>:
        e = mono_get_exception_type_load (name, 0B);
        <D.29160>:
        D.29161 = mono_loader_get_last_error ();
        if (D.29161 != 0B) goto <D.29162>; else goto <D.29163>;
        <D.29162>:
        D.29119 = mono_defaults.generic_ilist_class;
        if (D.29119 != 0B) goto <D.29164>; else goto <D.29165>;
        <D.29164>:
        D.29166 = mono_loader_get_last_error ();
        e = mono_loader_error_prepare_exception (D.29166);
        <D.29165>:
        <D.29163>:
        mono_loader_clear_error ();
        if (e != 0B) goto <D.29167>; else goto <D.29168>;
        <D.29167>:
        mono_raise_exception (e);
        <D.29168>:
        D.29113 = 0B;
        return D.29113;
      }
      <D.29158>:
      D.29169 = mono_loader_get_last_error ();
      if (D.29169 != 0B) goto <D.29170>; else goto <D.29171>;
      <D.29170>:
      if (throwOnError != 0) goto <D.29172>; else goto <D.29173>;
      <D.29172>:
      D.29174 = mono_loader_get_last_error ();
      D.29175 = mono_loader_error_prepare_exception (D.29174);
      mono_raise_exception (D.29175);
      <D.29173>:
      mono_loader_clear_error ();
      <D.29171>:
      D.29176 = type->type;
      if (D.29176 == 18) goto <D.29177>; else goto <D.29178>;
      <D.29177>:
      {
        struct MonoClass * klass;

        klass = mono_type_get_class (type);
        D.29179 = mono_is_security_manager_active ();
        if (D.29179 != 0) goto <D.29180>; else goto <D.29181>;
        <D.29180>:
        D.29182 = klass->exception_type;
        if (D.29182 == 0) goto <D.29183>; else goto <D.29184>;
        <D.29183>:
        mono_class_setup_vtable (klass);
        <D.29184>:
        <D.29181>:
        if (throwOnError != 0) goto <D.29187>; else goto <D.29185>;
        <D.29187>:
        D.29182 = klass->exception_type;
        if (D.29182 != 0) goto <D.29188>; else goto <D.29185>;
        <D.29188>:
        {
          struct MonoException * exc;

          exc = mono_class_get_exception_for_failure (klass);
          mono_loader_clear_error ();
          mono_raise_exception (exc);
        }
        goto <D.29186>;
        <D.29185>:
        D.29189 = mono_is_security_manager_active ();
        if (D.29189 != 0) goto <D.29190>; else goto <D.29191>;
        <D.29190>:
        D.29182 = klass->exception_type;
        if (D.29182 == 2) goto <D.29192>; else goto <D.29193>;
        <D.29192>:
        D.29113 = 0B;
        return D.29113;
        <D.29193>:
        <D.29191>:
        <D.29186>:
      }
      <D.29178>:
      D.29194 = MEM[(struct MonoObject *)assembly].vtable;
      D.29195 = D.29194->domain;
      D.29113 = mono_type_get_object (D.29195, type);
      return D.29113;
    }
  finally
    {
      info = {CLOBBER};
      type_resolve = {CLOBBER};
    }
}


ves_icall_System_Reflection_Assembly_InternalGetAssemblyName (struct MonoString * fname, struct MonoReflectionAssemblyName * aname)
{
  char * filename.113;
  char * filename.114;
  struct MonoDomain * D.29200;
  <unnamed type> status.115;
  struct MonoException * D.29209;
  struct MonoDomain * D.29210;
  char * filename;
  MonoImageOpenStatus status;
  gboolean res;
  struct MonoImage * image;
  struct MonoAssemblyName name;
  char * dirname;

  try
    {
      status = 0;
      filename.113 = mono_string_to_utf8 (fname);
      filename = filename.113;
      filename.114 = filename;
      dirname = monoeg_g_path_get_dirname (filename.114);
      D.29200 = mono_domain_get ();
      replace_shadow_path (D.29200, dirname, &filename);
      monoeg_g_free (dirname);
      filename.114 = filename;
      image = mono_image_open (filename.114, &status);
      if (image == 0B) goto <D.29201>; else goto <D.29202>;
      <D.29201>:
      {
        struct MonoException * exc;

        filename.114 = filename;
        monoeg_g_free (filename.114);
        status.115 = status;
        if (status.115 == 3) goto <D.29204>; else goto <D.29205>;
        <D.29204>:
        exc = mono_get_exception_bad_image_format2 (0B, fname);
        goto <D.29206>;
        <D.29205>:
        exc = mono_get_exception_file_not_found2 (0B, fname);
        <D.29206>:
        mono_raise_exception (exc);
      }
      <D.29202>:
      res = mono_assembly_fill_assembly_name (image, &name);
      if (res == 0) goto <D.29207>; else goto <D.29208>;
      <D.29207>:
      mono_image_close (image);
      filename.114 = filename;
      monoeg_g_free (filename.114);
      D.29209 = mono_get_exception_argument ("assemblyFile", "The file does not contain a manifest");
      mono_raise_exception (D.29209);
      <D.29208>:
      filename.114 = filename;
      D.29210 = mono_domain_get ();
      fill_reflection_assembly_name (D.29210, aname, &name, filename.114, 1, 0, 1);
      filename.114 = filename;
      monoeg_g_free (filename.114);
      mono_image_close (image);
    }
  finally
    {
      filename = {CLOBBER};
      status = {CLOBBER};
      name = {CLOBBER};
    }
}


ves_icall_System_Reflection_Assembly_GetTypes (struct MonoReflectionAssembly * assembly, MonoBoolean exportedOnly)
{
  struct MonoVTable * D.29211;
  struct MonoAssembly * D.29212;
  unsigned char D.29213;
  _Bool D.29214;
  long int D.29215;
  long int D.29216;
  int D.29219;
  unsigned int D.29220;
  unsigned int D.29221;
  int D.29224;
  unsigned int D.29225;
  struct MonoAssembly * D.29226;
  long unsigned int D.29229;
  long unsigned int D.29232;
  long unsigned int D.29233;
  unsigned int D.29234;
  long unsigned int D.29235;
  struct MonoClass * D.29236;
  int len1.116;
  long unsigned int D.29238;
  int len2.117;
  struct MonoArray * exceptions.118;
  struct MonoArray * ex2.119;
  <unnamed-unsigned:24> D.29242;
  int D.29243;
  long unsigned int D.29244;
  long unsigned int D.29245;
  char * D.29246;
  struct MonoType * D.29249;
  unsigned char D.29252;
  _Bool D.29256;
  _Bool D.29257;
  _Bool D.29258;
  unsigned int D.29261;
  unsigned int ex_count.120;
  unsigned int D.29263;
  long unsigned int D.29264;
  struct MonoClass * D.29265;
  void * D.29266;
  long unsigned int D.29267;
  char * D.29268;
  _Bool D.29271;
  long int D.29272;
  long int D.29273;
  long unsigned int D.29276;
  struct MonoArray * D.29277;
  struct MonoArray * res;
  struct MonoArray * exceptions;
  struct MonoImage * image;
  struct MonoTableInfo * table;
  struct MonoDomain * domain;
  struct GList * list;
  int i;
  int len;
  int ex_count;

  try
    {
      res = 0B;
      exceptions = 0B;
      image = 0B;
      table = 0B;
      list = 0B;
      D.29211 = MEM[(struct MonoObject *)assembly].vtable;
      domain = D.29211->domain;
      D.29212 = assembly->assembly;
      D.29213 = D.29212->dynamic;
      D.29214 = D.29213 != 0;
      D.29215 = (long int) D.29214;
      D.29216 = __builtin_expect (D.29215, 0);
      if (D.29216 != 0) goto <D.29217>; else goto <D.29218>;
      <D.29217>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 5171, "!assembly->assembly->dynamic");
      <D.29218>:
      D.29212 = assembly->assembly;
      image = D.29212->image;
      table = &image->tables[38];
      D.29219 = (int) exportedOnly;
      res = mono_module_get_types (domain, image, &exceptions, D.29219);
      i = 0;
      goto <D.22879>;
      <D.22878>:
      D.29220 = mono_metadata_decode_row_col (table, i, 0);
      D.29221 = D.29220 & 1;
      if (D.29221 == 0) goto <D.29222>; else goto <D.29223>;
      <D.29222>:
      {
        struct MonoImage * loaded_image;

        D.29224 = i + 1;
        D.29225 = (unsigned int) D.29224;
        D.29226 = image->assembly;
        loaded_image = mono_assembly_load_module (D.29226, D.29225);
        if (loaded_image != 0B) goto <D.29227>; else goto <D.29228>;
        <D.29227>:
        {
          struct MonoArray * ex2;
          struct MonoArray * res2;

          try
            {
              D.29219 = (int) exportedOnly;
              res2 = mono_module_get_types (domain, loaded_image, &ex2, D.29219);
              D.29229 = mono_array_length (res2);
              if (D.29229 != 0) goto <D.29230>; else goto <D.29231>;
              <D.29230>:
              {
                guint32 len1;
                guint32 len2;
                struct MonoArray * res3;
                struct MonoArray * ex3;

                D.29232 = mono_array_length (res);
                len1 = (guint32) D.29232;
                D.29233 = mono_array_length (res2);
                len2 = (guint32) D.29233;
                D.29234 = len1 + len2;
                D.29235 = (long unsigned int) D.29234;
                D.29236 = mono_defaults.monotype_class;
                res3 = mono_array_new (domain, D.29236, D.29235);
                {
                  void * * __p;
                  void * * __s;

                  __p = mono_array_addr_with_size (res3, 8, 0);
                  __s = mono_array_addr_with_size (res, 8, 0);
                  len1.116 = (int) len1;
                  mono_gc_wbarrier_arrayref_copy (__p, __s, len1.116);
                }
                {
                  void * * __p;
                  void * * __s;

                  D.29238 = (long unsigned int) len1;
                  __p = mono_array_addr_with_size (res3, 8, D.29238);
                  __s = mono_array_addr_with_size (res2, 8, 0);
                  len2.117 = (int) len2;
                  mono_gc_wbarrier_arrayref_copy (__p, __s, len2.117);
                }
                res = res3;
                D.29234 = len1 + len2;
                D.29235 = (long unsigned int) D.29234;
                D.29236 = mono_defaults.monotype_class;
                ex3 = mono_array_new (domain, D.29236, D.29235);
                {
                  void * * __p;
                  void * * __s;

                  __p = mono_array_addr_with_size (ex3, 8, 0);
                  exceptions.118 = exceptions;
                  __s = mono_array_addr_with_size (exceptions.118, 8, 0);
                  len1.116 = (int) len1;
                  mono_gc_wbarrier_arrayref_copy (__p, __s, len1.116);
                }
                {
                  void * * __p;
                  void * * __s;

                  D.29238 = (long unsigned int) len1;
                  __p = mono_array_addr_with_size (ex3, 8, D.29238);
                  ex2.119 = ex2;
                  __s = mono_array_addr_with_size (ex2.119, 8, 0);
                  len2.117 = (int) len2;
                  mono_gc_wbarrier_arrayref_copy (__p, __s, len2.117);
                }
                exceptions = ex3;
              }
              <D.29231>:
            }
          finally
            {
              ex2 = {CLOBBER};
            }
        }
        <D.29228>:
      }
      <D.29223>:
      i = i + 1;
      <D.22879>:
      D.29242 = table->rows;
      D.29243 = (int) D.29242;
      if (D.29243 > i) goto <D.22878>; else goto <D.22880>;
      <D.22880>:
      D.29244 = mono_array_length (res);
      len = (int) D.29244;
      ex_count = 0;
      i = 0;
      goto <D.22885>;
      <D.22884>:
      {
        struct MonoReflectionType * t;
        struct MonoClass * klass;

        D.29245 = (long unsigned int) i;
        D.29246 = mono_array_addr_with_size (res, 8, D.29245);
        t = MEM[(void * *)D.29246];
        if (t != 0B) goto <D.29247>; else goto <D.29248>;
        <D.29247>:
        D.29249 = t->type;
        klass = mono_type_get_class (D.29249);
        if (klass != 0B) goto <D.29250>; else goto <D.29251>;
        <D.29250>:
        D.29252 = klass->exception_type;
        if (D.29252 != 0) goto <D.29253>; else goto <D.29254>;
        <D.29253>:
        list = monoeg_g_list_append (list, klass);
        {
          void * * __p;

          D.29245 = (long unsigned int) i;
          __p = mono_array_addr_with_size (res, 8, D.29245);
          mono_gc_wbarrier_set_arrayref (res, __p, 0B);
        }
        <D.29254>:
        <D.29251>:
        goto <D.29255>;
        <D.29248>:
        ex_count = ex_count + 1;
        <D.29255>:
      }
      i = i + 1;
      <D.22885>:
      if (i < len) goto <D.22884>; else goto <D.22886>;
      <D.22886>:
      D.29256 = list != 0B;
      D.29257 = ex_count != 0;
      D.29258 = D.29256 | D.29257;
      if (D.29258 != 0) goto <D.29259>; else goto <D.29260>;
      <D.29259>:
      {
        struct GList * tmp;
        struct MonoException * exc;
        struct MonoArray * exl;
        int j;
        int length;

        tmp = 0B;
        exc = 0B;
        exl = 0B;
        D.29261 = monoeg_g_list_length (list);
        ex_count.120 = (unsigned int) ex_count;
        D.29263 = D.29261 + ex_count.120;
        length = (int) D.29263;
        mono_loader_clear_error ();
        D.29264 = (long unsigned int) length;
        D.29265 = mono_defaults.exception_class;
        exl = mono_array_new (domain, D.29265, D.29264);
        i = 0;
        tmp = list;
        goto <D.22895>;
        <D.22894>:
        {
          struct MonoException * exc;

          D.29266 = tmp->data;
          exc = mono_class_get_exception_for_failure (D.29266);
          {
            void * * __p;

            D.29245 = (long unsigned int) i;
            __p = mono_array_addr_with_size (exl, 8, D.29245);
            mono_gc_wbarrier_set_arrayref (exl, __p, exc);
          }
        }
        i = i + 1;
        tmp = tmp->next;
        <D.22895>:
        if (tmp != 0B) goto <D.22894>; else goto <D.22896>;
        <D.22896>:
        j = 0;
        goto <D.22900>;
        <D.22899>:
        {
          struct MonoException * exc;

          D.29267 = (long unsigned int) j;
          exceptions.118 = exceptions;
          D.29268 = mono_array_addr_with_size (exceptions.118, 8, D.29267);
          exc = MEM[(struct MonoException * *)D.29268];
          if (exc != 0B) goto <D.29269>; else goto <D.29270>;
          <D.29269>:
          D.29271 = i >= length;
          D.29272 = (long int) D.29271;
          D.29273 = __builtin_expect (D.29272, 0);
          if (D.29273 != 0) goto <D.29274>; else goto <D.29275>;
          <D.29274>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 5248, "i < length");
          <D.29275>:
          {
            void * * __p;

            D.29245 = (long unsigned int) i;
            __p = mono_array_addr_with_size (exl, 8, D.29245);
            mono_gc_wbarrier_set_arrayref (exl, __p, exc);
          }
          i = i + 1;
          <D.29270>:
        }
        j = j + 1;
        <D.22900>:
        D.29267 = (long unsigned int) j;
        exceptions.118 = exceptions;
        D.29276 = mono_array_length (exceptions.118);
        if (D.29267 < D.29276) goto <D.22899>; else goto <D.22901>;
        <D.22901>:
        monoeg_g_list_free (list);
        list = 0B;
        exc = mono_get_exception_reflection_type_load (res, exl);
        mono_loader_clear_error ();
        mono_raise_exception (exc);
      }
      <D.29260>:
      D.29277 = res;
      return D.29277;
    }
  finally
    {
      exceptions = {CLOBBER};
    }
}


ves_icall_System_Reflection_Assembly_GetReferencedAssemblies (struct MonoReflectionAssembly * assembly)
{
  struct MonoVTable * D.29280;
  struct MonoAssembly * D.29281;
  struct MonoClass * System_Reflection_AssemblyName.121;
  struct MonoImage * D.29285;
  struct MonoClass * System_Reflection_AssemblyName.122;
  struct MonoImage * D.29287;
  <unnamed-unsigned:24> D.29288;
  long unsigned int D.29289;
  struct MonoMethod * create_culture.123;
  struct MonoMethod * create_culture.124;
  _Bool D.29296;
  long int D.29297;
  long int D.29298;
  unsigned int D.29301;
  const char * D.29302;
  struct MonoString * D.29303;
  struct MonoString * * D.29304;
  unsigned int D.29305;
  int D.29306;
  unsigned int D.29307;
  int D.29308;
  unsigned int D.29309;
  int D.29310;
  unsigned int D.29311;
  int D.29312;
  unsigned int D.29313;
  int D.29314;
  unsigned int D.29315;
  int D.29316;
  unsigned int D.29317;
  int D.29318;
  unsigned int D.29319;
  int D.29320;
  unsigned int D.29321;
  struct MonoObject * D.29322;
  struct MonoObject * * D.29323;
  unsigned int D.29326;
  const char * D.29327;
  struct MonoString * D.29328;
  struct MonoObject * D.29329;
  struct MonoObject * * D.29330;
  unsigned int D.29331;
  const char * pkey_ptr.125;
  const gchar * pkey_ptr.126;
  unsigned int D.29336;
  long unsigned int D.29339;
  struct MonoClass * D.29340;
  struct MonoArray * D.29341;
  struct MonoArray * * D.29342;
  long unsigned int D.29343;
  struct MonoArray * D.29344;
  char * D.29345;
  struct MonoArray * D.29347;
  struct MonoArray * * D.29348;
  struct MonoArray * D.29349;
  char * D.29350;
  struct MonoArray * D.29352;
  long unsigned int D.29353;
  struct MonoArray * D.29354;
  static struct MonoClass * System_Reflection_AssemblyName;
  struct MonoArray * result;
  struct MonoDomain * domain;
  int i;
  int count;
  static struct MonoMethod * create_culture = 0B;
  struct MonoImage * image;
  struct MonoTableInfo * t;

  D.29280 = MEM[(struct MonoObject *)assembly].vtable;
  domain = D.29280->domain;
  count = 0;
  D.29281 = assembly->assembly;
  image = D.29281->image;
  System_Reflection_AssemblyName.121 = System_Reflection_AssemblyName;
  if (System_Reflection_AssemblyName.121 == 0B) goto <D.29283>; else goto <D.29284>;
  <D.29283>:
  D.29285 = mono_defaults.corlib;
  System_Reflection_AssemblyName.122 = mono_class_from_name (D.29285, "System.Reflection", "AssemblyName");
  System_Reflection_AssemblyName = System_Reflection_AssemblyName.122;
  <D.29284>:
  D.29281 = assembly->assembly;
  D.29287 = D.29281->image;
  t = &D.29287->tables[35];
  D.29288 = t->rows;
  count = (int) D.29288;
  D.29289 = (long unsigned int) count;
  System_Reflection_AssemblyName.121 = System_Reflection_AssemblyName;
  result = mono_array_new (domain, System_Reflection_AssemblyName.121, D.29289);
  if (count > 0) goto <D.29290>; else goto <D.29291>;
  <D.29290>:
  create_culture.123 = create_culture;
  if (create_culture.123 == 0B) goto <D.29293>; else goto <D.29294>;
  <D.29293>:
  {
    struct MonoMethodDesc * desc;

    desc = mono_method_desc_new ("System.Globalization.CultureInfo:CreateCulture(string,bool)", 1);
    D.29285 = mono_defaults.corlib;
    create_culture.124 = mono_method_desc_search_in_image (desc, D.29285);
    create_culture = create_culture.124;
    create_culture.123 = create_culture;
    D.29296 = create_culture.123 == 0B;
    D.29297 = (long int) D.29296;
    D.29298 = __builtin_expect (D.29297, 0);
    if (D.29298 != 0) goto <D.29299>; else goto <D.29300>;
    <D.29299>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 4450, "create_culture");
    <D.29300>:
    mono_method_desc_free (desc);
  }
  <D.29294>:
  <D.29291>:
  i = 0;
  goto <D.22591>;
  <D.22590>:
  {
    struct MonoReflectionAssemblyName * aname;
    guint32 cols[9];

    try
      {
        mono_metadata_decode_row (t, i, &cols, 9);
        System_Reflection_AssemblyName.121 = System_Reflection_AssemblyName;
        aname = mono_object_new (domain, System_Reflection_AssemblyName.121);
        D.29301 = cols[6];
        D.29302 = mono_metadata_string_heap (image, D.29301);
        D.29303 = mono_string_new (domain, D.29302);
        D.29304 = &aname->name;
        mono_gc_wbarrier_set_field (aname, D.29304, D.29303);
        D.29305 = cols[0];
        D.29306 = (int) D.29305;
        aname->major = D.29306;
        D.29307 = cols[1];
        D.29308 = (int) D.29307;
        aname->minor = D.29308;
        D.29309 = cols[2];
        D.29310 = (int) D.29309;
        aname->build = D.29310;
        D.29311 = cols[3];
        D.29312 = (int) D.29311;
        aname->revision = D.29312;
        D.29313 = cols[4];
        aname->flags = D.29313;
        aname->versioncompat = 1;
        aname->hashalg = 32772;
        D.29314 = aname->revision;
        D.29315 = (unsigned int) D.29314;
        D.29316 = aname->build;
        D.29317 = (unsigned int) D.29316;
        D.29318 = aname->minor;
        D.29319 = (unsigned int) D.29318;
        D.29320 = aname->major;
        D.29321 = (unsigned int) D.29320;
        D.29322 = create_version (domain, D.29321, D.29319, D.29317, D.29315);
        D.29323 = &aname->version;
        mono_gc_wbarrier_set_field (aname, D.29323, D.29322);
        create_culture.123 = create_culture;
        if (create_culture.123 != 0B) goto <D.29324>; else goto <D.29325>;
        <D.29324>:
        {
          void * args[2];
          MonoBoolean assembly_ref;

          try
            {
              assembly_ref = 1;
              D.29326 = cols[7];
              D.29327 = mono_metadata_string_heap (image, D.29326);
              D.29328 = mono_string_new (domain, D.29327);
              args[0] = D.29328;
              args[1] = &assembly_ref;
              create_culture.123 = create_culture;
              D.29329 = mono_runtime_invoke (create_culture.123, 0B, &args, 0B);
              D.29330 = &aname->cultureInfo;
              mono_gc_wbarrier_set_field (aname, D.29330, D.29329);
            }
          finally
            {
              args = {CLOBBER};
              assembly_ref = {CLOBBER};
            }
        }
        <D.29325>:
        D.29331 = cols[5];
        if (D.29331 != 0) goto <D.29332>; else goto <D.29333>;
        <D.29332>:
        {
          const gchar * pkey_ptr;
          guint32 pkey_len;

          try
            {
              D.29331 = cols[5];
              pkey_ptr.125 = mono_metadata_blob_heap (image, D.29331);
              pkey_ptr = pkey_ptr.125;
              pkey_ptr.126 = pkey_ptr;
              pkey_len = mono_metadata_decode_blob_size (pkey_ptr.126, &pkey_ptr);
              D.29313 = cols[4];
              D.29336 = D.29313 & 1;
              if (D.29336 != 0) goto <D.29337>; else goto <D.29338>;
              <D.29337>:
              D.29339 = (long unsigned int) pkey_len;
              D.29340 = mono_defaults.byte_class;
              D.29341 = mono_array_new (domain, D.29340, D.29339);
              D.29342 = &aname->publicKey;
              mono_gc_wbarrier_set_field (aname, D.29342, D.29341);
              D.29343 = (long unsigned int) pkey_len;
              pkey_ptr.126 = pkey_ptr;
              D.29344 = aname->publicKey;
              D.29345 = mono_array_addr_with_size (D.29344, 1, 0);
              memcpy (D.29345, pkey_ptr.126, D.29343);
              goto <D.29346>;
              <D.29338>:
              D.29339 = (long unsigned int) pkey_len;
              D.29340 = mono_defaults.byte_class;
              D.29347 = mono_array_new (domain, D.29340, D.29339);
              D.29348 = &aname->keyToken;
              mono_gc_wbarrier_set_field (aname, D.29348, D.29347);
              D.29343 = (long unsigned int) pkey_len;
              pkey_ptr.126 = pkey_ptr;
              D.29349 = aname->keyToken;
              D.29350 = mono_array_addr_with_size (D.29349, 1, 0);
              memcpy (D.29350, pkey_ptr.126, D.29343);
              <D.29346>:
            }
          finally
            {
              pkey_ptr = {CLOBBER};
            }
        }
        goto <D.29351>;
        <D.29333>:
        D.29340 = mono_defaults.byte_class;
        D.29352 = mono_array_new (domain, D.29340, 0);
        D.29348 = &aname->keyToken;
        mono_gc_wbarrier_set_field (aname, D.29348, D.29352);
        <D.29351>:
        {
          void * * __p;

          D.29353 = (long unsigned int) i;
          __p = mono_array_addr_with_size (result, 8, D.29353);
          mono_gc_wbarrier_set_arrayref (result, __p, aname);
        }
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  i = i + 1;
  <D.22591>:
  if (i < count) goto <D.22590>; else goto <D.22592>;
  <D.22592>:
  D.29354 = result;
  return D.29354;
}


ves_icall_System_Reflection_Assembly_GetModulesInternal (struct MonoReflectionAssembly * assembly)
{
  struct MonoAssembly * D.29356;
  _Bool D.29357;
  long int D.29358;
  long int D.29359;
  unsigned char D.29362;
  _Bool D.29363;
  long int D.29364;
  long int D.29365;
  <unnamed-unsigned:24> D.29368;
  long unsigned int D.29369;
  long unsigned int D.29370;
  struct MonoImage * * D.29371;
  struct MonoImage * D.29372;
  unsigned int i.127;
  struct MonoImage * D.29376;
  unsigned int file_count.128;
  unsigned int D.29378;
  unsigned int D.29379;
  long unsigned int D.29380;
  struct MonoReflectionModule * D.29381;
  long unsigned int D.29384;
  struct MonoReflectionModule * D.29385;
  unsigned int D.29386;
  struct MonoReflectionModule * D.29389;
  int D.29391;
  unsigned int D.29394;
  const char * D.29395;
  struct MonoDomain * D.29396;
  struct MonoException * D.29397;
  struct MonoReflectionModule * D.29398;
  struct MonoArray * D.29399;
  struct MonoDomain * domain;
  struct MonoArray * res;
  struct MonoClass * klass;
  int i;
  int j;
  int file_count;
  struct MonoImage * * modules;
  guint32 module_count;
  guint32 real_module_count;
  struct MonoTableInfo * table;
  guint32 cols[3];
  struct MonoImage * image;

  try
    {
      domain = mono_domain_get ();
      file_count = 0;
      D.29356 = assembly->assembly;
      image = D.29356->image;
      D.29357 = image == 0B;
      D.29358 = (long int) D.29357;
      D.29359 = __builtin_expect (D.29358, 0);
      if (D.29359 != 0) goto <D.29360>; else goto <D.29361>;
      <D.29360>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 4696, "image != NULL");
      <D.29361>:
      D.29356 = assembly->assembly;
      D.29362 = D.29356->dynamic;
      D.29363 = D.29362 != 0;
      D.29364 = (long int) D.29363;
      D.29365 = __builtin_expect (D.29364, 0);
      if (D.29365 != 0) goto <D.29366>; else goto <D.29367>;
      <D.29366>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 4697, "!assembly->assembly->dynamic");
      <D.29367>:
      table = &image->tables[38];
      D.29368 = table->rows;
      file_count = (int) D.29368;
      modules = image->modules;
      module_count = image->module_count;
      real_module_count = 0;
      i = 0;
      goto <D.22699>;
      <D.22698>:
      D.29369 = (long unsigned int) i;
      D.29370 = D.29369 * 8;
      D.29371 = modules + D.29370;
      D.29372 = *D.29371;
      if (D.29372 != 0B) goto <D.29373>; else goto <D.29374>;
      <D.29373>:
      real_module_count = real_module_count + 1;
      <D.29374>:
      i = i + 1;
      <D.22699>:
      i.127 = (unsigned int) i;
      if (i.127 < module_count) goto <D.22698>; else goto <D.22700>;
      <D.22700>:
      D.29376 = mono_defaults.corlib;
      klass = mono_class_from_name (D.29376, "System.Reflection", "Module");
      file_count.128 = (unsigned int) file_count;
      D.29378 = real_module_count + file_count.128;
      D.29379 = D.29378 + 1;
      D.29380 = (long unsigned int) D.29379;
      res = mono_array_new (domain, klass, D.29380);
      {
        void * * __p;

        __p = mono_array_addr_with_size (res, 8, 0);
        D.29381 = mono_module_get_object (domain, image);
        mono_gc_wbarrier_set_arrayref (res, __p, D.29381);
      }
      j = 1;
      i = 0;
      goto <D.22704>;
      <D.22703>:
      D.29369 = (long unsigned int) i;
      D.29370 = D.29369 * 8;
      D.29371 = modules + D.29370;
      D.29372 = *D.29371;
      if (D.29372 != 0B) goto <D.29382>; else goto <D.29383>;
      <D.29382>:
      {
        void * * __p;

        D.29384 = (long unsigned int) j;
        __p = mono_array_addr_with_size (res, 8, D.29384);
        D.29369 = (long unsigned int) i;
        D.29370 = D.29369 * 8;
        D.29371 = modules + D.29370;
        D.29372 = *D.29371;
        D.29385 = mono_module_get_object (domain, D.29372);
        mono_gc_wbarrier_set_arrayref (res, __p, D.29385);
      }
      j = j + 1;
      <D.29383>:
      i = i + 1;
      <D.22704>:
      i.127 = (unsigned int) i;
      if (i.127 < module_count) goto <D.22703>; else goto <D.22705>;
      <D.22705>:
      i = 0;
      goto <D.22711>;
      <D.22710>:
      mono_metadata_decode_row (table, i, &cols, 3);
      D.29386 = cols[0];
      if (D.29386 != 0) goto <D.29387>; else goto <D.29388>;
      <D.29387>:
      {
        void * * __p;

        D.29384 = (long unsigned int) j;
        __p = mono_array_addr_with_size (res, 8, D.29384);
        D.29389 = mono_module_file_get_object (domain, image, i);
        mono_gc_wbarrier_set_arrayref (res, __p, D.29389);
      }
      goto <D.29390>;
      <D.29388>:
      {
        struct MonoImage * m;

        D.29391 = i + 1;
        m = mono_image_load_file_for_image (image, D.29391);
        if (m == 0B) goto <D.29392>; else goto <D.29393>;
        <D.29392>:
        {
          struct MonoString * fname;

          D.29394 = cols[1];
          D.29395 = mono_metadata_string_heap (image, D.29394);
          D.29396 = mono_domain_get ();
          fname = mono_string_new (D.29396, D.29395);
          D.29397 = mono_get_exception_file_not_found2 (0B, fname);
          mono_raise_exception (D.29397);
        }
        <D.29393>:
        {
          void * * __p;

          D.29384 = (long unsigned int) j;
          __p = mono_array_addr_with_size (res, 8, D.29384);
          D.29398 = mono_module_get_object (domain, m);
          mono_gc_wbarrier_set_arrayref (res, __p, D.29398);
        }
      }
      <D.29390>:
      i = i + 1;
      j = j + 1;
      <D.22711>:
      if (i < file_count) goto <D.22710>; else goto <D.22712>;
      <D.22712>:
      D.29399 = res;
      return D.29399;
    }
  finally
    {
      cols = {CLOBBER};
    }
}


ves_icall_System_Reflection_Assembly_GetManifestResourceNames (struct MonoReflectionAssembly * assembly)
{
  struct MonoAssembly * D.29402;
  struct MonoImage * D.29403;
  <unnamed-unsigned:24> D.29404;
  long unsigned int D.29405;
  struct MonoClass * D.29406;
  struct MonoVTable * D.29407;
  struct MonoDomain * D.29408;
  unsigned int D.29409;
  long unsigned int D.29410;
  struct MonoString * D.29411;
  int D.29412;
  struct MonoArray * D.29413;
  struct MonoTableInfo * table;
  struct MonoArray * result;
  int i;
  const char * val;

  D.29402 = assembly->assembly;
  D.29403 = D.29402->image;
  table = &D.29403->tables[40];
  D.29404 = table->rows;
  D.29405 = (long unsigned int) D.29404;
  D.29406 = mono_defaults.string_class;
  D.29407 = MEM[(struct MonoObject *)assembly].vtable;
  D.29408 = D.29407->domain;
  result = mono_array_new (D.29408, D.29406, D.29405);
  i = 0;
  goto <D.22557>;
  <D.22556>:
  D.29409 = mono_metadata_decode_row_col (table, i, 2);
  D.29402 = assembly->assembly;
  D.29403 = D.29402->image;
  val = mono_metadata_string_heap (D.29403, D.29409);
  {
    void * * __p;

    D.29410 = (long unsigned int) i;
    __p = mono_array_addr_with_size (result, 8, D.29410);
    D.29407 = MEM[(struct MonoObject *)assembly].vtable;
    D.29408 = D.29407->domain;
    D.29411 = mono_string_new (D.29408, val);
    mono_gc_wbarrier_set_arrayref (result, __p, D.29411);
  }
  i = i + 1;
  <D.22557>:
  D.29404 = table->rows;
  D.29412 = (int) D.29404;
  if (D.29412 > i) goto <D.22556>; else goto <D.22558>;
  <D.22558>:
  D.29413 = result;
  return D.29413;
}


ves_icall_System_Reflection_Assembly_GetManifestResourceInternal (struct MonoReflectionAssembly * assembly, struct MonoString * name, gint32 * size, struct MonoReflectionModule * * ref_module)
{
  struct MonoAssembly * D.29415;
  struct MonoImage * D.29416;
  int i.129;
  unsigned int D.29418;
  int D.22619;
  <unnamed-unsigned:24> D.29420;
  unsigned int D.29421;
  void * D.29424;
  unsigned int D.29427;
  _Bool D.29428;
  long int D.29429;
  long int D.29430;
  int file_idx.130;
  struct MonoDomain * D.29437;
  struct MonoReflectionModule * D.29438;
  unsigned int D.29439;
  char * n;
  struct MonoTableInfo * table;
  guint32 i;
  guint32 cols[4];
  guint32 impl;
  guint32 file_idx;
  const char * val;
  struct MonoImage * module;

  try
    {
      n = mono_string_to_utf8 (name);
      D.29415 = assembly->assembly;
      D.29416 = D.29415->image;
      table = &D.29416->tables[40];
      i = 0;
      goto <D.22622>;
      <D.22621>:
      i.129 = (int) i;
      mono_metadata_decode_row (table, i.129, &cols, 4);
      D.29418 = cols[2];
      D.29415 = assembly->assembly;
      D.29416 = D.29415->image;
      val = mono_metadata_string_heap (D.29416, D.29418);
      {
        size_t __s1_len;
        size_t __s2_len;

        D.22619 = __builtin_strcmp (val, n);
      }
      if (D.22619 == 0) goto <D.22620>; else goto <D.29419>;
      <D.29419>:
      i = i + 1;
      <D.22622>:
      D.29420 = table->rows;
      D.29421 = (unsigned int) D.29420;
      if (D.29421 > i) goto <D.22621>; else goto <D.22620>;
      <D.22620>:
      monoeg_g_free (n);
      D.29420 = table->rows;
      D.29421 = (unsigned int) D.29420;
      if (D.29421 == i) goto <D.29422>; else goto <D.29423>;
      <D.29422>:
      D.29424 = 0B;
      return D.29424;
      <D.29423>:
      impl = cols[3];
      if (impl != 0) goto <D.29425>; else goto <D.29426>;
      <D.29425>:
      D.29427 = impl & 3;
      D.29428 = D.29427 != 0;
      D.29429 = (long int) D.29428;
      D.29430 = __builtin_expect (D.29429, 0);
      if (D.29430 != 0) goto <D.29431>; else goto <D.29432>;
      <D.29431>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 4553, "(impl & MONO_IMPLEMENTATION_MASK) == MONO_IMPLEMENTATION_FILE");
      <D.29432>:
      file_idx = impl >> 2;
      file_idx.130 = (int) file_idx;
      D.29415 = assembly->assembly;
      D.29416 = D.29415->image;
      module = mono_image_load_file_for_image (D.29416, file_idx.130);
      if (module == 0B) goto <D.29434>; else goto <D.29435>;
      <D.29434>:
      D.29424 = 0B;
      return D.29424;
      <D.29435>:
      goto <D.29436>;
      <D.29426>:
      D.29415 = assembly->assembly;
      module = D.29415->image;
      <D.29436>:
      D.29437 = mono_domain_get ();
      D.29438 = mono_module_get_object (D.29437, module);
      mono_gc_wbarrier_generic_store (ref_module, D.29438);
      D.29439 = cols[0];
      D.29424 = mono_image_get_resource (module, D.29439, size);
      return D.29424;
    }
  finally
    {
      cols = {CLOBBER};
    }
}


ves_icall_System_Reflection_Assembly_GetManifestResourceInfoInternal (struct MonoReflectionAssembly * assembly, struct MonoString * name, struct MonoManifestResourceInfo * info)
{
  struct MonoAssembly * D.29442;
  struct MonoImage * D.29443;
  unsigned int D.29444;
  int D.22642;
  <unnamed-unsigned:24> D.29446;
  int D.29447;
  gboolean D.29450;
  unsigned int D.29451;
  unsigned int D.29455;
  unsigned int D.29456;
  int D.29457;
  unsigned int D.29458;
  struct MonoVTable * D.29459;
  struct MonoDomain * D.29460;
  struct MonoString * D.29461;
  struct MonoString * * D.29462;
  unsigned int D.29463;
  struct MonoAssembly * * D.29467;
  long unsigned int D.29468;
  long unsigned int D.29469;
  sizetype D.29470;
  struct MonoAssembly * * D.29471;
  struct MonoAssembly * D.29472;
  char * D.29475;
  struct MonoDomain * D.29476;
  struct MonoReflectionAssembly * D.29477;
  struct MonoReflectionAssembly * * D.29478;
  struct MonoReflectionAssembly * D.29479;
  unsigned int D.29480;
  unsigned int D.29481;
  struct MonoTableInfo * table;
  int i;
  guint32 cols[4];
  guint32 file_cols[3];
  const char * val;
  char * n;

  try
    {
      D.29442 = assembly->assembly;
      D.29443 = D.29442->image;
      table = &D.29443->tables[40];
      n = mono_string_to_utf8 (name);
      i = 0;
      goto <D.22645>;
      <D.22644>:
      mono_metadata_decode_row (table, i, &cols, 4);
      D.29444 = cols[2];
      D.29442 = assembly->assembly;
      D.29443 = D.29442->image;
      val = mono_metadata_string_heap (D.29443, D.29444);
      {
        size_t __s1_len;
        size_t __s2_len;

        D.22642 = __builtin_strcmp (val, n);
      }
      if (D.22642 == 0) goto <D.22643>; else goto <D.29445>;
      <D.29445>:
      i = i + 1;
      <D.22645>:
      D.29446 = table->rows;
      D.29447 = (int) D.29446;
      if (D.29447 > i) goto <D.22644>; else goto <D.22643>;
      <D.22643>:
      monoeg_g_free (n);
      D.29446 = table->rows;
      D.29447 = (int) D.29446;
      if (D.29447 == i) goto <D.29448>; else goto <D.29449>;
      <D.29448>:
      D.29450 = 0;
      return D.29450;
      <D.29449>:
      D.29451 = cols[3];
      if (D.29451 == 0) goto <D.29452>; else goto <D.29453>;
      <D.29452>:
      info->location = 5;
      goto <D.29454>;
      <D.29453>:
      D.29451 = cols[3];
      D.29455 = D.29451 & 3;
      switch (D.29455) <default: <D.29482>, case 0: <D.22646>, case 1: <D.22648>, case 2: <D.22651>>
      <D.22646>:
      D.29451 = cols[3];
      D.29456 = D.29451 >> 2;
      i = (int) D.29456;
      D.29442 = assembly->assembly;
      D.29443 = D.29442->image;
      table = &D.29443->tables[38];
      D.29457 = i + -1;
      mono_metadata_decode_row (table, D.29457, &file_cols, 3);
      D.29458 = file_cols[1];
      D.29442 = assembly->assembly;
      D.29443 = D.29442->image;
      val = mono_metadata_string_heap (D.29443, D.29458);
      D.29459 = MEM[(struct MonoObject *)assembly].vtable;
      D.29460 = D.29459->domain;
      D.29461 = mono_string_new (D.29460, val);
      D.29462 = &info->filename;
      mono_gc_wbarrier_set_field (info, D.29462, D.29461);
      D.29463 = file_cols[0];
      if (D.29463 != 0) goto <D.29464>; else goto <D.29465>;
      <D.29464>:
      info->location = 0;
      goto <D.29466>;
      <D.29465>:
      info->location = 1;
      <D.29466>:
      goto <D.22647>;
      <D.22648>:
      D.29451 = cols[3];
      D.29456 = D.29451 >> 2;
      i = (int) D.29456;
      D.29457 = i + -1;
      D.29442 = assembly->assembly;
      D.29443 = D.29442->image;
      mono_assembly_load_reference (D.29443, D.29457);
      D.29442 = assembly->assembly;
      D.29443 = D.29442->image;
      D.29467 = D.29443->references;
      D.29468 = (long unsigned int) i;
      D.29469 = D.29468 * 8;
      D.29470 = D.29469 + 18446744073709551608;
      D.29471 = D.29467 + D.29470;
      D.29472 = *D.29471;
      if (D.29472 == -1B) goto <D.29473>; else goto <D.29474>;
      <D.29473>:
      {
        char * msg;
        struct MonoException * ex;

        D.29442 = assembly->assembly;
        D.29443 = D.29442->image;
        D.29475 = D.29443->name;
        D.29457 = i + -1;
        msg = monoeg_g_strdup_printf ("Assembly %d referenced from assembly %s not found ", D.29457, D.29475);
        ex = mono_get_exception_file_not_found2 (msg, 0B);
        monoeg_g_free (msg);
        mono_raise_exception (ex);
      }
      <D.29474>:
      D.29442 = assembly->assembly;
      D.29443 = D.29442->image;
      D.29467 = D.29443->references;
      D.29468 = (long unsigned int) i;
      D.29469 = D.29468 * 8;
      D.29470 = D.29469 + 18446744073709551608;
      D.29471 = D.29467 + D.29470;
      D.29472 = *D.29471;
      D.29476 = mono_domain_get ();
      D.29477 = mono_assembly_get_object (D.29476, D.29472);
      D.29478 = &info->assembly;
      mono_gc_wbarrier_set_field (info, D.29478, D.29477);
      D.29479 = info->assembly;
      ves_icall_System_Reflection_Assembly_GetManifestResourceInfoInternal (D.29479, name, info);
      D.29480 = info->location;
      D.29481 = D.29480 | 2;
      info->location = D.29481;
      goto <D.22647>;
      <D.22651>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "icall.c", 4625);
      <D.29482>:
      <D.22647>:
      <D.29454>:
      D.29450 = 1;
      return D.29450;
    }
  finally
    {
      cols = {CLOBBER};
      file_cols = {CLOBBER};
    }
}


ves_icall_System_Reflection_Assembly_GetManifestModuleInternal (struct MonoReflectionAssembly * assembly)
{
  struct MonoReflectionModule * D.29485;
  struct MonoAssembly * D.29486;
  struct MonoImage * D.29487;
  struct MonoVTable * D.29488;
  struct MonoDomain * D.29489;

  D.29486 = assembly->assembly;
  D.29487 = D.29486->image;
  D.29488 = MEM[(struct MonoObject *)assembly].vtable;
  D.29489 = D.29488->domain;
  D.29485 = mono_module_get_object (D.29489, D.29487);
  return D.29485;
}


ves_icall_System_Reflection_Assembly_GetFilesInternal (struct MonoReflectionAssembly * assembly, struct MonoString * name, MonoBoolean resource_modules)
{
  struct MonoAssembly * D.29491;
  struct MonoImage * D.29492;
  unsigned int D.29495;
  int D.22671;
  char * D.29498;
  struct MonoVTable * D.29499;
  struct MonoDomain * D.29500;
  struct MonoObject * D.29501;
  <unnamed-unsigned:24> D.29502;
  int D.29503;
  unsigned int D.29507;
  unsigned int D.29508;
  long unsigned int D.29509;
  struct MonoClass * D.29510;
  unsigned int D.29514;
  unsigned int D.29515;
  unsigned int D.29516;
  struct MonoString * D.29517;
  struct MonoTableInfo * table;
  struct MonoArray * result;
  int i;
  int count;
  const char * val;
  char * n;

  D.29491 = assembly->assembly;
  D.29492 = D.29491->image;
  table = &D.29492->tables[38];
  result = 0B;
  if (name != 0B) goto <D.29493>; else goto <D.29494>;
  <D.29493>:
  n = mono_string_to_utf8 (name);
  i = 0;
  goto <D.22674>;
  <D.22673>:
  D.29495 = mono_metadata_decode_row_col (table, i, 1);
  D.29491 = assembly->assembly;
  D.29492 = D.29491->image;
  val = mono_metadata_string_heap (D.29492, D.29495);
  {
    size_t __s1_len;
    size_t __s2_len;

    D.22671 = __builtin_strcmp (val, n);
  }
  if (D.22671 == 0) goto <D.29496>; else goto <D.29497>;
  <D.29496>:
  {
    struct MonoString * fn;

    monoeg_g_free (n);
    D.29491 = assembly->assembly;
    D.29498 = D.29491->basedir;
    n = g_concat_dir_and_file (D.29498, val);
    D.29499 = MEM[(struct MonoObject *)assembly].vtable;
    D.29500 = D.29499->domain;
    fn = mono_string_new (D.29500, n);
    monoeg_g_free (n);
    D.29501 = fn;
    return D.29501;
  }
  <D.29497>:
  i = i + 1;
  <D.22674>:
  D.29502 = table->rows;
  D.29503 = (int) D.29502;
  if (D.29503 > i) goto <D.22673>; else goto <D.22675>;
  <D.22675>:
  monoeg_g_free (n);
  D.29501 = 0B;
  return D.29501;
  <D.29494>:
  count = 0;
  i = 0;
  goto <D.22677>;
  <D.22676>:
  if (resource_modules != 0) goto <D.29504>; else goto <D.29506>;
  <D.29506>:
  D.29507 = mono_metadata_decode_row_col (table, i, 0);
  D.29508 = D.29507 & 1;
  if (D.29508 == 0) goto <D.29504>; else goto <D.29505>;
  <D.29504>:
  count = count + 1;
  <D.29505>:
  i = i + 1;
  <D.22677>:
  D.29502 = table->rows;
  D.29503 = (int) D.29502;
  if (D.29503 > i) goto <D.22676>; else goto <D.22678>;
  <D.22678>:
  D.29509 = (long unsigned int) count;
  D.29510 = mono_defaults.string_class;
  D.29499 = MEM[(struct MonoObject *)assembly].vtable;
  D.29500 = D.29499->domain;
  result = mono_array_new (D.29500, D.29510, D.29509);
  count = 0;
  i = 0;
  goto <D.22681>;
  <D.22680>:
  if (resource_modules != 0) goto <D.29511>; else goto <D.29513>;
  <D.29513>:
  D.29514 = mono_metadata_decode_row_col (table, i, 0);
  D.29515 = D.29514 & 1;
  if (D.29515 == 0) goto <D.29511>; else goto <D.29512>;
  <D.29511>:
  D.29516 = mono_metadata_decode_row_col (table, i, 1);
  D.29491 = assembly->assembly;
  D.29492 = D.29491->image;
  val = mono_metadata_string_heap (D.29492, D.29516);
  D.29491 = assembly->assembly;
  D.29498 = D.29491->basedir;
  n = g_concat_dir_and_file (D.29498, val);
  {
    void * * __p;

    D.29509 = (long unsigned int) count;
    __p = mono_array_addr_with_size (result, 8, D.29509);
    D.29499 = MEM[(struct MonoObject *)assembly].vtable;
    D.29500 = D.29499->domain;
    D.29517 = mono_string_new (D.29500, n);
    mono_gc_wbarrier_set_arrayref (result, __p, D.29517);
  }
  monoeg_g_free (n);
  count = count + 1;
  <D.29512>:
  i = i + 1;
  <D.22681>:
  D.29502 = table->rows;
  D.29503 = (int) D.29502;
  if (D.29503 > i) goto <D.22680>; else goto <D.22682>;
  <D.22682>:
  D.29501 = result;
  return D.29501;
}


g_concat_dir_and_file (const char * dir, const char * file)
{
  char * D.29521;
  long unsigned int D.29524;
  sizetype D.29525;
  const char * D.29526;
  char D.29527;

  if (dir == 0B) goto <D.29519>; else goto <D.29520>;
  <D.29519>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "icall.c", 4511, "dir != NULL");
  D.29521 = 0B;
  return D.29521;
  <D.29520>:
  if (file == 0B) goto <D.29522>; else goto <D.29523>;
  <D.29522>:
  monoeg_g_log (0B, 8, "%s:%d: assertion \'%s\' failed", "icall.c", 4512, "file != NULL");
  D.29521 = 0B;
  return D.29521;
  <D.29523>:
  D.29524 = strlen (dir);
  D.29525 = D.29524 + 18446744073709551615;
  D.29526 = dir + D.29525;
  D.29527 = *D.29526;
  if (D.29527 != 47) goto <D.29528>; else goto <D.29529>;
  <D.29528>:
  D.29521 = monoeg_g_strconcat (dir, "/", file, 0B);
  return D.29521;
  <D.29529>:
  D.29521 = monoeg_g_strconcat (dir, file, 0B);
  return D.29521;
}


ves_icall_System_Reflection_Assembly_GetExecutingAssembly ()
{
  struct MonoMethod * dest.131;
  _Bool D.29532;
  long int D.29533;
  long int D.29534;
  struct MonoReflectionAssembly * D.29537;
  struct MonoClass * D.29538;
  struct MonoImage * D.29539;
  struct MonoAssembly * D.29540;
  struct MonoDomain * D.29541;
  struct MonoMethod * dest;

  try
    {
      dest = 0B;
      mono_stack_walk_no_il (get_executing, &dest);
      dest.131 = dest;
      D.29532 = dest.131 == 0B;
      D.29533 = (long int) D.29532;
      D.29534 = __builtin_expect (D.29533, 0);
      if (D.29534 != 0) goto <D.29535>; else goto <D.29536>;
      <D.29535>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 4821, "dest");
      <D.29536>:
      dest.131 = dest;
      D.29538 = dest.131->klass;
      D.29539 = D.29538->image;
      D.29540 = D.29539->assembly;
      D.29541 = mono_domain_get ();
      D.29537 = mono_assembly_get_object (D.29541, D.29540);
      return D.29537;
    }
  finally
    {
      dest = {CLOBBER};
    }
}


get_executing (struct MonoMethod * m, gint32 no, gint32 ilo, gboolean managed, void * data)
{
  gboolean D.29546;
  struct MonoMethod * D.29547;
  int D.21212;
  int iftmp.132;
  int D.21211;
  struct MonoClass * D.29553;
  const char[18] * D.29554;
  unsigned char D.29555;
  int D.29556;
  unsigned char D.29557;
  int D.29558;
  _Bool D.29559;
  _Bool D.29560;
  _Bool D.29561;
  const unsigned char * D.29564;
  unsigned char D.29565;
  int D.29566;
  const unsigned char * D.29567;
  unsigned char D.29568;
  int D.29569;
  _Bool D.29570;
  _Bool D.29571;
  const unsigned char * D.29574;
  unsigned char D.29575;
  int D.29576;
  const unsigned char * D.29577;
  unsigned char D.29578;
  int D.29579;
  _Bool D.29580;
  _Bool D.29581;
  const unsigned char * D.29584;
  unsigned char D.29585;
  int D.29586;
  const unsigned char * D.29587;
  unsigned char D.29588;
  int D.29589;
  const char * D.29591;
  struct MonoMethod * * dest;

  dest = data;
  if (managed == 0) goto <D.29544>; else goto <D.29545>;
  <D.29544>:
  D.29546 = 0;
  return D.29546;
  <D.29545>:
  D.29547 = *dest;
  if (D.29547 == 0B) goto <D.29548>; else goto <D.29549>;
  <D.29548>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.29553 = m->klass;
      __s2 = D.29553->name_space;
      D.29554 = "System.Reflection";
      D.29555 = MEM[(const unsigned char *)D.29554];
      D.29556 = (int) D.29555;
      D.29557 = *__s2;
      D.29558 = (int) D.29557;
      __result = D.29556 - D.29558;
      {
        D.29559 = __s2_len != 0;
        D.29560 = __result == 0;
        D.29561 = D.29559 & D.29560;
        if (D.29561 != 0) goto <D.29562>; else goto <D.29563>;
        <D.29562>:
        D.29564 = &MEM[(void *)"System.Reflection" + 1B];
        D.29565 = *D.29564;
        D.29566 = (int) D.29565;
        D.29567 = __s2 + 1;
        D.29568 = *D.29567;
        D.29569 = (int) D.29568;
        __result = D.29566 - D.29569;
        D.29570 = __s2_len > 1;
        D.29560 = __result == 0;
        D.29571 = D.29570 & D.29560;
        if (D.29571 != 0) goto <D.29572>; else goto <D.29573>;
        <D.29572>:
        D.29574 = &MEM[(void *)"System.Reflection" + 2B];
        D.29575 = *D.29574;
        D.29576 = (int) D.29575;
        D.29577 = __s2 + 2;
        D.29578 = *D.29577;
        D.29579 = (int) D.29578;
        __result = D.29576 - D.29579;
        D.29580 = __s2_len > 2;
        D.29560 = __result == 0;
        D.29581 = D.29580 & D.29560;
        if (D.29581 != 0) goto <D.29582>; else goto <D.29583>;
        <D.29582>:
        D.29584 = &MEM[(void *)"System.Reflection" + 3B];
        D.29585 = *D.29584;
        D.29586 = (int) D.29585;
        D.29587 = __s2 + 3;
        D.29588 = *D.29587;
        D.29589 = (int) D.29588;
        __result = D.29586 - D.29589;
        <D.29583>:
        <D.29573>:
        <D.29563>:
      }
      D.21211 = __result;
    }
    iftmp.132 = -D.21211;
    goto <D.29590>;
    <D.29552>:
    D.29553 = m->klass;
    D.29591 = D.29553->name_space;
    iftmp.132 = __builtin_strcmp (D.29591, "System.Reflection");
    <D.29590>:
    D.21212 = iftmp.132;
  }
  if (D.21212 == 0) goto <D.29592>; else goto <D.29593>;
  <D.29592>:
  D.29546 = 0;
  return D.29546;
  <D.29593>:
  *dest = m;
  D.29546 = 1;
  return D.29546;
  <D.29549>:
  D.29546 = 0;
  return D.29546;
}


ves_icall_System_Reflection_Assembly_GetEntryAssembly ()
{
  struct MonoAssembly * D.29595;
  struct MonoReflectionAssembly * D.29598;
  struct MonoDomain * domain;

  domain = mono_domain_get ();
  D.29595 = domain->entry_assembly;
  if (D.29595 == 0B) goto <D.29596>; else goto <D.29597>;
  <D.29596>:
  D.29598 = 0B;
  return D.29598;
  <D.29597>:
  D.29595 = domain->entry_assembly;
  D.29598 = mono_assembly_get_object (domain, D.29595);
  return D.29598;
}


ves_icall_System_Reflection_Assembly_GetCallingAssembly ()
{
  struct MonoMethod * dest.133;
  struct MonoReflectionAssembly * D.29603;
  struct MonoClass * D.29604;
  struct MonoImage * D.29605;
  struct MonoAssembly * D.29606;
  struct MonoDomain * D.29607;
  struct MonoMethod * m;
  struct MonoMethod * dest;

  try
    {
      dest = 0B;
      mono_stack_walk_no_il (get_executing, &dest);
      m = dest;
      mono_stack_walk_no_il (get_caller, &dest);
      dest.133 = dest;
      if (dest.133 == 0B) goto <D.29601>; else goto <D.29602>;
      <D.29601>:
      dest = m;
      <D.29602>:
      dest.133 = dest;
      D.29604 = dest.133->klass;
      D.29605 = D.29604->image;
      D.29606 = D.29605->assembly;
      D.29607 = mono_domain_get ();
      D.29603 = mono_assembly_get_object (D.29607, D.29606);
      return D.29603;
    }
  finally
    {
      dest = {CLOBBER};
    }
}


get_caller (struct MonoMethod * m, gint32 no, gint32 ilo, gboolean managed, void * data)
{
  gboolean D.29612;
  struct MonoMethod * D.29613;
  struct MonoMethod * * dest;

  dest = data;
  if (managed == 0) goto <D.29610>; else goto <D.29611>;
  <D.29610>:
  D.29612 = 0;
  return D.29612;
  <D.29611>:
  D.29613 = *dest;
  if (D.29613 == m) goto <D.29614>; else goto <D.29615>;
  <D.29614>:
  *dest = 0B;
  D.29612 = 0;
  return D.29612;
  <D.29615>:
  D.29613 = *dest;
  if (D.29613 == 0B) goto <D.29616>; else goto <D.29617>;
  <D.29616>:
  *dest = m;
  D.29612 = 1;
  return D.29612;
  <D.29617>:
  D.29612 = 0;
  return D.29612;
}


ves_icall_System_Reflection_Assembly_FillName (struct MonoReflectionAssembly * assembly, struct MonoReflectionAssemblyName * aname)
{
  struct MonoImage * D.29619;
  char * D.29620;
  int D.29621;
  struct MonoAssemblyName * D.29624;
  struct MonoVTable * D.29625;
  struct MonoDomain * D.29626;
  char * D.29627;
  gchar * absolute;
  struct MonoAssembly * mass;

  mass = assembly->assembly;
  D.29619 = mass->image;
  D.29620 = D.29619->name;
  D.29621 = monoeg_g_path_is_absolute (D.29620);
  if (D.29621 != 0) goto <D.29622>; else goto <D.29623>;
  <D.29622>:
  D.29619 = mass->image;
  D.29620 = D.29619->name;
  D.29624 = &mass->aname;
  D.29625 = MEM[(struct MonoObject *)assembly].vtable;
  D.29626 = D.29625->domain;
  fill_reflection_assembly_name (D.29626, aname, D.29624, D.29620, 1, 1, 1);
  return;
  <D.29623>:
  D.29619 = mass->image;
  D.29620 = D.29619->name;
  D.29627 = mass->basedir;
  absolute = monoeg_g_build_path ("/", D.29627, D.29620, 0B);
  D.29624 = &mass->aname;
  D.29625 = MEM[(struct MonoObject *)assembly].vtable;
  D.29626 = D.29625->domain;
  fill_reflection_assembly_name (D.29626, aname, D.29624, absolute, 1, 1, 1);
  monoeg_g_free (absolute);
}


ves_icall_System_Object_obj_address (struct MonoObject * this)
{
  void * D.29629;

  D.29629 = this;
  return D.29629;
}


ves_icall_System_Object_MemberwiseClone (struct MonoObject * this)
{
  struct MonoObject * D.29631;

  D.29631 = mono_object_clone (this);
  return D.29631;
}


ves_icall_System_Object_GetType (struct MonoObject * obj)
{
  struct MonoVTable * D.29633;
  struct MonoClass * D.29634;
  struct MonoClass * D.29635;
  struct MonoReflectionType * D.29638;
  struct MonoRemoteClass * D.29639;
  struct MonoClass * D.29640;
  struct MonoType * D.29641;
  struct MonoDomain * D.29642;
  struct MonoType * D.29643;

  D.29633 = obj->vtable;
  D.29634 = D.29633->klass;
  D.29635 = mono_defaults.transparent_proxy_class;
  if (D.29634 == D.29635) goto <D.29636>; else goto <D.29637>;
  <D.29636>:
  D.29639 = MEM[(struct MonoTransparentProxy *)obj].remote_class;
  D.29640 = D.29639->proxy_class;
  D.29641 = &D.29640->byval_arg;
  D.29633 = obj->vtable;
  D.29642 = D.29633->domain;
  D.29638 = mono_type_get_object (D.29642, D.29641);
  return D.29638;
  <D.29637>:
  D.29633 = obj->vtable;
  D.29634 = D.29633->klass;
  D.29643 = &D.29634->byval_arg;
  D.29633 = obj->vtable;
  D.29642 = D.29633->domain;
  D.29638 = mono_type_get_object (D.29642, D.29643);
  return D.29638;
}


ves_icall_System_NumberFormatter_GetFormatterTables (const guint64 * * mantissas, const gint32 * * exponents, const gunichar2 * * digitLowerTable, const gunichar2 * * digitUpperTable, const gint64 * * tenPowersList, const gint32 * * decHexDigits)
{
  *mantissas = &Formatter_MantissaBitsTable;
  *exponents = &Formatter_TensExponentTable;
  *digitLowerTable = &Formatter_DigitLowerTable;
  *digitUpperTable = &Formatter_DigitUpperTable;
  *tenPowersList = &Formatter_TenPowersList;
  *decHexDigits = &Formatter_DecHexDigits;
}


mono_type_type_from_obj (struct MonoReflectionType * mtype, struct MonoObject * obj)
{
  struct MonoVTable * D.29645;
  struct MonoClass * D.29646;
  struct MonoType * D.29647;
  struct MonoType * D.29648;
  unsigned char D.29649;
  _Bool D.29650;
  long int D.29651;
  long int D.29652;

  D.29645 = obj->vtable;
  D.29646 = D.29645->klass;
  D.29647 = &D.29646->byval_arg;
  mtype->type = D.29647;
  D.29648 = mtype->type;
  D.29649 = D.29648->type;
  D.29650 = D.29649 == 0;
  D.29651 = (long int) D.29650;
  D.29652 = __builtin_expect (D.29651, 0);
  if (D.29652 != 0) goto <D.29653>; else goto <D.29654>;
  <D.29653>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 1149, "mtype->type->type");
  <D.29654>:
}


vell_icall_MonoType_get_core_clr_security_level (struct MonoReflectionType * this)
{
  struct MonoType * D.29655;
  int D.29656;
  <unnamed type> D.29657;
  struct MonoClass * klass;

  D.29655 = this->type;
  klass = mono_class_from_mono_type (D.29655);
  mono_class_init_or_throw (klass);
  D.29657 = mono_security_core_clr_class_level (klass);
  D.29656 = (int) D.29657;
  return D.29656;
}


ves_icall_get_attributes (struct MonoReflectionType * type)
{
  struct MonoType * D.29659;
  guint32 D.29660;
  struct MonoClass * klass;

  D.29659 = type->type;
  klass = mono_class_from_mono_type (D.29659);
  D.29660 = klass->flags;
  return D.29660;
}


ves_icall_MonoType_get_Namespace (struct MonoReflectionType * type)
{
  struct MonoType * D.29662;
  struct MonoClass * D.29663;
  const char * D.29664;
  char D.29665;
  struct MonoString * D.29668;
  struct MonoDomain * domain;
  struct MonoClass * class;

  domain = mono_domain_get ();
  D.29662 = type->type;
  class = mono_class_from_mono_type (D.29662);
  goto <D.21682>;
  <D.21681>:
  class = class->nested_in;
  <D.21682>:
  D.29663 = class->nested_in;
  if (D.29663 != 0B) goto <D.21681>; else goto <D.21683>;
  <D.21683>:
  D.29664 = class->name_space;
  D.29665 = *D.29664;
  if (D.29665 == 0) goto <D.29666>; else goto <D.29667>;
  <D.29666>:
  D.29668 = 0B;
  return D.29668;
  <D.29667>:
  D.29664 = class->name_space;
  D.29668 = mono_string_new (domain, D.29664);
  return D.29668;
}


ves_icall_MonoType_get_Name (struct MonoReflectionType * type)
{
  struct MonoType * D.29670;
  unsigned char D.29671;
  unsigned char D.29672;
  const char * D.29675;
  struct MonoString * D.29676;
  struct MonoDomain * domain;
  struct MonoClass * class;

  domain = mono_domain_get ();
  D.29670 = type->type;
  class = mono_class_from_mono_type (D.29670);
  D.29670 = type->type;
  D.29671 = BIT_FIELD_REF <*D.29670, 8, 88>;
  D.29672 = D.29671 & 64;
  if (D.29672 != 0) goto <D.29673>; else goto <D.29674>;
  <D.29673>:
  {
    char * n;
    struct MonoString * res;

    D.29675 = class->name;
    n = monoeg_g_strdup_printf ("%s&", D.29675);
    res = mono_string_new (domain, n);
    monoeg_g_free (n);
    D.29676 = res;
    return D.29676;
  }
  <D.29674>:
  D.29675 = class->name;
  D.29676 = mono_string_new (domain, D.29675);
  return D.29676;
}


ves_icall_MonoType_get_Module (struct MonoReflectionType * type)
{
  struct MonoType * D.29678;
  struct MonoReflectionModule * D.29679;
  struct MonoImage * D.29680;
  struct MonoVTable * D.29681;
  struct MonoDomain * D.29682;
  struct MonoClass * class;

  D.29678 = type->type;
  class = mono_class_from_mono_type (D.29678);
  D.29680 = class->image;
  D.29681 = MEM[(struct MonoObject *)type].vtable;
  D.29682 = D.29681->domain;
  D.29679 = mono_module_get_object (D.29682, D.29680);
  return D.29679;
}


ves_icall_MonoType_get_IsGenericParameter (struct MonoReflectionType * type)
{
  MonoBoolean D.29684;
  struct MonoType * D.29685;

  D.29685 = type->type;
  D.29684 = is_generic_parameter (D.29685);
  return D.29684;
}


ves_icall_MonoType_get_DeclaringType (struct MonoReflectionType * type)
{
  struct MonoType * D.29687;
  unsigned char D.29688;
  unsigned char D.29689;
  struct MonoReflectionType * D.29692;
  unsigned char D.29693;
  struct MonoGenericParam * D.29696;
  struct MonoGenericContainer * D.29697;
  struct MonoMethod * D.29701;
  struct MonoClass * D.29703;
  struct MonoReflectionType * iftmp.134;
  struct MonoType * D.29707;
  struct MonoDomain * domain;
  struct MonoClass * class;

  domain = mono_domain_get ();
  D.29687 = type->type;
  D.29688 = BIT_FIELD_REF <*D.29687, 8, 88>;
  D.29689 = D.29688 & 64;
  if (D.29689 != 0) goto <D.29690>; else goto <D.29691>;
  <D.29690>:
  D.29692 = 0B;
  return D.29692;
  <D.29691>:
  D.29687 = type->type;
  D.29693 = D.29687->type;
  if (D.29693 == 19) goto <D.29694>; else goto <D.29695>;
  <D.29694>:
  D.29687 = type->type;
  D.29696 = D.29687->data.generic_param;
  D.29697 = D.29696->owner;
  class = D.29697->owner.klass;
  goto <D.29698>;
  <D.29695>:
  D.29687 = type->type;
  D.29693 = D.29687->type;
  if (D.29693 == 30) goto <D.29699>; else goto <D.29700>;
  <D.29699>:
  D.29687 = type->type;
  D.29696 = D.29687->data.generic_param;
  D.29697 = D.29696->owner;
  D.29701 = D.29697->owner.method;
  class = D.29701->klass;
  goto <D.29702>;
  <D.29700>:
  D.29687 = type->type;
  D.29703 = mono_class_from_mono_type (D.29687);
  class = D.29703->nested_in;
  <D.29702>:
  <D.29698>:
  if (class != 0B) goto <D.29705>; else goto <D.29706>;
  <D.29705>:
  D.29707 = &class->byval_arg;
  iftmp.134 = mono_type_get_object (domain, D.29707);
  goto <D.29708>;
  <D.29706>:
  iftmp.134 = 0B;
  <D.29708>:
  D.29692 = iftmp.134;
  return D.29692;
}


ves_icall_MonoType_get_DeclaringMethod (struct MonoReflectionType * ref_type)
{
  unsigned char D.29712;
  unsigned char D.29713;
  unsigned char D.29715;
  _Bool D.29716;
  _Bool D.29717;
  _Bool D.29718;
  struct MonoException * D.29719;
  unsigned char D.29720;
  struct MonoReflectionMethod * D.29723;
  struct MonoGenericParam * D.29724;
  struct MonoGenericContainer * D.29725;
  _Bool D.29726;
  long int D.29727;
  long int D.29728;
  struct MonoClass * D.29731;
  struct MonoVTable * D.29732;
  struct MonoDomain * D.29733;
  struct MonoMethod * method;
  struct MonoType * type;

  type = ref_type->type;
  D.29712 = BIT_FIELD_REF <*type, 8, 88>;
  D.29713 = D.29712 & 64;
  if (D.29713 != 0) goto <D.29710>; else goto <D.29714>;
  <D.29714>:
  D.29715 = type->type;
  D.29716 = D.29715 != 30;
  D.29717 = D.29715 != 19;
  D.29718 = D.29716 & D.29717;
  if (D.29718 != 0) goto <D.29710>; else goto <D.29711>;
  <D.29710>:
  D.29719 = mono_get_exception_invalid_operation ("DeclaringMethod can only be used on generic arguments");
  mono_raise_exception (D.29719);
  <D.29711>:
  D.29720 = type->type;
  if (D.29720 == 19) goto <D.29721>; else goto <D.29722>;
  <D.29721>:
  D.29723 = 0B;
  return D.29723;
  <D.29722>:
  D.29724 = type->data.generic_param;
  D.29725 = D.29724->owner;
  method = D.29725->owner.method;
  D.29726 = method == 0B;
  D.29727 = (long int) D.29726;
  D.29728 = __builtin_expect (D.29727, 0);
  if (D.29728 != 0) goto <D.29729>; else goto <D.29730>;
  <D.29729>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2570, "method");
  <D.29730>:
  D.29731 = method->klass;
  D.29732 = MEM[(struct MonoObject *)ref_type].vtable;
  D.29733 = D.29732->domain;
  D.29723 = mono_method_get_object (D.29733, method, D.29731);
  return D.29723;
}


ves_icall_get_type_parent (struct MonoReflectionType * type)
{
  struct MonoType * D.29735;
  struct MonoReflectionType * D.29736;
  struct MonoReflectionType * iftmp.135;
  struct MonoClass * D.29738;
  struct MonoType * D.29741;
  struct MonoVTable * D.29742;
  struct MonoDomain * D.29743;
  struct MonoClass * class;

  D.29735 = type->type;
  class = mono_class_from_mono_type (D.29735);
  D.29738 = class->parent;
  if (D.29738 != 0B) goto <D.29739>; else goto <D.29740>;
  <D.29739>:
  D.29738 = class->parent;
  D.29741 = &D.29738->byval_arg;
  D.29742 = MEM[(struct MonoObject *)type].vtable;
  D.29743 = D.29742->domain;
  iftmp.135 = mono_type_get_object (D.29743, D.29741);
  goto <D.29744>;
  <D.29740>:
  iftmp.135 = 0B;
  <D.29744>:
  D.29736 = iftmp.135;
  return D.29736;
}


ves_icall_MonoType_get_Assembly (struct MonoReflectionType * type)
{
  struct MonoType * D.29746;
  struct MonoReflectionAssembly * D.29747;
  struct MonoImage * D.29748;
  struct MonoAssembly * D.29749;
  struct MonoDomain * domain;
  struct MonoClass * class;

  domain = mono_domain_get ();
  D.29746 = type->type;
  class = mono_class_from_mono_type (D.29746);
  D.29748 = class->image;
  D.29749 = D.29748->assembly;
  D.29747 = mono_assembly_get_object (domain, D.29749);
  return D.29747;
}


ves_icall_System_MonoType_getFullName (struct MonoReflectionType * object, gboolean full_name, gboolean assembly_qualified)
{
  struct MonoVTable * D.29751;
  MonoTypeNameFormat iftmp.136;
  struct MonoType * D.29759;
  struct MonoString * D.29762;
  unsigned char D.29765;
  _Bool D.29766;
  _Bool D.29767;
  _Bool D.29768;
  struct MonoDomain * domain;
  MonoTypeNameFormat format;
  struct MonoString * res;
  gchar * name;

  D.29751 = MEM[(struct MonoObject *)object].vtable;
  domain = D.29751->domain;
  if (full_name != 0) goto <D.29752>; else goto <D.29753>;
  <D.29752>:
  if (assembly_qualified != 0) goto <D.29755>; else goto <D.29756>;
  <D.29755>:
  iftmp.136 = 3;
  goto <D.29757>;
  <D.29756>:
  iftmp.136 = 2;
  <D.29757>:
  format = iftmp.136;
  goto <D.29758>;
  <D.29753>:
  format = 1;
  <D.29758>:
  D.29759 = object->type;
  name = mono_type_get_name_full (D.29759, format);
  if (name == 0B) goto <D.29760>; else goto <D.29761>;
  <D.29760>:
  D.29762 = 0B;
  return D.29762;
  <D.29761>:
  if (full_name != 0) goto <D.29763>; else goto <D.29764>;
  <D.29763>:
  D.29759 = object->type;
  D.29765 = D.29759->type;
  D.29766 = D.29765 == 19;
  D.29767 = D.29765 == 30;
  D.29768 = D.29766 | D.29767;
  if (D.29768 != 0) goto <D.29769>; else goto <D.29770>;
  <D.29769>:
  monoeg_g_free (name);
  D.29762 = 0B;
  return D.29762;
  <D.29770>:
  <D.29764>:
  res = mono_string_new (domain, name);
  monoeg_g_free (name);
  D.29762 = res;
  return D.29762;
}


ves_icall_type_isprimitive (struct MonoReflectionType * type)
{
  MonoBoolean D.29772;
  int iftmp.137;
  struct MonoType * D.29777;
  unsigned char D.29778;
  unsigned char D.29779;
  unsigned char D.29781;
  unsigned char D.29782;
  _Bool D.29783;
  _Bool D.29784;
  _Bool D.29785;
  unsigned char D.29787;

  D.29777 = type->type;
  D.29778 = BIT_FIELD_REF <*D.29777, 8, 88>;
  D.29779 = D.29778 & 64;
  if (D.29779 == 0) goto <D.29780>; else goto <D.29774>;
  <D.29780>:
  D.29777 = type->type;
  D.29781 = D.29777->type;
  D.29782 = D.29781 + 254;
  D.29783 = D.29782 <= 11;
  D.29784 = D.29781 == 24;
  D.29785 = D.29783 | D.29784;
  if (D.29785 != 0) goto <D.29775>; else goto <D.29786>;
  <D.29786>:
  D.29777 = type->type;
  D.29787 = D.29777->type;
  if (D.29787 == 25) goto <D.29775>; else goto <D.29774>;
  <D.29775>:
  iftmp.137 = 1;
  goto <D.29776>;
  <D.29774>:
  iftmp.137 = 0;
  <D.29776>:
  D.29772 = (MonoBoolean) iftmp.137;
  return D.29772;
}


ves_icall_type_ispointer (struct MonoReflectionType * type)
{
  MonoBoolean D.29789;
  struct MonoType * D.29790;
  unsigned char D.29791;
  _Bool D.29792;

  D.29790 = type->type;
  D.29791 = D.29790->type;
  D.29792 = D.29791 == 15;
  D.29789 = (MonoBoolean) D.29792;
  return D.29789;
}


ves_icall_type_iscomobject (struct MonoReflectionType * type)
{
  struct MonoType * D.29794;
  MonoBoolean D.29795;
  <unnamed-unsigned:1> D.29796;
  struct MonoClass * klass;

  D.29794 = type->type;
  klass = mono_class_from_mono_type (D.29794);
  mono_class_init_or_throw (klass);
  D.29796 = klass->is_com_object;
  D.29795 = (MonoBoolean) D.29796;
  return D.29795;
}


ves_icall_type_isbyref (struct MonoReflectionType * type)
{
  MonoBoolean D.29798;
  struct MonoType * D.29799;
  <unnamed-unsigned:1> D.29800;

  D.29799 = type->type;
  D.29800 = D.29799->byref;
  D.29798 = (MonoBoolean) D.29800;
  return D.29798;
}


ves_icall_MonoType_GetEvent (struct MonoReflectionType * type, struct MonoString * name, guint32 bflags)
{
  struct MonoType * D.29802;
  unsigned char D.29803;
  unsigned char D.29804;
  struct MonoReflectionEvent * D.29807;
  struct MonoVTable * D.29808;
  int (*<T39ce>) (const char *, const char *) iftmp.138;
  unsigned int D.29810;
  unsigned char D.29814;
  struct MonoException * D.29817;
  const char * D.29818;
  int D.29819;
  short unsigned int D.29828;
  int D.29829;
  int D.29830;
  unsigned int D.29833;
  unsigned int D.29837;
  int D.29844;
  unsigned int D.29847;
  unsigned int D.29850;
  unsigned int D.29856;
  unsigned int D.29862;
  struct MonoDomain * domain;
  struct MonoClass * klass;
  struct MonoClass * startklass;
  void * iter;
  struct MonoEvent * event;
  struct MonoMethod * method;
  gchar * event_name;
  int (*<T39ce>) (const char *, const char *) compare_func;
  void handle_parent = <<< error >>>;

  try
    {
      event_name = mono_string_to_utf8 (name);
      D.29802 = type->type;
      D.29803 = BIT_FIELD_REF <*D.29802, 8, 88>;
      D.29804 = D.29803 & 64;
      if (D.29804 != 0) goto <D.29805>; else goto <D.29806>;
      <D.29805>:
      D.29807 = 0B;
      return D.29807;
      <D.29806>:
      D.29802 = type->type;
      startklass = mono_class_from_mono_type (D.29802);
      klass = startklass;
      D.29808 = MEM[(struct MonoObject *)type].vtable;
      domain = D.29808->domain;
      mono_class_init_or_throw (klass);
      D.29810 = bflags & 1;
      if (D.29810 != 0) goto <D.29811>; else goto <D.29812>;
      <D.29811>:
      iftmp.138 = monoeg_ascii_strcasecmp;
      goto <D.29813>;
      <D.29812>:
      iftmp.138 = strcmp;
      <D.29813>:
      compare_func = iftmp.138;
      handle_parent:
      D.29814 = klass->exception_type;
      if (D.29814 != 0) goto <D.29815>; else goto <D.29816>;
      <D.29815>:
      D.29817 = mono_class_get_exception_for_failure (klass);
      mono_raise_exception (D.29817);
      <D.29816>:
      iter = 0B;
      goto <D.22394>;
      <D.22395>:
      D.29818 = event->name;
      D.29819 = compare_func (D.29818, event_name);
      if (D.29819 != 0) goto <D.29820>; else goto <D.29821>;
      <D.29820>:
      // predicted unlikely by continue predictor.
      goto <D.22394>;
      <D.29821>:
      method = event->add;
      if (method == 0B) goto <D.29822>; else goto <D.29823>;
      <D.29822>:
      method = event->remove;
      <D.29823>:
      if (method == 0B) goto <D.29824>; else goto <D.29825>;
      <D.29824>:
      method = event->raise;
      <D.29825>:
      if (method != 0B) goto <D.29826>; else goto <D.29827>;
      <D.29826>:
      D.29828 = method->flags;
      D.29829 = (int) D.29828;
      D.29830 = D.29829 & 7;
      if (D.29830 == 6) goto <D.29831>; else goto <D.29832>;
      <D.29831>:
      D.29833 = bflags & 16;
      if (D.29833 == 0) goto <D.29834>; else goto <D.29835>;
      <D.29834>:
      // predicted unlikely by continue predictor.
      goto <D.22394>;
      <D.29835>:
      goto <D.29836>;
      <D.29832>:
      D.29837 = bflags & 32;
      if (D.29837 == 0) goto <D.29838>; else goto <D.29839>;
      <D.29838>:
      // predicted unlikely by continue predictor.
      goto <D.22394>;
      <D.29839>:
      if (klass != startklass) goto <D.29840>; else goto <D.29841>;
      <D.29840>:
      D.29828 = method->flags;
      D.29829 = (int) D.29828;
      D.29830 = D.29829 & 7;
      if (D.29830 == 1) goto <D.29842>; else goto <D.29843>;
      <D.29842>:
      // predicted unlikely by continue predictor.
      goto <D.22394>;
      <D.29843>:
      <D.29841>:
      <D.29836>:
      D.29828 = method->flags;
      D.29829 = (int) D.29828;
      D.29844 = D.29829 & 16;
      if (D.29844 != 0) goto <D.29845>; else goto <D.29846>;
      <D.29845>:
      D.29847 = bflags & 8;
      if (D.29847 == 0) goto <D.29848>; else goto <D.29849>;
      <D.29848>:
      // predicted unlikely by continue predictor.
      goto <D.22394>;
      <D.29849>:
      D.29850 = bflags & 64;
      if (D.29850 == 0) goto <D.29851>; else goto <D.29852>;
      <D.29851>:
      if (klass != startklass) goto <D.29853>; else goto <D.29854>;
      <D.29853>:
      // predicted unlikely by continue predictor.
      goto <D.22394>;
      <D.29854>:
      <D.29852>:
      goto <D.29855>;
      <D.29846>:
      D.29856 = bflags & 4;
      if (D.29856 == 0) goto <D.29857>; else goto <D.29858>;
      <D.29857>:
      // predicted unlikely by continue predictor.
      goto <D.22394>;
      <D.29858>:
      <D.29855>:
      goto <D.29859>;
      <D.29827>:
      D.29837 = bflags & 32;
      if (D.29837 == 0) goto <D.29860>; else goto <D.29861>;
      <D.29860>:
      // predicted unlikely by continue predictor.
      goto <D.22394>;
      <D.29861>:
      <D.29859>:
      monoeg_g_free (event_name);
      D.29807 = mono_event_get_object (domain, startklass, event);
      return D.29807;
      <D.22394>:
      event = mono_class_get_events (klass, &iter);
      if (event != 0B) goto <D.22395>; else goto <D.22396>;
      <D.22396>:
      D.29862 = bflags & 2;
      if (D.29862 == 0) goto <D.29863>; else goto <D.29864>;
      <D.29863>:
      klass = klass->parent;
      if (klass != 0B) goto handle_parent; else goto <D.29865>;
      <D.29865>:
      <D.29864>:
      monoeg_g_free (event_name);
      D.29807 = 0B;
      return D.29807;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


ves_icall_Type_GetPropertiesByName (struct MonoReflectionType * type, struct MonoString * name, guint32 bflags, MonoBoolean ignore_case, struct MonoReflectionType * reftype)
{
  void * D.29868;
  struct MonoClass * System_Reflection_PropertyInfo.139;
  struct MonoImage * D.29872;
  struct MonoClass * System_Reflection_PropertyInfo.140;
  struct MonoVTable * D.29874;
  struct MonoType * D.29875;
  unsigned char D.29876;
  unsigned char D.29877;
  struct MonoArray * D.29880;
  struct MonoClass * D.22365;
  struct MonoClass * tmp_klass.141;
  struct MonoClass * tmp_klass.142;
  _Bool D.29885;
  long int D.29886;
  long int D.29887;
  struct MonoVTable * D.29890;
  int (*<T39ce>) (const char *, const char *) iftmp.143;
  unsigned char D.29897;
  struct MonoLoaderError * D.29899;
  short unsigned int D.29905;
  struct MonoMethod * D.29911;
  short unsigned int D.29913;
  int D.29914;
  int D.29915;
  struct MonoMethod * D.29916;
  short unsigned int D.29918;
  int D.29919;
  int D.29920;
  unsigned int D.29921;
  unsigned int D.29924;
  _Bool D.29929;
  int D.29930;
  int D.29931;
  int D.29933;
  unsigned int D.29936;
  unsigned int D.29939;
  unsigned int D.29944;
  unsigned int D.29947;
  const char * D.29954;
  int D.29955;
  void * D.29958;
  int D.29961;
  int D.29962;
  int D.29965;
  void * D.29966;
  long unsigned int D.29967;
  long unsigned int D.29968;
  long unsigned int D.29969;
  void * * D.29970;
  int D.29973;
  int D.29974;
  long unsigned int D.29975;
  long unsigned int D.29976;
  void * * D.29977;
  struct MonoReflectionProperty * D.29978;
  unsigned int D.29979;
  long unsigned int D.29983;
  struct MonoClass * D.22373;
  struct MonoClass * tmp_klass.144;
  struct MonoClass * tmp_klass.145;
  _Bool D.29988;
  long int D.29989;
  long int D.29990;
  struct MonoVTable * D.29993;
  long unsigned int D.29994;
  long unsigned int D.29995;
  long unsigned int D.29996;
  void * * D.29997;
  void * D.29998;
  struct MonoLoaderError * D.30010;
  struct MonoException * ex;
  struct MonoDomain * domain;
  static struct MonoClass * System_Reflection_PropertyInfo;
  struct MonoClass * startklass;
  struct MonoClass * klass;
  struct MonoArray * res;
  struct MonoMethod * method;
  struct MonoProperty * prop;
  int i;
  int match;
  guint32 flags;
  gchar * propname;
  int (*<T39ce>) (const char *, const char *) compare_func;
  void * iter;
  struct GHashTable * properties;
  struct MonoPtrArray tmp_array;
  void handle_parent = <<< error >>>;
  void loader_error = <<< error >>>;

  try
    {
      propname = 0B;
      compare_func = 0B;
      properties = 0B;
      tmp_array.size = 0;
      tmp_array.capacity = 16;
      D.29868 = __builtin_alloca (128);
      tmp_array.data = D.29868;
      System_Reflection_PropertyInfo.139 = System_Reflection_PropertyInfo;
      if (System_Reflection_PropertyInfo.139 == 0B) goto <D.29870>; else goto <D.29871>;
      <D.29870>:
      D.29872 = mono_defaults.corlib;
      System_Reflection_PropertyInfo.140 = mono_class_from_name (D.29872, "System.Reflection", "PropertyInfo");
      System_Reflection_PropertyInfo = System_Reflection_PropertyInfo.140;
      <D.29871>:
      D.29874 = MEM[(struct MonoObject *)type].vtable;
      domain = D.29874->domain;
      D.29875 = type->type;
      D.29876 = BIT_FIELD_REF <*D.29875, 8, 88>;
      D.29877 = D.29876 & 64;
      if (D.29877 != 0) goto <D.29878>; else goto <D.29879>;
      <D.29878>:
      {
        static struct MonoClass * tmp_klass;

        {
          tmp_klass.141 = tmp_klass;
          if (tmp_klass.141 == 0B) goto <D.29882>; else goto <D.29883>;
          <D.29882>:
          System_Reflection_PropertyInfo.139 = System_Reflection_PropertyInfo;
          tmp_klass.142 = mono_array_class_get (System_Reflection_PropertyInfo.139, 1);
          tmp_klass = tmp_klass.142;
          tmp_klass.141 = tmp_klass;
          D.29885 = tmp_klass.141 == 0B;
          D.29886 = (long int) D.29885;
          D.29887 = __builtin_expect (D.29886, 0);
          if (D.29887 != 0) goto <D.29888>; else goto <D.29889>;
          <D.29888>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 3725, "tmp_klass");
          <D.29889>:
          <D.29883>:
        }
        D.22365 = tmp_klass;
      }
      D.29890 = mono_class_vtable (domain, D.22365);
      D.29880 = mono_array_new_specific (D.29890, 0);
      return D.29880;
      <D.29879>:
      D.29875 = type->type;
      startklass = mono_class_from_mono_type (D.29875);
      klass = startklass;
      if (name != 0B) goto <D.29891>; else goto <D.29892>;
      <D.29891>:
      propname = mono_string_to_utf8 (name);
      if (ignore_case != 0) goto <D.29894>; else goto <D.29895>;
      <D.29894>:
      iftmp.143 = monoeg_ascii_strcasecmp;
      goto <D.29896>;
      <D.29895>:
      iftmp.143 = strcmp;
      <D.29896>:
      compare_func = iftmp.143;
      <D.29892>:
      properties = monoeg_g_hash_table_new (property_hash, property_equal);
      handle_parent:
      mono_class_setup_vtable (klass);
      D.29897 = klass->exception_type;
      if (D.29897 != 0) goto loader_error; else goto <D.29898>;
      <D.29898>:
      D.29899 = mono_loader_get_last_error ();
      if (D.29899 != 0B) goto loader_error; else goto <D.29900>;
      <D.29900>:
      iter = 0B;
      goto <D.22368>;
      <D.22370>:
      match = 0;
      method = prop->get;
      if (method == 0B) goto <D.29901>; else goto <D.29902>;
      <D.29901>:
      method = prop->set;
      <D.29902>:
      if (method != 0B) goto <D.29903>; else goto <D.29904>;
      <D.29903>:
      D.29905 = method->flags;
      flags = (guint32) D.29905;
      goto <D.29906>;
      <D.29904>:
      flags = 0;
      <D.29906>:
      D.29911 = prop->get;
      if (D.29911 != 0B) goto <D.29912>; else goto <D.29907>;
      <D.29912>:
      D.29911 = prop->get;
      D.29913 = D.29911->flags;
      D.29914 = (int) D.29913;
      D.29915 = D.29914 & 7;
      if (D.29915 == 6) goto <D.29908>; else goto <D.29907>;
      <D.29907>:
      D.29916 = prop->set;
      if (D.29916 != 0B) goto <D.29917>; else goto <D.29909>;
      <D.29917>:
      D.29916 = prop->set;
      D.29918 = D.29916->flags;
      D.29919 = (int) D.29918;
      D.29920 = D.29919 & 7;
      if (D.29920 == 6) goto <D.29908>; else goto <D.29909>;
      <D.29908>:
      D.29921 = bflags & 16;
      if (D.29921 != 0) goto <D.29922>; else goto <D.29923>;
      <D.29922>:
      match = match + 1;
      <D.29923>:
      goto <D.29910>;
      <D.29909>:
      D.29924 = bflags & 32;
      if (D.29924 != 0) goto <D.29925>; else goto <D.29926>;
      <D.29925>:
      D.29929 = startklass == klass;
      D.29930 = (int) D.29929;
      D.29911 = prop->get;
      D.29931 = property_accessor_nonpublic (D.29911, D.29930);
      if (D.29931 != 0) goto <D.29927>; else goto <D.29932>;
      <D.29932>:
      D.29929 = startklass == klass;
      D.29930 = (int) D.29929;
      D.29916 = prop->set;
      D.29933 = property_accessor_nonpublic (D.29916, D.29930);
      if (D.29933 != 0) goto <D.29927>; else goto <D.29928>;
      <D.29927>:
      match = match + 1;
      <D.29928>:
      <D.29926>:
      <D.29910>:
      if (match == 0) goto <D.29934>; else goto <D.29935>;
      <D.29934>:
      // predicted unlikely by continue predictor.
      goto <D.22368>;
      <D.29935>:
      match = 0;
      D.29936 = flags & 16;
      if (D.29936 != 0) goto <D.29937>; else goto <D.29938>;
      <D.29937>:
      D.29939 = bflags & 8;
      if (D.29939 != 0) goto <D.29940>; else goto <D.29941>;
      <D.29940>:
      D.29944 = bflags & 64;
      if (D.29944 != 0) goto <D.29942>; else goto <D.29945>;
      <D.29945>:
      if (klass == startklass) goto <D.29942>; else goto <D.29943>;
      <D.29942>:
      match = match + 1;
      <D.29943>:
      <D.29941>:
      goto <D.29946>;
      <D.29938>:
      D.29947 = bflags & 4;
      if (D.29947 != 0) goto <D.29948>; else goto <D.29949>;
      <D.29948>:
      match = match + 1;
      <D.29949>:
      <D.29946>:
      if (match == 0) goto <D.29950>; else goto <D.29951>;
      <D.29950>:
      // predicted unlikely by continue predictor.
      goto <D.22368>;
      <D.29951>:
      match = 0;
      if (name != 0B) goto <D.29952>; else goto <D.29953>;
      <D.29952>:
      D.29954 = prop->name;
      D.29955 = compare_func (propname, D.29954);
      if (D.29955 != 0) goto <D.29956>; else goto <D.29957>;
      <D.29956>:
      // predicted unlikely by continue predictor.
      goto <D.22368>;
      <D.29957>:
      <D.29953>:
      D.29958 = monoeg_g_hash_table_lookup (properties, prop);
      if (D.29958 != 0B) goto <D.29959>; else goto <D.29960>;
      <D.29959>:
      // predicted unlikely by continue predictor.
      goto <D.22368>;
      <D.29960>:
      D.29961 = tmp_array.size;
      D.29962 = tmp_array.capacity;
      if (D.29961 >= D.29962) goto <D.29963>; else goto <D.29964>;
      <D.29963>:
      {
        void * __tmp;

        D.29962 = tmp_array.capacity;
        D.29965 = D.29962 * 2;
        D.29966 = mono_gc_make_root_descr_all_refs (D.29965);
        D.29962 = tmp_array.capacity;
        D.29967 = (long unsigned int) D.29962;
        D.29968 = D.29967 * 16;
        __tmp = mono_gc_alloc_fixed (D.29968, D.29966);
        D.29962 = tmp_array.capacity;
        D.29967 = (long unsigned int) D.29962;
        D.29969 = D.29967 * 8;
        D.29970 = tmp_array.data;
        mono_gc_memmove_aligned (__tmp, D.29970, D.29969);
        D.29962 = tmp_array.capacity;
        if (D.29962 > 16) goto <D.29971>; else goto <D.29972>;
        <D.29971>:
        D.29970 = tmp_array.data;
        mono_gc_free_fixed (D.29970);
        <D.29972>:
        tmp_array.data = __tmp;
        D.29962 = tmp_array.capacity;
        D.29965 = D.29962 * 2;
        tmp_array.capacity = D.29965;
      }
      <D.29964>:
      D.29970 = tmp_array.data;
      D.29961 = tmp_array.size;
      D.29973 = D.29961;
      D.29974 = D.29973 + 1;
      tmp_array.size = D.29974;
      D.29975 = (long unsigned int) D.29973;
      D.29976 = D.29975 * 8;
      D.29977 = D.29970 + D.29976;
      D.29978 = mono_property_get_object (domain, startklass, prop);
      *D.29977 = D.29978;
      monoeg_g_hash_table_insert_replace (properties, prop, prop, 0);
      <D.22368>:
      prop = mono_class_get_properties (klass, &iter);
      if (prop != 0B) goto <D.22370>; else goto <D.22371>;
      <D.22371>:
      D.29979 = bflags & 2;
      if (D.29979 == 0) goto <D.29980>; else goto <D.29981>;
      <D.29980>:
      klass = klass->parent;
      if (klass != 0B) goto handle_parent; else goto <D.29982>;
      <D.29982>:
      <D.29981>:
      monoeg_g_hash_table_destroy (properties);
      monoeg_g_free (propname);
      D.29961 = tmp_array.size;
      D.29983 = (long unsigned int) D.29961;
      {
        static struct MonoClass * tmp_klass;

        {
          tmp_klass.144 = tmp_klass;
          if (tmp_klass.144 == 0B) goto <D.29985>; else goto <D.29986>;
          <D.29985>:
          System_Reflection_PropertyInfo.139 = System_Reflection_PropertyInfo;
          tmp_klass.145 = mono_array_class_get (System_Reflection_PropertyInfo.139, 1);
          tmp_klass = tmp_klass.145;
          tmp_klass.144 = tmp_klass;
          D.29988 = tmp_klass.144 == 0B;
          D.29989 = (long int) D.29988;
          D.29990 = __builtin_expect (D.29989, 0);
          if (D.29990 != 0) goto <D.29991>; else goto <D.29992>;
          <D.29991>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 3793, "tmp_klass");
          <D.29992>:
          <D.29986>:
        }
        D.22373 = tmp_klass;
      }
      D.29993 = mono_class_vtable (domain, D.22373);
      res = mono_array_new_specific (D.29993, D.29983);
      i = 0;
      goto <D.22376>;
      <D.22375>:
      {
        void * * __p;

        D.29994 = (long unsigned int) i;
        __p = mono_array_addr_with_size (res, 8, D.29994);
        D.29970 = tmp_array.data;
        D.29995 = (long unsigned int) i;
        D.29996 = D.29995 * 8;
        D.29997 = D.29970 + D.29996;
        D.29998 = *D.29997;
        mono_gc_wbarrier_set_arrayref (res, __p, D.29998);
      }
      i = i + 1;
      <D.22376>:
      D.29961 = tmp_array.size;
      if (D.29961 > i) goto <D.22375>; else goto <D.22377>;
      <D.22377>:
      D.29962 = tmp_array.capacity;
      if (D.29962 > 16) goto <D.29999>; else goto <D.30000>;
      <D.29999>:
      D.29970 = tmp_array.data;
      mono_gc_free_fixed (D.29970);
      <D.30000>:
      D.29880 = res;
      return D.29880;
      loader_error:
      if (properties != 0B) goto <D.30001>; else goto <D.30002>;
      <D.30001>:
      monoeg_g_hash_table_destroy (properties);
      <D.30002>:
      if (name != 0B) goto <D.30003>; else goto <D.30004>;
      <D.30003>:
      monoeg_g_free (propname);
      <D.30004>:
      D.29962 = tmp_array.capacity;
      if (D.29962 > 16) goto <D.30005>; else goto <D.30006>;
      <D.30005>:
      D.29970 = tmp_array.data;
      mono_gc_free_fixed (D.29970);
      <D.30006>:
      D.29897 = klass->exception_type;
      if (D.29897 != 0) goto <D.30007>; else goto <D.30008>;
      <D.30007>:
      ex = mono_class_get_exception_for_failure (klass);
      goto <D.30009>;
      <D.30008>:
      D.30010 = mono_loader_get_last_error ();
      ex = mono_loader_error_prepare_exception (D.30010);
      mono_loader_clear_error ();
      <D.30009>:
      mono_raise_exception (ex);
      D.29880 = 0B;
      return D.29880;
    }
  finally
    {
      iter = {CLOBBER};
      tmp_array = {CLOBBER};
    }
}


property_equal (struct MonoProperty * prop1, struct MonoProperty * prop2)
{
  const char * D.30013;
  const char * D.30014;
  int D.30015;
  gboolean D.30018;
  struct MonoMethod * D.30019;
  struct MonoMethod * D.30022;
  struct MonoMethodSignature * D.30025;
  struct MonoMethodSignature * D.30026;
  int D.30027;
  struct MonoMethod * D.30030;
  struct MonoMethod * D.30033;
  struct MonoMethodSignature * D.30036;
  struct MonoMethodSignature * D.30037;
  int D.30038;

  D.30013 = prop2->name;
  D.30014 = prop1->name;
  D.30015 = monoeg_g_str_equal (D.30014, D.30013);
  if (D.30015 == 0) goto <D.30016>; else goto <D.30017>;
  <D.30016>:
  D.30018 = 0;
  return D.30018;
  <D.30017>:
  D.30019 = prop1->get;
  if (D.30019 != 0B) goto <D.30020>; else goto <D.30021>;
  <D.30020>:
  D.30022 = prop2->get;
  if (D.30022 != 0B) goto <D.30023>; else goto <D.30024>;
  <D.30023>:
  D.30022 = prop2->get;
  D.30025 = mono_method_signature (D.30022);
  D.30019 = prop1->get;
  D.30026 = mono_method_signature (D.30019);
  D.30027 = mono_metadata_signature_equal (D.30026, D.30025);
  if (D.30027 == 0) goto <D.30028>; else goto <D.30029>;
  <D.30028>:
  D.30018 = 0;
  return D.30018;
  <D.30029>:
  <D.30024>:
  <D.30021>:
  D.30030 = prop1->set;
  if (D.30030 != 0B) goto <D.30031>; else goto <D.30032>;
  <D.30031>:
  D.30033 = prop2->set;
  if (D.30033 != 0B) goto <D.30034>; else goto <D.30035>;
  <D.30034>:
  D.30033 = prop2->set;
  D.30036 = mono_method_signature (D.30033);
  D.30030 = prop1->set;
  D.30037 = mono_method_signature (D.30030);
  D.30038 = mono_metadata_signature_equal (D.30037, D.30036);
  if (D.30038 == 0) goto <D.30039>; else goto <D.30040>;
  <D.30039>:
  D.30018 = 0;
  return D.30018;
  <D.30040>:
  <D.30035>:
  <D.30032>:
  D.30018 = 1;
  return D.30018;
}


property_hash (const void * data)
{
  guint D.30042;
  const char * D.30043;
  struct MonoProperty * prop;

  prop = data;
  D.30043 = prop->name;
  D.30042 = monoeg_g_str_hash (D.30043);
  return D.30042;
}


property_accessor_nonpublic (struct MonoMethod * accessor, gboolean start_klass)
{
  gboolean D.30047;

  if (accessor == 0B) goto <D.30045>; else goto <D.30046>;
  <D.30045>:
  D.30047 = 0;
  return D.30047;
  <D.30046>:
  D.30047 = method_nonpublic (accessor, start_klass);
  return D.30047;
}


ves_icall_Type_GetNestedTypes (struct MonoReflectionType * type, guint32 bflags)
{
  struct MonoVTable * D.30049;
  struct MonoType * D.30050;
  unsigned char D.30051;
  unsigned char D.30052;
  struct MonoArray * D.30055;
  struct MonoClass * D.30056;
  struct MonoGenericClass * D.30057;
  void * D.30060;
  unsigned int D.30061;
  unsigned int D.30062;
  unsigned int D.30065;
  unsigned int D.30069;
  struct MonoType * D.30074;
  int D.30075;
  int D.30076;
  int D.30079;
  void * D.30080;
  long unsigned int D.30081;
  long unsigned int D.30082;
  long unsigned int D.30083;
  void * * D.30084;
  int D.30087;
  int D.30088;
  long unsigned int D.30089;
  long unsigned int D.30090;
  void * * D.30091;
  long unsigned int D.30092;
  struct MonoClass * D.22470;
  struct MonoClass * tmp_klass.146;
  struct MonoClass * tmp_klass.147;
  _Bool D.30097;
  long int D.30098;
  long int D.30099;
  struct MonoVTable * D.30102;
  long unsigned int D.30103;
  long unsigned int D.30104;
  long unsigned int D.30105;
  void * * D.30106;
  void * D.30107;
  struct MonoDomain * domain;
  struct MonoClass * klass;
  struct MonoArray * res;
  struct MonoObject * member;
  int i;
  int match;
  struct MonoClass * nested;
  void * iter;
  struct MonoPtrArray tmp_array;

  try
    {
      D.30049 = MEM[(struct MonoObject *)type].vtable;
      domain = D.30049->domain;
      D.30050 = type->type;
      D.30051 = BIT_FIELD_REF <*D.30050, 8, 88>;
      D.30052 = D.30051 & 64;
      if (D.30052 != 0) goto <D.30053>; else goto <D.30054>;
      <D.30053>:
      D.30056 = mono_defaults.monotype_class;
      D.30055 = mono_array_new (domain, D.30056, 0);
      return D.30055;
      <D.30054>:
      D.30050 = type->type;
      klass = mono_class_from_mono_type (D.30050);
      D.30057 = klass->generic_class;
      if (D.30057 != 0B) goto <D.30058>; else goto <D.30059>;
      <D.30058>:
      D.30057 = klass->generic_class;
      klass = D.30057->container_class;
      <D.30059>:
      tmp_array.size = 0;
      tmp_array.capacity = 16;
      D.30060 = __builtin_alloca (128);
      tmp_array.data = D.30060;
      iter = 0B;
      goto <D.22465>;
      <D.22467>:
      match = 0;
      D.30061 = nested->flags;
      D.30062 = D.30061 & 7;
      if (D.30062 == 2) goto <D.30063>; else goto <D.30064>;
      <D.30063>:
      D.30065 = bflags & 16;
      if (D.30065 != 0) goto <D.30066>; else goto <D.30067>;
      <D.30066>:
      match = match + 1;
      <D.30067>:
      goto <D.30068>;
      <D.30064>:
      D.30069 = bflags & 32;
      if (D.30069 != 0) goto <D.30070>; else goto <D.30071>;
      <D.30070>:
      match = match + 1;
      <D.30071>:
      <D.30068>:
      if (match == 0) goto <D.30072>; else goto <D.30073>;
      <D.30072>:
      // predicted unlikely by continue predictor.
      goto <D.22465>;
      <D.30073>:
      D.30074 = &nested->byval_arg;
      member = mono_type_get_object (domain, D.30074);
      D.30075 = tmp_array.size;
      D.30076 = tmp_array.capacity;
      if (D.30075 >= D.30076) goto <D.30077>; else goto <D.30078>;
      <D.30077>:
      {
        void * __tmp;

        D.30076 = tmp_array.capacity;
        D.30079 = D.30076 * 2;
        D.30080 = mono_gc_make_root_descr_all_refs (D.30079);
        D.30076 = tmp_array.capacity;
        D.30081 = (long unsigned int) D.30076;
        D.30082 = D.30081 * 16;
        __tmp = mono_gc_alloc_fixed (D.30082, D.30080);
        D.30076 = tmp_array.capacity;
        D.30081 = (long unsigned int) D.30076;
        D.30083 = D.30081 * 8;
        D.30084 = tmp_array.data;
        mono_gc_memmove_aligned (__tmp, D.30084, D.30083);
        D.30076 = tmp_array.capacity;
        if (D.30076 > 16) goto <D.30085>; else goto <D.30086>;
        <D.30085>:
        D.30084 = tmp_array.data;
        mono_gc_free_fixed (D.30084);
        <D.30086>:
        tmp_array.data = __tmp;
        D.30076 = tmp_array.capacity;
        D.30079 = D.30076 * 2;
        tmp_array.capacity = D.30079;
      }
      <D.30078>:
      D.30084 = tmp_array.data;
      D.30075 = tmp_array.size;
      D.30087 = D.30075;
      D.30088 = D.30087 + 1;
      tmp_array.size = D.30088;
      D.30089 = (long unsigned int) D.30087;
      D.30090 = D.30089 * 8;
      D.30091 = D.30084 + D.30090;
      *D.30091 = member;
      <D.22465>:
      nested = mono_class_get_nested_types (klass, &iter);
      if (nested != 0B) goto <D.22467>; else goto <D.22468>;
      <D.22468>:
      D.30075 = tmp_array.size;
      D.30092 = (long unsigned int) D.30075;
      {
        static struct MonoClass * tmp_klass;

        {
          tmp_klass.146 = tmp_klass;
          if (tmp_klass.146 == 0B) goto <D.30094>; else goto <D.30095>;
          <D.30094>:
          D.30056 = mono_defaults.monotype_class;
          tmp_klass.147 = mono_array_class_get (D.30056, 1);
          tmp_klass = tmp_klass.147;
          tmp_klass.146 = tmp_klass;
          D.30097 = tmp_klass.146 == 0B;
          D.30098 = (long int) D.30097;
          D.30099 = __builtin_expect (D.30098, 0);
          if (D.30099 != 0) goto <D.30100>; else goto <D.30101>;
          <D.30100>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 4094, "tmp_klass");
          <D.30101>:
          <D.30095>:
        }
        D.22470 = tmp_klass;
      }
      D.30102 = mono_class_vtable (domain, D.22470);
      res = mono_array_new_specific (D.30102, D.30092);
      i = 0;
      goto <D.22473>;
      <D.22472>:
      {
        void * * __p;

        D.30103 = (long unsigned int) i;
        __p = mono_array_addr_with_size (res, 8, D.30103);
        D.30084 = tmp_array.data;
        D.30104 = (long unsigned int) i;
        D.30105 = D.30104 * 8;
        D.30106 = D.30084 + D.30105;
        D.30107 = *D.30106;
        mono_gc_wbarrier_set_arrayref (res, __p, D.30107);
      }
      i = i + 1;
      <D.22473>:
      D.30075 = tmp_array.size;
      if (D.30075 > i) goto <D.22472>; else goto <D.22474>;
      <D.22474>:
      D.30076 = tmp_array.capacity;
      if (D.30076 > 16) goto <D.30108>; else goto <D.30109>;
      <D.30108>:
      D.30084 = tmp_array.data;
      mono_gc_free_fixed (D.30084);
      <D.30109>:
      D.30055 = res;
      return D.30055;
    }
  finally
    {
      iter = {CLOBBER};
      tmp_array = {CLOBBER};
    }
}


ves_icall_Type_GetNestedType (struct MonoReflectionType * type, struct MonoString * name, guint32 bflags)
{
  struct MonoException * D.30114;
  struct MonoVTable * D.30115;
  struct MonoType * D.30116;
  unsigned char D.30117;
  unsigned char D.30118;
  struct MonoReflectionType * D.30121;
  unsigned char D.30122;
  struct MonoException * D.30125;
  struct MonoGenericClass * D.30126;
  unsigned int D.30129;
  unsigned int D.30130;
  unsigned int D.30133;
  unsigned int D.30137;
  int D.22449;
  const char * D.30142;
  struct MonoType * D.30145;
  unsigned int D.30146;
  struct MonoDomain * domain;
  struct MonoClass * klass;
  struct MonoClass * nested;
  char * str;
  void * iter;
  void handle_parent = <<< error >>>;

  try
    {
      if (name == 0B) goto <D.30112>; else goto <D.30113>;
      <D.30112>:
      D.30114 = mono_get_exception_argument_null ("name");
      mono_raise_exception (D.30114);
      <D.30113>:
      D.30115 = MEM[(struct MonoObject *)type].vtable;
      domain = D.30115->domain;
      D.30116 = type->type;
      D.30117 = BIT_FIELD_REF <*D.30116, 8, 88>;
      D.30118 = D.30117 & 64;
      if (D.30118 != 0) goto <D.30119>; else goto <D.30120>;
      <D.30119>:
      D.30121 = 0B;
      return D.30121;
      <D.30120>:
      D.30116 = type->type;
      klass = mono_class_from_mono_type (D.30116);
      str = mono_string_to_utf8 (name);
      handle_parent:
      D.30122 = klass->exception_type;
      if (D.30122 != 0) goto <D.30123>; else goto <D.30124>;
      <D.30123>:
      D.30125 = mono_class_get_exception_for_failure (klass);
      mono_raise_exception (D.30125);
      <D.30124>:
      D.30126 = klass->generic_class;
      if (D.30126 != 0B) goto <D.30127>; else goto <D.30128>;
      <D.30127>:
      D.30126 = klass->generic_class;
      klass = D.30126->container_class;
      <D.30128>:
      iter = 0B;
      goto <D.22440>;
      <D.22450>:
      {
        int match;

        match = 0;
        D.30129 = nested->flags;
        D.30130 = D.30129 & 7;
        if (D.30130 == 2) goto <D.30131>; else goto <D.30132>;
        <D.30131>:
        D.30133 = bflags & 16;
        if (D.30133 != 0) goto <D.30134>; else goto <D.30135>;
        <D.30134>:
        match = match + 1;
        <D.30135>:
        goto <D.30136>;
        <D.30132>:
        D.30137 = bflags & 32;
        if (D.30137 != 0) goto <D.30138>; else goto <D.30139>;
        <D.30138>:
        match = match + 1;
        <D.30139>:
        <D.30136>:
        if (match == 0) goto <D.30140>; else goto <D.30141>;
        <D.30140>:
        // predicted unlikely by continue predictor.
        goto <D.22440>;
        <D.30141>:
        {
          size_t __s1_len;
          size_t __s2_len;

          D.30142 = nested->name;
          D.22449 = __builtin_strcmp (D.30142, str);
        }
        if (D.22449 == 0) goto <D.30143>; else goto <D.30144>;
        <D.30143>:
        monoeg_g_free (str);
        D.30145 = &nested->byval_arg;
        D.30121 = mono_type_get_object (domain, D.30145);
        return D.30121;
        <D.30144>:
      }
      <D.22440>:
      nested = mono_class_get_nested_types (klass, &iter);
      if (nested != 0B) goto <D.22450>; else goto <D.22451>;
      <D.22451>:
      D.30146 = bflags & 2;
      if (D.30146 == 0) goto <D.30147>; else goto <D.30148>;
      <D.30147>:
      klass = klass->parent;
      if (klass != 0B) goto handle_parent; else goto <D.30149>;
      <D.30149>:
      <D.30148>:
      monoeg_g_free (str);
      D.30121 = 0B;
      return D.30121;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


ves_icall_Type_GetMethodsByName (struct MonoReflectionType * type, struct MonoString * name, guint32 bflags, MonoBoolean ignore_case, struct MonoReflectionType * reftype)
{
  struct MonoClass * MethodInfo_array.148;
  struct MonoClass * D.30155;
  struct MonoType * D.30156;
  struct MonoType * D.30157;
  struct MonoVTable * D.30158;
  unsigned char D.30159;
  unsigned char D.30160;
  struct MonoArray * D.30163;
  int D.30166;
  struct MonoException * ex.149;
  unsigned int D.30170;
  long unsigned int D.30171;
  void * * D.30172;
  long unsigned int D.30173;
  long unsigned int D.30174;
  void * * D.30175;
  long unsigned int D.30176;
  struct MonoReflectionMethod * D.30177;
  unsigned int i.150;
  static struct MonoClass * MethodInfo_array;
  struct MonoDomain * domain;
  struct MonoArray * res;
  struct MonoVTable * array_vtable;
  struct MonoException * ex;
  const char * mname;
  struct GPtrArray * method_array;
  struct MonoClass * klass;
  struct MonoClass * refklass;
  int i;

  try
    {
      ex = 0B;
      mname = 0B;
      MethodInfo_array.148 = MethodInfo_array;
      if (MethodInfo_array.148 == 0B) goto <D.30153>; else goto <D.30154>;
      <D.30153>:
      {
        struct MonoClass * klass;

        D.30155 = mono_defaults.method_info_class;
        klass = mono_array_class_get (D.30155, 1);
        mono_memory_barrier ();
        MethodInfo_array = klass;
      }
      <D.30154>:
      D.30156 = type->type;
      klass = mono_class_from_mono_type (D.30156);
      D.30157 = reftype->type;
      refklass = mono_class_from_mono_type (D.30157);
      D.30158 = MEM[(struct MonoObject *)type].vtable;
      domain = D.30158->domain;
      MethodInfo_array.148 = MethodInfo_array;
      array_vtable = mono_class_vtable_full (domain, MethodInfo_array.148, 1);
      D.30156 = type->type;
      D.30159 = BIT_FIELD_REF <*D.30156, 8, 88>;
      D.30160 = D.30159 & 64;
      if (D.30160 != 0) goto <D.30161>; else goto <D.30162>;
      <D.30161>:
      D.30163 = mono_array_new_specific (array_vtable, 0);
      return D.30163;
      <D.30162>:
      if (name != 0B) goto <D.30164>; else goto <D.30165>;
      <D.30164>:
      mname = mono_string_to_utf8 (name);
      <D.30165>:
      D.30166 = (int) ignore_case;
      method_array = mono_class_get_methods_by_name (klass, mname, bflags, D.30166, 0, &ex);
      monoeg_g_free (mname);
      ex.149 = ex;
      if (ex.149 != 0B) goto <D.30168>; else goto <D.30169>;
      <D.30168>:
      ex.149 = ex;
      mono_raise_exception (ex.149);
      <D.30169>:
      D.30170 = method_array->len;
      D.30171 = (long unsigned int) D.30170;
      res = mono_array_new_specific (array_vtable, D.30171);
      i = 0;
      goto <D.22278>;
      <D.22277>:
      {
        struct MonoMethod * method;

        D.30172 = method_array->pdata;
        D.30173 = (long unsigned int) i;
        D.30174 = D.30173 * 8;
        D.30175 = D.30172 + D.30174;
        method = *D.30175;
        {
          void * * __p;

          D.30176 = (long unsigned int) i;
          __p = mono_array_addr_with_size (res, 8, D.30176);
          D.30177 = mono_method_get_object (domain, method, refklass);
          mono_gc_wbarrier_set_arrayref (res, __p, D.30177);
        }
      }
      i = i + 1;
      <D.22278>:
      i.150 = (unsigned int) i;
      D.30170 = method_array->len;
      if (i.150 < D.30170) goto <D.22277>; else goto <D.22279>;
      <D.22279>:
      monoeg_g_ptr_array_free (method_array, 1);
      D.30163 = res;
      return D.30163;
    }
  finally
    {
      ex = {CLOBBER};
    }
}


mono_memory_barrier ()
{
  __sync_synchronize ();
}


ves_icall_Type_GetInterfaces (struct MonoReflectionType * type)
{
  struct MonoType * D.30181;
  struct MonoGenericClass * D.30182;
  struct MonoGenericInst * D.30185;
  unsigned char D.30186;
  unsigned char D.30187;
  struct MonoGenericContext * D.30190;
  int D.30191;
  int D.30193;
  struct MonoVTable * D.30195;
  struct MonoDomain * D.30196;
  unsigned int D.30197;
  struct MonoDomain * D.30200;
  struct MonoArray * D.30201;
  struct MonoClass * D.21603;
  struct MonoClass * tmp_klass.151;
  struct MonoClass * D.30207;
  struct MonoClass * tmp_klass.152;
  _Bool D.30209;
  long int D.30210;
  long int D.30211;
  struct MonoVTable * D.30214;
  struct MonoArray * D.30215;
  struct MonoArray * D.30216;
  long unsigned int D.30217;
  struct MonoClass * D.21605;
  struct MonoClass * tmp_klass.153;
  struct MonoClass * tmp_klass.154;
  _Bool D.30222;
  long int D.30223;
  long int D.30224;
  struct MonoVTable * D.30227;
  struct MonoArray * D.30228;
  int D.30229;
  struct MonoError error;
  struct MonoClass * class;
  struct MonoClass * parent;
  struct FillIfaceArrayData data;
  int len;
  struct GHashTable * iface_hash;
  void fail = <<< error >>>;

  try
    {
      D.30181 = type->type;
      class = mono_class_from_mono_type (D.30181);
      data = {};
      iface_hash = monoeg_g_hash_table_new (0B, 0B);
      D.30182 = class->generic_class;
      if (D.30182 != 0B) goto <D.30183>; else goto <D.30184>;
      <D.30183>:
      D.30182 = class->generic_class;
      D.30185 = D.30182->context.class_inst;
      D.30186 = BIT_FIELD_REF <*D.30185, 8, 48>;
      D.30187 = D.30186 & 64;
      if (D.30187 != 0) goto <D.30188>; else goto <D.30189>;
      <D.30188>:
      D.30190 = mono_class_get_context (class);
      data.context = D.30190;
      D.30182 = class->generic_class;
      class = D.30182->container_class;
      <D.30189>:
      <D.30184>:
      parent = class;
      goto <D.21600>;
      <D.21599>:
      mono_class_setup_interfaces (parent, &error);
      D.30191 = mono_error_ok (&error);
      if (D.30191 == 0) goto fail; else goto <D.30192>;
      <D.30192>:
      collect_interfaces (parent, iface_hash, &error);
      D.30193 = mono_error_ok (&error);
      if (D.30193 == 0) goto fail; else goto <D.30194>;
      <D.30194>:
      parent = parent->parent;
      <D.21600>:
      if (parent != 0B) goto <D.21599>; else goto <D.21601>;
      <D.21601>:
      data.error = &error;
      D.30195 = MEM[(struct MonoObject *)type].vtable;
      D.30196 = D.30195->domain;
      data.domain = D.30196;
      D.30197 = monoeg_g_hash_table_size (iface_hash);
      len = (int) D.30197;
      if (len == 0) goto <D.30198>; else goto <D.30199>;
      <D.30198>:
      monoeg_g_hash_table_destroy (iface_hash);
      D.30200 = data.domain;
      D.30201 = D.30200->empty_types;
      if (D.30201 == 0B) goto <D.30202>; else goto <D.30203>;
      <D.30202>:
      D.30200 = data.domain;
      {
        static struct MonoClass * tmp_klass;

        {
          tmp_klass.151 = tmp_klass;
          if (tmp_klass.151 == 0B) goto <D.30205>; else goto <D.30206>;
          <D.30205>:
          D.30207 = mono_defaults.monotype_class;
          tmp_klass.152 = mono_array_class_get (D.30207, 1);
          tmp_klass = tmp_klass.152;
          tmp_klass.151 = tmp_klass;
          D.30209 = tmp_klass.151 == 0B;
          D.30210 = (long int) D.30209;
          D.30211 = __builtin_expect (D.30210, 0);
          if (D.30211 != 0) goto <D.30212>; else goto <D.30213>;
          <D.30212>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2107, "tmp_klass");
          <D.30213>:
          <D.30206>:
        }
        D.21603 = tmp_klass;
      }
      D.30200 = data.domain;
      D.30214 = mono_class_vtable (D.30200, D.21603);
      D.30215 = mono_array_new_specific (D.30214, 0);
      D.30200->empty_types = D.30215;
      <D.30203>:
      D.30200 = data.domain;
      D.30216 = D.30200->empty_types;
      return D.30216;
      <D.30199>:
      D.30217 = (long unsigned int) len;
      {
        static struct MonoClass * tmp_klass;

        {
          tmp_klass.153 = tmp_klass;
          if (tmp_klass.153 == 0B) goto <D.30219>; else goto <D.30220>;
          <D.30219>:
          D.30207 = mono_defaults.monotype_class;
          tmp_klass.154 = mono_array_class_get (D.30207, 1);
          tmp_klass = tmp_klass.154;
          tmp_klass.153 = tmp_klass;
          D.30222 = tmp_klass.153 == 0B;
          D.30223 = (long int) D.30222;
          D.30224 = __builtin_expect (D.30223, 0);
          if (D.30224 != 0) goto <D.30225>; else goto <D.30226>;
          <D.30225>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2111, "tmp_klass");
          <D.30226>:
          <D.30220>:
        }
        D.21605 = tmp_klass;
      }
      D.30200 = data.domain;
      D.30227 = mono_class_vtable (D.30200, D.21605);
      D.30228 = mono_array_new_specific (D.30227, D.30217);
      data.iface_array = D.30228;
      monoeg_g_hash_table_foreach (iface_hash, fill_iface_array, &data);
      D.30229 = mono_error_ok (&error);
      if (D.30229 == 0) goto fail; else goto <D.30230>;
      <D.30230>:
      monoeg_g_hash_table_destroy (iface_hash);
      D.30216 = data.iface_array;
      return D.30216;
      fail:
      monoeg_g_hash_table_destroy (iface_hash);
      mono_error_raise_exception (&error);
      D.30216 = 0B;
      return D.30216;
    }
  finally
    {
      error = {CLOBBER};
      data = {CLOBBER};
    }
}


fill_iface_array (void * key, void * value, void * user_data)
{
  struct MonoError * D.30233;
  int D.30234;
  struct MonoGenericContext * D.30237;
  struct MonoGenericClass * D.30240;
  struct MonoGenericInst * D.30243;
  unsigned char D.30244;
  unsigned char D.30245;
  int D.30248;
  int D.30251;
  int D.30252;
  int D.30253;
  long unsigned int D.30254;
  struct MonoArray * D.30255;
  struct MonoDomain * D.30256;
  struct MonoReflectionType * D.30257;
  struct FillIfaceArrayData * data;
  struct MonoClass * ic;
  struct MonoType * ret;
  struct MonoType * inflated;

  data = user_data;
  ic = key;
  ret = &ic->byval_arg;
  inflated = 0B;
  D.30233 = data->error;
  D.30234 = mono_error_ok (D.30233);
  if (D.30234 == 0) goto <D.30235>; else goto <D.30236>;
  <D.30235>:
  return;
  <D.30236>:
  D.30237 = data->context;
  if (D.30237 != 0B) goto <D.30238>; else goto <D.30239>;
  <D.30238>:
  D.30240 = ic->generic_class;
  if (D.30240 != 0B) goto <D.30241>; else goto <D.30242>;
  <D.30241>:
  D.30240 = ic->generic_class;
  D.30243 = D.30240->context.class_inst;
  D.30244 = BIT_FIELD_REF <*D.30243, 8, 48>;
  D.30245 = D.30244 & 64;
  if (D.30245 != 0) goto <D.30246>; else goto <D.30247>;
  <D.30246>:
  D.30233 = data->error;
  D.30237 = data->context;
  ret = mono_class_inflate_generic_type_checked (ret, D.30237, D.30233);
  inflated = ret;
  D.30233 = data->error;
  D.30248 = mono_error_ok (D.30233);
  if (D.30248 == 0) goto <D.30249>; else goto <D.30250>;
  <D.30249>:
  return;
  <D.30250>:
  <D.30247>:
  <D.30242>:
  <D.30239>:
  {
    void * * __p;

    D.30251 = data->next_idx;
    D.30252 = D.30251;
    D.30253 = D.30252 + 1;
    data->next_idx = D.30253;
    D.30254 = (long unsigned int) D.30252;
    D.30255 = data->iface_array;
    __p = mono_array_addr_with_size (D.30255, 8, D.30254);
    D.30256 = data->domain;
    D.30257 = mono_type_get_object (D.30256, ret);
    D.30255 = data->iface_array;
    mono_gc_wbarrier_set_arrayref (D.30255, __p, D.30257);
  }
  if (inflated != 0B) goto <D.30258>; else goto <D.30259>;
  <D.30258>:
  mono_metadata_free_type (inflated);
  <D.30259>:
}


collect_interfaces (struct MonoClass * klass, struct GHashTable * ifaces, struct MonoError * error)
{
  int D.30261;
  struct MonoClass * * D.30264;
  long unsigned int D.30265;
  long unsigned int D.30266;
  struct MonoClass * * D.30267;
  int D.30268;
  short unsigned int D.30271;
  int D.30272;
  int i;
  struct MonoClass * ic;

  mono_class_setup_interfaces (klass, error);
  D.30261 = mono_error_ok (error);
  if (D.30261 == 0) goto <D.30262>; else goto <D.30263>;
  <D.30262>:
  return;
  <D.30263>:
  i = 0;
  goto <D.21570>;
  <D.21569>:
  D.30264 = klass->interfaces;
  D.30265 = (long unsigned int) i;
  D.30266 = D.30265 * 8;
  D.30267 = D.30264 + D.30266;
  ic = *D.30267;
  monoeg_g_hash_table_insert_replace (ifaces, ic, ic, 0);
  collect_interfaces (ic, ifaces, error);
  D.30268 = mono_error_ok (error);
  if (D.30268 == 0) goto <D.30269>; else goto <D.30270>;
  <D.30269>:
  return;
  <D.30270>:
  i = i + 1;
  <D.21570>:
  D.30271 = klass->interface_count;
  D.30272 = (int) D.30271;
  if (D.30272 > i) goto <D.21569>; else goto <D.21571>;
  <D.21571>:
}


ves_icall_MonoType_GetGenericArguments (struct MonoReflectionType * type)
{
  struct MonoVTable * D.30274;
  struct MonoClass * D.21697;
  struct MonoClass * tmp_klass.155;
  struct MonoClass * D.30278;
  struct MonoClass * tmp_klass.156;
  _Bool D.30280;
  long int D.30281;
  long int D.30282;
  struct MonoType * D.30285;
  struct MonoGenericContainer * D.30286;
  <unnamed-signed:31> D.30289;
  long unsigned int D.30290;
  struct MonoImage * D.30291;
  struct MonoGenericParamFull * D.30292;
  long unsigned int D.30293;
  long unsigned int D.30294;
  struct MonoGenericParam * D.30295;
  long unsigned int D.30296;
  struct MonoType * D.30297;
  struct MonoReflectionType * D.30298;
  int D.30299;
  struct MonoGenericClass * D.30301;
  <unnamed-unsigned:22> D.30304;
  long unsigned int D.30305;
  struct MonoType * D.30306;
  struct MonoReflectionType * D.30307;
  int D.30308;
  struct MonoArray * D.30310;
  struct MonoArray * res;
  struct MonoClass * klass;
  struct MonoClass * pklass;
  struct MonoDomain * domain;
  struct MonoVTable * array_vtable;
  int i;

  D.30274 = MEM[(struct MonoObject *)type].vtable;
  domain = D.30274->domain;
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.155 = tmp_klass;
      if (tmp_klass.155 == 0B) goto <D.30276>; else goto <D.30277>;
      <D.30276>:
      D.30278 = mono_defaults.systemtype_class;
      tmp_klass.156 = mono_array_class_get (D.30278, 1);
      tmp_klass = tmp_klass.156;
      tmp_klass.155 = tmp_klass;
      D.30280 = tmp_klass.155 == 0B;
      D.30281 = (long int) D.30280;
      D.30282 = __builtin_expect (D.30281, 0);
      if (D.30282 != 0) goto <D.30283>; else goto <D.30284>;
      <D.30283>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 2329, "tmp_klass");
      <D.30284>:
      <D.30277>:
    }
    D.21697 = tmp_klass;
  }
  array_vtable = mono_class_vtable_full (domain, D.21697, 1);
  D.30285 = type->type;
  klass = mono_class_from_mono_type (D.30285);
  D.30286 = klass->generic_container;
  if (D.30286 != 0B) goto <D.30287>; else goto <D.30288>;
  <D.30287>:
  {
    struct MonoGenericContainer * container;

    container = klass->generic_container;
    D.30289 = container->type_argc;
    D.30290 = (long unsigned int) D.30289;
    res = mono_array_new_specific (array_vtable, D.30290);
    i = 0;
    goto <D.21702>;
    <D.21701>:
    D.30291 = klass->image;
    D.30292 = container->type_params;
    D.30293 = (long unsigned int) i;
    D.30294 = D.30293 * 56;
    D.30295 = D.30292 + D.30294;
    pklass = mono_class_from_generic_parameter (D.30295, D.30291, 0);
    {
      void * * __p;

      D.30296 = (long unsigned int) i;
      __p = mono_array_addr_with_size (res, 8, D.30296);
      D.30297 = &pklass->byval_arg;
      D.30298 = mono_type_get_object (domain, D.30297);
      mono_gc_wbarrier_set_arrayref (res, __p, D.30298);
    }
    i = i + 1;
    <D.21702>:
    D.30289 = container->type_argc;
    D.30299 = (int) D.30289;
    if (D.30299 > i) goto <D.21701>; else goto <D.21703>;
    <D.21703>:
  }
  goto <D.30300>;
  <D.30288>:
  D.30301 = klass->generic_class;
  if (D.30301 != 0B) goto <D.30302>; else goto <D.30303>;
  <D.30302>:
  {
    struct MonoGenericInst * inst;

    D.30301 = klass->generic_class;
    inst = D.30301->context.class_inst;
    D.30304 = inst->type_argc;
    D.30305 = (long unsigned int) D.30304;
    res = mono_array_new_specific (array_vtable, D.30305);
    i = 0;
    goto <D.21707>;
    <D.21706>:
    {
      void * * __p;

      D.30296 = (long unsigned int) i;
      __p = mono_array_addr_with_size (res, 8, D.30296);
      D.30306 = inst->type_argv[i];
      D.30307 = mono_type_get_object (domain, D.30306);
      mono_gc_wbarrier_set_arrayref (res, __p, D.30307);
    }
    i = i + 1;
    <D.21707>:
    D.30304 = inst->type_argc;
    D.30308 = (int) D.30304;
    if (D.30308 > i) goto <D.21706>; else goto <D.21708>;
    <D.21708>:
  }
  goto <D.30309>;
  <D.30303>:
  res = mono_array_new_specific (array_vtable, 0);
  <D.30309>:
  <D.30300>:
  D.30310 = res;
  return D.30310;
}


ves_icall_Type_GetFields_internal (struct MonoReflectionType * type, guint32 bflags, struct MonoReflectionType * reftype)
{
  struct MonoVTable * D.30312;
  struct MonoType * D.30313;
  unsigned char D.30314;
  unsigned char D.30315;
  struct MonoArray * D.30318;
  struct MonoClass * D.30319;
  struct MonoType * D.30320;
  void * D.30321;
  unsigned char D.30322;
  int D.30325;
  void * * D.30328;
  struct MonoException * D.30329;
  unsigned int D.30330;
  int D.22186;
  int iftmp.157;
  int D.22185;
  const char[9] * D.30336;
  unsigned char D.30337;
  int D.30338;
  unsigned char D.30339;
  int D.30340;
  _Bool D.30341;
  _Bool D.30342;
  _Bool D.30343;
  const unsigned char * D.30346;
  unsigned char D.30347;
  int D.30348;
  const unsigned char * D.30349;
  unsigned char D.30350;
  int D.30351;
  _Bool D.30352;
  _Bool D.30353;
  const unsigned char * D.30356;
  unsigned char D.30357;
  int D.30358;
  const unsigned char * D.30359;
  unsigned char D.30360;
  int D.30361;
  _Bool D.30362;
  _Bool D.30363;
  const unsigned char * D.30366;
  unsigned char D.30367;
  int D.30368;
  const unsigned char * D.30369;
  unsigned char D.30370;
  int D.30371;
  const char * D.30373;
  unsigned int D.30376;
  unsigned int D.30379;
  unsigned int D.30386;
  unsigned int D.30391;
  unsigned int D.30394;
  unsigned int D.30399;
  unsigned int D.30402;
  int D.30407;
  int D.30410;
  void * D.30411;
  long unsigned int D.30412;
  long unsigned int D.30413;
  long unsigned int D.30414;
  int D.30417;
  int D.30418;
  long unsigned int D.30419;
  long unsigned int D.30420;
  void * * D.30421;
  unsigned int D.30422;
  long unsigned int D.30426;
  struct MonoClass * D.22192;
  struct MonoClass * tmp_klass.158;
  struct MonoClass * tmp_klass.159;
  _Bool D.30431;
  long int D.30432;
  long int D.30433;
  struct MonoVTable * D.30436;
  long unsigned int D.30437;
  long unsigned int D.30438;
  long unsigned int D.30439;
  void * * D.30440;
  void * D.30441;
  struct MonoDomain * domain;
  struct MonoClass * startklass;
  struct MonoClass * klass;
  struct MonoClass * refklass;
  struct MonoArray * res;
  struct MonoObject * member;
  int i;
  int match;
  void * iter;
  struct MonoClassField * field;
  struct MonoPtrArray tmp_array;
  void handle_parent = <<< error >>>;

  try
    {
      D.30312 = MEM[(struct MonoObject *)type].vtable;
      domain = D.30312->domain;
      D.30313 = type->type;
      D.30314 = BIT_FIELD_REF <*D.30313, 8, 88>;
      D.30315 = D.30314 & 64;
      if (D.30315 != 0) goto <D.30316>; else goto <D.30317>;
      <D.30316>:
      D.30319 = mono_defaults.field_info_class;
      D.30318 = mono_array_new (domain, D.30319, 0);
      return D.30318;
      <D.30317>:
      D.30313 = type->type;
      startklass = mono_class_from_mono_type (D.30313);
      klass = startklass;
      D.30320 = reftype->type;
      refklass = mono_class_from_mono_type (D.30320);
      tmp_array.size = 0;
      tmp_array.capacity = 16;
      D.30321 = __builtin_alloca (128);
      tmp_array.data = D.30321;
      handle_parent:
      D.30322 = klass->exception_type;
      if (D.30322 != 0) goto <D.30323>; else goto <D.30324>;
      <D.30323>:
      D.30325 = tmp_array.capacity;
      if (D.30325 > 16) goto <D.30326>; else goto <D.30327>;
      <D.30326>:
      D.30328 = tmp_array.data;
      mono_gc_free_fixed (D.30328);
      <D.30327>:
      D.30329 = mono_class_get_exception_for_failure (klass);
      mono_raise_exception (D.30329);
      <D.30324>:
      iter = 0B;
      goto <D.22187>;
      <D.22189>:
      {
        guint32 flags;

        flags = mono_field_get_flags (field);
        match = 0;
        D.30330 = flags & 1536;
        if (D.30330 != 0) goto <D.30331>; else goto <D.30332>;
        <D.30331>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.30336 = "_Deleted";
            D.30337 = MEM[(const unsigned char *)D.30336];
            D.30338 = (int) D.30337;
            D.30339 = *__s2;
            D.30340 = (int) D.30339;
            __result = D.30338 - D.30340;
            {
              D.30341 = __s2_len != 0;
              D.30342 = __result == 0;
              D.30343 = D.30341 & D.30342;
              if (D.30343 != 0) goto <D.30344>; else goto <D.30345>;
              <D.30344>:
              D.30346 = &MEM[(void *)"_Deleted" + 1B];
              D.30347 = *D.30346;
              D.30348 = (int) D.30347;
              D.30349 = __s2 + 1;
              D.30350 = *D.30349;
              D.30351 = (int) D.30350;
              __result = D.30348 - D.30351;
              D.30352 = __s2_len > 1;
              D.30342 = __result == 0;
              D.30353 = D.30352 & D.30342;
              if (D.30353 != 0) goto <D.30354>; else goto <D.30355>;
              <D.30354>:
              D.30356 = &MEM[(void *)"_Deleted" + 2B];
              D.30357 = *D.30356;
              D.30358 = (int) D.30357;
              D.30359 = __s2 + 2;
              D.30360 = *D.30359;
              D.30361 = (int) D.30360;
              __result = D.30358 - D.30361;
              D.30362 = __s2_len > 2;
              D.30342 = __result == 0;
              D.30363 = D.30362 & D.30342;
              if (D.30363 != 0) goto <D.30364>; else goto <D.30365>;
              <D.30364>:
              D.30366 = &MEM[(void *)"_Deleted" + 3B];
              D.30367 = *D.30366;
              D.30368 = (int) D.30367;
              D.30369 = __s2 + 3;
              D.30370 = *D.30369;
              D.30371 = (int) D.30370;
              __result = D.30368 - D.30371;
              <D.30365>:
              <D.30355>:
              <D.30345>:
            }
            D.22185 = __result;
          }
          iftmp.157 = -D.22185;
          goto <D.30372>;
          <D.30335>:
          D.30373 = mono_field_get_name (field);
          iftmp.157 = __builtin_strcmp (D.30373, "_Deleted");
          <D.30372>:
          D.22186 = iftmp.157;
        }
        if (D.22186 == 0) goto <D.30374>; else goto <D.30375>;
        <D.30374>:
        // predicted unlikely by continue predictor.
        goto <D.22187>;
        <D.30375>:
        <D.30332>:
        D.30376 = flags & 7;
        if (D.30376 == 6) goto <D.30377>; else goto <D.30378>;
        <D.30377>:
        D.30379 = bflags & 16;
        if (D.30379 != 0) goto <D.30380>; else goto <D.30381>;
        <D.30380>:
        match = match + 1;
        <D.30381>:
        goto <D.30382>;
        <D.30378>:
        if (klass == startklass) goto <D.30383>; else goto <D.30385>;
        <D.30385>:
        D.30376 = flags & 7;
        if (D.30376 != 1) goto <D.30383>; else goto <D.30384>;
        <D.30383>:
        D.30386 = bflags & 32;
        if (D.30386 != 0) goto <D.30387>; else goto <D.30388>;
        <D.30387>:
        match = match + 1;
        <D.30388>:
        <D.30384>:
        <D.30382>:
        if (match == 0) goto <D.30389>; else goto <D.30390>;
        <D.30389>:
        // predicted unlikely by continue predictor.
        goto <D.22187>;
        <D.30390>:
        match = 0;
        D.30391 = flags & 16;
        if (D.30391 != 0) goto <D.30392>; else goto <D.30393>;
        <D.30392>:
        D.30394 = bflags & 8;
        if (D.30394 != 0) goto <D.30395>; else goto <D.30396>;
        <D.30395>:
        D.30399 = bflags & 64;
        if (D.30399 != 0) goto <D.30397>; else goto <D.30400>;
        <D.30400>:
        if (klass == startklass) goto <D.30397>; else goto <D.30398>;
        <D.30397>:
        match = match + 1;
        <D.30398>:
        <D.30396>:
        goto <D.30401>;
        <D.30393>:
        D.30402 = bflags & 4;
        if (D.30402 != 0) goto <D.30403>; else goto <D.30404>;
        <D.30403>:
        match = match + 1;
        <D.30404>:
        <D.30401>:
        if (match == 0) goto <D.30405>; else goto <D.30406>;
        <D.30405>:
        // predicted unlikely by continue predictor.
        goto <D.22187>;
        <D.30406>:
        member = mono_field_get_object (domain, refklass, field);
        D.30407 = tmp_array.size;
        D.30325 = tmp_array.capacity;
        if (D.30407 >= D.30325) goto <D.30408>; else goto <D.30409>;
        <D.30408>:
        {
          void * __tmp;

          D.30325 = tmp_array.capacity;
          D.30410 = D.30325 * 2;
          D.30411 = mono_gc_make_root_descr_all_refs (D.30410);
          D.30325 = tmp_array.capacity;
          D.30412 = (long unsigned int) D.30325;
          D.30413 = D.30412 * 16;
          __tmp = mono_gc_alloc_fixed (D.30413, D.30411);
          D.30325 = tmp_array.capacity;
          D.30412 = (long unsigned int) D.30325;
          D.30414 = D.30412 * 8;
          D.30328 = tmp_array.data;
          mono_gc_memmove_aligned (__tmp, D.30328, D.30414);
          D.30325 = tmp_array.capacity;
          if (D.30325 > 16) goto <D.30415>; else goto <D.30416>;
          <D.30415>:
          D.30328 = tmp_array.data;
          mono_gc_free_fixed (D.30328);
          <D.30416>:
          tmp_array.data = __tmp;
          D.30325 = tmp_array.capacity;
          D.30410 = D.30325 * 2;
          tmp_array.capacity = D.30410;
        }
        <D.30409>:
        D.30328 = tmp_array.data;
        D.30407 = tmp_array.size;
        D.30417 = D.30407;
        D.30418 = D.30417 + 1;
        tmp_array.size = D.30418;
        D.30419 = (long unsigned int) D.30417;
        D.30420 = D.30419 * 8;
        D.30421 = D.30328 + D.30420;
        *D.30421 = member;
      }
      <D.22187>:
      field = mono_class_get_fields_lazy (klass, &iter);
      if (field != 0B) goto <D.22189>; else goto <D.22190>;
      <D.22190>:
      D.30422 = bflags & 2;
      if (D.30422 == 0) goto <D.30423>; else goto <D.30424>;
      <D.30423>:
      klass = klass->parent;
      if (klass != 0B) goto handle_parent; else goto <D.30425>;
      <D.30425>:
      <D.30424>:
      D.30407 = tmp_array.size;
      D.30426 = (long unsigned int) D.30407;
      {
        static struct MonoClass * tmp_klass;

        {
          tmp_klass.158 = tmp_klass;
          if (tmp_klass.158 == 0B) goto <D.30428>; else goto <D.30429>;
          <D.30428>:
          D.30319 = mono_defaults.field_info_class;
          tmp_klass.159 = mono_array_class_get (D.30319, 1);
          tmp_klass = tmp_klass.159;
          tmp_klass.158 = tmp_klass;
          D.30431 = tmp_klass.158 == 0B;
          D.30432 = (long int) D.30431;
          D.30433 = __builtin_expect (D.30432, 0);
          if (D.30433 != 0) goto <D.30434>; else goto <D.30435>;
          <D.30434>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 3414, "tmp_klass");
          <D.30435>:
          <D.30429>:
        }
        D.22192 = tmp_klass;
      }
      D.30436 = mono_class_vtable (domain, D.22192);
      res = mono_array_new_specific (D.30436, D.30426);
      i = 0;
      goto <D.22195>;
      <D.22194>:
      {
        void * * __p;

        D.30437 = (long unsigned int) i;
        __p = mono_array_addr_with_size (res, 8, D.30437);
        D.30328 = tmp_array.data;
        D.30438 = (long unsigned int) i;
        D.30439 = D.30438 * 8;
        D.30440 = D.30328 + D.30439;
        D.30441 = *D.30440;
        mono_gc_wbarrier_set_arrayref (res, __p, D.30441);
      }
      i = i + 1;
      <D.22195>:
      D.30407 = tmp_array.size;
      if (D.30407 > i) goto <D.22194>; else goto <D.22196>;
      <D.22196>:
      D.30325 = tmp_array.capacity;
      if (D.30325 > 16) goto <D.30442>; else goto <D.30443>;
      <D.30442>:
      D.30328 = tmp_array.data;
      mono_gc_free_fixed (D.30328);
      <D.30443>:
      D.30318 = res;
      return D.30318;
    }
  finally
    {
      iter = {CLOBBER};
      tmp_array = {CLOBBER};
    }
}


ves_icall_Type_GetField (struct MonoReflectionType * type, struct MonoString * name, guint32 bflags)
{
  struct MonoVTable * D.30446;
  struct MonoType * D.30447;
  struct MonoException * D.30450;
  unsigned char D.30451;
  unsigned char D.30452;
  struct MonoReflectionField * D.30455;
  int (*<T39ce>) (const char *, const char *) iftmp.160;
  unsigned int D.30457;
  unsigned char D.30461;
  struct MonoException * D.30464;
  unsigned int D.30465;
  int D.22156;
  int iftmp.161;
  int D.22155;
  const char[9] * D.30471;
  unsigned char D.30472;
  int D.30473;
  unsigned char D.30474;
  int D.30475;
  _Bool D.30476;
  _Bool D.30477;
  _Bool D.30478;
  const unsigned char * D.30481;
  unsigned char D.30482;
  int D.30483;
  const unsigned char * D.30484;
  unsigned char D.30485;
  int D.30486;
  _Bool D.30487;
  _Bool D.30488;
  const unsigned char * D.30491;
  unsigned char D.30492;
  int D.30493;
  const unsigned char * D.30494;
  unsigned char D.30495;
  int D.30496;
  _Bool D.30497;
  _Bool D.30498;
  const unsigned char * D.30501;
  unsigned char D.30502;
  int D.30503;
  const unsigned char * D.30504;
  unsigned char D.30505;
  int D.30506;
  const char * D.30508;
  unsigned int D.30511;
  unsigned int D.30514;
  unsigned int D.30521;
  unsigned int D.30526;
  unsigned int D.30529;
  unsigned int D.30534;
  unsigned int D.30537;
  const char * D.30542;
  int D.30543;
  unsigned int D.30546;
  struct MonoDomain * domain;
  struct MonoClass * startklass;
  struct MonoClass * klass;
  int match;
  struct MonoClassField * field;
  void * iter;
  char * utf8_name;
  int (*<T39ce>) (const char *, const char *) compare_func;
  void handle_parent = <<< error >>>;

  try
    {
      compare_func = 0B;
      D.30446 = MEM[(struct MonoObject *)type].vtable;
      domain = D.30446->domain;
      D.30447 = type->type;
      startklass = mono_class_from_mono_type (D.30447);
      klass = startklass;
      if (name == 0B) goto <D.30448>; else goto <D.30449>;
      <D.30448>:
      D.30450 = mono_get_exception_argument_null ("name");
      mono_raise_exception (D.30450);
      <D.30449>:
      D.30447 = type->type;
      D.30451 = BIT_FIELD_REF <*D.30447, 8, 88>;
      D.30452 = D.30451 & 64;
      if (D.30452 != 0) goto <D.30453>; else goto <D.30454>;
      <D.30453>:
      D.30455 = 0B;
      return D.30455;
      <D.30454>:
      D.30457 = bflags & 1;
      if (D.30457 != 0) goto <D.30458>; else goto <D.30459>;
      <D.30458>:
      iftmp.160 = monoeg_ascii_strcasecmp;
      goto <D.30460>;
      <D.30459>:
      iftmp.160 = strcmp;
      <D.30460>:
      compare_func = iftmp.160;
      handle_parent:
      D.30461 = klass->exception_type;
      if (D.30461 != 0) goto <D.30462>; else goto <D.30463>;
      <D.30462>:
      D.30464 = mono_class_get_exception_for_failure (klass);
      mono_raise_exception (D.30464);
      <D.30463>:
      iter = 0B;
      goto <D.22157>;
      <D.22158>:
      {
        guint32 flags;

        flags = mono_field_get_flags (field);
        match = 0;
        D.30465 = flags & 1536;
        if (D.30465 != 0) goto <D.30466>; else goto <D.30467>;
        <D.30466>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.30471 = "_Deleted";
            D.30472 = MEM[(const unsigned char *)D.30471];
            D.30473 = (int) D.30472;
            D.30474 = *__s2;
            D.30475 = (int) D.30474;
            __result = D.30473 - D.30475;
            {
              D.30476 = __s2_len != 0;
              D.30477 = __result == 0;
              D.30478 = D.30476 & D.30477;
              if (D.30478 != 0) goto <D.30479>; else goto <D.30480>;
              <D.30479>:
              D.30481 = &MEM[(void *)"_Deleted" + 1B];
              D.30482 = *D.30481;
              D.30483 = (int) D.30482;
              D.30484 = __s2 + 1;
              D.30485 = *D.30484;
              D.30486 = (int) D.30485;
              __result = D.30483 - D.30486;
              D.30487 = __s2_len > 1;
              D.30477 = __result == 0;
              D.30488 = D.30487 & D.30477;
              if (D.30488 != 0) goto <D.30489>; else goto <D.30490>;
              <D.30489>:
              D.30491 = &MEM[(void *)"_Deleted" + 2B];
              D.30492 = *D.30491;
              D.30493 = (int) D.30492;
              D.30494 = __s2 + 2;
              D.30495 = *D.30494;
              D.30496 = (int) D.30495;
              __result = D.30493 - D.30496;
              D.30497 = __s2_len > 2;
              D.30477 = __result == 0;
              D.30498 = D.30497 & D.30477;
              if (D.30498 != 0) goto <D.30499>; else goto <D.30500>;
              <D.30499>:
              D.30501 = &MEM[(void *)"_Deleted" + 3B];
              D.30502 = *D.30501;
              D.30503 = (int) D.30502;
              D.30504 = __s2 + 3;
              D.30505 = *D.30504;
              D.30506 = (int) D.30505;
              __result = D.30503 - D.30506;
              <D.30500>:
              <D.30490>:
              <D.30480>:
            }
            D.22155 = __result;
          }
          iftmp.161 = -D.22155;
          goto <D.30507>;
          <D.30470>:
          D.30508 = mono_field_get_name (field);
          iftmp.161 = __builtin_strcmp (D.30508, "_Deleted");
          <D.30507>:
          D.22156 = iftmp.161;
        }
        if (D.22156 == 0) goto <D.30509>; else goto <D.30510>;
        <D.30509>:
        // predicted unlikely by continue predictor.
        goto <D.22157>;
        <D.30510>:
        <D.30467>:
        D.30511 = flags & 7;
        if (D.30511 == 6) goto <D.30512>; else goto <D.30513>;
        <D.30512>:
        D.30514 = bflags & 16;
        if (D.30514 != 0) goto <D.30515>; else goto <D.30516>;
        <D.30515>:
        match = match + 1;
        <D.30516>:
        goto <D.30517>;
        <D.30513>:
        if (klass == startklass) goto <D.30518>; else goto <D.30520>;
        <D.30520>:
        D.30511 = flags & 7;
        if (D.30511 != 1) goto <D.30518>; else goto <D.30519>;
        <D.30518>:
        D.30521 = bflags & 32;
        if (D.30521 != 0) goto <D.30522>; else goto <D.30523>;
        <D.30522>:
        match = match + 1;
        <D.30523>:
        <D.30519>:
        <D.30517>:
        if (match == 0) goto <D.30524>; else goto <D.30525>;
        <D.30524>:
        // predicted unlikely by continue predictor.
        goto <D.22157>;
        <D.30525>:
        match = 0;
        D.30526 = flags & 16;
        if (D.30526 != 0) goto <D.30527>; else goto <D.30528>;
        <D.30527>:
        D.30529 = bflags & 8;
        if (D.30529 != 0) goto <D.30530>; else goto <D.30531>;
        <D.30530>:
        D.30534 = bflags & 64;
        if (D.30534 != 0) goto <D.30532>; else goto <D.30535>;
        <D.30535>:
        if (klass == startklass) goto <D.30532>; else goto <D.30533>;
        <D.30532>:
        match = match + 1;
        <D.30533>:
        <D.30531>:
        goto <D.30536>;
        <D.30528>:
        D.30537 = bflags & 4;
        if (D.30537 != 0) goto <D.30538>; else goto <D.30539>;
        <D.30538>:
        match = match + 1;
        <D.30539>:
        <D.30536>:
        if (match == 0) goto <D.30540>; else goto <D.30541>;
        <D.30540>:
        // predicted unlikely by continue predictor.
        goto <D.22157>;
        <D.30541>:
        utf8_name = mono_string_to_utf8 (name);
        D.30542 = mono_field_get_name (field);
        D.30543 = compare_func (D.30542, utf8_name);
        if (D.30543 != 0) goto <D.30544>; else goto <D.30545>;
        <D.30544>:
        monoeg_g_free (utf8_name);
        // predicted unlikely by continue predictor.
        goto <D.22157>;
        <D.30545>:
        monoeg_g_free (utf8_name);
        D.30455 = mono_field_get_object (domain, klass, field);
        return D.30455;
      }
      <D.22157>:
      field = mono_class_get_fields_lazy (klass, &iter);
      if (field != 0B) goto <D.22158>; else goto <D.22159>;
      <D.22159>:
      D.30546 = bflags & 2;
      if (D.30546 == 0) goto <D.30547>; else goto <D.30548>;
      <D.30547>:
      klass = klass->parent;
      if (klass != 0B) goto handle_parent; else goto <D.30549>;
      <D.30549>:
      <D.30548>:
      D.30455 = 0B;
      return D.30455;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


ves_icall_Type_GetEvents_internal (struct MonoReflectionType * type, guint32 bflags, struct MonoReflectionType * reftype)
{
  void * D.30552;
  struct MonoClass * System_Reflection_EventInfo.162;
  struct MonoImage * D.30556;
  struct MonoClass * System_Reflection_EventInfo.163;
  struct MonoVTable * D.30558;
  struct MonoType * D.30559;
  unsigned char D.30560;
  unsigned char D.30561;
  struct MonoArray * D.30564;
  struct MonoClass * D.22415;
  struct MonoClass * tmp_klass.164;
  struct MonoClass * tmp_klass.165;
  _Bool D.30569;
  long int D.30570;
  long int D.30571;
  struct MonoVTable * D.30574;
  unsigned char D.30575;
  struct MonoLoaderError * D.30577;
  short unsigned int D.30585;
  int D.30586;
  int D.30587;
  unsigned int D.30590;
  unsigned int D.30597;
  int D.30607;
  unsigned int D.30610;
  unsigned int D.30615;
  unsigned int D.30618;
  int D.30626;
  int D.30627;
  int D.30630;
  void * D.30631;
  long unsigned int D.30632;
  long unsigned int D.30633;
  long unsigned int D.30634;
  void * * D.30635;
  int D.30638;
  int D.30639;
  long unsigned int D.30640;
  long unsigned int D.30641;
  void * * D.30642;
  struct MonoReflectionEvent * D.30643;
  unsigned int D.30644;
  long unsigned int D.30648;
  struct MonoClass * D.22423;
  struct MonoClass * tmp_klass.166;
  struct MonoClass * tmp_klass.167;
  _Bool D.30653;
  long int D.30654;
  long int D.30655;
  struct MonoVTable * D.30658;
  long unsigned int D.30659;
  long unsigned int D.30660;
  long unsigned int D.30661;
  void * * D.30662;
  void * D.30663;
  struct MonoLoaderError * D.30671;
  struct MonoException * ex;
  struct MonoDomain * domain;
  static struct MonoClass * System_Reflection_EventInfo;
  struct MonoClass * startklass;
  struct MonoClass * klass;
  struct MonoArray * res;
  struct MonoMethod * method;
  struct MonoEvent * event;
  int i;
  int match;
  void * iter;
  struct MonoPtrArray tmp_array;
  void handle_parent = <<< error >>>;
  void loader_error = <<< error >>>;

  try
    {
      tmp_array.size = 0;
      tmp_array.capacity = 16;
      D.30552 = __builtin_alloca (128);
      tmp_array.data = D.30552;
      System_Reflection_EventInfo.162 = System_Reflection_EventInfo;
      if (System_Reflection_EventInfo.162 == 0B) goto <D.30554>; else goto <D.30555>;
      <D.30554>:
      D.30556 = mono_defaults.corlib;
      System_Reflection_EventInfo.163 = mono_class_from_name (D.30556, "System.Reflection", "EventInfo");
      System_Reflection_EventInfo = System_Reflection_EventInfo.163;
      <D.30555>:
      D.30558 = MEM[(struct MonoObject *)type].vtable;
      domain = D.30558->domain;
      D.30559 = type->type;
      D.30560 = BIT_FIELD_REF <*D.30559, 8, 88>;
      D.30561 = D.30560 & 64;
      if (D.30561 != 0) goto <D.30562>; else goto <D.30563>;
      <D.30562>:
      {
        static struct MonoClass * tmp_klass;

        {
          tmp_klass.164 = tmp_klass;
          if (tmp_klass.164 == 0B) goto <D.30566>; else goto <D.30567>;
          <D.30566>:
          System_Reflection_EventInfo.162 = System_Reflection_EventInfo;
          tmp_klass.165 = mono_array_class_get (System_Reflection_EventInfo.162, 1);
          tmp_klass = tmp_klass.165;
          tmp_klass.164 = tmp_klass;
          D.30569 = tmp_klass.164 == 0B;
          D.30570 = (long int) D.30569;
          D.30571 = __builtin_expect (D.30570, 0);
          if (D.30571 != 0) goto <D.30572>; else goto <D.30573>;
          <D.30572>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 3914, "tmp_klass");
          <D.30573>:
          <D.30567>:
        }
        D.22415 = tmp_klass;
      }
      D.30574 = mono_class_vtable (domain, D.22415);
      D.30564 = mono_array_new_specific (D.30574, 0);
      return D.30564;
      <D.30563>:
      D.30559 = type->type;
      startklass = mono_class_from_mono_type (D.30559);
      klass = startklass;
      handle_parent:
      mono_class_setup_vtable (klass);
      D.30575 = klass->exception_type;
      if (D.30575 != 0) goto loader_error; else goto <D.30576>;
      <D.30576>:
      D.30577 = mono_loader_get_last_error ();
      if (D.30577 != 0B) goto loader_error; else goto <D.30578>;
      <D.30578>:
      iter = 0B;
      goto <D.22418>;
      <D.22420>:
      match = 0;
      method = event->add;
      if (method == 0B) goto <D.30579>; else goto <D.30580>;
      <D.30579>:
      method = event->remove;
      <D.30580>:
      if (method == 0B) goto <D.30581>; else goto <D.30582>;
      <D.30581>:
      method = event->raise;
      <D.30582>:
      if (method != 0B) goto <D.30583>; else goto <D.30584>;
      <D.30583>:
      D.30585 = method->flags;
      D.30586 = (int) D.30585;
      D.30587 = D.30586 & 7;
      if (D.30587 == 6) goto <D.30588>; else goto <D.30589>;
      <D.30588>:
      D.30590 = bflags & 16;
      if (D.30590 != 0) goto <D.30591>; else goto <D.30592>;
      <D.30591>:
      match = match + 1;
      <D.30592>:
      goto <D.30593>;
      <D.30589>:
      if (klass == startklass) goto <D.30594>; else goto <D.30596>;
      <D.30596>:
      D.30585 = method->flags;
      D.30586 = (int) D.30585;
      D.30587 = D.30586 & 7;
      if (D.30587 != 1) goto <D.30594>; else goto <D.30595>;
      <D.30594>:
      D.30597 = bflags & 32;
      if (D.30597 != 0) goto <D.30598>; else goto <D.30599>;
      <D.30598>:
      match = match + 1;
      <D.30599>:
      <D.30595>:
      <D.30593>:
      goto <D.30600>;
      <D.30584>:
      D.30597 = bflags & 32;
      if (D.30597 != 0) goto <D.30601>; else goto <D.30602>;
      <D.30601>:
      match = match + 1;
      <D.30602>:
      <D.30600>:
      if (match == 0) goto <D.30603>; else goto <D.30604>;
      <D.30603>:
      // predicted unlikely by continue predictor.
      goto <D.22418>;
      <D.30604>:
      match = 0;
      if (method != 0B) goto <D.30605>; else goto <D.30606>;
      <D.30605>:
      D.30585 = method->flags;
      D.30586 = (int) D.30585;
      D.30607 = D.30586 & 16;
      if (D.30607 != 0) goto <D.30608>; else goto <D.30609>;
      <D.30608>:
      D.30610 = bflags & 8;
      if (D.30610 != 0) goto <D.30611>; else goto <D.30612>;
      <D.30611>:
      D.30615 = bflags & 64;
      if (D.30615 != 0) goto <D.30613>; else goto <D.30616>;
      <D.30616>:
      if (klass == startklass) goto <D.30613>; else goto <D.30614>;
      <D.30613>:
      match = match + 1;
      <D.30614>:
      <D.30612>:
      goto <D.30617>;
      <D.30609>:
      D.30618 = bflags & 4;
      if (D.30618 != 0) goto <D.30619>; else goto <D.30620>;
      <D.30619>:
      match = match + 1;
      <D.30620>:
      <D.30617>:
      goto <D.30621>;
      <D.30606>:
      D.30618 = bflags & 4;
      if (D.30618 != 0) goto <D.30622>; else goto <D.30623>;
      <D.30622>:
      match = match + 1;
      <D.30623>:
      <D.30621>:
      if (match == 0) goto <D.30624>; else goto <D.30625>;
      <D.30624>:
      // predicted unlikely by continue predictor.
      goto <D.22418>;
      <D.30625>:
      D.30626 = tmp_array.size;
      D.30627 = tmp_array.capacity;
      if (D.30626 >= D.30627) goto <D.30628>; else goto <D.30629>;
      <D.30628>:
      {
        void * __tmp;

        D.30627 = tmp_array.capacity;
        D.30630 = D.30627 * 2;
        D.30631 = mono_gc_make_root_descr_all_refs (D.30630);
        D.30627 = tmp_array.capacity;
        D.30632 = (long unsigned int) D.30627;
        D.30633 = D.30632 * 16;
        __tmp = mono_gc_alloc_fixed (D.30633, D.30631);
        D.30627 = tmp_array.capacity;
        D.30632 = (long unsigned int) D.30627;
        D.30634 = D.30632 * 8;
        D.30635 = tmp_array.data;
        mono_gc_memmove_aligned (__tmp, D.30635, D.30634);
        D.30627 = tmp_array.capacity;
        if (D.30627 > 16) goto <D.30636>; else goto <D.30637>;
        <D.30636>:
        D.30635 = tmp_array.data;
        mono_gc_free_fixed (D.30635);
        <D.30637>:
        tmp_array.data = __tmp;
        D.30627 = tmp_array.capacity;
        D.30630 = D.30627 * 2;
        tmp_array.capacity = D.30630;
      }
      <D.30629>:
      D.30635 = tmp_array.data;
      D.30626 = tmp_array.size;
      D.30638 = D.30626;
      D.30639 = D.30638 + 1;
      tmp_array.size = D.30639;
      D.30640 = (long unsigned int) D.30638;
      D.30641 = D.30640 * 8;
      D.30642 = D.30635 + D.30641;
      D.30643 = mono_event_get_object (domain, startklass, event);
      *D.30642 = D.30643;
      <D.22418>:
      event = mono_class_get_events (klass, &iter);
      if (event != 0B) goto <D.22420>; else goto <D.22421>;
      <D.22421>:
      D.30644 = bflags & 2;
      if (D.30644 == 0) goto <D.30645>; else goto <D.30646>;
      <D.30645>:
      klass = klass->parent;
      if (klass != 0B) goto handle_parent; else goto <D.30647>;
      <D.30647>:
      <D.30646>:
      D.30626 = tmp_array.size;
      D.30648 = (long unsigned int) D.30626;
      {
        static struct MonoClass * tmp_klass;

        {
          tmp_klass.166 = tmp_klass;
          if (tmp_klass.166 == 0B) goto <D.30650>; else goto <D.30651>;
          <D.30650>:
          System_Reflection_EventInfo.162 = System_Reflection_EventInfo;
          tmp_klass.167 = mono_array_class_get (System_Reflection_EventInfo.162, 1);
          tmp_klass = tmp_klass.167;
          tmp_klass.166 = tmp_klass;
          D.30653 = tmp_klass.166 == 0B;
          D.30654 = (long int) D.30653;
          D.30655 = __builtin_expect (D.30654, 0);
          if (D.30655 != 0) goto <D.30656>; else goto <D.30657>;
          <D.30656>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 3965, "tmp_klass");
          <D.30657>:
          <D.30651>:
        }
        D.22423 = tmp_klass;
      }
      D.30658 = mono_class_vtable (domain, D.22423);
      res = mono_array_new_specific (D.30658, D.30648);
      i = 0;
      goto <D.22426>;
      <D.22425>:
      {
        void * * __p;

        D.30659 = (long unsigned int) i;
        __p = mono_array_addr_with_size (res, 8, D.30659);
        D.30635 = tmp_array.data;
        D.30660 = (long unsigned int) i;
        D.30661 = D.30660 * 8;
        D.30662 = D.30635 + D.30661;
        D.30663 = *D.30662;
        mono_gc_wbarrier_set_arrayref (res, __p, D.30663);
      }
      i = i + 1;
      <D.22426>:
      D.30626 = tmp_array.size;
      if (D.30626 > i) goto <D.22425>; else goto <D.22427>;
      <D.22427>:
      D.30627 = tmp_array.capacity;
      if (D.30627 > 16) goto <D.30664>; else goto <D.30665>;
      <D.30664>:
      D.30635 = tmp_array.data;
      mono_gc_free_fixed (D.30635);
      <D.30665>:
      D.30564 = res;
      return D.30564;
      loader_error:
      D.30627 = tmp_array.capacity;
      if (D.30627 > 16) goto <D.30666>; else goto <D.30667>;
      <D.30666>:
      D.30635 = tmp_array.data;
      mono_gc_free_fixed (D.30635);
      <D.30667>:
      D.30575 = klass->exception_type;
      if (D.30575 != 0) goto <D.30668>; else goto <D.30669>;
      <D.30668>:
      ex = mono_class_get_exception_for_failure (klass);
      goto <D.30670>;
      <D.30669>:
      D.30671 = mono_loader_get_last_error ();
      ex = mono_loader_error_prepare_exception (D.30671);
      mono_loader_clear_error ();
      <D.30670>:
      mono_raise_exception (ex);
      D.30564 = 0B;
      return D.30564;
    }
  finally
    {
      iter = {CLOBBER};
      tmp_array = {CLOBBER};
    }
}


ves_icall_MonoType_GetElementType (struct MonoReflectionType * type)
{
  struct MonoType * D.30674;
  short unsigned int D.30675;
  short unsigned int D.30676;
  struct MonoReflectionType * D.30679;
  struct MonoClass * D.30680;
  struct MonoType * D.30681;
  struct MonoVTable * D.30682;
  struct MonoDomain * D.30683;
  unsigned char D.30684;
  unsigned char D.30685;
  struct MonoType * D.30688;
  struct MonoClass * D.30690;
  unsigned char D.30692;
  struct MonoType * D.30694;
  unsigned char D.30697;
  struct MonoClass * class;

  D.30674 = type->type;
  D.30675 = BIT_FIELD_REF <*D.30674, 16, 80>;
  D.30676 = D.30675 & 16639;
  if (D.30676 == 29) goto <D.30677>; else goto <D.30678>;
  <D.30677>:
  D.30674 = type->type;
  D.30680 = D.30674->data.klass;
  D.30681 = &D.30680->byval_arg;
  D.30682 = MEM[(struct MonoObject *)type].vtable;
  D.30683 = D.30682->domain;
  D.30679 = mono_type_get_object (D.30683, D.30681);
  return D.30679;
  <D.30678>:
  D.30674 = type->type;
  class = mono_class_from_mono_type (D.30674);
  mono_class_init_or_throw (class);
  D.30674 = type->type;
  D.30684 = BIT_FIELD_REF <*D.30674, 8, 88>;
  D.30685 = D.30684 & 64;
  if (D.30685 != 0) goto <D.30686>; else goto <D.30687>;
  <D.30686>:
  D.30688 = &class->byval_arg;
  D.30682 = MEM[(struct MonoObject *)type].vtable;
  D.30683 = D.30682->domain;
  D.30679 = mono_type_get_object (D.30683, D.30688);
  return D.30679;
  <D.30687>:
  D.30690 = class->element_class;
  if (D.30690 != 0B) goto <D.30691>; else goto <D.30689>;
  <D.30691>:
  D.30692 = class->rank;
  if (D.30692 != 0) goto <D.30693>; else goto <D.30689>;
  <D.30693>:
  D.30690 = class->element_class;
  D.30694 = &D.30690->byval_arg;
  D.30682 = MEM[(struct MonoObject *)type].vtable;
  D.30683 = D.30682->domain;
  D.30679 = mono_type_get_object (D.30683, D.30694);
  return D.30679;
  <D.30689>:
  D.30690 = class->element_class;
  if (D.30690 != 0B) goto <D.30696>; else goto <D.30695>;
  <D.30696>:
  D.30674 = type->type;
  D.30697 = D.30674->type;
  if (D.30697 == 15) goto <D.30698>; else goto <D.30695>;
  <D.30698>:
  D.30690 = class->element_class;
  D.30694 = &D.30690->byval_arg;
  D.30682 = MEM[(struct MonoObject *)type].vtable;
  D.30683 = D.30682->domain;
  D.30679 = mono_type_get_object (D.30683, D.30694);
  return D.30679;
  <D.30695>:
  D.30679 = 0B;
  return D.30679;
}


ves_icall_MonoType_GetCorrespondingInflatedMethod (struct MonoReflectionType * type, struct MonoReflectionMethod * generic)
{
  struct MonoVTable * D.30700;
  struct MonoType * D.30701;
  unsigned int D.30702;
  struct MonoMethod * D.30703;
  unsigned int D.30704;
  struct MonoReflectionMethod * D.30707;
  struct MonoDomain * domain;
  struct MonoClass * klass;
  struct MonoMethod * method;
  void * iter;

  try
    {
      D.30700 = MEM[(struct MonoObject *)type].vtable;
      domain = D.30700->domain;
      D.30701 = type->type;
      klass = mono_class_from_mono_type (D.30701);
      mono_class_init_or_throw (klass);
      iter = 0B;
      goto <D.21781>;
      <D.21780>:
      D.30702 = method->token;
      D.30703 = generic->method;
      D.30704 = D.30703->token;
      if (D.30702 == D.30704) goto <D.30705>; else goto <D.30706>;
      <D.30705>:
      D.30707 = mono_method_get_object (domain, method, klass);
      return D.30707;
      <D.30706>:
      <D.21781>:
      method = mono_class_get_methods (klass, &iter);
      if (method != 0B) goto <D.21780>; else goto <D.21782>;
      <D.21782>:
      D.30707 = 0B;
      return D.30707;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


ves_icall_Type_GetConstructors_internal (struct MonoReflectionType * type, guint32 bflags, struct MonoReflectionType * reftype)
{
  void * D.30710;
  struct MonoVTable * D.30711;
  struct MonoType * D.30712;
  unsigned char D.30713;
  unsigned char D.30714;
  struct MonoArray * D.30717;
  struct MonoClass * D.22298;
  struct MonoClass * tmp_klass.168;
  struct MonoClass * D.30721;
  struct MonoClass * tmp_klass.169;
  _Bool D.30723;
  long int D.30724;
  long int D.30725;
  struct MonoVTable * D.30728;
  struct MonoType * D.30729;
  struct MonoClass * System_Reflection_ConstructorInfo.170;
  struct MonoImage * D.30733;
  struct MonoClass * System_Reflection_ConstructorInfo.171;
  int D.22307;
  int iftmp.172;
  int D.22306;
  const char[6] * D.30738;
  unsigned char D.30739;
  int D.30740;
  unsigned char D.30741;
  int D.30742;
  _Bool D.30743;
  _Bool D.30744;
  _Bool D.30745;
  const unsigned char * D.30748;
  unsigned char D.30749;
  int D.30750;
  const unsigned char * D.30751;
  unsigned char D.30752;
  int D.30753;
  _Bool D.30754;
  _Bool D.30755;
  const unsigned char * D.30758;
  unsigned char D.30759;
  int D.30760;
  const unsigned char * D.30761;
  unsigned char D.30762;
  int D.30763;
  _Bool D.30764;
  _Bool D.30765;
  const unsigned char * D.30768;
  unsigned char D.30769;
  int D.30770;
  const unsigned char * D.30771;
  unsigned char D.30772;
  int D.30773;
  const char * D.30775;
  int D.22316;
  int iftmp.173;
  int D.22315;
  const char[7] * D.30781;
  unsigned char D.30782;
  int D.30783;
  unsigned char D.30784;
  int D.30785;
  _Bool D.30786;
  _Bool D.30787;
  _Bool D.30788;
  const unsigned char * D.30791;
  unsigned char D.30792;
  int D.30793;
  const unsigned char * D.30794;
  unsigned char D.30795;
  int D.30796;
  _Bool D.30797;
  _Bool D.30798;
  const unsigned char * D.30801;
  unsigned char D.30802;
  int D.30803;
  const unsigned char * D.30804;
  unsigned char D.30805;
  int D.30806;
  _Bool D.30807;
  _Bool D.30808;
  const unsigned char * D.30811;
  unsigned char D.30812;
  int D.30813;
  const unsigned char * D.30814;
  unsigned char D.30815;
  int D.30816;
  short unsigned int D.30820;
  int D.30821;
  int D.30822;
  unsigned int D.30825;
  unsigned int D.30829;
  int D.30834;
  unsigned int D.30837;
  unsigned int D.30842;
  unsigned int D.30845;
  int D.30850;
  int D.30851;
  int D.30854;
  void * D.30855;
  long unsigned int D.30856;
  long unsigned int D.30857;
  long unsigned int D.30858;
  void * * D.30859;
  int D.30862;
  int D.30863;
  long unsigned int D.30864;
  long unsigned int D.30865;
  void * * D.30866;
  long unsigned int D.30867;
  struct MonoClass * D.22322;
  struct MonoClass * tmp_klass.174;
  struct MonoClass * tmp_klass.175;
  _Bool D.30872;
  long int D.30873;
  long int D.30874;
  struct MonoVTable * D.30877;
  long unsigned int D.30878;
  long unsigned int D.30879;
  long unsigned int D.30880;
  void * * D.30881;
  void * D.30882;
  struct MonoDomain * domain;
  static struct MonoClass * System_Reflection_ConstructorInfo;
  struct MonoClass * startklass;
  struct MonoClass * klass;
  struct MonoClass * refklass;
  struct MonoArray * res;
  struct MonoMethod * method;
  struct MonoObject * member;
  int i;
  int match;
  void * iter;
  struct MonoPtrArray tmp_array;

  try
    {
      iter = 0B;
      tmp_array.size = 0;
      tmp_array.capacity = 16;
      D.30710 = __builtin_alloca (128);
      tmp_array.data = D.30710;
      D.30711 = MEM[(struct MonoObject *)type].vtable;
      domain = D.30711->domain;
      D.30712 = type->type;
      D.30713 = BIT_FIELD_REF <*D.30712, 8, 88>;
      D.30714 = D.30713 & 64;
      if (D.30714 != 0) goto <D.30715>; else goto <D.30716>;
      <D.30715>:
      {
        static struct MonoClass * tmp_klass;

        {
          tmp_klass.168 = tmp_klass;
          if (tmp_klass.168 == 0B) goto <D.30719>; else goto <D.30720>;
          <D.30719>:
          D.30721 = mono_defaults.method_info_class;
          tmp_klass.169 = mono_array_class_get (D.30721, 1);
          tmp_klass = tmp_klass.169;
          tmp_klass.168 = tmp_klass;
          D.30723 = tmp_klass.168 == 0B;
          D.30724 = (long int) D.30723;
          D.30725 = __builtin_expect (D.30724, 0);
          if (D.30725 != 0) goto <D.30726>; else goto <D.30727>;
          <D.30726>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 3617, "tmp_klass");
          <D.30727>:
          <D.30720>:
        }
        D.22298 = tmp_klass;
      }
      D.30728 = mono_class_vtable (domain, D.22298);
      D.30717 = mono_array_new_specific (D.30728, 0);
      return D.30717;
      <D.30716>:
      D.30712 = type->type;
      startklass = mono_class_from_mono_type (D.30712);
      klass = startklass;
      D.30729 = reftype->type;
      refklass = mono_class_from_mono_type (D.30729);
      System_Reflection_ConstructorInfo.170 = System_Reflection_ConstructorInfo;
      if (System_Reflection_ConstructorInfo.170 == 0B) goto <D.30731>; else goto <D.30732>;
      <D.30731>:
      D.30733 = mono_defaults.corlib;
      System_Reflection_ConstructorInfo.171 = mono_class_from_name (D.30733, "System.Reflection", "ConstructorInfo");
      System_Reflection_ConstructorInfo = System_Reflection_ConstructorInfo.171;
      <D.30732>:
      iter = 0B;
      goto <D.22317>;
      <D.22319>:
      match = 0;
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = method->name;
          D.30738 = ".ctor";
          D.30739 = MEM[(const unsigned char *)D.30738];
          D.30740 = (int) D.30739;
          D.30741 = *__s2;
          D.30742 = (int) D.30741;
          __result = D.30740 - D.30742;
          {
            D.30743 = __s2_len != 0;
            D.30744 = __result == 0;
            D.30745 = D.30743 & D.30744;
            if (D.30745 != 0) goto <D.30746>; else goto <D.30747>;
            <D.30746>:
            D.30748 = &MEM[(void *)".ctor" + 1B];
            D.30749 = *D.30748;
            D.30750 = (int) D.30749;
            D.30751 = __s2 + 1;
            D.30752 = *D.30751;
            D.30753 = (int) D.30752;
            __result = D.30750 - D.30753;
            D.30754 = __s2_len > 1;
            D.30744 = __result == 0;
            D.30755 = D.30754 & D.30744;
            if (D.30755 != 0) goto <D.30756>; else goto <D.30757>;
            <D.30756>:
            D.30758 = &MEM[(void *)".ctor" + 2B];
            D.30759 = *D.30758;
            D.30760 = (int) D.30759;
            D.30761 = __s2 + 2;
            D.30762 = *D.30761;
            D.30763 = (int) D.30762;
            __result = D.30760 - D.30763;
            D.30764 = __s2_len > 2;
            D.30744 = __result == 0;
            D.30765 = D.30764 & D.30744;
            if (D.30765 != 0) goto <D.30766>; else goto <D.30767>;
            <D.30766>:
            D.30768 = &MEM[(void *)".ctor" + 3B];
            D.30769 = *D.30768;
            D.30770 = (int) D.30769;
            D.30771 = __s2 + 3;
            D.30772 = *D.30771;
            D.30773 = (int) D.30772;
            __result = D.30770 - D.30773;
            <D.30767>:
            <D.30757>:
            <D.30747>:
          }
          D.22306 = __result;
        }
        iftmp.172 = -D.22306;
        goto <D.30774>;
        <D.30737>:
        D.30775 = method->name;
        iftmp.172 = __builtin_strcmp (D.30775, ".ctor");
        <D.30774>:
        D.22307 = iftmp.172;
      }
      if (D.22307 != 0) goto <D.30776>; else goto <D.30777>;
      <D.30776>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = method->name;
          D.30781 = ".cctor";
          D.30782 = MEM[(const unsigned char *)D.30781];
          D.30783 = (int) D.30782;
          D.30784 = *__s2;
          D.30785 = (int) D.30784;
          __result = D.30783 - D.30785;
          {
            D.30786 = __s2_len != 0;
            D.30787 = __result == 0;
            D.30788 = D.30786 & D.30787;
            if (D.30788 != 0) goto <D.30789>; else goto <D.30790>;
            <D.30789>:
            D.30791 = &MEM[(void *)".cctor" + 1B];
            D.30792 = *D.30791;
            D.30793 = (int) D.30792;
            D.30794 = __s2 + 1;
            D.30795 = *D.30794;
            D.30796 = (int) D.30795;
            __result = D.30793 - D.30796;
            D.30797 = __s2_len > 1;
            D.30787 = __result == 0;
            D.30798 = D.30797 & D.30787;
            if (D.30798 != 0) goto <D.30799>; else goto <D.30800>;
            <D.30799>:
            D.30801 = &MEM[(void *)".cctor" + 2B];
            D.30802 = *D.30801;
            D.30803 = (int) D.30802;
            D.30804 = __s2 + 2;
            D.30805 = *D.30804;
            D.30806 = (int) D.30805;
            __result = D.30803 - D.30806;
            D.30807 = __s2_len > 2;
            D.30787 = __result == 0;
            D.30808 = D.30807 & D.30787;
            if (D.30808 != 0) goto <D.30809>; else goto <D.30810>;
            <D.30809>:
            D.30811 = &MEM[(void *)".cctor" + 3B];
            D.30812 = *D.30811;
            D.30813 = (int) D.30812;
            D.30814 = __s2 + 3;
            D.30815 = *D.30814;
            D.30816 = (int) D.30815;
            __result = D.30813 - D.30816;
            <D.30810>:
            <D.30800>:
            <D.30790>:
          }
          D.22315 = __result;
        }
        iftmp.173 = -D.22315;
        goto <D.30817>;
        <D.30780>:
        D.30775 = method->name;
        iftmp.173 = __builtin_strcmp (D.30775, ".cctor");
        <D.30817>:
        D.22316 = iftmp.173;
      }
      if (D.22316 != 0) goto <D.30818>; else goto <D.30819>;
      <D.30818>:
      // predicted unlikely by continue predictor.
      goto <D.22317>;
      <D.30819>:
      <D.30777>:
      D.30820 = method->flags;
      D.30821 = (int) D.30820;
      D.30822 = D.30821 & 7;
      if (D.30822 == 6) goto <D.30823>; else goto <D.30824>;
      <D.30823>:
      D.30825 = bflags & 16;
      if (D.30825 != 0) goto <D.30826>; else goto <D.30827>;
      <D.30826>:
      match = match + 1;
      <D.30827>:
      goto <D.30828>;
      <D.30824>:
      D.30829 = bflags & 32;
      if (D.30829 != 0) goto <D.30830>; else goto <D.30831>;
      <D.30830>:
      match = match + 1;
      <D.30831>:
      <D.30828>:
      if (match == 0) goto <D.30832>; else goto <D.30833>;
      <D.30832>:
      // predicted unlikely by continue predictor.
      goto <D.22317>;
      <D.30833>:
      match = 0;
      D.30820 = method->flags;
      D.30821 = (int) D.30820;
      D.30834 = D.30821 & 16;
      if (D.30834 != 0) goto <D.30835>; else goto <D.30836>;
      <D.30835>:
      D.30837 = bflags & 8;
      if (D.30837 != 0) goto <D.30838>; else goto <D.30839>;
      <D.30838>:
      D.30842 = bflags & 64;
      if (D.30842 != 0) goto <D.30840>; else goto <D.30843>;
      <D.30843>:
      if (klass == startklass) goto <D.30840>; else goto <D.30841>;
      <D.30840>:
      match = match + 1;
      <D.30841>:
      <D.30839>:
      goto <D.30844>;
      <D.30836>:
      D.30845 = bflags & 4;
      if (D.30845 != 0) goto <D.30846>; else goto <D.30847>;
      <D.30846>:
      match = match + 1;
      <D.30847>:
      <D.30844>:
      if (match == 0) goto <D.30848>; else goto <D.30849>;
      <D.30848>:
      // predicted unlikely by continue predictor.
      goto <D.22317>;
      <D.30849>:
      member = mono_method_get_object (domain, method, refklass);
      D.30850 = tmp_array.size;
      D.30851 = tmp_array.capacity;
      if (D.30850 >= D.30851) goto <D.30852>; else goto <D.30853>;
      <D.30852>:
      {
        void * __tmp;

        D.30851 = tmp_array.capacity;
        D.30854 = D.30851 * 2;
        D.30855 = mono_gc_make_root_descr_all_refs (D.30854);
        D.30851 = tmp_array.capacity;
        D.30856 = (long unsigned int) D.30851;
        D.30857 = D.30856 * 16;
        __tmp = mono_gc_alloc_fixed (D.30857, D.30855);
        D.30851 = tmp_array.capacity;
        D.30856 = (long unsigned int) D.30851;
        D.30858 = D.30856 * 8;
        D.30859 = tmp_array.data;
        mono_gc_memmove_aligned (__tmp, D.30859, D.30858);
        D.30851 = tmp_array.capacity;
        if (D.30851 > 16) goto <D.30860>; else goto <D.30861>;
        <D.30860>:
        D.30859 = tmp_array.data;
        mono_gc_free_fixed (D.30859);
        <D.30861>:
        tmp_array.data = __tmp;
        D.30851 = tmp_array.capacity;
        D.30854 = D.30851 * 2;
        tmp_array.capacity = D.30854;
      }
      <D.30853>:
      D.30859 = tmp_array.data;
      D.30850 = tmp_array.size;
      D.30862 = D.30850;
      D.30863 = D.30862 + 1;
      tmp_array.size = D.30863;
      D.30864 = (long unsigned int) D.30862;
      D.30865 = D.30864 * 8;
      D.30866 = D.30859 + D.30865;
      *D.30866 = member;
      <D.22317>:
      method = mono_class_get_methods (klass, &iter);
      if (method != 0B) goto <D.22319>; else goto <D.22320>;
      <D.22320>:
      D.30850 = tmp_array.size;
      D.30867 = (long unsigned int) D.30850;
      {
        static struct MonoClass * tmp_klass;

        {
          tmp_klass.174 = tmp_klass;
          if (tmp_klass.174 == 0B) goto <D.30869>; else goto <D.30870>;
          <D.30869>:
          System_Reflection_ConstructorInfo.170 = System_Reflection_ConstructorInfo;
          tmp_klass.175 = mono_array_class_get (System_Reflection_ConstructorInfo.170, 1);
          tmp_klass = tmp_klass.175;
          tmp_klass.174 = tmp_klass;
          D.30872 = tmp_klass.174 == 0B;
          D.30873 = (long int) D.30872;
          D.30874 = __builtin_expect (D.30873, 0);
          if (D.30874 != 0) goto <D.30875>; else goto <D.30876>;
          <D.30875>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 3656, "tmp_klass");
          <D.30876>:
          <D.30870>:
        }
        D.22322 = tmp_klass;
      }
      D.30877 = mono_class_vtable (domain, D.22322);
      res = mono_array_new_specific (D.30877, D.30867);
      i = 0;
      goto <D.22325>;
      <D.22324>:
      {
        void * * __p;

        D.30878 = (long unsigned int) i;
        __p = mono_array_addr_with_size (res, 8, D.30878);
        D.30859 = tmp_array.data;
        D.30879 = (long unsigned int) i;
        D.30880 = D.30879 * 8;
        D.30881 = D.30859 + D.30880;
        D.30882 = *D.30881;
        mono_gc_wbarrier_set_arrayref (res, __p, D.30882);
      }
      i = i + 1;
      <D.22325>:
      D.30850 = tmp_array.size;
      if (D.30850 > i) goto <D.22324>; else goto <D.22326>;
      <D.22326>:
      D.30851 = tmp_array.capacity;
      if (D.30851 > 16) goto <D.30883>; else goto <D.30884>;
      <D.30883>:
      D.30859 = tmp_array.data;
      mono_gc_free_fixed (D.30859);
      <D.30884>:
      D.30717 = res;
      return D.30717;
    }
  finally
    {
      iter = {CLOBBER};
      tmp_array = {CLOBBER};
    }
}


ves_icall_MonoType_GetArrayRank (struct MonoReflectionType * type)
{
  struct MonoType * D.30887;
  unsigned char D.30888;
  _Bool D.30889;
  _Bool D.30890;
  _Bool D.30891;
  struct MonoException * D.30894;
  gint32 D.30895;
  unsigned char D.30896;
  struct MonoClass * class;

  D.30887 = type->type;
  D.30888 = D.30887->type;
  D.30889 = D.30888 != 20;
  D.30890 = D.30888 != 29;
  D.30891 = D.30889 & D.30890;
  if (D.30891 != 0) goto <D.30892>; else goto <D.30893>;
  <D.30892>:
  D.30894 = mono_get_exception_argument ("type", "Type must be an array type");
  mono_raise_exception (D.30894);
  <D.30893>:
  D.30887 = type->type;
  class = mono_class_from_mono_type (D.30887);
  D.30896 = class->rank;
  D.30895 = (gint32) D.30896;
  return D.30895;
}


ves_icall_get_enum_info (struct MonoReflectionType * type, struct MonoEnumInfo * info)
{
  struct MonoVTable * D.30898;
  struct MonoType * D.30899;
  struct MonoType * D.30900;
  struct MonoReflectionType * D.30901;
  struct MonoReflectionType * * D.30902;
  guint iftmp.176;
  int D.30904;
  int D.30907;
  int D.30908;
  long unsigned int D.30910;
  struct MonoClass * D.30911;
  struct MonoArray * D.30912;
  struct MonoArray * * D.30913;
  struct MonoArray * D.30914;
  struct MonoArray * * D.30915;
  struct MonoType * D.30916;
  short unsigned int D.30917;
  int D.30918;
  int D.30919;
  int D.22085;
  int iftmp.177;
  int D.22081;
  const char[8] * D.30925;
  unsigned char D.30926;
  int D.30927;
  unsigned char D.30928;
  int D.30929;
  _Bool D.30930;
  _Bool D.30931;
  _Bool D.30932;
  const unsigned char * D.30935;
  unsigned char D.30936;
  int D.30937;
  const unsigned char * D.30938;
  unsigned char D.30939;
  int D.30940;
  _Bool D.30941;
  _Bool D.30942;
  const unsigned char * D.30945;
  unsigned char D.30946;
  int D.30947;
  const unsigned char * D.30948;
  unsigned char D.30949;
  int D.30950;
  _Bool D.30951;
  _Bool D.30952;
  const unsigned char * D.30955;
  unsigned char D.30956;
  int D.30957;
  const unsigned char * D.30958;
  unsigned char D.30959;
  int D.30960;
  const char * D.30962;
  int D.30965;
  int D.22094;
  int iftmp.178;
  int D.22093;
  const char[9] * D.30971;
  unsigned char D.30972;
  int D.30973;
  unsigned char D.30974;
  int D.30975;
  _Bool D.30976;
  _Bool D.30977;
  _Bool D.30978;
  const unsigned char * D.30981;
  unsigned char D.30982;
  int D.30983;
  const unsigned char * D.30984;
  unsigned char D.30985;
  int D.30986;
  _Bool D.30987;
  _Bool D.30988;
  const unsigned char * D.30991;
  unsigned char D.30992;
  int D.30993;
  const unsigned char * D.30994;
  unsigned char D.30995;
  int D.30996;
  _Bool D.30997;
  _Bool D.30998;
  const unsigned char * D.31001;
  unsigned char D.31002;
  int D.31003;
  const unsigned char * D.31004;
  unsigned char D.31005;
  int D.31006;
  const char * D.31008;
  long unsigned int D.31011;
  struct MonoArray * D.31012;
  const char * D.31013;
  struct MonoString * D.31014;
  const char * p.179;
  const char * p.180;
  unsigned int D.31017;
  struct MonoType * D.31018;
  unsigned char D.31019;
  int D.31020;
  struct MonoArray * D.31021;
  char D.31022;
  short unsigned int D.31023;
  short int D.31024;
  unsigned int D.31025;
  int D.31026;
  long unsigned int D.31027;
  long int D.31028;
  struct MonoType * D.31029;
  unsigned char D.31030;
  int D.31031;
  struct MonoDomain * domain;
  struct MonoClass * enumc;
  guint j;
  guint nvalues;
  guint crow;
  void * iter;
  struct MonoClassField * field;

  try
    {
      D.30898 = MEM[(struct MonoObject *)type].vtable;
      domain = D.30898->domain;
      D.30899 = type->type;
      enumc = mono_class_from_mono_type (D.30899);
      j = 0;
      mono_class_init_or_throw (enumc);
      D.30900 = mono_class_enum_basetype (enumc);
      D.30901 = mono_type_get_object (domain, D.30900);
      D.30902 = &info->utype;
      mono_gc_wbarrier_generic_store (D.30902, D.30901);
      D.30904 = mono_class_num_fields (enumc);
      if (D.30904 != 0) goto <D.30905>; else goto <D.30906>;
      <D.30905>:
      D.30907 = mono_class_num_fields (enumc);
      D.30908 = D.30907 + -1;
      iftmp.176 = (guint) D.30908;
      goto <D.30909>;
      <D.30906>:
      iftmp.176 = 0;
      <D.30909>:
      nvalues = iftmp.176;
      D.30910 = (long unsigned int) nvalues;
      D.30911 = mono_defaults.string_class;
      D.30912 = mono_array_new (domain, D.30911, D.30910);
      D.30913 = &info->names;
      mono_gc_wbarrier_generic_store (D.30913, D.30912);
      D.30910 = (long unsigned int) nvalues;
      D.30914 = mono_array_new (domain, enumc, D.30910);
      D.30915 = &info->values;
      mono_gc_wbarrier_generic_store (D.30915, D.30914);
      crow = 4294967295;
      iter = 0B;
      goto <D.22076>;
      <D.22112>:
      {
        const char * p;
        int len;
        MonoTypeEnum def_type;

        try
          {
            D.30916 = field->type;
            D.30917 = D.30916->attrs;
            D.30918 = (int) D.30917;
            D.30919 = D.30918 & 16;
            if (D.30919 == 0) goto <D.30920>; else goto <D.30921>;
            <D.30920>:
            // predicted unlikely by continue predictor.
            goto <D.22076>;
            <D.30921>:
            {
              size_t __s1_len;
              size_t __s2_len;

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

                __s2 = mono_field_get_name (field);
                D.30925 = "value__";
                D.30926 = MEM[(const unsigned char *)D.30925];
                D.30927 = (int) D.30926;
                D.30928 = *__s2;
                D.30929 = (int) D.30928;
                __result = D.30927 - D.30929;
                {
                  D.30930 = __s1_len != 0;
                  D.30931 = __result == 0;
                  D.30932 = D.30930 & D.30931;
                  if (D.30932 != 0) goto <D.30933>; else goto <D.30934>;
                  <D.30933>:
                  D.30935 = &MEM[(void *)"value__" + 1B];
                  D.30936 = *D.30935;
                  D.30937 = (int) D.30936;
                  D.30938 = __s2 + 1;
                  D.30939 = *D.30938;
                  D.30940 = (int) D.30939;
                  __result = D.30937 - D.30940;
                  D.30941 = __s1_len > 1;
                  D.30931 = __result == 0;
                  D.30942 = D.30941 & D.30931;
                  if (D.30942 != 0) goto <D.30943>; else goto <D.30944>;
                  <D.30943>:
                  D.30945 = &MEM[(void *)"value__" + 2B];
                  D.30946 = *D.30945;
                  D.30947 = (int) D.30946;
                  D.30948 = __s2 + 2;
                  D.30949 = *D.30948;
                  D.30950 = (int) D.30949;
                  __result = D.30947 - D.30950;
                  D.30951 = __s1_len > 2;
                  D.30931 = __result == 0;
                  D.30952 = D.30951 & D.30931;
                  if (D.30952 != 0) goto <D.30953>; else goto <D.30954>;
                  <D.30953>:
                  D.30955 = &MEM[(void *)"value__" + 3B];
                  D.30956 = *D.30955;
                  D.30957 = (int) D.30956;
                  D.30958 = __s2 + 3;
                  D.30959 = *D.30958;
                  D.30960 = (int) D.30959;
                  __result = D.30957 - D.30960;
                  <D.30954>:
                  <D.30944>:
                  <D.30934>:
                }
                D.22081 = __result;
              }
              iftmp.177 = D.22081;
              goto <D.30961>;
              <D.30924>:
              D.30962 = mono_field_get_name (field);
              iftmp.177 = __builtin_strcmp ("value__", D.30962);
              <D.30961>:
              D.22085 = iftmp.177;
            }
            if (D.22085 == 0) goto <D.30963>; else goto <D.30964>;
            <D.30963>:
            // predicted unlikely by continue predictor.
            goto <D.22076>;
            <D.30964>:
            D.30916 = field->type;
            D.30917 = D.30916->attrs;
            D.30918 = (int) D.30917;
            D.30965 = D.30918 & 1536;
            if (D.30965 != 0) goto <D.30966>; else goto <D.30967>;
            <D.30966>:
            {
              size_t __s1_len;
              size_t __s2_len;

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

                __s2 = mono_field_get_name (field);
                D.30971 = "_Deleted";
                D.30972 = MEM[(const unsigned char *)D.30971];
                D.30973 = (int) D.30972;
                D.30974 = *__s2;
                D.30975 = (int) D.30974;
                __result = D.30973 - D.30975;
                {
                  D.30976 = __s2_len != 0;
                  D.30977 = __result == 0;
                  D.30978 = D.30976 & D.30977;
                  if (D.30978 != 0) goto <D.30979>; else goto <D.30980>;
                  <D.30979>:
                  D.30981 = &MEM[(void *)"_Deleted" + 1B];
                  D.30982 = *D.30981;
                  D.30983 = (int) D.30982;
                  D.30984 = __s2 + 1;
                  D.30985 = *D.30984;
                  D.30986 = (int) D.30985;
                  __result = D.30983 - D.30986;
                  D.30987 = __s2_len > 1;
                  D.30977 = __result == 0;
                  D.30988 = D.30987 & D.30977;
                  if (D.30988 != 0) goto <D.30989>; else goto <D.30990>;
                  <D.30989>:
                  D.30991 = &MEM[(void *)"_Deleted" + 2B];
                  D.30992 = *D.30991;
                  D.30993 = (int) D.30992;
                  D.30994 = __s2 + 2;
                  D.30995 = *D.30994;
                  D.30996 = (int) D.30995;
                  __result = D.30993 - D.30996;
                  D.30997 = __s2_len > 2;
                  D.30977 = __result == 0;
                  D.30998 = D.30997 & D.30977;
                  if (D.30998 != 0) goto <D.30999>; else goto <D.31000>;
                  <D.30999>:
                  D.31001 = &MEM[(void *)"_Deleted" + 3B];
                  D.31002 = *D.31001;
                  D.31003 = (int) D.31002;
                  D.31004 = __s2 + 3;
                  D.31005 = *D.31004;
                  D.31006 = (int) D.31005;
                  __result = D.31003 - D.31006;
                  <D.31000>:
                  <D.30990>:
                  <D.30980>:
                }
                D.22093 = __result;
              }
              iftmp.178 = -D.22093;
              goto <D.31007>;
              <D.30970>:
              D.31008 = mono_field_get_name (field);
              iftmp.178 = __builtin_strcmp (D.31008, "_Deleted");
              <D.31007>:
              D.22094 = iftmp.178;
            }
            if (D.22094 == 0) goto <D.31009>; else goto <D.31010>;
            <D.31009>:
            // predicted unlikely by continue predictor.
            goto <D.22076>;
            <D.31010>:
            <D.30967>:
            {
              void * * __p;

              D.31011 = (long unsigned int) j;
              D.31012 = info->names;
              __p = mono_array_addr_with_size (D.31012, 8, D.31011);
              D.31013 = mono_field_get_name (field);
              D.31014 = mono_string_new (domain, D.31013);
              D.31012 = info->names;
              mono_gc_wbarrier_set_arrayref (D.31012, __p, D.31014);
            }
            p.179 = mono_class_get_field_default_value (field, &def_type);
            p = p.179;
            p.180 = p;
            D.31017 = mono_metadata_decode_blob_size (p.180, &p);
            len = (int) D.31017;
            D.31018 = mono_class_enum_basetype (enumc);
            D.31019 = D.31018->type;
            D.31020 = (int) D.31019;
            switch (D.31020) <default: <D.22110>, case 3: <D.22100>, case 4: <D.22097>, case 5: <D.22096>, case 6: <D.22102>, case 7: <D.22101>, case 8: <D.22105>, case 9: <D.22104>, case 10: <D.22108>, case 11: <D.22107>>
            <D.22096>:
            <D.22097>:
            {
              gchar * __p;

              D.31011 = (long unsigned int) j;
              D.31021 = info->values;
              __p = mono_array_addr_with_size (D.31021, 1, D.31011);
              p.180 = p;
              D.31022 = *p.180;
              *__p = D.31022;
            }
            goto <D.22099>;
            <D.22100>:
            <D.22101>:
            <D.22102>:
            {
              gint16 * __p;

              D.31011 = (long unsigned int) j;
              D.31021 = info->values;
              __p = mono_array_addr_with_size (D.31021, 2, D.31011);
              p.180 = p;
              D.31023 = MEM[(const guint16 *)p.180];
              D.31024 = (short int) D.31023;
              *__p = D.31024;
            }
            goto <D.22099>;
            <D.22104>:
            <D.22105>:
            {
              gint32 * __p;

              D.31011 = (long unsigned int) j;
              D.31021 = info->values;
              __p = mono_array_addr_with_size (D.31021, 4, D.31011);
              p.180 = p;
              D.31025 = MEM[(const guint32 *)p.180];
              D.31026 = (int) D.31025;
              *__p = D.31026;
            }
            goto <D.22099>;
            <D.22107>:
            <D.22108>:
            {
              gint64 * __p;

              D.31011 = (long unsigned int) j;
              D.31021 = info->values;
              __p = mono_array_addr_with_size (D.31021, 8, D.31011);
              p.180 = p;
              D.31027 = MEM[(const guint64 *)p.180];
              D.31028 = (long int) D.31027;
              *__p = D.31028;
            }
            goto <D.22099>;
            <D.22110>:
            D.31029 = mono_class_enum_basetype (enumc);
            D.31030 = D.31029->type;
            D.31031 = (int) D.31030;
            monoeg_g_log (0B, 4, "Implement type 0x%02x in get_enum_info", D.31031);
            <D.22111>:
            goto <D.22111>;
            <D.22099>:
            j = j + 1;
          }
        finally
          {
            p = {CLOBBER};
            def_type = {CLOBBER};
          }
      }
      <D.22076>:
      field = mono_class_get_fields (enumc, &iter);
      if (field != 0B) goto <D.22112>; else goto <D.22113>;
      <D.22113>:
    }
  finally
    {
      iter = {CLOBBER};
    }
}


custom_attrs_defined_internal (struct MonoObject * obj, struct MonoReflectionType * attr_type)
{
  struct MonoType * D.31034;
  MonoBoolean D.31037;
  int D.31038;
  struct MonoClass * attr_class;
  struct MonoCustomAttrInfo * cinfo;
  gboolean found;

  D.31034 = attr_type->type;
  attr_class = mono_class_from_mono_type (D.31034);
  mono_class_init_or_throw (attr_class);
  cinfo = mono_reflection_get_custom_attrs_info (obj);
  if (cinfo == 0B) goto <D.31035>; else goto <D.31036>;
  <D.31035>:
  D.31037 = 0;
  return D.31037;
  <D.31036>:
  found = mono_custom_attrs_has_attr (cinfo, attr_class);
  D.31038 = cinfo->cached;
  if (D.31038 == 0) goto <D.31039>; else goto <D.31040>;
  <D.31039>:
  mono_custom_attrs_free (cinfo);
  <D.31040>:
  D.31037 = (MonoBoolean) found;
  return D.31037;
}


custom_attrs_get_by_type (struct MonoObject * obj, struct MonoReflectionType * attr_type)
{
  struct MonoClass * iftmp.181;
  struct MonoType * D.31045;
  int D.31049;
  struct MonoLoaderError * D.31052;
  struct MonoLoaderError * D.31055;
  struct MonoException * D.31056;
  struct MonoArray * D.31057;
  struct MonoClass * attr_class;
  struct MonoArray * res;
  struct MonoError error;

  try
    {
      if (attr_type != 0B) goto <D.31043>; else goto <D.31044>;
      <D.31043>:
      D.31045 = attr_type->type;
      iftmp.181 = mono_class_from_mono_type (D.31045);
      goto <D.31046>;
      <D.31044>:
      iftmp.181 = 0B;
      <D.31046>:
      attr_class = iftmp.181;
      if (attr_class != 0B) goto <D.31047>; else goto <D.31048>;
      <D.31047>:
      mono_class_init_or_throw (attr_class);
      <D.31048>:
      res = mono_reflection_get_custom_attrs_by_type (obj, attr_class, &error);
      D.31049 = mono_error_ok (&error);
      if (D.31049 == 0) goto <D.31050>; else goto <D.31051>;
      <D.31050>:
      mono_error_raise_exception (&error);
      <D.31051>:
      D.31052 = mono_loader_get_last_error ();
      if (D.31052 != 0B) goto <D.31053>; else goto <D.31054>;
      <D.31053>:
      D.31055 = mono_loader_get_last_error ();
      D.31056 = mono_loader_error_prepare_exception (D.31055);
      mono_raise_exception (D.31056);
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "icall.c", 7569);
      D.31057 = 0B;
      return D.31057;
      <D.31054>:
      D.31057 = res;
      return D.31057;
    }
  finally
    {
      error = {CLOBBER};
    }
}


ves_icall_System_IO_get_temp_path ()
{
  struct MonoString * D.31060;
  const gchar * D.31061;
  struct MonoDomain * D.31062;

  D.31061 = monoeg_g_get_tmp_dir ();
  D.31062 = mono_domain_get ();
  D.31060 = mono_string_new (D.31062, D.31061);
  return D.31060;
}


ves_icall_System_IO_DriveInfo_GetDriveType (struct MonoString * root_path_name)
{
  guint32 D.31064;
  mono_unichar2 * D.31065;

  D.31065 = mono_string_chars (root_path_name);
  D.31064 = GetDriveType (D.31065);
  return D.31064;
}


ves_icall_System_IO_DriveInfo_GetDriveFormat (struct MonoString * path)
{
  mono_unichar2 * D.31067;
  int D.31068;
  struct MonoString * D.31071;
  gunichar2 volume_name[261];

  try
    {
      D.31067 = mono_string_chars (path);
      D.31068 = GetVolumeInformation (D.31067, 0B, 0, 0B, 0B, 0B, &volume_name, 261);
      if (D.31068 == 0) goto <D.31069>; else goto <D.31070>;
      <D.31069>:
      D.31071 = 0B;
      return D.31071;
      <D.31070>:
      D.31071 = mono_string_from_utf16 (&volume_name);
      return D.31071;
    }
  finally
    {
      volume_name = {CLOBBER};
    }
}


ves_icall_System_IO_DriveInfo_GetDiskFreeSpace (struct MonoString * path_name, guint64 * free_bytes_avail, guint64 * total_number_of_bytes, guint64 * total_number_of_free_bytes, gint32 * error)
{
  mono_unichar2 * D.31074;
  long unsigned int D.31077;
  long unsigned int D.31078;
  long unsigned int D.31079;
  unsigned int D.31081;
  int D.31082;
  MonoBoolean D.31083;
  gboolean result;
  union ULARGE_INTEGER wapi_free_bytes_avail;
  union ULARGE_INTEGER wapi_total_number_of_bytes;
  union ULARGE_INTEGER wapi_total_number_of_free_bytes;

  try
    {
      *error = 0;
      D.31074 = mono_string_chars (path_name);
      result = GetDiskFreeSpaceEx (D.31074, &wapi_free_bytes_avail, &wapi_total_number_of_bytes, &wapi_total_number_of_free_bytes);
      if (result != 0) goto <D.31075>; else goto <D.31076>;
      <D.31075>:
      D.31077 = wapi_free_bytes_avail.QuadPart;
      *free_bytes_avail = D.31077;
      D.31078 = wapi_total_number_of_bytes.QuadPart;
      *total_number_of_bytes = D.31078;
      D.31079 = wapi_total_number_of_free_bytes.QuadPart;
      *total_number_of_free_bytes = D.31079;
      goto <D.31080>;
      <D.31076>:
      *free_bytes_avail = 0;
      *total_number_of_bytes = 0;
      *total_number_of_free_bytes = 0;
      D.31081 = GetLastError ();
      D.31082 = (int) D.31081;
      *error = D.31082;
      <D.31080>:
      D.31083 = (MonoBoolean) result;
      return D.31083;
    }
  finally
    {
      wapi_free_bytes_avail = {CLOBBER};
      wapi_total_number_of_bytes = {CLOBBER};
      wapi_total_number_of_free_bytes = {CLOBBER};
    }
}


ves_icall_System_Environment_InternalGetHome ()
{
  struct MonoString * D.31086;
  const gchar * D.31087;
  struct MonoDomain * D.31088;

  D.31087 = monoeg_g_get_home_dir ();
  D.31088 = mono_domain_get ();
  D.31086 = mono_string_new (D.31088, D.31087);
  return D.31086;
}


ves_icall_System_Environment_GetGacPath ()
{
  struct MonoString * D.31090;
  const char * D.31091;
  struct MonoDomain * D.31092;

  D.31091 = mono_assembly_getrootdir ();
  D.31092 = mono_domain_get ();
  D.31090 = mono_string_new (D.31092, D.31091);
  return D.31090;
}


ves_icall_System_Environment_GetEnvironmentVariable (struct MonoString * name)
{
  struct MonoString * D.31096;
  struct MonoDomain * D.31099;
  const gchar * value;
  gchar * utf8_name;

  if (name == 0B) goto <D.31094>; else goto <D.31095>;
  <D.31094>:
  D.31096 = 0B;
  return D.31096;
  <D.31095>:
  utf8_name = mono_string_to_utf8 (name);
  value = monoeg_g_getenv (utf8_name);
  monoeg_g_free (utf8_name);
  if (value == 0B) goto <D.31097>; else goto <D.31098>;
  <D.31097>:
  D.31096 = 0B;
  return D.31096;
  <D.31098>:
  D.31099 = mono_domain_get ();
  D.31096 = mono_string_new (D.31099, value);
  return D.31096;
}


ves_icall_System_Environment_BroadcastSettingChange ()
{

}


ves_icall_System_Environment_get_Platform ()
{
  int D.31101;

  D.31101 = 4;
  return D.31101;
}


ves_icall_System_Environment_get_MachineName ()
{
  int D.31103;
  struct MonoDomain * D.31106;
  struct MonoString * D.31108;
  gchar buf[256];
  struct MonoString * result;

  try
    {
      D.31103 = gethostname (&buf, 256);
      if (D.31103 == 0) goto <D.31104>; else goto <D.31105>;
      <D.31104>:
      D.31106 = mono_domain_get ();
      result = mono_string_new (D.31106, &buf);
      goto <D.31107>;
      <D.31105>:
      result = 0B;
      <D.31107>:
      D.31108 = result;
      return D.31108;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


gethostname (char * __buf, size_t __buflen)
{
  long unsigned int D.31111;
  int D.31114;
  int D.31117;
  long unsigned int D.31118;
  long unsigned int D.31119;
  long unsigned int D.31122;

  D.31111 = __builtin_object_size (__buf, 1);
  if (D.31111 != 18446744073709551615) goto <D.31112>; else goto <D.31113>;
  <D.31112>:
  D.31114 = __builtin_constant_p (__buflen);
  if (D.31114 == 0) goto <D.31115>; else goto <D.31116>;
  <D.31115>:
  D.31118 = __builtin_object_size (__buf, 1);
  D.31117 = __gethostname_chk (__buf, __buflen, D.31118);
  return D.31117;
  <D.31116>:
  D.31119 = __builtin_object_size (__buf, 1);
  if (D.31119 < __buflen) goto <D.31120>; else goto <D.31121>;
  <D.31120>:
  D.31122 = __builtin_object_size (__buf, 1);
  D.31117 = __gethostname_chk_warn (__buf, __buflen, D.31122);
  return D.31117;
  <D.31121>:
  <D.31113>:
  D.31117 = __gethostname_alias (__buf, __buflen);
  return D.31117;
}


ves_icall_System_Environment_get_HasShutdownStarted ()
{
  int D.31124;
  MonoBoolean D.31127;
  struct MonoDomain * D.31128;
  int D.31129;

  D.31124 = mono_runtime_is_shutting_down ();
  if (D.31124 != 0) goto <D.31125>; else goto <D.31126>;
  <D.31125>:
  D.31127 = 1;
  return D.31127;
  <D.31126>:
  D.31128 = mono_domain_get ();
  D.31129 = mono_domain_is_unloading (D.31128);
  if (D.31129 != 0) goto <D.31130>; else goto <D.31131>;
  <D.31130>:
  D.31127 = 1;
  return D.31127;
  <D.31131>:
  D.31127 = 0;
  return D.31127;
}


ves_icall_System_Environment_InternalSetEnvironmentVariable (struct MonoString * name, struct MonoString * value)
{
  int D.31136;
  mono_unichar2 * D.31138;
  short unsigned int D.31139;
  int D.31140;
  struct MonoError error;
  gchar * utf8_name;
  gchar * utf8_value;

  try
    {
      utf8_name = mono_string_to_utf8 (name);
      if (value == 0B) goto <D.31133>; else goto <D.31135>;
      <D.31135>:
      D.31136 = mono_string_length (value);
      if (D.31136 == 0) goto <D.31133>; else goto <D.31137>;
      <D.31137>:
      D.31138 = mono_string_chars (value);
      D.31139 = *D.31138;
      if (D.31139 == 0) goto <D.31133>; else goto <D.31134>;
      <D.31133>:
      monoeg_g_unsetenv (utf8_name);
      monoeg_g_free (utf8_name);
      return;
      <D.31134>:
      utf8_value = mono_string_to_utf8_checked (value, &error);
      D.31140 = mono_error_ok (&error);
      if (D.31140 == 0) goto <D.31141>; else goto <D.31142>;
      <D.31141>:
      monoeg_g_free (utf8_name);
      mono_error_raise_exception (&error);
      <D.31142>:
      monoeg_g_setenv (utf8_name, utf8_value, 1);
      monoeg_g_free (utf8_name);
      monoeg_g_free (utf8_value);
    }
  finally
    {
      error = {CLOBBER};
    }
}


ves_icall_System_Environment_GetWindowsFolderPath (int folder)
{
  struct MonoString * D.31146;
  struct MonoDomain * D.31147;

  monoeg_g_log (0B, 16, "ves_icall_System_Environment_GetWindowsFolderPath should only be called on Windows!");
  D.31147 = mono_domain_get ();
  D.31146 = mono_string_new (D.31147, "");
  return D.31146;
}


ves_icall_System_Environment_get_NewLine ()
{
  struct MonoString * D.31149;
  struct MonoDomain * D.31150;

  D.31150 = mono_domain_get ();
  D.31149 = mono_string_new (D.31150, "\n");
  return D.31149;
}


ves_icall_System_Environment_GetLogicalDrives ()
{
  int D.31152;
  unsigned int D.31157;
  long unsigned int D.31158;
  long unsigned int D.31159;
  gunichar2 * dname.182;
  short unsigned int D.31161;
  short unsigned int D.31162;
  long unsigned int D.31163;
  struct MonoClass * D.31164;
  short unsigned int D.31165;
  int ndrives.183;
  long unsigned int D.31167;
  gunichar2 * dname.184;
  short unsigned int D.31169;
  struct MonoArray * D.31172;
  gunichar2 buf[256];
  gunichar2 * ptr;
  gunichar2 * dname;
  gunichar2 * u16;
  guint initial_size;
  guint size;
  gint ndrives;
  struct MonoArray * result;
  struct MonoString * drivestr;
  struct MonoDomain * domain;
  gint len;

  try
    {
      initial_size = 127;
      size = 128;
      domain = mono_domain_get ();
      buf[0] = 0;
      ptr = &buf;
      goto <D.23268>;
      <D.23267>:
      D.31152 = GetLogicalDriveStrings (initial_size, ptr);
      size = (guint) D.31152;
      if (size > initial_size) goto <D.31153>; else goto <D.31154>;
      <D.31153>:
      if (&buf != ptr) goto <D.31155>; else goto <D.31156>;
      <D.31155>:
      monoeg_g_free (ptr);
      <D.31156>:
      D.31157 = size + 1;
      D.31158 = (long unsigned int) D.31157;
      D.31159 = D.31158 * 2;
      ptr = monoeg_malloc0 (D.31159);
      initial_size = size;
      size = size + 1;
      <D.31154>:
      <D.23268>:
      if (size > initial_size) goto <D.23267>; else goto <D.23269>;
      <D.23269>:
      dname = ptr;
      ndrives = 0;
      <D.23273>:
      goto <D.23271>;
      <D.23270>:
      <D.23271>:
      dname.182 = dname;
      dname = dname.182 + 2;
      D.31161 = *dname.182;
      if (D.31161 != 0) goto <D.23270>; else goto <D.23272>;
      <D.23272>:
      ndrives = ndrives + 1;
      D.31162 = *dname;
      if (D.31162 != 0) goto <D.23273>; else goto <D.23274>;
      <D.23274>:
      dname = ptr;
      D.31163 = (long unsigned int) ndrives;
      D.31164 = mono_defaults.string_class;
      result = mono_array_new (domain, D.31164, D.31163);
      ndrives = 0;
      <D.23282>:
      len = 0;
      u16 = dname;
      goto <D.23276>;
      <D.23275>:
      u16 = u16 + 2;
      len = len + 1;
      <D.23276>:
      D.31165 = *u16;
      if (D.31165 != 0) goto <D.23275>; else goto <D.23277>;
      <D.23277>:
      drivestr = mono_string_new_utf16 (domain, dname, len);
      {
        void * * __p;

        ndrives.183 = ndrives;
        ndrives = ndrives.183 + 1;
        D.31167 = (long unsigned int) ndrives.183;
        __p = mono_array_addr_with_size (result, 8, D.31167);
        mono_gc_wbarrier_set_arrayref (result, __p, drivestr);
      }
      goto <D.23280>;
      <D.23279>:
      <D.23280>:
      dname.184 = dname;
      dname = dname.184 + 2;
      D.31169 = *dname.184;
      if (D.31169 != 0) goto <D.23279>; else goto <D.23281>;
      <D.23281>:
      D.31162 = *dname;
      if (D.31162 != 0) goto <D.23282>; else goto <D.23283>;
      <D.23283>:
      if (&buf != ptr) goto <D.31170>; else goto <D.31171>;
      <D.31170>:
      monoeg_g_free (ptr);
      <D.31171>:
      D.31172 = result;
      return D.31172;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


ves_icall_System_Environment_GetEnvironmentVariableNames ()
{
  gchar * D.31175;
  long unsigned int D.31176;
  struct MonoClass * D.31177;
  gchar * D.31178;
  struct MonoArray * D.31181;
  struct MonoArray * names;
  struct MonoDomain * domain;
  struct MonoString * str;
  gchar * * e;
  gchar * * parts;
  int n;

  n = 0;
  e = environ;
  goto <D.23231>;
  <D.23230>:
  n = n + 1;
  e = e + 8;
  <D.23231>:
  D.31175 = *e;
  if (D.31175 != 0B) goto <D.23230>; else goto <D.23232>;
  <D.23232>:
  domain = mono_domain_get ();
  D.31176 = (long unsigned int) n;
  D.31177 = mono_defaults.string_class;
  names = mono_array_new (domain, D.31177, D.31176);
  n = 0;
  e = environ;
  goto <D.23235>;
  <D.23234>:
  D.31175 = *e;
  parts = monoeg_g_strsplit (D.31175, "=", 2);
  D.31178 = *parts;
  if (D.31178 != 0B) goto <D.31179>; else goto <D.31180>;
  <D.31179>:
  D.31178 = *parts;
  str = mono_string_new (domain, D.31178);
  {
    void * * __p;

    D.31176 = (long unsigned int) n;
    __p = mono_array_addr_with_size (names, 8, D.31176);
    mono_gc_wbarrier_set_arrayref (names, __p, str);
  }
  <D.31180>:
  monoeg_g_strfreev (parts);
  n = n + 1;
  e = e + 8;
  <D.23235>:
  D.31175 = *e;
  if (D.31175 != 0B) goto <D.23234>; else goto <D.23236>;
  <D.23236>:
  D.31181 = names;
  return D.31181;
}


ves_icall_System_Environment_Exit (int result)
{
  int D.31183;

  mono_environment_exitcode_set (result);
  D.31183 = mono_runtime_try_shutdown ();
  if (D.31183 == 0) goto <D.31184>; else goto <D.31185>;
  <D.31184>:
  mono_thread_exit ();
  <D.31185>:
  mono_thread_suspend_all_other_threads ();
  mono_runtime_quit ();
  exit (result);
}


ves_icall_System_Enum_get_value (struct MonoObject * this)
{
  struct MonoObject * D.31188;
  struct MonoVTable * D.31189;
  struct MonoClass * D.31190;
  unsigned char D.31191;
  unsigned char D.31192;
  _Bool D.31193;
  long int D.31194;
  long int D.31195;
  struct MonoType * D.31198;
  struct MonoDomain * D.31199;
  long unsigned int D.31200;
  struct MonoObject * res;
  struct MonoClass * enumc;
  void * dst;
  void * src;
  int size;

  if (this == 0B) goto <D.31186>; else goto <D.31187>;
  <D.31186>:
  D.31188 = 0B;
  return D.31188;
  <D.31187>:
  D.31189 = this->vtable;
  D.31190 = D.31189->klass;
  D.31191 = BIT_FIELD_REF <*D.31190, 8, 256>;
  D.31192 = D.31191 & 16;
  D.31193 = D.31192 == 0;
  D.31194 = (long int) D.31193;
  D.31195 = __builtin_expect (D.31194, 0);
  if (D.31195 != 0) goto <D.31196>; else goto <D.31197>;
  <D.31196>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 3088, "this->vtable->klass->enumtype");
  <D.31197>:
  D.31189 = this->vtable;
  D.31190 = D.31189->klass;
  D.31198 = mono_class_enum_basetype (D.31190);
  enumc = mono_class_from_mono_type (D.31198);
  D.31189 = this->vtable;
  D.31199 = D.31189->domain;
  res = mono_object_new (D.31199, enumc);
  dst = res + 16;
  src = this + 16;
  size = mono_class_value_size (enumc, 0B);
  D.31200 = (long unsigned int) size;
  memcpy (dst, src, D.31200);
  D.31188 = res;
  return D.31188;
}


ves_icall_System_Enum_get_underlying_type (struct MonoReflectionType * type)
{
  struct MonoType * D.31202;
  struct MonoException * D.31205;
  struct MonoReflectionType * D.31206;
  struct MonoVTable * D.31207;
  struct MonoDomain * D.31208;
  struct MonoType * etype;
  struct MonoClass * klass;

  D.31202 = type->type;
  klass = mono_class_from_mono_type (D.31202);
  mono_class_init_or_throw (klass);
  etype = mono_class_enum_basetype (klass);
  if (etype == 0B) goto <D.31203>; else goto <D.31204>;
  <D.31203>:
  D.31205 = mono_get_exception_argument ("Type must be a type provided by the runtime.", "enumType");
  mono_raise_exception (D.31205);
  <D.31204>:
  D.31207 = MEM[(struct MonoObject *)type].vtable;
  D.31208 = D.31207->domain;
  D.31206 = mono_type_get_object (D.31208, etype);
  return D.31206;
}


ves_icall_System_Enum_get_hashcode (struct MonoObject * this)
{
  struct MonoVTable * D.31210;
  struct MonoClass * D.31211;
  _Bool D.31212;
  long int D.31213;
  long int D.31214;
  unsigned char D.31217;
  int D.31218;
  int D.31219;
  signed char D.31220;
  unsigned char D.31221;
  short unsigned int D.31222;
  short int D.31223;
  unsigned int D.31224;
  int D.31225;
  long int D.31226;
  int D.31227;
  void * data;
  struct MonoType * basetype;

  data = this + 16;
  D.31210 = this->vtable;
  D.31211 = D.31210->klass;
  basetype = mono_class_enum_basetype (D.31211);
  D.31212 = basetype == 0B;
  D.31213 = (long int) D.31212;
  D.31214 = __builtin_expect (D.31213, 0);
  if (D.31214 != 0) goto <D.31215>; else goto <D.31216>;
  <D.31215>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 3175, "basetype");
  <D.31216>:
  D.31217 = basetype->type;
  D.31218 = (int) D.31217;
  switch (D.31218) <default: <D.22060>, case 3: <D.22052>, case 4: <D.22050>, case 5: <D.22051>, case 6: <D.22054>, case 7: <D.22053>, case 8: <D.22056>, case 9: <D.22055>, case 10: <D.22058>, case 11: <D.22057>>
  <D.22050>:
  D.31220 = MEM[(gint8 *)data];
  D.31219 = (int) D.31220;
  return D.31219;
  <D.22051>:
  D.31221 = MEM[(guint8 *)data];
  D.31219 = (int) D.31221;
  return D.31219;
  <D.22052>:
  <D.22053>:
  D.31222 = MEM[(guint16 *)data];
  D.31219 = (int) D.31222;
  return D.31219;
  <D.22054>:
  D.31223 = MEM[(gint16 *)data];
  D.31219 = (int) D.31223;
  return D.31219;
  <D.22055>:
  D.31224 = MEM[(guint32 *)data];
  D.31219 = (int) D.31224;
  return D.31219;
  <D.22056>:
  D.31219 = MEM[(gint32 *)data];
  return D.31219;
  <D.22057>:
  <D.22058>:
  {
    gint64 value;

    value = MEM[(gint64 *)data];
    D.31225 = (int) value;
    D.31226 = value >> 32;
    D.31227 = (int) D.31226;
    D.31219 = D.31225 ^ D.31227;
    return D.31219;
  }
  <D.22060>:
  D.31217 = basetype->type;
  D.31218 = (int) D.31217;
  monoeg_g_log (0B, 4, "Implement type 0x%02x in get_hashcode", D.31218);
  <D.22061>:
  goto <D.22061>;
  D.31219 = 0;
  return D.31219;
}


ves_icall_System_Enum_compare_value_to (struct MonoObject * this, struct MonoObject * other)
{
  struct MonoVTable * D.31229;
  struct MonoClass * D.31230;
  _Bool D.31231;
  long int D.31232;
  long int D.31233;
  unsigned char D.31236;
  int D.31237;
  int D.31240;
  int iftmp.185;
  int iftmp.186;
  int D.31253;
  int D.31254;
  int iftmp.187;
  int iftmp.188;
  int iftmp.189;
  int iftmp.190;
  int iftmp.191;
  void * tdata;
  void * odata;
  struct MonoType * basetype;

  tdata = this + 16;
  odata = other + 16;
  D.31229 = this->vtable;
  D.31230 = D.31229->klass;
  basetype = mono_class_enum_basetype (D.31230);
  D.31231 = basetype == 0B;
  D.31232 = (long int) D.31231;
  D.31233 = __builtin_expect (D.31232, 0);
  if (D.31233 != 0) goto <D.31234>; else goto <D.31235>;
  <D.31234>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 3126, "basetype");
  <D.31235>:
  D.31236 = basetype->type;
  D.31237 = (int) D.31236;
  switch (D.31237) <default: <D.22043>, case 3: <D.22024>, case 4: <D.22021>, case 5: <D.22018>, case 6: <D.22028>, case 7: <D.22025>, case 8: <D.22034>, case 9: <D.22031>, case 10: <D.22040>, case 11: <D.22037>>
  <D.22018>:
  {
    guint8 me;
    guint8 other;

    me = MEM[(guint8 *)tdata];
    other = MEM[(guint8 *)odata];
    if (me == other) goto <D.31238>; else goto <D.31239>;
    <D.31238>:
    D.31240 = 0;
    return D.31240;
    <D.31239>:
    if (me > other) goto <D.31242>; else goto <D.31243>;
    <D.31242>:
    iftmp.185 = 1;
    goto <D.31244>;
    <D.31243>:
    iftmp.185 = -1;
    <D.31244>:
    D.31240 = iftmp.185;
    return D.31240;
  }
  <D.22021>:
  {
    gint8 me;
    gint8 other;

    me = MEM[(gint8 *)tdata];
    other = MEM[(gint8 *)odata];
    if (me == other) goto <D.31245>; else goto <D.31246>;
    <D.31245>:
    D.31240 = 0;
    return D.31240;
    <D.31246>:
    if (me > other) goto <D.31248>; else goto <D.31249>;
    <D.31248>:
    iftmp.186 = 1;
    goto <D.31250>;
    <D.31249>:
    iftmp.186 = -1;
    <D.31250>:
    D.31240 = iftmp.186;
    return D.31240;
  }
  <D.22024>:
  <D.22025>:
  {
    guint16 me;
    guint16 other;

    me = MEM[(guint16 *)tdata];
    other = MEM[(guint16 *)odata];
    if (me == other) goto <D.31251>; else goto <D.31252>;
    <D.31251>:
    D.31240 = 0;
    return D.31240;
    <D.31252>:
    D.31253 = (int) me;
    D.31254 = (int) other;
    D.31240 = D.31253 - D.31254;
    return D.31240;
  }
  <D.22028>:
  {
    gint16 me;
    gint16 other;

    me = MEM[(gint16 *)tdata];
    other = MEM[(gint16 *)odata];
    if (me == other) goto <D.31255>; else goto <D.31256>;
    <D.31255>:
    D.31240 = 0;
    return D.31240;
    <D.31256>:
    if (me > other) goto <D.31258>; else goto <D.31259>;
    <D.31258>:
    iftmp.187 = 1;
    goto <D.31260>;
    <D.31259>:
    iftmp.187 = -1;
    <D.31260>:
    D.31240 = iftmp.187;
    return D.31240;
  }
  <D.22031>:
  {
    guint32 me;
    guint32 other;

    me = MEM[(guint32 *)tdata];
    other = MEM[(guint32 *)odata];
    if (me == other) goto <D.31261>; else goto <D.31262>;
    <D.31261>:
    D.31240 = 0;
    return D.31240;
    <D.31262>:
    if (me > other) goto <D.31264>; else goto <D.31265>;
    <D.31264>:
    iftmp.188 = 1;
    goto <D.31266>;
    <D.31265>:
    iftmp.188 = -1;
    <D.31266>:
    D.31240 = iftmp.188;
    return D.31240;
  }
  <D.22034>:
  {
    gint32 me;
    gint32 other;

    me = MEM[(gint32 *)tdata];
    other = MEM[(gint32 *)odata];
    if (me == other) goto <D.31267>; else goto <D.31268>;
    <D.31267>:
    D.31240 = 0;
    return D.31240;
    <D.31268>:
    if (me > other) goto <D.31270>; else goto <D.31271>;
    <D.31270>:
    iftmp.189 = 1;
    goto <D.31272>;
    <D.31271>:
    iftmp.189 = -1;
    <D.31272>:
    D.31240 = iftmp.189;
    return D.31240;
  }
  <D.22037>:
  {
    guint64 me;
    guint64 other;

    me = MEM[(guint64 *)tdata];
    other = MEM[(guint64 *)odata];
    if (me == other) goto <D.31273>; else goto <D.31274>;
    <D.31273>:
    D.31240 = 0;
    return D.31240;
    <D.31274>:
    if (me > other) goto <D.31276>; else goto <D.31277>;
    <D.31276>:
    iftmp.190 = 1;
    goto <D.31278>;
    <D.31277>:
    iftmp.190 = -1;
    <D.31278>:
    D.31240 = iftmp.190;
    return D.31240;
  }
  <D.22040>:
  {
    gint64 me;
    gint64 other;

    me = MEM[(gint64 *)tdata];
    other = MEM[(gint64 *)odata];
    if (me == other) goto <D.31279>; else goto <D.31280>;
    <D.31279>:
    D.31240 = 0;
    return D.31240;
    <D.31280>:
    if (me > other) goto <D.31282>; else goto <D.31283>;
    <D.31282>:
    iftmp.191 = 1;
    goto <D.31284>;
    <D.31283>:
    iftmp.191 = -1;
    <D.31284>:
    D.31240 = iftmp.191;
    return D.31240;
  }
  <D.22043>:
  D.31236 = basetype->type;
  D.31237 = (int) D.31236;
  monoeg_g_log (0B, 4, "Implement type 0x%02x in get_hashcode", D.31237);
  <D.22044>:
  goto <D.22044>;
  D.31240 = 0;
  return D.31240;
}


ves_icall_System_Enum_ToObject (struct MonoReflectionType * enumType, struct MonoObject * value)
{
  _Bool D.31286;
  long int D.31287;
  long int D.31288;
  _Bool D.31293;
  long int D.31294;
  long int D.31295;
  struct MonoVTable * D.31300;
  struct MonoType * D.31301;
  struct MonoVTable * D.31302;
  unsigned char D.31303;
  unsigned char D.31304;
  struct MonoException * D.31307;
  unsigned char D.31308;
  unsigned char D.31309;
  unsigned char D.31312;
  unsigned char D.31313;
  struct MonoException * D.31316;
  struct MonoException * D.31319;
  int iftmp.192;
  struct MonoType * D.31323;
  unsigned char D.31324;
  char * D.31326;
  unsigned char D.31327;
  int D.31328;
  char * D.31329;
  struct MonoObject * D.31330;
  struct MonoDomain * domain;
  struct MonoClass * enumc;
  struct MonoClass * objc;
  struct MonoObject * res;
  struct MonoType * etype;
  guint64 val;

  D.31286 = enumType == 0B;
  D.31287 = (long int) D.31286;
  D.31288 = __builtin_expect (D.31287, 0);
  if (D.31288 != 0) goto <D.31289>; else goto <D.31290>;
  <D.31289>:
  {
    struct MonoException * ex;

    if (enumType != 0B) goto <D.31291>; else goto <D.31292>;
    <D.31291>:
    <D.31292>:
    ex = mono_get_exception_argument_null ("enumType");
    mono_raise_exception (ex);
  }
  <D.31290>:
  D.31293 = value == 0B;
  D.31294 = (long int) D.31293;
  D.31295 = __builtin_expect (D.31294, 0);
  if (D.31295 != 0) goto <D.31296>; else goto <D.31297>;
  <D.31296>:
  {
    struct MonoException * ex;

    if (value != 0B) goto <D.31298>; else goto <D.31299>;
    <D.31298>:
    <D.31299>:
    ex = mono_get_exception_argument_null ("value");
    mono_raise_exception (ex);
  }
  <D.31297>:
  D.31300 = MEM[(struct MonoObject *)enumType].vtable;
  domain = D.31300->domain;
  D.31301 = enumType->type;
  enumc = mono_class_from_mono_type (D.31301);
  mono_class_init_or_throw (enumc);
  D.31302 = value->vtable;
  objc = D.31302->klass;
  D.31303 = BIT_FIELD_REF <*enumc, 8, 256>;
  D.31304 = D.31303 & 16;
  if (D.31304 == 0) goto <D.31305>; else goto <D.31306>;
  <D.31305>:
  D.31307 = mono_get_exception_argument ("enumType", "Type provided must be an Enum.");
  mono_raise_exception (D.31307);
  <D.31306>:
  D.31308 = BIT_FIELD_REF <*objc, 8, 256>;
  D.31309 = D.31308 & 16;
  if (D.31309 == 0) goto <D.31310>; else goto <D.31311>;
  <D.31310>:
  D.31312 = objc->byval_arg.type;
  D.31313 = D.31312 + 252;
  if (D.31313 > 7) goto <D.31314>; else goto <D.31315>;
  <D.31314>:
  D.31316 = mono_get_exception_argument ("value", "The value passed in must be an enum base or an underlying type for an enum, such as an Int32.");
  mono_raise_exception (D.31316);
  <D.31315>:
  <D.31311>:
  etype = mono_class_enum_basetype (enumc);
  if (etype == 0B) goto <D.31317>; else goto <D.31318>;
  <D.31317>:
  D.31319 = mono_get_exception_argument ("Type must be a type provided by the runtime.", "enumType");
  mono_raise_exception (D.31319);
  <D.31318>:
  res = mono_object_new (domain, enumc);
  D.31308 = BIT_FIELD_REF <*objc, 8, 256>;
  D.31309 = D.31308 & 16;
  if (D.31309 != 0) goto <D.31321>; else goto <D.31322>;
  <D.31321>:
  D.31323 = mono_class_enum_basetype (objc);
  D.31324 = D.31323->type;
  iftmp.192 = (int) D.31324;
  goto <D.31325>;
  <D.31322>:
  D.31312 = objc->byval_arg.type;
  iftmp.192 = (int) D.31312;
  <D.31325>:
  D.31326 = value + 16;
  val = read_enum_value (D.31326, iftmp.192);
  D.31327 = etype->type;
  D.31328 = (int) D.31327;
  D.31329 = res + 16;
  write_enum_value (D.31329, D.31328, val);
  D.31330 = res;
  return D.31330;
}


read_enum_value (char * mem, int type)
{
  guint64 D.31332;
  unsigned char D.31333;
  signed char D.31334;
  short unsigned int D.31335;
  short int D.31336;
  unsigned int D.31337;
  int D.31338;
  long int D.31339;

  switch (type) <default: <D.21966>, case 4: <D.21959>, case 5: <D.21958>, case 6: <D.21961>, case 7: <D.21960>, case 8: <D.21963>, case 9: <D.21962>, case 10: <D.21965>, case 11: <D.21964>>
  <D.21958>:
  D.31333 = MEM[(guint8 *)mem];
  D.31332 = (guint64) D.31333;
  return D.31332;
  <D.21959>:
  D.31334 = MEM[(gint8 *)mem];
  D.31332 = (guint64) D.31334;
  return D.31332;
  <D.21960>:
  D.31335 = MEM[(guint16 *)mem];
  D.31332 = (guint64) D.31335;
  return D.31332;
  <D.21961>:
  D.31336 = MEM[(gint16 *)mem];
  D.31332 = (guint64) D.31336;
  return D.31332;
  <D.21962>:
  D.31337 = MEM[(guint32 *)mem];
  D.31332 = (guint64) D.31337;
  return D.31332;
  <D.21963>:
  D.31338 = MEM[(gint32 *)mem];
  D.31332 = (guint64) D.31338;
  return D.31332;
  <D.21964>:
  D.31332 = MEM[(guint64 *)mem];
  return D.31332;
  <D.21965>:
  D.31339 = MEM[(gint64 *)mem];
  D.31332 = (guint64) D.31339;
  return D.31332;
  <D.21966>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "icall.c", 2997);
  D.31332 = 0;
  return D.31332;
}


write_enum_value (char * mem, int type, guint64 value)
{
  unsigned char D.31341;
  short unsigned int D.31342;
  unsigned int D.31343;

  switch (type) <default: <D.21985>, case 4: <D.21973>, case 5: <D.21972>, case 6: <D.21977>, case 7: <D.21976>, case 8: <D.21980>, case 9: <D.21979>, case 10: <D.21983>, case 11: <D.21982>>
  <D.21972>:
  <D.21973>:
  {
    guint8 * p;

    p = mem;
    D.31341 = (unsigned char) value;
    *p = D.31341;
    goto <D.21975>;
  }
  <D.21976>:
  <D.21977>:
  {
    guint16 * p;

    p = mem;
    D.31342 = (short unsigned int) value;
    *p = D.31342;
    goto <D.21975>;
  }
  <D.21979>:
  <D.21980>:
  {
    guint32 * p;

    p = mem;
    D.31343 = (unsigned int) value;
    *p = D.31343;
    goto <D.21975>;
  }
  <D.21982>:
  <D.21983>:
  {
    guint64 * p;

    p = mem;
    *p = value;
    goto <D.21975>;
  }
  <D.21985>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "icall.c", 3031);
  <D.21975>:
  return;
}


mono_double_ParseImpl (char * ptr, double * result)
{
  char D.31345;
  _Bool D.31350;
  long int D.31351;
  long int D.31352;
  double D.31355;
  _Bool D.31358;
  long int D.31359;
  long int D.31360;
  gchar * endptr.193;
  char D.31368;
  gboolean D.31369;
  gchar * endptr;

  try
    {
      endptr = 0B;
      *result = 0.0;
      D.31345 = *ptr;
      if (D.31345 != 0) goto <D.31346>; else goto <D.31347>;
      <D.31346>:
      {
        int ret;

        ret = pthread_mutex_lock (&mono_strtod_mutex.mutex);
        if (ret != 0) goto <D.31348>; else goto <D.31349>;
        <D.31348>:
        monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
        <D.31349>:
        D.31350 = ret != 0;
        D.31351 = (long int) D.31350;
        D.31352 = __builtin_expect (D.31351, 0);
        if (D.31352 != 0) goto <D.31353>; else goto <D.31354>;
        <D.31353>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 133, "ret == 0");
        <D.31354>:
      }
      D.31355 = mono_strtod (ptr, &endptr);
      *result = D.31355;
      {
        int ret;

        ret = pthread_mutex_unlock (&mono_strtod_mutex.mutex);
        if (ret != 0) goto <D.31356>; else goto <D.31357>;
        <D.31356>:
        monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
        <D.31357>:
        D.31358 = ret != 0;
        D.31359 = (long int) D.31358;
        D.31360 = __builtin_expect (D.31359, 0);
        if (D.31360 != 0) goto <D.31361>; else goto <D.31362>;
        <D.31361>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 135, "ret == 0");
        <D.31362>:
      }
      <D.31347>:
      D.31345 = *ptr;
      if (D.31345 == 0) goto <D.31363>; else goto <D.31365>;
      <D.31365>:
      endptr.193 = endptr;
      if (endptr.193 != 0B) goto <D.31367>; else goto <D.31364>;
      <D.31367>:
      endptr.193 = endptr;
      D.31368 = *endptr.193;
      if (D.31368 != 0) goto <D.31363>; else goto <D.31364>;
      <D.31363>:
      D.31369 = 0;
      return D.31369;
      <D.31364>:
      D.31369 = 1;
      return D.31369;
    }
  finally
    {
      endptr = {CLOBBER};
    }
}


ves_icall_System_Diagnostics_DefaultTraceListener_WriteWindowsDebugString (struct MonoString * message)
{
  monoeg_g_log (0B, 16, "WriteWindowsDebugString called and HOST_WIN32 not defined!\n");
}


ves_icall_System_Diagnostics_Debugger_Log (int level, struct MonoString * category, struct MonoString * message)
{
  struct MonoRuntimeCallbacks * D.31372;
  void (*<T27a5>) (int, struct MonoString *, struct MonoString *) D.31373;
  struct MonoRuntimeCallbacks * D.31376;
  void (*<T27a5>) (int, struct MonoString *, struct MonoString *) D.31377;

  D.31372 = mono_get_runtime_callbacks ();
  D.31373 = D.31372->debug_log;
  if (D.31373 != 0B) goto <D.31374>; else goto <D.31375>;
  <D.31374>:
  D.31376 = mono_get_runtime_callbacks ();
  D.31377 = D.31376->debug_log;
  D.31377 (level, category, message);
  <D.31375>:
}


ves_icall_System_Diagnostics_Debugger_IsLogging ()
{
  struct MonoRuntimeCallbacks * D.31378;
  gboolean (*<T27a9>) (void) D.31379;
  MonoBoolean D.31382;
  struct MonoRuntimeCallbacks * D.31383;
  gboolean (*<T27a9>) (void) D.31384;
  int D.31385;

  D.31378 = mono_get_runtime_callbacks ();
  D.31379 = D.31378->debug_log_is_enabled;
  if (D.31379 != 0B) goto <D.31380>; else goto <D.31381>;
  <D.31380>:
  D.31383 = mono_get_runtime_callbacks ();
  D.31384 = D.31383->debug_log_is_enabled;
  D.31385 = D.31384 ();
  D.31382 = (MonoBoolean) D.31385;
  return D.31382;
  <D.31381>:
  D.31382 = 0;
  return D.31382;
}


ves_icall_System_Diagnostics_Debugger_IsAttached_internal ()
{
  MonoBoolean D.31387;
  int D.31388;

  D.31388 = mono_is_debugger_attached ();
  D.31387 = (MonoBoolean) D.31388;
  return D.31387;
}


ves_icall_System_Delegate_SetMulticastInvoke (struct MonoDelegate * this)
{
  struct MonoVTable * D.31390;
  struct MonoClass * D.31391;
  void * D.31392;

  D.31390 = this->object.vtable;
  D.31391 = D.31390->klass;
  D.31392 = mono_runtime_create_delegate_trampoline (D.31391);
  this->invoke_impl = D.31392;
}


ves_icall_System_Delegate_CreateDelegate_internal (struct MonoReflectionType * type, struct MonoObject * target, struct MonoReflectionMethod * info, MonoBoolean throwOnBindFailure)
{
  struct MonoType * D.31393;
  struct MonoClass * D.31394;
  struct MonoClass * D.31395;
  <unnamed type> D.31398;
  int D.31401;
  int D.31402;
  struct MonoObject * D.31405;
  struct MonoVTable * D.31406;
  struct MonoDomain * D.31407;
  unsigned char D.31408;
  unsigned char D.31409;
  short unsigned int D.31415;
  int D.31416;
  int D.31417;
  struct MonoClass * D.31420;
  struct MonoVTable * D.31421;
  struct MonoClass * D.31422;
  struct MonoDomain * D.31425;
  void * D.31426;
  struct MonoDomain * D.31427;
  struct MonoClass * delegate_class;
  struct MonoObject * delegate;
  void * func;
  struct MonoMethod * method;
  static const char __PRETTY_FUNCTION__[50] = "ves_icall_System_Delegate_CreateDelegate_internal";

  D.31393 = type->type;
  delegate_class = mono_class_from_mono_type (D.31393);
  method = info->method;
  mono_class_init_or_throw (delegate_class);
  D.31394 = delegate_class->parent;
  D.31395 = mono_defaults.multicastdelegate_class;
  if (D.31394 != D.31395) goto <D.31396>; else goto <D.31397>;
  <D.31396>:
  {
    struct MonoException * ex;
    char * msg;

    msg = monoeg_g_strdup_printf ("file %s: line %d (%s): assertion failed: (%s)", "icall.c", 5817, &__PRETTY_FUNCTION__, "delegate_class->parent == mono_defaults.multicastdelegate_class");
    ex = mono_get_exception_execution_engine (msg);
    monoeg_g_free (msg);
    mono_raise_exception (ex);
  }
  <D.31397>:
  D.31398 = mono_security_get_mode ();
  if (D.31398 == 1) goto <D.31399>; else goto <D.31400>;
  <D.31399>:
  D.31401 = (int) throwOnBindFailure;
  D.31402 = mono_security_core_clr_ensure_delegate_creation (method, D.31401);
  if (D.31402 == 0) goto <D.31403>; else goto <D.31404>;
  <D.31403>:
  D.31405 = 0B;
  return D.31405;
  <D.31404>:
  <D.31400>:
  D.31406 = MEM[(struct MonoObject *)type].vtable;
  D.31407 = D.31406->domain;
  delegate = mono_object_new (D.31407, delegate_class);
  D.31408 = BIT_FIELD_REF <*method, 8, 264>;
  D.31409 = D.31408 & 2;
  if (D.31409 != 0) goto <D.31410>; else goto <D.31411>;
  <D.31410>:
  func = mono_compile_method (method);
  goto <D.31412>;
  <D.31411>:
  if (target != 0B) goto <D.31413>; else goto <D.31414>;
  <D.31413>:
  D.31415 = method->flags;
  D.31416 = (int) D.31415;
  D.31417 = D.31416 & 64;
  if (D.31417 != 0) goto <D.31418>; else goto <D.31419>;
  <D.31418>:
  D.31420 = method->klass;
  D.31421 = target->vtable;
  D.31422 = D.31421->klass;
  if (D.31420 != D.31422) goto <D.31423>; else goto <D.31424>;
  <D.31423>:
  method = mono_object_get_virtual_method (target, method);
  <D.31424>:
  <D.31419>:
  <D.31414>:
  D.31425 = mono_domain_get ();
  D.31426 = mono_runtime_create_jump_trampoline (D.31425, method, 1);
  D.31427 = mono_domain_get ();
  func = mono_create_ftnptr (D.31427, D.31426);
  <D.31412>:
  mono_delegate_ctor_with_method (delegate, target, func, method);
  D.31405 = delegate;
  return D.31405;
}


ves_icall_System_CurrentSystemTimeZone_GetTimeZoneData (guint32 year, struct MonoArray * * data, struct MonoArray * * names)
{
  _Bool D.31429;
  long int D.31430;
  long int D.31431;
  _Bool D.31436;
  long int D.31437;
  long int D.31438;
  struct MonoClass * D.31443;
  struct MonoArray * D.31444;
  struct MonoClass * D.31445;
  struct MonoArray * D.31446;
  unsigned int D.31447;
  int D.31448;
  long int t.194;
  unsigned int D.31452;
  long int t.195;
  long int t.196;
  struct tm * D.31456;
  struct MonoArray * D.31457;
  struct MonoString * D.31458;
  struct MonoString * D.31459;
  guint32 D.31460;
  int D.31461;
  long int t.197;
  struct tm * D.31463;
  int D.31464;
  long int t1.198;
  long int t1.199;
  struct tm * D.31469;
  int D.31470;
  long int D.31471;
  long int t1.200;
  struct tm * D.31473;
  int D.31474;
  long int D.31475;
  long int t1.201;
  int D.31477;
  struct MonoString * D.31480;
  struct MonoArray * D.31481;
  long unsigned int t1.202;
  long unsigned int D.31483;
  long unsigned int D.31484;
  long int D.31485;
  struct MonoString * D.31489;
  int D.31492;
  long int D.31495;
  long int D.31496;
  long int D.31497;
  int D.31498;
  _Bool D.31499;
  _Bool D.31500;
  _Bool D.31501;
  struct MonoString * D.31504;
  struct MonoString * D.31505;
  long int D.31506;
  struct MonoDomain * domain;
  struct tm start;
  struct tm tt;
  time_t t;
  long int gmtoff;
  long int gmtoff_after;
  long int gmtoff_st;
  long int gmtoff_ds;
  int day;
  int transitioned;
  char tzone[64];

  try
    {
      domain = mono_domain_get ();
      transitioned = 0;
      gmtoff_ds = 0;
      gmtoff_st = gmtoff_ds;
      D.31429 = data == 0B;
      D.31430 = (long int) D.31429;
      D.31431 = __builtin_expect (D.31430, 0);
      if (D.31431 != 0) goto <D.31432>; else goto <D.31433>;
      <D.31432>:
      {
        struct MonoException * ex;

        if (data != 0B) goto <D.31434>; else goto <D.31435>;
        <D.31434>:
        <D.31435>:
        ex = mono_get_exception_argument_null ("data");
        mono_raise_exception (ex);
      }
      <D.31433>:
      D.31436 = names == 0B;
      D.31437 = (long int) D.31436;
      D.31438 = __builtin_expect (D.31437, 0);
      if (D.31438 != 0) goto <D.31439>; else goto <D.31440>;
      <D.31439>:
      {
        struct MonoException * ex;

        if (names != 0B) goto <D.31441>; else goto <D.31442>;
        <D.31441>:
        <D.31442>:
        ex = mono_get_exception_argument_null ("names");
        mono_raise_exception (ex);
      }
      <D.31440>:
      D.31443 = mono_defaults.int64_class;
      D.31444 = mono_array_new (domain, D.31443, 4);
      mono_gc_wbarrier_generic_store (data, D.31444);
      D.31445 = mono_defaults.string_class;
      D.31446 = mono_array_new (domain, D.31445, 2);
      mono_gc_wbarrier_generic_store (names, D.31446);
      memset (&start, 0, 56);
      start.tm_mday = 1;
      D.31447 = year + 4294965396;
      D.31448 = (int) D.31447;
      start.tm_year = D.31448;
      t.194 = mktime (&start);
      t = t.194;
      D.31452 = year + 4294965326;
      if (D.31452 > 67) goto <D.31450>; else goto <D.31453>;
      <D.31453>:
      t.195 = t;
      if (t.195 == -1) goto <D.31450>; else goto <D.31451>;
      <D.31450>:
      t.196 = time (0B);
      t = t.196;
      D.31456 = localtime (&t);
      tt = *D.31456;
      strftime (&tzone, 64, "%Z", &tt);
      {
        void * * __p;

        D.31457 = *names;
        __p = mono_array_addr_with_size (D.31457, 8, 0);
        D.31458 = mono_string_new (domain, &tzone);
        D.31457 = *names;
        mono_gc_wbarrier_set_arrayref (D.31457, __p, D.31458);
      }
      {
        void * * __p;

        D.31457 = *names;
        __p = mono_array_addr_with_size (D.31457, 8, 1);
        D.31459 = mono_string_new (domain, &tzone);
        D.31457 = *names;
        mono_gc_wbarrier_set_arrayref (D.31457, __p, D.31459);
      }
      D.31460 = 1;
      return D.31460;
      <D.31451>:
      t.195 = t;
      D.31461 = gmt_offset (&start, t.195);
      gmtoff = (long int) D.31461;
      day = 0;
      goto <D.23129>;
      <D.23128>:
      t.195 = t;
      t.197 = t.195 + 86400;
      t = t.197;
      D.31463 = localtime (&t);
      tt = *D.31463;
      t.195 = t;
      D.31464 = gmt_offset (&tt, t.195);
      gmtoff_after = (long int) D.31464;
      if (gmtoff_after != gmtoff) goto <D.31465>; else goto <D.31466>;
      <D.31465>:
      {
        struct tm tt1;
        time_t t1;

        try
          {
            t.195 = t;
            t1 = t.195;
            <D.23117>:
            t1.198 = t1;
            t1.199 = t1.198 + -3600;
            t1 = t1.199;
            D.31469 = localtime (&t1);
            tt1 = *D.31469;
            t1.198 = t1;
            D.31470 = gmt_offset (&tt1, t1.198);
            D.31471 = (long int) D.31470;
            if (D.31471 != gmtoff) goto <D.23117>; else goto <D.23118>;
            <D.23118>:
            <D.23119>:
            t1.198 = t1;
            t1.200 = t1.198 + 60;
            t1 = t1.200;
            D.31473 = localtime (&t1);
            tt1 = *D.31473;
            t1.198 = t1;
            D.31474 = gmt_offset (&tt1, t1.198);
            D.31475 = (long int) D.31474;
            if (D.31475 == gmtoff) goto <D.23119>; else goto <D.23120>;
            <D.23120>:
            t1.198 = t1;
            t1.201 = t1.198 + gmtoff;
            t1 = t1.201;
            strftime (&tzone, 64, "%Z", &tt);
            D.31477 = tt.tm_isdst;
            if (D.31477 != 0) goto <D.31478>; else goto <D.31479>;
            <D.31478>:
            {
              void * * __p;

              D.31457 = *names;
              __p = mono_array_addr_with_size (D.31457, 8, 1);
              D.31480 = mono_string_new (domain, &tzone);
              D.31457 = *names;
              mono_gc_wbarrier_set_arrayref (D.31457, __p, D.31480);
            }
            {
              gint64 * __p;

              D.31481 = *data;
              __p = mono_array_addr_with_size (D.31481, 8, 0);
              t1.198 = t1;
              t1.202 = (long unsigned int) t1.198;
              D.31483 = t1.202 * 10000000;
              D.31484 = D.31483 + 621355968000000000;
              D.31485 = (long int) D.31484;
              *__p = D.31485;
            }
            if (gmtoff_ds == 0) goto <D.31486>; else goto <D.31487>;
            <D.31486>:
            gmtoff_st = gmtoff;
            gmtoff_ds = gmtoff_after;
            <D.31487>:
            transitioned = transitioned + 1;
            goto <D.31488>;
            <D.31479>:
            {
              time_t te;

              te = mktime (&tt);
              {
                void * * __p;

                D.31457 = *names;
                __p = mono_array_addr_with_size (D.31457, 8, 0);
                D.31489 = mono_string_new (domain, &tzone);
                D.31457 = *names;
                mono_gc_wbarrier_set_arrayref (D.31457, __p, D.31489);
              }
              {
                gint64 * __p;

                D.31481 = *data;
                __p = mono_array_addr_with_size (D.31481, 8, 1);
                t1.198 = t1;
                t1.202 = (long unsigned int) t1.198;
                D.31483 = t1.202 * 10000000;
                D.31484 = D.31483 + 621355968000000000;
                D.31485 = (long int) D.31484;
                *__p = D.31485;
              }
              if (gmtoff_ds == 0) goto <D.31490>; else goto <D.31491>;
              <D.31490>:
              gmtoff_st = gmtoff_after;
              gmtoff_ds = gmtoff;
              <D.31491>:
              transitioned = transitioned + 1;
            }
            <D.31488>:
            D.31492 = tt1.tm_isdst;
            if (D.31492 != 0) goto <D.31493>; else goto <D.31494>;
            <D.31493>:
            {
              gint64 * __p;

              D.31481 = *data;
              __p = mono_array_addr_with_size (D.31481, 8, 2);
              D.31495 = gmtoff_st * 10000000;
              *__p = D.31495;
            }
            {
              gint64 * __p;

              D.31481 = *data;
              __p = mono_array_addr_with_size (D.31481, 8, 3);
              D.31496 = gmtoff_ds - gmtoff_st;
              D.31497 = D.31496 * 10000000;
              *__p = D.31497;
            }
            <D.31494>:
            t.195 = t;
            D.31498 = gmt_offset (&tt, t.195);
            gmtoff = (long int) D.31498;
          }
        finally
          {
            tt1 = {CLOBBER};
            t1 = {CLOBBER};
          }
      }
      <D.31466>:
      day = day + 1;
      <D.23129>:
      D.31499 = day <= 364;
      D.31500 = transitioned <= 1;
      D.31501 = D.31499 & D.31500;
      if (D.31501 != 0) goto <D.23128>; else goto <D.23130>;
      <D.23130>:
      if (transitioned <= 1) goto <D.31502>; else goto <D.31503>;
      <D.31502>:
      strftime (&tzone, 64, "%Z", &tt);
      {
        void * * __p;

        D.31457 = *names;
        __p = mono_array_addr_with_size (D.31457, 8, 0);
        D.31504 = mono_string_new (domain, &tzone);
        D.31457 = *names;
        mono_gc_wbarrier_set_arrayref (D.31457, __p, D.31504);
      }
      {
        void * * __p;

        D.31457 = *names;
        __p = mono_array_addr_with_size (D.31457, 8, 1);
        D.31505 = mono_string_new (domain, &tzone);
        D.31457 = *names;
        mono_gc_wbarrier_set_arrayref (D.31457, __p, D.31505);
      }
      {
        gint64 * __p;

        D.31481 = *data;
        __p = mono_array_addr_with_size (D.31481, 8, 0);
        *__p = 0;
      }
      {
        gint64 * __p;

        D.31481 = *data;
        __p = mono_array_addr_with_size (D.31481, 8, 1);
        *__p = 0;
      }
      {
        gint64 * __p;

        D.31481 = *data;
        __p = mono_array_addr_with_size (D.31481, 8, 2);
        D.31506 = gmtoff * 10000000;
        *__p = D.31506;
      }
      {
        gint64 * __p;

        D.31481 = *data;
        __p = mono_array_addr_with_size (D.31481, 8, 3);
        *__p = 0;
      }
      <D.31503>:
      D.31460 = 1;
      return D.31460;
    }
  finally
    {
      start = {CLOBBER};
      tt = {CLOBBER};
      t = {CLOBBER};
      tzone = {CLOBBER};
    }
}


gmt_offset (struct tm * tm, time_t t)
{
  int D.31509;
  long int D.31510;

  D.31510 = tm->tm_gmtoff;
  D.31509 = (int) D.31510;
  return D.31509;
}


InternalFromBase64String (struct MonoString * str, MonoBoolean allowWhitespaceOnly)
{
  struct MonoArray * D.31512;
  int D.31513;
  int D.31514;
  mono_unichar2 * D.31515;

  D.31513 = (int) allowWhitespaceOnly;
  D.31514 = mono_string_length (str);
  D.31515 = mono_string_chars (str);
  D.31512 = base64_to_byte_array (D.31515, D.31514, D.31513);
  return D.31512;
}


base64_to_byte_array (gunichar2 * start, gint ilength, MonoBoolean allowWhitespaceOnly)
{
  long unsigned int D.31517;
  long unsigned int D.31518;
  gunichar2 * D.31519;
  struct MonoImage * D.31522;
  const short unsigned int * * D.31524;
  const short unsigned int * D.31525;
  long unsigned int D.31526;
  long unsigned int D.31527;
  const short unsigned int * D.31528;
  short unsigned int D.31529;
  int D.31530;
  int D.31531;
  _Bool D.31535;
  _Bool D.31536;
  _Bool D.31537;
  struct MonoImage * D.31540;
  _Bool D.31544;
  _Bool D.31545;
  _Bool D.31546;
  struct MonoArray * D.31549;
  struct MonoClass * D.31550;
  struct MonoDomain * D.31551;
  int D.31554;
  struct MonoImage * D.31556;
  struct MonoImage * D.31559;
  int D.31560;
  long unsigned int D.31565;
  struct MonoDomain * D.31566;
  int i.203;
  long unsigned int D.31568;
  long unsigned int D.31569;
  gunichar2 * D.31570;
  unsigned char D.31573;
  int D.31574;
  int D.31575;
  unsigned char D.31576;
  int D.31577;
  int D.31578;
  int D.31579;
  struct MonoImage * D.31582;
  _Bool D.31583;
  _Bool D.31584;
  _Bool D.31585;
  guchar * res_ptr.204;
  int D.31587;
  int D.31588;
  signed char D.31589;
  int D.31590;
  int D.31591;
  signed char D.31592;
  signed char D.31593;
  unsigned char D.31594;
  int D.31595;
  guchar * res_ptr.205;
  int D.31599;
  signed char D.31600;
  int D.31601;
  int D.31602;
  signed char D.31603;
  signed char D.31604;
  unsigned char D.31605;
  int D.31606;
  guchar * res_ptr.206;
  int D.31610;
  signed char D.31611;
  int D.31612;
  signed char D.31613;
  signed char D.31614;
  unsigned char D.31615;
  short unsigned int D.31617;
  long unsigned int D.31618;
  long unsigned int D.31619;
  const short unsigned int * D.31620;
  short unsigned int D.31621;
  int D.31622;
  int D.31623;
  gint ignored;
  gint i;
  gunichar2 c;
  gunichar2 last;
  gunichar2 prev_last;
  gunichar2 prev2_last;
  gint olength;
  struct MonoArray * result;
  guchar * res_ptr;
  gint a[4];
  gint b[4];
  struct MonoException * exc;
  int havePadding;

  try
    {
      havePadding = 0;
      ignored = 0;
      prev_last = 0;
      last = prev_last;
      prev2_last = 0;
      i = 0;
      goto <D.23641>;
      <D.23640>:
      D.31517 = (long unsigned int) i;
      D.31518 = D.31517 * 2;
      D.31519 = start + D.31518;
      c = *D.31519;
      if (c > 122) goto <D.31520>; else goto <D.31521>;
      <D.31520>:
      D.31522 = mono_get_corlib ();
      exc = mono_exception_from_name_msg (D.31522, "System", "FormatException", "Invalid character found.");
      mono_raise_exception (exc);
      goto <D.31523>;
      <D.31521>:
      D.31524 = __ctype_b_loc ();
      D.31525 = *D.31524;
      D.31526 = (long unsigned int) c;
      D.31527 = D.31526 * 2;
      D.31528 = D.31525 + D.31527;
      D.31529 = *D.31528;
      D.31530 = (int) D.31529;
      D.31531 = D.31530 & 8192;
      if (D.31531 != 0) goto <D.31532>; else goto <D.31533>;
      <D.31532>:
      ignored = ignored + 1;
      goto <D.31534>;
      <D.31533>:
      D.31535 = havePadding != 0;
      D.31536 = c != 61;
      D.31537 = D.31535 & D.31536;
      if (D.31537 != 0) goto <D.31538>; else goto <D.31539>;
      <D.31538>:
      D.31540 = mono_get_corlib ();
      exc = mono_exception_from_name_msg (D.31540, "System", "FormatException", "Invalid character found.");
      mono_raise_exception (exc);
      goto <D.31541>;
      <D.31539>:
      if (c == 61) goto <D.31542>; else goto <D.31543>;
      <D.31542>:
      havePadding = 1;
      <D.31543>:
      prev2_last = prev_last;
      prev_last = last;
      last = c;
      <D.31541>:
      <D.31534>:
      <D.31523>:
      i = i + 1;
      <D.23641>:
      if (i < ilength) goto <D.23640>; else goto <D.23642>;
      <D.23642>:
      olength = ilength - ignored;
      D.31544 = allowWhitespaceOnly != 0;
      D.31545 = olength == 0;
      D.31546 = D.31544 & D.31545;
      if (D.31546 != 0) goto <D.31547>; else goto <D.31548>;
      <D.31547>:
      D.31550 = mono_defaults.byte_class;
      D.31551 = mono_domain_get ();
      D.31549 = mono_array_new (D.31551, D.31550, 0);
      return D.31549;
      <D.31548>:
      D.31554 = olength & 3;
      if (D.31554 != 0) goto <D.31552>; else goto <D.31555>;
      <D.31555>:
      if (olength <= 0) goto <D.31552>; else goto <D.31553>;
      <D.31552>:
      D.31556 = mono_get_corlib ();
      exc = mono_exception_from_name_msg (D.31556, "System", "FormatException", "Invalid length.");
      mono_raise_exception (exc);
      <D.31553>:
      if (prev2_last == 61) goto <D.31557>; else goto <D.31558>;
      <D.31557>:
      D.31559 = mono_get_corlib ();
      exc = mono_exception_from_name_msg (D.31559, "System", "FormatException", "Invalid format.");
      mono_raise_exception (exc);
      <D.31558>:
      D.31560 = olength * 3;
      olength = D.31560 / 4;
      if (last == 61) goto <D.31561>; else goto <D.31562>;
      <D.31561>:
      olength = olength + -1;
      <D.31562>:
      if (prev_last == 61) goto <D.31563>; else goto <D.31564>;
      <D.31563>:
      olength = olength + -1;
      <D.31564>:
      D.31565 = (long unsigned int) olength;
      D.31550 = mono_defaults.byte_class;
      D.31566 = mono_domain_get ();
      result = mono_array_new (D.31566, D.31550, D.31565);
      res_ptr = mono_array_addr_with_size (result, 1, 0);
      i = 0;
      goto <D.23651>;
      <D.23650>:
      {
        int k;

        k = 0;
        goto <D.23644>;
        <D.23645>:
        i.203 = i;
        i = i.203 + 1;
        D.31568 = (long unsigned int) i.203;
        D.31569 = D.31568 * 2;
        D.31570 = start + D.31569;
        c = *D.31570;
        D.31524 = __ctype_b_loc ();
        D.31525 = *D.31524;
        D.31526 = (long unsigned int) c;
        D.31527 = D.31526 * 2;
        D.31528 = D.31525 + D.31527;
        D.31529 = *D.31528;
        D.31530 = (int) D.31529;
        D.31531 = D.31530 & 8192;
        if (D.31531 != 0) goto <D.31571>; else goto <D.31572>;
        <D.31571>:
        // predicted unlikely by continue predictor.
        goto <D.23644>;
        <D.31572>:
        D.31573 = (unsigned char) c;
        D.31574 = (int) D.31573;
        a[k] = D.31574;
        D.31575 = (int) c;
        D.31576 = dbase64[D.31575];
        D.31577 = (int) D.31576;
        b[k] = D.31577;
        D.31578 = b[k];
        D.31579 = D.31578 & 128;
        if (D.31579 != 0) goto <D.31580>; else goto <D.31581>;
        <D.31580>:
        D.31582 = mono_get_corlib ();
        exc = mono_exception_from_name_msg (D.31582, "System", "FormatException", "Invalid character found.");
        mono_raise_exception (exc);
        <D.31581>:
        k = k + 1;
        <D.23644>:
        D.31583 = k <= 3;
        D.31584 = i < ilength;
        D.31585 = D.31583 & D.31584;
        if (D.31585 != 0) goto <D.23645>; else goto <D.23646>;
        <D.23646>:
        res_ptr.204 = res_ptr;
        res_ptr = res_ptr.204 + 1;
        D.31587 = b[0];
        D.31588 = D.31587 << 2;
        D.31589 = (signed char) D.31588;
        D.31590 = b[1];
        D.31591 = D.31590 >> 4;
        D.31592 = (signed char) D.31591;
        D.31593 = D.31589 | D.31592;
        D.31594 = (unsigned char) D.31593;
        *res_ptr.204 = D.31594;
        D.31595 = a[2];
        if (D.31595 != 61) goto <D.31596>; else goto <D.31597>;
        <D.31596>:
        res_ptr.205 = res_ptr;
        res_ptr = res_ptr.205 + 1;
        D.31590 = b[1];
        D.31599 = D.31590 << 4;
        D.31600 = (signed char) D.31599;
        D.31601 = b[2];
        D.31602 = D.31601 >> 2;
        D.31603 = (signed char) D.31602;
        D.31604 = D.31600 | D.31603;
        D.31605 = (unsigned char) D.31604;
        *res_ptr.205 = D.31605;
        <D.31597>:
        D.31606 = a[3];
        if (D.31606 != 61) goto <D.31607>; else goto <D.31608>;
        <D.31607>:
        res_ptr.206 = res_ptr;
        res_ptr = res_ptr.206 + 1;
        D.31601 = b[2];
        D.31610 = D.31601 << 6;
        D.31611 = (signed char) D.31610;
        D.31612 = b[3];
        D.31613 = (signed char) D.31612;
        D.31614 = D.31611 | D.31613;
        D.31615 = (unsigned char) D.31614;
        *res_ptr.206 = D.31615;
        <D.31608>:
        goto <D.23648>;
        <D.23647>:
        i = i + 1;
        <D.23648>:
        if (i < ilength) goto <D.31616>; else goto <D.23649>;
        <D.31616>:
        D.31524 = __ctype_b_loc ();
        D.31525 = *D.31524;
        D.31517 = (long unsigned int) i;
        D.31518 = D.31517 * 2;
        D.31519 = start + D.31518;
        D.31617 = *D.31519;
        D.31618 = (long unsigned int) D.31617;
        D.31619 = D.31618 * 2;
        D.31620 = D.31525 + D.31619;
        D.31621 = *D.31620;
        D.31622 = (int) D.31621;
        D.31623 = D.31622 & 8192;
        if (D.31623 != 0) goto <D.23647>; else goto <D.23649>;
        <D.23649>:
      }
      <D.23651>:
      if (i < ilength) goto <D.23650>; else goto <D.23652>;
      <D.23652>:
      D.31549 = result;
      return D.31549;
    }
  finally
    {
      a = {CLOBBER};
      b = {CLOBBER};
    }
}


InternalFromBase64CharArray (struct MonoArray * input, gint offset, gint length)
{
  struct MonoArray * D.31626;
  long unsigned int D.31627;
  char * D.31628;

  D.31627 = (long unsigned int) offset;
  D.31628 = mono_array_addr_with_size (input, 2, D.31627);
  D.31626 = base64_to_byte_array (D.31628, length, 0);
  return D.31626;
}


get_bundled_app_config ()
{
  struct MonoAppDomainSetup * D.31630;
  struct MonoString * D.31633;
  long unsigned int D.31636;
  long unsigned int D.31637;
  struct MonoDomain * D.31642;
  const gchar * app_config;
  struct MonoDomain * domain;
  struct MonoString * file;
  gchar * config_file_name;
  gchar * config_file_path;
  gsize len;
  gchar * module;

  domain = mono_domain_get ();
  D.31630 = domain->setup;
  file = D.31630->configuration_file;
  if (file == 0B) goto <D.31631>; else goto <D.31632>;
  <D.31631>:
  D.31633 = 0B;
  return D.31633;
  <D.31632>:
  config_file_name = mono_string_to_utf8 (file);
  config_file_path = mono_portability_find_file (config_file_name, 1);
  if (config_file_path == 0B) goto <D.31634>; else goto <D.31635>;
  <D.31634>:
  config_file_path = config_file_name;
  <D.31635>:
  D.31636 = strlen (config_file_path);
  len = D.31636 + 18446744073709551609;
  D.31637 = len + 1;
  module = monoeg_malloc0 (D.31637);
  memcpy (module, config_file_path, len);
  app_config = mono_config_string_for_assembly_file (module);
  monoeg_g_free (module);
  if (config_file_name != config_file_path) goto <D.31638>; else goto <D.31639>;
  <D.31638>:
  monoeg_g_free (config_file_name);
  <D.31639>:
  monoeg_g_free (config_file_path);
  if (app_config == 0B) goto <D.31640>; else goto <D.31641>;
  <D.31640>:
  D.31633 = 0B;
  return D.31633;
  <D.31641>:
  D.31642 = mono_domain_get ();
  D.31633 = mono_string_new (D.31642, app_config);
  return D.31633;
}


ves_icall_System_Configuration_DefaultConfig_get_machine_config_path ()
{
  const struct MonoRuntimeInfo * D.31644;
  const char[4] * D.31645;
  const char * D.31646;
  struct MonoDomain * D.31647;
  struct MonoString * D.31648;
  struct MonoString * mcpath;
  gchar * path;

  D.31644 = mono_get_runtime_info ();
  D.31645 = &D.31644->framework_version;
  D.31646 = mono_get_config_dir ();
  path = monoeg_g_build_path ("/", D.31646, "mono", D.31645, "machine.config", 0B);
  D.31647 = mono_domain_get ();
  mcpath = mono_string_new (D.31647, path);
  monoeg_g_free (path);
  D.31648 = mcpath;
  return D.31648;
}


get_bundled_machine_config ()
{
  struct MonoString * D.31652;
  struct MonoDomain * D.31653;
  const gchar * machine_config;

  machine_config = mono_get_machine_config ();
  if (machine_config == 0B) goto <D.31650>; else goto <D.31651>;
  <D.31650>:
  D.31652 = 0B;
  return D.31652;
  <D.31651>:
  D.31653 = mono_domain_get ();
  D.31652 = mono_string_new (D.31653, machine_config);
  return D.31652;
}


ves_icall_System_ComponentModel_Win32Exception_W32ErrorMessage (guint32 code)
{
  struct MonoDomain * D.31657;
  int ret.207;
  struct MonoDomain * D.31660;
  struct MonoString * D.31661;
  struct MonoString * message;
  guint32 ret;
  gunichar2 buf[256];

  try
    {
      ret = FormatMessage (4608, 0B, code, 0, &buf, 255, 0B);
      if (ret == 0) goto <D.31655>; else goto <D.31656>;
      <D.31655>:
      D.31657 = mono_domain_get ();
      message = mono_string_new (D.31657, "Error looking up error string");
      goto <D.31658>;
      <D.31656>:
      ret.207 = (int) ret;
      D.31660 = mono_domain_get ();
      message = mono_string_new_utf16 (D.31660, &buf, ret.207);
      <D.31658>:
      D.31661 = message;
      return D.31661;
    }
  finally
    {
      buf = {CLOBBER};
    }
}


ves_icall_System_Char_GetDataTablePointers (int category_data_version, const guint8 * * category_data, const guint16 * * category_astral_index, const guint8 * * numeric_data, const gdouble * * numeric_data_values, const guint16 * * to_lower_data_low, const guint16 * * to_lower_data_high, const guint16 * * to_upper_data_low, const guint16 * * to_upper_data_high)
{
  get_category_data (category_data_version, category_data, category_astral_index);
  *numeric_data = &NumericData;
  *numeric_data_values = &NumericDataValues;
  *to_lower_data_low = &ToLowerDataLow;
  *to_lower_data_high = &ToLowerDataHigh;
  *to_upper_data_low = &ToUpperDataLow;
  *to_upper_data_high = &ToUpperDataHigh;
}


get_category_data (int version, const guint8 * * category_data, const guint16 * * category_astral_index)
{
  *category_astral_index = 0B;
  if (version == 4) goto <D.31664>; else goto <D.31665>;
  <D.31664>:
  *category_data = &CategoryData_v4;
  *category_astral_index = &CategoryData_v4_astral_index;
  return;
  <D.31665>:
  *category_data = &CategoryData_v2;
  *category_astral_index = &CategoryData_v2_astral_index;
}


ves_icall_System_Buffer_SetByteInternal (struct MonoArray * array, gint32 idx, gint8 value)
{
  long unsigned int D.31667;

  {
    gint8 * __p;

    D.31667 = (long unsigned int) idx;
    __p = mono_array_addr_with_size (array, 1, D.31667);
    *__p = value;
  }
}


ves_icall_System_Buffer_GetByteInternal (struct MonoArray * array, gint32 idx)
{
  gint8 D.31668;
  long unsigned int D.31669;
  char * D.31670;

  D.31669 = (long unsigned int) idx;
  D.31670 = mono_array_addr_with_size (array, 1, D.31669);
  D.31668 = MEM[(gint8 *)D.31670];
  return D.31668;
}


ves_icall_System_Buffer_ByteLengthInternal (struct MonoArray * array)
{
  gint32 D.31672;

  D.31672 = mono_array_get_byte_length (array);
  return D.31672;
}


mono_array_get_byte_length (struct MonoArray * array)
{
  struct MonoVTable * D.31674;
  struct MonoArrayBounds * D.31675;
  unsigned int D.31678;
  long unsigned int D.31680;
  long unsigned int D.31681;
  struct MonoArrayBounds * D.31682;
  unsigned int D.31683;
  unsigned int length.208;
  unsigned int D.31685;
  unsigned char D.31686;
  int D.31687;
  struct MonoClass * D.31688;
  unsigned char D.31689;
  int D.31690;
  gint32 D.31691;
  unsigned int length.209;
  unsigned int D.31693;
  struct MonoClass * klass;
  int length;
  int i;

  D.31674 = array->obj.vtable;
  klass = D.31674->klass;
  D.31675 = array->bounds;
  if (D.31675 == 0B) goto <D.31676>; else goto <D.31677>;
  <D.31676>:
  D.31678 = array->max_length;
  length = (int) D.31678;
  goto <D.31679>;
  <D.31677>:
  length = 1;
  i = 0;
  goto <D.23147>;
  <D.23146>:
  D.31675 = array->bounds;
  D.31680 = (long unsigned int) i;
  D.31681 = D.31680 * 8;
  D.31682 = D.31675 + D.31681;
  D.31683 = D.31682->length;
  length.208 = (unsigned int) length;
  D.31685 = D.31683 * length.208;
  length = (int) D.31685;
  i = i + 1;
  <D.23147>:
  D.31686 = klass->rank;
  D.31687 = (int) D.31686;
  if (D.31687 > i) goto <D.23146>; else goto <D.23148>;
  <D.23148>:
  <D.31679>:
  D.31688 = klass->element_class;
  D.31689 = D.31688->byval_arg.type;
  D.31690 = (int) D.31689;
  switch (D.31690) <default: <D.23163>, case 2: <D.23151>, case 3: <D.23154>, case 4: <D.23149>, case 5: <D.23150>, case 6: <D.23152>, case 7: <D.23153>, case 8: <D.23155>, case 9: <D.23156>, case 10: <D.23160>, case 11: <D.23161>, case 12: <D.23157>, case 13: <D.23162>, case 24: <D.23158>, case 25: <D.23159>>
  <D.23149>:
  <D.23150>:
  <D.23151>:
  D.31691 = length;
  return D.31691;
  <D.23152>:
  <D.23153>:
  <D.23154>:
  D.31691 = length << 1;
  return D.31691;
  <D.23155>:
  <D.23156>:
  <D.23157>:
  D.31691 = length << 2;
  return D.31691;
  <D.23158>:
  <D.23159>:
  length.209 = (unsigned int) length;
  D.31693 = length.209 * 8;
  D.31691 = (gint32) D.31693;
  return D.31691;
  <D.23160>:
  <D.23161>:
  <D.23162>:
  D.31691 = length << 3;
  return D.31691;
  <D.23163>:
  D.31691 = -1;
  return D.31691;
}


ves_icall_System_Buffer_BlockCopyInternal (struct MonoArray * src, gint32 src_offset, struct MonoArray * dest, gint32 dest_offset, gint32 count)
{
  _Bool D.31695;
  long int D.31696;
  long int D.31697;
  _Bool D.31702;
  long int D.31703;
  long int D.31704;
  int D.31711;
  int D.31712;
  int D.31714;
  int D.31715;
  MonoBoolean D.31716;
  double[0:] * D.31717;
  sizetype D.31718;
  double[0:] * D.31719;
  sizetype D.31720;
  long unsigned int D.31723;
  guint8 * src_buf;
  guint8 * dest_buf;

  D.31695 = src == 0B;
  D.31696 = (long int) D.31695;
  D.31697 = __builtin_expect (D.31696, 0);
  if (D.31697 != 0) goto <D.31698>; else goto <D.31699>;
  <D.31698>:
  {
    struct MonoException * ex;

    if (src != 0B) goto <D.31700>; else goto <D.31701>;
    <D.31700>:
    <D.31701>:
    ex = mono_get_exception_argument_null ("src");
    mono_raise_exception (ex);
  }
  <D.31699>:
  D.31702 = dest == 0B;
  D.31703 = (long int) D.31702;
  D.31704 = __builtin_expect (D.31703, 0);
  if (D.31704 != 0) goto <D.31705>; else goto <D.31706>;
  <D.31705>:
  {
    struct MonoException * ex;

    if (dest != 0B) goto <D.31707>; else goto <D.31708>;
    <D.31707>:
    <D.31708>:
    ex = mono_get_exception_argument_null ("dest");
    mono_raise_exception (ex);
  }
  <D.31706>:
  D.31711 = mono_array_get_byte_length (src);
  D.31712 = D.31711 - count;
  if (D.31712 < src_offset) goto <D.31709>; else goto <D.31713>;
  <D.31713>:
  D.31714 = mono_array_get_byte_length (dest);
  D.31715 = D.31714 - count;
  if (D.31715 < dest_offset) goto <D.31709>; else goto <D.31710>;
  <D.31709>:
  D.31716 = 0;
  return D.31716;
  <D.31710>:
  D.31717 = &src->vector;
  D.31718 = (sizetype) src_offset;
  src_buf = D.31717 + D.31718;
  D.31719 = &dest->vector;
  D.31720 = (sizetype) dest_offset;
  dest_buf = D.31719 + D.31720;
  if (src != dest) goto <D.31721>; else goto <D.31722>;
  <D.31721>:
  D.31723 = (long unsigned int) count;
  memcpy (dest_buf, src_buf, D.31723);
  goto <D.31724>;
  <D.31722>:
  D.31723 = (long unsigned int) count;
  memmove (dest_buf, src_buf, D.31723);
  <D.31724>:
  D.31716 = 1;
  return D.31716;
}


memmove (void * __dest, const void * __src, size_t __len)
{
  void * D.31726;
  long unsigned int D.31727;

  D.31727 = __builtin_object_size (__dest, 0);
  D.31726 = __builtin___memmove_chk (__dest, __src, __len, D.31727);
  return D.31726;
}


ves_icall_System_Array_SetValueImpl (struct MonoArray * this, struct MonoObject * value, guint32 pos)
{
  struct MonoVTable * D.31731;
  struct MonoVTable * D.31733;
  double[0:] * D.31734;
  unsigned int esize.210;
  unsigned int D.31736;
  sizetype D.31737;
  int D.31738;
  long unsigned int D.31743;
  unsigned char D.31744;
  int D.31745;
  unsigned char D.31746;
  int D.31747;
  struct MonoRuntimeCallbacks * D.31748;
  void (*<T27a1>) (struct MonoClass *, struct MonoClass *) D.31749;
  struct MonoException * D.31750;
  struct MonoException * D.31751;
  struct MonoRuntimeCallbacks * D.31752;
  void (*<T27a1>) (struct MonoClass *, struct MonoClass *) D.31753;
  struct MonoException * D.31754;
  unsigned char D.31756;
  unsigned char D.31757;
  struct MonoObject * D.31760;
  struct MonoRuntimeCallbacks * D.31763;
  void (*<T27a1>) (struct MonoClass *, struct MonoClass *) D.31764;
  struct MonoException * D.31765;
  struct MonoObject * D.31766;
  unsigned char D.31769;
  unsigned char D.31770;
  void * D.31773;
  const void * D.31775;
  unsigned char D.31776;
  unsigned char D.31777;
  struct MonoRuntimeCallbacks * D.31780;
  void (*<T27a1>) (struct MonoClass *, struct MonoClass *) D.31781;
  struct MonoException * D.31782;
  int D.31783;
  unsigned int D.31784;
  unsigned int D.31785;
  struct MonoClass * D.31788;
  unsigned char D.31789;
  unsigned char D.31790;
  struct MonoType * D.31793;
  unsigned char D.31794;
  struct MonoClass * D.31797;
  unsigned char D.31798;
  unsigned char D.31799;
  struct MonoType * D.31802;
  unsigned char D.31803;
  unsigned char D.31804;
  short unsigned int D.31805;
  unsigned int D.31806;
  signed char D.31807;
  short int D.31808;
  int D.31809;
  float D.31810;
  struct MonoException * D.31811;
  struct MonoRuntimeCallbacks * D.31812;
  void (*<T27a1>) (struct MonoClass *, struct MonoClass *) D.31813;
  struct MonoException * D.31814;
  struct MonoException * D.31818;
  short unsigned int D.31819;
  struct MonoException * D.31820;
  struct MonoException * D.31824;
  unsigned char D.31825;
  struct MonoException * D.31826;
  struct MonoException * D.31830;
  struct MonoException * D.31831;
  struct MonoException * D.31835;
  unsigned int D.31836;
  struct MonoException * D.31837;
  struct MonoException * D.31841;
  struct MonoException * D.31842;
  struct MonoException * D.31846;
  signed char D.31847;
  struct MonoException * D.31850;
  signed char D.31851;
  struct MonoException * D.31852;
  struct MonoException * D.31856;
  short int D.31857;
  struct MonoException * D.31860;
  short int D.31861;
  struct MonoException * D.31862;
  struct MonoException * D.31866;
  int D.31867;
  struct MonoException * D.31870;
  int D.31871;
  struct MonoException * D.31872;
  struct MonoException * D.31876;
  struct MonoException * D.31879;
  long int u64.211;
  struct MonoException * D.31881;
  struct MonoException * D.31885;
  float D.31886;
  float D.31887;
  float D.31888;
  struct MonoException * D.31892;
  double D.31893;
  double D.31894;
  struct MonoRuntimeCallbacks * D.31897;
  void (*<T27a1>) (struct MonoClass *, struct MonoClass *) D.31898;
  struct MonoException * D.31899;
  struct MonoClass * ac;
  struct MonoClass * vc;
  struct MonoClass * ec;
  gint32 esize;
  gint32 vsize;
  void * * ea;
  void * * va;
  int et;
  int vt;
  guint64 u64;
  gint64 i64;
  gdouble r64;

  u64 = 0;
  i64 = 0;
  r64 = 0.0;
  if (value != 0B) goto <D.31729>; else goto <D.31730>;
  <D.31729>:
  D.31731 = value->vtable;
  vc = D.31731->klass;
  goto <D.31732>;
  <D.31730>:
  vc = 0B;
  <D.31732>:
  D.31733 = this->obj.vtable;
  ac = D.31733->klass;
  ec = ac->element_class;
  esize = mono_array_element_size (ac);
  D.31734 = &this->vector;
  esize.210 = (unsigned int) esize;
  D.31736 = pos * esize.210;
  D.31737 = (sizetype) D.31736;
  ea = D.31734 + D.31737;
  va = value + 16;
  D.31738 = mono_class_is_nullable (ec);
  if (D.31738 != 0) goto <D.31739>; else goto <D.31740>;
  <D.31739>:
  mono_nullable_init (ea, value, ec);
  return;
  <D.31740>:
  if (value == 0B) goto <D.31741>; else goto <D.31742>;
  <D.31741>:
  D.31743 = (long unsigned int) esize;
  mono_gc_bzero_atomic (ea, D.31743);
  return;
  <D.31742>:
  D.31744 = ec->byval_arg.type;
  D.31745 = (int) D.31744;
  switch (D.31745) <default: <D.31755>, case 2: <D.20741>, case 14: <D.20736>>
  <D.20736>:
  D.31746 = vc->byval_arg.type;
  D.31747 = (int) D.31746;
  switch (D.31747) <default: <D.20739>, case 14: <D.20737>>
  <D.20737>:
  goto <D.20738>;
  <D.20739>:
  D.31748 = mono_get_runtime_callbacks ();
  D.31749 = D.31748->set_cast_details;
  D.31749 (vc, ec);
  D.31750 = mono_get_exception_invalid_cast ();
  mono_raise_exception (D.31750);
  <D.20738>:
  goto <D.20740>;
  <D.20741>:
  D.31746 = vc->byval_arg.type;
  D.31747 = (int) D.31746;
  switch (D.31747) <default: <D.20755>, case 2: <D.20742>, case 3: <D.20744>, case 4: <D.20749>, case 5: <D.20745>, case 6: <D.20750>, case 7: <D.20746>, case 8: <D.20751>, case 9: <D.20747>, case 10: <D.20752>, case 11: <D.20748>, case 12: <D.20753>, case 13: <D.20754>>
  <D.20742>:
  goto <D.20743>;
  <D.20744>:
  <D.20745>:
  <D.20746>:
  <D.20747>:
  <D.20748>:
  <D.20749>:
  <D.20750>:
  <D.20751>:
  <D.20752>:
  <D.20753>:
  <D.20754>:
  D.31751 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31751);
  <D.20755>:
  D.31752 = mono_get_runtime_callbacks ();
  D.31753 = D.31752->set_cast_details;
  D.31753 (vc, ec);
  D.31754 = mono_get_exception_invalid_cast ();
  mono_raise_exception (D.31754);
  <D.20743>:
  goto <D.20740>;
  <D.31755>:
  <D.20740>:
  D.31756 = BIT_FIELD_REF <*ec, 8, 256>;
  D.31757 = D.31756 & 8;
  if (D.31757 == 0) goto <D.31758>; else goto <D.31759>;
  <D.31758>:
  D.31760 = mono_object_isinst (value, ec);
  if (D.31760 == 0B) goto <D.31761>; else goto <D.31762>;
  <D.31761>:
  D.31763 = mono_get_runtime_callbacks ();
  D.31764 = D.31763->set_cast_details;
  D.31764 (vc, ec);
  D.31765 = mono_get_exception_invalid_cast ();
  mono_raise_exception (D.31765);
  <D.31762>:
  mono_gc_wbarrier_set_arrayref (this, ea, value);
  return;
  <D.31759>:
  D.31766 = mono_object_isinst (value, ec);
  if (D.31766 != 0B) goto <D.31767>; else goto <D.31768>;
  <D.31767>:
  D.31769 = BIT_FIELD_REF <*ec, 8, 280>;
  D.31770 = D.31769 & 8;
  if (D.31770 != 0) goto <D.31771>; else goto <D.31772>;
  <D.31771>:
  D.31773 = value + 16;
  mono_value_copy (ea, D.31773, ec);
  goto <D.31774>;
  <D.31772>:
  D.31743 = (long unsigned int) esize;
  D.31775 = value + 16;
  mono_gc_memmove_atomic (ea, D.31775, D.31743);
  <D.31774>:
  return;
  <D.31768>:
  D.31776 = BIT_FIELD_REF <*vc, 8, 256>;
  D.31777 = D.31776 & 8;
  if (D.31777 == 0) goto <D.31778>; else goto <D.31779>;
  <D.31778>:
  D.31780 = mono_get_runtime_callbacks ();
  D.31781 = D.31780->set_cast_details;
  D.31781 (vc, ec);
  D.31782 = mono_get_exception_invalid_cast ();
  mono_raise_exception (D.31782);
  <D.31779>:
  D.31783 = mono_class_instance_size (vc);
  D.31784 = (unsigned int) D.31783;
  D.31785 = D.31784 + 4294967280;
  vsize = (gint32) D.31785;
  D.31744 = ec->byval_arg.type;
  et = (int) D.31744;
  if (et == 17) goto <D.31786>; else goto <D.31787>;
  <D.31786>:
  D.31788 = ec->byval_arg.data.klass;
  D.31789 = BIT_FIELD_REF <*D.31788, 8, 256>;
  D.31790 = D.31789 & 16;
  if (D.31790 != 0) goto <D.31791>; else goto <D.31792>;
  <D.31791>:
  D.31788 = ec->byval_arg.data.klass;
  D.31793 = mono_class_enum_basetype (D.31788);
  D.31794 = D.31793->type;
  et = (int) D.31794;
  <D.31792>:
  <D.31787>:
  D.31746 = vc->byval_arg.type;
  vt = (int) D.31746;
  if (vt == 17) goto <D.31795>; else goto <D.31796>;
  <D.31795>:
  D.31797 = vc->byval_arg.data.klass;
  D.31798 = BIT_FIELD_REF <*D.31797, 8, 256>;
  D.31799 = D.31798 & 16;
  if (D.31799 != 0) goto <D.31800>; else goto <D.31801>;
  <D.31800>:
  D.31797 = vc->byval_arg.data.klass;
  D.31802 = mono_class_enum_basetype (D.31797);
  D.31803 = D.31802->type;
  vt = (int) D.31803;
  <D.31801>:
  <D.31796>:
  switch (vt) <default: <D.31815>, case 2: <D.20768>, case 3: <D.20767>, case 4: <D.20761>, case 5: <D.20756>, case 6: <D.20762>, case 7: <D.20758>, case 8: <D.20763>, case 9: <D.20759>, case 10: <D.20764>, case 11: <D.20760>, case 12: <D.20765>, case 13: <D.20766>>
  <D.20756>:
  D.31804 = MEM[(guint8 *)va];
  u64 = (guint64) D.31804;
  goto <D.20757>;
  <D.20758>:
  D.31805 = MEM[(guint16 *)va];
  u64 = (guint64) D.31805;
  goto <D.20757>;
  <D.20759>:
  D.31806 = MEM[(guint32 *)va];
  u64 = (guint64) D.31806;
  goto <D.20757>;
  <D.20760>:
  u64 = MEM[(guint64 *)va];
  goto <D.20757>;
  <D.20761>:
  D.31807 = MEM[(gint8 *)va];
  i64 = (gint64) D.31807;
  goto <D.20757>;
  <D.20762>:
  D.31808 = MEM[(gint16 *)va];
  i64 = (gint64) D.31808;
  goto <D.20757>;
  <D.20763>:
  D.31809 = MEM[(gint32 *)va];
  i64 = (gint64) D.31809;
  goto <D.20757>;
  <D.20764>:
  i64 = MEM[(gint64 *)va];
  goto <D.20757>;
  <D.20765>:
  D.31810 = MEM[(gfloat *)va];
  r64 = (gdouble) D.31810;
  goto <D.20757>;
  <D.20766>:
  r64 = MEM[(gdouble *)va];
  goto <D.20757>;
  <D.20767>:
  D.31805 = MEM[(guint16 *)va];
  u64 = (guint64) D.31805;
  goto <D.20757>;
  <D.20768>:
  switch (et) <default: <D.20780>, case 3: <D.20769>, case 4: <D.20774>, case 5: <D.20770>, case 6: <D.20775>, case 7: <D.20771>, case 8: <D.20776>, case 9: <D.20772>, case 10: <D.20777>, case 11: <D.20773>, case 12: <D.20778>, case 13: <D.20779>>
  <D.20769>:
  <D.20770>:
  <D.20771>:
  <D.20772>:
  <D.20773>:
  <D.20774>:
  <D.20775>:
  <D.20776>:
  <D.20777>:
  <D.20778>:
  <D.20779>:
  D.31811 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31811);
  <D.20780>:
  D.31812 = mono_get_runtime_callbacks ();
  D.31813 = D.31812->set_cast_details;
  D.31813 (vc, ec);
  D.31814 = mono_get_exception_invalid_cast ();
  mono_raise_exception (D.31814);
  goto <D.20757>;
  <D.31815>:
  <D.20757>:
  switch (et) <default: <D.31896>, case 3: <D.20781>, case 4: <D.20841>, case 5: <D.20793>, case 6: <D.20853>, case 7: <D.20805>, case 8: <D.20865>, case 9: <D.20817>, case 10: <D.20877>, case 11: <D.20829>, case 12: <D.20889>, case 13: <D.20901>>
  <D.20781>:
  switch (vt) <default: <D.31821>, case 3: <D.20786>, case 4: <D.20787>, case 5: <D.20782>, case 6: <D.20788>, case 7: <D.20783>, case 8: <D.20789>, case 9: <D.20784>, case 10: <D.20790>, case 11: <D.20785>, case 12: <D.20791>, case 13: <D.20792>>
  <D.20782>:
  <D.20783>:
  <D.20784>:
  <D.20785>:
  <D.20786>:
  if (esize < vsize) goto <D.31816>; else goto <D.31817>;
  <D.31816>:
  D.31818 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31818);
  <D.31817>:
  D.31819 = (short unsigned int) u64;
  MEM[(guint16 *)ea] = D.31819;
  return;
  <D.20787>:
  <D.20788>:
  <D.20789>:
  <D.20790>:
  <D.20791>:
  <D.20792>:
  D.31820 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31820);
  <D.31821>:
  <D.20793>:
  switch (vt) <default: <D.31827>, case 3: <D.20798>, case 4: <D.20799>, case 5: <D.20794>, case 6: <D.20800>, case 7: <D.20795>, case 8: <D.20801>, case 9: <D.20796>, case 10: <D.20802>, case 11: <D.20797>, case 12: <D.20803>, case 13: <D.20804>>
  <D.20794>:
  <D.20795>:
  <D.20796>:
  <D.20797>:
  <D.20798>:
  if (esize < vsize) goto <D.31822>; else goto <D.31823>;
  <D.31822>:
  D.31824 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31824);
  <D.31823>:
  D.31825 = (unsigned char) u64;
  MEM[(guint8 *)ea] = D.31825;
  return;
  <D.20799>:
  <D.20800>:
  <D.20801>:
  <D.20802>:
  <D.20803>:
  <D.20804>:
  D.31826 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31826);
  <D.31827>:
  <D.20805>:
  switch (vt) <default: <D.31832>, case 3: <D.20810>, case 4: <D.20811>, case 5: <D.20806>, case 6: <D.20812>, case 7: <D.20807>, case 8: <D.20813>, case 9: <D.20808>, case 10: <D.20814>, case 11: <D.20809>, case 12: <D.20815>, case 13: <D.20816>>
  <D.20806>:
  <D.20807>:
  <D.20808>:
  <D.20809>:
  <D.20810>:
  if (esize < vsize) goto <D.31828>; else goto <D.31829>;
  <D.31828>:
  D.31830 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31830);
  <D.31829>:
  D.31819 = (short unsigned int) u64;
  MEM[(guint16 *)ea] = D.31819;
  return;
  <D.20811>:
  <D.20812>:
  <D.20813>:
  <D.20814>:
  <D.20815>:
  <D.20816>:
  D.31831 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31831);
  <D.31832>:
  <D.20817>:
  switch (vt) <default: <D.31838>, case 3: <D.20822>, case 4: <D.20823>, case 5: <D.20818>, case 6: <D.20824>, case 7: <D.20819>, case 8: <D.20825>, case 9: <D.20820>, case 10: <D.20826>, case 11: <D.20821>, case 12: <D.20827>, case 13: <D.20828>>
  <D.20818>:
  <D.20819>:
  <D.20820>:
  <D.20821>:
  <D.20822>:
  if (esize < vsize) goto <D.31833>; else goto <D.31834>;
  <D.31833>:
  D.31835 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31835);
  <D.31834>:
  D.31836 = (unsigned int) u64;
  MEM[(guint32 *)ea] = D.31836;
  return;
  <D.20823>:
  <D.20824>:
  <D.20825>:
  <D.20826>:
  <D.20827>:
  <D.20828>:
  D.31837 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31837);
  <D.31838>:
  <D.20829>:
  switch (vt) <default: <D.31843>, case 3: <D.20834>, case 4: <D.20835>, case 5: <D.20830>, case 6: <D.20836>, case 7: <D.20831>, case 8: <D.20837>, case 9: <D.20832>, case 10: <D.20838>, case 11: <D.20833>, case 12: <D.20839>, case 13: <D.20840>>
  <D.20830>:
  <D.20831>:
  <D.20832>:
  <D.20833>:
  <D.20834>:
  if (esize < vsize) goto <D.31839>; else goto <D.31840>;
  <D.31839>:
  D.31841 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31841);
  <D.31840>:
  MEM[(guint64 *)ea] = u64;
  return;
  <D.20835>:
  <D.20836>:
  <D.20837>:
  <D.20838>:
  <D.20839>:
  <D.20840>:
  D.31842 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31842);
  <D.31843>:
  <D.20841>:
  switch (vt) <default: <D.31853>, case 3: <D.20850>, case 4: <D.20842>, case 5: <D.20846>, case 6: <D.20843>, case 7: <D.20847>, case 8: <D.20844>, case 9: <D.20848>, case 10: <D.20845>, case 11: <D.20849>, case 12: <D.20851>, case 13: <D.20852>>
  <D.20842>:
  <D.20843>:
  <D.20844>:
  <D.20845>:
  if (esize < vsize) goto <D.31844>; else goto <D.31845>;
  <D.31844>:
  D.31846 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31846);
  <D.31845>:
  D.31847 = (signed char) i64;
  MEM[(gint8 *)ea] = D.31847;
  return;
  <D.20846>:
  <D.20847>:
  <D.20848>:
  <D.20849>:
  <D.20850>:
  if (vsize >= esize) goto <D.31848>; else goto <D.31849>;
  <D.31848>:
  D.31850 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31850);
  <D.31849>:
  D.31851 = (signed char) u64;
  MEM[(gint8 *)ea] = D.31851;
  return;
  <D.20851>:
  <D.20852>:
  D.31852 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31852);
  <D.31853>:
  <D.20853>:
  switch (vt) <default: <D.31863>, case 3: <D.20862>, case 4: <D.20854>, case 5: <D.20858>, case 6: <D.20855>, case 7: <D.20859>, case 8: <D.20856>, case 9: <D.20860>, case 10: <D.20857>, case 11: <D.20861>, case 12: <D.20863>, case 13: <D.20864>>
  <D.20854>:
  <D.20855>:
  <D.20856>:
  <D.20857>:
  if (esize < vsize) goto <D.31854>; else goto <D.31855>;
  <D.31854>:
  D.31856 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31856);
  <D.31855>:
  D.31857 = (short int) i64;
  MEM[(gint16 *)ea] = D.31857;
  return;
  <D.20858>:
  <D.20859>:
  <D.20860>:
  <D.20861>:
  <D.20862>:
  if (vsize >= esize) goto <D.31858>; else goto <D.31859>;
  <D.31858>:
  D.31860 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31860);
  <D.31859>:
  D.31861 = (short int) u64;
  MEM[(gint16 *)ea] = D.31861;
  return;
  <D.20863>:
  <D.20864>:
  D.31862 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31862);
  <D.31863>:
  <D.20865>:
  switch (vt) <default: <D.31873>, case 3: <D.20874>, case 4: <D.20866>, case 5: <D.20870>, case 6: <D.20867>, case 7: <D.20871>, case 8: <D.20868>, case 9: <D.20872>, case 10: <D.20869>, case 11: <D.20873>, case 12: <D.20875>, case 13: <D.20876>>
  <D.20866>:
  <D.20867>:
  <D.20868>:
  <D.20869>:
  if (esize < vsize) goto <D.31864>; else goto <D.31865>;
  <D.31864>:
  D.31866 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31866);
  <D.31865>:
  D.31867 = (int) i64;
  MEM[(gint32 *)ea] = D.31867;
  return;
  <D.20870>:
  <D.20871>:
  <D.20872>:
  <D.20873>:
  <D.20874>:
  if (vsize >= esize) goto <D.31868>; else goto <D.31869>;
  <D.31868>:
  D.31870 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31870);
  <D.31869>:
  D.31871 = (int) u64;
  MEM[(gint32 *)ea] = D.31871;
  return;
  <D.20875>:
  <D.20876>:
  D.31872 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31872);
  <D.31873>:
  <D.20877>:
  switch (vt) <default: <D.31882>, case 3: <D.20886>, case 4: <D.20878>, case 5: <D.20882>, case 6: <D.20879>, case 7: <D.20883>, case 8: <D.20880>, case 9: <D.20884>, case 10: <D.20881>, case 11: <D.20885>, case 12: <D.20887>, case 13: <D.20888>>
  <D.20878>:
  <D.20879>:
  <D.20880>:
  <D.20881>:
  if (esize < vsize) goto <D.31874>; else goto <D.31875>;
  <D.31874>:
  D.31876 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31876);
  <D.31875>:
  MEM[(gint64 *)ea] = i64;
  return;
  <D.20882>:
  <D.20883>:
  <D.20884>:
  <D.20885>:
  <D.20886>:
  if (vsize >= esize) goto <D.31877>; else goto <D.31878>;
  <D.31877>:
  D.31879 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31879);
  <D.31878>:
  u64.211 = (long int) u64;
  MEM[(gint64 *)ea] = u64.211;
  return;
  <D.20887>:
  <D.20888>:
  D.31881 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31881);
  <D.31882>:
  <D.20889>:
  switch (vt) <default: <D.31889>, case 3: <D.20900>, case 4: <D.20892>, case 5: <D.20896>, case 6: <D.20893>, case 7: <D.20897>, case 8: <D.20894>, case 9: <D.20898>, case 10: <D.20895>, case 11: <D.20899>, case 12: <D.20890>, case 13: <D.20891>>
  <D.20890>:
  <D.20891>:
  if (esize < vsize) goto <D.31883>; else goto <D.31884>;
  <D.31883>:
  D.31885 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31885);
  <D.31884>:
  D.31886 = (float) r64;
  MEM[(gfloat *)ea] = D.31886;
  return;
  <D.20892>:
  <D.20893>:
  <D.20894>:
  <D.20895>:
  D.31887 = (float) i64;
  MEM[(gfloat *)ea] = D.31887;
  return;
  <D.20896>:
  <D.20897>:
  <D.20898>:
  <D.20899>:
  <D.20900>:
  D.31888 = (float) u64;
  MEM[(gfloat *)ea] = D.31888;
  return;
  <D.31889>:
  <D.20901>:
  switch (vt) <default: <D.31895>, case 3: <D.20912>, case 4: <D.20904>, case 5: <D.20908>, case 6: <D.20905>, case 7: <D.20909>, case 8: <D.20906>, case 9: <D.20910>, case 10: <D.20907>, case 11: <D.20911>, case 12: <D.20902>, case 13: <D.20903>>
  <D.20902>:
  <D.20903>:
  if (esize < vsize) goto <D.31890>; else goto <D.31891>;
  <D.31890>:
  D.31892 = mono_get_exception_argument ("value", "not a widening conversion");
  mono_raise_exception (D.31892);
  <D.31891>:
  MEM[(gdouble *)ea] = r64;
  return;
  <D.20904>:
  <D.20905>:
  <D.20906>:
  <D.20907>:
  D.31893 = (double) i64;
  MEM[(gdouble *)ea] = D.31893;
  return;
  <D.20908>:
  <D.20909>:
  <D.20910>:
  <D.20911>:
  <D.20912>:
  D.31894 = (double) u64;
  MEM[(gdouble *)ea] = D.31894;
  return;
  <D.31895>:
  <D.31896>:
  D.31897 = mono_get_runtime_callbacks ();
  D.31898 = D.31897->set_cast_details;
  D.31898 (vc, ec);
  D.31899 = mono_get_exception_invalid_cast ();
  mono_raise_exception (D.31899);
  return;
}


ves_icall_System_Array_SetValue (struct MonoArray * this, struct MonoObject * value, struct MonoArray * idxs)
{
  _Bool D.31903;
  long int D.31904;
  long int D.31905;
  struct MonoVTable * D.31910;
  struct MonoVTable * D.31911;
  unsigned char D.31912;
  _Bool D.31913;
  long int D.31914;
  long int D.31915;
  struct MonoArrayBounds * D.31920;
  unsigned int D.31922;
  unsigned char D.31923;
  unsigned int D.31924;
  struct MonoException * D.31925;
  struct MonoArrayBounds * D.31926;
  int D.31931;
  unsigned int D.31933;
  unsigned int D.31934;
  struct MonoException * D.31935;
  unsigned int D.31936;
  long unsigned int D.31939;
  long unsigned int D.31940;
  gint32 * D.31941;
  int D.31942;
  long unsigned int D.31943;
  struct MonoArrayBounds * D.31944;
  int D.31945;
  unsigned int D.31947;
  int D.31948;
  int D.31949;
  struct MonoException * D.31950;
  int D.31951;
  int D.31952;
  unsigned int pos.212;
  unsigned int D.31954;
  unsigned int D.31955;
  unsigned int D.31956;
  unsigned int D.31957;
  unsigned int D.31958;
  unsigned int pos.213;
  struct MonoClass * ac;
  struct MonoClass * ic;
  gint32 i;
  gint32 pos;
  gint32 * ind;

  D.31903 = idxs == 0B;
  D.31904 = (long int) D.31903;
  D.31905 = __builtin_expect (D.31904, 0);
  if (D.31905 != 0) goto <D.31906>; else goto <D.31907>;
  <D.31906>:
  {
    struct MonoException * ex;

    if (idxs != 0B) goto <D.31908>; else goto <D.31909>;
    <D.31908>:
    <D.31909>:
    ex = mono_get_exception_argument_null ("idxs");
    mono_raise_exception (ex);
  }
  <D.31907>:
  D.31910 = idxs->obj.vtable;
  ic = D.31910->klass;
  D.31911 = this->obj.vtable;
  ac = D.31911->klass;
  D.31912 = ic->rank;
  D.31913 = D.31912 != 1;
  D.31914 = (long int) D.31913;
  D.31915 = __builtin_expect (D.31914, 0);
  if (D.31915 != 0) goto <D.31916>; else goto <D.31917>;
  <D.31916>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 502, "ic->rank == 1");
  <D.31917>:
  D.31920 = idxs->bounds;
  if (D.31920 != 0B) goto <D.31918>; else goto <D.31921>;
  <D.31921>:
  D.31922 = idxs->max_length;
  D.31923 = ac->rank;
  D.31924 = (unsigned int) D.31923;
  if (D.31922 != D.31924) goto <D.31918>; else goto <D.31919>;
  <D.31918>:
  D.31925 = mono_get_exception_argument (0B, 0B);
  mono_raise_exception (D.31925);
  <D.31919>:
  ind = &idxs->vector;
  D.31926 = this->bounds;
  if (D.31926 == 0B) goto <D.31927>; else goto <D.31928>;
  <D.31927>:
  D.31931 = *ind;
  if (D.31931 < 0) goto <D.31929>; else goto <D.31932>;
  <D.31932>:
  D.31931 = *ind;
  D.31933 = (unsigned int) D.31931;
  D.31934 = this->max_length;
  if (D.31933 >= D.31934) goto <D.31929>; else goto <D.31930>;
  <D.31929>:
  D.31935 = mono_get_exception_index_out_of_range ();
  mono_raise_exception (D.31935);
  <D.31930>:
  D.31931 = *ind;
  D.31936 = (unsigned int) D.31931;
  ves_icall_System_Array_SetValueImpl (this, value, D.31936);
  return;
  <D.31928>:
  i = 0;
  goto <D.20925>;
  <D.20924>:
  D.31939 = (long unsigned int) i;
  D.31940 = D.31939 * 4;
  D.31941 = ind + D.31940;
  D.31942 = *D.31941;
  D.31926 = this->bounds;
  D.31939 = (long unsigned int) i;
  D.31943 = D.31939 * 8;
  D.31944 = D.31926 + D.31943;
  D.31945 = D.31944->lower_bound;
  if (D.31942 < D.31945) goto <D.31937>; else goto <D.31946>;
  <D.31946>:
  D.31939 = (long unsigned int) i;
  D.31940 = D.31939 * 4;
  D.31941 = ind + D.31940;
  D.31942 = *D.31941;
  D.31926 = this->bounds;
  D.31939 = (long unsigned int) i;
  D.31943 = D.31939 * 8;
  D.31944 = D.31926 + D.31943;
  D.31947 = D.31944->length;
  D.31948 = (int) D.31947;
  D.31926 = this->bounds;
  D.31939 = (long unsigned int) i;
  D.31943 = D.31939 * 8;
  D.31944 = D.31926 + D.31943;
  D.31945 = D.31944->lower_bound;
  D.31949 = D.31948 + D.31945;
  if (D.31942 >= D.31949) goto <D.31937>; else goto <D.31938>;
  <D.31937>:
  D.31950 = mono_get_exception_index_out_of_range ();
  mono_raise_exception (D.31950);
  <D.31938>:
  i = i + 1;
  <D.20925>:
  D.31923 = ac->rank;
  D.31951 = (int) D.31923;
  if (D.31951 > i) goto <D.20924>; else goto <D.20926>;
  <D.20926>:
  D.31931 = *ind;
  D.31926 = this->bounds;
  D.31952 = D.31926->lower_bound;
  pos = D.31931 - D.31952;
  i = 1;
  goto <D.20928>;
  <D.20927>:
  D.31926 = this->bounds;
  D.31939 = (long unsigned int) i;
  D.31943 = D.31939 * 8;
  D.31944 = D.31926 + D.31943;
  D.31947 = D.31944->length;
  pos.212 = (unsigned int) pos;
  D.31954 = D.31947 * pos.212;
  D.31939 = (long unsigned int) i;
  D.31940 = D.31939 * 4;
  D.31941 = ind + D.31940;
  D.31942 = *D.31941;
  D.31955 = (unsigned int) D.31942;
  D.31956 = D.31954 + D.31955;
  D.31926 = this->bounds;
  D.31939 = (long unsigned int) i;
  D.31943 = D.31939 * 8;
  D.31944 = D.31926 + D.31943;
  D.31945 = D.31944->lower_bound;
  D.31957 = (unsigned int) D.31945;
  D.31958 = D.31956 - D.31957;
  pos = (gint32) D.31958;
  i = i + 1;
  <D.20928>:
  D.31923 = ac->rank;
  D.31951 = (int) D.31923;
  if (D.31951 > i) goto <D.20927>; else goto <D.20929>;
  <D.20929>:
  pos.213 = (unsigned int) pos;
  ves_icall_System_Array_SetValueImpl (this, value, pos.213);
}


ves_icall_System_Array_SetGenericValueImpl (struct MonoObject * this, guint32 pos, void * value)
{
  struct MonoVTable * D.31961;
  double[0:] * D.31962;
  unsigned int esize.214;
  unsigned int D.31964;
  sizetype D.31965;
  struct MonoType * D.31966;
  int D.31967;
  _Bool D.31970;
  long int D.31971;
  long int D.31972;
  void * D.31975;
  unsigned char D.31977;
  unsigned char D.31978;
  _Bool D.31979;
  long int D.31980;
  long int D.31981;
  int D.31984;
  _Bool D.31985;
  long int D.31986;
  long int D.31987;
  unsigned char D.31990;
  unsigned char D.31991;
  long unsigned int D.31995;
  struct MonoClass * ac;
  struct MonoClass * ec;
  struct MonoArray * ao;
  gint32 esize;
  void * * ea;

  ao = this;
  D.31961 = ao->obj.vtable;
  ac = D.31961->klass;
  ec = ac->element_class;
  esize = mono_array_element_size (ac);
  D.31962 = &ao->vector;
  esize.214 = (unsigned int) esize;
  D.31964 = pos * esize.214;
  D.31965 = (sizetype) D.31964;
  ea = D.31962 + D.31965;
  D.31966 = &ec->byval_arg;
  D.31967 = mono_type_is_reference (D.31966);
  if (D.31967 != 0) goto <D.31968>; else goto <D.31969>;
  <D.31968>:
  D.31970 = esize != 8;
  D.31971 = (long int) D.31970;
  D.31972 = __builtin_expect (D.31971, 0);
  if (D.31972 != 0) goto <D.31973>; else goto <D.31974>;
  <D.31973>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 793, "esize == sizeof (gpointer)");
  <D.31974>:
  D.31975 = MEM[(void * *)value];
  mono_gc_wbarrier_generic_store (ea, D.31975);
  goto <D.31976>;
  <D.31969>:
  D.31977 = BIT_FIELD_REF <*ec, 8, 256>;
  D.31978 = D.31977 & 1;
  D.31979 = D.31978 == 0;
  D.31980 = (long int) D.31979;
  D.31981 = __builtin_expect (D.31980, 0);
  if (D.31981 != 0) goto <D.31982>; else goto <D.31983>;
  <D.31982>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 796, "ec->inited");
  <D.31983>:
  D.31984 = mono_class_value_size (ec, 0B);
  D.31985 = D.31984 != esize;
  D.31986 = (long int) D.31985;
  D.31987 = __builtin_expect (D.31986, 0);
  if (D.31987 != 0) goto <D.31988>; else goto <D.31989>;
  <D.31988>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 797, "esize == mono_class_value_size (ec, NULL)");
  <D.31989>:
  D.31990 = BIT_FIELD_REF <*ec, 8, 280>;
  D.31991 = D.31990 & 8;
  if (D.31991 != 0) goto <D.31992>; else goto <D.31993>;
  <D.31992>:
  mono_gc_wbarrier_value_copy (ea, value, 1, ec);
  goto <D.31994>;
  <D.31993>:
  D.31995 = (long unsigned int) esize;
  mono_gc_memmove_atomic (ea, value, D.31995);
  <D.31994>:
  <D.31976>:
}


ves_icall_System_Array_GetValueImpl (struct MonoObject * this, guint32 pos)
{
  struct MonoVTable * D.31996;
  double[0:] * D.31997;
  unsigned int esize.215;
  unsigned int D.31999;
  sizetype D.32000;
  struct MonoClass * D.32001;
  unsigned char D.32002;
  unsigned char D.32003;
  struct MonoObject * D.32006;
  struct MonoVTable * D.32007;
  struct MonoDomain * D.32008;
  struct MonoClass * ac;
  struct MonoArray * ao;
  gint32 esize;
  void * * ea;

  ao = this;
  D.31996 = ao->obj.vtable;
  ac = D.31996->klass;
  esize = mono_array_element_size (ac);
  D.31997 = &ao->vector;
  esize.215 = (unsigned int) esize;
  D.31999 = pos * esize.215;
  D.32000 = (sizetype) D.31999;
  ea = D.31997 + D.32000;
  D.32001 = ac->element_class;
  D.32002 = BIT_FIELD_REF <*D.32001, 8, 256>;
  D.32003 = D.32002 & 8;
  if (D.32003 != 0) goto <D.32004>; else goto <D.32005>;
  <D.32004>:
  D.32001 = ac->element_class;
  D.32007 = this->vtable;
  D.32008 = D.32007->domain;
  D.32006 = mono_value_box (D.32008, D.32001, ea);
  return D.32006;
  <D.32005>:
  D.32006 = *ea;
  return D.32006;
}


ves_icall_System_Array_GetValue (struct MonoObject * this, struct MonoObject * idxs)
{
  _Bool D.32010;
  long int D.32011;
  long int D.32012;
  struct MonoVTable * D.32017;
  struct MonoVTable * D.32018;
  unsigned char D.32019;
  _Bool D.32020;
  long int D.32021;
  long int D.32022;
  struct MonoArrayBounds * D.32027;
  unsigned int D.32029;
  unsigned char D.32030;
  unsigned int D.32031;
  struct MonoException * D.32032;
  struct MonoArrayBounds * D.32033;
  int D.32038;
  unsigned int D.32040;
  unsigned int D.32041;
  struct MonoException * D.32042;
  struct MonoObject * D.32043;
  unsigned int D.32044;
  long unsigned int D.32047;
  long unsigned int D.32048;
  gint32 * D.32049;
  int D.32050;
  long unsigned int D.32051;
  struct MonoArrayBounds * D.32052;
  int D.32053;
  unsigned int D.32055;
  int D.32056;
  int D.32057;
  struct MonoException * D.32058;
  int D.32059;
  int D.32060;
  unsigned int pos.216;
  unsigned int D.32062;
  unsigned int D.32063;
  unsigned int D.32064;
  unsigned int D.32065;
  unsigned int D.32066;
  unsigned int pos.217;
  struct MonoClass * ac;
  struct MonoClass * ic;
  struct MonoArray * ao;
  struct MonoArray * io;
  gint32 i;
  gint32 pos;
  gint32 * ind;

  D.32010 = idxs == 0B;
  D.32011 = (long int) D.32010;
  D.32012 = __builtin_expect (D.32011, 0);
  if (D.32012 != 0) goto <D.32013>; else goto <D.32014>;
  <D.32013>:
  {
    struct MonoException * ex;

    if (idxs != 0B) goto <D.32015>; else goto <D.32016>;
    <D.32015>:
    <D.32016>:
    ex = mono_get_exception_argument_null ("idxs");
    mono_raise_exception (ex);
  }
  <D.32014>:
  io = idxs;
  D.32017 = io->obj.vtable;
  ic = D.32017->klass;
  ao = this;
  D.32018 = ao->obj.vtable;
  ac = D.32018->klass;
  D.32019 = ic->rank;
  D.32020 = D.32019 != 1;
  D.32021 = (long int) D.32020;
  D.32022 = __builtin_expect (D.32021, 0);
  if (D.32022 != 0) goto <D.32023>; else goto <D.32024>;
  <D.32023>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 184, "ic->rank == 1");
  <D.32024>:
  D.32027 = io->bounds;
  if (D.32027 != 0B) goto <D.32025>; else goto <D.32028>;
  <D.32028>:
  D.32029 = io->max_length;
  D.32030 = ac->rank;
  D.32031 = (unsigned int) D.32030;
  if (D.32029 != D.32031) goto <D.32025>; else goto <D.32026>;
  <D.32025>:
  D.32032 = mono_get_exception_argument (0B, 0B);
  mono_raise_exception (D.32032);
  <D.32026>:
  ind = &io->vector;
  D.32033 = ao->bounds;
  if (D.32033 == 0B) goto <D.32034>; else goto <D.32035>;
  <D.32034>:
  D.32038 = *ind;
  if (D.32038 < 0) goto <D.32036>; else goto <D.32039>;
  <D.32039>:
  D.32038 = *ind;
  D.32040 = (unsigned int) D.32038;
  D.32041 = ao->max_length;
  if (D.32040 >= D.32041) goto <D.32036>; else goto <D.32037>;
  <D.32036>:
  D.32042 = mono_get_exception_index_out_of_range ();
  mono_raise_exception (D.32042);
  <D.32037>:
  D.32038 = *ind;
  D.32044 = (unsigned int) D.32038;
  D.32043 = ves_icall_System_Array_GetValueImpl (this, D.32044);
  return D.32043;
  <D.32035>:
  i = 0;
  goto <D.20714>;
  <D.20713>:
  D.32047 = (long unsigned int) i;
  D.32048 = D.32047 * 4;
  D.32049 = ind + D.32048;
  D.32050 = *D.32049;
  D.32033 = ao->bounds;
  D.32047 = (long unsigned int) i;
  D.32051 = D.32047 * 8;
  D.32052 = D.32033 + D.32051;
  D.32053 = D.32052->lower_bound;
  if (D.32050 < D.32053) goto <D.32045>; else goto <D.32054>;
  <D.32054>:
  D.32047 = (long unsigned int) i;
  D.32048 = D.32047 * 4;
  D.32049 = ind + D.32048;
  D.32050 = *D.32049;
  D.32033 = ao->bounds;
  D.32047 = (long unsigned int) i;
  D.32051 = D.32047 * 8;
  D.32052 = D.32033 + D.32051;
  D.32055 = D.32052->length;
  D.32056 = (int) D.32055;
  D.32033 = ao->bounds;
  D.32047 = (long unsigned int) i;
  D.32051 = D.32047 * 8;
  D.32052 = D.32033 + D.32051;
  D.32053 = D.32052->lower_bound;
  D.32057 = D.32056 + D.32053;
  if (D.32050 >= D.32057) goto <D.32045>; else goto <D.32046>;
  <D.32045>:
  D.32058 = mono_get_exception_index_out_of_range ();
  mono_raise_exception (D.32058);
  <D.32046>:
  i = i + 1;
  <D.20714>:
  D.32030 = ac->rank;
  D.32059 = (int) D.32030;
  if (D.32059 > i) goto <D.20713>; else goto <D.20715>;
  <D.20715>:
  D.32038 = *ind;
  D.32033 = ao->bounds;
  D.32060 = D.32033->lower_bound;
  pos = D.32038 - D.32060;
  i = 1;
  goto <D.20717>;
  <D.20716>:
  D.32033 = ao->bounds;
  D.32047 = (long unsigned int) i;
  D.32051 = D.32047 * 8;
  D.32052 = D.32033 + D.32051;
  D.32055 = D.32052->length;
  pos.216 = (unsigned int) pos;
  D.32062 = D.32055 * pos.216;
  D.32047 = (long unsigned int) i;
  D.32048 = D.32047 * 4;
  D.32049 = ind + D.32048;
  D.32050 = *D.32049;
  D.32063 = (unsigned int) D.32050;
  D.32064 = D.32062 + D.32063;
  D.32033 = ao->bounds;
  D.32047 = (long unsigned int) i;
  D.32051 = D.32047 * 8;
  D.32052 = D.32033 + D.32051;
  D.32053 = D.32052->lower_bound;
  D.32065 = (unsigned int) D.32053;
  D.32066 = D.32064 - D.32065;
  pos = (gint32) D.32066;
  i = i + 1;
  <D.20717>:
  D.32030 = ac->rank;
  D.32059 = (int) D.32030;
  if (D.32059 > i) goto <D.20716>; else goto <D.20718>;
  <D.20718>:
  pos.217 = (unsigned int) pos;
  D.32043 = ves_icall_System_Array_GetValueImpl (this, pos.217);
  return D.32043;
}


ves_icall_System_Array_GetRank (struct MonoObject * this)
{
  gint32 D.32069;
  struct MonoVTable * D.32070;
  struct MonoClass * D.32071;
  unsigned char D.32072;

  D.32070 = this->vtable;
  D.32071 = D.32070->klass;
  D.32072 = D.32071->rank;
  D.32069 = (gint32) D.32072;
  return D.32069;
}


ves_icall_System_Array_GetLowerBound (struct MonoArray * this, gint32 dimension)
{
  struct MonoVTable * D.32074;
  struct MonoClass * D.32075;
  unsigned char D.32076;
  _Bool D.32077;
  _Bool D.32078;
  _Bool D.32079;
  struct MonoException * D.32082;
  struct MonoArrayBounds * D.32083;
  gint32 D.32086;
  long unsigned int D.32087;
  long unsigned int D.32088;
  struct MonoArrayBounds * D.32089;
  gint32 rank;

  D.32074 = MEM[(struct MonoObject *)this].vtable;
  D.32075 = D.32074->klass;
  D.32076 = D.32075->rank;
  rank = (gint32) D.32076;
  D.32077 = dimension < 0;
  D.32078 = dimension >= rank;
  D.32079 = D.32077 | D.32078;
  if (D.32079 != 0) goto <D.32080>; else goto <D.32081>;
  <D.32080>:
  D.32082 = mono_get_exception_index_out_of_range ();
  mono_raise_exception (D.32082);
  <D.32081>:
  D.32083 = this->bounds;
  if (D.32083 == 0B) goto <D.32084>; else goto <D.32085>;
  <D.32084>:
  D.32086 = 0;
  return D.32086;
  <D.32085>:
  D.32083 = this->bounds;
  D.32087 = (long unsigned int) dimension;
  D.32088 = D.32087 * 8;
  D.32089 = D.32083 + D.32088;
  D.32086 = D.32089->lower_bound;
  return D.32086;
}


ves_icall_System_Array_GetLongLength (struct MonoArray * this, gint32 dimension)
{
  struct MonoVTable * D.32091;
  struct MonoClass * D.32092;
  unsigned char D.32093;
  _Bool D.32094;
  _Bool D.32095;
  _Bool D.32096;
  struct MonoException * D.32099;
  struct MonoArrayBounds * D.32100;
  gint64 D.32103;
  unsigned int D.32104;
  long unsigned int D.32105;
  long unsigned int D.32106;
  struct MonoArrayBounds * D.32107;
  unsigned int D.32108;
  gint32 rank;

  D.32091 = MEM[(struct MonoObject *)this].vtable;
  D.32092 = D.32091->klass;
  D.32093 = D.32092->rank;
  rank = (gint32) D.32093;
  D.32094 = dimension < 0;
  D.32095 = dimension >= rank;
  D.32096 = D.32094 | D.32095;
  if (D.32096 != 0) goto <D.32097>; else goto <D.32098>;
  <D.32097>:
  D.32099 = mono_get_exception_index_out_of_range ();
  mono_raise_exception (D.32099);
  <D.32098>:
  D.32100 = this->bounds;
  if (D.32100 == 0B) goto <D.32101>; else goto <D.32102>;
  <D.32101>:
  D.32104 = this->max_length;
  D.32103 = (gint64) D.32104;
  return D.32103;
  <D.32102>:
  D.32100 = this->bounds;
  D.32105 = (long unsigned int) dimension;
  D.32106 = D.32105 * 8;
  D.32107 = D.32100 + D.32106;
  D.32108 = D.32107->length;
  D.32103 = (gint64) D.32108;
  return D.32103;
}


ves_icall_System_Array_GetLength (struct MonoArray * this, gint32 dimension)
{
  struct MonoVTable * D.32110;
  struct MonoClass * D.32111;
  unsigned char D.32112;
  _Bool D.32113;
  _Bool D.32114;
  _Bool D.32115;
  struct MonoException * D.32118;
  struct MonoArrayBounds * D.32119;
  unsigned int D.32122;
  long unsigned int D.32124;
  long unsigned int D.32125;
  struct MonoArrayBounds * D.32126;
  unsigned int D.32127;
  gint32 D.32128;
  gint32 rank;
  uintptr_t length;

  D.32110 = MEM[(struct MonoObject *)this].vtable;
  D.32111 = D.32110->klass;
  D.32112 = D.32111->rank;
  rank = (gint32) D.32112;
  D.32113 = dimension < 0;
  D.32114 = dimension >= rank;
  D.32115 = D.32113 | D.32114;
  if (D.32115 != 0) goto <D.32116>; else goto <D.32117>;
  <D.32116>:
  D.32118 = mono_get_exception_index_out_of_range ();
  mono_raise_exception (D.32118);
  <D.32117>:
  D.32119 = this->bounds;
  if (D.32119 == 0B) goto <D.32120>; else goto <D.32121>;
  <D.32120>:
  D.32122 = this->max_length;
  length = (uintptr_t) D.32122;
  goto <D.32123>;
  <D.32121>:
  D.32119 = this->bounds;
  D.32124 = (long unsigned int) dimension;
  D.32125 = D.32124 * 8;
  D.32126 = D.32119 + D.32125;
  D.32127 = D.32126->length;
  length = (uintptr_t) D.32127;
  <D.32123>:
  D.32128 = (gint32) length;
  return D.32128;
}


ves_icall_System_Array_GetGenericValueImpl (struct MonoObject * this, guint32 pos, void * value)
{
  struct MonoVTable * D.32130;
  double[0:] * D.32131;
  unsigned int esize.218;
  unsigned int D.32133;
  sizetype D.32134;
  long unsigned int D.32135;
  struct MonoClass * ac;
  struct MonoArray * ao;
  gint32 esize;
  void * * ea;

  ao = this;
  D.32130 = ao->obj.vtable;
  ac = D.32130->klass;
  esize = mono_array_element_size (ac);
  D.32131 = &ao->vector;
  esize.218 = (unsigned int) esize;
  D.32133 = pos * esize.218;
  D.32134 = (sizetype) D.32133;
  ea = D.32131 + D.32134;
  D.32135 = (long unsigned int) esize;
  mono_gc_memmove_atomic (value, ea, D.32135);
}


ves_icall_System_Array_FastCopy (struct MonoArray * source, int source_idx, struct MonoArray * dest, int dest_idx, int length)
{
  unsigned char D.32136;
  unsigned char D.32137;
  gboolean D.32140;
  struct MonoArrayBounds * D.32143;
  struct MonoArrayBounds * D.32145;
  int D.32148;
  unsigned int D.32149;
  unsigned int D.32150;
  int D.32152;
  unsigned int D.32153;
  unsigned int D.32154;
  struct MonoClass * D.32155;
  struct MonoClass * D.32156;
  struct MonoClass * D.32157;
  unsigned char D.32160;
  unsigned char D.32161;
  unsigned char D.32168;
  unsigned char D.32170;
  unsigned char D.32171;
  int D.32172;
  struct MonoVTable * D.32177;
  struct MonoClass * D.32178;
  double[0:] * D.32179;
  int D.32180;
  sizetype D.32181;
  unsigned char D.32182;
  unsigned char D.32183;
  double[0:] * D.32187;
  int D.32188;
  sizetype D.32189;
  int D.32190;
  long unsigned int D.32191;
  sizetype D.32193;
  sizetype D.32194;
  int element_size;
  void * dest_addr;
  void * source_addr;
  struct MonoVTable * src_vtable;
  struct MonoVTable * dest_vtable;
  struct MonoClass * src_class;
  struct MonoClass * dest_class;

  src_vtable = source->obj.vtable;
  dest_vtable = dest->obj.vtable;
  D.32136 = src_vtable->rank;
  D.32137 = dest_vtable->rank;
  if (D.32136 != D.32137) goto <D.32138>; else goto <D.32139>;
  <D.32138>:
  D.32140 = 0;
  return D.32140;
  <D.32139>:
  D.32143 = source->bounds;
  if (D.32143 != 0B) goto <D.32141>; else goto <D.32144>;
  <D.32144>:
  D.32145 = dest->bounds;
  if (D.32145 != 0B) goto <D.32141>; else goto <D.32142>;
  <D.32141>:
  D.32140 = 0;
  return D.32140;
  <D.32142>:
  D.32148 = dest_idx + length;
  D.32149 = (unsigned int) D.32148;
  D.32150 = dest->max_length;
  if (D.32149 > D.32150) goto <D.32146>; else goto <D.32151>;
  <D.32151>:
  D.32152 = source_idx + length;
  D.32153 = (unsigned int) D.32152;
  D.32154 = source->max_length;
  if (D.32153 > D.32154) goto <D.32146>; else goto <D.32147>;
  <D.32146>:
  D.32140 = 0;
  return D.32140;
  <D.32147>:
  D.32155 = src_vtable->klass;
  src_class = D.32155->element_class;
  D.32156 = dest_vtable->klass;
  dest_class = D.32156->element_class;
  D.32157 = mono_defaults.object_class;
  if (D.32157 == src_class) goto <D.32158>; else goto <D.32159>;
  <D.32158>:
  D.32160 = BIT_FIELD_REF <*dest_class, 8, 256>;
  D.32161 = D.32160 & 8;
  if (D.32161 != 0) goto <D.32162>; else goto <D.32163>;
  <D.32162>:
  D.32140 = 0;
  return D.32140;
  <D.32163>:
  <D.32159>:
  if (src_class != dest_class) goto <D.32164>; else goto <D.32165>;
  <D.32164>:
  D.32160 = BIT_FIELD_REF <*dest_class, 8, 256>;
  D.32168 = D.32160 & 24;
  if (D.32168 != 0) goto <D.32166>; else goto <D.32169>;
  <D.32169>:
  D.32170 = BIT_FIELD_REF <*src_class, 8, 256>;
  D.32171 = D.32170 & 24;
  if (D.32171 != 0) goto <D.32166>; else goto <D.32167>;
  <D.32166>:
  D.32140 = 0;
  return D.32140;
  <D.32167>:
  D.32172 = mono_class_is_subclass_of (src_class, dest_class, 0);
  if (D.32172 == 0) goto <D.32173>; else goto <D.32174>;
  <D.32173>:
  D.32140 = 0;
  return D.32140;
  <D.32174>:
  <D.32165>:
  D.32160 = BIT_FIELD_REF <*dest_class, 8, 256>;
  D.32161 = D.32160 & 8;
  if (D.32161 != 0) goto <D.32175>; else goto <D.32176>;
  <D.32175>:
  D.32177 = source->obj.vtable;
  D.32178 = D.32177->klass;
  element_size = mono_array_element_size (D.32178);
  D.32179 = &source->vector;
  D.32180 = element_size * source_idx;
  D.32181 = (sizetype) D.32180;
  source_addr = D.32179 + D.32181;
  D.32182 = BIT_FIELD_REF <*dest_class, 8, 280>;
  D.32183 = D.32182 & 8;
  if (D.32183 != 0) goto <D.32184>; else goto <D.32185>;
  <D.32184>:
  mono_value_copy_array (dest, dest_idx, source_addr, length);
  goto <D.32186>;
  <D.32185>:
  D.32187 = &dest->vector;
  D.32188 = element_size * dest_idx;
  D.32189 = (sizetype) D.32188;
  dest_addr = D.32187 + D.32189;
  D.32190 = element_size * length;
  D.32191 = (long unsigned int) D.32190;
  mono_gc_memmove_atomic (dest_addr, source_addr, D.32191);
  <D.32186>:
  goto <D.32192>;
  <D.32176>:
  {
    void * * __p;
    void * * __s;

    D.32193 = (sizetype) dest_idx;
    __p = &dest->vector[D.32193];
    D.32194 = (sizetype) source_idx;
    __s = &source->vector[D.32194];
    mono_gc_wbarrier_arrayref_copy (__p, __s, length);
  }
  <D.32192>:
  D.32140 = 1;
  return D.32140;
}


ves_icall_System_Array_CreateInstanceImpl64 (struct MonoReflectionType * type, struct MonoArray * lengths, struct MonoArray * bounds)
{
  _Bool D.32196;
  long int D.32197;
  long int D.32198;
  _Bool D.32203;
  long int D.32204;
  long int D.32205;
  long unsigned int D.32210;
  _Bool D.32211;
  long int D.32212;
  long int D.32213;
  long unsigned int D.32220;
  long unsigned int D.32221;
  _Bool D.32222;
  long int D.32223;
  long int D.32224;
  char * D.32231;
  long int D.32232;
  char * D.32234;
  long int D.32235;
  struct MonoException * D.32236;
  long unsigned int D.32237;
  struct MonoType * D.32238;
  long unsigned int D.32242;
  char * D.32244;
  long int D.32245;
  long unsigned int D.32247;
  unsigned int D.32248;
  unsigned char D.32249;
  long unsigned int D.32250;
  long unsigned int D.32251;
  long unsigned int D.32252;
  uintptr_t * D.32253;
  char * D.32254;
  long unsigned int D.32255;
  long unsigned int D.32258;
  long unsigned int D.32259;
  long unsigned int D.32260;
  uintptr_t * D.32261;
  char * D.32262;
  long unsigned int D.32263;
  unsigned int D.32264;
  long unsigned int D.32265;
  long unsigned int D.32267;
  intptr_t * D.32268;
  struct MonoVTable * D.32269;
  struct MonoDomain * D.32270;
  struct MonoArray * D.32271;
  struct MonoClass * aklass;
  struct MonoClass * klass;
  struct MonoArray * array;
  uintptr_t * sizes;
  uintptr_t i;
  gboolean bounded;

  bounded = 0;
  D.32196 = type == 0B;
  D.32197 = (long int) D.32196;
  D.32198 = __builtin_expect (D.32197, 0);
  if (D.32198 != 0) goto <D.32199>; else goto <D.32200>;
  <D.32199>:
  {
    struct MonoException * ex;

    if (type != 0B) goto <D.32201>; else goto <D.32202>;
    <D.32201>:
    <D.32202>:
    ex = mono_get_exception_argument_null ("type");
    mono_raise_exception (ex);
  }
  <D.32200>:
  D.32203 = lengths == 0B;
  D.32204 = (long int) D.32203;
  D.32205 = __builtin_expect (D.32204, 0);
  if (D.32205 != 0) goto <D.32206>; else goto <D.32207>;
  <D.32206>:
  {
    struct MonoException * ex;

    if (lengths != 0B) goto <D.32208>; else goto <D.32209>;
    <D.32208>:
    <D.32209>:
    ex = mono_get_exception_argument_null ("lengths");
    mono_raise_exception (ex);
  }
  <D.32207>:
  D.32210 = mono_array_length (lengths);
  D.32211 = D.32210 == 0;
  D.32212 = (long int) D.32211;
  D.32213 = __builtin_expect (D.32212, 0);
  if (D.32213 != 0) goto <D.32214>; else goto <D.32215>;
  <D.32214>:
  {
    struct MonoException * ex;
    char * msg;

    msg = monoeg_g_strdup_printf ("assertion `%s\' failed", "mono_array_length (lengths) > 0");
    if (lengths != 0B) goto <D.32216>; else goto <D.32217>;
    <D.32216>:
    <D.32217>:
    ex = mono_get_exception_argument ("lengths", msg);
    monoeg_g_free (msg);
    mono_raise_exception (ex);
  }
  <D.32215>:
  if (bounds != 0B) goto <D.32218>; else goto <D.32219>;
  <D.32218>:
  D.32220 = mono_array_length (lengths);
  D.32221 = mono_array_length (bounds);
  D.32222 = D.32220 != D.32221;
  D.32223 = (long int) D.32222;
  D.32224 = __builtin_expect (D.32223, 0);
  if (D.32224 != 0) goto <D.32225>; else goto <D.32226>;
  <D.32225>:
  {
    struct MonoException * ex;
    char * msg;

    msg = monoeg_g_strdup_printf ("assertion `%s\' failed", "mono_array_length (lengths) == mono_array_length (bounds)");
    if (bounds != 0B) goto <D.32227>; else goto <D.32228>;
    <D.32227>:
    <D.32228>:
    ex = mono_get_exception_argument ("bounds", msg);
    monoeg_g_free (msg);
    mono_raise_exception (ex);
  }
  <D.32226>:
  <D.32219>:
  i = 0;
  goto <D.20971>;
  <D.20970>:
  D.32231 = mono_array_addr_with_size (lengths, 8, i);
  D.32232 = MEM[(gint64 *)D.32231];
  if (D.32232 < 0) goto <D.32229>; else goto <D.32233>;
  <D.32233>:
  D.32234 = mono_array_addr_with_size (lengths, 8, i);
  D.32235 = MEM[(gint64 *)D.32234];
  if (D.32235 > 2147483647) goto <D.32229>; else goto <D.32230>;
  <D.32229>:
  D.32236 = mono_get_exception_argument_out_of_range (0B);
  mono_raise_exception (D.32236);
  <D.32230>:
  i = i + 1;
  <D.20971>:
  D.32237 = mono_array_length (lengths);
  if (D.32237 > i) goto <D.20970>; else goto <D.20972>;
  <D.20972>:
  D.32238 = type->type;
  klass = mono_class_from_mono_type (D.32238);
  mono_class_init_or_throw (klass);
  if (bounds != 0B) goto <D.32241>; else goto <D.32239>;
  <D.32241>:
  D.32242 = mono_array_length (bounds);
  if (D.32242 == 1) goto <D.32243>; else goto <D.32239>;
  <D.32243>:
  D.32244 = mono_array_addr_with_size (bounds, 8, 0);
  D.32245 = MEM[(gint64 *)D.32244];
  if (D.32245 != 0) goto <D.32246>; else goto <D.32239>;
  <D.32246>:
  bounded = 1;
  goto <D.32240>;
  <D.32239>:
  bounded = 0;
  <D.32240>:
  D.32247 = mono_array_length (lengths);
  D.32248 = (unsigned int) D.32247;
  aklass = mono_bounded_array_class_get (klass, D.32248, bounded);
  D.32249 = aklass->rank;
  D.32250 = (long unsigned int) D.32249;
  D.32251 = D.32250 * 16;
  sizes = __builtin_alloca (D.32251);
  i = 0;
  goto <D.20974>;
  <D.20973>:
  D.32252 = i * 8;
  D.32253 = sizes + D.32252;
  D.32254 = mono_array_addr_with_size (lengths, 8, i);
  D.32255 = MEM[(guint64 *)D.32254];
  *D.32253 = D.32255;
  if (bounds != 0B) goto <D.32256>; else goto <D.32257>;
  <D.32256>:
  D.32249 = aklass->rank;
  D.32258 = (long unsigned int) D.32249;
  D.32259 = D.32258 + i;
  D.32260 = D.32259 * 8;
  D.32261 = sizes + D.32260;
  D.32262 = mono_array_addr_with_size (bounds, 8, i);
  D.32263 = MEM[(guint64 *)D.32262];
  D.32264 = (unsigned int) D.32263;
  D.32265 = (long unsigned int) D.32264;
  *D.32261 = D.32265;
  goto <D.32266>;
  <D.32257>:
  D.32249 = aklass->rank;
  D.32258 = (long unsigned int) D.32249;
  D.32259 = D.32258 + i;
  D.32260 = D.32259 * 8;
  D.32261 = sizes + D.32260;
  *D.32261 = 0;
  <D.32266>:
  i = i + 1;
  <D.20974>:
  D.32249 = aklass->rank;
  D.32258 = (long unsigned int) D.32249;
  if (D.32258 > i) goto <D.20973>; else goto <D.20975>;
  <D.20975>:
  D.32249 = aklass->rank;
  D.32250 = (long unsigned int) D.32249;
  D.32267 = D.32250 * 8;
  D.32268 = sizes + D.32267;
  D.32269 = MEM[(struct MonoObject *)type].vtable;
  D.32270 = D.32269->domain;
  array = mono_array_new_full (D.32270, aklass, sizes, D.32268);
  D.32271 = array;
  return D.32271;
}


ves_icall_System_Array_CreateInstanceImpl (struct MonoReflectionType * type, struct MonoArray * lengths, struct MonoArray * bounds)
{
  _Bool D.32273;
  long int D.32274;
  long int D.32275;
  _Bool D.32280;
  long int D.32281;
  long int D.32282;
  long unsigned int D.32287;
  _Bool D.32288;
  long int D.32289;
  long int D.32290;
  long unsigned int D.32297;
  long unsigned int D.32298;
  _Bool D.32299;
  long int D.32300;
  long int D.32301;
  char * D.32306;
  int D.32307;
  struct MonoException * D.32310;
  long unsigned int D.32311;
  struct MonoType * D.32312;
  long unsigned int D.32316;
  char * D.32318;
  int D.32319;
  long unsigned int D.32321;
  unsigned int D.32322;
  unsigned char D.32323;
  long unsigned int D.32324;
  long unsigned int D.32325;
  long unsigned int D.32326;
  uintptr_t * D.32327;
  char * D.32328;
  unsigned int D.32329;
  long unsigned int D.32330;
  long unsigned int D.32333;
  long unsigned int D.32334;
  long unsigned int D.32335;
  uintptr_t * D.32336;
  char * D.32337;
  int D.32338;
  long unsigned int D.32339;
  long unsigned int D.32341;
  intptr_t * D.32342;
  struct MonoVTable * D.32343;
  struct MonoDomain * D.32344;
  struct MonoArray * D.32345;
  struct MonoClass * aklass;
  struct MonoClass * klass;
  struct MonoArray * array;
  uintptr_t * sizes;
  uintptr_t i;
  gboolean bounded;

  bounded = 0;
  D.32273 = type == 0B;
  D.32274 = (long int) D.32273;
  D.32275 = __builtin_expect (D.32274, 0);
  if (D.32275 != 0) goto <D.32276>; else goto <D.32277>;
  <D.32276>:
  {
    struct MonoException * ex;

    if (type != 0B) goto <D.32278>; else goto <D.32279>;
    <D.32278>:
    <D.32279>:
    ex = mono_get_exception_argument_null ("type");
    mono_raise_exception (ex);
  }
  <D.32277>:
  D.32280 = lengths == 0B;
  D.32281 = (long int) D.32280;
  D.32282 = __builtin_expect (D.32281, 0);
  if (D.32282 != 0) goto <D.32283>; else goto <D.32284>;
  <D.32283>:
  {
    struct MonoException * ex;

    if (lengths != 0B) goto <D.32285>; else goto <D.32286>;
    <D.32285>:
    <D.32286>:
    ex = mono_get_exception_argument_null ("lengths");
    mono_raise_exception (ex);
  }
  <D.32284>:
  D.32287 = mono_array_length (lengths);
  D.32288 = D.32287 == 0;
  D.32289 = (long int) D.32288;
  D.32290 = __builtin_expect (D.32289, 0);
  if (D.32290 != 0) goto <D.32291>; else goto <D.32292>;
  <D.32291>:
  {
    struct MonoException * ex;
    char * msg;

    msg = monoeg_g_strdup_printf ("assertion `%s\' failed", "mono_array_length (lengths) > 0");
    if (lengths != 0B) goto <D.32293>; else goto <D.32294>;
    <D.32293>:
    <D.32294>:
    ex = mono_get_exception_argument ("lengths", msg);
    monoeg_g_free (msg);
    mono_raise_exception (ex);
  }
  <D.32292>:
  if (bounds != 0B) goto <D.32295>; else goto <D.32296>;
  <D.32295>:
  D.32297 = mono_array_length (lengths);
  D.32298 = mono_array_length (bounds);
  D.32299 = D.32297 != D.32298;
  D.32300 = (long int) D.32299;
  D.32301 = __builtin_expect (D.32300, 0);
  if (D.32301 != 0) goto <D.32302>; else goto <D.32303>;
  <D.32302>:
  {
    struct MonoException * ex;
    char * msg;

    msg = monoeg_g_strdup_printf ("assertion `%s\' failed", "mono_array_length (lengths) == mono_array_length (bounds)");
    if (bounds != 0B) goto <D.32304>; else goto <D.32305>;
    <D.32304>:
    <D.32305>:
    ex = mono_get_exception_argument ("bounds", msg);
    monoeg_g_free (msg);
    mono_raise_exception (ex);
  }
  <D.32303>:
  <D.32296>:
  i = 0;
  goto <D.20948>;
  <D.20947>:
  D.32306 = mono_array_addr_with_size (lengths, 4, i);
  D.32307 = MEM[(gint32 *)D.32306];
  if (D.32307 < 0) goto <D.32308>; else goto <D.32309>;
  <D.32308>:
  D.32310 = mono_get_exception_argument_out_of_range (0B);
  mono_raise_exception (D.32310);
  <D.32309>:
  i = i + 1;
  <D.20948>:
  D.32311 = mono_array_length (lengths);
  if (D.32311 > i) goto <D.20947>; else goto <D.20949>;
  <D.20949>:
  D.32312 = type->type;
  klass = mono_class_from_mono_type (D.32312);
  mono_class_init_or_throw (klass);
  if (bounds != 0B) goto <D.32315>; else goto <D.32313>;
  <D.32315>:
  D.32316 = mono_array_length (bounds);
  if (D.32316 == 1) goto <D.32317>; else goto <D.32313>;
  <D.32317>:
  D.32318 = mono_array_addr_with_size (bounds, 4, 0);
  D.32319 = MEM[(gint32 *)D.32318];
  if (D.32319 != 0) goto <D.32320>; else goto <D.32313>;
  <D.32320>:
  bounded = 1;
  goto <D.32314>;
  <D.32313>:
  bounded = 0;
  <D.32314>:
  D.32321 = mono_array_length (lengths);
  D.32322 = (unsigned int) D.32321;
  aklass = mono_bounded_array_class_get (klass, D.32322, bounded);
  D.32323 = aklass->rank;
  D.32324 = (long unsigned int) D.32323;
  D.32325 = D.32324 * 16;
  sizes = __builtin_alloca (D.32325);
  i = 0;
  goto <D.20951>;
  <D.20950>:
  D.32326 = i * 8;
  D.32327 = sizes + D.32326;
  D.32328 = mono_array_addr_with_size (lengths, 4, i);
  D.32329 = MEM[(guint32 *)D.32328];
  D.32330 = (long unsigned int) D.32329;
  *D.32327 = D.32330;
  if (bounds != 0B) goto <D.32331>; else goto <D.32332>;
  <D.32331>:
  D.32323 = aklass->rank;
  D.32333 = (long unsigned int) D.32323;
  D.32334 = D.32333 + i;
  D.32335 = D.32334 * 8;
  D.32336 = sizes + D.32335;
  D.32337 = mono_array_addr_with_size (bounds, 4, i);
  D.32338 = MEM[(gint32 *)D.32337];
  D.32339 = (long unsigned int) D.32338;
  *D.32336 = D.32339;
  goto <D.32340>;
  <D.32332>:
  D.32323 = aklass->rank;
  D.32333 = (long unsigned int) D.32323;
  D.32334 = D.32333 + i;
  D.32335 = D.32334 * 8;
  D.32336 = sizes + D.32335;
  *D.32336 = 0;
  <D.32340>:
  i = i + 1;
  <D.20951>:
  D.32323 = aklass->rank;
  D.32333 = (long unsigned int) D.32323;
  if (D.32333 > i) goto <D.20950>; else goto <D.20952>;
  <D.20952>:
  D.32323 = aklass->rank;
  D.32324 = (long unsigned int) D.32323;
  D.32341 = D.32324 * 8;
  D.32342 = sizes + D.32341;
  D.32343 = MEM[(struct MonoObject *)type].vtable;
  D.32344 = D.32343->domain;
  array = mono_array_new_full (D.32344, aklass, sizes, D.32342);
  D.32345 = array;
  return D.32345;
}


ves_icall_System_Array_ClearInternal (struct MonoArray * arr, int idx, int length)
{
  struct MonoVTable * D.32347;
  struct MonoClass * D.32348;
  int D.32349;
  long unsigned int D.32350;
  double[0:] * D.32351;
  int D.32352;
  sizetype D.32353;
  void * D.32354;
  int sz;

  D.32347 = MEM[(struct MonoObject *)arr].vtable;
  D.32348 = D.32347->klass;
  sz = mono_array_element_size (D.32348);
  D.32349 = length * sz;
  D.32350 = (long unsigned int) D.32349;
  D.32351 = &arr->vector;
  D.32352 = sz * idx;
  D.32353 = (sizetype) D.32352;
  D.32354 = D.32351 + D.32353;
  mono_gc_bzero_atomic (D.32354, D.32350);
}


mono_ArgIterator_Setup (struct MonoArgIterator * iter, char * argsp, char * start)
{
  struct MonoMethodSignature * D.32355;
  struct MonoMethodSignature * D.32356;
  short int D.32357;
  int D.32358;
  short unsigned int D.32359;
  int D.32360;
  _Bool D.32361;
  long int D.32362;
  long int D.32363;
  unsigned char D.32366;
  unsigned char D.32367;
  _Bool D.32368;
  long int D.32369;
  long int D.32370;
  void * D.32376;
  int D.32377;

  D.32355 = MEM[(struct MonoMethodSignature * *)argsp];
  iter->sig = D.32355;
  D.32356 = iter->sig;
  D.32357 = D.32356->sentinelpos;
  D.32358 = (int) D.32357;
  D.32356 = iter->sig;
  D.32359 = D.32356->param_count;
  D.32360 = (int) D.32359;
  D.32361 = D.32358 > D.32360;
  D.32362 = (long int) D.32361;
  D.32363 = __builtin_expect (D.32362, 0);
  if (D.32363 != 0) goto <D.32364>; else goto <D.32365>;
  <D.32364>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 7168, "iter->sig->sentinelpos <= iter->sig->param_count");
  <D.32365>:
  D.32356 = iter->sig;
  D.32366 = BIT_FIELD_REF <*D.32356, 8, 112>;
  D.32367 = D.32366 & 63;
  D.32368 = D.32367 != 5;
  D.32369 = (long int) D.32368;
  D.32370 = __builtin_expect (D.32369, 0);
  if (D.32370 != 0) goto <D.32371>; else goto <D.32372>;
  <D.32371>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 7169, "iter->sig->call_convention == MONO_CALL_VARARG");
  <D.32372>:
  iter->next_arg = 0;
  if (start != 0B) goto <D.32373>; else goto <D.32374>;
  <D.32373>:
  iter->args = start;
  goto <D.32375>;
  <D.32374>:
  D.32376 = argsp + 8;
  iter->args = D.32376;
  <D.32375>:
  D.32356 = iter->sig;
  D.32359 = D.32356->param_count;
  D.32360 = (int) D.32359;
  D.32356 = iter->sig;
  D.32357 = D.32356->sentinelpos;
  D.32358 = (int) D.32357;
  D.32377 = D.32360 - D.32358;
  iter->num_args = D.32377;
}


mono_ArgIterator_IntGetNextArgType (struct MonoArgIterator * iter)
{
  struct MonoMethodSignature * D.32378;
  short int D.32379;
  int D.32380;
  int D.32381;
  short unsigned int D.32382;
  int D.32383;
  _Bool D.32384;
  long int D.32385;
  long int D.32386;
  struct MonoType * D.32389;
  gint i;

  D.32378 = iter->sig;
  D.32379 = D.32378->sentinelpos;
  D.32380 = (int) D.32379;
  D.32381 = iter->next_arg;
  i = D.32380 + D.32381;
  D.32378 = iter->sig;
  D.32382 = D.32378->param_count;
  D.32383 = (int) D.32382;
  D.32384 = D.32383 <= i;
  D.32385 = (long int) D.32384;
  D.32386 = __builtin_expect (D.32385, 0);
  if (D.32386 != 0) goto <D.32387>; else goto <D.32388>;
  <D.32387>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 7267, "i < iter->sig->param_count");
  <D.32388>:
  D.32378 = iter->sig;
  D.32389 = D.32378->params[i];
  return D.32389;
}


mono_ArgIterator_IntGetNextArgT (struct MonoArgIterator * iter, struct MonoType * type)
{
  struct MonoMethodSignature * D.32392;
  short int D.32393;
  int D.32394;
  int D.32395;
  int D.32396;
  short unsigned int D.32397;
  unsigned int D.32398;
  _Bool D.32399;
  long int D.32400;
  long int D.32401;
  struct MonoType * D.32404;
  int D.32405;
  struct MonoType * D.32408;
  struct MonoClass * D.32409;
  int D.32410;
  void * D.32411;
  sizetype D.32412;
  void * D.32413;
  int D.32414;
  guint32 i;
  guint32 arg_size;
  gint32 align;
  struct MonoTypedRef res;

  try
    {
      D.32392 = iter->sig;
      D.32393 = D.32392->sentinelpos;
      D.32394 = (int) D.32393;
      D.32395 = iter->next_arg;
      D.32396 = D.32394 + D.32395;
      i = (guint32) D.32396;
      D.32392 = iter->sig;
      D.32397 = D.32392->param_count;
      D.32398 = (unsigned int) D.32397;
      D.32399 = D.32398 <= i;
      D.32400 = (long int) D.32399;
      D.32401 = __builtin_expect (D.32400, 0);
      if (D.32401 != 0) goto <D.32402>; else goto <D.32403>;
      <D.32402>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 7233, "i < iter->sig->param_count");
      <D.32403>:
      goto <D.23470>;
      <D.23471>:
      D.32392 = iter->sig;
      D.32404 = D.32392->params[i];
      D.32405 = mono_metadata_type_equal (type, D.32404);
      if (D.32405 == 0) goto <D.32406>; else goto <D.32407>;
      <D.32406>:
      // predicted unlikely by continue predictor.
      goto <D.23470>;
      <D.32407>:
      D.32392 = iter->sig;
      D.32404 = D.32392->params[i];
      res.type = D.32404;
      D.32408 = res.type;
      D.32409 = mono_class_from_mono_type (D.32408);
      res.klass = D.32409;
      D.32408 = res.type;
      D.32410 = mono_type_stack_size (D.32408, &align);
      arg_size = (guint32) D.32410;
      D.32411 = iter->args;
      res.value = D.32411;
      D.32411 = iter->args;
      D.32412 = (sizetype) arg_size;
      D.32413 = D.32411 + D.32412;
      iter->args = D.32413;
      D.32395 = iter->next_arg;
      D.32414 = D.32395 + 1;
      iter->next_arg = D.32414;
      <retval> = res;
      return <retval>;
      <D.23470>:
      D.32392 = iter->sig;
      D.32397 = D.32392->param_count;
      D.32398 = (unsigned int) D.32397;
      if (D.32398 > i) goto <D.23471>; else goto <D.23472>;
      <D.23472>:
      res.type = 0B;
      res.value = 0B;
      res.klass = 0B;
      <retval> = res;
      return <retval>;
    }
  finally
    {
      align = {CLOBBER};
      res = {CLOBBER};
    }
}


mono_ArgIterator_IntGetNextArg (struct MonoArgIterator * iter)
{
  struct MonoMethodSignature * D.32418;
  short int D.32419;
  int D.32420;
  int D.32421;
  int D.32422;
  short unsigned int D.32423;
  unsigned int D.32424;
  _Bool D.32425;
  long int D.32426;
  long int D.32427;
  struct MonoType * D.32430;
  struct MonoType * D.32431;
  struct MonoClass * D.32432;
  int D.32433;
  void * D.32434;
  sizetype D.32435;
  void * D.32436;
  int D.32437;
  guint32 i;
  guint32 arg_size;
  gint32 align;
  struct MonoTypedRef res;

  try
    {
      D.32418 = iter->sig;
      D.32419 = D.32418->sentinelpos;
      D.32420 = (int) D.32419;
      D.32421 = iter->next_arg;
      D.32422 = D.32420 + D.32421;
      i = (guint32) D.32422;
      D.32418 = iter->sig;
      D.32423 = D.32418->param_count;
      D.32424 = (unsigned int) D.32423;
      D.32425 = D.32424 <= i;
      D.32426 = (long int) D.32425;
      D.32427 = __builtin_expect (D.32426, 0);
      if (D.32427 != 0) goto <D.32428>; else goto <D.32429>;
      <D.32428>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 7193, "i < iter->sig->param_count");
      <D.32429>:
      D.32418 = iter->sig;
      D.32430 = D.32418->params[i];
      res.type = D.32430;
      D.32431 = res.type;
      D.32432 = mono_class_from_mono_type (D.32431);
      res.klass = D.32432;
      D.32431 = res.type;
      D.32433 = mono_type_stack_size (D.32431, &align);
      arg_size = (guint32) D.32433;
      D.32434 = iter->args;
      res.value = D.32434;
      D.32434 = iter->args;
      D.32435 = (sizetype) arg_size;
      D.32436 = D.32434 + D.32435;
      iter->args = D.32436;
      D.32421 = iter->next_arg;
      D.32437 = D.32421 + 1;
      iter->next_arg = D.32437;
      <retval> = res;
      return <retval>;
    }
  finally
    {
      align = {CLOBBER};
      res = {CLOBBER};
    }
}


ves_icall_System_Activator_CreateInstanceInternal (struct MonoReflectionType * type)
{
  struct MonoVTable * D.32440;
  struct MonoType * D.32441;
  int D.32442;
  struct MonoObject * D.32445;
  struct MonoClass * klass;
  struct MonoDomain * domain;

  D.32440 = MEM[(struct MonoObject *)type].vtable;
  domain = D.32440->domain;
  D.32441 = type->type;
  klass = mono_class_from_mono_type (D.32441);
  mono_class_init_or_throw (klass);
  D.32442 = mono_class_is_nullable (klass);
  if (D.32442 != 0) goto <D.32443>; else goto <D.32444>;
  <D.32443>:
  D.32445 = 0B;
  return D.32445;
  <D.32444>:
  D.32445 = mono_object_new (domain, klass);
  return D.32445;
}


ves_icall_Mono_Runtime_GetDisplayName ()
{
  struct MonoRuntimeCallbacks * D.32447;
  char * (*<T2798>) (void) D.32448;
  struct MonoDomain * D.32449;
  struct MonoString * D.32450;
  char * info;
  struct MonoString * display_name;

  D.32447 = mono_get_runtime_callbacks ();
  D.32448 = D.32447->get_runtime_build_info;
  info = D.32448 ();
  D.32449 = mono_domain_get ();
  display_name = mono_string_new (D.32449, info);
  monoeg_g_free (info);
  D.32450 = display_name;
  return D.32450;
}


compare_method_imap (const void * key, const void * elem)
{
  short unsigned int D.32452;
  sizetype D.32453;
  int D.32454;
  int D.25329;
  const char * method_name;

  D.32452 = MEM[(guint16 *)elem];
  D.32453 = (sizetype) D.32452;
  method_name = &icall_names_str + D.32453;
  {
    size_t __s1_len;
    size_t __s2_len;

    D.25329 = __builtin_strcmp (key, method_name);
  }
  D.32454 = D.25329;
  return D.32454;
}


mono_lookup_icall_symbol (struct MonoMethod * m)
{
  struct _IO_FILE * stderr.219;
  const char * D.32457;

  stderr.219 = stderr;
  fprintf (stderr.219, "icall symbol maps not enabled, pass --enable-icall-symbol-map to configure.\n");
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "icall.c", 8216);
  D.32457 = 0B;
  return D.32457;
}


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

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


mono_create_icall_signature (const char * sigstr)
{
  struct GHashTable * D.32461;
  struct MonoMethodSignature * D.32464;
  gchar * D.32465;
  int D.32466;
  unsigned int D.32467;
  gchar * D.32468;
  struct MonoType * D.32469;
  int D.32470;
  long unsigned int D.32471;
  long unsigned int D.32472;
  gchar * * D.32473;
  gchar * D.32474;
  struct MonoType * D.32475;
  gchar * * parts;
  int i;
  int len;
  gchar * * tmp;
  struct MonoMethodSignature * res;
  struct MonoMethodSignature * res2;
  struct MonoImage * corlib;

  corlib = mono_defaults.corlib;
  mono_image_lock (corlib);
  D.32461 = corlib->helper_signatures;
  res = monoeg_g_hash_table_lookup (D.32461, sigstr);
  mono_image_unlock (corlib);
  if (res != 0B) goto <D.32462>; else goto <D.32463>;
  <D.32462>:
  D.32464 = res;
  return D.32464;
  <D.32463>:
  parts = monoeg_g_strsplit (sigstr, " ", 256);
  tmp = parts;
  len = 0;
  goto <D.25553>;
  <D.25552>:
  len = len + 1;
  tmp = tmp + 8;
  <D.25553>:
  D.32465 = *tmp;
  if (D.32465 != 0B) goto <D.25552>; else goto <D.25554>;
  <D.25554>:
  D.32466 = len + -1;
  D.32467 = (unsigned int) D.32466;
  res = mono_metadata_signature_alloc (corlib, D.32467);
  res->pinvoke = 1;
  D.32468 = *parts;
  D.32469 = type_from_typename (D.32468);
  res->ret = D.32469;
  i = 1;
  goto <D.25556>;
  <D.25555>:
  D.32470 = i + -1;
  D.32471 = (long unsigned int) i;
  D.32472 = D.32471 * 8;
  D.32473 = parts + D.32472;
  D.32474 = *D.32473;
  D.32475 = type_from_typename (D.32474);
  res->params[D.32470] = D.32475;
  i = i + 1;
  <D.25556>:
  if (i < len) goto <D.25555>; else goto <D.25557>;
  <D.25557>:
  monoeg_g_strfreev (parts);
  mono_image_lock (corlib);
  D.32461 = corlib->helper_signatures;
  res2 = monoeg_g_hash_table_lookup (D.32461, sigstr);
  if (res2 != 0B) goto <D.32476>; else goto <D.32477>;
  <D.32476>:
  res = res2;
  goto <D.32478>;
  <D.32477>:
  D.32461 = corlib->helper_signatures;
  monoeg_g_hash_table_insert_replace (D.32461, sigstr, res, 0);
  <D.32478>:
  mono_image_unlock (corlib);
  D.32464 = res;
  return D.32464;
}


type_from_typename (char * typename)
{
  int D.25387;
  int iftmp.220;
  int D.25386;
  const char[4] * D.32483;
  unsigned char D.32484;
  int D.32485;
  unsigned char D.32486;
  int D.32487;
  _Bool D.32488;
  _Bool D.32489;
  _Bool D.32490;
  const unsigned char * D.32493;
  unsigned char D.32494;
  int D.32495;
  const unsigned char * D.32496;
  unsigned char D.32497;
  int D.32498;
  _Bool D.32499;
  _Bool D.32500;
  const unsigned char * D.32503;
  unsigned char D.32504;
  int D.32505;
  const unsigned char * D.32506;
  unsigned char D.32507;
  int D.32508;
  _Bool D.32509;
  _Bool D.32510;
  const unsigned char * D.32513;
  unsigned char D.32514;
  int D.32515;
  const unsigned char * D.32516;
  unsigned char D.32517;
  int D.32518;
  int D.25396;
  int iftmp.221;
  int D.25395;
  const char[4] * D.32526;
  unsigned char D.32527;
  int D.32528;
  unsigned char D.32529;
  int D.32530;
  _Bool D.32531;
  _Bool D.32532;
  _Bool D.32533;
  const unsigned char * D.32536;
  unsigned char D.32537;
  int D.32538;
  const unsigned char * D.32539;
  unsigned char D.32540;
  int D.32541;
  _Bool D.32542;
  _Bool D.32543;
  const unsigned char * D.32546;
  unsigned char D.32547;
  int D.32548;
  const unsigned char * D.32549;
  unsigned char D.32550;
  int D.32551;
  _Bool D.32552;
  _Bool D.32553;
  const unsigned char * D.32556;
  unsigned char D.32557;
  int D.32558;
  const unsigned char * D.32559;
  unsigned char D.32560;
  int D.32561;
  int D.25405;
  int iftmp.222;
  int D.25404;
  const char[5] * D.32569;
  unsigned char D.32570;
  int D.32571;
  unsigned char D.32572;
  int D.32573;
  _Bool D.32574;
  _Bool D.32575;
  _Bool D.32576;
  const unsigned char * D.32579;
  unsigned char D.32580;
  int D.32581;
  const unsigned char * D.32582;
  unsigned char D.32583;
  int D.32584;
  _Bool D.32585;
  _Bool D.32586;
  const unsigned char * D.32589;
  unsigned char D.32590;
  int D.32591;
  const unsigned char * D.32592;
  unsigned char D.32593;
  int D.32594;
  _Bool D.32595;
  _Bool D.32596;
  const unsigned char * D.32599;
  unsigned char D.32600;
  int D.32601;
  const unsigned char * D.32602;
  unsigned char D.32603;
  int D.32604;
  int D.25414;
  int iftmp.223;
  int D.25413;
  const char[6] * D.32612;
  unsigned char D.32613;
  int D.32614;
  unsigned char D.32615;
  int D.32616;
  _Bool D.32617;
  _Bool D.32618;
  _Bool D.32619;
  const unsigned char * D.32622;
  unsigned char D.32623;
  int D.32624;
  const unsigned char * D.32625;
  unsigned char D.32626;
  int D.32627;
  _Bool D.32628;
  _Bool D.32629;
  const unsigned char * D.32632;
  unsigned char D.32633;
  int D.32634;
  const unsigned char * D.32635;
  unsigned char D.32636;
  int D.32637;
  _Bool D.32638;
  _Bool D.32639;
  const unsigned char * D.32642;
  unsigned char D.32643;
  int D.32644;
  const unsigned char * D.32645;
  unsigned char D.32646;
  int D.32647;
  int D.25423;
  int iftmp.224;
  int D.25422;
  const char[7] * D.32655;
  unsigned char D.32656;
  int D.32657;
  unsigned char D.32658;
  int D.32659;
  _Bool D.32660;
  _Bool D.32661;
  _Bool D.32662;
  const unsigned char * D.32665;
  unsigned char D.32666;
  int D.32667;
  const unsigned char * D.32668;
  unsigned char D.32669;
  int D.32670;
  _Bool D.32671;
  _Bool D.32672;
  const unsigned char * D.32675;
  unsigned char D.32676;
  int D.32677;
  const unsigned char * D.32678;
  unsigned char D.32679;
  int D.32680;
  _Bool D.32681;
  _Bool D.32682;
  const unsigned char * D.32685;
  unsigned char D.32686;
  int D.32687;
  const unsigned char * D.32688;
  unsigned char D.32689;
  int D.32690;
  int D.25432;
  int iftmp.225;
  int D.25431;
  const char[5] * D.32698;
  unsigned char D.32699;
  int D.32700;
  unsigned char D.32701;
  int D.32702;
  _Bool D.32703;
  _Bool D.32704;
  _Bool D.32705;
  const unsigned char * D.32708;
  unsigned char D.32709;
  int D.32710;
  const unsigned char * D.32711;
  unsigned char D.32712;
  int D.32713;
  _Bool D.32714;
  _Bool D.32715;
  const unsigned char * D.32718;
  unsigned char D.32719;
  int D.32720;
  const unsigned char * D.32721;
  unsigned char D.32722;
  int D.32723;
  _Bool D.32724;
  _Bool D.32725;
  const unsigned char * D.32728;
  unsigned char D.32729;
  int D.32730;
  const unsigned char * D.32731;
  unsigned char D.32732;
  int D.32733;
  int D.25441;
  int iftmp.226;
  int D.25440;
  const char[6] * D.32741;
  unsigned char D.32742;
  int D.32743;
  unsigned char D.32744;
  int D.32745;
  _Bool D.32746;
  _Bool D.32747;
  _Bool D.32748;
  const unsigned char * D.32751;
  unsigned char D.32752;
  int D.32753;
  const unsigned char * D.32754;
  unsigned char D.32755;
  int D.32756;
  _Bool D.32757;
  _Bool D.32758;
  const unsigned char * D.32761;
  unsigned char D.32762;
  int D.32763;
  const unsigned char * D.32764;
  unsigned char D.32765;
  int D.32766;
  _Bool D.32767;
  _Bool D.32768;
  const unsigned char * D.32771;
  unsigned char D.32772;
  int D.32773;
  const unsigned char * D.32774;
  unsigned char D.32775;
  int D.32776;
  int D.25450;
  int iftmp.227;
  int D.25449;
  const char[6] * D.32784;
  unsigned char D.32785;
  int D.32786;
  unsigned char D.32787;
  int D.32788;
  _Bool D.32789;
  _Bool D.32790;
  _Bool D.32791;
  const unsigned char * D.32794;
  unsigned char D.32795;
  int D.32796;
  const unsigned char * D.32797;
  unsigned char D.32798;
  int D.32799;
  _Bool D.32800;
  _Bool D.32801;
  const unsigned char * D.32804;
  unsigned char D.32805;
  int D.32806;
  const unsigned char * D.32807;
  unsigned char D.32808;
  int D.32809;
  _Bool D.32810;
  _Bool D.32811;
  const unsigned char * D.32814;
  unsigned char D.32815;
  int D.32816;
  const unsigned char * D.32817;
  unsigned char D.32818;
  int D.32819;
  int D.25459;
  int iftmp.228;
  int D.25458;
  const char[7] * D.32827;
  unsigned char D.32828;
  int D.32829;
  unsigned char D.32830;
  int D.32831;
  _Bool D.32832;
  _Bool D.32833;
  _Bool D.32834;
  const unsigned char * D.32837;
  unsigned char D.32838;
  int D.32839;
  const unsigned char * D.32840;
  unsigned char D.32841;
  int D.32842;
  _Bool D.32843;
  _Bool D.32844;
  const unsigned char * D.32847;
  unsigned char D.32848;
  int D.32849;
  const unsigned char * D.32850;
  unsigned char D.32851;
  int D.32852;
  _Bool D.32853;
  _Bool D.32854;
  const unsigned char * D.32857;
  unsigned char D.32858;
  int D.32859;
  const unsigned char * D.32860;
  unsigned char D.32861;
  int D.32862;
  int D.25468;
  int iftmp.229;
  int D.25467;
  const char[5] * D.32870;
  unsigned char D.32871;
  int D.32872;
  unsigned char D.32873;
  int D.32874;
  _Bool D.32875;
  _Bool D.32876;
  _Bool D.32877;
  const unsigned char * D.32880;
  unsigned char D.32881;
  int D.32882;
  const unsigned char * D.32883;
  unsigned char D.32884;
  int D.32885;
  _Bool D.32886;
  _Bool D.32887;
  const unsigned char * D.32890;
  unsigned char D.32891;
  int D.32892;
  const unsigned char * D.32893;
  unsigned char D.32894;
  int D.32895;
  _Bool D.32896;
  _Bool D.32897;
  const unsigned char * D.32900;
  unsigned char D.32901;
  int D.32902;
  const unsigned char * D.32903;
  unsigned char D.32904;
  int D.32905;
  int D.25477;
  int iftmp.230;
  int D.25476;
  const char[6] * D.32913;
  unsigned char D.32914;
  int D.32915;
  unsigned char D.32916;
  int D.32917;
  _Bool D.32918;
  _Bool D.32919;
  _Bool D.32920;
  const unsigned char * D.32923;
  unsigned char D.32924;
  int D.32925;
  const unsigned char * D.32926;
  unsigned char D.32927;
  int D.32928;
  _Bool D.32929;
  _Bool D.32930;
  const unsigned char * D.32933;
  unsigned char D.32934;
  int D.32935;
  const unsigned char * D.32936;
  unsigned char D.32937;
  int D.32938;
  _Bool D.32939;
  _Bool D.32940;
  const unsigned char * D.32943;
  unsigned char D.32944;
  int D.32945;
  const unsigned char * D.32946;
  unsigned char D.32947;
  int D.32948;
  int D.25486;
  int iftmp.231;
  int D.25485;
  const char[6] * D.32956;
  unsigned char D.32957;
  int D.32958;
  unsigned char D.32959;
  int D.32960;
  _Bool D.32961;
  _Bool D.32962;
  _Bool D.32963;
  const unsigned char * D.32966;
  unsigned char D.32967;
  int D.32968;
  const unsigned char * D.32969;
  unsigned char D.32970;
  int D.32971;
  _Bool D.32972;
  _Bool D.32973;
  const unsigned char * D.32976;
  unsigned char D.32977;
  int D.32978;
  const unsigned char * D.32979;
  unsigned char D.32980;
  int D.32981;
  _Bool D.32982;
  _Bool D.32983;
  const unsigned char * D.32986;
  unsigned char D.32987;
  int D.32988;
  const unsigned char * D.32989;
  unsigned char D.32990;
  int D.32991;
  int D.25495;
  int iftmp.232;
  int D.25494;
  const char[7] * D.32999;
  unsigned char D.33000;
  int D.33001;
  unsigned char D.33002;
  int D.33003;
  _Bool D.33004;
  _Bool D.33005;
  _Bool D.33006;
  const unsigned char * D.33009;
  unsigned char D.33010;
  int D.33011;
  const unsigned char * D.33012;
  unsigned char D.33013;
  int D.33014;
  _Bool D.33015;
  _Bool D.33016;
  const unsigned char * D.33019;
  unsigned char D.33020;
  int D.33021;
  const unsigned char * D.33022;
  unsigned char D.33023;
  int D.33024;
  _Bool D.33025;
  _Bool D.33026;
  const unsigned char * D.33029;
  unsigned char D.33030;
  int D.33031;
  const unsigned char * D.33032;
  unsigned char D.33033;
  int D.33034;
  int D.25504;
  int iftmp.233;
  int D.25503;
  const char[7] * D.33042;
  unsigned char D.33043;
  int D.33044;
  unsigned char D.33045;
  int D.33046;
  _Bool D.33047;
  _Bool D.33048;
  _Bool D.33049;
  const unsigned char * D.33052;
  unsigned char D.33053;
  int D.33054;
  const unsigned char * D.33055;
  unsigned char D.33056;
  int D.33057;
  _Bool D.33058;
  _Bool D.33059;
  const unsigned char * D.33062;
  unsigned char D.33063;
  int D.33064;
  const unsigned char * D.33065;
  unsigned char D.33066;
  int D.33067;
  _Bool D.33068;
  _Bool D.33069;
  const unsigned char * D.33072;
  unsigned char D.33073;
  int D.33074;
  const unsigned char * D.33075;
  unsigned char D.33076;
  int D.33077;
  int D.25513;
  int iftmp.234;
  int D.25512;
  const char[4] * D.33085;
  unsigned char D.33086;
  int D.33087;
  unsigned char D.33088;
  int D.33089;
  _Bool D.33090;
  _Bool D.33091;
  _Bool D.33092;
  const unsigned char * D.33095;
  unsigned char D.33096;
  int D.33097;
  const unsigned char * D.33098;
  unsigned char D.33099;
  int D.33100;
  _Bool D.33101;
  _Bool D.33102;
  const unsigned char * D.33105;
  unsigned char D.33106;
  int D.33107;
  const unsigned char * D.33108;
  unsigned char D.33109;
  int D.33110;
  _Bool D.33111;
  _Bool D.33112;
  const unsigned char * D.33115;
  unsigned char D.33116;
  int D.33117;
  const unsigned char * D.33118;
  unsigned char D.33119;
  int D.33120;
  int D.25522;
  int iftmp.235;
  int D.25521;
  const char[7] * D.33128;
  unsigned char D.33129;
  int D.33130;
  unsigned char D.33131;
  int D.33132;
  _Bool D.33133;
  _Bool D.33134;
  _Bool D.33135;
  const unsigned char * D.33138;
  unsigned char D.33139;
  int D.33140;
  const unsigned char * D.33141;
  unsigned char D.33142;
  int D.33143;
  _Bool D.33144;
  _Bool D.33145;
  const unsigned char * D.33148;
  unsigned char D.33149;
  int D.33150;
  const unsigned char * D.33151;
  unsigned char D.33152;
  int D.33153;
  _Bool D.33154;
  _Bool D.33155;
  const unsigned char * D.33158;
  unsigned char D.33159;
  int D.33160;
  const unsigned char * D.33161;
  unsigned char D.33162;
  int D.33163;
  int D.25531;
  int iftmp.236;
  int D.25530;
  const char[5] * D.33171;
  unsigned char D.33172;
  int D.33173;
  unsigned char D.33174;
  int D.33175;
  _Bool D.33176;
  _Bool D.33177;
  _Bool D.33178;
  const unsigned char * D.33181;
  unsigned char D.33182;
  int D.33183;
  const unsigned char * D.33184;
  unsigned char D.33185;
  int D.33186;
  _Bool D.33187;
  _Bool D.33188;
  const unsigned char * D.33191;
  unsigned char D.33192;
  int D.33193;
  const unsigned char * D.33194;
  unsigned char D.33195;
  int D.33196;
  _Bool D.33197;
  _Bool D.33198;
  const unsigned char * D.33201;
  unsigned char D.33202;
  int D.33203;
  const unsigned char * D.33204;
  unsigned char D.33205;
  int D.33206;
  int D.25540;
  int iftmp.237;
  int D.25539;
  const char[8] * D.33214;
  unsigned char D.33215;
  int D.33216;
  unsigned char D.33217;
  int D.33218;
  _Bool D.33219;
  _Bool D.33220;
  _Bool D.33221;
  const unsigned char * D.33224;
  unsigned char D.33225;
  int D.33226;
  const unsigned char * D.33227;
  unsigned char D.33228;
  int D.33229;
  _Bool D.33230;
  _Bool D.33231;
  const unsigned char * D.33234;
  unsigned char D.33235;
  int D.33236;
  const unsigned char * D.33237;
  unsigned char D.33238;
  int D.33239;
  _Bool D.33240;
  _Bool D.33241;
  const unsigned char * D.33244;
  unsigned char D.33245;
  int D.33246;
  const unsigned char * D.33247;
  unsigned char D.33248;
  int D.33249;
  struct MonoType * D.33254;
  struct MonoClass * klass;

  klass = 0B;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.32483 = "int";
      D.32484 = MEM[(const unsigned char *)D.32483];
      D.32485 = (int) D.32484;
      D.32486 = *__s2;
      D.32487 = (int) D.32486;
      __result = D.32485 - D.32487;
      {
        D.32488 = __s2_len != 0;
        D.32489 = __result == 0;
        D.32490 = D.32488 & D.32489;
        if (D.32490 != 0) goto <D.32491>; else goto <D.32492>;
        <D.32491>:
        D.32493 = &MEM[(void *)"int" + 1B];
        D.32494 = *D.32493;
        D.32495 = (int) D.32494;
        D.32496 = __s2 + 1;
        D.32497 = *D.32496;
        D.32498 = (int) D.32497;
        __result = D.32495 - D.32498;
        D.32499 = __s2_len > 1;
        D.32489 = __result == 0;
        D.32500 = D.32499 & D.32489;
        if (D.32500 != 0) goto <D.32501>; else goto <D.32502>;
        <D.32501>:
        D.32503 = &MEM[(void *)"int" + 2B];
        D.32504 = *D.32503;
        D.32505 = (int) D.32504;
        D.32506 = __s2 + 2;
        D.32507 = *D.32506;
        D.32508 = (int) D.32507;
        __result = D.32505 - D.32508;
        D.32509 = __s2_len > 2;
        D.32489 = __result == 0;
        D.32510 = D.32509 & D.32489;
        if (D.32510 != 0) goto <D.32511>; else goto <D.32512>;
        <D.32511>:
        D.32513 = &MEM[(void *)"int" + 3B];
        D.32514 = *D.32513;
        D.32515 = (int) D.32514;
        D.32516 = __s2 + 3;
        D.32517 = *D.32516;
        D.32518 = (int) D.32517;
        __result = D.32515 - D.32518;
        <D.32512>:
        <D.32502>:
        <D.32492>:
      }
      D.25386 = __result;
    }
    iftmp.220 = -D.25386;
    goto <D.32519>;
    <D.32482>:
    iftmp.220 = __builtin_strcmp (typename, "int");
    <D.32519>:
    D.25387 = iftmp.220;
  }
  if (D.25387 == 0) goto <D.32520>; else goto <D.32521>;
  <D.32520>:
  klass = mono_defaults.int_class;
  goto <D.32522>;
  <D.32521>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.32526 = "ptr";
      D.32527 = MEM[(const unsigned char *)D.32526];
      D.32528 = (int) D.32527;
      D.32529 = *__s2;
      D.32530 = (int) D.32529;
      __result = D.32528 - D.32530;
      {
        D.32531 = __s2_len != 0;
        D.32532 = __result == 0;
        D.32533 = D.32531 & D.32532;
        if (D.32533 != 0) goto <D.32534>; else goto <D.32535>;
        <D.32534>:
        D.32536 = &MEM[(void *)"ptr" + 1B];
        D.32537 = *D.32536;
        D.32538 = (int) D.32537;
        D.32539 = __s2 + 1;
        D.32540 = *D.32539;
        D.32541 = (int) D.32540;
        __result = D.32538 - D.32541;
        D.32542 = __s2_len > 1;
        D.32532 = __result == 0;
        D.32543 = D.32542 & D.32532;
        if (D.32543 != 0) goto <D.32544>; else goto <D.32545>;
        <D.32544>:
        D.32546 = &MEM[(void *)"ptr" + 2B];
        D.32547 = *D.32546;
        D.32548 = (int) D.32547;
        D.32549 = __s2 + 2;
        D.32550 = *D.32549;
        D.32551 = (int) D.32550;
        __result = D.32548 - D.32551;
        D.32552 = __s2_len > 2;
        D.32532 = __result == 0;
        D.32553 = D.32552 & D.32532;
        if (D.32553 != 0) goto <D.32554>; else goto <D.32555>;
        <D.32554>:
        D.32556 = &MEM[(void *)"ptr" + 3B];
        D.32557 = *D.32556;
        D.32558 = (int) D.32557;
        D.32559 = __s2 + 3;
        D.32560 = *D.32559;
        D.32561 = (int) D.32560;
        __result = D.32558 - D.32561;
        <D.32555>:
        <D.32545>:
        <D.32535>:
      }
      D.25395 = __result;
    }
    iftmp.221 = -D.25395;
    goto <D.32562>;
    <D.32525>:
    iftmp.221 = __builtin_strcmp (typename, "ptr");
    <D.32562>:
    D.25396 = iftmp.221;
  }
  if (D.25396 == 0) goto <D.32563>; else goto <D.32564>;
  <D.32563>:
  klass = mono_defaults.int_class;
  goto <D.32565>;
  <D.32564>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.32569 = "void";
      D.32570 = MEM[(const unsigned char *)D.32569];
      D.32571 = (int) D.32570;
      D.32572 = *__s2;
      D.32573 = (int) D.32572;
      __result = D.32571 - D.32573;
      {
        D.32574 = __s2_len != 0;
        D.32575 = __result == 0;
        D.32576 = D.32574 & D.32575;
        if (D.32576 != 0) goto <D.32577>; else goto <D.32578>;
        <D.32577>:
        D.32579 = &MEM[(void *)"void" + 1B];
        D.32580 = *D.32579;
        D.32581 = (int) D.32580;
        D.32582 = __s2 + 1;
        D.32583 = *D.32582;
        D.32584 = (int) D.32583;
        __result = D.32581 - D.32584;
        D.32585 = __s2_len > 1;
        D.32575 = __result == 0;
        D.32586 = D.32585 & D.32575;
        if (D.32586 != 0) goto <D.32587>; else goto <D.32588>;
        <D.32587>:
        D.32589 = &MEM[(void *)"void" + 2B];
        D.32590 = *D.32589;
        D.32591 = (int) D.32590;
        D.32592 = __s2 + 2;
        D.32593 = *D.32592;
        D.32594 = (int) D.32593;
        __result = D.32591 - D.32594;
        D.32595 = __s2_len > 2;
        D.32575 = __result == 0;
        D.32596 = D.32595 & D.32575;
        if (D.32596 != 0) goto <D.32597>; else goto <D.32598>;
        <D.32597>:
        D.32599 = &MEM[(void *)"void" + 3B];
        D.32600 = *D.32599;
        D.32601 = (int) D.32600;
        D.32602 = __s2 + 3;
        D.32603 = *D.32602;
        D.32604 = (int) D.32603;
        __result = D.32601 - D.32604;
        <D.32598>:
        <D.32588>:
        <D.32578>:
      }
      D.25404 = __result;
    }
    iftmp.222 = -D.25404;
    goto <D.32605>;
    <D.32568>:
    iftmp.222 = __builtin_strcmp (typename, "void");
    <D.32605>:
    D.25405 = iftmp.222;
  }
  if (D.25405 == 0) goto <D.32606>; else goto <D.32607>;
  <D.32606>:
  klass = mono_defaults.void_class;
  goto <D.32608>;
  <D.32607>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.32612 = "int32";
      D.32613 = MEM[(const unsigned char *)D.32612];
      D.32614 = (int) D.32613;
      D.32615 = *__s2;
      D.32616 = (int) D.32615;
      __result = D.32614 - D.32616;
      {
        D.32617 = __s2_len != 0;
        D.32618 = __result == 0;
        D.32619 = D.32617 & D.32618;
        if (D.32619 != 0) goto <D.32620>; else goto <D.32621>;
        <D.32620>:
        D.32622 = &MEM[(void *)"int32" + 1B];
        D.32623 = *D.32622;
        D.32624 = (int) D.32623;
        D.32625 = __s2 + 1;
        D.32626 = *D.32625;
        D.32627 = (int) D.32626;
        __result = D.32624 - D.32627;
        D.32628 = __s2_len > 1;
        D.32618 = __result == 0;
        D.32629 = D.32628 & D.32618;
        if (D.32629 != 0) goto <D.32630>; else goto <D.32631>;
        <D.32630>:
        D.32632 = &MEM[(void *)"int32" + 2B];
        D.32633 = *D.32632;
        D.32634 = (int) D.32633;
        D.32635 = __s2 + 2;
        D.32636 = *D.32635;
        D.32637 = (int) D.32636;
        __result = D.32634 - D.32637;
        D.32638 = __s2_len > 2;
        D.32618 = __result == 0;
        D.32639 = D.32638 & D.32618;
        if (D.32639 != 0) goto <D.32640>; else goto <D.32641>;
        <D.32640>:
        D.32642 = &MEM[(void *)"int32" + 3B];
        D.32643 = *D.32642;
        D.32644 = (int) D.32643;
        D.32645 = __s2 + 3;
        D.32646 = *D.32645;
        D.32647 = (int) D.32646;
        __result = D.32644 - D.32647;
        <D.32641>:
        <D.32631>:
        <D.32621>:
      }
      D.25413 = __result;
    }
    iftmp.223 = -D.25413;
    goto <D.32648>;
    <D.32611>:
    iftmp.223 = __builtin_strcmp (typename, "int32");
    <D.32648>:
    D.25414 = iftmp.223;
  }
  if (D.25414 == 0) goto <D.32649>; else goto <D.32650>;
  <D.32649>:
  klass = mono_defaults.int32_class;
  goto <D.32651>;
  <D.32650>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.32655 = "uint32";
      D.32656 = MEM[(const unsigned char *)D.32655];
      D.32657 = (int) D.32656;
      D.32658 = *__s2;
      D.32659 = (int) D.32658;
      __result = D.32657 - D.32659;
      {
        D.32660 = __s2_len != 0;
        D.32661 = __result == 0;
        D.32662 = D.32660 & D.32661;
        if (D.32662 != 0) goto <D.32663>; else goto <D.32664>;
        <D.32663>:
        D.32665 = &MEM[(void *)"uint32" + 1B];
        D.32666 = *D.32665;
        D.32667 = (int) D.32666;
        D.32668 = __s2 + 1;
        D.32669 = *D.32668;
        D.32670 = (int) D.32669;
        __result = D.32667 - D.32670;
        D.32671 = __s2_len > 1;
        D.32661 = __result == 0;
        D.32672 = D.32671 & D.32661;
        if (D.32672 != 0) goto <D.32673>; else goto <D.32674>;
        <D.32673>:
        D.32675 = &MEM[(void *)"uint32" + 2B];
        D.32676 = *D.32675;
        D.32677 = (int) D.32676;
        D.32678 = __s2 + 2;
        D.32679 = *D.32678;
        D.32680 = (int) D.32679;
        __result = D.32677 - D.32680;
        D.32681 = __s2_len > 2;
        D.32661 = __result == 0;
        D.32682 = D.32681 & D.32661;
        if (D.32682 != 0) goto <D.32683>; else goto <D.32684>;
        <D.32683>:
        D.32685 = &MEM[(void *)"uint32" + 3B];
        D.32686 = *D.32685;
        D.32687 = (int) D.32686;
        D.32688 = __s2 + 3;
        D.32689 = *D.32688;
        D.32690 = (int) D.32689;
        __result = D.32687 - D.32690;
        <D.32684>:
        <D.32674>:
        <D.32664>:
      }
      D.25422 = __result;
    }
    iftmp.224 = -D.25422;
    goto <D.32691>;
    <D.32654>:
    iftmp.224 = __builtin_strcmp (typename, "uint32");
    <D.32691>:
    D.25423 = iftmp.224;
  }
  if (D.25423 == 0) goto <D.32692>; else goto <D.32693>;
  <D.32692>:
  klass = mono_defaults.uint32_class;
  goto <D.32694>;
  <D.32693>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.32698 = "int8";
      D.32699 = MEM[(const unsigned char *)D.32698];
      D.32700 = (int) D.32699;
      D.32701 = *__s2;
      D.32702 = (int) D.32701;
      __result = D.32700 - D.32702;
      {
        D.32703 = __s2_len != 0;
        D.32704 = __result == 0;
        D.32705 = D.32703 & D.32704;
        if (D.32705 != 0) goto <D.32706>; else goto <D.32707>;
        <D.32706>:
        D.32708 = &MEM[(void *)"int8" + 1B];
        D.32709 = *D.32708;
        D.32710 = (int) D.32709;
        D.32711 = __s2 + 1;
        D.32712 = *D.32711;
        D.32713 = (int) D.32712;
        __result = D.32710 - D.32713;
        D.32714 = __s2_len > 1;
        D.32704 = __result == 0;
        D.32715 = D.32714 & D.32704;
        if (D.32715 != 0) goto <D.32716>; else goto <D.32717>;
        <D.32716>:
        D.32718 = &MEM[(void *)"int8" + 2B];
        D.32719 = *D.32718;
        D.32720 = (int) D.32719;
        D.32721 = __s2 + 2;
        D.32722 = *D.32721;
        D.32723 = (int) D.32722;
        __result = D.32720 - D.32723;
        D.32724 = __s2_len > 2;
        D.32704 = __result == 0;
        D.32725 = D.32724 & D.32704;
        if (D.32725 != 0) goto <D.32726>; else goto <D.32727>;
        <D.32726>:
        D.32728 = &MEM[(void *)"int8" + 3B];
        D.32729 = *D.32728;
        D.32730 = (int) D.32729;
        D.32731 = __s2 + 3;
        D.32732 = *D.32731;
        D.32733 = (int) D.32732;
        __result = D.32730 - D.32733;
        <D.32727>:
        <D.32717>:
        <D.32707>:
      }
      D.25431 = __result;
    }
    iftmp.225 = -D.25431;
    goto <D.32734>;
    <D.32697>:
    iftmp.225 = __builtin_strcmp (typename, "int8");
    <D.32734>:
    D.25432 = iftmp.225;
  }
  if (D.25432 == 0) goto <D.32735>; else goto <D.32736>;
  <D.32735>:
  klass = mono_defaults.sbyte_class;
  goto <D.32737>;
  <D.32736>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.32741 = "uint8";
      D.32742 = MEM[(const unsigned char *)D.32741];
      D.32743 = (int) D.32742;
      D.32744 = *__s2;
      D.32745 = (int) D.32744;
      __result = D.32743 - D.32745;
      {
        D.32746 = __s2_len != 0;
        D.32747 = __result == 0;
        D.32748 = D.32746 & D.32747;
        if (D.32748 != 0) goto <D.32749>; else goto <D.32750>;
        <D.32749>:
        D.32751 = &MEM[(void *)"uint8" + 1B];
        D.32752 = *D.32751;
        D.32753 = (int) D.32752;
        D.32754 = __s2 + 1;
        D.32755 = *D.32754;
        D.32756 = (int) D.32755;
        __result = D.32753 - D.32756;
        D.32757 = __s2_len > 1;
        D.32747 = __result == 0;
        D.32758 = D.32757 & D.32747;
        if (D.32758 != 0) goto <D.32759>; else goto <D.32760>;
        <D.32759>:
        D.32761 = &MEM[(void *)"uint8" + 2B];
        D.32762 = *D.32761;
        D.32763 = (int) D.32762;
        D.32764 = __s2 + 2;
        D.32765 = *D.32764;
        D.32766 = (int) D.32765;
        __result = D.32763 - D.32766;
        D.32767 = __s2_len > 2;
        D.32747 = __result == 0;
        D.32768 = D.32767 & D.32747;
        if (D.32768 != 0) goto <D.32769>; else goto <D.32770>;
        <D.32769>:
        D.32771 = &MEM[(void *)"uint8" + 3B];
        D.32772 = *D.32771;
        D.32773 = (int) D.32772;
        D.32774 = __s2 + 3;
        D.32775 = *D.32774;
        D.32776 = (int) D.32775;
        __result = D.32773 - D.32776;
        <D.32770>:
        <D.32760>:
        <D.32750>:
      }
      D.25440 = __result;
    }
    iftmp.226 = -D.25440;
    goto <D.32777>;
    <D.32740>:
    iftmp.226 = __builtin_strcmp (typename, "uint8");
    <D.32777>:
    D.25441 = iftmp.226;
  }
  if (D.25441 == 0) goto <D.32778>; else goto <D.32779>;
  <D.32778>:
  klass = mono_defaults.byte_class;
  goto <D.32780>;
  <D.32779>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.32784 = "int16";
      D.32785 = MEM[(const unsigned char *)D.32784];
      D.32786 = (int) D.32785;
      D.32787 = *__s2;
      D.32788 = (int) D.32787;
      __result = D.32786 - D.32788;
      {
        D.32789 = __s2_len != 0;
        D.32790 = __result == 0;
        D.32791 = D.32789 & D.32790;
        if (D.32791 != 0) goto <D.32792>; else goto <D.32793>;
        <D.32792>:
        D.32794 = &MEM[(void *)"int16" + 1B];
        D.32795 = *D.32794;
        D.32796 = (int) D.32795;
        D.32797 = __s2 + 1;
        D.32798 = *D.32797;
        D.32799 = (int) D.32798;
        __result = D.32796 - D.32799;
        D.32800 = __s2_len > 1;
        D.32790 = __result == 0;
        D.32801 = D.32800 & D.32790;
        if (D.32801 != 0) goto <D.32802>; else goto <D.32803>;
        <D.32802>:
        D.32804 = &MEM[(void *)"int16" + 2B];
        D.32805 = *D.32804;
        D.32806 = (int) D.32805;
        D.32807 = __s2 + 2;
        D.32808 = *D.32807;
        D.32809 = (int) D.32808;
        __result = D.32806 - D.32809;
        D.32810 = __s2_len > 2;
        D.32790 = __result == 0;
        D.32811 = D.32810 & D.32790;
        if (D.32811 != 0) goto <D.32812>; else goto <D.32813>;
        <D.32812>:
        D.32814 = &MEM[(void *)"int16" + 3B];
        D.32815 = *D.32814;
        D.32816 = (int) D.32815;
        D.32817 = __s2 + 3;
        D.32818 = *D.32817;
        D.32819 = (int) D.32818;
        __result = D.32816 - D.32819;
        <D.32813>:
        <D.32803>:
        <D.32793>:
      }
      D.25449 = __result;
    }
    iftmp.227 = -D.25449;
    goto <D.32820>;
    <D.32783>:
    iftmp.227 = __builtin_strcmp (typename, "int16");
    <D.32820>:
    D.25450 = iftmp.227;
  }
  if (D.25450 == 0) goto <D.32821>; else goto <D.32822>;
  <D.32821>:
  klass = mono_defaults.int16_class;
  goto <D.32823>;
  <D.32822>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.32827 = "uint16";
      D.32828 = MEM[(const unsigned char *)D.32827];
      D.32829 = (int) D.32828;
      D.32830 = *__s2;
      D.32831 = (int) D.32830;
      __result = D.32829 - D.32831;
      {
        D.32832 = __s2_len != 0;
        D.32833 = __result == 0;
        D.32834 = D.32832 & D.32833;
        if (D.32834 != 0) goto <D.32835>; else goto <D.32836>;
        <D.32835>:
        D.32837 = &MEM[(void *)"uint16" + 1B];
        D.32838 = *D.32837;
        D.32839 = (int) D.32838;
        D.32840 = __s2 + 1;
        D.32841 = *D.32840;
        D.32842 = (int) D.32841;
        __result = D.32839 - D.32842;
        D.32843 = __s2_len > 1;
        D.32833 = __result == 0;
        D.32844 = D.32843 & D.32833;
        if (D.32844 != 0) goto <D.32845>; else goto <D.32846>;
        <D.32845>:
        D.32847 = &MEM[(void *)"uint16" + 2B];
        D.32848 = *D.32847;
        D.32849 = (int) D.32848;
        D.32850 = __s2 + 2;
        D.32851 = *D.32850;
        D.32852 = (int) D.32851;
        __result = D.32849 - D.32852;
        D.32853 = __s2_len > 2;
        D.32833 = __result == 0;
        D.32854 = D.32853 & D.32833;
        if (D.32854 != 0) goto <D.32855>; else goto <D.32856>;
        <D.32855>:
        D.32857 = &MEM[(void *)"uint16" + 3B];
        D.32858 = *D.32857;
        D.32859 = (int) D.32858;
        D.32860 = __s2 + 3;
        D.32861 = *D.32860;
        D.32862 = (int) D.32861;
        __result = D.32859 - D.32862;
        <D.32856>:
        <D.32846>:
        <D.32836>:
      }
      D.25458 = __result;
    }
    iftmp.228 = -D.25458;
    goto <D.32863>;
    <D.32826>:
    iftmp.228 = __builtin_strcmp (typename, "uint16");
    <D.32863>:
    D.25459 = iftmp.228;
  }
  if (D.25459 == 0) goto <D.32864>; else goto <D.32865>;
  <D.32864>:
  klass = mono_defaults.uint16_class;
  goto <D.32866>;
  <D.32865>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.32870 = "long";
      D.32871 = MEM[(const unsigned char *)D.32870];
      D.32872 = (int) D.32871;
      D.32873 = *__s2;
      D.32874 = (int) D.32873;
      __result = D.32872 - D.32874;
      {
        D.32875 = __s2_len != 0;
        D.32876 = __result == 0;
        D.32877 = D.32875 & D.32876;
        if (D.32877 != 0) goto <D.32878>; else goto <D.32879>;
        <D.32878>:
        D.32880 = &MEM[(void *)"long" + 1B];
        D.32881 = *D.32880;
        D.32882 = (int) D.32881;
        D.32883 = __s2 + 1;
        D.32884 = *D.32883;
        D.32885 = (int) D.32884;
        __result = D.32882 - D.32885;
        D.32886 = __s2_len > 1;
        D.32876 = __result == 0;
        D.32887 = D.32886 & D.32876;
        if (D.32887 != 0) goto <D.32888>; else goto <D.32889>;
        <D.32888>:
        D.32890 = &MEM[(void *)"long" + 2B];
        D.32891 = *D.32890;
        D.32892 = (int) D.32891;
        D.32893 = __s2 + 2;
        D.32894 = *D.32893;
        D.32895 = (int) D.32894;
        __result = D.32892 - D.32895;
        D.32896 = __s2_len > 2;
        D.32876 = __result == 0;
        D.32897 = D.32896 & D.32876;
        if (D.32897 != 0) goto <D.32898>; else goto <D.32899>;
        <D.32898>:
        D.32900 = &MEM[(void *)"long" + 3B];
        D.32901 = *D.32900;
        D.32902 = (int) D.32901;
        D.32903 = __s2 + 3;
        D.32904 = *D.32903;
        D.32905 = (int) D.32904;
        __result = D.32902 - D.32905;
        <D.32899>:
        <D.32889>:
        <D.32879>:
      }
      D.25467 = __result;
    }
    iftmp.229 = -D.25467;
    goto <D.32906>;
    <D.32869>:
    iftmp.229 = __builtin_strcmp (typename, "long");
    <D.32906>:
    D.25468 = iftmp.229;
  }
  if (D.25468 == 0) goto <D.32907>; else goto <D.32908>;
  <D.32907>:
  klass = mono_defaults.int64_class;
  goto <D.32909>;
  <D.32908>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.32913 = "ulong";
      D.32914 = MEM[(const unsigned char *)D.32913];
      D.32915 = (int) D.32914;
      D.32916 = *__s2;
      D.32917 = (int) D.32916;
      __result = D.32915 - D.32917;
      {
        D.32918 = __s2_len != 0;
        D.32919 = __result == 0;
        D.32920 = D.32918 & D.32919;
        if (D.32920 != 0) goto <D.32921>; else goto <D.32922>;
        <D.32921>:
        D.32923 = &MEM[(void *)"ulong" + 1B];
        D.32924 = *D.32923;
        D.32925 = (int) D.32924;
        D.32926 = __s2 + 1;
        D.32927 = *D.32926;
        D.32928 = (int) D.32927;
        __result = D.32925 - D.32928;
        D.32929 = __s2_len > 1;
        D.32919 = __result == 0;
        D.32930 = D.32929 & D.32919;
        if (D.32930 != 0) goto <D.32931>; else goto <D.32932>;
        <D.32931>:
        D.32933 = &MEM[(void *)"ulong" + 2B];
        D.32934 = *D.32933;
        D.32935 = (int) D.32934;
        D.32936 = __s2 + 2;
        D.32937 = *D.32936;
        D.32938 = (int) D.32937;
        __result = D.32935 - D.32938;
        D.32939 = __s2_len > 2;
        D.32919 = __result == 0;
        D.32940 = D.32939 & D.32919;
        if (D.32940 != 0) goto <D.32941>; else goto <D.32942>;
        <D.32941>:
        D.32943 = &MEM[(void *)"ulong" + 3B];
        D.32944 = *D.32943;
        D.32945 = (int) D.32944;
        D.32946 = __s2 + 3;
        D.32947 = *D.32946;
        D.32948 = (int) D.32947;
        __result = D.32945 - D.32948;
        <D.32942>:
        <D.32932>:
        <D.32922>:
      }
      D.25476 = __result;
    }
    iftmp.230 = -D.25476;
    goto <D.32949>;
    <D.32912>:
    iftmp.230 = __builtin_strcmp (typename, "ulong");
    <D.32949>:
    D.25477 = iftmp.230;
  }
  if (D.25477 == 0) goto <D.32950>; else goto <D.32951>;
  <D.32950>:
  klass = mono_defaults.uint64_class;
  goto <D.32952>;
  <D.32951>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.32956 = "float";
      D.32957 = MEM[(const unsigned char *)D.32956];
      D.32958 = (int) D.32957;
      D.32959 = *__s2;
      D.32960 = (int) D.32959;
      __result = D.32958 - D.32960;
      {
        D.32961 = __s2_len != 0;
        D.32962 = __result == 0;
        D.32963 = D.32961 & D.32962;
        if (D.32963 != 0) goto <D.32964>; else goto <D.32965>;
        <D.32964>:
        D.32966 = &MEM[(void *)"float" + 1B];
        D.32967 = *D.32966;
        D.32968 = (int) D.32967;
        D.32969 = __s2 + 1;
        D.32970 = *D.32969;
        D.32971 = (int) D.32970;
        __result = D.32968 - D.32971;
        D.32972 = __s2_len > 1;
        D.32962 = __result == 0;
        D.32973 = D.32972 & D.32962;
        if (D.32973 != 0) goto <D.32974>; else goto <D.32975>;
        <D.32974>:
        D.32976 = &MEM[(void *)"float" + 2B];
        D.32977 = *D.32976;
        D.32978 = (int) D.32977;
        D.32979 = __s2 + 2;
        D.32980 = *D.32979;
        D.32981 = (int) D.32980;
        __result = D.32978 - D.32981;
        D.32982 = __s2_len > 2;
        D.32962 = __result == 0;
        D.32983 = D.32982 & D.32962;
        if (D.32983 != 0) goto <D.32984>; else goto <D.32985>;
        <D.32984>:
        D.32986 = &MEM[(void *)"float" + 3B];
        D.32987 = *D.32986;
        D.32988 = (int) D.32987;
        D.32989 = __s2 + 3;
        D.32990 = *D.32989;
        D.32991 = (int) D.32990;
        __result = D.32988 - D.32991;
        <D.32985>:
        <D.32975>:
        <D.32965>:
      }
      D.25485 = __result;
    }
    iftmp.231 = -D.25485;
    goto <D.32992>;
    <D.32955>:
    iftmp.231 = __builtin_strcmp (typename, "float");
    <D.32992>:
    D.25486 = iftmp.231;
  }
  if (D.25486 == 0) goto <D.32993>; else goto <D.32994>;
  <D.32993>:
  klass = mono_defaults.single_class;
  goto <D.32995>;
  <D.32994>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.32999 = "double";
      D.33000 = MEM[(const unsigned char *)D.32999];
      D.33001 = (int) D.33000;
      D.33002 = *__s2;
      D.33003 = (int) D.33002;
      __result = D.33001 - D.33003;
      {
        D.33004 = __s2_len != 0;
        D.33005 = __result == 0;
        D.33006 = D.33004 & D.33005;
        if (D.33006 != 0) goto <D.33007>; else goto <D.33008>;
        <D.33007>:
        D.33009 = &MEM[(void *)"double" + 1B];
        D.33010 = *D.33009;
        D.33011 = (int) D.33010;
        D.33012 = __s2 + 1;
        D.33013 = *D.33012;
        D.33014 = (int) D.33013;
        __result = D.33011 - D.33014;
        D.33015 = __s2_len > 1;
        D.33005 = __result == 0;
        D.33016 = D.33015 & D.33005;
        if (D.33016 != 0) goto <D.33017>; else goto <D.33018>;
        <D.33017>:
        D.33019 = &MEM[(void *)"double" + 2B];
        D.33020 = *D.33019;
        D.33021 = (int) D.33020;
        D.33022 = __s2 + 2;
        D.33023 = *D.33022;
        D.33024 = (int) D.33023;
        __result = D.33021 - D.33024;
        D.33025 = __s2_len > 2;
        D.33005 = __result == 0;
        D.33026 = D.33025 & D.33005;
        if (D.33026 != 0) goto <D.33027>; else goto <D.33028>;
        <D.33027>:
        D.33029 = &MEM[(void *)"double" + 3B];
        D.33030 = *D.33029;
        D.33031 = (int) D.33030;
        D.33032 = __s2 + 3;
        D.33033 = *D.33032;
        D.33034 = (int) D.33033;
        __result = D.33031 - D.33034;
        <D.33028>:
        <D.33018>:
        <D.33008>:
      }
      D.25494 = __result;
    }
    iftmp.232 = -D.25494;
    goto <D.33035>;
    <D.32998>:
    iftmp.232 = __builtin_strcmp (typename, "double");
    <D.33035>:
    D.25495 = iftmp.232;
  }
  if (D.25495 == 0) goto <D.33036>; else goto <D.33037>;
  <D.33036>:
  klass = mono_defaults.double_class;
  goto <D.33038>;
  <D.33037>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.33042 = "object";
      D.33043 = MEM[(const unsigned char *)D.33042];
      D.33044 = (int) D.33043;
      D.33045 = *__s2;
      D.33046 = (int) D.33045;
      __result = D.33044 - D.33046;
      {
        D.33047 = __s2_len != 0;
        D.33048 = __result == 0;
        D.33049 = D.33047 & D.33048;
        if (D.33049 != 0) goto <D.33050>; else goto <D.33051>;
        <D.33050>:
        D.33052 = &MEM[(void *)"object" + 1B];
        D.33053 = *D.33052;
        D.33054 = (int) D.33053;
        D.33055 = __s2 + 1;
        D.33056 = *D.33055;
        D.33057 = (int) D.33056;
        __result = D.33054 - D.33057;
        D.33058 = __s2_len > 1;
        D.33048 = __result == 0;
        D.33059 = D.33058 & D.33048;
        if (D.33059 != 0) goto <D.33060>; else goto <D.33061>;
        <D.33060>:
        D.33062 = &MEM[(void *)"object" + 2B];
        D.33063 = *D.33062;
        D.33064 = (int) D.33063;
        D.33065 = __s2 + 2;
        D.33066 = *D.33065;
        D.33067 = (int) D.33066;
        __result = D.33064 - D.33067;
        D.33068 = __s2_len > 2;
        D.33048 = __result == 0;
        D.33069 = D.33068 & D.33048;
        if (D.33069 != 0) goto <D.33070>; else goto <D.33071>;
        <D.33070>:
        D.33072 = &MEM[(void *)"object" + 3B];
        D.33073 = *D.33072;
        D.33074 = (int) D.33073;
        D.33075 = __s2 + 3;
        D.33076 = *D.33075;
        D.33077 = (int) D.33076;
        __result = D.33074 - D.33077;
        <D.33071>:
        <D.33061>:
        <D.33051>:
      }
      D.25503 = __result;
    }
    iftmp.233 = -D.25503;
    goto <D.33078>;
    <D.33041>:
    iftmp.233 = __builtin_strcmp (typename, "object");
    <D.33078>:
    D.25504 = iftmp.233;
  }
  if (D.25504 == 0) goto <D.33079>; else goto <D.33080>;
  <D.33079>:
  klass = mono_defaults.object_class;
  goto <D.33081>;
  <D.33080>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.33085 = "obj";
      D.33086 = MEM[(const unsigned char *)D.33085];
      D.33087 = (int) D.33086;
      D.33088 = *__s2;
      D.33089 = (int) D.33088;
      __result = D.33087 - D.33089;
      {
        D.33090 = __s2_len != 0;
        D.33091 = __result == 0;
        D.33092 = D.33090 & D.33091;
        if (D.33092 != 0) goto <D.33093>; else goto <D.33094>;
        <D.33093>:
        D.33095 = &MEM[(void *)"obj" + 1B];
        D.33096 = *D.33095;
        D.33097 = (int) D.33096;
        D.33098 = __s2 + 1;
        D.33099 = *D.33098;
        D.33100 = (int) D.33099;
        __result = D.33097 - D.33100;
        D.33101 = __s2_len > 1;
        D.33091 = __result == 0;
        D.33102 = D.33101 & D.33091;
        if (D.33102 != 0) goto <D.33103>; else goto <D.33104>;
        <D.33103>:
        D.33105 = &MEM[(void *)"obj" + 2B];
        D.33106 = *D.33105;
        D.33107 = (int) D.33106;
        D.33108 = __s2 + 2;
        D.33109 = *D.33108;
        D.33110 = (int) D.33109;
        __result = D.33107 - D.33110;
        D.33111 = __s2_len > 2;
        D.33091 = __result == 0;
        D.33112 = D.33111 & D.33091;
        if (D.33112 != 0) goto <D.33113>; else goto <D.33114>;
        <D.33113>:
        D.33115 = &MEM[(void *)"obj" + 3B];
        D.33116 = *D.33115;
        D.33117 = (int) D.33116;
        D.33118 = __s2 + 3;
        D.33119 = *D.33118;
        D.33120 = (int) D.33119;
        __result = D.33117 - D.33120;
        <D.33114>:
        <D.33104>:
        <D.33094>:
      }
      D.25512 = __result;
    }
    iftmp.234 = -D.25512;
    goto <D.33121>;
    <D.33084>:
    iftmp.234 = __builtin_strcmp (typename, "obj");
    <D.33121>:
    D.25513 = iftmp.234;
  }
  if (D.25513 == 0) goto <D.33122>; else goto <D.33123>;
  <D.33122>:
  klass = mono_defaults.object_class;
  goto <D.33124>;
  <D.33123>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.33128 = "string";
      D.33129 = MEM[(const unsigned char *)D.33128];
      D.33130 = (int) D.33129;
      D.33131 = *__s2;
      D.33132 = (int) D.33131;
      __result = D.33130 - D.33132;
      {
        D.33133 = __s2_len != 0;
        D.33134 = __result == 0;
        D.33135 = D.33133 & D.33134;
        if (D.33135 != 0) goto <D.33136>; else goto <D.33137>;
        <D.33136>:
        D.33138 = &MEM[(void *)"string" + 1B];
        D.33139 = *D.33138;
        D.33140 = (int) D.33139;
        D.33141 = __s2 + 1;
        D.33142 = *D.33141;
        D.33143 = (int) D.33142;
        __result = D.33140 - D.33143;
        D.33144 = __s2_len > 1;
        D.33134 = __result == 0;
        D.33145 = D.33144 & D.33134;
        if (D.33145 != 0) goto <D.33146>; else goto <D.33147>;
        <D.33146>:
        D.33148 = &MEM[(void *)"string" + 2B];
        D.33149 = *D.33148;
        D.33150 = (int) D.33149;
        D.33151 = __s2 + 2;
        D.33152 = *D.33151;
        D.33153 = (int) D.33152;
        __result = D.33150 - D.33153;
        D.33154 = __s2_len > 2;
        D.33134 = __result == 0;
        D.33155 = D.33154 & D.33134;
        if (D.33155 != 0) goto <D.33156>; else goto <D.33157>;
        <D.33156>:
        D.33158 = &MEM[(void *)"string" + 3B];
        D.33159 = *D.33158;
        D.33160 = (int) D.33159;
        D.33161 = __s2 + 3;
        D.33162 = *D.33161;
        D.33163 = (int) D.33162;
        __result = D.33160 - D.33163;
        <D.33157>:
        <D.33147>:
        <D.33137>:
      }
      D.25521 = __result;
    }
    iftmp.235 = -D.25521;
    goto <D.33164>;
    <D.33127>:
    iftmp.235 = __builtin_strcmp (typename, "string");
    <D.33164>:
    D.25522 = iftmp.235;
  }
  if (D.25522 == 0) goto <D.33165>; else goto <D.33166>;
  <D.33165>:
  klass = mono_defaults.string_class;
  goto <D.33167>;
  <D.33166>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.33171 = "bool";
      D.33172 = MEM[(const unsigned char *)D.33171];
      D.33173 = (int) D.33172;
      D.33174 = *__s2;
      D.33175 = (int) D.33174;
      __result = D.33173 - D.33175;
      {
        D.33176 = __s2_len != 0;
        D.33177 = __result == 0;
        D.33178 = D.33176 & D.33177;
        if (D.33178 != 0) goto <D.33179>; else goto <D.33180>;
        <D.33179>:
        D.33181 = &MEM[(void *)"bool" + 1B];
        D.33182 = *D.33181;
        D.33183 = (int) D.33182;
        D.33184 = __s2 + 1;
        D.33185 = *D.33184;
        D.33186 = (int) D.33185;
        __result = D.33183 - D.33186;
        D.33187 = __s2_len > 1;
        D.33177 = __result == 0;
        D.33188 = D.33187 & D.33177;
        if (D.33188 != 0) goto <D.33189>; else goto <D.33190>;
        <D.33189>:
        D.33191 = &MEM[(void *)"bool" + 2B];
        D.33192 = *D.33191;
        D.33193 = (int) D.33192;
        D.33194 = __s2 + 2;
        D.33195 = *D.33194;
        D.33196 = (int) D.33195;
        __result = D.33193 - D.33196;
        D.33197 = __s2_len > 2;
        D.33177 = __result == 0;
        D.33198 = D.33197 & D.33177;
        if (D.33198 != 0) goto <D.33199>; else goto <D.33200>;
        <D.33199>:
        D.33201 = &MEM[(void *)"bool" + 3B];
        D.33202 = *D.33201;
        D.33203 = (int) D.33202;
        D.33204 = __s2 + 3;
        D.33205 = *D.33204;
        D.33206 = (int) D.33205;
        __result = D.33203 - D.33206;
        <D.33200>:
        <D.33190>:
        <D.33180>:
      }
      D.25530 = __result;
    }
    iftmp.236 = -D.25530;
    goto <D.33207>;
    <D.33170>:
    iftmp.236 = __builtin_strcmp (typename, "bool");
    <D.33207>:
    D.25531 = iftmp.236;
  }
  if (D.25531 == 0) goto <D.33208>; else goto <D.33209>;
  <D.33208>:
  klass = mono_defaults.boolean_class;
  goto <D.33210>;
  <D.33209>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = typename;
      D.33214 = "boolean";
      D.33215 = MEM[(const unsigned char *)D.33214];
      D.33216 = (int) D.33215;
      D.33217 = *__s2;
      D.33218 = (int) D.33217;
      __result = D.33216 - D.33218;
      {
        D.33219 = __s2_len != 0;
        D.33220 = __result == 0;
        D.33221 = D.33219 & D.33220;
        if (D.33221 != 0) goto <D.33222>; else goto <D.33223>;
        <D.33222>:
        D.33224 = &MEM[(void *)"boolean" + 1B];
        D.33225 = *D.33224;
        D.33226 = (int) D.33225;
        D.33227 = __s2 + 1;
        D.33228 = *D.33227;
        D.33229 = (int) D.33228;
        __result = D.33226 - D.33229;
        D.33230 = __s2_len > 1;
        D.33220 = __result == 0;
        D.33231 = D.33230 & D.33220;
        if (D.33231 != 0) goto <D.33232>; else goto <D.33233>;
        <D.33232>:
        D.33234 = &MEM[(void *)"boolean" + 2B];
        D.33235 = *D.33234;
        D.33236 = (int) D.33235;
        D.33237 = __s2 + 2;
        D.33238 = *D.33237;
        D.33239 = (int) D.33238;
        __result = D.33236 - D.33239;
        D.33240 = __s2_len > 2;
        D.33220 = __result == 0;
        D.33241 = D.33240 & D.33220;
        if (D.33241 != 0) goto <D.33242>; else goto <D.33243>;
        <D.33242>:
        D.33244 = &MEM[(void *)"boolean" + 3B];
        D.33245 = *D.33244;
        D.33246 = (int) D.33245;
        D.33247 = __s2 + 3;
        D.33248 = *D.33247;
        D.33249 = (int) D.33248;
        __result = D.33246 - D.33249;
        <D.33243>:
        <D.33233>:
        <D.33223>:
      }
      D.25539 = __result;
    }
    iftmp.237 = -D.25539;
    goto <D.33250>;
    <D.33213>:
    iftmp.237 = __builtin_strcmp (typename, "boolean");
    <D.33250>:
    D.25540 = iftmp.237;
  }
  if (D.25540 == 0) goto <D.33251>; else goto <D.33252>;
  <D.33251>:
  klass = mono_defaults.boolean_class;
  goto <D.33253>;
  <D.33252>:
  monoeg_g_log (0B, 4, "%s", typename);
  <D.25541>:
  goto <D.25541>;
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "icall.c", 8265);
  <D.33253>:
  <D.33210>:
  <D.33167>:
  <D.33124>:
  <D.33081>:
  <D.33038>:
  <D.32995>:
  <D.32952>:
  <D.32909>:
  <D.32866>:
  <D.32823>:
  <D.32780>:
  <D.32737>:
  <D.32694>:
  <D.32651>:
  <D.32608>:
  <D.32565>:
  <D.32522>:
  D.33254 = &klass->byval_arg;
  return D.33254;
}


mono_find_jit_icall_by_name (const char * name)
{
  struct GHashTable * jit_icall_hash_name.238;
  _Bool D.33257;
  long int D.33258;
  long int D.33259;
  struct MonoJitICallInfo * D.33262;
  struct MonoJitICallInfo * info;

  jit_icall_hash_name.238 = jit_icall_hash_name;
  D.33257 = jit_icall_hash_name.238 == 0B;
  D.33258 = (long int) D.33257;
  D.33259 = __builtin_expect (D.33258, 0);
  if (D.33259 != 0) goto <D.33260>; else goto <D.33261>;
  <D.33260>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 8331, "jit_icall_hash_name");
  <D.33261>:
  mono_icall_lock ();
  jit_icall_hash_name.238 = jit_icall_hash_name;
  info = monoeg_g_hash_table_lookup (jit_icall_hash_name.238, name);
  mono_icall_unlock ();
  D.33262 = info;
  return D.33262;
}


mono_find_jit_icall_by_addr (const void * addr)
{
  struct GHashTable * jit_icall_hash_addr.239;
  _Bool D.33265;
  long int D.33266;
  long int D.33267;
  struct MonoJitICallInfo * D.33270;
  struct MonoJitICallInfo * info;

  jit_icall_hash_addr.239 = jit_icall_hash_addr;
  D.33265 = jit_icall_hash_addr.239 == 0B;
  D.33266 = (long int) D.33265;
  D.33267 = __builtin_expect (D.33266, 0);
  if (D.33267 != 0) goto <D.33268>; else goto <D.33269>;
  <D.33268>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 8343, "jit_icall_hash_addr");
  <D.33269>:
  mono_icall_lock ();
  jit_icall_hash_addr.239 = jit_icall_hash_addr;
  info = monoeg_g_hash_table_lookup (jit_icall_hash_addr.239, addr);
  mono_icall_unlock ();
  D.33270 = info;
  return D.33270;
}


mono_get_jit_icall_info ()
{
  struct GHashTable * D.33272;

  D.33272 = jit_icall_hash_name;
  return D.33272;
}


mono_lookup_jit_icall_symbol (const char * name)
{
  struct GHashTable * jit_icall_hash_name.240;
  const char * D.33277;
  struct MonoJitICallInfo * info;
  const char * res;

  res = 0B;
  mono_icall_lock ();
  jit_icall_hash_name.240 = jit_icall_hash_name;
  info = monoeg_g_hash_table_lookup (jit_icall_hash_name.240, name);
  if (info != 0B) goto <D.33275>; else goto <D.33276>;
  <D.33275>:
  res = info->c_symbol;
  <D.33276>:
  mono_icall_unlock ();
  D.33277 = res;
  return D.33277;
}


mono_register_jit_icall_wrapper (struct MonoJitICallInfo * info, const void * wrapper)
{
  struct GHashTable * jit_icall_hash_addr.241;

  mono_icall_lock ();
  jit_icall_hash_addr.241 = jit_icall_hash_addr;
  monoeg_g_hash_table_insert_replace (jit_icall_hash_addr.241, wrapper, info, 0);
  mono_icall_unlock ();
}


mono_register_jit_icall_full (const void * func, const char * name, struct MonoMethodSignature * sig, gboolean is_save, const char * c_symbol)
{
  _Bool D.33280;
  long int D.33281;
  long int D.33282;
  _Bool D.33285;
  long int D.33286;
  long int D.33287;
  struct GHashTable * jit_icall_hash_name.242;
  struct GHashTable * jit_icall_hash_name.243;
  struct GHashTable * jit_icall_hash_addr.244;
  void * D.33295;
  const char * D.33301;
  struct GHashTable * jit_icall_hash_addr.245;
  struct MonoJitICallInfo * D.33303;
  struct MonoJitICallInfo * info;

  D.33280 = func == 0B;
  D.33281 = (long int) D.33280;
  D.33282 = __builtin_expect (D.33281, 0);
  if (D.33282 != 0) goto <D.33283>; else goto <D.33284>;
  <D.33283>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 8396, "func");
  <D.33284>:
  D.33285 = name == 0B;
  D.33286 = (long int) D.33285;
  D.33287 = __builtin_expect (D.33286, 0);
  if (D.33287 != 0) goto <D.33288>; else goto <D.33289>;
  <D.33288>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "icall.c", 8397, "name");
  <D.33289>:
  mono_icall_lock ();
  jit_icall_hash_name.242 = jit_icall_hash_name;
  if (jit_icall_hash_name.242 == 0B) goto <D.33291>; else goto <D.33292>;
  <D.33291>:
  jit_icall_hash_name.243 = monoeg_g_hash_table_new_full (monoeg_g_str_hash, monoeg_g_str_equal, 0B, monoeg_g_free);
  jit_icall_hash_name = jit_icall_hash_name.243;
  jit_icall_hash_addr.244 = monoeg_g_hash_table_new (0B, 0B);
  jit_icall_hash_addr = jit_icall_hash_addr.244;
  <D.33292>:
  jit_icall_hash_name.242 = jit_icall_hash_name;
  D.33295 = monoeg_g_hash_table_lookup (jit_icall_hash_name.242, name);
  if (D.33295 != 0B) goto <D.33296>; else goto <D.33297>;
  <D.33296>:
  monoeg_g_log (0B, 16, "jit icall already defined \"%s\"\n", name);
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "icall.c", 8408);
  <D.33297>:
  info = monoeg_malloc0 (48);
  info->name = name;
  info->func = func;
  info->sig = sig;
  info->c_symbol = c_symbol;
  if (is_save != 0) goto <D.33298>; else goto <D.33299>;
  <D.33298>:
  info->wrapper = func;
  goto <D.33300>;
  <D.33299>:
  info->wrapper = 0B;
  <D.33300>:
  D.33301 = info->name;
  jit_icall_hash_name.242 = jit_icall_hash_name;
  monoeg_g_hash_table_insert_replace (jit_icall_hash_name.242, D.33301, info, 0);
  jit_icall_hash_addr.245 = jit_icall_hash_addr;
  monoeg_g_hash_table_insert_replace (jit_icall_hash_addr.245, func, info, 0);
  mono_icall_unlock ();
  D.33303 = info;
  return D.33303;
}


mono_register_jit_icall (const void * func, const char * name, struct MonoMethodSignature * sig, gboolean is_save)
{
  struct MonoJitICallInfo * D.33305;

  D.33305 = mono_register_jit_icall_full (func, name, sig, is_save, 0B);
  return D.33305;
}


