mono_class_from_typeref (struct MonoImage * image, guint32 type_token)
{
  unsigned int D.22062;
  unsigned int D.22063;
  int D.22064;
  const char * D.22067;
  char * D.22068;
  struct MonoClass * D.22069;
  int D.22070;
  unsigned int D.22071;
  unsigned int D.22072;
  unsigned int D.22073;
  unsigned int D.22074;
  int idx.0;
  const char * iftmp.1;
  char D.22081;
  struct MonoAssembly * D.22085;
  struct MonoAssemblyName * D.22086;
  gchar * D.22089;
  unsigned int D.22090;
  unsigned char D.22095;
  unsigned char D.22096;
  struct MonoClassExt * D.22098;
  int D.18844;
  const char * D.22100;
  unsigned int D.22103;
  struct MonoImage * D.22104;
  unsigned int D.22105;
  int D.22106;
  struct MonoTableInfo * D.22107;
  unsigned int D.22108;
  int D.22109;
  struct MonoTableInfo * D.22110;
  int D.18860;
  unsigned int D.22113;
  int D.22114;
  int D.22117;
  unsigned int D.22118;
  unsigned int D.22119;
  <unnamed-unsigned:24> D.22121;
  unsigned int D.22122;
  gchar * D.22125;
  struct MonoAssembly * * D.22128;
  unsigned int D.22130;
  long unsigned int D.22131;
  long unsigned int D.22132;
  struct MonoAssembly * * D.22133;
  struct MonoAssembly * D.22134;
  int D.22135;
  _Bool D.22136;
  long int D.22137;
  long int D.22138;
  int iftmp.2;
  struct MonoImage * D.22147;
  struct MonoError error;
  guint32 cols[3];
  struct MonoTableInfo * t;
  guint32 idx;
  const char * name;
  const char * nspace;
  struct MonoClass * res;
  struct MonoImage * module;

  try
    {
      t = &image->tables[1];
      D.22062 = type_token & 16777215;
      D.22063 = D.22062 + 4294967295;
      D.22064 = mono_verifier_verify_typeref_row (image, D.22063, &error);
      if (D.22064 == 0) goto <D.22065>; else goto <D.22066>;
      <D.22065>:
      D.22067 = mono_error_get_message (&error);
      D.22068 = image->name;
      mono_trace (16, 2, "Failed to resolve typeref from %s due to \'%s\'", D.22068, D.22067);
      D.22069 = 0B;
      return D.22069;
      <D.22066>:
      D.22062 = type_token & 16777215;
      D.22063 = D.22062 + 4294967295;
      D.22070 = (int) D.22063;
      mono_metadata_decode_row (t, D.22070, &cols, 3);
      D.22071 = cols[1];
      name = mono_metadata_string_heap (image, D.22071);
      D.22072 = cols[2];
      nspace = mono_metadata_string_heap (image, D.22072);
      D.22073 = cols[0];
      idx = D.22073 >> 2;
      D.22073 = cols[0];
      D.22074 = D.22073 & 3;
      switch (D.22074) <default: <D.22120>, case 0: <D.18828>, case 1: <D.18830>, case 2: <D.18865>, case 3: <D.18833>>
      <D.18828>:
      if (idx == 0) goto <D.22075>; else goto <D.22076>;
      <D.22075>:
      monoeg_g_log (0B, 4, "null ResolutionScope not yet handled");
      <D.18829>:
      goto <D.18829>;
      <D.22076>:
      D.22069 = mono_class_from_name (image, nspace, name);
      return D.22069;
      <D.18830>:
      idx.0 = (int) idx;
      module = mono_image_load_module (image, idx.0);
      if (module != 0B) goto <D.22078>; else goto <D.22079>;
      <D.22078>:
      D.22069 = mono_class_from_name (module, nspace, name);
      return D.22069;
      <D.22079>:
      {
        char * msg;
        char * human_name;

        D.22081 = *nspace;
        if (D.22081 != 0) goto <D.22082>; else goto <D.22083>;
        <D.22082>:
        iftmp.1 = ".";
        goto <D.22084>;
        <D.22083>:
        iftmp.1 = "";
        <D.22084>:
        msg = monoeg_g_strdup_printf ("%s%s%s", nspace, iftmp.1, name);
        D.22085 = image->assembly;
        D.22086 = &D.22085->aname;
        human_name = mono_stringify_assembly_name (D.22086);
        mono_loader_set_error_type_load (msg, human_name);
        monoeg_g_free (msg);
        monoeg_g_free (human_name);
        D.22069 = 0B;
        return D.22069;
      }
      <D.18833>:
      {
        struct MonoClass * enclosing;
        struct GList * tmp;

        D.22062 = type_token & 16777215;
        if (D.22062 == idx) goto <D.22087>; else goto <D.22088>;
        <D.22087>:
        D.22068 = image->name;
        D.22089 = monoeg_g_strdup_printf ("Image %s with self-referencing typeref token %08x.", D.22068, type_token);
        mono_loader_set_error_bad_image (D.22089);
        D.22069 = 0B;
        return D.22069;
        <D.22088>:
        D.22090 = idx | 16777216;
        enclosing = mono_class_from_typeref (image, D.22090);
        if (enclosing == 0B) goto <D.22091>; else goto <D.22092>;
        <D.22091>:
        D.22069 = 0B;
        return D.22069;
        <D.22092>:
        D.22095 = BIT_FIELD_REF <*enclosing, 8, 280>;
        D.22096 = D.22095 & 128;
        if (D.22096 != 0) goto <D.22097>; else goto <D.22093>;
        <D.22097>:
        D.22098 = enclosing->ext;
        if (D.22098 != 0B) goto <D.22099>; else goto <D.22093>;
        <D.22099>:
        D.22098 = enclosing->ext;
        tmp = D.22098->nested_classes;
        goto <D.18846>;
        <D.18845>:
        res = tmp->data;
        {
          size_t __s1_len;
          size_t __s2_len;

          D.22100 = res->name;
          D.18844 = __builtin_strcmp (D.22100, name);
        }
        if (D.18844 == 0) goto <D.22101>; else goto <D.22102>;
        <D.22101>:
        D.22069 = res;
        return D.22069;
        <D.22102>:
        tmp = tmp->next;
        <D.18846>:
        if (tmp != 0B) goto <D.18845>; else goto <D.18847>;
        <D.18847>:
        goto <D.22094>;
        <D.22093>:
        {
          int i;

          D.22103 = enclosing->type_token;
          D.22104 = enclosing->image;
          D.22105 = mono_metadata_nesting_typedef (D.22104, D.22103, 1);
          i = (int) D.22105;
          goto <D.18863>;
          <D.18862>:
          {
            guint32 class_nested;
            guint32 string_offset;
            const char * nname;

            D.22106 = i + -1;
            D.22104 = enclosing->image;
            D.22107 = &D.22104->tables[41];
            class_nested = mono_metadata_decode_row_col (D.22107, D.22106, 0);
            D.22108 = class_nested + 4294967295;
            D.22109 = (int) D.22108;
            D.22104 = enclosing->image;
            D.22110 = &D.22104->tables[2];
            string_offset = mono_metadata_decode_row_col (D.22110, D.22109, 1);
            D.22104 = enclosing->image;
            nname = mono_metadata_string_heap (D.22104, string_offset);
            {
              size_t __s1_len;
              size_t __s2_len;

              D.18860 = __builtin_strcmp (nname, name);
            }
            if (D.18860 == 0) goto <D.22111>; else goto <D.22112>;
            <D.22111>:
            {
              struct MonoClass * res;

              D.22113 = class_nested | 33554432;
              D.22104 = enclosing->image;
              res = mono_class_create_from_typedef (D.22104, D.22113, &error);
              D.22114 = mono_error_ok (&error);
              if (D.22114 == 0) goto <D.22115>; else goto <D.22116>;
              <D.22115>:
              mono_loader_set_error_from_mono_error (&error);
              mono_error_cleanup (&error);
              D.22069 = 0B;
              return D.22069;
              <D.22116>:
              D.22069 = res;
              return D.22069;
            }
            <D.22112>:
            D.22117 = i + 1;
            D.22118 = (unsigned int) D.22117;
            D.22103 = enclosing->type_token;
            D.22104 = enclosing->image;
            D.22119 = mono_metadata_nesting_typedef (D.22104, D.22103, D.22118);
            i = (int) D.22119;
          }
          <D.18863>:
          if (i != 0) goto <D.18862>; else goto <D.18864>;
          <D.18864>:
        }
        <D.22094>:
        D.22068 = image->name;
        monoeg_g_log (0B, 16, "TypeRef ResolutionScope not yet handled (%d) for %s.%s in image %s", idx, nspace, name, D.22068);
        D.22069 = 0B;
        return D.22069;
      }
      <D.18865>:
      goto <D.18866>;
      <D.22120>:
      <D.18866>:
      D.22121 = image->tables[35].rows;
      D.22122 = (unsigned int) D.22121;
      if (D.22122 < idx) goto <D.22123>; else goto <D.22124>;
      <D.22123>:
      D.22068 = image->name;
      D.22125 = monoeg_g_strdup_printf ("Image %s with invalid assemblyref token %08x.", D.22068, idx);
      mono_loader_set_error_bad_image (D.22125);
      D.22069 = 0B;
      return D.22069;
      <D.22124>:
      D.22128 = image->references;
      if (D.22128 == 0B) goto <D.22126>; else goto <D.22129>;
      <D.22129>:
      D.22128 = image->references;
      D.22130 = idx + 4294967295;
      D.22131 = (long unsigned int) D.22130;
      D.22132 = D.22131 * 8;
      D.22133 = D.22128 + D.22132;
      D.22134 = *D.22133;
      if (D.22134 == 0B) goto <D.22126>; else goto <D.22127>;
      <D.22126>:
      D.22130 = idx + 4294967295;
      D.22135 = (int) D.22130;
      mono_assembly_load_reference (image, D.22135);
      <D.22127>:
      D.22128 = image->references;
      D.22130 = idx + 4294967295;
      D.22131 = (long unsigned int) D.22130;
      D.22132 = D.22131 * 8;
      D.22133 = D.22128 + D.22132;
      D.22134 = *D.22133;
      D.22136 = D.22134 == 0B;
      D.22137 = (long int) D.22136;
      D.22138 = __builtin_expect (D.22137, 0);
      if (D.22138 != 0) goto <D.22139>; else goto <D.22140>;
      <D.22139>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 248, "image->references [idx - 1]");
      <D.22140>:
      D.22128 = image->references;
      D.22130 = idx + 4294967295;
      D.22131 = (long unsigned int) D.22130;
      D.22132 = D.22131 * 8;
      D.22133 = D.22128 + D.22132;
      D.22134 = *D.22133;
      if (D.22134 == -1B) goto <D.22141>; else goto <D.22142>;
      <D.22141>:
      {
        struct MonoAssemblyName aname;
        char * human_name;

        try
          {
            D.22130 = idx + 4294967295;
            D.22135 = (int) D.22130;
            mono_assembly_get_assemblyref (image, D.22135, &aname);
            human_name = mono_stringify_assembly_name (&aname);
            D.22085 = image->assembly;
            if (D.22085 != 0B) goto <D.22144>; else goto <D.22145>;
            <D.22144>:
            D.22085 = image->assembly;
            iftmp.2 = D.22085->ref_only;
            goto <D.22146>;
            <D.22145>:
            iftmp.2 = 0;
            <D.22146>:
            mono_loader_set_error_assembly_load (human_name, iftmp.2);
            monoeg_g_free (human_name);
            D.22069 = 0B;
            return D.22069;
          }
        finally
          {
            aname = {CLOBBER};
          }
      }
      <D.22142>:
      D.22128 = image->references;
      D.22130 = idx + 4294967295;
      D.22131 = (long unsigned int) D.22130;
      D.22132 = D.22131 * 8;
      D.22133 = D.22128 + D.22132;
      D.22134 = *D.22133;
      D.22147 = D.22134->image;
      D.22069 = mono_class_from_name (D.22147, nspace, name);
      return D.22069;
    }
  finally
    {
      error = {CLOBBER};
      cols = {CLOBBER};
    }
}


mono_class_create_from_typedef (struct MonoImage * image, guint32 type_token, struct MonoError * error)
{
  unsigned int D.22153;
  <unnamed-unsigned:24> D.22155;
  unsigned int D.22156;
  struct MonoLoaderError * D.22157;
  _Bool D.22158;
  long int D.22159;
  long int D.22160;
  struct MonoClass * D.22163;
  long unsigned int D.22164;
  void * D.22165;
  struct MonoInternalHashTable * D.22166;
  struct MonoLoaderError * D.22169;
  _Bool D.22170;
  long int D.22171;
  long int D.22172;
  unsigned int D.22175;
  int D.22176;
  unsigned int D.22177;
  unsigned int D.22178;
  unsigned int D.22179;
  unsigned int classes_size.3;
  unsigned int classes_size.4;
  unsigned int D.22182;
  struct MonoGenericContainer * D.22183;
  struct MonoGenericContainer * D.22184;
  unsigned int D.22189;
  unsigned int D.22192;
  gchar * D.22197;
  struct MonoGenericClass * D.22202;
  struct MonoClass * D.22205;
  struct MonoClass * D.22212;
  int D.22213;
  const char * D.22216;
  gchar * D.22217;
  struct MonoLoaderError * D.22218;
  _Bool D.22219;
  long int D.22220;
  long int D.22221;
  unsigned int D.22224;
  unsigned int D.22225;
  struct MonoClass * D.22228;
  unsigned char D.22229;
  unsigned char D.22230;
  int D.22233;
  gchar * D.22236;
  struct MonoClass * * interfaces.5;
  unsigned int icount.6;
  short unsigned int D.22239;
  unsigned int D.22240;
  unsigned int D.22241;
  unsigned int D.22242;
  unsigned int D.22243;
  int tidx.7;
  unsigned int D.22247;
  unsigned int D.22248;
  <unnamed-unsigned:24> D.22250;
  <unnamed-unsigned:24> D.22251;
  unsigned int D.22255;
  unsigned int D.22257;
  unsigned int D.22258;
  unsigned int D.22259;
  unsigned int D.22262;
  unsigned int D.22263;
  int D.22265;
  int D.20688;
  int iftmp.8;
  int D.20687;
  const char[7] * D.22271;
  unsigned char D.22272;
  int D.22273;
  unsigned char D.22274;
  int D.22275;
  _Bool D.22276;
  _Bool D.22277;
  _Bool D.22278;
  const unsigned char * D.22281;
  unsigned char D.22282;
  int D.22283;
  const unsigned char * D.22284;
  unsigned char D.22285;
  int D.22286;
  _Bool D.22287;
  _Bool D.22288;
  const unsigned char * D.22291;
  unsigned char D.22292;
  int D.22293;
  const unsigned char * D.22294;
  unsigned char D.22295;
  int D.22296;
  _Bool D.22297;
  _Bool D.22298;
  const unsigned char * D.22301;
  unsigned char D.22302;
  int D.22303;
  const unsigned char * D.22304;
  unsigned char D.22305;
  int D.22306;
  int D.20697;
  int iftmp.9;
  int D.20696;
  const char[6] * D.22313;
  unsigned char D.22314;
  int D.22315;
  unsigned char D.22316;
  int D.22317;
  _Bool D.22318;
  _Bool D.22319;
  _Bool D.22320;
  const unsigned char * D.22323;
  unsigned char D.22324;
  int D.22325;
  const unsigned char * D.22326;
  unsigned char D.22327;
  int D.22328;
  _Bool D.22329;
  _Bool D.22330;
  const unsigned char * D.22333;
  unsigned char D.22334;
  int D.22335;
  const unsigned char * D.22336;
  unsigned char D.22337;
  int D.22338;
  _Bool D.22339;
  _Bool D.22340;
  const unsigned char * D.22343;
  unsigned char D.22344;
  int D.22345;
  const unsigned char * D.22346;
  unsigned char D.22347;
  int D.22348;
  int D.22352;
  unsigned int D.22353;
  unsigned int D.22354;
  int D.22355;
  unsigned int D.22356;
  _Bool D.22357;
  long int D.22358;
  long int D.22359;
  struct MonoClass * D.22366;
  struct MonoLoaderError * D.22367;
  _Bool D.22368;
  long int D.22369;
  long int D.22370;
  struct MonoClass * D.22373;
  int D.22376;
  gchar * D.22379;
  struct MonoLoaderError * D.22380;
  _Bool D.22381;
  long int D.22382;
  long int D.22383;
  struct MonoImage * D.22386;
  const char * D.22387;
  int D.20707;
  int iftmp.10;
  int D.20706;
  const char[10] * D.22393;
  unsigned char D.22394;
  int D.22395;
  unsigned char D.22396;
  int D.22397;
  _Bool D.22398;
  _Bool D.22399;
  _Bool D.22400;
  const unsigned char * D.22403;
  unsigned char D.22404;
  int D.22405;
  const unsigned char * D.22406;
  unsigned char D.22407;
  int D.22408;
  _Bool D.22409;
  _Bool D.22410;
  const unsigned char * D.22413;
  unsigned char D.22414;
  int D.22415;
  const unsigned char * D.22416;
  unsigned char D.22417;
  int D.22418;
  _Bool D.22419;
  _Bool D.22420;
  const unsigned char * D.22423;
  unsigned char D.22424;
  int D.22425;
  const unsigned char * D.22426;
  unsigned char D.22427;
  int D.22428;
  int D.20716;
  int iftmp.11;
  int D.20715;
  unsigned char D.22435;
  int D.22436;
  _Bool D.22437;
  _Bool D.22438;
  _Bool D.22439;
  const unsigned char * D.22442;
  unsigned char D.22443;
  int D.22444;
  _Bool D.22445;
  _Bool D.22446;
  const unsigned char * D.22449;
  unsigned char D.22450;
  int D.22451;
  _Bool D.22452;
  _Bool D.22453;
  const unsigned char * D.22456;
  unsigned char D.22457;
  int D.22458;
  int D.22462;
  int iftmp.12;
  int D.20734;
  int iftmp.13;
  int D.20733;
  const char[3] * D.22472;
  unsigned char D.22473;
  int D.22474;
  unsigned char D.22475;
  int D.22476;
  _Bool D.22477;
  _Bool D.22478;
  _Bool D.22479;
  const unsigned char * D.22482;
  unsigned char D.22483;
  int D.22484;
  const unsigned char * D.22485;
  unsigned char D.22486;
  int D.22487;
  _Bool D.22488;
  _Bool D.22489;
  const unsigned char * D.22492;
  unsigned char D.22493;
  int D.22494;
  const unsigned char * D.22495;
  unsigned char D.22496;
  int D.22497;
  _Bool D.22498;
  _Bool D.22499;
  const unsigned char * D.22502;
  unsigned char D.22503;
  int D.22504;
  const unsigned char * D.22505;
  unsigned char D.22506;
  int D.22507;
  const char * D.22509;
  int D.20743;
  int iftmp.14;
  int D.20742;
  const char[4] * D.22514;
  unsigned char D.22515;
  int D.22516;
  unsigned char D.22517;
  int D.22518;
  _Bool D.22519;
  _Bool D.22520;
  _Bool D.22521;
  const unsigned char * D.22524;
  unsigned char D.22525;
  int D.22526;
  const unsigned char * D.22527;
  unsigned char D.22528;
  int D.22529;
  _Bool D.22530;
  _Bool D.22531;
  const unsigned char * D.22534;
  unsigned char D.22535;
  int D.22536;
  const unsigned char * D.22537;
  unsigned char D.22538;
  int D.22539;
  _Bool D.22540;
  _Bool D.22541;
  const unsigned char * D.22544;
  unsigned char D.22545;
  int D.22546;
  const unsigned char * D.22547;
  unsigned char D.22548;
  int D.22549;
  int D.20752;
  int iftmp.15;
  int D.20751;
  const char[3] * D.22555;
  unsigned char D.22556;
  int D.22557;
  unsigned char D.22558;
  int D.22559;
  _Bool D.22560;
  _Bool D.22561;
  _Bool D.22562;
  const unsigned char * D.22565;
  unsigned char D.22566;
  int D.22567;
  const unsigned char * D.22568;
  unsigned char D.22569;
  int D.22570;
  _Bool D.22571;
  _Bool D.22572;
  const unsigned char * D.22575;
  unsigned char D.22576;
  int D.22577;
  const unsigned char * D.22578;
  unsigned char D.22579;
  int D.22580;
  _Bool D.22581;
  _Bool D.22582;
  const unsigned char * D.22585;
  unsigned char D.22586;
  int D.22587;
  const unsigned char * D.22588;
  unsigned char D.22589;
  int D.22590;
  int D.20761;
  int iftmp.16;
  int D.20760;
  const char[3] * D.22596;
  unsigned char D.22597;
  int D.22598;
  unsigned char D.22599;
  int D.22600;
  _Bool D.22601;
  _Bool D.22602;
  _Bool D.22603;
  const unsigned char * D.22606;
  unsigned char D.22607;
  int D.22608;
  const unsigned char * D.22609;
  unsigned char D.22610;
  int D.22611;
  _Bool D.22612;
  _Bool D.22613;
  const unsigned char * D.22616;
  unsigned char D.22617;
  int D.22618;
  const unsigned char * D.22619;
  unsigned char D.22620;
  int D.22621;
  _Bool D.22622;
  _Bool D.22623;
  const unsigned char * D.22626;
  unsigned char D.22627;
  int D.22628;
  const unsigned char * D.22629;
  unsigned char D.22630;
  int D.22631;
  int D.20770;
  int iftmp.17;
  int D.20769;
  const char[4] * D.22637;
  unsigned char D.22638;
  int D.22639;
  unsigned char D.22640;
  int D.22641;
  _Bool D.22642;
  _Bool D.22643;
  _Bool D.22644;
  const unsigned char * D.22647;
  unsigned char D.22648;
  int D.22649;
  const unsigned char * D.22650;
  unsigned char D.22651;
  int D.22652;
  _Bool D.22653;
  _Bool D.22654;
  const unsigned char * D.22657;
  unsigned char D.22658;
  int D.22659;
  const unsigned char * D.22660;
  unsigned char D.22661;
  int D.22662;
  _Bool D.22663;
  _Bool D.22664;
  const unsigned char * D.22667;
  unsigned char D.22668;
  int D.22669;
  const unsigned char * D.22670;
  unsigned char D.22671;
  int D.22672;
  int D.20779;
  int iftmp.18;
  int D.20778;
  const char[3] * D.22678;
  unsigned char D.22679;
  int D.22680;
  unsigned char D.22681;
  int D.22682;
  _Bool D.22683;
  _Bool D.22684;
  _Bool D.22685;
  const unsigned char * D.22688;
  unsigned char D.22689;
  int D.22690;
  const unsigned char * D.22691;
  unsigned char D.22692;
  int D.22693;
  _Bool D.22694;
  _Bool D.22695;
  const unsigned char * D.22698;
  unsigned char D.22699;
  int D.22700;
  const unsigned char * D.22701;
  unsigned char D.22702;
  int D.22703;
  _Bool D.22704;
  _Bool D.22705;
  const unsigned char * D.22708;
  unsigned char D.22709;
  int D.22710;
  const unsigned char * D.22711;
  unsigned char D.22712;
  int D.22713;
  int D.20788;
  int iftmp.19;
  int D.20787;
  const char[3] * D.22719;
  unsigned char D.22720;
  int D.22721;
  unsigned char D.22722;
  int D.22723;
  _Bool D.22724;
  _Bool D.22725;
  _Bool D.22726;
  const unsigned char * D.22729;
  unsigned char D.22730;
  int D.22731;
  const unsigned char * D.22732;
  unsigned char D.22733;
  int D.22734;
  _Bool D.22735;
  _Bool D.22736;
  const unsigned char * D.22739;
  unsigned char D.22740;
  int D.22741;
  const unsigned char * D.22742;
  unsigned char D.22743;
  int D.22744;
  _Bool D.22745;
  _Bool D.22746;
  const unsigned char * D.22749;
  unsigned char D.22750;
  int D.22751;
  const unsigned char * D.22752;
  unsigned char D.22753;
  int D.22754;
  int D.20797;
  int iftmp.20;
  int D.20796;
  const char[4] * D.22760;
  unsigned char D.22761;
  int D.22762;
  unsigned char D.22763;
  int D.22764;
  _Bool D.22765;
  _Bool D.22766;
  _Bool D.22767;
  const unsigned char * D.22770;
  unsigned char D.22771;
  int D.22772;
  const unsigned char * D.22773;
  unsigned char D.22774;
  int D.22775;
  _Bool D.22776;
  _Bool D.22777;
  const unsigned char * D.22780;
  unsigned char D.22781;
  int D.22782;
  const unsigned char * D.22783;
  unsigned char D.22784;
  int D.22785;
  _Bool D.22786;
  _Bool D.22787;
  const unsigned char * D.22790;
  unsigned char D.22791;
  int D.22792;
  const unsigned char * D.22793;
  unsigned char D.22794;
  int D.22795;
  int D.20806;
  int iftmp.21;
  int D.20805;
  const char[4] * D.22801;
  unsigned char D.22802;
  int D.22803;
  unsigned char D.22804;
  int D.22805;
  _Bool D.22806;
  _Bool D.22807;
  _Bool D.22808;
  const unsigned char * D.22811;
  unsigned char D.22812;
  int D.22813;
  const unsigned char * D.22814;
  unsigned char D.22815;
  int D.22816;
  _Bool D.22817;
  _Bool D.22818;
  const unsigned char * D.22821;
  unsigned char D.22822;
  int D.22823;
  const unsigned char * D.22824;
  unsigned char D.22825;
  int D.22826;
  _Bool D.22827;
  _Bool D.22828;
  const unsigned char * D.22831;
  unsigned char D.22832;
  int D.22833;
  const unsigned char * D.22834;
  unsigned char D.22835;
  int D.22836;
  int D.20815;
  int iftmp.22;
  int D.20814;
  const char[5] * D.22842;
  unsigned char D.22843;
  int D.22844;
  unsigned char D.22845;
  int D.22846;
  _Bool D.22847;
  _Bool D.22848;
  _Bool D.22849;
  const unsigned char * D.22852;
  unsigned char D.22853;
  int D.22854;
  const unsigned char * D.22855;
  unsigned char D.22856;
  int D.22857;
  _Bool D.22858;
  _Bool D.22859;
  const unsigned char * D.22862;
  unsigned char D.22863;
  int D.22864;
  const unsigned char * D.22865;
  unsigned char D.22866;
  int D.22867;
  _Bool D.22868;
  _Bool D.22869;
  const unsigned char * D.22872;
  unsigned char D.22873;
  int D.22874;
  const unsigned char * D.22875;
  unsigned char D.22876;
  int D.22877;
  unsigned char D.22879;
  <unnamed-unsigned:1> D.22880;
  struct MonoLoaderError * D.22881;
  _Bool D.22882;
  long int D.22883;
  long int D.22884;
  struct MonoLoaderError * D.22887;
  _Bool D.22888;
  long int D.22889;
  long int D.22890;
  struct MonoTableInfo * tt;
  struct MonoClass * class;
  struct MonoClass * parent;
  guint32 cols[6];
  guint32 cols_next[6];
  guint tidx;
  struct MonoGenericContext * context;
  const char * name;
  const char * nspace;
  guint icount;
  struct MonoClass * * interfaces;
  guint32 field_last;
  guint32 method_last;
  guint32 nesting_tokeen;
  void parent_failure = <<< error >>>;

  try
    {
      tt = &image->tables[2];
      parent = 0B;
      tidx = type_token & 16777215;
      context = 0B;
      icount = 0;
      mono_error_init (error);
      D.22153 = type_token >> 24;
      if (D.22153 != 2) goto <D.22151>; else goto <D.22154>;
      <D.22154>:
      D.22155 = tt->rows;
      D.22156 = (unsigned int) D.22155;
      if (D.22156 < tidx) goto <D.22151>; else goto <D.22152>;
      <D.22151>:
      mono_error_set_bad_image (error, image, "Invalid typedef token %x", type_token);
      D.22157 = mono_loader_get_last_error ();
      D.22158 = D.22157 != 0B;
      D.22159 = (long int) D.22158;
      D.22160 = __builtin_expect (D.22159, 0);
      if (D.22160 != 0) goto <D.22161>; else goto <D.22162>;
      <D.22161>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5589, "!mono_loader_get_last_error ()");
      <D.22162>:
      D.22163 = 0B;
      return D.22163;
      <D.22152>:
      mono_loader_lock ();
      D.22164 = (long unsigned int) type_token;
      D.22165 = (void *) D.22164;
      D.22166 = &image->class_cache;
      class = mono_internal_hash_table_lookup (D.22166, D.22165);
      if (class != 0B) goto <D.22167>; else goto <D.22168>;
      <D.22167>:
      mono_loader_unlock ();
      D.22169 = mono_loader_get_last_error ();
      D.22170 = D.22169 != 0B;
      D.22171 = (long int) D.22170;
      D.22172 = __builtin_expect (D.22171, 0);
      if (D.22172 != 0) goto <D.22173>; else goto <D.22174>;
      <D.22173>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5597, "!mono_loader_get_last_error ()");
      <D.22174>:
      D.22163 = class;
      return D.22163;
      <D.22168>:
      D.22175 = tidx + 4294967295;
      D.22176 = (int) D.22175;
      mono_metadata_decode_row (tt, D.22176, &cols, 6);
      D.22177 = cols[1];
      name = mono_metadata_string_heap (image, D.22177);
      D.22178 = cols[2];
      nspace = mono_metadata_string_heap (image, D.22178);
      class = mono_image_alloc0 (image, 272);
      class->name = name;
      class->name_space = nspace;
      mono_profiler_class_event (class, 0);
      class->image = image;
      class->type_token = type_token;
      D.22179 = cols[0];
      class->flags = D.22179;
      D.22164 = (long unsigned int) type_token;
      D.22165 = (void *) D.22164;
      D.22166 = &image->class_cache;
      mono_internal_hash_table_insert (D.22166, D.22165, class);
      classes_size.3 = classes_size;
      classes_size.4 = classes_size.3 + 272;
      classes_size = classes_size.4;
      D.22182 = class->type_token;
      D.22183 = mono_metadata_load_generic_params (image, D.22182, 0B);
      class->generic_container = D.22183;
      D.22184 = class->generic_container;
      if (D.22184 != 0B) goto <D.22185>; else goto <D.22186>;
      <D.22185>:
      class->is_generic = 1;
      D.22184 = class->generic_container;
      D.22184->owner.klass = class;
      D.22184 = class->generic_container;
      context = &D.22184->context;
      <D.22186>:
      D.22184 = class->generic_container;
      if (D.22184 != 0B) goto <D.22187>; else goto <D.22188>;
      <D.22187>:
      enable_gclass_recording ();
      <D.22188>:
      D.22189 = cols[3];
      if (D.22189 != 0) goto <D.22190>; else goto <D.22191>;
      <D.22190>:
      {
        struct MonoClass * tmp;
        guint32 parent_token;

        D.22189 = cols[3];
        parent_token = mono_metadata_token_from_dor (D.22189);
        D.22192 = parent_token >> 24;
        if (D.22192 == 27) goto <D.22193>; else goto <D.22194>;
        <D.22193>:
        class->this_arg.byref = 1;
        class->this_arg.data.klass = class;
        class->this_arg.type = 18;
        class->byval_arg.data.klass = class;
        class->byval_arg.type = 18;
        <D.22194>:
        parent = mono_class_get_full (image, parent_token, context);
        if (parent == 0B) goto <D.22195>; else goto <D.22196>;
        <D.22195>:
        D.22197 = monoeg_g_strdup_printf ("Could not load parent, token is %x", parent_token);
        mono_class_set_failure_from_loader_error (class, error, D.22197);
        goto parent_failure;
        <D.22196>:
        tmp = parent;
        goto <D.20678>;
        <D.20677>:
        if (tmp == class) goto <D.22198>; else goto <D.22199>;
        <D.22198>:
        mono_class_set_failure_and_error (class, error, "Cycle found while resolving parent");
        goto parent_failure;
        <D.22199>:
        D.22184 = class->generic_container;
        if (D.22184 != 0B) goto <D.22200>; else goto <D.22201>;
        <D.22200>:
        D.22202 = tmp->generic_class;
        if (D.22202 != 0B) goto <D.22203>; else goto <D.22204>;
        <D.22203>:
        D.22202 = tmp->generic_class;
        D.22205 = D.22202->container_class;
        if (D.22205 == class) goto <D.22206>; else goto <D.22207>;
        <D.22206>:
        mono_class_set_failure_and_error (class, error, "Parent extends generic instance of this type");
        goto parent_failure;
        <D.22207>:
        <D.22204>:
        <D.22201>:
        tmp = tmp->parent;
        <D.20678>:
        if (tmp != 0B) goto <D.20677>; else goto <D.20679>;
        <D.20679>:
      }
      <D.22191>:
      mono_class_setup_parent (class, parent);
      mono_class_setup_mono_type (class);
      D.22184 = class->generic_container;
      if (D.22184 != 0B) goto <D.22208>; else goto <D.22209>;
      <D.22208>:
      disable_gclass_recording (fix_gclass_incomplete_instantiation, class);
      <D.22209>:
      nesting_tokeen = mono_metadata_nested_in_typedef (image, type_token);
      if (nesting_tokeen != 0) goto <D.22210>; else goto <D.22211>;
      <D.22210>:
      D.22212 = mono_class_create_from_typedef (image, nesting_tokeen, error);
      class->nested_in = D.22212;
      D.22213 = mono_error_ok (error);
      if (D.22213 == 0) goto <D.22214>; else goto <D.22215>;
      <D.22214>:
      D.22216 = mono_error_get_message (error);
      D.22217 = monoeg_strdup (D.22216);
      mono_class_set_failure (class, 7, D.22217);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.22218 = mono_loader_get_last_error ();
      D.22219 = D.22218 != 0B;
      D.22220 = (long int) D.22219;
      D.22221 = __builtin_expect (D.22220, 0);
      if (D.22221 != 0) goto <D.22222>; else goto <D.22223>;
      <D.22222>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5684, "!mono_loader_get_last_error ()");
      <D.22223>:
      D.22163 = 0B;
      return D.22163;
      <D.22215>:
      <D.22211>:
      D.22224 = class->flags;
      D.22225 = D.22224 & 196608;
      if (D.22225 == 65536) goto <D.22226>; else goto <D.22227>;
      <D.22226>:
      class->unicode = 1;
      <D.22227>:
      class->element_class = class;
      D.22228 = class->element_class;
      class->cast_class = D.22228;
      D.22229 = BIT_FIELD_REF <*class, 8, 256>;
      D.22230 = D.22229 & 16;
      if (D.22230 == 0) goto <D.22231>; else goto <D.22232>;
      <D.22231>:
      D.22233 = mono_metadata_interfaces_from_typedef_full (image, type_token, &interfaces, &icount, 0, context);
      if (D.22233 == 0) goto <D.22234>; else goto <D.22235>;
      <D.22234>:
      D.22236 = monoeg_strdup ("Could not load interfaces");
      mono_class_set_failure_from_loader_error (class, error, D.22236);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.22163 = 0B;
      return D.22163;
      <D.22235>:
      interfaces.5 = interfaces;
      class->interfaces = interfaces.5;
      icount.6 = icount;
      D.22239 = (short unsigned int) icount.6;
      class->interface_count = D.22239;
      class->interfaces_inited = 1;
      <D.22232>:
      D.22240 = cols[4];
      D.22241 = D.22240 + 4294967295;
      class->field.first = D.22241;
      D.22242 = cols[5];
      D.22243 = D.22242 + 4294967295;
      class->method.first = D.22243;
      D.22155 = tt->rows;
      D.22156 = (unsigned int) D.22155;
      if (D.22156 > tidx) goto <D.22244>; else goto <D.22245>;
      <D.22244>:
      tidx.7 = (int) tidx;
      mono_metadata_decode_row (tt, tidx.7, &cols_next, 6);
      D.22247 = cols_next[4];
      field_last = D.22247 + 4294967295;
      D.22248 = cols_next[5];
      method_last = D.22248 + 4294967295;
      goto <D.22249>;
      <D.22245>:
      D.22250 = image->tables[4].rows;
      field_last = (guint32) D.22250;
      D.22251 = image->tables[6].rows;
      method_last = (guint32) D.22251;
      <D.22249>:
      D.22240 = cols[4];
      if (D.22240 != 0) goto <D.22254>; else goto <D.22252>;
      <D.22254>:
      D.22240 = cols[4];
      D.22250 = image->tables[4].rows;
      D.22255 = (unsigned int) D.22250;
      if (D.22240 <= D.22255) goto <D.22256>; else goto <D.22252>;
      <D.22256>:
      D.22257 = class->field.first;
      D.22258 = field_last - D.22257;
      class->field.count = D.22258;
      goto <D.22253>;
      <D.22252>:
      class->field.count = 0;
      <D.22253>:
      D.22242 = cols[5];
      D.22251 = image->tables[6].rows;
      D.22259 = (unsigned int) D.22251;
      if (D.22242 <= D.22259) goto <D.22260>; else goto <D.22261>;
      <D.22260>:
      D.22262 = class->method.first;
      D.22263 = method_last - D.22262;
      class->method.count = D.22263;
      goto <D.22264>;
      <D.22261>:
      class->method.count = 0;
      <D.22264>:
      D.22265 = mono_is_corlib_image (image);
      if (D.22265 != 0) goto <D.22266>; else goto <D.22267>;
      <D.22266>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = nspace;
          D.22271 = "System";
          D.22272 = MEM[(const unsigned char *)D.22271];
          D.22273 = (int) D.22272;
          D.22274 = *__s2;
          D.22275 = (int) D.22274;
          __result = D.22273 - D.22275;
          {
            D.22276 = __s2_len != 0;
            D.22277 = __result == 0;
            D.22278 = D.22276 & D.22277;
            if (D.22278 != 0) goto <D.22279>; else goto <D.22280>;
            <D.22279>:
            D.22281 = &MEM[(void *)"System" + 1B];
            D.22282 = *D.22281;
            D.22283 = (int) D.22282;
            D.22284 = __s2 + 1;
            D.22285 = *D.22284;
            D.22286 = (int) D.22285;
            __result = D.22283 - D.22286;
            D.22287 = __s2_len > 1;
            D.22277 = __result == 0;
            D.22288 = D.22287 & D.22277;
            if (D.22288 != 0) goto <D.22289>; else goto <D.22290>;
            <D.22289>:
            D.22291 = &MEM[(void *)"System" + 2B];
            D.22292 = *D.22291;
            D.22293 = (int) D.22292;
            D.22294 = __s2 + 2;
            D.22295 = *D.22294;
            D.22296 = (int) D.22295;
            __result = D.22293 - D.22296;
            D.22297 = __s2_len > 2;
            D.22277 = __result == 0;
            D.22298 = D.22297 & D.22277;
            if (D.22298 != 0) goto <D.22299>; else goto <D.22300>;
            <D.22299>:
            D.22301 = &MEM[(void *)"System" + 3B];
            D.22302 = *D.22301;
            D.22303 = (int) D.22302;
            D.22304 = __s2 + 3;
            D.22305 = *D.22304;
            D.22306 = (int) D.22305;
            __result = D.22303 - D.22306;
            <D.22300>:
            <D.22290>:
            <D.22280>:
          }
          D.20687 = __result;
        }
        iftmp.8 = -D.20687;
        goto <D.22307>;
        <D.22270>:
        iftmp.8 = __builtin_strcmp (nspace, "System");
        <D.22307>:
        D.20688 = iftmp.8;
      }
      if (D.20688 == 0) goto <D.22308>; else goto <D.22309>;
      <D.22308>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name;
          D.22313 = "Array";
          D.22314 = MEM[(const unsigned char *)D.22313];
          D.22315 = (int) D.22314;
          D.22316 = *__s2;
          D.22317 = (int) D.22316;
          __result = D.22315 - D.22317;
          {
            D.22318 = __s2_len != 0;
            D.22319 = __result == 0;
            D.22320 = D.22318 & D.22319;
            if (D.22320 != 0) goto <D.22321>; else goto <D.22322>;
            <D.22321>:
            D.22323 = &MEM[(void *)"Array" + 1B];
            D.22324 = *D.22323;
            D.22325 = (int) D.22324;
            D.22326 = __s2 + 1;
            D.22327 = *D.22326;
            D.22328 = (int) D.22327;
            __result = D.22325 - D.22328;
            D.22329 = __s2_len > 1;
            D.22319 = __result == 0;
            D.22330 = D.22329 & D.22319;
            if (D.22330 != 0) goto <D.22331>; else goto <D.22332>;
            <D.22331>:
            D.22333 = &MEM[(void *)"Array" + 2B];
            D.22334 = *D.22333;
            D.22335 = (int) D.22334;
            D.22336 = __s2 + 2;
            D.22337 = *D.22336;
            D.22338 = (int) D.22337;
            __result = D.22335 - D.22338;
            D.22339 = __s2_len > 2;
            D.22319 = __result == 0;
            D.22340 = D.22339 & D.22319;
            if (D.22340 != 0) goto <D.22341>; else goto <D.22342>;
            <D.22341>:
            D.22343 = &MEM[(void *)"Array" + 3B];
            D.22344 = *D.22343;
            D.22345 = (int) D.22344;
            D.22346 = __s2 + 3;
            D.22347 = *D.22346;
            D.22348 = (int) D.22347;
            __result = D.22345 - D.22348;
            <D.22342>:
            <D.22332>:
            <D.22322>:
          }
          D.20696 = __result;
        }
        iftmp.9 = -D.20696;
        goto <D.22349>;
        <D.22312>:
        iftmp.9 = __builtin_strcmp (name, "Array");
        <D.22349>:
        D.20697 = iftmp.9;
      }
      if (D.20697 == 0) goto <D.22350>; else goto <D.22351>;
      <D.22350>:
      D.22352 = class->instance_size;
      D.22353 = (unsigned int) D.22352;
      D.22354 = D.22353 + 16;
      D.22355 = (int) D.22354;
      class->instance_size = D.22355;
      D.22356 = class->field.count;
      D.22357 = D.22356 != 0;
      D.22358 = (long int) D.22357;
      D.22359 = __builtin_expect (D.22358, 0);
      if (D.22359 != 0) goto <D.22360>; else goto <D.22361>;
      <D.22360>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5744, "class->field.count == 0");
      <D.22361>:
      <D.22351>:
      <D.22309>:
      <D.22267>:
      D.22229 = BIT_FIELD_REF <*class, 8, 256>;
      D.22230 = D.22229 & 16;
      if (D.22230 != 0) goto <D.22362>; else goto <D.22363>;
      <D.22362>:
      {
        struct MonoType * enum_basetype;

        enum_basetype = mono_class_find_enum_basetype (class);
        if (enum_basetype == 0B) goto <D.22364>; else goto <D.22365>;
        <D.22364>:
        D.22366 = mono_defaults.int32_class;
        class->element_class = D.22366;
        D.22228 = class->element_class;
        class->cast_class = D.22228;
        mono_class_set_failure_and_error (class, error, "Could not enum basetype");
        mono_loader_unlock ();
        mono_profiler_class_loaded (class, 1);
        D.22367 = mono_loader_get_last_error ();
        D.22368 = D.22367 != 0B;
        D.22369 = (long int) D.22368;
        D.22370 = __builtin_expect (D.22369, 0);
        if (D.22370 != 0) goto <D.22371>; else goto <D.22372>;
        <D.22371>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5755, "!mono_loader_get_last_error ()");
        <D.22372>:
        D.22163 = 0B;
        return D.22163;
        <D.22365>:
        D.22373 = mono_class_from_mono_type (enum_basetype);
        class->element_class = D.22373;
        D.22228 = class->element_class;
        class->cast_class = D.22228;
      }
      <D.22363>:
      D.22184 = class->generic_container;
      if (D.22184 != 0B) goto <D.22374>; else goto <D.22375>;
      <D.22374>:
      D.22184 = class->generic_container;
      D.22376 = mono_metadata_load_generic_param_constraints_full (image, type_token, D.22184);
      if (D.22376 == 0) goto <D.22377>; else goto <D.22378>;
      <D.22377>:
      D.22379 = monoeg_strdup ("Could not load generic parameter constraints");
      mono_class_set_failure_from_loader_error (class, error, D.22379);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.22380 = mono_loader_get_last_error ();
      D.22381 = D.22380 != 0B;
      D.22382 = (long int) D.22381;
      D.22383 = __builtin_expect (D.22382, 0);
      if (D.22383 != 0) goto <D.22384>; else goto <D.22385>;
      <D.22384>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5770, "!mono_loader_get_last_error ()");
      <D.22385>:
      D.22163 = 0B;
      return D.22163;
      <D.22378>:
      <D.22375>:
      D.22386 = class->image;
      D.22387 = D.22386->assembly_name;
      if (D.22387 != 0B) goto <D.22388>; else goto <D.22389>;
      <D.22388>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.22386 = class->image;
          __s2 = D.22386->assembly_name;
          D.22393 = "Mono.Simd";
          D.22394 = MEM[(const unsigned char *)D.22393];
          D.22395 = (int) D.22394;
          D.22396 = *__s2;
          D.22397 = (int) D.22396;
          __result = D.22395 - D.22397;
          {
            D.22398 = __s2_len != 0;
            D.22399 = __result == 0;
            D.22400 = D.22398 & D.22399;
            if (D.22400 != 0) goto <D.22401>; else goto <D.22402>;
            <D.22401>:
            D.22403 = &MEM[(void *)"Mono.Simd" + 1B];
            D.22404 = *D.22403;
            D.22405 = (int) D.22404;
            D.22406 = __s2 + 1;
            D.22407 = *D.22406;
            D.22408 = (int) D.22407;
            __result = D.22405 - D.22408;
            D.22409 = __s2_len > 1;
            D.22399 = __result == 0;
            D.22410 = D.22409 & D.22399;
            if (D.22410 != 0) goto <D.22411>; else goto <D.22412>;
            <D.22411>:
            D.22413 = &MEM[(void *)"Mono.Simd" + 2B];
            D.22414 = *D.22413;
            D.22415 = (int) D.22414;
            D.22416 = __s2 + 2;
            D.22417 = *D.22416;
            D.22418 = (int) D.22417;
            __result = D.22415 - D.22418;
            D.22419 = __s2_len > 2;
            D.22399 = __result == 0;
            D.22420 = D.22419 & D.22399;
            if (D.22420 != 0) goto <D.22421>; else goto <D.22422>;
            <D.22421>:
            D.22423 = &MEM[(void *)"Mono.Simd" + 3B];
            D.22424 = *D.22423;
            D.22425 = (int) D.22424;
            D.22426 = __s2 + 3;
            D.22427 = *D.22426;
            D.22428 = (int) D.22427;
            __result = D.22425 - D.22428;
            <D.22422>:
            <D.22412>:
            <D.22402>:
          }
          D.20706 = __result;
        }
        iftmp.10 = -D.20706;
        goto <D.22429>;
        <D.22392>:
        D.22386 = class->image;
        D.22387 = D.22386->assembly_name;
        iftmp.10 = __builtin_strcmp (D.22387, "Mono.Simd");
        <D.22429>:
        D.20707 = iftmp.10;
      }
      if (D.20707 == 0) goto <D.22430>; else goto <D.22431>;
      <D.22430>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = nspace;
          D.22393 = "Mono.Simd";
          D.22394 = MEM[(const unsigned char *)D.22393];
          D.22395 = (int) D.22394;
          D.22435 = *__s2;
          D.22436 = (int) D.22435;
          __result = D.22395 - D.22436;
          {
            D.22437 = __s2_len != 0;
            D.22438 = __result == 0;
            D.22439 = D.22437 & D.22438;
            if (D.22439 != 0) goto <D.22440>; else goto <D.22441>;
            <D.22440>:
            D.22403 = &MEM[(void *)"Mono.Simd" + 1B];
            D.22404 = *D.22403;
            D.22405 = (int) D.22404;
            D.22442 = __s2 + 1;
            D.22443 = *D.22442;
            D.22444 = (int) D.22443;
            __result = D.22405 - D.22444;
            D.22445 = __s2_len > 1;
            D.22438 = __result == 0;
            D.22446 = D.22445 & D.22438;
            if (D.22446 != 0) goto <D.22447>; else goto <D.22448>;
            <D.22447>:
            D.22413 = &MEM[(void *)"Mono.Simd" + 2B];
            D.22414 = *D.22413;
            D.22415 = (int) D.22414;
            D.22449 = __s2 + 2;
            D.22450 = *D.22449;
            D.22451 = (int) D.22450;
            __result = D.22415 - D.22451;
            D.22452 = __s2_len > 2;
            D.22438 = __result == 0;
            D.22453 = D.22452 & D.22438;
            if (D.22453 != 0) goto <D.22454>; else goto <D.22455>;
            <D.22454>:
            D.22423 = &MEM[(void *)"Mono.Simd" + 3B];
            D.22424 = *D.22423;
            D.22425 = (int) D.22424;
            D.22456 = __s2 + 3;
            D.22457 = *D.22456;
            D.22458 = (int) D.22457;
            __result = D.22425 - D.22458;
            <D.22455>:
            <D.22448>:
            <D.22441>:
          }
          D.20715 = __result;
        }
        iftmp.11 = -D.20715;
        goto <D.22459>;
        <D.22434>:
        iftmp.11 = __builtin_strcmp (nspace, "Mono.Simd");
        <D.22459>:
        D.20716 = iftmp.11;
      }
      if (D.20716 == 0) goto <D.22460>; else goto <D.22461>;
      <D.22460>:
      D.22462 = strncmp (name, "Vector", 6);
      if (D.22462 == 0) goto <D.22463>; else goto <D.22464>;
      <D.22463>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.22472 = "2d";
          D.22473 = MEM[(const unsigned char *)D.22472];
          D.22474 = (int) D.22473;
          D.22475 = *__s2;
          D.22476 = (int) D.22475;
          __result = D.22474 - D.22476;
          {
            D.22477 = __s2_len != 0;
            D.22478 = __result == 0;
            D.22479 = D.22477 & D.22478;
            if (D.22479 != 0) goto <D.22480>; else goto <D.22481>;
            <D.22480>:
            D.22482 = &MEM[(void *)"2d" + 1B];
            D.22483 = *D.22482;
            D.22484 = (int) D.22483;
            D.22485 = __s2 + 1;
            D.22486 = *D.22485;
            D.22487 = (int) D.22486;
            __result = D.22484 - D.22487;
            D.22488 = __s2_len > 1;
            D.22478 = __result == 0;
            D.22489 = D.22488 & D.22478;
            if (D.22489 != 0) goto <D.22490>; else goto <D.22491>;
            <D.22490>:
            D.22492 = &MEM[(void *)"2d" + 2B];
            D.22493 = *D.22492;
            D.22494 = (int) D.22493;
            D.22495 = __s2 + 2;
            D.22496 = *D.22495;
            D.22497 = (int) D.22496;
            __result = D.22494 - D.22497;
            D.22498 = __s2_len > 2;
            D.22478 = __result == 0;
            D.22499 = D.22498 & D.22478;
            if (D.22499 != 0) goto <D.22500>; else goto <D.22501>;
            <D.22500>:
            D.22502 = &MEM[(void *)"2d" + 3B];
            D.22503 = *D.22502;
            D.22504 = (int) D.22503;
            D.22505 = __s2 + 3;
            D.22506 = *D.22505;
            D.22507 = (int) D.22506;
            __result = D.22504 - D.22507;
            <D.22501>:
            <D.22491>:
            <D.22481>:
          }
          D.20733 = __result;
        }
        iftmp.13 = -D.20733;
        goto <D.22508>;
        <D.22471>:
        D.22509 = name + 6;
        iftmp.13 = __builtin_strcmp (D.22509, "2d");
        <D.22508>:
        D.20734 = iftmp.13;
      }
      if (D.20734 == 0) goto <D.22466>; else goto <D.22510>;
      <D.22510>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.22514 = "2ul";
          D.22515 = MEM[(const unsigned char *)D.22514];
          D.22516 = (int) D.22515;
          D.22517 = *__s2;
          D.22518 = (int) D.22517;
          __result = D.22516 - D.22518;
          {
            D.22519 = __s2_len != 0;
            D.22520 = __result == 0;
            D.22521 = D.22519 & D.22520;
            if (D.22521 != 0) goto <D.22522>; else goto <D.22523>;
            <D.22522>:
            D.22524 = &MEM[(void *)"2ul" + 1B];
            D.22525 = *D.22524;
            D.22526 = (int) D.22525;
            D.22527 = __s2 + 1;
            D.22528 = *D.22527;
            D.22529 = (int) D.22528;
            __result = D.22526 - D.22529;
            D.22530 = __s2_len > 1;
            D.22520 = __result == 0;
            D.22531 = D.22530 & D.22520;
            if (D.22531 != 0) goto <D.22532>; else goto <D.22533>;
            <D.22532>:
            D.22534 = &MEM[(void *)"2ul" + 2B];
            D.22535 = *D.22534;
            D.22536 = (int) D.22535;
            D.22537 = __s2 + 2;
            D.22538 = *D.22537;
            D.22539 = (int) D.22538;
            __result = D.22536 - D.22539;
            D.22540 = __s2_len > 2;
            D.22520 = __result == 0;
            D.22541 = D.22540 & D.22520;
            if (D.22541 != 0) goto <D.22542>; else goto <D.22543>;
            <D.22542>:
            D.22544 = &MEM[(void *)"2ul" + 3B];
            D.22545 = *D.22544;
            D.22546 = (int) D.22545;
            D.22547 = __s2 + 3;
            D.22548 = *D.22547;
            D.22549 = (int) D.22548;
            __result = D.22546 - D.22549;
            <D.22543>:
            <D.22533>:
            <D.22523>:
          }
          D.20742 = __result;
        }
        iftmp.14 = -D.20742;
        goto <D.22550>;
        <D.22513>:
        D.22509 = name + 6;
        iftmp.14 = __builtin_strcmp (D.22509, "2ul");
        <D.22550>:
        D.20743 = iftmp.14;
      }
      if (D.20743 == 0) goto <D.22466>; else goto <D.22551>;
      <D.22551>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.22555 = "2l";
          D.22556 = MEM[(const unsigned char *)D.22555];
          D.22557 = (int) D.22556;
          D.22558 = *__s2;
          D.22559 = (int) D.22558;
          __result = D.22557 - D.22559;
          {
            D.22560 = __s2_len != 0;
            D.22561 = __result == 0;
            D.22562 = D.22560 & D.22561;
            if (D.22562 != 0) goto <D.22563>; else goto <D.22564>;
            <D.22563>:
            D.22565 = &MEM[(void *)"2l" + 1B];
            D.22566 = *D.22565;
            D.22567 = (int) D.22566;
            D.22568 = __s2 + 1;
            D.22569 = *D.22568;
            D.22570 = (int) D.22569;
            __result = D.22567 - D.22570;
            D.22571 = __s2_len > 1;
            D.22561 = __result == 0;
            D.22572 = D.22571 & D.22561;
            if (D.22572 != 0) goto <D.22573>; else goto <D.22574>;
            <D.22573>:
            D.22575 = &MEM[(void *)"2l" + 2B];
            D.22576 = *D.22575;
            D.22577 = (int) D.22576;
            D.22578 = __s2 + 2;
            D.22579 = *D.22578;
            D.22580 = (int) D.22579;
            __result = D.22577 - D.22580;
            D.22581 = __s2_len > 2;
            D.22561 = __result == 0;
            D.22582 = D.22581 & D.22561;
            if (D.22582 != 0) goto <D.22583>; else goto <D.22584>;
            <D.22583>:
            D.22585 = &MEM[(void *)"2l" + 3B];
            D.22586 = *D.22585;
            D.22587 = (int) D.22586;
            D.22588 = __s2 + 3;
            D.22589 = *D.22588;
            D.22590 = (int) D.22589;
            __result = D.22587 - D.22590;
            <D.22584>:
            <D.22574>:
            <D.22564>:
          }
          D.20751 = __result;
        }
        iftmp.15 = -D.20751;
        goto <D.22591>;
        <D.22554>:
        D.22509 = name + 6;
        iftmp.15 = __builtin_strcmp (D.22509, "2l");
        <D.22591>:
        D.20752 = iftmp.15;
      }
      if (D.20752 == 0) goto <D.22466>; else goto <D.22592>;
      <D.22592>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.22596 = "4f";
          D.22597 = MEM[(const unsigned char *)D.22596];
          D.22598 = (int) D.22597;
          D.22599 = *__s2;
          D.22600 = (int) D.22599;
          __result = D.22598 - D.22600;
          {
            D.22601 = __s2_len != 0;
            D.22602 = __result == 0;
            D.22603 = D.22601 & D.22602;
            if (D.22603 != 0) goto <D.22604>; else goto <D.22605>;
            <D.22604>:
            D.22606 = &MEM[(void *)"4f" + 1B];
            D.22607 = *D.22606;
            D.22608 = (int) D.22607;
            D.22609 = __s2 + 1;
            D.22610 = *D.22609;
            D.22611 = (int) D.22610;
            __result = D.22608 - D.22611;
            D.22612 = __s2_len > 1;
            D.22602 = __result == 0;
            D.22613 = D.22612 & D.22602;
            if (D.22613 != 0) goto <D.22614>; else goto <D.22615>;
            <D.22614>:
            D.22616 = &MEM[(void *)"4f" + 2B];
            D.22617 = *D.22616;
            D.22618 = (int) D.22617;
            D.22619 = __s2 + 2;
            D.22620 = *D.22619;
            D.22621 = (int) D.22620;
            __result = D.22618 - D.22621;
            D.22622 = __s2_len > 2;
            D.22602 = __result == 0;
            D.22623 = D.22622 & D.22602;
            if (D.22623 != 0) goto <D.22624>; else goto <D.22625>;
            <D.22624>:
            D.22626 = &MEM[(void *)"4f" + 3B];
            D.22627 = *D.22626;
            D.22628 = (int) D.22627;
            D.22629 = __s2 + 3;
            D.22630 = *D.22629;
            D.22631 = (int) D.22630;
            __result = D.22628 - D.22631;
            <D.22625>:
            <D.22615>:
            <D.22605>:
          }
          D.20760 = __result;
        }
        iftmp.16 = -D.20760;
        goto <D.22632>;
        <D.22595>:
        D.22509 = name + 6;
        iftmp.16 = __builtin_strcmp (D.22509, "4f");
        <D.22632>:
        D.20761 = iftmp.16;
      }
      if (D.20761 == 0) goto <D.22466>; else goto <D.22633>;
      <D.22633>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.22637 = "4ui";
          D.22638 = MEM[(const unsigned char *)D.22637];
          D.22639 = (int) D.22638;
          D.22640 = *__s2;
          D.22641 = (int) D.22640;
          __result = D.22639 - D.22641;
          {
            D.22642 = __s2_len != 0;
            D.22643 = __result == 0;
            D.22644 = D.22642 & D.22643;
            if (D.22644 != 0) goto <D.22645>; else goto <D.22646>;
            <D.22645>:
            D.22647 = &MEM[(void *)"4ui" + 1B];
            D.22648 = *D.22647;
            D.22649 = (int) D.22648;
            D.22650 = __s2 + 1;
            D.22651 = *D.22650;
            D.22652 = (int) D.22651;
            __result = D.22649 - D.22652;
            D.22653 = __s2_len > 1;
            D.22643 = __result == 0;
            D.22654 = D.22653 & D.22643;
            if (D.22654 != 0) goto <D.22655>; else goto <D.22656>;
            <D.22655>:
            D.22657 = &MEM[(void *)"4ui" + 2B];
            D.22658 = *D.22657;
            D.22659 = (int) D.22658;
            D.22660 = __s2 + 2;
            D.22661 = *D.22660;
            D.22662 = (int) D.22661;
            __result = D.22659 - D.22662;
            D.22663 = __s2_len > 2;
            D.22643 = __result == 0;
            D.22664 = D.22663 & D.22643;
            if (D.22664 != 0) goto <D.22665>; else goto <D.22666>;
            <D.22665>:
            D.22667 = &MEM[(void *)"4ui" + 3B];
            D.22668 = *D.22667;
            D.22669 = (int) D.22668;
            D.22670 = __s2 + 3;
            D.22671 = *D.22670;
            D.22672 = (int) D.22671;
            __result = D.22669 - D.22672;
            <D.22666>:
            <D.22656>:
            <D.22646>:
          }
          D.20769 = __result;
        }
        iftmp.17 = -D.20769;
        goto <D.22673>;
        <D.22636>:
        D.22509 = name + 6;
        iftmp.17 = __builtin_strcmp (D.22509, "4ui");
        <D.22673>:
        D.20770 = iftmp.17;
      }
      if (D.20770 == 0) goto <D.22466>; else goto <D.22674>;
      <D.22674>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.22678 = "4i";
          D.22679 = MEM[(const unsigned char *)D.22678];
          D.22680 = (int) D.22679;
          D.22681 = *__s2;
          D.22682 = (int) D.22681;
          __result = D.22680 - D.22682;
          {
            D.22683 = __s2_len != 0;
            D.22684 = __result == 0;
            D.22685 = D.22683 & D.22684;
            if (D.22685 != 0) goto <D.22686>; else goto <D.22687>;
            <D.22686>:
            D.22688 = &MEM[(void *)"4i" + 1B];
            D.22689 = *D.22688;
            D.22690 = (int) D.22689;
            D.22691 = __s2 + 1;
            D.22692 = *D.22691;
            D.22693 = (int) D.22692;
            __result = D.22690 - D.22693;
            D.22694 = __s2_len > 1;
            D.22684 = __result == 0;
            D.22695 = D.22694 & D.22684;
            if (D.22695 != 0) goto <D.22696>; else goto <D.22697>;
            <D.22696>:
            D.22698 = &MEM[(void *)"4i" + 2B];
            D.22699 = *D.22698;
            D.22700 = (int) D.22699;
            D.22701 = __s2 + 2;
            D.22702 = *D.22701;
            D.22703 = (int) D.22702;
            __result = D.22700 - D.22703;
            D.22704 = __s2_len > 2;
            D.22684 = __result == 0;
            D.22705 = D.22704 & D.22684;
            if (D.22705 != 0) goto <D.22706>; else goto <D.22707>;
            <D.22706>:
            D.22708 = &MEM[(void *)"4i" + 3B];
            D.22709 = *D.22708;
            D.22710 = (int) D.22709;
            D.22711 = __s2 + 3;
            D.22712 = *D.22711;
            D.22713 = (int) D.22712;
            __result = D.22710 - D.22713;
            <D.22707>:
            <D.22697>:
            <D.22687>:
          }
          D.20778 = __result;
        }
        iftmp.18 = -D.20778;
        goto <D.22714>;
        <D.22677>:
        D.22509 = name + 6;
        iftmp.18 = __builtin_strcmp (D.22509, "4i");
        <D.22714>:
        D.20779 = iftmp.18;
      }
      if (D.20779 == 0) goto <D.22466>; else goto <D.22715>;
      <D.22715>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.22719 = "8s";
          D.22720 = MEM[(const unsigned char *)D.22719];
          D.22721 = (int) D.22720;
          D.22722 = *__s2;
          D.22723 = (int) D.22722;
          __result = D.22721 - D.22723;
          {
            D.22724 = __s2_len != 0;
            D.22725 = __result == 0;
            D.22726 = D.22724 & D.22725;
            if (D.22726 != 0) goto <D.22727>; else goto <D.22728>;
            <D.22727>:
            D.22729 = &MEM[(void *)"8s" + 1B];
            D.22730 = *D.22729;
            D.22731 = (int) D.22730;
            D.22732 = __s2 + 1;
            D.22733 = *D.22732;
            D.22734 = (int) D.22733;
            __result = D.22731 - D.22734;
            D.22735 = __s2_len > 1;
            D.22725 = __result == 0;
            D.22736 = D.22735 & D.22725;
            if (D.22736 != 0) goto <D.22737>; else goto <D.22738>;
            <D.22737>:
            D.22739 = &MEM[(void *)"8s" + 2B];
            D.22740 = *D.22739;
            D.22741 = (int) D.22740;
            D.22742 = __s2 + 2;
            D.22743 = *D.22742;
            D.22744 = (int) D.22743;
            __result = D.22741 - D.22744;
            D.22745 = __s2_len > 2;
            D.22725 = __result == 0;
            D.22746 = D.22745 & D.22725;
            if (D.22746 != 0) goto <D.22747>; else goto <D.22748>;
            <D.22747>:
            D.22749 = &MEM[(void *)"8s" + 3B];
            D.22750 = *D.22749;
            D.22751 = (int) D.22750;
            D.22752 = __s2 + 3;
            D.22753 = *D.22752;
            D.22754 = (int) D.22753;
            __result = D.22751 - D.22754;
            <D.22748>:
            <D.22738>:
            <D.22728>:
          }
          D.20787 = __result;
        }
        iftmp.19 = -D.20787;
        goto <D.22755>;
        <D.22718>:
        D.22509 = name + 6;
        iftmp.19 = __builtin_strcmp (D.22509, "8s");
        <D.22755>:
        D.20788 = iftmp.19;
      }
      if (D.20788 == 0) goto <D.22466>; else goto <D.22756>;
      <D.22756>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.22760 = "8us";
          D.22761 = MEM[(const unsigned char *)D.22760];
          D.22762 = (int) D.22761;
          D.22763 = *__s2;
          D.22764 = (int) D.22763;
          __result = D.22762 - D.22764;
          {
            D.22765 = __s2_len != 0;
            D.22766 = __result == 0;
            D.22767 = D.22765 & D.22766;
            if (D.22767 != 0) goto <D.22768>; else goto <D.22769>;
            <D.22768>:
            D.22770 = &MEM[(void *)"8us" + 1B];
            D.22771 = *D.22770;
            D.22772 = (int) D.22771;
            D.22773 = __s2 + 1;
            D.22774 = *D.22773;
            D.22775 = (int) D.22774;
            __result = D.22772 - D.22775;
            D.22776 = __s2_len > 1;
            D.22766 = __result == 0;
            D.22777 = D.22776 & D.22766;
            if (D.22777 != 0) goto <D.22778>; else goto <D.22779>;
            <D.22778>:
            D.22780 = &MEM[(void *)"8us" + 2B];
            D.22781 = *D.22780;
            D.22782 = (int) D.22781;
            D.22783 = __s2 + 2;
            D.22784 = *D.22783;
            D.22785 = (int) D.22784;
            __result = D.22782 - D.22785;
            D.22786 = __s2_len > 2;
            D.22766 = __result == 0;
            D.22787 = D.22786 & D.22766;
            if (D.22787 != 0) goto <D.22788>; else goto <D.22789>;
            <D.22788>:
            D.22790 = &MEM[(void *)"8us" + 3B];
            D.22791 = *D.22790;
            D.22792 = (int) D.22791;
            D.22793 = __s2 + 3;
            D.22794 = *D.22793;
            D.22795 = (int) D.22794;
            __result = D.22792 - D.22795;
            <D.22789>:
            <D.22779>:
            <D.22769>:
          }
          D.20796 = __result;
        }
        iftmp.20 = -D.20796;
        goto <D.22796>;
        <D.22759>:
        D.22509 = name + 6;
        iftmp.20 = __builtin_strcmp (D.22509, "8us");
        <D.22796>:
        D.20797 = iftmp.20;
      }
      if (D.20797 == 0) goto <D.22466>; else goto <D.22797>;
      <D.22797>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.22801 = "16b";
          D.22802 = MEM[(const unsigned char *)D.22801];
          D.22803 = (int) D.22802;
          D.22804 = *__s2;
          D.22805 = (int) D.22804;
          __result = D.22803 - D.22805;
          {
            D.22806 = __s2_len != 0;
            D.22807 = __result == 0;
            D.22808 = D.22806 & D.22807;
            if (D.22808 != 0) goto <D.22809>; else goto <D.22810>;
            <D.22809>:
            D.22811 = &MEM[(void *)"16b" + 1B];
            D.22812 = *D.22811;
            D.22813 = (int) D.22812;
            D.22814 = __s2 + 1;
            D.22815 = *D.22814;
            D.22816 = (int) D.22815;
            __result = D.22813 - D.22816;
            D.22817 = __s2_len > 1;
            D.22807 = __result == 0;
            D.22818 = D.22817 & D.22807;
            if (D.22818 != 0) goto <D.22819>; else goto <D.22820>;
            <D.22819>:
            D.22821 = &MEM[(void *)"16b" + 2B];
            D.22822 = *D.22821;
            D.22823 = (int) D.22822;
            D.22824 = __s2 + 2;
            D.22825 = *D.22824;
            D.22826 = (int) D.22825;
            __result = D.22823 - D.22826;
            D.22827 = __s2_len > 2;
            D.22807 = __result == 0;
            D.22828 = D.22827 & D.22807;
            if (D.22828 != 0) goto <D.22829>; else goto <D.22830>;
            <D.22829>:
            D.22831 = &MEM[(void *)"16b" + 3B];
            D.22832 = *D.22831;
            D.22833 = (int) D.22832;
            D.22834 = __s2 + 3;
            D.22835 = *D.22834;
            D.22836 = (int) D.22835;
            __result = D.22833 - D.22836;
            <D.22830>:
            <D.22820>:
            <D.22810>:
          }
          D.20805 = __result;
        }
        iftmp.21 = -D.20805;
        goto <D.22837>;
        <D.22800>:
        D.22509 = name + 6;
        iftmp.21 = __builtin_strcmp (D.22509, "16b");
        <D.22837>:
        D.20806 = iftmp.21;
      }
      if (D.20806 == 0) goto <D.22466>; else goto <D.22838>;
      <D.22838>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = name + 6;
          D.22842 = "16sb";
          D.22843 = MEM[(const unsigned char *)D.22842];
          D.22844 = (int) D.22843;
          D.22845 = *__s2;
          D.22846 = (int) D.22845;
          __result = D.22844 - D.22846;
          {
            D.22847 = __s2_len != 0;
            D.22848 = __result == 0;
            D.22849 = D.22847 & D.22848;
            if (D.22849 != 0) goto <D.22850>; else goto <D.22851>;
            <D.22850>:
            D.22852 = &MEM[(void *)"16sb" + 1B];
            D.22853 = *D.22852;
            D.22854 = (int) D.22853;
            D.22855 = __s2 + 1;
            D.22856 = *D.22855;
            D.22857 = (int) D.22856;
            __result = D.22854 - D.22857;
            D.22858 = __s2_len > 1;
            D.22848 = __result == 0;
            D.22859 = D.22858 & D.22848;
            if (D.22859 != 0) goto <D.22860>; else goto <D.22861>;
            <D.22860>:
            D.22862 = &MEM[(void *)"16sb" + 2B];
            D.22863 = *D.22862;
            D.22864 = (int) D.22863;
            D.22865 = __s2 + 2;
            D.22866 = *D.22865;
            D.22867 = (int) D.22866;
            __result = D.22864 - D.22867;
            D.22868 = __s2_len > 2;
            D.22848 = __result == 0;
            D.22869 = D.22868 & D.22848;
            if (D.22869 != 0) goto <D.22870>; else goto <D.22871>;
            <D.22870>:
            D.22872 = &MEM[(void *)"16sb" + 3B];
            D.22873 = *D.22872;
            D.22874 = (int) D.22873;
            D.22875 = __s2 + 3;
            D.22876 = *D.22875;
            D.22877 = (int) D.22876;
            __result = D.22874 - D.22877;
            <D.22871>:
            <D.22861>:
            <D.22851>:
          }
          D.20814 = __result;
        }
        iftmp.22 = -D.20814;
        goto <D.22878>;
        <D.22841>:
        D.22509 = name + 6;
        iftmp.22 = __builtin_strcmp (D.22509, "16sb");
        <D.22878>:
        D.20815 = iftmp.22;
      }
      if (D.20815 == 0) goto <D.22466>; else goto <D.22467>;
      <D.22466>:
      iftmp.12 = 1;
      goto <D.22468>;
      <D.22467>:
      iftmp.12 = 0;
      <D.22468>:
      D.22879 = (unsigned char) iftmp.12;
      D.22880 = (<unnamed-unsigned:1>) D.22879;
      class->simd_type = D.22880;
      <D.22464>:
      <D.22461>:
      <D.22431>:
      <D.22389>:
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 0);
      D.22881 = mono_loader_get_last_error ();
      D.22882 = D.22881 != 0B;
      D.22883 = (long int) D.22882;
      D.22884 = __builtin_expect (D.22883, 0);
      if (D.22884 != 0) goto <D.22885>; else goto <D.22886>;
      <D.22885>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5782, "!mono_loader_get_last_error ()");
      <D.22886>:
      D.22163 = class;
      return D.22163;
      parent_failure:
      mono_class_setup_mono_type (class);
      mono_loader_unlock ();
      mono_profiler_class_loaded (class, 1);
      D.22887 = mono_loader_get_last_error ();
      D.22888 = D.22887 != 0B;
      D.22889 = (long int) D.22888;
      D.22890 = __builtin_expect (D.22889, 0);
      if (D.22890 != 0) goto <D.22891>; else goto <D.22892>;
      <D.22891>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5790, "!mono_loader_get_last_error ()");
      <D.22892>:
      D.22163 = 0B;
      return D.22163;
    }
  finally
    {
      cols = {CLOBBER};
      cols_next = {CLOBBER};
      icount = {CLOBBER};
      interfaces = {CLOBBER};
    }
}


fix_gclass_incomplete_instantiation (struct MonoClass * gclass, void * user_data)
{
  struct MonoGenericClass * D.22895;
  struct MonoClass * D.22896;
  gboolean D.22899;
  struct MonoClass * D.22900;
  struct MonoClass * D.22903;
  struct MonoClass * gtd;

  gtd = user_data;
  D.22895 = gclass->generic_class;
  D.22896 = D.22895->container_class;
  if (D.22896 != gtd) goto <D.22897>; else goto <D.22898>;
  <D.22897>:
  D.22899 = 0;
  return D.22899;
  <D.22898>:
  D.22900 = gtd->parent;
  if (D.22900 != 0B) goto <D.22901>; else goto <D.22902>;
  <D.22901>:
  D.22903 = gclass->parent;
  if (D.22903 == 0B) goto <D.22904>; else goto <D.22905>;
  <D.22904>:
  mono_generic_class_setup_parent (gclass, gtd);
  <D.22905>:
  <D.22902>:
  D.22899 = 1;
  return D.22899;
}


mono_generic_class_setup_parent (struct MonoClass * klass, struct MonoClass * gtd)
{
  struct MonoClass * D.22907;
  struct MonoGenericContext * D.22910;
  struct MonoClass * D.22911;
  int D.22912;
  struct MonoClass * D.22915;
  struct MonoClass * D.22916;
  unsigned char D.22919;
  unsigned char D.22920;
  struct MonoClass * D.22923;
  struct MonoClass * D.22924;

  D.22907 = gtd->parent;
  if (D.22907 != 0B) goto <D.22908>; else goto <D.22909>;
  <D.22908>:
  {
    struct MonoError error;
    struct MonoGenericClass * gclass;

    try
      {
        gclass = klass->generic_class;
        D.22910 = mono_generic_class_get_context (gclass);
        D.22907 = gtd->parent;
        D.22911 = mono_class_inflate_generic_class_checked (D.22907, D.22910, &error);
        klass->parent = D.22911;
        D.22912 = mono_error_ok (&error);
        if (D.22912 == 0) goto <D.22913>; else goto <D.22914>;
        <D.22913>:
        D.22915 = mono_defaults.object_class;
        klass->parent = D.22915;
        mono_class_set_failure (klass, 7, 0B);
        mono_error_cleanup (&error);
        <D.22914>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.22909>:
  D.22916 = klass->parent;
  if (D.22916 != 0B) goto <D.22917>; else goto <D.22918>;
  <D.22917>:
  D.22916 = klass->parent;
  mono_class_setup_parent (klass, D.22916);
  <D.22918>:
  D.22919 = BIT_FIELD_REF <*klass, 8, 256>;
  D.22920 = D.22919 & 16;
  if (D.22920 != 0) goto <D.22921>; else goto <D.22922>;
  <D.22921>:
  D.22923 = gtd->cast_class;
  klass->cast_class = D.22923;
  D.22924 = gtd->element_class;
  klass->element_class = D.22924;
  <D.22922>:
}


mono_class_inflate_generic_class_checked (struct MonoClass * gklass, struct MonoGenericContext * context, struct MonoError * error)
{
  struct MonoType * D.22925;
  int D.22926;
  struct MonoClass * D.22929;
  struct MonoClass * res;
  struct MonoType * inflated;

  D.22925 = &gklass->byval_arg;
  inflated = mono_class_inflate_generic_type_checked (D.22925, context, error);
  D.22926 = mono_error_ok (error);
  if (D.22926 == 0) goto <D.22927>; else goto <D.22928>;
  <D.22927>:
  D.22929 = 0B;
  return D.22929;
  <D.22928>:
  res = mono_class_from_mono_type (inflated);
  mono_metadata_free_type (inflated);
  D.22929 = res;
  return D.22929;
}


enable_gclass_recording ()
{
  int record_gclass_instantiation.23;
  int record_gclass_instantiation.24;

  record_gclass_instantiation.23 = record_gclass_instantiation;
  record_gclass_instantiation.24 = record_gclass_instantiation.23 + 1;
  record_gclass_instantiation = record_gclass_instantiation.24;
}


disable_gclass_recording (gboolean (*gclass_record_func) (struct MonoClass *, void *) func, void * user_data)
{
  int record_gclass_instantiation.25;
  _Bool D.22934;
  long int D.22935;
  long int D.22936;
  int record_gclass_instantiation.26;
  void * D.22940;
  int D.22941;
  struct GSList * D.22944;
  struct GSList * D.22946;
  struct GSList * gclass_recorded_list.27;
  struct GSList * * head;

  head = &gclass_recorded_list;
  record_gclass_instantiation.25 = record_gclass_instantiation;
  D.22934 = record_gclass_instantiation.25 <= 0;
  D.22935 = (long int) D.22934;
  D.22936 = __builtin_expect (D.22935, 0);
  if (D.22936 != 0) goto <D.22937>; else goto <D.22938>;
  <D.22937>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 120, "record_gclass_instantiation > 0");
  <D.22938>:
  record_gclass_instantiation.25 = record_gclass_instantiation;
  record_gclass_instantiation.26 = record_gclass_instantiation.25 + -1;
  record_gclass_instantiation = record_gclass_instantiation.26;
  goto <D.18814>;
  <D.18813>:
  {
    struct GSList * node;

    node = *head;
    D.22940 = node->data;
    D.22941 = func (D.22940, user_data);
    if (D.22941 != 0) goto <D.22942>; else goto <D.22943>;
    <D.22942>:
    D.22944 = node->next;
    *head = D.22944;
    monoeg_g_slist_free_1 (node);
    goto <D.22945>;
    <D.22943>:
    head = &node->next;
    <D.22945>:
  }
  <D.18814>:
  D.22946 = *head;
  if (D.22946 != 0B) goto <D.18813>; else goto <D.18815>;
  <D.18815>:
  record_gclass_instantiation.25 = record_gclass_instantiation;
  if (record_gclass_instantiation.25 == 0) goto <D.22947>; else goto <D.22948>;
  <D.22947>:
  gclass_recorded_list.27 = gclass_recorded_list;
  if (gclass_recorded_list.27 != 0B) goto <D.22950>; else goto <D.22951>;
  <D.22950>:
  gclass_recorded_list.27 = gclass_recorded_list;
  monoeg_g_slist_free (gclass_recorded_list.27);
  gclass_recorded_list = 0B;
  <D.22951>:
  <D.22948>:
}


mono_class_find_enum_basetype (struct MonoClass * class)
{
  unsigned int D.22952;
  unsigned char D.22953;
  unsigned char D.22954;
  _Bool D.22955;
  long int D.22956;
  long int D.22957;
  struct MonoGenericContainer * D.22960;
  struct MonoGenericClass * D.22964;
  _Bool D.22967;
  long int D.22968;
  long int D.22969;
  unsigned int D.22972;
  unsigned int i.28;
  unsigned int D.22974;
  unsigned int D.22975;
  unsigned int D.22976;
  unsigned int D.22979;
  struct MonoImage * D.22980;
  int D.22981;
  struct MonoType * D.22984;
  const char * sig.29;
  const char * sig.30;
  char D.22987;
  const char * D.22990;
  short int D.22991;
  int D.22992;
  struct MonoGenericContext * D.22997;
  short unsigned int D.22998;
  struct MonoGenericContainer * container;
  struct MonoImage * m;
  const int top;
  int i;

  container = 0B;
  m = class->image;
  D.22952 = class->field.count;
  top = (const int) D.22952;
  D.22953 = BIT_FIELD_REF <*class, 8, 256>;
  D.22954 = D.22953 & 16;
  D.22955 = D.22954 == 0;
  D.22956 = (long int) D.22955;
  D.22957 = __builtin_expect (D.22956, 0);
  if (D.22957 != 0) goto <D.22958>; else goto <D.22959>;
  <D.22958>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1250, "class->enumtype");
  <D.22959>:
  D.22960 = class->generic_container;
  if (D.22960 != 0B) goto <D.22961>; else goto <D.22962>;
  <D.22961>:
  container = class->generic_container;
  goto <D.22963>;
  <D.22962>:
  D.22964 = class->generic_class;
  if (D.22964 != 0B) goto <D.22965>; else goto <D.22966>;
  <D.22965>:
  {
    struct MonoClass * gklass;

    D.22964 = class->generic_class;
    gklass = D.22964->container_class;
    container = gklass->generic_container;
    D.22967 = container == 0B;
    D.22968 = (long int) D.22967;
    D.22969 = __builtin_expect (D.22968, 0);
    if (D.22969 != 0) goto <D.22970>; else goto <D.22971>;
    <D.22970>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1258, "container");
    <D.22971>:
  }
  <D.22966>:
  <D.22963>:
  i = 0;
  goto <D.19127>;
  <D.19126>:
  {
    const char * sig;
    guint32 cols[3];
    int idx;
    struct MonoType * ftype;

    try
      {
        D.22972 = class->field.first;
        i.28 = (unsigned int) i;
        D.22974 = D.22972 + i.28;
        idx = (int) D.22974;
        mono_metadata_decode_table_row (m, 4, idx, &cols, 3);
        D.22975 = cols[0];
        D.22976 = D.22975 & 16;
        if (D.22976 != 0) goto <D.22977>; else goto <D.22978>;
        <D.22977>:
        // predicted unlikely by continue predictor.
        goto <D.19125>;
        <D.22978>:
        D.22979 = cols[2];
        D.22980 = class->image;
        D.22981 = mono_verifier_verify_field_signature (D.22980, D.22979, 0B);
        if (D.22981 == 0) goto <D.22982>; else goto <D.22983>;
        <D.22982>:
        D.22984 = 0B;
        return D.22984;
        <D.22983>:
        D.22979 = cols[2];
        sig.29 = mono_metadata_blob_heap (m, D.22979);
        sig = sig.29;
        sig.30 = sig;
        mono_metadata_decode_value (sig.30, &sig);
        sig.30 = sig;
        D.22987 = *sig.30;
        if (D.22987 != 6) goto <D.22988>; else goto <D.22989>;
        <D.22988>:
        D.22984 = 0B;
        return D.22984;
        <D.22989>:
        sig.30 = sig;
        D.22990 = sig.30 + 1;
        D.22975 = cols[0];
        D.22991 = (short int) D.22975;
        D.22992 = (int) D.22991;
        ftype = mono_metadata_parse_type_full (m, container, 5, D.22992, D.22990, &sig);
        if (ftype == 0B) goto <D.22993>; else goto <D.22994>;
        <D.22993>:
        D.22984 = 0B;
        return D.22984;
        <D.22994>:
        D.22964 = class->generic_class;
        if (D.22964 != 0B) goto <D.22995>; else goto <D.22996>;
        <D.22995>:
        D.22997 = mono_class_get_context (class);
        ftype = mono_class_inflate_generic_type (ftype, D.22997);
        D.22975 = cols[0];
        D.22998 = (short unsigned int) D.22975;
        ftype->attrs = D.22998;
        <D.22996>:
        D.22984 = ftype;
        return D.22984;
      }
    finally
      {
        sig = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.19125>:
  i = i + 1;
  <D.19127>:
  if (i < top) goto <D.19126>; else goto <D.19128>;
  <D.19128>:
  D.22984 = 0B;
  return D.22984;
}


mono_class_set_failure_and_error (struct MonoClass * class, struct MonoError * error, const char * msg)
{
  gchar * D.23002;

  D.23002 = monoeg_strdup (msg);
  mono_class_set_failure (class, 7, D.23002);
  mono_error_set_type_load_class (error, class, msg);
}


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

  if (str != 0B) goto <D.23003>; else goto <D.23004>;
  <D.23003>:
  D.23005 = __strdup (str);
  return D.23005;
  <D.23004>:
  D.23005 = 0B;
  return D.23005;
}


mono_class_set_failure_from_loader_error (struct MonoClass * class, struct MonoError * error, char * msg)
{
  struct MonoLoaderError * lerror;

  lerror = mono_loader_get_last_error ();
  if (lerror != 0B) goto <D.23007>; else goto <D.23008>;
  <D.23007>:
  set_failure_from_loader_error (class, lerror);
  mono_error_set_from_loader_error (error);
  if (msg != 0B) goto <D.23009>; else goto <D.23010>;
  <D.23009>:
  monoeg_g_free (msg);
  <D.23010>:
  goto <D.23011>;
  <D.23008>:
  mono_class_set_failure (class, 7, msg);
  mono_error_set_type_load_class (error, class, msg);
  <D.23011>:
}


set_failure_from_loader_error (struct MonoClass * class, struct MonoLoaderError * error)
{
  unsigned char D.23012;
  int D.23013;
  char * D.23014;
  char * D.23015;
  struct MonoImage * D.23016;
  const char * D.23017;
  struct MonoClass * D.23018;
  const char * D.23021;
  int D.23025;
  unsigned int D.23029;
  void * exception_data;

  exception_data = 0B;
  D.23012 = error->exception_type;
  D.23013 = (int) D.23012;
  switch (D.23013) <default: <D.20263>, case 5: <D.20256>, case 6: <D.20257>, case 7: <D.20254>, case 8: <D.20260>, case 12: <D.20262>>
  <D.20254>:
  D.23014 = error->assembly_name;
  D.23015 = error->class_name;
  D.23016 = class->image;
  exception_data = concat_two_strings_with_zero (D.23016, D.23015, D.23014);
  goto <D.20255>;
  <D.20256>:
  D.23017 = error->member_name;
  D.23015 = error->class_name;
  D.23016 = class->image;
  exception_data = concat_two_strings_with_zero (D.23016, D.23015, D.23017);
  goto <D.20255>;
  <D.20257>:
  {
    const char * name_space;
    const char * class_name;

    D.23018 = error->klass;
    name_space = D.23018->name_space;
    if (name_space != 0B) goto <D.23019>; else goto <D.23020>;
    <D.23019>:
    D.23018 = error->klass;
    D.23021 = D.23018->name;
    class_name = monoeg_g_strdup_printf ("%s.%s", name_space, D.23021);
    goto <D.23022>;
    <D.23020>:
    D.23018 = error->klass;
    class_name = D.23018->name;
    <D.23022>:
    D.23017 = error->member_name;
    D.23016 = class->image;
    exception_data = concat_two_strings_with_zero (D.23016, class_name, D.23017);
    if (name_space != 0B) goto <D.23023>; else goto <D.23024>;
    <D.23023>:
    monoeg_g_free (class_name);
    <D.23024>:
    goto <D.20255>;
  }
  <D.20260>:
  {
    const char * msg;

    D.23025 = error->ref_only;
    if (D.23025 != 0) goto <D.23026>; else goto <D.23027>;
    <D.23026>:
    msg = "Cannot resolve dependency to assembly \'%s\' because it has not been preloaded. When using the ReflectionOnly APIs, dependent assemblies must be pre-loaded or loaded on demand through the ReflectionOnlyAssemblyResolve event.";
    goto <D.23028>;
    <D.23027>:
    msg = "Could not load file or assembly \'%s\' or one of its dependencies.";
    <D.23028>:
    D.23014 = error->assembly_name;
    D.23016 = class->image;
    exception_data = concat_two_strings_with_zero (D.23016, msg, D.23014);
    goto <D.20255>;
  }
  <D.20262>:
  exception_data = error->msg;
  goto <D.20255>;
  <D.20263>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 4891);
  <D.20255>:
  D.23012 = error->exception_type;
  D.23029 = (unsigned int) D.23012;
  mono_class_set_failure (class, D.23029, exception_data);
}


concat_two_strings_with_zero (struct MonoImage * image, const char * s1, const char * s2)
{
  unsigned int iftmp.31;
  long unsigned int D.23033;
  unsigned int iftmp.32;
  long unsigned int D.23038;
  unsigned int D.23040;
  unsigned int D.23041;
  unsigned int len.33;
  const char * iftmp.34;
  const char * iftmp.35;
  long unsigned int D.23051;
  int D.23052;
  _Bool D.23053;
  long int D.23054;
  long int D.23055;
  char * D.23058;
  int null_length;
  int len;
  char * s;
  int result;

  null_length = 6;
  if (s1 != 0B) goto <D.23031>; else goto <D.23032>;
  <D.23031>:
  D.23033 = strlen (s1);
  iftmp.31 = (unsigned int) D.23033;
  goto <D.23034>;
  <D.23032>:
  iftmp.31 = (unsigned int) null_length;
  <D.23034>:
  if (s2 != 0B) goto <D.23036>; else goto <D.23037>;
  <D.23036>:
  D.23038 = strlen (s2);
  iftmp.32 = (unsigned int) D.23038;
  goto <D.23039>;
  <D.23037>:
  iftmp.32 = (unsigned int) null_length;
  <D.23039>:
  D.23040 = iftmp.31 + iftmp.32;
  D.23041 = D.23040 + 2;
  len = (int) D.23041;
  len.33 = (unsigned int) len;
  s = mono_image_alloc (image, len.33);
  if (s2 != 0B) goto <D.23044>; else goto <D.23045>;
  <D.23044>:
  iftmp.34 = s2;
  goto <D.23046>;
  <D.23045>:
  iftmp.34 = "(null)";
  <D.23046>:
  if (s1 != 0B) goto <D.23048>; else goto <D.23049>;
  <D.23048>:
  iftmp.35 = s1;
  goto <D.23050>;
  <D.23049>:
  iftmp.35 = "(null)";
  <D.23050>:
  D.23051 = (long unsigned int) len;
  result = monoeg_g_snprintf (s, D.23051, "%s%c%s", iftmp.35, 0, iftmp.34);
  D.23052 = len + -1;
  D.23053 = D.23052 != result;
  D.23054 = (long int) D.23053;
  D.23055 = __builtin_expect (D.23054, 0);
  if (D.23055 != 0) goto <D.23056>; else goto <D.23057>;
  <D.23056>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4839, "result == len - 1");
  <D.23057>:
  D.23058 = s;
  return D.23058;
}


mono_dup_array_type (struct MonoImage * image, struct MonoArrayType * a)
{
  int * D.23062;
  unsigned char D.23065;
  unsigned int D.23066;
  unsigned int D.23067;
  void * D.23068;
  int * D.23069;
  unsigned char D.23072;
  unsigned int D.23073;
  unsigned int D.23074;
  void * D.23075;
  void * D.23079;
  void * D.23082;
  struct MonoArrayType * D.23083;

  if (image != 0B) goto <D.23060>; else goto <D.23061>;
  <D.23060>:
  a = mono_image_memdup (image, a, 32);
  D.23062 = a->sizes;
  if (D.23062 != 0B) goto <D.23063>; else goto <D.23064>;
  <D.23063>:
  D.23065 = a->numsizes;
  D.23066 = (unsigned int) D.23065;
  D.23067 = D.23066 * 4;
  D.23062 = a->sizes;
  D.23068 = mono_image_memdup (image, D.23062, D.23067);
  a->sizes = D.23068;
  <D.23064>:
  D.23069 = a->lobounds;
  if (D.23069 != 0B) goto <D.23070>; else goto <D.23071>;
  <D.23070>:
  D.23072 = a->numlobounds;
  D.23073 = (unsigned int) D.23072;
  D.23074 = D.23073 * 4;
  D.23069 = a->lobounds;
  D.23075 = mono_image_memdup (image, D.23069, D.23074);
  a->lobounds = D.23075;
  <D.23071>:
  goto <D.23076>;
  <D.23061>:
  a = monoeg_g_memdup (a, 32);
  D.23062 = a->sizes;
  if (D.23062 != 0B) goto <D.23077>; else goto <D.23078>;
  <D.23077>:
  D.23065 = a->numsizes;
  D.23066 = (unsigned int) D.23065;
  D.23067 = D.23066 * 4;
  D.23062 = a->sizes;
  D.23079 = monoeg_g_memdup (D.23062, D.23067);
  a->sizes = D.23079;
  <D.23078>:
  D.23069 = a->lobounds;
  if (D.23069 != 0B) goto <D.23080>; else goto <D.23081>;
  <D.23080>:
  D.23072 = a->numlobounds;
  D.23073 = (unsigned int) D.23072;
  D.23074 = D.23073 * 4;
  D.23069 = a->lobounds;
  D.23082 = monoeg_g_memdup (D.23069, D.23074);
  a->lobounds = D.23082;
  <D.23081>:
  <D.23076>:
  D.23083 = a;
  return D.23083;
}


mono_image_memdup (struct MonoImage * image, void * data, guint size)
{
  long unsigned int D.23085;
  void * D.23086;
  void * res;

  res = mono_image_alloc (image, size);
  D.23085 = (long unsigned int) size;
  memcpy (res, data, D.23085);
  D.23086 = res;
  return D.23086;
}


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

  D.23089 = __builtin_object_size (__dest, 0);
  D.23088 = __builtin___memcpy_chk (__dest, __src, __len, D.23089);
  return D.23088;
}


mono_metadata_signature_deep_dup (struct MonoImage * image, struct MonoMethodSignature * sig)
{
  struct MonoType * D.23091;
  struct MonoType * D.23092;
  struct MonoType * D.23093;
  struct MonoType * D.23094;
  short unsigned int D.23095;
  int D.23096;
  struct MonoMethodSignature * D.23097;
  int i;

  sig = mono_metadata_signature_dup_full (image, sig);
  D.23091 = sig->ret;
  D.23092 = mono_metadata_type_dup (image, D.23091);
  sig->ret = D.23092;
  i = 0;
  goto <D.18885>;
  <D.18884>:
  D.23093 = sig->params[i];
  D.23094 = mono_metadata_type_dup (image, D.23093);
  sig->params[i] = D.23094;
  i = i + 1;
  <D.18885>:
  D.23095 = sig->param_count;
  D.23096 = (int) D.23095;
  if (D.23096 > i) goto <D.18884>; else goto <D.18886>;
  <D.18886>:
  D.23097 = sig;
  return D.23097;
}


mono_type_get_name_full (struct MonoType * type, MonoTypeNameFormat format)
{
  char * D.23099;
  struct GString * result;

  result = monoeg_g_string_new ("");
  mono_type_get_name_recurse (type, result, 0, format);
  D.23099 = monoeg_g_string_free (result, 0);
  return D.23099;
}


mono_type_get_name_recurse (struct MonoType * type, struct GString * str, gboolean is_recursed, MonoTypeNameFormat format)
{
  unsigned char D.23101;
  int D.23102;
  struct MonoArrayType * D.23103;
  unsigned char D.23104;
  MonoTypeNameFormat iftmp.36;
  struct MonoClass * D.23109;
  struct MonoType * D.23110;
  MonoTypeNameFormat iftmp.37;
  struct MonoClass * D.23119;
  struct MonoType * D.23120;
  MonoTypeNameFormat iftmp.38;
  struct MonoType * D.23127;
  struct MonoClass * D.23130;
  struct MonoGenericParam * D.23134;
  struct MonoGenericContainer * D.23135;
  struct MonoGenericParamInfo * D.23137;
  short unsigned int D.23138;
  int D.23139;
  const char * iftmp.39;
  struct MonoGenericParamInfo * iftmp.40;
  const char * D.23148;
  struct MonoClass * D.23149;
  struct MonoType * D.23152;
  const char * D.23157;
  char D.23158;
  const char * D.23163;
  int iftmp.41;
  long int s.42;
  long int D.23168;
  long int D.23169;
  long unsigned int D.23171;
  long int D.23172;
  struct MonoGenericClass * D.23175;
  MonoTypeNameFormat iftmp.43;
  unsigned char D.23189;
  struct MonoType * D.23194;
  <unnamed-unsigned:22> D.23201;
  int D.23202;
  struct MonoGenericContainer * D.23207;
  unsigned int D.23210;
  struct MonoGenericParamFull * D.23218;
  long unsigned int D.23219;
  long unsigned int D.23220;
  struct MonoGenericParamFull * D.23221;
  const char * D.23222;
  <unnamed-signed:31> D.23223;
  int D.23224;
  struct MonoClass * klass;

  D.23101 = type->type;
  D.23102 = (int) D.23101;
  switch (D.23102) <default: <D.18918>, case 15: <D.18914>, case 19: <D.18916>, case 20: <D.18904>, case 29: <D.18912>, case 30: <D.18917>>
  <D.18904>:
  {
    int i;
    int rank;
    MonoTypeNameFormat nested_format;

    D.23103 = type->data.array;
    D.23104 = D.23103->rank;
    rank = (int) D.23104;
    if (format != 3) goto <D.23106>; else goto <D.23107>;
    <D.23106>:
    iftmp.36 = format;
    goto <D.23108>;
    <D.23107>:
    iftmp.36 = 2;
    <D.23108>:
    nested_format = iftmp.36;
    D.23103 = type->data.array;
    D.23109 = D.23103->eklass;
    D.23110 = &D.23109->byval_arg;
    mono_type_get_name_recurse (D.23110, str, 0, nested_format);
    monoeg_g_string_append_c (str, 91);
    if (rank == 1) goto <D.23111>; else goto <D.23112>;
    <D.23111>:
    monoeg_g_string_append_c (str, 42);
    <D.23112>:
    i = 1;
    goto <D.18909>;
    <D.18908>:
    monoeg_g_string_append_c (str, 44);
    i = i + 1;
    <D.18909>:
    if (i < rank) goto <D.18908>; else goto <D.18910>;
    <D.18910>:
    monoeg_g_string_append_c (str, 93);
    mono_type_name_check_byref (type, str);
    if (format == 3) goto <D.23113>; else goto <D.23114>;
    <D.23113>:
    D.23103 = type->data.array;
    D.23109 = D.23103->eklass;
    _mono_type_get_assembly_name (D.23109, str);
    <D.23114>:
    goto <D.18911>;
  }
  <D.18912>:
  {
    MonoTypeNameFormat nested_format;

    if (format != 3) goto <D.23116>; else goto <D.23117>;
    <D.23116>:
    iftmp.37 = format;
    goto <D.23118>;
    <D.23117>:
    iftmp.37 = 2;
    <D.23118>:
    nested_format = iftmp.37;
    D.23119 = type->data.klass;
    D.23120 = &D.23119->byval_arg;
    mono_type_get_name_recurse (D.23120, str, 0, nested_format);
    monoeg_g_string_append (str, "[]");
    mono_type_name_check_byref (type, str);
    if (format == 3) goto <D.23121>; else goto <D.23122>;
    <D.23121>:
    D.23119 = type->data.klass;
    _mono_type_get_assembly_name (D.23119, str);
    <D.23122>:
    goto <D.18911>;
  }
  <D.18914>:
  {
    MonoTypeNameFormat nested_format;

    if (format != 3) goto <D.23124>; else goto <D.23125>;
    <D.23124>:
    iftmp.38 = format;
    goto <D.23126>;
    <D.23125>:
    iftmp.38 = 2;
    <D.23126>:
    nested_format = iftmp.38;
    D.23127 = type->data.type;
    mono_type_get_name_recurse (D.23127, str, 0, nested_format);
    monoeg_g_string_append_c (str, 42);
    mono_type_name_check_byref (type, str);
    if (format == 3) goto <D.23128>; else goto <D.23129>;
    <D.23128>:
    D.23127 = type->data.type;
    D.23130 = mono_class_from_mono_type (D.23127);
    _mono_type_get_assembly_name (D.23130, str);
    <D.23129>:
    goto <D.18911>;
  }
  <D.18916>:
  <D.18917>:
  D.23134 = type->data.generic_param;
  D.23135 = D.23134->owner;
  if (D.23135 == 0B) goto <D.23131>; else goto <D.23136>;
  <D.23136>:
  D.23134 = type->data.generic_param;
  D.23137 = &MEM[(struct MonoGenericParamFull *)D.23134].info;
  if (D.23137 == 0B) goto <D.23131>; else goto <D.23132>;
  <D.23131>:
  D.23134 = type->data.generic_param;
  D.23138 = D.23134->num;
  D.23139 = (int) D.23138;
  D.23101 = type->type;
  if (D.23101 == 19) goto <D.23141>; else goto <D.23142>;
  <D.23141>:
  iftmp.39 = "!";
  goto <D.23143>;
  <D.23142>:
  iftmp.39 = "!!";
  <D.23143>:
  monoeg_g_string_append_printf (str, "%s%d", iftmp.39, D.23139);
  goto <D.23133>;
  <D.23132>:
  D.23134 = type->data.generic_param;
  D.23135 = D.23134->owner;
  if (D.23135 != 0B) goto <D.23145>; else goto <D.23146>;
  <D.23145>:
  D.23134 = type->data.generic_param;
  iftmp.40 = &MEM[(struct MonoGenericParamFull *)D.23134].info;
  goto <D.23147>;
  <D.23146>:
  iftmp.40 = 0B;
  <D.23147>:
  D.23148 = iftmp.40->name;
  monoeg_g_string_append (str, D.23148);
  <D.23133>:
  mono_type_name_check_byref (type, str);
  goto <D.18911>;
  <D.18918>:
  klass = mono_class_from_mono_type (type);
  D.23149 = klass->nested_in;
  if (D.23149 != 0B) goto <D.23150>; else goto <D.23151>;
  <D.23150>:
  D.23149 = klass->nested_in;
  D.23152 = &D.23149->byval_arg;
  mono_type_get_name_recurse (D.23152, str, 1, format);
  if (format == 0) goto <D.23153>; else goto <D.23154>;
  <D.23153>:
  monoeg_g_string_append_c (str, 46);
  goto <D.23155>;
  <D.23154>:
  monoeg_g_string_append_c (str, 43);
  <D.23155>:
  goto <D.23156>;
  <D.23151>:
  D.23157 = klass->name_space;
  D.23158 = *D.23157;
  if (D.23158 != 0) goto <D.23159>; else goto <D.23160>;
  <D.23159>:
  D.23157 = klass->name_space;
  monoeg_g_string_append (str, D.23157);
  monoeg_g_string_append_c (str, 46);
  <D.23160>:
  <D.23156>:
  if (format == 0) goto <D.23161>; else goto <D.23162>;
  <D.23161>:
  {
    char * s;
    int len;

    D.23163 = klass->name;
    s = __builtin_strchr (D.23163, 96);
    if (s != 0B) goto <D.23165>; else goto <D.23166>;
    <D.23165>:
    s.42 = (long int) s;
    D.23163 = klass->name;
    D.23168 = (long int) D.23163;
    D.23169 = s.42 - D.23168;
    iftmp.41 = (int) D.23169;
    goto <D.23170>;
    <D.23166>:
    D.23163 = klass->name;
    D.23171 = strlen (D.23163);
    iftmp.41 = (int) D.23171;
    <D.23170>:
    len = iftmp.41;
    D.23172 = (long int) len;
    D.23163 = klass->name;
    monoeg_g_string_append_len (str, D.23163, D.23172);
  }
  goto <D.23173>;
  <D.23162>:
  D.23163 = klass->name;
  monoeg_g_string_append (str, D.23163);
  <D.23173>:
  if (is_recursed != 0) goto <D.18911>; else goto <D.23174>;
  <D.23174>:
  D.23175 = klass->generic_class;
  if (D.23175 != 0B) goto <D.23176>; else goto <D.23177>;
  <D.23176>:
  {
    struct MonoGenericClass * gclass;
    struct MonoGenericInst * inst;
    MonoTypeNameFormat nested_format;
    int i;

    gclass = klass->generic_class;
    inst = gclass->context.class_inst;
    if (format != 2) goto <D.23179>; else goto <D.23180>;
    <D.23179>:
    iftmp.43 = format;
    goto <D.23181>;
    <D.23180>:
    iftmp.43 = 3;
    <D.23181>:
    nested_format = iftmp.43;
    if (format == 0) goto <D.23182>; else goto <D.23183>;
    <D.23182>:
    monoeg_g_string_append_c (str, 60);
    goto <D.23184>;
    <D.23183>:
    monoeg_g_string_append_c (str, 91);
    <D.23184>:
    i = 0;
    goto <D.18927>;
    <D.18926>:
    {
      struct MonoType * t;

      t = inst->type_argv[i];
      if (i != 0) goto <D.23185>; else goto <D.23186>;
      <D.23185>:
      monoeg_g_string_append_c (str, 44);
      <D.23186>:
      if (nested_format == 3) goto <D.23187>; else goto <D.23188>;
      <D.23187>:
      D.23189 = t->type;
      if (D.23189 != 19) goto <D.23190>; else goto <D.23191>;
      <D.23190>:
      D.23101 = type->type;
      if (D.23101 != 30) goto <D.23192>; else goto <D.23193>;
      <D.23192>:
      monoeg_g_string_append_c (str, 91);
      <D.23193>:
      <D.23191>:
      <D.23188>:
      D.23194 = inst->type_argv[i];
      mono_type_get_name_recurse (D.23194, str, 0, nested_format);
      if (nested_format == 3) goto <D.23195>; else goto <D.23196>;
      <D.23195>:
      D.23189 = t->type;
      if (D.23189 != 19) goto <D.23197>; else goto <D.23198>;
      <D.23197>:
      D.23101 = type->type;
      if (D.23101 != 30) goto <D.23199>; else goto <D.23200>;
      <D.23199>:
      monoeg_g_string_append_c (str, 93);
      <D.23200>:
      <D.23198>:
      <D.23196>:
    }
    i = i + 1;
    <D.18927>:
    D.23201 = inst->type_argc;
    D.23202 = (int) D.23201;
    if (D.23202 > i) goto <D.18926>; else goto <D.18928>;
    <D.18928>:
    if (format == 0) goto <D.23203>; else goto <D.23204>;
    <D.23203>:
    monoeg_g_string_append_c (str, 62);
    goto <D.23205>;
    <D.23204>:
    monoeg_g_string_append_c (str, 93);
    <D.23205>:
  }
  goto <D.23206>;
  <D.23177>:
  D.23207 = klass->generic_container;
  if (D.23207 != 0B) goto <D.23208>; else goto <D.23209>;
  <D.23208>:
  D.23210 = format + 4294967294;
  if (D.23210 > 1) goto <D.23211>; else goto <D.23212>;
  <D.23211>:
  {
    int i;

    if (format == 0) goto <D.23213>; else goto <D.23214>;
    <D.23213>:
    monoeg_g_string_append_c (str, 60);
    goto <D.23215>;
    <D.23214>:
    monoeg_g_string_append_c (str, 91);
    <D.23215>:
    i = 0;
    goto <D.18931>;
    <D.18930>:
    if (i != 0) goto <D.23216>; else goto <D.23217>;
    <D.23216>:
    monoeg_g_string_append_c (str, 44);
    <D.23217>:
    D.23207 = klass->generic_container;
    D.23218 = D.23207->type_params;
    D.23219 = (long unsigned int) i;
    D.23220 = D.23219 * 56;
    D.23221 = D.23218 + D.23220;
    D.23222 = D.23221->info.name;
    monoeg_g_string_append (str, D.23222);
    i = i + 1;
    <D.18931>:
    D.23207 = klass->generic_container;
    D.23223 = D.23207->type_argc;
    D.23224 = (int) D.23223;
    if (D.23224 > i) goto <D.18930>; else goto <D.18932>;
    <D.18932>:
    if (format == 0) goto <D.23225>; else goto <D.23226>;
    <D.23225>:
    monoeg_g_string_append_c (str, 62);
    goto <D.23227>;
    <D.23226>:
    monoeg_g_string_append_c (str, 93);
    <D.23227>:
  }
  <D.23212>:
  <D.23209>:
  <D.23206>:
  mono_type_name_check_byref (type, str);
  if (format == 3) goto <D.23228>; else goto <D.23229>;
  <D.23228>:
  D.23101 = type->type;
  if (D.23101 != 19) goto <D.23230>; else goto <D.23231>;
  <D.23230>:
  D.23101 = type->type;
  if (D.23101 != 30) goto <D.23232>; else goto <D.23233>;
  <D.23232>:
  _mono_type_get_assembly_name (klass, str);
  <D.23233>:
  <D.23231>:
  <D.23229>:
  goto <D.18911>;
  <D.18911>:
}


mono_type_name_check_byref (struct MonoType * type, struct GString * str)
{
  unsigned char D.23234;
  unsigned char D.23235;

  D.23234 = BIT_FIELD_REF <*type, 8, 88>;
  D.23235 = D.23234 & 64;
  if (D.23235 != 0) goto <D.23236>; else goto <D.23237>;
  <D.23236>:
  monoeg_g_string_append_c (str, 38);
  <D.23237>:
}


_mono_type_get_assembly_name (struct MonoClass * klass, struct GString * str)
{
  struct MonoImage * D.23238;
  struct MonoAssemblyName * D.23239;
  struct MonoAssembly * ta;
  char * name;

  D.23238 = klass->image;
  ta = D.23238->assembly;
  D.23239 = &ta->aname;
  name = mono_stringify_assembly_name (D.23239);
  monoeg_g_string_append_printf (str, ", %s", name);
  monoeg_g_free (name);
}


mono_type_get_full_name (struct MonoClass * class)
{
  char * D.23240;
  struct MonoType * D.23241;

  D.23241 = mono_class_get_type (class);
  D.23240 = mono_type_get_name_full (D.23241, 1);
  return D.23240;
}


mono_type_get_name (struct MonoType * type)
{
  char * D.23243;

  D.23243 = mono_type_get_name_full (type, 0);
  return D.23243;
}


mono_type_get_underlying_type (struct MonoType * type)
{
  unsigned char D.23245;
  struct MonoClass * D.23248;
  unsigned char D.23249;
  unsigned char D.23250;
  unsigned char D.23253;
  unsigned char D.23254;
  struct MonoType * D.23257;
  struct MonoGenericClass * D.23260;
  struct MonoClass * D.23261;
  unsigned char D.23262;
  unsigned char D.23263;

  D.23245 = type->type;
  if (D.23245 == 17) goto <D.23246>; else goto <D.23247>;
  <D.23246>:
  D.23248 = type->data.klass;
  D.23249 = BIT_FIELD_REF <*D.23248, 8, 256>;
  D.23250 = D.23249 & 16;
  if (D.23250 != 0) goto <D.23251>; else goto <D.23252>;
  <D.23251>:
  D.23253 = BIT_FIELD_REF <*type, 8, 88>;
  D.23254 = D.23253 & 64;
  if (D.23254 == 0) goto <D.23255>; else goto <D.23256>;
  <D.23255>:
  D.23248 = type->data.klass;
  D.23257 = mono_class_enum_basetype (D.23248);
  return D.23257;
  <D.23256>:
  <D.23252>:
  <D.23247>:
  D.23245 = type->type;
  if (D.23245 == 21) goto <D.23258>; else goto <D.23259>;
  <D.23258>:
  D.23260 = type->data.generic_class;
  D.23261 = D.23260->container_class;
  D.23262 = BIT_FIELD_REF <*D.23261, 8, 256>;
  D.23263 = D.23262 & 16;
  if (D.23263 != 0) goto <D.23264>; else goto <D.23265>;
  <D.23264>:
  D.23253 = BIT_FIELD_REF <*type, 8, 88>;
  D.23254 = D.23253 & 64;
  if (D.23254 == 0) goto <D.23266>; else goto <D.23267>;
  <D.23266>:
  D.23260 = type->data.generic_class;
  D.23261 = D.23260->container_class;
  D.23257 = mono_class_enum_basetype (D.23261);
  return D.23257;
  <D.23267>:
  <D.23265>:
  <D.23259>:
  D.23257 = type;
  return D.23257;
}


mono_class_is_open_constructed_type (struct MonoType * t)
{
  unsigned char D.23269;
  int D.23270;
  gboolean D.23271;
  struct MonoClass * D.23272;
  struct MonoType * D.23273;
  struct MonoArrayType * D.23274;
  struct MonoClass * D.23275;
  struct MonoType * D.23276;
  struct MonoType * D.23277;
  struct MonoGenericClass * D.23278;
  struct MonoGenericInst * D.23279;
  <unnamed-unsigned:1> D.23280;
  struct MonoGenericContainer * D.23281;
  _Bool D.23282;

  D.23269 = t->type;
  D.23270 = (int) D.23269;
  switch (D.23270) <default: <D.18958>, case 15: <D.18954>, case 17: <D.18957>, case 18: <D.18956>, case 19: <D.18950>, case 20: <D.18953>, case 21: <D.18955>, case 29: <D.18952>, case 30: <D.18951>>
  <D.18950>:
  <D.18951>:
  D.23271 = 1;
  return D.23271;
  <D.18952>:
  D.23272 = t->data.klass;
  D.23273 = &D.23272->byval_arg;
  D.23271 = mono_class_is_open_constructed_type (D.23273);
  return D.23271;
  <D.18953>:
  D.23274 = t->data.array;
  D.23275 = D.23274->eklass;
  D.23276 = &D.23275->byval_arg;
  D.23271 = mono_class_is_open_constructed_type (D.23276);
  return D.23271;
  <D.18954>:
  D.23277 = t->data.type;
  D.23271 = mono_class_is_open_constructed_type (D.23277);
  return D.23271;
  <D.18955>:
  D.23278 = t->data.generic_class;
  D.23279 = D.23278->context.class_inst;
  D.23280 = D.23279->is_open;
  D.23271 = (gboolean) D.23280;
  return D.23271;
  <D.18956>:
  <D.18957>:
  D.23272 = t->data.klass;
  D.23281 = D.23272->generic_container;
  D.23282 = D.23281 != 0B;
  D.23271 = (gboolean) D.23282;
  return D.23271;
  <D.18958>:
  D.23271 = 0;
  return D.23271;
}


mono_generic_class_get_context (struct MonoGenericClass * gclass)
{
  struct MonoGenericContext * D.23284;

  D.23284 = &gclass->context;
  return D.23284;
}


mono_class_get_context (struct MonoClass * class)
{
  struct MonoGenericContext * D.23286;
  struct MonoGenericContext * iftmp.44;
  struct MonoGenericClass * D.23288;

  D.23288 = class->generic_class;
  if (D.23288 != 0B) goto <D.23289>; else goto <D.23290>;
  <D.23289>:
  D.23288 = class->generic_class;
  iftmp.44 = mono_generic_class_get_context (D.23288);
  goto <D.23291>;
  <D.23290>:
  iftmp.44 = 0B;
  <D.23291>:
  D.23286 = iftmp.44;
  return D.23286;
}


mono_class_get_generic_container (struct MonoClass * klass)
{
  unsigned char D.23293;
  unsigned char D.23294;
  _Bool D.23295;
  long int D.23296;
  long int D.23297;
  struct MonoGenericContainer * D.23300;

  D.23293 = BIT_FIELD_REF <*klass, 8, 288>;
  D.23294 = D.23293 & 4;
  D.23295 = D.23294 == 0;
  D.23296 = (long int) D.23295;
  D.23297 = __builtin_expect (D.23296, 0);
  if (D.23297 != 0) goto <D.23298>; else goto <D.23299>;
  <D.23298>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 752, "klass->is_generic");
  <D.23299>:
  D.23300 = klass->generic_container;
  return D.23300;
}


mono_class_get_generic_class (struct MonoClass * klass)
{
  unsigned char D.23302;
  unsigned char D.23303;
  _Bool D.23304;
  long int D.23305;
  long int D.23306;
  struct MonoGenericClass * D.23309;

  D.23302 = BIT_FIELD_REF <*klass, 8, 288>;
  D.23303 = D.23302 & 8;
  D.23304 = D.23303 == 0;
  D.23305 = (long int) D.23304;
  D.23306 = __builtin_expect (D.23305, 0);
  if (D.23306 != 0) goto <D.23307>; else goto <D.23308>;
  <D.23307>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 765, "klass->is_inflated");
  <D.23308>:
  D.23309 = klass->generic_class;
  return D.23309;
}


mono_class_inflate_generic_type_with_mempool (struct MonoImage * image, struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.23313;
  struct MonoType * D.23316;
  long unsigned int D.23321;
  long unsigned int D.23322;
  struct MonoType * inflated;

  inflated = 0B;
  mono_error_init (error);
  if (context != 0B) goto <D.23311>; else goto <D.23312>;
  <D.23311>:
  inflated = inflate_generic_type (image, type, context, error);
  <D.23312>:
  D.23313 = mono_error_ok (error);
  if (D.23313 == 0) goto <D.23314>; else goto <D.23315>;
  <D.23314>:
  D.23316 = 0B;
  return D.23316;
  <D.23315>:
  if (inflated == 0B) goto <D.23317>; else goto <D.23318>;
  <D.23317>:
  {
    struct MonoType * shared;

    shared = mono_metadata_get_shared_type (type);
    if (shared != 0B) goto <D.23319>; else goto <D.23320>;
    <D.23319>:
    D.23316 = shared;
    return D.23316;
    <D.23320>:
    D.23316 = mono_metadata_type_dup (image, type);
    return D.23316;
  }
  <D.23318>:
  D.23321 = mono_stats.inflated_type_count;
  D.23322 = D.23321 + 1;
  mono_stats.inflated_type_count = D.23322;
  D.23316 = inflated;
  return D.23316;
}


inflate_generic_type (struct MonoImage * image, struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  unsigned char D.23324;
  int D.23325;
  struct MonoGenericParam * D.23326;
  short unsigned int D.23327;
  struct MonoType *[0:] * D.23331;
  struct MonoType * D.23332;
  <unnamed-unsigned:22> D.23333;
  int D.23334;
  struct MonoGenericParamInfo * iftmp.45;
  struct MonoGenericContainer * D.23338;
  const char * iftmp.46;
  struct MonoType * D.23346;
  int D.23347;
  struct MonoGenericParamInfo * iftmp.47;
  unsigned char D.23354;
  int D.23355;
  const char * iftmp.48;
  <unnamed-unsigned:1> D.23360;
  short unsigned int D.23361;
  <unnamed-unsigned:22> D.23364;
  int D.23365;
  struct MonoGenericParamInfo * iftmp.49;
  const char * iftmp.50;
  struct MonoType * D.23376;
  int D.23377;
  struct MonoGenericParamInfo * iftmp.51;
  unsigned char D.23384;
  int D.23385;
  const char * iftmp.52;
  struct MonoType * D.23390;
  int D.23394;
  struct MonoClass * D.23395;
  struct MonoArrayType * D.23396;
  struct MonoType * D.23397;
  int D.23401;
  struct MonoArrayType * D.23402;
  struct MonoClass * D.23403;
  struct MonoGenericInst * D.23404;
  unsigned char D.23405;
  unsigned char D.23406;
  int D.23409;
  <unnamed-unsigned:1> D.23414;
  int D.23415;
  struct MonoClass * D.23416;
  struct MonoGenericClass * D.23417;
  struct MonoGenericInst * D.23422;
  int D.23423;
  struct MonoImage * D.23428;
  <unnamed-unsigned:1> D.23429;
  int D.23430;

  mono_error_init (error);
  D.23324 = type->type;
  D.23325 = (int) D.23324;
  switch (D.23325) <default: <D.19000>, case 17: <D.18994>, case 18: <D.18993>, case 19: <D.18975>, case 20: <D.18985>, case 21: <D.18989>, case 29: <D.18981>, case 30: <D.18969>>
  <D.18969>:
  {
    struct MonoType * nt;
    int num;
    struct MonoGenericInst * inst;

    D.23326 = type->data.generic_param;
    D.23327 = D.23326->num;
    num = (int) D.23327;
    inst = context->method_inst;
    if (inst == 0B) goto <D.23328>; else goto <D.23330>;
    <D.23330>:
    D.23331 = &inst->type_argv;
    if (D.23331 == 0B) goto <D.23328>; else goto <D.23329>;
    <D.23328>:
    D.23332 = 0B;
    return D.23332;
    <D.23329>:
    D.23333 = inst->type_argc;
    D.23334 = (int) D.23333;
    if (D.23334 <= num) goto <D.23335>; else goto <D.23336>;
    <D.23335>:
    {
      struct MonoGenericParamInfo * info;

      D.23326 = type->data.generic_param;
      D.23338 = D.23326->owner;
      if (D.23338 != 0B) goto <D.23339>; else goto <D.23340>;
      <D.23339>:
      D.23326 = type->data.generic_param;
      iftmp.45 = &MEM[(struct MonoGenericParamFull *)D.23326].info;
      goto <D.23341>;
      <D.23340>:
      iftmp.45 = 0B;
      <D.23341>:
      info = iftmp.45;
      D.23333 = inst->type_argc;
      D.23334 = (int) D.23333;
      if (info != 0B) goto <D.23343>; else goto <D.23344>;
      <D.23343>:
      iftmp.46 = info->name;
      goto <D.23345>;
      <D.23344>:
      iftmp.46 = "";
      <D.23345>:
      mono_error_set_bad_image (error, image, "MVAR %d (%s) cannot be expanded in this context with %d instantiations", num, iftmp.46, D.23334);
      D.23332 = 0B;
      return D.23332;
    }
    <D.23336>:
    D.23346 = inst->type_argv[num];
    D.23347 = is_valid_generic_argument (D.23346);
    if (D.23347 == 0) goto <D.23348>; else goto <D.23349>;
    <D.23348>:
    {
      struct MonoGenericParamInfo * info;

      D.23326 = type->data.generic_param;
      D.23338 = D.23326->owner;
      if (D.23338 != 0B) goto <D.23351>; else goto <D.23352>;
      <D.23351>:
      D.23326 = type->data.generic_param;
      iftmp.47 = &MEM[(struct MonoGenericParamFull *)D.23326].info;
      goto <D.23353>;
      <D.23352>:
      iftmp.47 = 0B;
      <D.23353>:
      info = iftmp.47;
      D.23346 = inst->type_argv[num];
      D.23354 = D.23346->type;
      D.23355 = (int) D.23354;
      if (info != 0B) goto <D.23357>; else goto <D.23358>;
      <D.23357>:
      iftmp.48 = info->name;
      goto <D.23359>;
      <D.23358>:
      iftmp.48 = "";
      <D.23359>:
      mono_error_set_bad_image (error, image, "MVAR %d (%s) cannot be expanded with type 0x%x", num, iftmp.48, D.23355);
      D.23332 = 0B;
      return D.23332;
    }
    <D.23349>:
    D.23346 = inst->type_argv[num];
    nt = mono_metadata_type_dup (image, D.23346);
    D.23360 = type->byref;
    nt->byref = D.23360;
    D.23361 = type->attrs;
    nt->attrs = D.23361;
    D.23332 = nt;
    return D.23332;
  }
  <D.18975>:
  {
    struct MonoType * nt;
    int num;
    struct MonoGenericInst * inst;

    D.23326 = type->data.generic_param;
    D.23327 = D.23326->num;
    num = (int) D.23327;
    inst = context->class_inst;
    if (inst == 0B) goto <D.23362>; else goto <D.23363>;
    <D.23362>:
    D.23332 = 0B;
    return D.23332;
    <D.23363>:
    D.23364 = inst->type_argc;
    D.23365 = (int) D.23364;
    if (D.23365 <= num) goto <D.23366>; else goto <D.23367>;
    <D.23366>:
    {
      struct MonoGenericParamInfo * info;

      D.23326 = type->data.generic_param;
      D.23338 = D.23326->owner;
      if (D.23338 != 0B) goto <D.23369>; else goto <D.23370>;
      <D.23369>:
      D.23326 = type->data.generic_param;
      iftmp.49 = &MEM[(struct MonoGenericParamFull *)D.23326].info;
      goto <D.23371>;
      <D.23370>:
      iftmp.49 = 0B;
      <D.23371>:
      info = iftmp.49;
      D.23364 = inst->type_argc;
      D.23365 = (int) D.23364;
      if (info != 0B) goto <D.23373>; else goto <D.23374>;
      <D.23373>:
      iftmp.50 = info->name;
      goto <D.23375>;
      <D.23374>:
      iftmp.50 = "";
      <D.23375>:
      mono_error_set_bad_image (error, image, "VAR %d (%s) cannot be expanded in this context with %d instantiations", num, iftmp.50, D.23365);
      D.23332 = 0B;
      return D.23332;
    }
    <D.23367>:
    D.23376 = inst->type_argv[num];
    D.23377 = is_valid_generic_argument (D.23376);
    if (D.23377 == 0) goto <D.23378>; else goto <D.23379>;
    <D.23378>:
    {
      struct MonoGenericParamInfo * info;

      D.23326 = type->data.generic_param;
      D.23338 = D.23326->owner;
      if (D.23338 != 0B) goto <D.23381>; else goto <D.23382>;
      <D.23381>:
      D.23326 = type->data.generic_param;
      iftmp.51 = &MEM[(struct MonoGenericParamFull *)D.23326].info;
      goto <D.23383>;
      <D.23382>:
      iftmp.51 = 0B;
      <D.23383>:
      info = iftmp.51;
      D.23376 = inst->type_argv[num];
      D.23384 = D.23376->type;
      D.23385 = (int) D.23384;
      if (info != 0B) goto <D.23387>; else goto <D.23388>;
      <D.23387>:
      iftmp.52 = info->name;
      goto <D.23389>;
      <D.23388>:
      iftmp.52 = "";
      <D.23389>:
      mono_error_set_bad_image (error, image, "VAR %d (%s) cannot be expanded with type 0x%x", num, iftmp.52, D.23385);
      D.23332 = 0B;
      return D.23332;
    }
    <D.23379>:
    D.23376 = inst->type_argv[num];
    nt = mono_metadata_type_dup (image, D.23376);
    D.23360 = type->byref;
    nt->byref = D.23360;
    D.23361 = type->attrs;
    nt->attrs = D.23361;
    D.23332 = nt;
    return D.23332;
  }
  <D.18981>:
  {
    struct MonoClass * eclass;
    struct MonoType * nt;
    struct MonoType * inflated;

    eclass = type->data.klass;
    D.23390 = &eclass->byval_arg;
    inflated = inflate_generic_type (0B, D.23390, context, error);
    if (inflated == 0B) goto <D.23391>; else goto <D.23393>;
    <D.23393>:
    D.23394 = mono_error_ok (error);
    if (D.23394 == 0) goto <D.23391>; else goto <D.23392>;
    <D.23391>:
    D.23332 = 0B;
    return D.23332;
    <D.23392>:
    nt = mono_metadata_type_dup (image, type);
    D.23395 = mono_class_from_mono_type (inflated);
    nt->data.klass = D.23395;
    mono_metadata_free_type (inflated);
    D.23332 = nt;
    return D.23332;
  }
  <D.18985>:
  {
    struct MonoClass * eclass;
    struct MonoType * nt;
    struct MonoType * inflated;

    D.23396 = type->data.array;
    eclass = D.23396->eklass;
    D.23397 = &eclass->byval_arg;
    inflated = inflate_generic_type (0B, D.23397, context, error);
    if (inflated == 0B) goto <D.23398>; else goto <D.23400>;
    <D.23400>:
    D.23401 = mono_error_ok (error);
    if (D.23401 == 0) goto <D.23398>; else goto <D.23399>;
    <D.23398>:
    D.23332 = 0B;
    return D.23332;
    <D.23399>:
    nt = mono_metadata_type_dup (image, type);
    D.23402 = nt->data.array;
    D.23403 = mono_class_from_mono_type (inflated);
    D.23402->eklass = D.23403;
    mono_metadata_free_type (inflated);
    D.23332 = nt;
    return D.23332;
  }
  <D.18989>:
  {
    struct MonoGenericClass * gclass;
    struct MonoGenericInst * inst;
    struct MonoType * nt;

    gclass = type->data.generic_class;
    D.23404 = gclass->context.class_inst;
    D.23405 = BIT_FIELD_REF <*D.23404, 8, 48>;
    D.23406 = D.23405 & 64;
    if (D.23406 == 0) goto <D.23407>; else goto <D.23408>;
    <D.23407>:
    D.23332 = 0B;
    return D.23332;
    <D.23408>:
    D.23404 = gclass->context.class_inst;
    inst = mono_metadata_inflate_generic_inst (D.23404, context, error);
    D.23409 = mono_error_ok (error);
    if (D.23409 == 0) goto <D.23410>; else goto <D.23411>;
    <D.23410>:
    D.23332 = 0B;
    return D.23332;
    <D.23411>:
    D.23404 = gclass->context.class_inst;
    if (D.23404 != inst) goto <D.23412>; else goto <D.23413>;
    <D.23412>:
    D.23414 = gclass->is_dynamic;
    D.23415 = (int) D.23414;
    D.23416 = gclass->container_class;
    gclass = mono_metadata_lookup_generic_class (D.23416, inst, D.23415);
    <D.23413>:
    D.23417 = type->data.generic_class;
    if (D.23417 == gclass) goto <D.23418>; else goto <D.23419>;
    <D.23418>:
    D.23332 = 0B;
    return D.23332;
    <D.23419>:
    nt = mono_metadata_type_dup (image, type);
    nt->data.generic_class = gclass;
    D.23332 = nt;
    return D.23332;
  }
  <D.18993>:
  <D.18994>:
  {
    struct MonoClass * klass;
    struct MonoGenericContainer * container;
    struct MonoGenericInst * inst;
    struct MonoGenericClass * gclass;
    struct MonoType * nt;

    klass = type->data.klass;
    container = klass->generic_container;
    gclass = 0B;
    if (container == 0B) goto <D.23420>; else goto <D.23421>;
    <D.23420>:
    D.23332 = 0B;
    return D.23332;
    <D.23421>:
    D.23422 = container->context.class_inst;
    inst = mono_metadata_inflate_generic_inst (D.23422, context, error);
    D.23423 = mono_error_ok (error);
    if (D.23423 == 0) goto <D.23424>; else goto <D.23425>;
    <D.23424>:
    D.23332 = 0B;
    return D.23332;
    <D.23425>:
    D.23422 = container->context.class_inst;
    if (D.23422 == inst) goto <D.23426>; else goto <D.23427>;
    <D.23426>:
    D.23332 = 0B;
    return D.23332;
    <D.23427>:
    D.23428 = klass->image;
    D.23429 = D.23428->dynamic;
    D.23430 = (int) D.23429;
    gclass = mono_metadata_lookup_generic_class (klass, inst, D.23430);
    nt = mono_metadata_type_dup (image, type);
    nt->type = 21;
    nt->data.generic_class = gclass;
    D.23332 = nt;
    return D.23332;
  }
  <D.19000>:
  D.23332 = 0B;
  return D.23332;
  D.23332 = 0B;
  return D.23332;
}


is_valid_generic_argument (struct MonoType * type)
{
  unsigned char D.23432;
  int D.23433;
  gboolean D.23434;

  D.23432 = type->type;
  D.23433 = (int) D.23432;
  switch (D.23433) <default: <D.23435>, case 1: <D.18962>>
  <D.18962>:
  D.23434 = 0;
  return D.23434;
  <D.23435>:
  D.23434 = 1;
  return D.23434;
}


mono_class_inflate_generic_type (struct MonoType * type, struct MonoGenericContext * context)
{
  int D.23437;
  struct MonoType * D.23440;
  struct MonoError error;
  struct MonoType * result;

  try
    {
      result = mono_class_inflate_generic_type_checked (type, context, &error);
      D.23437 = mono_error_ok (&error);
      if (D.23437 == 0) goto <D.23438>; else goto <D.23439>;
      <D.23438>:
      mono_error_cleanup (&error);
      D.23440 = 0B;
      return D.23440;
      <D.23439>:
      D.23440 = result;
      return D.23440;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_inflate_generic_type_checked (struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  struct MonoType * D.23443;

  D.23443 = mono_class_inflate_generic_type_with_mempool (0B, type, context, error);
  return D.23443;
}


mono_class_inflate_generic_class (struct MonoClass * gklass, struct MonoGenericContext * context)
{
  int D.23445;
  _Bool D.23446;
  long int D.23447;
  long int D.23448;
  struct MonoClass * D.23451;
  struct MonoError error;
  struct MonoClass * res;

  try
    {
      res = mono_class_inflate_generic_class_checked (gklass, context, &error);
      D.23445 = mono_error_ok (&error);
      D.23446 = D.23445 == 0;
      D.23447 = (long int) D.23446;
      D.23448 = __builtin_expect (D.23447, 0);
      if (D.23448 != 0) goto <D.23449>; else goto <D.23450>;
      <D.23449>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 905, "mono_error_ok (&error)");
      <D.23450>:
      D.23451 = res;
      return D.23451;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_inflate_generic_method (struct MonoMethod * method, struct MonoGenericContext * context)
{
  struct MonoMethod * D.23454;

  D.23454 = mono_class_inflate_generic_method_full (method, 0B, context);
  return D.23454;
}


mono_class_inflate_generic_method_full (struct MonoMethod * method, struct MonoClass * klass_hint, struct MonoGenericContext * context)
{
  int D.23456;
  const char * D.23459;
  struct MonoMethod * D.23460;
  struct MonoError error;
  struct MonoMethod * res;

  try
    {
      res = mono_class_inflate_generic_method_full_checked (method, klass_hint, context, &error);
      D.23456 = mono_error_ok (&error);
      if (D.23456 == 0) goto <D.23457>; else goto <D.23458>;
      <D.23457>:
      D.23459 = mono_error_get_message (&error);
      monoeg_g_log (0B, 4, "Could not inflate generic method due to %s", D.23459);
      <D.19072>:
      goto <D.19072>;
      <D.23458>:
      D.23460 = res;
      return D.23460;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_inflate_generic_method_full_checked (struct MonoMethod * method, struct MonoClass * klass_hint, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.23463;
  struct MonoMethod * D.23466;
  int D.23467;
  unsigned char D.23470;
  unsigned char D.23471;
  unsigned char D.23475;
  struct MonoGenericInst * D.23477;
  struct MonoClass * D.23478;
  struct MonoGenericContainer * D.23479;
  struct MonoGenericInst * D.23481;
  int iftmp.53;
  struct MonoImage * D.23486;
  unsigned char D.23487;
  unsigned char D.23488;
  unsigned char D.23490;
  unsigned char D.23491;
  struct MonoGenericContainer * D.23493;
  struct MonoGenericInst * D.23494;
  unsigned char D.23496;
  <unnamed-unsigned:1> D.23497;
  struct MonoGenericContainer * D.23502;
  struct MonoGenericInst * D.23503;
  struct MonoMethod * D.23506;
  struct MonoClass * D.23507;
  struct MonoGenericClass * D.23508;
  _Bool D.23509;
  long int D.23510;
  long int D.23511;
  struct MonoGenericContainer * D.23514;
  struct MonoGenericInst * D.23517;
  struct MonoGenericInst * D.23521;
  long unsigned int D.23524;
  long unsigned int D.23525;
  unsigned int inflated_methods_size.54;
  unsigned int inflated_methods_size.55;
  const char * D.23530;
  unsigned char D.23531;
  unsigned char D.23532;
  struct MonoMethodPInvoke * D.23535;
  struct MonoMethod * D.23537;
  struct MonoGenericClass * D.23545;
  struct MonoClass * D.23547;
  struct MonoGenericInst * D.23549;
  struct MonoClass * D.23552;
  struct MonoType * D.23555;
  int D.23556;
  struct MonoClass * iftmp.56;
  struct MonoMethod * result;
  struct MonoMethodInflated * iresult;
  struct MonoMethodInflated * cached;
  struct MonoMethodSignature * sig;
  struct MonoGenericContext tmp_context;
  gboolean is_mb_open;
  void fail = <<< error >>>;

  try
    {
      is_mb_open = 0;
      mono_error_init (error);
      goto <D.19088>;
      <D.19087>:
      {
        struct MonoGenericContext * method_context;
        struct MonoMethodInflated * imethod;

        method_context = mono_method_get_context (method);
        imethod = method;
        tmp_context = inflate_generic_context (method_context, context, error);
        D.23463 = mono_error_ok (error);
        if (D.23463 == 0) goto <D.23464>; else goto <D.23465>;
        <D.23464>:
        D.23466 = 0B;
        return D.23466;
        <D.23465>:
        context = &tmp_context;
        D.23467 = mono_metadata_generic_context_equal (method_context, context);
        if (D.23467 != 0) goto <D.23468>; else goto <D.23469>;
        <D.23468>:
        D.23466 = method;
        return D.23466;
        <D.23469>:
        method = imethod->declaring;
      }
      <D.19088>:
      D.23470 = BIT_FIELD_REF <*method, 8, 264>;
      D.23471 = D.23470 & 16;
      if (D.23471 != 0) goto <D.19087>; else goto <D.19089>;
      <D.19089>:
      D.23470 = BIT_FIELD_REF <*method, 8, 264>;
      D.23475 = D.23470 & 8;
      if (D.23475 == 0) goto <D.23474>; else goto <D.23476>;
      <D.23476>:
      D.23477 = context->method_inst;
      if (D.23477 == 0B) goto <D.23474>; else goto <D.23473>;
      <D.23474>:
      D.23478 = method->klass;
      D.23479 = D.23478->generic_container;
      if (D.23479 == 0B) goto <D.23472>; else goto <D.23480>;
      <D.23480>:
      D.23481 = context->class_inst;
      if (D.23481 == 0B) goto <D.23472>; else goto <D.23473>;
      <D.23472>:
      D.23466 = method;
      return D.23466;
      <D.23473>:
      D.23470 = BIT_FIELD_REF <*method, 8, 264>;
      D.23475 = D.23470 & 8;
      if (D.23475 != 0) goto <D.23485>; else goto <D.23483>;
      <D.23485>:
      D.23478 = method->klass;
      D.23486 = D.23478->image;
      D.23487 = BIT_FIELD_REF <*D.23486, 8, 224>;
      D.23488 = D.23487 & 8;
      if (D.23488 != 0) goto <D.23489>; else goto <D.23483>;
      <D.23489>:
      D.23478 = method->klass;
      D.23490 = BIT_FIELD_REF <*D.23478, 8, 256>;
      D.23491 = D.23490 & 128;
      if (D.23491 == 0) goto <D.23492>; else goto <D.23483>;
      <D.23492>:
      D.23477 = context->method_inst;
      D.23493 = mono_method_get_generic_container (method);
      D.23494 = D.23493->context.method_inst;
      if (D.23477 == D.23494) goto <D.23495>; else goto <D.23483>;
      <D.23495>:
      iftmp.53 = 1;
      goto <D.23484>;
      <D.23483>:
      iftmp.53 = 0;
      <D.23484>:
      is_mb_open = iftmp.53;
      iresult = monoeg_malloc0 (88);
      iresult->context = *context;
      iresult->declaring = method;
      D.23496 = (unsigned char) is_mb_open;
      D.23497 = (<unnamed-unsigned:1>) D.23496;
      iresult->method.method.is_mb_open = D.23497;
      D.23477 = context->method_inst;
      if (D.23477 == 0B) goto <D.23498>; else goto <D.23499>;
      <D.23498>:
      D.23470 = BIT_FIELD_REF <*method, 8, 264>;
      D.23475 = D.23470 & 8;
      if (D.23475 != 0) goto <D.23500>; else goto <D.23501>;
      <D.23500>:
      D.23502 = mono_method_get_generic_container (method);
      D.23503 = D.23502->context.method_inst;
      iresult->context.method_inst = D.23503;
      <D.23501>:
      <D.23499>:
      D.23481 = context->class_inst;
      if (D.23481 == 0B) goto <D.23504>; else goto <D.23505>;
      <D.23504>:
      D.23506 = iresult->declaring;
      D.23507 = D.23506->klass;
      D.23508 = D.23507->generic_class;
      D.23509 = D.23508 != 0B;
      D.23510 = (long int) D.23509;
      D.23511 = __builtin_expect (D.23510, 0);
      if (D.23511 != 0) goto <D.23512>; else goto <D.23513>;
      <D.23512>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1059, "!iresult->declaring->klass->generic_class");
      <D.23513>:
      D.23506 = iresult->declaring;
      D.23507 = D.23506->klass;
      D.23514 = D.23507->generic_container;
      if (D.23514 != 0B) goto <D.23515>; else goto <D.23516>;
      <D.23515>:
      D.23506 = iresult->declaring;
      D.23507 = D.23506->klass;
      D.23514 = D.23507->generic_container;
      D.23517 = D.23514->context.class_inst;
      iresult->context.class_inst = D.23517;
      goto <D.23518>;
      <D.23516>:
      D.23506 = iresult->declaring;
      D.23507 = D.23506->klass;
      D.23508 = D.23507->generic_class;
      if (D.23508 != 0B) goto <D.23519>; else goto <D.23520>;
      <D.23519>:
      D.23506 = iresult->declaring;
      D.23507 = D.23506->klass;
      D.23508 = D.23507->generic_class;
      D.23521 = D.23508->context.class_inst;
      iresult->context.class_inst = D.23521;
      <D.23520>:
      <D.23518>:
      <D.23505>:
      mono_loader_lock ();
      cached = mono_method_inflated_lookup (iresult, 0);
      if (cached != 0B) goto <D.23522>; else goto <D.23523>;
      <D.23522>:
      mono_loader_unlock ();
      monoeg_g_free (iresult);
      D.23466 = cached;
      return D.23466;
      <D.23523>:
      D.23524 = mono_stats.inflated_method_count;
      D.23525 = D.23524 + 1;
      mono_stats.inflated_method_count = D.23525;
      inflated_methods_size.54 = inflated_methods_size;
      inflated_methods_size.55 = inflated_methods_size.54 + 88;
      inflated_methods_size = inflated_methods_size.55;
      sig = mono_method_signature (method);
      if (sig == 0B) goto <D.23528>; else goto <D.23529>;
      <D.23528>:
      {
        char * name;

        D.23478 = method->klass;
        name = mono_type_get_full_name (D.23478);
        D.23530 = method->name;
        D.23478 = method->klass;
        D.23486 = D.23478->image;
        mono_error_set_bad_image (error, D.23486, "Could not resolve signature of method %s:%s", name, D.23530);
        monoeg_g_free (name);
        goto fail;
      }
      <D.23529>:
      D.23531 = BIT_FIELD_REF <*sig, 8, 120>;
      D.23532 = D.23531 & 1;
      if (D.23532 != 0) goto <D.23533>; else goto <D.23534>;
      <D.23533>:
      D.23535 = &iresult->method.pinvoke;
      memcpy (D.23535, method, 56);
      goto <D.23536>;
      <D.23534>:
      D.23537 = &iresult->method.method;
      memcpy (D.23537, method, 40);
      <D.23536>:
      result = iresult;
      result->is_inflated = 1;
      result->is_generic = 0;
      result->sre_method = 0;
      result->signature = 0B;
      D.23496 = (unsigned char) is_mb_open;
      D.23497 = (<unnamed-unsigned:1>) D.23496;
      result->is_mb_open = D.23497;
      D.23477 = context->method_inst;
      if (D.23477 == 0B) goto <D.23538>; else goto <D.23539>;
      <D.23538>:
      {
        struct MonoGenericContainer * generic_container;

        generic_container = mono_method_get_generic_container (method);
        if (generic_container != 0B) goto <D.23540>; else goto <D.23541>;
        <D.23540>:
        result->is_generic = 1;
        mono_method_set_generic_container (result, generic_container);
        <D.23541>:
      }
      <D.23539>:
      if (klass_hint == 0B) goto <D.23542>; else goto <D.23544>;
      <D.23544>:
      D.23545 = klass_hint->generic_class;
      if (D.23545 == 0B) goto <D.23542>; else goto <D.23546>;
      <D.23546>:
      D.23545 = klass_hint->generic_class;
      D.23547 = D.23545->container_class;
      D.23478 = method->klass;
      if (D.23547 != D.23478) goto <D.23542>; else goto <D.23548>;
      <D.23548>:
      D.23545 = klass_hint->generic_class;
      D.23549 = D.23545->context.class_inst;
      D.23481 = context->class_inst;
      if (D.23549 != D.23481) goto <D.23542>; else goto <D.23543>;
      <D.23542>:
      klass_hint = 0B;
      <D.23543>:
      D.23478 = method->klass;
      D.23479 = D.23478->generic_container;
      if (D.23479 != 0B) goto <D.23550>; else goto <D.23551>;
      <D.23550>:
      result->klass = klass_hint;
      <D.23551>:
      D.23552 = result->klass;
      if (D.23552 == 0B) goto <D.23553>; else goto <D.23554>;
      <D.23553>:
      {
        struct MonoType * inflated;

        D.23478 = method->klass;
        D.23555 = &D.23478->byval_arg;
        inflated = inflate_generic_type (0B, D.23555, context, error);
        D.23556 = mono_error_ok (error);
        if (D.23556 == 0) goto fail; else goto <D.23557>;
        <D.23557>:
        if (inflated != 0B) goto <D.23559>; else goto <D.23560>;
        <D.23559>:
        iftmp.56 = mono_class_from_mono_type (inflated);
        goto <D.23561>;
        <D.23560>:
        iftmp.56 = method->klass;
        <D.23561>:
        result->klass = iftmp.56;
        if (inflated != 0B) goto <D.23562>; else goto <D.23563>;
        <D.23562>:
        mono_metadata_free_type (inflated);
        <D.23563>:
      }
      <D.23554>:
      mono_method_inflated_lookup (iresult, 1);
      mono_loader_unlock ();
      D.23466 = result;
      return D.23466;
      fail:
      mono_loader_unlock ();
      monoeg_g_free (iresult);
      D.23466 = 0B;
      return D.23466;
    }
  finally
    {
      tmp_context = {CLOBBER};
    }
}


inflate_generic_context (struct MonoGenericContext * context, struct MonoGenericContext * inflate_with, struct MonoError * error)
{
  struct MonoGenericInst * D.23566;
  int D.23569;
  struct MonoGenericInst * D.23571;
  int D.23574;
  struct MonoGenericContext D.23576;
  struct MonoGenericInst * class_inst;
  struct MonoGenericInst * method_inst;
  struct MonoGenericContext res;
  void fail = <<< error >>>;

  try
    {
      class_inst = 0B;
      method_inst = 0B;
      res.class_inst = 0B;
      res.method_inst = 0B;
      mono_error_init (error);
      D.23566 = context->class_inst;
      if (D.23566 != 0B) goto <D.23567>; else goto <D.23568>;
      <D.23567>:
      D.23566 = context->class_inst;
      class_inst = mono_metadata_inflate_generic_inst (D.23566, inflate_with, error);
      D.23569 = mono_error_ok (error);
      if (D.23569 == 0) goto fail; else goto <D.23570>;
      <D.23570>:
      <D.23568>:
      D.23571 = context->method_inst;
      if (D.23571 != 0B) goto <D.23572>; else goto <D.23573>;
      <D.23572>:
      D.23571 = context->method_inst;
      method_inst = mono_metadata_inflate_generic_inst (D.23571, inflate_with, error);
      D.23574 = mono_error_ok (error);
      if (D.23574 == 0) goto fail; else goto <D.23575>;
      <D.23575>:
      <D.23573>:
      res.class_inst = class_inst;
      res.method_inst = method_inst;
      fail:
      D.23576 = res;
      return D.23576;
    }
  finally
    {
      res = {CLOBBER};
    }
}


mono_get_inflated_method (struct MonoMethod * method)
{
  struct MonoMethod * D.23579;

  D.23579 = method;
  return D.23579;
}


mono_method_get_context_general (struct MonoMethod * method, gboolean uninflated)
{
  unsigned char D.23581;
  unsigned char D.23582;
  struct MonoGenericContext * D.23585;
  unsigned char D.23588;
  struct MonoGenericContainer * D.23591;
  struct MonoClass * D.23592;
  struct MonoGenericContainer * D.23593;

  D.23581 = BIT_FIELD_REF <*method, 8, 264>;
  D.23582 = D.23581 & 16;
  if (D.23582 != 0) goto <D.23583>; else goto <D.23584>;
  <D.23583>:
  {
    struct MonoMethodInflated * imethod;

    imethod = method;
    D.23585 = &imethod->context;
    return D.23585;
  }
  <D.23584>:
  if (uninflated == 0) goto <D.23586>; else goto <D.23587>;
  <D.23586>:
  D.23585 = 0B;
  return D.23585;
  <D.23587>:
  D.23581 = BIT_FIELD_REF <*method, 8, 264>;
  D.23588 = D.23581 & 8;
  if (D.23588 != 0) goto <D.23589>; else goto <D.23590>;
  <D.23589>:
  D.23591 = mono_method_get_generic_container (method);
  D.23585 = &D.23591->context;
  return D.23585;
  <D.23590>:
  D.23592 = method->klass;
  D.23593 = D.23592->generic_container;
  if (D.23593 != 0B) goto <D.23594>; else goto <D.23595>;
  <D.23594>:
  D.23592 = method->klass;
  D.23593 = D.23592->generic_container;
  D.23585 = &D.23593->context;
  return D.23585;
  <D.23595>:
  D.23585 = 0B;
  return D.23585;
}


mono_method_get_context (struct MonoMethod * method)
{
  struct MonoGenericContext * D.23597;

  D.23597 = mono_method_get_context_general (method, 0);
  return D.23597;
}


mono_method_get_generic_container (struct MonoMethod * method)
{
  unsigned char D.23599;
  unsigned char D.23600;
  struct MonoGenericContainer * D.23603;
  struct MonoClass * D.23604;
  struct MonoImage * D.23605;
  _Bool D.23606;
  long int D.23607;
  long int D.23608;
  struct MonoGenericContainer * container;

  D.23599 = BIT_FIELD_REF <*method, 8, 264>;
  D.23600 = D.23599 & 8;
  if (D.23600 == 0) goto <D.23601>; else goto <D.23602>;
  <D.23601>:
  D.23603 = 0B;
  return D.23603;
  <D.23602>:
  D.23604 = method->klass;
  D.23605 = D.23604->image;
  container = mono_image_property_lookup (D.23605, method, 0);
  D.23606 = container == 0B;
  D.23607 = (long int) D.23606;
  D.23608 = __builtin_expect (D.23607, 0);
  if (D.23608 != 0) goto <D.23609>; else goto <D.23610>;
  <D.23609>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1216, "container");
  <D.23610>:
  D.23603 = container;
  return D.23603;
}


mono_method_set_generic_container (struct MonoMethod * method, struct MonoGenericContainer * container)
{
  unsigned char D.23612;
  unsigned char D.23613;
  _Bool D.23614;
  long int D.23615;
  long int D.23616;
  struct MonoClass * D.23619;
  struct MonoImage * D.23620;

  D.23612 = BIT_FIELD_REF <*method, 8, 264>;
  D.23613 = D.23612 & 8;
  D.23614 = D.23613 == 0;
  D.23615 = (long int) D.23614;
  D.23616 = __builtin_expect (D.23615, 0);
  if (D.23616 != 0) goto <D.23617>; else goto <D.23618>;
  <D.23617>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1230, "method->is_generic");
  <D.23618>:
  D.23619 = method->klass;
  D.23620 = D.23619->image;
  mono_image_property_insert (D.23620, method, 0, container);
}


mono_class_setup_fields_locking (struct MonoClass * class)
{
  unsigned char D.23621;
  unsigned char D.23622;

  D.23621 = BIT_FIELD_REF <*class, 8, 288>;
  D.23622 = D.23621 & 32;
  if (D.23622 != 0) goto <D.23623>; else goto <D.23624>;
  <D.23623>:
  return;
  <D.23624>:
  mono_loader_lock ();
  mono_class_setup_fields (class);
  mono_loader_unlock ();
}


mono_class_setup_fields (struct MonoClass * class)
{
  unsigned int D.23626;
  struct MonoClass * iftmp.57;
  struct MonoGenericClass * D.23628;
  unsigned char D.23632;
  unsigned char D.23633;
  struct MonoClass * D.23638;
  struct MonoImage * D.23639;
  unsigned char D.23640;
  unsigned char D.23641;
  unsigned char D.23644;
  unsigned char D.23645;
  unsigned int D.23648;
  unsigned char D.23651;
  unsigned char D.23654;
  struct MonoClass * D.23657;
  unsigned char D.23660;
  unsigned char D.23661;
  unsigned char D.23664;
  int D.23667;
  int D.23668;
  int D.23669;
  unsigned char D.23670;
  <unnamed-unsigned:1> D.23671;
  unsigned char D.23672;
  <unnamed-unsigned:1> D.23673;
  unsigned char D.23674;
  unsigned char D.23675;
  <unnamed-unsigned:1> D.23676;
  <unnamed-unsigned:1> D.23677;
  unsigned int D.23679;
  struct MonoImage * D.23680;
  unsigned int D.23681;
  unsigned int packing_size.58;
  unsigned int D.23685;
  const char * D.23688;
  unsigned char D.23689;
  <unnamed-unsigned:4> D.23690;
  unsigned int D.23691;
  unsigned int real_size.59;
  unsigned int real_size.60;
  unsigned int D.23700;
  int D.23701;
  unsigned char D.23702;
  <unnamed-unsigned:1> D.23703;
  struct MonoGenericContainer * D.23706;
  _Bool D.23712;
  long int D.23713;
  long int D.23714;
  unsigned int D.23717;
  unsigned int i.61;
  unsigned int D.23719;
  struct MonoClassField * D.23720;
  long unsigned int D.23721;
  long unsigned int D.23722;
  struct MonoType * D.23723;
  int D.23726;
  const char * D.23731;
  char * D.23732;
  _Bool D.23733;
  long int D.23734;
  long int D.23735;
  short unsigned int D.23738;
  int D.23739;
  int D.23740;
  int D.19185;
  int iftmp.62;
  int D.19184;
  const char[9] * D.23746;
  unsigned char D.23747;
  int D.23748;
  unsigned char D.23749;
  int D.23750;
  _Bool D.23751;
  _Bool D.23752;
  _Bool D.23753;
  const unsigned char * D.23756;
  unsigned char D.23757;
  int D.23758;
  const unsigned char * D.23759;
  unsigned char D.23760;
  int D.23761;
  _Bool D.23762;
  _Bool D.23763;
  const unsigned char * D.23766;
  unsigned char D.23767;
  int D.23768;
  const unsigned char * D.23769;
  unsigned char D.23770;
  int D.23771;
  _Bool D.23772;
  _Bool D.23773;
  const unsigned char * D.23776;
  unsigned char D.23777;
  int D.23778;
  const unsigned char * D.23779;
  unsigned char D.23780;
  int D.23781;
  const char * D.23783;
  struct MonoClassField * D.23788;
  int D.23789;
  unsigned int idx.63;
  unsigned int offset.64;
  int offset.65;
  int D.23796;
  int D.23799;
  gchar * D.23802;
  gchar * D.23805;
  unsigned char D.23813;
  unsigned char D.23814;
  int D.23816;
  unsigned char D.23819;
  unsigned char D.23825;
  unsigned char D.23826;
  unsigned char D.23827;
  unsigned char D.23828;
  struct MonoClass * D.23833;
  struct MonoClass * D.23834;
  <unnamed-unsigned:1> D.23835;
  int D.23836;
  struct MonoClass * D.23839;
  struct MonoType * D.23844;
  unsigned char D.23851;
  unsigned char D.23854;
  unsigned int D.23857;
  unsigned int D.23858;
  struct MonoError error;
  struct MonoImage * m;
  int top;
  guint32 layout;
  int i;
  int blittable;
  guint32 real_size;
  guint32 packing_size;
  gboolean explicit_size;
  struct MonoClassField * field;
  struct MonoGenericContainer * container;
  struct MonoClass * gtd;

  try
    {
      m = class->image;
      D.23626 = class->flags;
      layout = D.23626 & 24;
      blittable = 1;
      real_size = 0;
      packing_size = 0;
      container = 0B;
      D.23628 = class->generic_class;
      if (D.23628 != 0B) goto <D.23629>; else goto <D.23630>;
      <D.23629>:
      iftmp.57 = mono_class_get_generic_type_definition (class);
      goto <D.23631>;
      <D.23630>:
      iftmp.57 = 0B;
      <D.23631>:
      gtd = iftmp.57;
      D.23632 = BIT_FIELD_REF <*class, 8, 288>;
      D.23633 = D.23632 & 64;
      if (D.23633 != 0) goto <D.23634>; else goto <D.23635>;
      <D.23634>:
      return;
      <D.23635>:
      D.23628 = class->generic_class;
      if (D.23628 != 0B) goto <D.23636>; else goto <D.23637>;
      <D.23636>:
      D.23628 = class->generic_class;
      D.23638 = D.23628->container_class;
      D.23639 = D.23638->image;
      D.23640 = BIT_FIELD_REF <*D.23639, 8, 224>;
      D.23641 = D.23640 & 8;
      if (D.23641 != 0) goto <D.23642>; else goto <D.23643>;
      <D.23642>:
      D.23628 = class->generic_class;
      D.23638 = D.23628->container_class;
      D.23644 = BIT_FIELD_REF <*D.23638, 8, 256>;
      D.23645 = D.23644 & 128;
      if (D.23645 == 0) goto <D.23646>; else goto <D.23647>;
      <D.23646>:
      return;
      <D.23647>:
      <D.23643>:
      <D.23637>:
      mono_class_setup_basic_field_info (class);
      D.23648 = class->field.count;
      top = (int) D.23648;
      if (gtd != 0B) goto <D.23649>; else goto <D.23650>;
      <D.23649>:
      mono_class_setup_fields (gtd);
      D.23651 = gtd->exception_type;
      if (D.23651 != 0) goto <D.23652>; else goto <D.23653>;
      <D.23652>:
      mono_class_set_failure (class, 7, 0B);
      return;
      <D.23653>:
      <D.23650>:
      class->instance_size = 0;
      D.23654 = class->rank;
      if (D.23654 == 0) goto <D.23655>; else goto <D.23656>;
      <D.23655>:
      class->sizes.class_size = 0;
      <D.23656>:
      D.23657 = class->parent;
      if (D.23657 != 0B) goto <D.23658>; else goto <D.23659>;
      <D.23658>:
      D.23657 = class->parent;
      mono_class_init (D.23657);
      D.23657 = class->parent;
      D.23660 = BIT_FIELD_REF <*D.23657, 8, 256>;
      D.23661 = D.23660 & 4;
      if (D.23661 == 0) goto <D.23662>; else goto <D.23663>;
      <D.23662>:
      D.23657 = class->parent;
      mono_class_setup_fields (D.23657);
      D.23657 = class->parent;
      D.23664 = D.23657->exception_type;
      if (D.23664 != 0) goto <D.23665>; else goto <D.23666>;
      <D.23665>:
      mono_class_set_failure (class, 7, 0B);
      return;
      <D.23666>:
      <D.23663>:
      D.23667 = class->instance_size;
      D.23657 = class->parent;
      D.23668 = D.23657->instance_size;
      D.23669 = D.23667 + D.23668;
      class->instance_size = D.23669;
      D.23657 = class->parent;
      D.23670 = D.23657->min_align;
      class->min_align = D.23670;
      D.23671 = class->has_references;
      D.23672 = (unsigned char) D.23671;
      D.23657 = class->parent;
      D.23673 = D.23657->has_references;
      D.23674 = (unsigned char) D.23673;
      D.23675 = D.23672 | D.23674;
      D.23676 = (<unnamed-unsigned:1>) D.23675;
      class->has_references = D.23676;
      D.23657 = class->parent;
      D.23677 = D.23657->blittable;
      blittable = (int) D.23677;
      goto <D.23678>;
      <D.23659>:
      class->instance_size = 16;
      class->min_align = 1;
      <D.23678>:
      D.23679 = class->type_token;
      D.23680 = class->image;
      D.23681 = mono_metadata_packing_from_typedef (D.23680, D.23679, &packing_size, &real_size);
      explicit_size = (gboolean) D.23681;
      if (explicit_size != 0) goto <D.23682>; else goto <D.23683>;
      <D.23682>:
      packing_size.58 = packing_size;
      D.23685 = packing_size.58 & 4294967280;
      if (D.23685 != 0) goto <D.23686>; else goto <D.23687>;
      <D.23686>:
      {
        char * err_msg;

        packing_size.58 = packing_size;
        D.23688 = class->name;
        err_msg = monoeg_g_strdup_printf ("Could not load struct \'%s\' with packing size %d >= 16", D.23688, packing_size.58);
        mono_class_set_failure (class, 7, err_msg);
        return;
      }
      <D.23687>:
      packing_size.58 = packing_size;
      D.23689 = (unsigned char) packing_size.58;
      D.23690 = (<unnamed-unsigned:4>) D.23689;
      class->packing_size = D.23690;
      D.23667 = class->instance_size;
      D.23691 = (unsigned int) D.23667;
      real_size.59 = real_size;
      real_size.60 = D.23691 + real_size.59;
      real_size = real_size.60;
      <D.23683>:
      if (top == 0) goto <D.23694>; else goto <D.23695>;
      <D.23694>:
      if (explicit_size != 0) goto <D.23696>; else goto <D.23697>;
      <D.23696>:
      real_size.59 = real_size;
      if (real_size.59 != 0) goto <D.23698>; else goto <D.23699>;
      <D.23698>:
      D.23667 = class->instance_size;
      D.23691 = (unsigned int) D.23667;
      real_size.59 = real_size;
      D.23700 = MAX_EXPR <D.23691, real_size.59>;
      D.23701 = (int) D.23700;
      class->instance_size = D.23701;
      <D.23699>:
      <D.23697>:
      D.23702 = (unsigned char) blittable;
      D.23703 = (<unnamed-unsigned:1>) D.23702;
      class->blittable = D.23703;
      mono_memory_barrier ();
      class->size_inited = 1;
      class->fields_inited = 1;
      class->setup_fields_called = 1;
      return;
      <D.23695>:
      if (layout == 0) goto <D.23704>; else goto <D.23705>;
      <D.23704>:
      blittable = 0;
      <D.23705>:
      class->setup_fields_called = 1;
      D.23706 = class->generic_container;
      if (D.23706 != 0B) goto <D.23707>; else goto <D.23708>;
      <D.23707>:
      container = class->generic_container;
      goto <D.23709>;
      <D.23708>:
      if (gtd != 0B) goto <D.23710>; else goto <D.23711>;
      <D.23710>:
      container = gtd->generic_container;
      D.23712 = container == 0B;
      D.23713 = (long int) D.23712;
      D.23714 = __builtin_expect (D.23713, 0);
      if (D.23714 != 0) goto <D.23715>; else goto <D.23716>;
      <D.23715>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1567, "container");
      <D.23716>:
      <D.23711>:
      <D.23709>:
      i = 0;
      goto <D.19194>;
      <D.19193>:
      {
        int idx;

        D.23717 = class->field.first;
        i.61 = (unsigned int) i;
        D.23719 = D.23717 + i.61;
        idx = (int) D.23719;
        D.23720 = class->fields;
        D.23721 = (long unsigned int) i;
        D.23722 = D.23721 * 32;
        field = D.23720 + D.23722;
        field->parent = class;
        D.23723 = field->type;
        if (D.23723 == 0B) goto <D.23724>; else goto <D.23725>;
        <D.23724>:
        mono_field_resolve_type (field, &error);
        D.23726 = mono_error_ok (&error);
        if (D.23726 == 0) goto <D.23727>; else goto <D.23728>;
        <D.23727>:
        mono_error_cleanup (&error);
        return;
        <D.23728>:
        D.23723 = field->type;
        if (D.23723 == 0B) goto <D.23729>; else goto <D.23730>;
        <D.23729>:
        D.23731 = field->name;
        D.23732 = mono_type_get_full_name (class);
        monoeg_g_log (0B, 4, "could not resolve %s:%s\n", D.23732, D.23731);
        <D.19176>:
        goto <D.19176>;
        <D.23730>:
        D.23723 = field->type;
        D.23733 = D.23723 == 0B;
        D.23734 = (long int) D.23733;
        D.23735 = __builtin_expect (D.23734, 0);
        if (D.23735 != 0) goto <D.23736>; else goto <D.23737>;
        <D.23736>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1588, "field->type");
        <D.23737>:
        <D.23725>:
        D.23723 = field->type;
        D.23738 = D.23723->attrs;
        D.23739 = (int) D.23738;
        D.23740 = D.23739 & 1536;
        if (D.23740 != 0) goto <D.23741>; else goto <D.23742>;
        <D.23741>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.23746 = "_Deleted";
            D.23747 = MEM[(const unsigned char *)D.23746];
            D.23748 = (int) D.23747;
            D.23749 = *__s2;
            D.23750 = (int) D.23749;
            __result = D.23748 - D.23750;
            {
              D.23751 = __s2_len != 0;
              D.23752 = __result == 0;
              D.23753 = D.23751 & D.23752;
              if (D.23753 != 0) goto <D.23754>; else goto <D.23755>;
              <D.23754>:
              D.23756 = &MEM[(void *)"_Deleted" + 1B];
              D.23757 = *D.23756;
              D.23758 = (int) D.23757;
              D.23759 = __s2 + 1;
              D.23760 = *D.23759;
              D.23761 = (int) D.23760;
              __result = D.23758 - D.23761;
              D.23762 = __s2_len > 1;
              D.23752 = __result == 0;
              D.23763 = D.23762 & D.23752;
              if (D.23763 != 0) goto <D.23764>; else goto <D.23765>;
              <D.23764>:
              D.23766 = &MEM[(void *)"_Deleted" + 2B];
              D.23767 = *D.23766;
              D.23768 = (int) D.23767;
              D.23769 = __s2 + 2;
              D.23770 = *D.23769;
              D.23771 = (int) D.23770;
              __result = D.23768 - D.23771;
              D.23772 = __s2_len > 2;
              D.23752 = __result == 0;
              D.23773 = D.23772 & D.23752;
              if (D.23773 != 0) goto <D.23774>; else goto <D.23775>;
              <D.23774>:
              D.23776 = &MEM[(void *)"_Deleted" + 3B];
              D.23777 = *D.23776;
              D.23778 = (int) D.23777;
              D.23779 = __s2 + 3;
              D.23780 = *D.23779;
              D.23781 = (int) D.23780;
              __result = D.23778 - D.23781;
              <D.23775>:
              <D.23765>:
              <D.23755>:
            }
            D.19184 = __result;
          }
          iftmp.62 = -D.19184;
          goto <D.23782>;
          <D.23745>:
          D.23783 = mono_field_get_name (field);
          iftmp.62 = __builtin_strcmp (D.23783, "_Deleted");
          <D.23782>:
          D.19185 = iftmp.62;
        }
        if (D.19185 == 0) goto <D.23784>; else goto <D.23785>;
        <D.23784>:
        // predicted unlikely by continue predictor.
        goto <D.19186>;
        <D.23785>:
        <D.23742>:
        if (gtd != 0B) goto <D.23786>; else goto <D.23787>;
        <D.23786>:
        {
          struct MonoClassField * gfield;

          D.23788 = gtd->fields;
          D.23721 = (long unsigned int) i;
          D.23722 = D.23721 * 32;
          gfield = D.23788 + D.23722;
          D.23789 = gfield->offset;
          field->offset = D.23789;
        }
        goto <D.23790>;
        <D.23787>:
        if (layout == 16) goto <D.23791>; else goto <D.23792>;
        <D.23791>:
        {
          guint32 offset;

          try
            {
              idx.63 = (unsigned int) idx;
              mono_metadata_field_info (m, idx.63, &offset, 0B, 0B);
              offset.64 = offset;
              offset.65 = (int) offset.64;
              field->offset = offset.65;
              D.23796 = field->offset;
              if (D.23796 == -1) goto <D.23797>; else goto <D.23798>;
              <D.23797>:
              D.23723 = field->type;
              D.23738 = D.23723->attrs;
              D.23739 = (int) D.23738;
              D.23799 = D.23739 & 16;
              if (D.23799 == 0) goto <D.23800>; else goto <D.23801>;
              <D.23800>:
              D.23731 = field->name;
              D.23802 = monoeg_g_strdup_printf ("Missing field layout info for %s", D.23731);
              mono_class_set_failure (class, 7, D.23802);
              goto <D.19189>;
              <D.23801>:
              <D.23798>:
              D.23796 = field->offset;
              if (D.23796 < -1) goto <D.23803>; else goto <D.23804>;
              <D.23803>:
              D.23731 = field->name;
              D.23796 = field->offset;
              D.23805 = monoeg_g_strdup_printf ("Invalid negative field offset %d for %s", D.23796, D.23731);
              mono_class_set_failure (class, 7, D.23805);
              goto <D.19189>;
              <D.23804>:
            }
          finally
            {
              offset = {CLOBBER};
            }
        }
        <D.23792>:
        <D.23790>:
        if (blittable != 0) goto <D.23806>; else goto <D.23807>;
        <D.23806>:
        D.23723 = field->type;
        D.23738 = D.23723->attrs;
        D.23739 = (int) D.23738;
        D.23799 = D.23739 & 16;
        if (D.23799 == 0) goto <D.23808>; else goto <D.23809>;
        <D.23808>:
        D.23723 = field->type;
        D.23813 = BIT_FIELD_REF <*D.23723, 8, 88>;
        D.23814 = D.23813 & 64;
        if (D.23814 != 0) goto <D.23810>; else goto <D.23815>;
        <D.23815>:
        D.23723 = field->type;
        D.23816 = mono_type_is_reference (D.23723);
        if (D.23816 != 0) goto <D.23810>; else goto <D.23811>;
        <D.23810>:
        blittable = 0;
        goto <D.23812>;
        <D.23811>:
        {
          struct MonoClass * field_class;

          D.23723 = field->type;
          field_class = mono_class_from_mono_type (D.23723);
          if (field_class != 0B) goto <D.23817>; else goto <D.23818>;
          <D.23817>:
          mono_class_setup_fields (field_class);
          D.23819 = field_class->exception_type;
          if (D.23819 != 0) goto <D.23820>; else goto <D.23821>;
          <D.23820>:
          mono_class_set_failure (class, 7, 0B);
          goto <D.19189>;
          <D.23821>:
          <D.23818>:
          if (field_class == 0B) goto <D.23822>; else goto <D.23824>;
          <D.23824>:
          D.23825 = BIT_FIELD_REF <*field_class, 8, 256>;
          D.23826 = D.23825 & 32;
          if (D.23826 == 0) goto <D.23822>; else goto <D.23823>;
          <D.23822>:
          blittable = 0;
          <D.23823>:
        }
        <D.23812>:
        <D.23809>:
        <D.23807>:
        D.23827 = BIT_FIELD_REF <*class, 8, 256>;
        D.23828 = D.23827 & 16;
        if (D.23828 != 0) goto <D.23829>; else goto <D.23830>;
        <D.23829>:
        D.23723 = field->type;
        D.23738 = D.23723->attrs;
        D.23739 = (int) D.23738;
        D.23799 = D.23739 & 16;
        if (D.23799 == 0) goto <D.23831>; else goto <D.23832>;
        <D.23831>:
        D.23723 = field->type;
        D.23833 = mono_class_from_mono_type (D.23723);
        class->element_class = D.23833;
        D.23834 = class->element_class;
        class->cast_class = D.23834;
        D.23834 = class->element_class;
        D.23835 = D.23834->blittable;
        blittable = (int) D.23835;
        <D.23832>:
        <D.23830>:
        D.23723 = field->type;
        D.23836 = mono_type_has_exceptions (D.23723);
        if (D.23836 != 0) goto <D.23837>; else goto <D.23838>;
        <D.23837>:
        {
          char * class_name;
          char * type_name;

          class_name = mono_type_get_full_name (class);
          D.23723 = field->type;
          type_name = mono_type_full_name (D.23723);
          mono_class_set_failure (class, 7, 0B);
          D.23731 = field->name;
          monoeg_g_log (0B, 16, "Invalid type %s for instance field %s:%s", type_name, class_name, D.23731);
          monoeg_g_free (class_name);
          monoeg_g_free (type_name);
          goto <D.19189>;
        }
        <D.23838>:
      }
      <D.19186>:
      i = i + 1;
      <D.19194>:
      if (i < top) goto <D.19193>; else goto <D.19189>;
      <D.19189>:
      D.23839 = mono_defaults.string_class;
      if (D.23839 == class) goto <D.23840>; else goto <D.23841>;
      <D.23840>:
      blittable = 0;
      <D.23841>:
      D.23702 = (unsigned char) blittable;
      D.23703 = (<unnamed-unsigned:1>) D.23702;
      class->blittable = D.23703;
      D.23827 = BIT_FIELD_REF <*class, 8, 256>;
      D.23828 = D.23827 & 16;
      if (D.23828 != 0) goto <D.23842>; else goto <D.23843>;
      <D.23842>:
      D.23844 = mono_class_enum_basetype (class);
      if (D.23844 == 0B) goto <D.23845>; else goto <D.23846>;
      <D.23845>:
      mono_class_set_failure (class, 7, 0B);
      return;
      <D.23846>:
      <D.23843>:
      if (explicit_size != 0) goto <D.23847>; else goto <D.23848>;
      <D.23847>:
      real_size.59 = real_size;
      if (real_size.59 != 0) goto <D.23849>; else goto <D.23850>;
      <D.23849>:
      D.23667 = class->instance_size;
      D.23691 = (unsigned int) D.23667;
      real_size.59 = real_size;
      D.23700 = MAX_EXPR <D.23691, real_size.59>;
      D.23701 = (int) D.23700;
      class->instance_size = D.23701;
      <D.23850>:
      <D.23848>:
      D.23851 = class->exception_type;
      if (D.23851 != 0) goto <D.23852>; else goto <D.23853>;
      <D.23852>:
      return;
      <D.23853>:
      mono_class_layout_fields (class);
      D.23827 = BIT_FIELD_REF <*class, 8, 256>;
      D.23854 = D.23827 & 8;
      if (D.23854 != 0) goto <D.23855>; else goto <D.23856>;
      <D.23855>:
      D.23667 = class->instance_size;
      D.23857 = (unsigned int) D.23667;
      D.23858 = D.23857 + 4294967295;
      if (D.23858 > 1048591) goto <D.23859>; else goto <D.23860>;
      <D.23859>:
      mono_class_set_failure (class, 7, 0B);
      <D.23860>:
      <D.23856>:
      mono_memory_barrier ();
      class->fields_inited = 1;
    }
  finally
    {
      error = {CLOBBER};
      real_size = {CLOBBER};
      packing_size = {CLOBBER};
    }
}


mono_class_setup_basic_field_info (struct MonoClass * class)
{
  struct MonoClassField * D.23866;
  struct MonoClass * iftmp.66;
  struct MonoGenericClass * D.23870;
  unsigned int D.23874;
  struct MonoClass * D.23877;
  struct MonoImage * D.23878;
  unsigned char D.23879;
  unsigned char D.23880;
  unsigned char D.23883;
  unsigned char D.23884;
  unsigned int D.23889;
  unsigned int D.23890;
  unsigned int top.67;
  unsigned int D.23892;
  int D.23893;
  void * D.23894;
  long unsigned int D.23895;
  long unsigned int D.23896;
  struct MonoClassField * D.23899;
  struct MonoClassField * D.23900;
  const char * D.23901;
  unsigned int D.23903;
  unsigned int i.68;
  unsigned int D.23905;
  const char * D.23906;
  struct MonoClassField * field;
  struct MonoClass * gtd;
  struct MonoImage * image;
  int i;
  int top;

  D.23866 = class->fields;
  if (D.23866 != 0B) goto <D.23867>; else goto <D.23868>;
  <D.23867>:
  return;
  <D.23868>:
  D.23870 = class->generic_class;
  if (D.23870 != 0B) goto <D.23871>; else goto <D.23872>;
  <D.23871>:
  iftmp.66 = mono_class_get_generic_type_definition (class);
  goto <D.23873>;
  <D.23872>:
  iftmp.66 = 0B;
  <D.23873>:
  gtd = iftmp.66;
  image = class->image;
  D.23874 = class->field.count;
  top = (int) D.23874;
  D.23870 = class->generic_class;
  if (D.23870 != 0B) goto <D.23875>; else goto <D.23876>;
  <D.23875>:
  D.23870 = class->generic_class;
  D.23877 = D.23870->container_class;
  D.23878 = D.23877->image;
  D.23879 = BIT_FIELD_REF <*D.23878, 8, 224>;
  D.23880 = D.23879 & 8;
  if (D.23880 != 0) goto <D.23881>; else goto <D.23882>;
  <D.23881>:
  D.23870 = class->generic_class;
  D.23877 = D.23870->container_class;
  D.23883 = BIT_FIELD_REF <*D.23877, 8, 256>;
  D.23884 = D.23883 & 128;
  if (D.23884 == 0) goto <D.23885>; else goto <D.23886>;
  <D.23885>:
  return;
  <D.23886>:
  <D.23882>:
  <D.23876>:
  if (gtd != 0B) goto <D.23887>; else goto <D.23888>;
  <D.23887>:
  mono_class_setup_basic_field_info (gtd);
  D.23889 = gtd->field.count;
  top = (int) D.23889;
  D.23890 = gtd->field.first;
  class->field.first = D.23890;
  D.23889 = gtd->field.count;
  class->field.count = D.23889;
  <D.23888>:
  top.67 = (unsigned int) top;
  D.23892 = top.67 * 32;
  D.23893 = (int) D.23892;
  D.23894 = mono_class_alloc0 (class, D.23893);
  class->fields = D.23894;
  i = 0;
  goto <D.19157>;
  <D.19156>:
  D.23866 = class->fields;
  D.23895 = (long unsigned int) i;
  D.23896 = D.23895 * 32;
  field = D.23866 + D.23896;
  field->parent = class;
  if (gtd != 0B) goto <D.23897>; else goto <D.23898>;
  <D.23897>:
  D.23899 = gtd->fields;
  D.23895 = (long unsigned int) i;
  D.23896 = D.23895 * 32;
  D.23900 = D.23899 + D.23896;
  D.23901 = mono_field_get_name (D.23900);
  field->name = D.23901;
  goto <D.23902>;
  <D.23898>:
  {
    int idx;
    guint32 name_idx;

    D.23903 = class->field.first;
    i.68 = (unsigned int) i;
    D.23905 = D.23903 + i.68;
    idx = (int) D.23905;
    name_idx = mono_metadata_decode_table_row_col (image, 4, idx, 1);
    D.23906 = mono_metadata_string_heap (image, name_idx);
    field->name = D.23906;
  }
  <D.23902>:
  i = i + 1;
  <D.19157>:
  if (i < top) goto <D.19156>; else goto <D.19158>;
  <D.19158>:
}


mono_class_alloc0 (struct MonoClass * class, int size)
{
  long unsigned int D.23908;
  void * D.23909;
  void * res;

  res = mono_class_alloc (class, size);
  D.23908 = (long unsigned int) size;
  memset (res, 0, D.23908);
  D.23909 = res;
  return D.23909;
}


mono_class_alloc (struct MonoClass * class, int size)
{
  struct MonoGenericClass * D.23911;
  void * D.23914;
  unsigned int size.69;
  struct MonoImageSet * D.23916;
  struct MonoImage * D.23917;

  D.23911 = class->generic_class;
  if (D.23911 != 0B) goto <D.23912>; else goto <D.23913>;
  <D.23912>:
  size.69 = (unsigned int) size;
  D.23911 = class->generic_class;
  D.23916 = D.23911->owner;
  D.23914 = mono_image_set_alloc (D.23916, size.69);
  return D.23914;
  <D.23913>:
  size.69 = (unsigned int) size;
  D.23917 = class->image;
  D.23914 = mono_image_alloc (D.23917, size.69);
  return D.23914;
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.23921;
  int D.23926;
  void * D.23928;
  long unsigned int D.23929;

  D.23921 = __builtin_constant_p (__len);
  if (D.23921 != 0) goto <D.23922>; else goto <D.23923>;
  <D.23922>:
  if (__len == 0) goto <D.23924>; else goto <D.23925>;
  <D.23924>:
  D.23926 = __builtin_constant_p (__ch);
  if (D.23926 == 0) goto <D.23919>; else goto <D.23927>;
  <D.23927>:
  if (__ch != 0) goto <D.23919>; else goto <D.23920>;
  <D.23919>:
  __warn_memset_zero_len ();
  D.23928 = __dest;
  return D.23928;
  <D.23920>:
  <D.23925>:
  <D.23923>:
  D.23929 = __builtin_object_size (__dest, 0);
  D.23928 = __builtin___memset_chk (__dest, __ch, __len, D.23929);
  return D.23928;
}


mono_field_resolve_type (struct MonoClassField * field, struct MonoError * error)
{
  struct MonoClass * iftmp.70;
  struct MonoGenericClass * D.23932;
  long int field.71;
  struct MonoClassField * D.23937;
  long int D.23938;
  long int D.23939;
  long int D.23940;
  struct MonoClassField * D.23943;
  long unsigned int D.23944;
  long unsigned int D.23945;
  int D.23946;
  const char * D.23949;
  struct MonoGenericContext * D.23950;
  struct MonoType * D.23951;
  int D.23952;
  const char * D.23955;
  unsigned int D.23957;
  unsigned int field_idx.72;
  unsigned int D.23959;
  unsigned char D.23960;
  unsigned char D.23961;
  _Bool D.23962;
  long int D.23963;
  long int D.23964;
  struct MonoGenericContainer * D.23967;
  _Bool D.23973;
  long int D.23974;
  long int D.23975;
  unsigned int D.23978;
  int D.23979;
  const char * D.23982;
  const char * sig.73;
  const char * sig.74;
  char D.23985;
  _Bool D.23986;
  long int D.23987;
  long int D.23988;
  const char * D.23991;
  unsigned int D.23992;
  short int D.23993;
  int D.23994;
  struct MonoType * D.23995;
  struct MonoType * D.23996;
  gchar * D.23999;
  struct MonoClass * class;
  struct MonoImage * image;
  struct MonoClass * gtd;
  int field_idx;

  class = field->parent;
  image = class->image;
  D.23932 = class->generic_class;
  if (D.23932 != 0B) goto <D.23933>; else goto <D.23934>;
  <D.23933>:
  iftmp.70 = mono_class_get_generic_type_definition (class);
  goto <D.23935>;
  <D.23934>:
  iftmp.70 = 0B;
  <D.23935>:
  gtd = iftmp.70;
  field.71 = (long int) field;
  D.23937 = class->fields;
  D.23938 = (long int) D.23937;
  D.23939 = field.71 - D.23938;
  D.23940 = D.23939 /[ex] 32;
  field_idx = (int) D.23940;
  mono_error_init (error);
  if (gtd != 0B) goto <D.23941>; else goto <D.23942>;
  <D.23941>:
  {
    struct MonoClassField * gfield;
    struct MonoType * gtype;

    D.23943 = gtd->fields;
    D.23944 = (long unsigned int) field_idx;
    D.23945 = D.23944 * 32;
    gfield = D.23943 + D.23945;
    gtype = mono_field_get_type_checked (gfield, error);
    D.23946 = mono_error_ok (error);
    if (D.23946 == 0) goto <D.23947>; else goto <D.23948>;
    <D.23947>:
    {
      char * err_msg;

      D.23949 = mono_error_get_message (error);
      err_msg = monoeg_g_strdup_printf ("Could not load field %d type due to: %s", field_idx, D.23949);
      mono_class_set_failure (class, 7, err_msg);
      monoeg_g_free (err_msg);
    }
    <D.23948>:
    D.23950 = mono_class_get_context (class);
    D.23951 = mono_class_inflate_generic_type_no_copy (image, gtype, D.23950, error);
    field->type = D.23951;
    D.23952 = mono_error_ok (error);
    if (D.23952 == 0) goto <D.23953>; else goto <D.23954>;
    <D.23953>:
    {
      char * err_msg;

      D.23955 = mono_error_get_message (error);
      err_msg = monoeg_g_strdup_printf ("Could not load field %d type due to: %s", field_idx, D.23955);
      mono_class_set_failure (class, 7, err_msg);
      monoeg_g_free (err_msg);
    }
    <D.23954>:
  }
  goto <D.23956>;
  <D.23942>:
  {
    const char * sig;
    guint32 cols[3];
    struct MonoGenericContainer * container;
    int idx;

    try
      {
        container = 0B;
        D.23957 = class->field.first;
        field_idx.72 = (unsigned int) field_idx;
        D.23959 = D.23957 + field_idx.72;
        idx = (int) D.23959;
        D.23960 = BIT_FIELD_REF <*image, 8, 224>;
        D.23961 = D.23960 & 8;
        D.23962 = D.23961 != 0;
        D.23963 = (long int) D.23962;
        D.23964 = __builtin_expect (D.23963, 0);
        if (D.23964 != 0) goto <D.23965>; else goto <D.23966>;
        <D.23965>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10119, "!image->dynamic");
        <D.23966>:
        D.23967 = class->generic_container;
        if (D.23967 != 0B) goto <D.23968>; else goto <D.23969>;
        <D.23968>:
        container = class->generic_container;
        goto <D.23970>;
        <D.23969>:
        if (gtd != 0B) goto <D.23971>; else goto <D.23972>;
        <D.23971>:
        container = gtd->generic_container;
        D.23973 = container == 0B;
        D.23974 = (long int) D.23973;
        D.23975 = __builtin_expect (D.23974, 0);
        if (D.23975 != 0) goto <D.23976>; else goto <D.23977>;
        <D.23976>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10125, "container");
        <D.23977>:
        <D.23972>:
        <D.23970>:
        mono_metadata_decode_table_row (image, 4, idx, &cols, 3);
        D.23978 = cols[2];
        D.23979 = mono_verifier_verify_field_signature (image, D.23978, 0B);
        if (D.23979 == 0) goto <D.23980>; else goto <D.23981>;
        <D.23980>:
        D.23982 = field->name;
        mono_error_set_type_load_class (error, class, "Could not verify field %s signature", D.23982);
        mono_class_set_failure (class, 7, 0B);
        return;
        <D.23981>:
        D.23978 = cols[2];
        sig.73 = mono_metadata_blob_heap (image, D.23978);
        sig = sig.73;
        sig.74 = sig;
        mono_metadata_decode_value (sig.74, &sig);
        sig.74 = sig;
        D.23985 = *sig.74;
        D.23986 = D.23985 != 6;
        D.23987 = (long int) D.23986;
        D.23988 = __builtin_expect (D.23987, 0);
        if (D.23988 != 0) goto <D.23989>; else goto <D.23990>;
        <D.23989>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10141, "*sig == 0x06");
        <D.23990>:
        sig.74 = sig;
        D.23991 = sig.74 + 1;
        D.23992 = cols[0];
        D.23993 = (short int) D.23992;
        D.23994 = (int) D.23993;
        D.23995 = mono_metadata_parse_type_full (image, container, 5, D.23994, D.23991, &sig);
        field->type = D.23995;
        D.23996 = field->type;
        if (D.23996 == 0B) goto <D.23997>; else goto <D.23998>;
        <D.23997>:
        D.23982 = field->name;
        D.23999 = monoeg_g_strdup_printf ("Could not load field %s type", D.23982);
        mono_class_set_failure_from_loader_error (class, error, D.23999);
        <D.23998>:
      }
    finally
      {
        sig = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.23956>:
}


mono_class_inflate_generic_type_no_copy (struct MonoImage * image, struct MonoType * type, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.24005;
  struct MonoType * D.24008;
  long unsigned int D.24011;
  long unsigned int D.24012;
  struct MonoType * inflated;

  inflated = 0B;
  mono_error_init (error);
  if (context != 0B) goto <D.24003>; else goto <D.24004>;
  <D.24003>:
  inflated = inflate_generic_type (image, type, context, error);
  D.24005 = mono_error_ok (error);
  if (D.24005 == 0) goto <D.24006>; else goto <D.24007>;
  <D.24006>:
  D.24008 = 0B;
  return D.24008;
  <D.24007>:
  <D.24004>:
  if (inflated == 0B) goto <D.24009>; else goto <D.24010>;
  <D.24009>:
  D.24008 = type;
  return D.24008;
  <D.24010>:
  D.24011 = mono_stats.inflated_type_count;
  D.24012 = D.24011 + 1;
  mono_stats.inflated_type_count = D.24012;
  D.24008 = inflated;
  return D.24008;
}


mono_type_has_exceptions (struct MonoType * type)
{
  unsigned char D.24014;
  int D.24015;
  gboolean D.24016;
  struct MonoClass * D.24017;
  unsigned char D.24018;
  struct MonoArrayType * D.24019;
  struct MonoClass * D.24020;
  unsigned char D.24021;
  struct MonoGenericClass * D.24022;
  struct MonoClass * D.24023;
  unsigned char D.24024;

  D.24014 = type->type;
  D.24015 = (int) D.24014;
  switch (D.24015) <default: <D.24025>, case 17: <D.19133>, case 18: <D.19132>, case 20: <D.19135>, case 21: <D.19136>, case 29: <D.19134>>
  <D.19132>:
  <D.19133>:
  <D.19134>:
  D.24017 = type->data.klass;
  D.24018 = D.24017->exception_type;
  D.24016 = (gboolean) D.24018;
  return D.24016;
  <D.19135>:
  D.24019 = type->data.array;
  D.24020 = D.24019->eklass;
  D.24021 = D.24020->exception_type;
  D.24016 = (gboolean) D.24021;
  return D.24016;
  <D.19136>:
  D.24022 = type->data.generic_class;
  D.24023 = mono_generic_class_get_class (D.24022);
  D.24024 = D.24023->exception_type;
  D.24016 = (gboolean) D.24024;
  return D.24016;
  <D.24025>:
  D.24016 = 0;
  return D.24016;
}


mono_memory_barrier ()
{
  __sync_synchronize ();
}


mono_type_get_basic_type_from_generic (struct MonoType * type)
{
  unsigned char D.24027;
  unsigned char D.24028;
  unsigned char D.24031;
  _Bool D.24032;
  _Bool D.24033;
  _Bool D.24034;
  struct MonoType * D.24037;
  struct MonoClass * D.24038;

  D.24027 = BIT_FIELD_REF <*type, 8, 88>;
  D.24028 = D.24027 & 64;
  if (D.24028 == 0) goto <D.24029>; else goto <D.24030>;
  <D.24029>:
  D.24031 = type->type;
  D.24032 = D.24031 == 19;
  D.24033 = D.24031 == 30;
  D.24034 = D.24032 | D.24033;
  if (D.24034 != 0) goto <D.24035>; else goto <D.24036>;
  <D.24035>:
  D.24038 = mono_defaults.object_class;
  D.24037 = &D.24038->byval_arg;
  return D.24037;
  <D.24036>:
  <D.24030>:
  D.24037 = type;
  return D.24037;
}


mono_class_layout_fields (struct MonoClass * class)
{
  unsigned int D.24040;
  unsigned int D.24041;
  unsigned char D.24044;
  unsigned char D.24045;
  struct MonoClassField * D.24048;
  long unsigned int D.24049;
  long unsigned int D.24050;
  struct MonoType * D.24051;
  short unsigned int D.24052;
  int D.24053;
  int D.24054;
  int D.24060;
  int D.24062;
  unsigned char D.24064;
  struct MonoImage * D.24066;
  struct MonoImage * D.24067;
  int D.24068;
  struct MonoClass * D.24070;
  int D.24071;
  int D.24077;
  int D.24079;
  unsigned char D.24081;
  int D.24083;
  struct MonoClass * D.24085;
  int D.24086;
  int D.24090;
  int D.24092;
  unsigned char D.24094;
  int D.24096;
  struct MonoClass * D.24098;
  int D.24099;
  struct MonoClass * D.24108;
  unsigned char D.24111;
  int D.24114;
  int D.24116;
  int D.19240;
  int iftmp.75;
  int D.19239;
  const char[9] * D.24122;
  unsigned char D.24123;
  int D.24124;
  unsigned char D.24125;
  int D.24126;
  _Bool D.24127;
  _Bool D.24128;
  _Bool D.24129;
  const unsigned char * D.24132;
  unsigned char D.24133;
  int D.24134;
  const unsigned char * D.24135;
  unsigned char D.24136;
  int D.24137;
  _Bool D.24138;
  _Bool D.24139;
  const unsigned char * D.24142;
  unsigned char D.24143;
  int D.24144;
  const unsigned char * D.24145;
  unsigned char D.24146;
  int D.24147;
  _Bool D.24148;
  _Bool D.24149;
  const unsigned char * D.24152;
  unsigned char D.24153;
  int D.24154;
  const unsigned char * D.24155;
  unsigned char D.24156;
  int D.24157;
  const char * D.24159;
  int D.24170;
  int D.24172;
  unsigned char D.24174;
  int D.24176;
  struct MonoClass * D.24178;
  int D.24179;
  int D.24186;
  int D.19250;
  int iftmp.76;
  int D.19249;
  const char[10] * D.24192;
  unsigned char D.24193;
  int D.24194;
  unsigned char D.24195;
  int D.24196;
  _Bool D.24197;
  _Bool D.24198;
  _Bool D.24199;
  const unsigned char * D.24202;
  unsigned char D.24203;
  int D.24204;
  const unsigned char * D.24205;
  unsigned char D.24206;
  int D.24207;
  _Bool D.24208;
  _Bool D.24209;
  const unsigned char * D.24212;
  unsigned char D.24213;
  int D.24214;
  const unsigned char * D.24215;
  unsigned char D.24216;
  int D.24217;
  _Bool D.24218;
  _Bool D.24219;
  const unsigned char * D.24222;
  unsigned char D.24223;
  int D.24224;
  const unsigned char * D.24225;
  unsigned char D.24226;
  int D.24227;
  const char * D.24229;
  int D.24232;
  int iftmp.77;
  unsigned char D.24234;
  unsigned char D.24235;
  <unnamed-unsigned:4> D.24238;
  int D.24239;
  int align.78;
  int D.24245;
  int D.24247;
  int D.24250;
  struct MonoClass * D.24252;
  int D.24253;
  unsigned int align.79;
  unsigned int D.24255;
  int align.80;
  unsigned char D.24257;
  int D.24258;
  int D.24259;
  unsigned char D.24260;
  int real_size.81;
  int D.24264;
  int D.24265;
  int D.24266;
  int D.24267;
  int D.24268;
  int iftmp.82;
  unsigned char D.24272;
  unsigned char D.24273;
  _Bool D.24276;
  long int D.24277;
  long int D.24278;
  unsigned int D.24281;
  unsigned int D.24282;
  unsigned int D.24283;
  int D.24284;
  int D.24285;
  int D.24286;
  int D.24289;
  int D.24290;
  int D.24291;
  int D.19270;
  int iftmp.83;
  int D.19269;
  unsigned char D.24297;
  int D.24298;
  _Bool D.24299;
  _Bool D.24300;
  _Bool D.24301;
  const unsigned char * D.24304;
  unsigned char D.24305;
  int D.24306;
  _Bool D.24307;
  _Bool D.24308;
  const unsigned char * D.24311;
  unsigned char D.24312;
  int D.24313;
  _Bool D.24314;
  _Bool D.24315;
  const unsigned char * D.24318;
  unsigned char D.24319;
  int D.24320;
  const char * D.24322;
  int D.24327;
  int iftmp.84;
  int align.85;
  int D.24333;
  unsigned char D.24334;
  unsigned int D.24335;
  unsigned int D.24336;
  int D.24337;
  int D.24340;
  int D.24342;
  struct MonoClass * D.24344;
  int D.24345;
  long unsigned int D.24346;
  long unsigned int D.24347;
  unsigned int D.24350;
  unsigned int D.24356;
  long unsigned int D.24359;
  long unsigned int D.24360;
  long unsigned int D.24361;
  long unsigned int D.24362;
  unsigned char D.24363;
  unsigned int D.24364;
  unsigned int D.24365;
  int D.19286;
  int iftmp.86;
  int D.19285;
  unsigned char D.24373;
  int D.24374;
  _Bool D.24375;
  _Bool D.24376;
  _Bool D.24377;
  const unsigned char * D.24380;
  unsigned char D.24381;
  int D.24382;
  _Bool D.24383;
  _Bool D.24384;
  const unsigned char * D.24387;
  unsigned char D.24388;
  int D.24389;
  _Bool D.24390;
  _Bool D.24391;
  const unsigned char * D.24394;
  unsigned char D.24395;
  int D.24396;
  const char * D.24398;
  int D.24401;
  int D.24404;
  int D.24405;
  int align.87;
  int D.24407;
  int D.24408;
  int D.24409;
  int D.24410;
  unsigned int D.24411;
  int D.24412;
  int i;
  const int top;
  guint32 layout;
  guint32 pass;
  guint32 passes;
  guint32 real_size;
  gboolean gc_aware_layout;
  struct MonoClassField * field;

  D.24040 = class->field.count;
  top = (const int) D.24040;
  D.24041 = class->flags;
  layout = D.24041 & 24;
  gc_aware_layout = 0;
  if (layout == 0) goto <D.24042>; else goto <D.24043>;
  <D.24042>:
  D.24044 = BIT_FIELD_REF <*class, 8, 256>;
  D.24045 = D.24044 & 8;
  if (D.24045 == 0) goto <D.24046>; else goto <D.24047>;
  <D.24046>:
  gc_aware_layout = 1;
  <D.24047>:
  <D.24043>:
  i = 0;
  goto <D.19217>;
  <D.19216>:
  {
    struct MonoType * ftype;

    D.24048 = class->fields;
    D.24049 = (long unsigned int) i;
    D.24050 = D.24049 * 32;
    field = D.24048 + D.24050;
    D.24051 = field->type;
    D.24052 = D.24051->attrs;
    D.24053 = (int) D.24052;
    D.24054 = D.24053 & 16;
    if (D.24054 == 0) goto <D.24055>; else goto <D.24056>;
    <D.24055>:
    D.24051 = field->type;
    ftype = mono_type_get_underlying_type (D.24051);
    ftype = mono_type_get_basic_type_from_generic (ftype);
    D.24060 = mono_type_is_reference (ftype);
    if (D.24060 != 0) goto <D.24057>; else goto <D.24061>;
    <D.24061>:
    D.24062 = mono_gc_is_moving ();
    if (D.24062 == 0) goto <D.24063>; else goto <D.24058>;
    <D.24063>:
    D.24064 = ftype->type;
    if (D.24064 == 25) goto <D.24065>; else goto <D.24058>;
    <D.24065>:
    D.24066 = class->image;
    D.24067 = mono_defaults.corlib;
    if (D.24066 == D.24067) goto <D.24057>; else goto <D.24058>;
    <D.24058>:
    D.24068 = mono_type_is_struct (ftype);
    if (D.24068 != 0) goto <D.24069>; else goto <D.24059>;
    <D.24069>:
    D.24070 = mono_class_from_mono_type (ftype);
    D.24071 = mono_class_has_references (D.24070);
    if (D.24071 != 0) goto <D.24057>; else goto <D.24059>;
    <D.24057>:
    class->has_references = 1;
    <D.24059>:
    <D.24056>:
  }
  i = i + 1;
  <D.19217>:
  if (i < top) goto <D.19216>; else goto <D.19218>;
  <D.19218>:
  i = 0;
  goto <D.19221>;
  <D.19220>:
  {
    struct MonoType * ftype;

    D.24048 = class->fields;
    D.24049 = (long unsigned int) i;
    D.24050 = D.24049 * 32;
    field = D.24048 + D.24050;
    D.24051 = field->type;
    D.24052 = D.24051->attrs;
    D.24053 = (int) D.24052;
    D.24054 = D.24053 & 16;
    if (D.24054 != 0) goto <D.24072>; else goto <D.24073>;
    <D.24072>:
    D.24051 = field->type;
    ftype = mono_type_get_underlying_type (D.24051);
    ftype = mono_type_get_basic_type_from_generic (ftype);
    D.24077 = mono_type_is_reference (ftype);
    if (D.24077 != 0) goto <D.24074>; else goto <D.24078>;
    <D.24078>:
    D.24079 = mono_gc_is_moving ();
    if (D.24079 == 0) goto <D.24080>; else goto <D.24075>;
    <D.24080>:
    D.24081 = ftype->type;
    if (D.24081 == 25) goto <D.24082>; else goto <D.24075>;
    <D.24082>:
    D.24066 = class->image;
    D.24067 = mono_defaults.corlib;
    if (D.24066 == D.24067) goto <D.24074>; else goto <D.24075>;
    <D.24075>:
    D.24083 = mono_type_is_struct (ftype);
    if (D.24083 != 0) goto <D.24084>; else goto <D.24076>;
    <D.24084>:
    D.24085 = mono_class_from_mono_type (ftype);
    D.24086 = mono_class_has_references (D.24085);
    if (D.24086 != 0) goto <D.24074>; else goto <D.24076>;
    <D.24074>:
    class->has_static_refs = 1;
    <D.24076>:
    <D.24073>:
  }
  i = i + 1;
  <D.19221>:
  if (i < top) goto <D.19220>; else goto <D.19222>;
  <D.19222>:
  i = 0;
  goto <D.19225>;
  <D.19224>:
  {
    struct MonoType * ftype;

    D.24048 = class->fields;
    D.24049 = (long unsigned int) i;
    D.24050 = D.24049 * 32;
    field = D.24048 + D.24050;
    D.24051 = field->type;
    ftype = mono_type_get_underlying_type (D.24051);
    ftype = mono_type_get_basic_type_from_generic (ftype);
    D.24090 = mono_type_is_reference (ftype);
    if (D.24090 != 0) goto <D.24087>; else goto <D.24091>;
    <D.24091>:
    D.24092 = mono_gc_is_moving ();
    if (D.24092 == 0) goto <D.24093>; else goto <D.24088>;
    <D.24093>:
    D.24094 = ftype->type;
    if (D.24094 == 25) goto <D.24095>; else goto <D.24088>;
    <D.24095>:
    D.24066 = class->image;
    D.24067 = mono_defaults.corlib;
    if (D.24066 == D.24067) goto <D.24087>; else goto <D.24088>;
    <D.24088>:
    D.24096 = mono_type_is_struct (ftype);
    if (D.24096 != 0) goto <D.24097>; else goto <D.24089>;
    <D.24097>:
    D.24098 = mono_class_from_mono_type (ftype);
    D.24099 = mono_class_has_references (D.24098);
    if (D.24099 != 0) goto <D.24087>; else goto <D.24089>;
    <D.24087>:
    D.24051 = field->type;
    D.24052 = D.24051->attrs;
    D.24053 = (int) D.24052;
    D.24054 = D.24053 & 16;
    if (D.24054 != 0) goto <D.24100>; else goto <D.24101>;
    <D.24100>:
    class->has_static_refs = 1;
    goto <D.24102>;
    <D.24101>:
    class->has_references = 1;
    <D.24102>:
    <D.24089>:
  }
  i = i + 1;
  <D.19225>:
  if (i < top) goto <D.19224>; else goto <D.19226>;
  <D.19226>:
  switch (layout) <default: <D.24353>, case 0: <D.19227>, case 8: <D.19228>, case 16: <D.19258>>
  <D.19227>:
  <D.19228>:
  if (gc_aware_layout != 0) goto <D.24103>; else goto <D.24104>;
  <D.24103>:
  passes = 2;
  goto <D.24105>;
  <D.24104>:
  passes = 1;
  <D.24105>:
  if (layout != 0) goto <D.24106>; else goto <D.24107>;
  <D.24106>:
  passes = 1;
  <D.24107>:
  D.24108 = class->parent;
  if (D.24108 != 0B) goto <D.24109>; else goto <D.24110>;
  <D.24109>:
  D.24108 = class->parent;
  mono_class_setup_fields (D.24108);
  D.24108 = class->parent;
  D.24111 = D.24108->exception_type;
  if (D.24111 != 0) goto <D.24112>; else goto <D.24113>;
  <D.24112>:
  mono_class_set_failure (class, 7, 0B);
  return;
  <D.24113>:
  D.24108 = class->parent;
  D.24114 = D.24108->instance_size;
  real_size = (guint32) D.24114;
  goto <D.24115>;
  <D.24110>:
  real_size = 16;
  <D.24115>:
  pass = 0;
  goto <D.19255>;
  <D.19254>:
  i = 0;
  goto <D.19252>;
  <D.19251>:
  {
    gint32 align;
    guint32 size;
    struct MonoType * ftype;

    try
      {
        D.24048 = class->fields;
        D.24049 = (long unsigned int) i;
        D.24050 = D.24049 * 32;
        field = D.24048 + D.24050;
        D.24051 = field->type;
        D.24052 = D.24051->attrs;
        D.24053 = (int) D.24052;
        D.24116 = D.24053 & 1536;
        if (D.24116 != 0) goto <D.24117>; else goto <D.24118>;
        <D.24117>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.24122 = "_Deleted";
            D.24123 = MEM[(const unsigned char *)D.24122];
            D.24124 = (int) D.24123;
            D.24125 = *__s2;
            D.24126 = (int) D.24125;
            __result = D.24124 - D.24126;
            {
              D.24127 = __s2_len != 0;
              D.24128 = __result == 0;
              D.24129 = D.24127 & D.24128;
              if (D.24129 != 0) goto <D.24130>; else goto <D.24131>;
              <D.24130>:
              D.24132 = &MEM[(void *)"_Deleted" + 1B];
              D.24133 = *D.24132;
              D.24134 = (int) D.24133;
              D.24135 = __s2 + 1;
              D.24136 = *D.24135;
              D.24137 = (int) D.24136;
              __result = D.24134 - D.24137;
              D.24138 = __s2_len > 1;
              D.24128 = __result == 0;
              D.24139 = D.24138 & D.24128;
              if (D.24139 != 0) goto <D.24140>; else goto <D.24141>;
              <D.24140>:
              D.24142 = &MEM[(void *)"_Deleted" + 2B];
              D.24143 = *D.24142;
              D.24144 = (int) D.24143;
              D.24145 = __s2 + 2;
              D.24146 = *D.24145;
              D.24147 = (int) D.24146;
              __result = D.24144 - D.24147;
              D.24148 = __s2_len > 2;
              D.24128 = __result == 0;
              D.24149 = D.24148 & D.24128;
              if (D.24149 != 0) goto <D.24150>; else goto <D.24151>;
              <D.24150>:
              D.24152 = &MEM[(void *)"_Deleted" + 3B];
              D.24153 = *D.24152;
              D.24154 = (int) D.24153;
              D.24155 = __s2 + 3;
              D.24156 = *D.24155;
              D.24157 = (int) D.24156;
              __result = D.24154 - D.24157;
              <D.24151>:
              <D.24141>:
              <D.24131>:
            }
            D.19239 = __result;
          }
          iftmp.75 = -D.19239;
          goto <D.24158>;
          <D.24121>:
          D.24159 = mono_field_get_name (field);
          iftmp.75 = __builtin_strcmp (D.24159, "_Deleted");
          <D.24158>:
          D.19240 = iftmp.75;
        }
        if (D.19240 == 0) goto <D.24160>; else goto <D.24161>;
        <D.24160>:
        // predicted unlikely by continue predictor.
        goto <D.19241>;
        <D.24161>:
        <D.24118>:
        D.24051 = field->type;
        D.24052 = D.24051->attrs;
        D.24053 = (int) D.24052;
        D.24054 = D.24053 & 16;
        if (D.24054 != 0) goto <D.24162>; else goto <D.24163>;
        <D.24162>:
        // predicted unlikely by continue predictor.
        goto <D.19241>;
        <D.24163>:
        D.24051 = field->type;
        ftype = mono_type_get_underlying_type (D.24051);
        ftype = mono_type_get_basic_type_from_generic (ftype);
        if (gc_aware_layout != 0) goto <D.24164>; else goto <D.24165>;
        <D.24164>:
        D.24170 = mono_type_is_reference (ftype);
        if (D.24170 != 0) goto <D.24166>; else goto <D.24171>;
        <D.24171>:
        D.24172 = mono_gc_is_moving ();
        if (D.24172 == 0) goto <D.24173>; else goto <D.24167>;
        <D.24173>:
        D.24174 = ftype->type;
        if (D.24174 == 25) goto <D.24175>; else goto <D.24167>;
        <D.24175>:
        D.24066 = class->image;
        D.24067 = mono_defaults.corlib;
        if (D.24066 == D.24067) goto <D.24166>; else goto <D.24167>;
        <D.24167>:
        D.24176 = mono_type_is_struct (ftype);
        if (D.24176 != 0) goto <D.24177>; else goto <D.24168>;
        <D.24177>:
        D.24178 = mono_class_from_mono_type (ftype);
        D.24179 = mono_class_has_references (D.24178);
        if (D.24179 != 0) goto <D.24166>; else goto <D.24168>;
        <D.24166>:
        if (pass == 1) goto <D.24180>; else goto <D.24181>;
        <D.24180>:
        // predicted unlikely by continue predictor.
        goto <D.19241>;
        <D.24181>:
        goto <D.24169>;
        <D.24168>:
        if (pass == 0) goto <D.24182>; else goto <D.24183>;
        <D.24182>:
        // predicted unlikely by continue predictor.
        goto <D.19241>;
        <D.24183>:
        <D.24169>:
        <D.24165>:
        if (top == 1) goto <D.24184>; else goto <D.24185>;
        <D.24184>:
        D.24186 = class->instance_size;
        if (D.24186 == 16) goto <D.24187>; else goto <D.24188>;
        <D.24187>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.24192 = "$PRIVATE$";
            D.24193 = MEM[(const unsigned char *)D.24192];
            D.24194 = (int) D.24193;
            D.24195 = *__s2;
            D.24196 = (int) D.24195;
            __result = D.24194 - D.24196;
            {
              D.24197 = __s2_len != 0;
              D.24198 = __result == 0;
              D.24199 = D.24197 & D.24198;
              if (D.24199 != 0) goto <D.24200>; else goto <D.24201>;
              <D.24200>:
              D.24202 = &MEM[(void *)"$PRIVATE$" + 1B];
              D.24203 = *D.24202;
              D.24204 = (int) D.24203;
              D.24205 = __s2 + 1;
              D.24206 = *D.24205;
              D.24207 = (int) D.24206;
              __result = D.24204 - D.24207;
              D.24208 = __s2_len > 1;
              D.24198 = __result == 0;
              D.24209 = D.24208 & D.24198;
              if (D.24209 != 0) goto <D.24210>; else goto <D.24211>;
              <D.24210>:
              D.24212 = &MEM[(void *)"$PRIVATE$" + 2B];
              D.24213 = *D.24212;
              D.24214 = (int) D.24213;
              D.24215 = __s2 + 2;
              D.24216 = *D.24215;
              D.24217 = (int) D.24216;
              __result = D.24214 - D.24217;
              D.24218 = __s2_len > 2;
              D.24198 = __result == 0;
              D.24219 = D.24218 & D.24198;
              if (D.24219 != 0) goto <D.24220>; else goto <D.24221>;
              <D.24220>:
              D.24222 = &MEM[(void *)"$PRIVATE$" + 3B];
              D.24223 = *D.24222;
              D.24224 = (int) D.24223;
              D.24225 = __s2 + 3;
              D.24226 = *D.24225;
              D.24227 = (int) D.24226;
              __result = D.24224 - D.24227;
              <D.24221>:
              <D.24211>:
              <D.24201>:
            }
            D.19249 = __result;
          }
          iftmp.76 = -D.19249;
          goto <D.24228>;
          <D.24191>:
          D.24229 = mono_field_get_name (field);
          iftmp.76 = __builtin_strcmp (D.24229, "$PRIVATE$");
          <D.24228>:
          D.19250 = iftmp.76;
        }
        if (D.19250 == 0) goto <D.24230>; else goto <D.24231>;
        <D.24230>:
        // predicted unlikely by continue predictor.
        goto <D.19241>;
        <D.24231>:
        <D.24188>:
        <D.24185>:
        D.24051 = field->type;
        D.24232 = mono_type_size (D.24051, &align);
        size = (guint32) D.24232;
        D.24234 = BIT_FIELD_REF <*class, 8, 272>;
        D.24235 = D.24234 & 15;
        if (D.24235 != 0) goto <D.24236>; else goto <D.24237>;
        <D.24236>:
        D.24238 = class->packing_size;
        D.24239 = (int) D.24238;
        align.78 = align;
        iftmp.77 = MIN_EXPR <D.24239, align.78>;
        goto <D.24241>;
        <D.24237>:
        iftmp.77 = align;
        <D.24241>:
        align = iftmp.77;
        D.24245 = mono_type_is_reference (ftype);
        if (D.24245 != 0) goto <D.24242>; else goto <D.24246>;
        <D.24246>:
        D.24247 = mono_gc_is_moving ();
        if (D.24247 == 0) goto <D.24248>; else goto <D.24243>;
        <D.24248>:
        D.24174 = ftype->type;
        if (D.24174 == 25) goto <D.24249>; else goto <D.24243>;
        <D.24249>:
        D.24066 = class->image;
        D.24067 = mono_defaults.corlib;
        if (D.24066 == D.24067) goto <D.24242>; else goto <D.24243>;
        <D.24243>:
        D.24250 = mono_type_is_struct (ftype);
        if (D.24250 != 0) goto <D.24251>; else goto <D.24244>;
        <D.24251>:
        D.24252 = mono_class_from_mono_type (ftype);
        D.24253 = mono_class_has_references (D.24252);
        if (D.24253 != 0) goto <D.24242>; else goto <D.24244>;
        <D.24242>:
        align.78 = align;
        align.79 = (unsigned int) align.78;
        D.24255 = MAX_EXPR <align.79, 8>;
        align.80 = (int) D.24255;
        align = align.80;
        <D.24244>:
        D.24257 = class->min_align;
        D.24258 = (int) D.24257;
        align.78 = align;
        D.24259 = MAX_EXPR <D.24258, align.78>;
        D.24260 = (unsigned char) D.24259;
        class->min_align = D.24260;
        real_size.81 = (int) real_size;
        field->offset = real_size.81;
        align.78 = align;
        if (align.78 != 0) goto <D.24262>; else goto <D.24263>;
        <D.24262>:
        D.24264 = field->offset;
        align.78 = align;
        D.24265 = align.78 + -1;
        D.24266 = D.24264 + D.24265;
        field->offset = D.24266;
        D.24264 = field->offset;
        align.78 = align;
        D.24267 = -align.78;
        D.24268 = D.24264 & D.24267;
        field->offset = D.24268;
        <D.24263>:
        D.24066 = class->image;
        D.24272 = BIT_FIELD_REF <*D.24066, 8, 224>;
        D.24273 = D.24272 & 8;
        if (D.24273 == 0) goto <D.24274>; else goto <D.24270>;
        <D.24274>:
        D.24264 = field->offset;
        if (D.24264 <= 0) goto <D.24275>; else goto <D.24270>;
        <D.24275>:
        iftmp.82 = 1;
        goto <D.24271>;
        <D.24270>:
        iftmp.82 = 0;
        <D.24271>:
        D.24276 = iftmp.82 != 0;
        D.24277 = (long int) D.24276;
        D.24278 = __builtin_expect (D.24277, 0);
        if (D.24278 != 0) goto <D.24279>; else goto <D.24280>;
        <D.24279>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 1894, "class->image->dynamic || field->offset > 0");
        <D.24280>:
        D.24264 = field->offset;
        D.24281 = (unsigned int) D.24264;
        real_size = D.24281 + size;
      }
    finally
      {
        align = {CLOBBER};
      }
  }
  <D.19241>:
  i = i + 1;
  <D.19252>:
  if (i < top) goto <D.19251>; else goto <D.19253>;
  <D.19253>:
  D.24186 = class->instance_size;
  D.24282 = (unsigned int) D.24186;
  D.24283 = MAX_EXPR <D.24282, real_size>;
  D.24284 = (int) D.24283;
  class->instance_size = D.24284;
  D.24186 = class->instance_size;
  D.24257 = class->min_align;
  D.24258 = (int) D.24257;
  D.24285 = D.24258 + -1;
  D.24286 = D.24186 & D.24285;
  if (D.24286 != 0) goto <D.24287>; else goto <D.24288>;
  <D.24287>:
  D.24186 = class->instance_size;
  D.24257 = class->min_align;
  D.24258 = (int) D.24257;
  D.24285 = D.24258 + -1;
  D.24289 = D.24186 + D.24285;
  class->instance_size = D.24289;
  D.24186 = class->instance_size;
  D.24257 = class->min_align;
  D.24258 = (int) D.24257;
  D.24290 = -D.24258;
  D.24291 = D.24186 & D.24290;
  class->instance_size = D.24291;
  <D.24288>:
  pass = pass + 1;
  <D.19255>:
  if (pass < passes) goto <D.19254>; else goto <D.19256>;
  <D.19256>:
  goto <D.19257>;
  <D.19258>:
  real_size = 0;
  i = 0;
  goto <D.19273>;
  <D.19272>:
  {
    gint32 align;
    guint32 size;
    struct MonoType * ftype;

    try
      {
        D.24048 = class->fields;
        D.24049 = (long unsigned int) i;
        D.24050 = D.24049 * 32;
        field = D.24048 + D.24050;
        D.24051 = field->type;
        D.24052 = D.24051->attrs;
        D.24053 = (int) D.24052;
        D.24116 = D.24053 & 1536;
        if (D.24116 != 0) goto <D.24292>; else goto <D.24293>;
        <D.24292>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.24122 = "_Deleted";
            D.24123 = MEM[(const unsigned char *)D.24122];
            D.24124 = (int) D.24123;
            D.24297 = *__s2;
            D.24298 = (int) D.24297;
            __result = D.24124 - D.24298;
            {
              D.24299 = __s2_len != 0;
              D.24300 = __result == 0;
              D.24301 = D.24299 & D.24300;
              if (D.24301 != 0) goto <D.24302>; else goto <D.24303>;
              <D.24302>:
              D.24132 = &MEM[(void *)"_Deleted" + 1B];
              D.24133 = *D.24132;
              D.24134 = (int) D.24133;
              D.24304 = __s2 + 1;
              D.24305 = *D.24304;
              D.24306 = (int) D.24305;
              __result = D.24134 - D.24306;
              D.24307 = __s2_len > 1;
              D.24300 = __result == 0;
              D.24308 = D.24307 & D.24300;
              if (D.24308 != 0) goto <D.24309>; else goto <D.24310>;
              <D.24309>:
              D.24142 = &MEM[(void *)"_Deleted" + 2B];
              D.24143 = *D.24142;
              D.24144 = (int) D.24143;
              D.24311 = __s2 + 2;
              D.24312 = *D.24311;
              D.24313 = (int) D.24312;
              __result = D.24144 - D.24313;
              D.24314 = __s2_len > 2;
              D.24300 = __result == 0;
              D.24315 = D.24314 & D.24300;
              if (D.24315 != 0) goto <D.24316>; else goto <D.24317>;
              <D.24316>:
              D.24152 = &MEM[(void *)"_Deleted" + 3B];
              D.24153 = *D.24152;
              D.24154 = (int) D.24153;
              D.24318 = __s2 + 3;
              D.24319 = *D.24318;
              D.24320 = (int) D.24319;
              __result = D.24154 - D.24320;
              <D.24317>:
              <D.24310>:
              <D.24303>:
            }
            D.19269 = __result;
          }
          iftmp.83 = -D.19269;
          goto <D.24321>;
          <D.24296>:
          D.24322 = mono_field_get_name (field);
          iftmp.83 = __builtin_strcmp (D.24322, "_Deleted");
          <D.24321>:
          D.19270 = iftmp.83;
        }
        if (D.19270 == 0) goto <D.24323>; else goto <D.24324>;
        <D.24323>:
        // predicted unlikely by continue predictor.
        goto <D.19271>;
        <D.24324>:
        <D.24293>:
        D.24051 = field->type;
        D.24052 = D.24051->attrs;
        D.24053 = (int) D.24052;
        D.24054 = D.24053 & 16;
        if (D.24054 != 0) goto <D.24325>; else goto <D.24326>;
        <D.24325>:
        // predicted unlikely by continue predictor.
        goto <D.19271>;
        <D.24326>:
        D.24051 = field->type;
        D.24327 = mono_type_size (D.24051, &align);
        size = (guint32) D.24327;
        D.24234 = BIT_FIELD_REF <*class, 8, 272>;
        D.24235 = D.24234 & 15;
        if (D.24235 != 0) goto <D.24329>; else goto <D.24330>;
        <D.24329>:
        D.24238 = class->packing_size;
        D.24239 = (int) D.24238;
        align.85 = align;
        iftmp.84 = MIN_EXPR <D.24239, align.85>;
        goto <D.24332>;
        <D.24330>:
        iftmp.84 = align;
        <D.24332>:
        align = iftmp.84;
        D.24257 = class->min_align;
        D.24258 = (int) D.24257;
        align.85 = align;
        D.24333 = MAX_EXPR <D.24258, align.85>;
        D.24334 = (unsigned char) D.24333;
        class->min_align = D.24334;
        D.24264 = field->offset;
        D.24335 = (unsigned int) D.24264;
        D.24336 = D.24335 + 16;
        D.24337 = (int) D.24336;
        field->offset = D.24337;
        D.24051 = field->type;
        ftype = mono_type_get_underlying_type (D.24051);
        ftype = mono_type_get_basic_type_from_generic (ftype);
        D.24340 = mono_type_is_reference (ftype);
        if (D.24340 != 0) goto <D.24338>; else goto <D.24341>;
        <D.24341>:
        D.24342 = mono_type_is_struct (ftype);
        if (D.24342 != 0) goto <D.24343>; else goto <D.24339>;
        <D.24343>:
        D.24344 = mono_class_from_mono_type (ftype);
        D.24345 = mono_class_has_references (D.24344);
        if (D.24345 != 0) goto <D.24338>; else goto <D.24339>;
        <D.24338>:
        D.24264 = field->offset;
        D.24346 = (long unsigned int) D.24264;
        D.24347 = D.24346 & 7;
        if (D.24347 != 0) goto <D.24348>; else goto <D.24349>;
        <D.24348>:
        mono_class_set_failure (class, 7, 0B);
        <D.24349>:
        <D.24339>:
        D.24264 = field->offset;
        D.24281 = (unsigned int) D.24264;
        D.24350 = D.24281 + size;
        real_size = MAX_EXPR <D.24350, real_size>;
      }
    finally
      {
        align = {CLOBBER};
      }
  }
  <D.19271>:
  i = i + 1;
  <D.19273>:
  if (i < top) goto <D.19272>; else goto <D.19274>;
  <D.19274>:
  D.24186 = class->instance_size;
  D.24282 = (unsigned int) D.24186;
  D.24283 = MAX_EXPR <D.24282, real_size>;
  D.24284 = (int) D.24283;
  class->instance_size = D.24284;
  D.24186 = class->instance_size;
  D.24257 = class->min_align;
  D.24258 = (int) D.24257;
  D.24285 = D.24258 + -1;
  D.24286 = D.24186 & D.24285;
  if (D.24286 != 0) goto <D.24351>; else goto <D.24352>;
  <D.24351>:
  D.24186 = class->instance_size;
  D.24257 = class->min_align;
  D.24258 = (int) D.24257;
  D.24285 = D.24258 + -1;
  D.24289 = D.24186 + D.24285;
  class->instance_size = D.24289;
  D.24186 = class->instance_size;
  D.24257 = class->min_align;
  D.24258 = (int) D.24257;
  D.24290 = -D.24258;
  D.24291 = D.24186 & D.24290;
  class->instance_size = D.24291;
  <D.24352>:
  goto <D.19257>;
  <D.24353>:
  <D.19257>:
  if (layout != 16) goto <D.24354>; else goto <D.24355>;
  <D.24354>:
  D.24186 = class->instance_size;
  D.24356 = (unsigned int) D.24186;
  if (D.24356 <= 24) goto <D.24357>; else goto <D.24358>;
  <D.24357>:
  D.24186 = class->instance_size;
  D.24359 = (long unsigned int) D.24186;
  D.24360 = D.24359 + 18446744073709551600;
  D.24257 = class->min_align;
  D.24361 = (long unsigned int) D.24257;
  D.24362 = MAX_EXPR <D.24360, D.24361>;
  D.24363 = (unsigned char) D.24362;
  class->min_align = D.24363;
  <D.24358>:
  <D.24355>:
  mono_memory_barrier ();
  class->size_inited = 1;
  i = 0;
  goto <D.19289>;
  <D.19288>:
  {
    gint32 align;
    guint32 size;

    try
      {
        D.24048 = class->fields;
        D.24049 = (long unsigned int) i;
        D.24050 = D.24049 * 32;
        field = D.24048 + D.24050;
        D.24051 = field->type;
        D.24052 = D.24051->attrs;
        D.24364 = (unsigned int) D.24052;
        D.24365 = D.24364 & 80;
        if (D.24365 != 16) goto <D.24366>; else goto <D.24367>;
        <D.24366>:
        // predicted unlikely by continue predictor.
        goto <D.19277>;
        <D.24367>:
        D.24051 = field->type;
        D.24052 = D.24051->attrs;
        D.24053 = (int) D.24052;
        D.24116 = D.24053 & 1536;
        if (D.24116 != 0) goto <D.24368>; else goto <D.24369>;
        <D.24368>:
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = mono_field_get_name (field);
            D.24122 = "_Deleted";
            D.24123 = MEM[(const unsigned char *)D.24122];
            D.24124 = (int) D.24123;
            D.24373 = *__s2;
            D.24374 = (int) D.24373;
            __result = D.24124 - D.24374;
            {
              D.24375 = __s2_len != 0;
              D.24376 = __result == 0;
              D.24377 = D.24375 & D.24376;
              if (D.24377 != 0) goto <D.24378>; else goto <D.24379>;
              <D.24378>:
              D.24132 = &MEM[(void *)"_Deleted" + 1B];
              D.24133 = *D.24132;
              D.24134 = (int) D.24133;
              D.24380 = __s2 + 1;
              D.24381 = *D.24380;
              D.24382 = (int) D.24381;
              __result = D.24134 - D.24382;
              D.24383 = __s2_len > 1;
              D.24376 = __result == 0;
              D.24384 = D.24383 & D.24376;
              if (D.24384 != 0) goto <D.24385>; else goto <D.24386>;
              <D.24385>:
              D.24142 = &MEM[(void *)"_Deleted" + 2B];
              D.24143 = *D.24142;
              D.24144 = (int) D.24143;
              D.24387 = __s2 + 2;
              D.24388 = *D.24387;
              D.24389 = (int) D.24388;
              __result = D.24144 - D.24389;
              D.24390 = __s2_len > 2;
              D.24376 = __result == 0;
              D.24391 = D.24390 & D.24376;
              if (D.24391 != 0) goto <D.24392>; else goto <D.24393>;
              <D.24392>:
              D.24152 = &MEM[(void *)"_Deleted" + 3B];
              D.24153 = *D.24152;
              D.24154 = (int) D.24153;
              D.24394 = __s2 + 3;
              D.24395 = *D.24394;
              D.24396 = (int) D.24395;
              __result = D.24154 - D.24396;
              <D.24393>:
              <D.24386>:
              <D.24379>:
            }
            D.19285 = __result;
          }
          iftmp.86 = -D.19285;
          goto <D.24397>;
          <D.24372>:
          D.24398 = mono_field_get_name (field);
          iftmp.86 = __builtin_strcmp (D.24398, "_Deleted");
          <D.24397>:
          D.19286 = iftmp.86;
        }
        if (D.19286 == 0) goto <D.24399>; else goto <D.24400>;
        <D.24399>:
        // predicted unlikely by continue predictor.
        goto <D.19277>;
        <D.24400>:
        <D.24369>:
        D.24051 = field->type;
        D.24401 = mono_type_has_exceptions (D.24051);
        if (D.24401 != 0) goto <D.24402>; else goto <D.24403>;
        <D.24402>:
        mono_class_set_failure (class, 7, 0B);
        goto <D.19287>;
        <D.24403>:
        D.24051 = field->type;
        D.24404 = mono_type_size (D.24051, &align);
        size = (guint32) D.24404;
        D.24405 = class->sizes.class_size;
        field->offset = D.24405;
        D.24264 = field->offset;
        align.87 = align;
        D.24407 = align.87 + -1;
        D.24408 = D.24264 + D.24407;
        field->offset = D.24408;
        D.24264 = field->offset;
        align.87 = align;
        D.24409 = -align.87;
        D.24410 = D.24264 & D.24409;
        field->offset = D.24410;
        D.24264 = field->offset;
        D.24281 = (unsigned int) D.24264;
        D.24411 = D.24281 + size;
        D.24412 = (int) D.24411;
        class->sizes.class_size = D.24412;
      }
    finally
      {
        align = {CLOBBER};
      }
  }
  <D.19277>:
  i = i + 1;
  <D.19289>:
  if (i < top) goto <D.19288>; else goto <D.19287>;
  <D.19287>:
}


mono_class_has_references (struct MonoClass * klass)
{
  unsigned char D.24421;
  unsigned char D.24422;
  gboolean D.24425;
  <unnamed-unsigned:1> D.24426;

  D.24421 = BIT_FIELD_REF <*klass, 8, 256>;
  D.24422 = D.24421 & 2;
  if (D.24422 != 0) goto <D.24423>; else goto <D.24424>;
  <D.24423>:
  D.24425 = 1;
  return D.24425;
  <D.24424>:
  mono_class_init (klass);
  D.24426 = klass->has_references;
  D.24425 = (gboolean) D.24426;
  return D.24425;
}


mono_class_setup_methods (struct MonoClass * class)
{
  struct MonoMethod * * D.24428;
  struct MonoGenericClass * D.24433;
  unsigned char D.24436;
  gchar * D.24441;
  unsigned int D.24442;
  unsigned int D.24443;
  unsigned int D.24444;
  unsigned int D.24445;
  int D.24446;
  long unsigned int D.24447;
  long unsigned int D.24448;
  struct MonoMethod * * D.24449;
  struct MonoGenericContext * D.24450;
  struct MonoMethod * * D.24451;
  struct MonoMethod * * D.24452;
  struct MonoMethod * D.24453;
  struct MonoMethod * D.24454;
  int D.24455;
  const char * D.24458;
  gchar * D.24459;
  unsigned int i.88;
  unsigned char D.24462;
  guint32 iftmp.89;
  int D.24469;
  _Bool D.24470;
  long int D.24471;
  long int D.24472;
  short unsigned int D.24475;
  int D.24478;
  int D.24479;
  unsigned int D.24480;
  unsigned int D.24481;
  unsigned int D.24482;
  int D.24483;
  unsigned int D.24484;
  struct MonoImage * D.24485;
  struct MonoClass * D.24486;
  struct MonoType * D.24487;
  struct MonoClass * D.24488;
  struct MonoType * D.24489;
  int D.24490;
  int method_num.90;
  long unsigned int D.24492;
  long unsigned int D.24493;
  struct MonoMethod * * D.24494;
  int D.24497;
  unsigned int D.24498;
  int method_num.91;
  long unsigned int D.24500;
  long unsigned int D.24501;
  struct MonoMethod * * D.24502;
  struct MonoClass * D.24503;
  struct MonoType * D.24504;
  int method_num.92;
  long unsigned int D.24506;
  long unsigned int D.24507;
  struct MonoMethod * * D.24508;
  struct MonoType * D.24509;
  int method_num.93;
  long unsigned int D.24511;
  long unsigned int D.24512;
  struct MonoMethod * * D.24513;
  int D.24514;
  unsigned int D.24515;
  int method_num.94;
  long unsigned int D.24517;
  long unsigned int D.24518;
  struct MonoMethod * * D.24519;
  int D.24520;
  int D.24521;
  struct MonoClass * * D.24522;
  struct MonoClass * * D.24523;
  struct MonoClass * D.24524;
  unsigned int D.24526;
  unsigned int D.24527;
  unsigned int D.24528;
  unsigned int D.24529;
  int D.24530;
  unsigned int D.24531;
  struct MonoMethod * D.24532;
  unsigned int D.24535;
  unsigned int D.24536;
  unsigned char D.24538;
  struct MonoMethod * D.24540;
  short unsigned int D.24541;
  int D.24542;
  int D.24543;
  int slot.95;
  short int D.24547;
  int i;
  struct MonoMethod * * methods;

  D.24428 = class->methods;
  if (D.24428 != 0B) goto <D.24429>; else goto <D.24430>;
  <D.24429>:
  return;
  <D.24430>:
  mono_loader_lock ();
  D.24428 = class->methods;
  if (D.24428 != 0B) goto <D.24431>; else goto <D.24432>;
  <D.24431>:
  mono_loader_unlock ();
  return;
  <D.24432>:
  D.24433 = class->generic_class;
  if (D.24433 != 0B) goto <D.24434>; else goto <D.24435>;
  <D.24434>:
  {
    struct MonoError error;
    struct MonoClass * gklass;

    try
      {
        D.24433 = class->generic_class;
        gklass = D.24433->container_class;
        mono_class_init (gklass);
        D.24436 = gklass->exception_type;
        if (D.24436 == 0) goto <D.24437>; else goto <D.24438>;
        <D.24437>:
        mono_class_setup_methods (gklass);
        <D.24438>:
        D.24436 = gklass->exception_type;
        if (D.24436 != 0) goto <D.24439>; else goto <D.24440>;
        <D.24439>:
        D.24441 = monoeg_strdup ("Generic type definition failed to load");
        mono_class_set_failure (class, 7, D.24441);
        mono_loader_unlock ();
        return;
        <D.24440>:
        D.24442 = gklass->method.count;
        class->method.count = D.24442;
        D.24443 = class->method.count;
        D.24444 = D.24443 + 1;
        D.24445 = D.24444 * 8;
        D.24446 = (int) D.24445;
        methods = mono_class_alloc0 (class, D.24446);
        i = 0;
        goto <D.19305>;
        <D.19304>:
        D.24447 = (long unsigned int) i;
        D.24448 = D.24447 * 8;
        D.24449 = methods + D.24448;
        D.24450 = mono_class_get_context (class);
        D.24451 = gklass->methods;
        D.24447 = (long unsigned int) i;
        D.24448 = D.24447 * 8;
        D.24452 = D.24451 + D.24448;
        D.24453 = *D.24452;
        D.24454 = mono_class_inflate_generic_method_full_checked (D.24453, class, D.24450, &error);
        *D.24449 = D.24454;
        D.24455 = mono_error_ok (&error);
        if (D.24455 == 0) goto <D.24456>; else goto <D.24457>;
        <D.24456>:
        {
          char * method;

          D.24451 = gklass->methods;
          D.24447 = (long unsigned int) i;
          D.24448 = D.24447 * 8;
          D.24452 = D.24451 + D.24448;
          D.24453 = *D.24452;
          method = mono_method_full_name (D.24453, 1);
          D.24458 = mono_error_get_message (&error);
          D.24459 = monoeg_g_strdup_printf ("Could not inflate method %s due to %s", method, D.24458);
          mono_class_set_failure (class, 7, D.24459);
          monoeg_g_free (method);
          mono_error_cleanup (&error);
          mono_loader_unlock ();
          return;
        }
        <D.24457>:
        i = i + 1;
        <D.19305>:
        i.88 = (unsigned int) i;
        D.24443 = class->method.count;
        if (i.88 < D.24443) goto <D.19304>; else goto <D.19306>;
        <D.19306>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  goto <D.24461>;
  <D.24435>:
  D.24462 = class->rank;
  if (D.24462 != 0) goto <D.24463>; else goto <D.24464>;
  <D.24463>:
  {
    struct MonoError error;
    struct MonoMethod * amethod;
    struct MonoMethodSignature * sig;
    int count_generic;
    int first_generic;
    int method_num;

    try
      {
        count_generic = 0;
        first_generic = 0;
        method_num = 0;
        D.24462 = class->rank;
        if (D.24462 > 1) goto <D.24466>; else goto <D.24467>;
        <D.24466>:
        iftmp.89 = 5;
        goto <D.24468>;
        <D.24467>:
        iftmp.89 = 4;
        <D.24468>:
        class->method.count = iftmp.89;
        mono_class_setup_interfaces (class, &error);
        D.24469 = mono_error_ok (&error);
        D.24470 = D.24469 == 0;
        D.24471 = (long int) D.24470;
        D.24472 = __builtin_expect (D.24471, 0);
        if (D.24472 != 0) goto <D.24473>; else goto <D.24474>;
        <D.24473>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2088, "mono_error_ok (&error)");
        <D.24474>:
        D.24475 = class->interface_count;
        if (D.24475 != 0) goto <D.24476>; else goto <D.24477>;
        <D.24476>:
        count_generic = generic_array_methods (class);
        D.24443 = class->method.count;
        first_generic = (int) D.24443;
        D.24443 = class->method.count;
        D.24475 = class->interface_count;
        D.24478 = (int) D.24475;
        D.24479 = D.24478 * count_generic;
        D.24480 = (unsigned int) D.24479;
        D.24481 = D.24443 + D.24480;
        class->method.count = D.24481;
        <D.24477>:
        D.24443 = class->method.count;
        D.24482 = D.24443 * 8;
        D.24483 = (int) D.24482;
        methods = mono_class_alloc0 (class, D.24483);
        D.24462 = class->rank;
        D.24484 = (unsigned int) D.24462;
        D.24485 = class->image;
        sig = mono_metadata_signature_alloc (D.24485, D.24484);
        D.24486 = mono_defaults.void_class;
        D.24487 = &D.24486->byval_arg;
        sig->ret = D.24487;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.19314>;
        <D.19313>:
        D.24488 = mono_defaults.int32_class;
        D.24489 = &D.24488->byval_arg;
        sig->params[i] = D.24489;
        i = i + 1;
        <D.19314>:
        D.24462 = class->rank;
        D.24490 = (int) D.24462;
        if (D.24490 > i) goto <D.19313>; else goto <D.19315>;
        <D.19315>:
        amethod = create_array_method (class, ".ctor", sig);
        method_num.90 = method_num;
        method_num = method_num.90 + 1;
        D.24492 = (long unsigned int) method_num.90;
        D.24493 = D.24492 * 8;
        D.24494 = methods + D.24493;
        *D.24494 = amethod;
        D.24462 = class->rank;
        if (D.24462 > 1) goto <D.24495>; else goto <D.24496>;
        <D.24495>:
        D.24462 = class->rank;
        D.24490 = (int) D.24462;
        D.24497 = D.24490 * 2;
        D.24498 = (unsigned int) D.24497;
        D.24485 = class->image;
        sig = mono_metadata_signature_alloc (D.24485, D.24498);
        D.24486 = mono_defaults.void_class;
        D.24487 = &D.24486->byval_arg;
        sig->ret = D.24487;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.19317>;
        <D.19316>:
        D.24488 = mono_defaults.int32_class;
        D.24489 = &D.24488->byval_arg;
        sig->params[i] = D.24489;
        i = i + 1;
        <D.19317>:
        D.24462 = class->rank;
        D.24490 = (int) D.24462;
        D.24497 = D.24490 * 2;
        if (D.24497 > i) goto <D.19316>; else goto <D.19318>;
        <D.19318>:
        amethod = create_array_method (class, ".ctor", sig);
        method_num.91 = method_num;
        method_num = method_num.91 + 1;
        D.24500 = (long unsigned int) method_num.91;
        D.24501 = D.24500 * 8;
        D.24502 = methods + D.24501;
        *D.24502 = amethod;
        <D.24496>:
        D.24462 = class->rank;
        D.24484 = (unsigned int) D.24462;
        D.24485 = class->image;
        sig = mono_metadata_signature_alloc (D.24485, D.24484);
        D.24503 = class->element_class;
        D.24504 = &D.24503->byval_arg;
        sig->ret = D.24504;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.19320>;
        <D.19319>:
        D.24488 = mono_defaults.int32_class;
        D.24489 = &D.24488->byval_arg;
        sig->params[i] = D.24489;
        i = i + 1;
        <D.19320>:
        D.24462 = class->rank;
        D.24490 = (int) D.24462;
        if (D.24490 > i) goto <D.19319>; else goto <D.19321>;
        <D.19321>:
        amethod = create_array_method (class, "Get", sig);
        method_num.92 = method_num;
        method_num = method_num.92 + 1;
        D.24506 = (long unsigned int) method_num.92;
        D.24507 = D.24506 * 8;
        D.24508 = methods + D.24507;
        *D.24508 = amethod;
        D.24462 = class->rank;
        D.24484 = (unsigned int) D.24462;
        D.24485 = class->image;
        sig = mono_metadata_signature_alloc (D.24485, D.24484);
        D.24503 = class->element_class;
        D.24509 = &D.24503->this_arg;
        sig->ret = D.24509;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.19323>;
        <D.19322>:
        D.24488 = mono_defaults.int32_class;
        D.24489 = &D.24488->byval_arg;
        sig->params[i] = D.24489;
        i = i + 1;
        <D.19323>:
        D.24462 = class->rank;
        D.24490 = (int) D.24462;
        if (D.24490 > i) goto <D.19322>; else goto <D.19324>;
        <D.19324>:
        amethod = create_array_method (class, "Address", sig);
        method_num.93 = method_num;
        method_num = method_num.93 + 1;
        D.24511 = (long unsigned int) method_num.93;
        D.24512 = D.24511 * 8;
        D.24513 = methods + D.24512;
        *D.24513 = amethod;
        D.24462 = class->rank;
        D.24490 = (int) D.24462;
        D.24514 = D.24490 + 1;
        D.24515 = (unsigned int) D.24514;
        D.24485 = class->image;
        sig = mono_metadata_signature_alloc (D.24485, D.24515);
        D.24486 = mono_defaults.void_class;
        D.24487 = &D.24486->byval_arg;
        sig->ret = D.24487;
        sig->pinvoke = 1;
        sig->hasthis = 1;
        i = 0;
        goto <D.19326>;
        <D.19325>:
        D.24488 = mono_defaults.int32_class;
        D.24489 = &D.24488->byval_arg;
        sig->params[i] = D.24489;
        i = i + 1;
        <D.19326>:
        D.24462 = class->rank;
        D.24490 = (int) D.24462;
        if (D.24490 > i) goto <D.19325>; else goto <D.19327>;
        <D.19327>:
        D.24503 = class->element_class;
        D.24504 = &D.24503->byval_arg;
        sig->params[i] = D.24504;
        amethod = create_array_method (class, "Set", sig);
        method_num.94 = method_num;
        method_num = method_num.94 + 1;
        D.24517 = (long unsigned int) method_num.94;
        D.24518 = D.24517 * 8;
        D.24519 = methods + D.24518;
        *D.24519 = amethod;
        i = 0;
        goto <D.19329>;
        <D.19328>:
        D.24520 = i * count_generic;
        D.24521 = D.24520 + first_generic;
        D.24522 = class->interfaces;
        D.24447 = (long unsigned int) i;
        D.24448 = D.24447 * 8;
        D.24523 = D.24522 + D.24448;
        D.24524 = *D.24523;
        setup_generic_array_ifaces (class, D.24524, methods, D.24521);
        i = i + 1;
        <D.19329>:
        D.24475 = class->interface_count;
        D.24478 = (int) D.24475;
        if (D.24478 > i) goto <D.19328>; else goto <D.19330>;
        <D.19330>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  goto <D.24525>;
  <D.24464>:
  D.24443 = class->method.count;
  D.24482 = D.24443 * 8;
  D.24483 = (int) D.24482;
  methods = mono_class_alloc (class, D.24483);
  i = 0;
  goto <D.19333>;
  <D.19332>:
  {
    int idx;

    D.24526 = class->method.first;
    i.88 = (unsigned int) i;
    D.24527 = D.24526 + i.88;
    D.24528 = D.24527 + 1;
    D.24485 = class->image;
    D.24529 = mono_metadata_translate_token_index (D.24485, 6, D.24528);
    idx = (int) D.24529;
    D.24447 = (long unsigned int) i;
    D.24448 = D.24447 * 8;
    D.24449 = methods + D.24448;
    D.24530 = idx | 100663296;
    D.24531 = (unsigned int) D.24530;
    D.24485 = class->image;
    D.24532 = mono_get_method (D.24485, D.24531, class);
    *D.24449 = D.24532;
  }
  i = i + 1;
  <D.19333>:
  i.88 = (unsigned int) i;
  D.24443 = class->method.count;
  if (i.88 < D.24443) goto <D.19332>; else goto <D.19334>;
  <D.19334>:
  <D.24525>:
  <D.24461>:
  D.24535 = class->flags;
  D.24536 = D.24535 & 32;
  if (D.24536 != 0) goto <D.24533>; else goto <D.24537>;
  <D.24537>:
  D.24538 = class->byval_arg.type;
  if (D.24538 == 19) goto <D.24533>; else goto <D.24539>;
  <D.24539>:
  D.24538 = class->byval_arg.type;
  if (D.24538 == 30) goto <D.24533>; else goto <D.24534>;
  <D.24533>:
  {
    int slot;

    slot = 0;
    i = 0;
    goto <D.19337>;
    <D.19336>:
    D.24447 = (long unsigned int) i;
    D.24448 = D.24447 * 8;
    D.24449 = methods + D.24448;
    D.24540 = *D.24449;
    D.24541 = D.24540->flags;
    D.24542 = (int) D.24541;
    D.24543 = D.24542 & 64;
    if (D.24543 != 0) goto <D.24544>; else goto <D.24545>;
    <D.24544>:
    D.24447 = (long unsigned int) i;
    D.24448 = D.24447 * 8;
    D.24449 = methods + D.24448;
    D.24540 = *D.24449;
    slot.95 = slot;
    slot = slot.95 + 1;
    D.24547 = (short int) slot.95;
    D.24540->slot = D.24547;
    <D.24545>:
    i = i + 1;
    <D.19337>:
    i.88 = (unsigned int) i;
    D.24443 = class->method.count;
    if (i.88 < D.24443) goto <D.19336>; else goto <D.19338>;
    <D.19338>:
  }
  <D.24534>:
  mono_memory_barrier ();
  class->methods = methods;
  mono_loader_unlock ();
}


generic_array_methods (struct MonoClass * class)
{
  int generic_array_method_num.96;
  int D.24554;
  struct MonoClass * D.24555;
  unsigned char D.24556;
  _Bool D.24557;
  long int D.24558;
  long int D.24559;
  struct MonoMethod * * D.24562;
  long unsigned int D.24563;
  long unsigned int D.24564;
  struct MonoMethod * * D.24565;
  const char * D.24566;
  int D.24567;
  unsigned int i.97;
  unsigned int D.24571;
  long unsigned int D.24572;
  unsigned int D.24573;
  unsigned int D.24574;
  struct MonoImage * D.24575;
  void * generic_array_method_info.98;
  struct GenericArrayMethodInfo * generic_array_method_info.99;
  long unsigned int D.24578;
  struct GenericArrayMethodInfo * D.24579;
  const char * D.24580;
  int D.24581;
  int D.24585;
  long unsigned int D.24589;
  int D.24590;
  long unsigned int D.24593;
  long unsigned int D.24595;
  int D.24596;
  long unsigned int D.24599;
  int D.24601;
  long unsigned int D.24605;
  unsigned int D.24606;
  long unsigned int D.24607;
  unsigned int D.24608;
  unsigned int D.24609;
  unsigned int D.24610;
  long unsigned int D.24611;
  gchar * D.24612;
  int i;
  int count_generic;
  struct GList * list;
  struct GList * tmp;

  count_generic = 0;
  list = 0B;
  generic_array_method_num.96 = generic_array_method_num;
  if (generic_array_method_num.96 != 0) goto <D.24552>; else goto <D.24553>;
  <D.24552>:
  D.24554 = generic_array_method_num;
  return D.24554;
  <D.24553>:
  D.24555 = class->parent;
  mono_class_setup_methods (D.24555);
  D.24555 = class->parent;
  D.24556 = D.24555->exception_type;
  D.24557 = D.24556 != 0;
  D.24558 = (long int) D.24557;
  D.24559 = __builtin_expect (D.24558, 0);
  if (D.24559 != 0) goto <D.24560>; else goto <D.24561>;
  <D.24560>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4760, "!class->parent->exception_type");
  <D.24561>:
  i = 0;
  goto <D.20171>;
  <D.20170>:
  {
    struct MonoMethod * m;

    D.24555 = class->parent;
    D.24562 = D.24555->methods;
    D.24563 = (long unsigned int) i;
    D.24564 = D.24563 * 8;
    D.24565 = D.24562 + D.24564;
    m = *D.24565;
    D.24566 = m->name;
    D.24567 = strncmp (D.24566, "InternalArray__", 15);
    if (D.24567 == 0) goto <D.24568>; else goto <D.24569>;
    <D.24568>:
    count_generic = count_generic + 1;
    list = monoeg_g_list_prepend (list, m);
    <D.24569>:
  }
  i = i + 1;
  <D.20171>:
  i.97 = (unsigned int) i;
  D.24555 = class->parent;
  D.24571 = D.24555->method.count;
  if (i.97 < D.24571) goto <D.20170>; else goto <D.20172>;
  <D.20172>:
  list = monoeg_g_list_reverse (list);
  D.24572 = (long unsigned int) count_generic;
  D.24573 = (unsigned int) D.24572;
  D.24574 = D.24573 * 16;
  D.24575 = mono_defaults.corlib;
  generic_array_method_info.98 = mono_image_alloc (D.24575, D.24574);
  generic_array_method_info = generic_array_method_info.98;
  i = 0;
  tmp = list;
  goto <D.20225>;
  <D.20224>:
  {
    const char * mname;
    const char * iname;
    gchar * name;
    struct MonoMethod * m;
    const char * ireadonlylist_prefix;
    const char * ireadonlycollection_prefix;

    m = tmp->data;
    ireadonlylist_prefix = "InternalArray__IReadOnlyList_";
    ireadonlycollection_prefix = "InternalArray__IReadOnlyCollection_";
    generic_array_method_info.99 = generic_array_method_info;
    D.24563 = (long unsigned int) i;
    D.24578 = D.24563 * 16;
    D.24579 = generic_array_method_info.99 + D.24578;
    D.24579->array_method = m;
    D.24580 = m->name;
    D.24581 = strncmp (D.24580, "InternalArray__ICollection_", 27);
    if (D.24581 == 0) goto <D.24582>; else goto <D.24583>;
    <D.24582>:
    iname = "System.Collections.Generic.ICollection`1.";
    D.24580 = m->name;
    mname = D.24580 + 27;
    goto <D.24584>;
    <D.24583>:
    D.24580 = m->name;
    D.24585 = strncmp (D.24580, "InternalArray__IEnumerable_", 27);
    if (D.24585 == 0) goto <D.24586>; else goto <D.24587>;
    <D.24586>:
    iname = "System.Collections.Generic.IEnumerable`1.";
    D.24580 = m->name;
    mname = D.24580 + 27;
    goto <D.24588>;
    <D.24587>:
    D.24589 = strlen (ireadonlylist_prefix);
    D.24580 = m->name;
    D.24590 = strncmp (D.24580, ireadonlylist_prefix, D.24589);
    if (D.24590 == 0) goto <D.24591>; else goto <D.24592>;
    <D.24591>:
    iname = "System.Collections.Generic.IReadOnlyList`1.";
    D.24580 = m->name;
    D.24593 = strlen (ireadonlylist_prefix);
    mname = D.24580 + D.24593;
    goto <D.24594>;
    <D.24592>:
    D.24595 = strlen (ireadonlycollection_prefix);
    D.24580 = m->name;
    D.24596 = strncmp (D.24580, ireadonlycollection_prefix, D.24595);
    if (D.24596 == 0) goto <D.24597>; else goto <D.24598>;
    <D.24597>:
    iname = "System.Collections.Generic.IReadOnlyCollection`1.";
    D.24580 = m->name;
    D.24599 = strlen (ireadonlycollection_prefix);
    mname = D.24580 + D.24599;
    goto <D.24600>;
    <D.24598>:
    D.24580 = m->name;
    D.24601 = strncmp (D.24580, "InternalArray__", 15);
    if (D.24601 == 0) goto <D.24602>; else goto <D.24603>;
    <D.24602>:
    iname = "System.Collections.Generic.IList`1.";
    D.24580 = m->name;
    mname = D.24580 + 15;
    goto <D.24604>;
    <D.24603>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 4795);
    <D.24604>:
    <D.24600>:
    <D.24594>:
    <D.24588>:
    <D.24584>:
    D.24605 = strlen (iname);
    D.24606 = (unsigned int) D.24605;
    D.24607 = strlen (mname);
    D.24608 = (unsigned int) D.24607;
    D.24609 = D.24606 + D.24608;
    D.24610 = D.24609 + 1;
    D.24575 = mono_defaults.corlib;
    name = mono_image_alloc (D.24575, D.24610);
    strcpy (name, iname);
    D.24611 = strlen (iname);
    D.24612 = name + D.24611;
    strcpy (D.24612, mname);
    generic_array_method_info.99 = generic_array_method_info;
    D.24563 = (long unsigned int) i;
    D.24578 = D.24563 * 16;
    D.24579 = generic_array_method_info.99 + D.24578;
    D.24579->name = name;
    i = i + 1;
  }
  tmp = tmp->next;
  <D.20225>:
  if (tmp != 0B) goto <D.20224>; else goto <D.20226>;
  <D.20226>:
  generic_array_method_num = count_generic;
  monoeg_g_list_free (list);
  D.24554 = generic_array_method_num;
  return D.24554;
}


strcpy (char * restrict __dest, const char * restrict __src)
{
  char * D.24614;
  long unsigned int D.24615;

  D.24615 = __builtin_object_size (__dest, 1);
  D.24614 = __builtin___strcpy_chk (__dest, __src, D.24615);
  return D.24614;
}


create_array_method (struct MonoClass * class, const char * name, struct MonoMethodSignature * sig)
{
  struct MonoImage * D.24617;
  char D.24618;
  short unsigned int D.24621;
  short unsigned int D.24622;
  short unsigned int D.24624;
  short unsigned int D.24625;
  struct MonoMethod * D.24626;
  struct MonoMethod * method;

  D.24617 = class->image;
  method = mono_image_alloc0 (D.24617, 56);
  method->klass = class;
  method->flags = 6;
  method->iflags = 4096;
  method->signature = sig;
  method->name = name;
  method->slot = -1;
  D.24618 = *name;
  if (D.24618 == 46) goto <D.24619>; else goto <D.24620>;
  <D.24619>:
  D.24621 = method->flags;
  D.24622 = D.24621 | 6144;
  method->flags = D.24622;
  goto <D.24623>;
  <D.24620>:
  D.24624 = method->iflags;
  D.24625 = D.24624 | 3;
  method->iflags = D.24625;
  <D.24623>:
  D.24626 = method;
  return D.24626;
}


setup_generic_array_ifaces (struct MonoClass * class, struct MonoClass * iface, struct MonoMethod * * methods, int pos)
{
  struct MonoGenericClass * D.24628;
  struct MonoGenericInst * D.24629;
  struct GenericArrayMethodInfo * generic_array_method_info.100;
  long unsigned int D.24631;
  long unsigned int D.24632;
  struct GenericArrayMethodInfo * D.24633;
  int pos.101;
  long unsigned int D.24635;
  long unsigned int D.24636;
  struct MonoMethod * * D.24637;
  char * D.24638;
  struct MonoMethod * D.24639;
  int generic_array_method_num.102;
  struct MonoGenericContext tmp_context;
  int i;

  try
    {
      tmp_context.class_inst = 0B;
      D.24628 = iface->generic_class;
      D.24629 = D.24628->context.class_inst;
      tmp_context.method_inst = D.24629;
      i = 0;
      goto <D.20238>;
      <D.20237>:
      {
        struct MonoMethod * m;
        struct MonoMethod * inflated;

        generic_array_method_info.100 = generic_array_method_info;
        D.24631 = (long unsigned int) i;
        D.24632 = D.24631 * 16;
        D.24633 = generic_array_method_info.100 + D.24632;
        m = D.24633->array_method;
        inflated = mono_class_inflate_generic_method (m, &tmp_context);
        pos.101 = pos;
        pos = pos.101 + 1;
        D.24635 = (long unsigned int) pos.101;
        D.24636 = D.24635 * 8;
        D.24637 = methods + D.24636;
        generic_array_method_info.100 = generic_array_method_info;
        D.24631 = (long unsigned int) i;
        D.24632 = D.24631 * 16;
        D.24633 = generic_array_method_info.100 + D.24632;
        D.24638 = D.24633->name;
        D.24639 = mono_marshal_get_generic_array_helper (class, iface, D.24638, inflated);
        *D.24637 = D.24639;
      }
      i = i + 1;
      <D.20238>:
      generic_array_method_num.102 = generic_array_method_num;
      if (i < generic_array_method_num.102) goto <D.20237>; else goto <D.20239>;
      <D.20239>:
    }
  finally
    {
      tmp_context = {CLOBBER};
    }
}


mono_class_get_method_by_index (struct MonoClass * class, int index)
{
  struct MonoGenericClass * D.24642;
  struct MonoMethod * * D.24644;
  struct MonoGenericContext * D.24646;
  struct MonoMethod * * D.24647;
  long unsigned int D.24648;
  long unsigned int D.24649;
  struct MonoMethod * * D.24650;
  struct MonoMethod * D.24651;
  struct MonoMethod * D.24652;
  unsigned char D.24653;
  int iftmp.103;
  unsigned int index.104;
  unsigned int D.24662;
  _Bool D.24663;
  long int D.24664;
  long int D.24665;
  struct MonoMethod * * D.24668;

  D.24642 = class->generic_class;
  if (D.24642 != 0B) goto <D.24643>; else goto <D.24641>;
  <D.24643>:
  D.24644 = class->methods;
  if (D.24644 == 0B) goto <D.24645>; else goto <D.24641>;
  <D.24645>:
  {
    struct MonoClass * gklass;
    struct MonoMethod * m;

    D.24642 = class->generic_class;
    gklass = D.24642->container_class;
    D.24646 = mono_class_get_context (class);
    D.24647 = gklass->methods;
    D.24648 = (long unsigned int) index;
    D.24649 = D.24648 * 8;
    D.24650 = D.24647 + D.24649;
    D.24651 = *D.24650;
    m = mono_class_inflate_generic_method_full (D.24651, class, D.24646);
    D.24652 = m;
    return D.24652;
  }
  <D.24641>:
  mono_class_setup_methods (class);
  D.24653 = class->exception_type;
  if (D.24653 != 0) goto <D.24654>; else goto <D.24655>;
  <D.24654>:
  D.24652 = 0B;
  return D.24652;
  <D.24655>:
  if (index < 0) goto <D.24657>; else goto <D.24660>;
  <D.24660>:
  index.104 = (unsigned int) index;
  D.24662 = class->method.count;
  if (index.104 >= D.24662) goto <D.24657>; else goto <D.24658>;
  <D.24657>:
  iftmp.103 = 1;
  goto <D.24659>;
  <D.24658>:
  iftmp.103 = 0;
  <D.24659>:
  D.24663 = iftmp.103 != 0;
  D.24664 = (long int) D.24663;
  D.24665 = __builtin_expect (D.24664, 0);
  if (D.24665 != 0) goto <D.24666>; else goto <D.24667>;
  <D.24666>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2205, "index >= 0 && index < class->method.count");
  <D.24667>:
  D.24644 = class->methods;
  D.24648 = (long unsigned int) index;
  D.24649 = D.24648 * 8;
  D.24668 = D.24644 + D.24649;
  D.24652 = *D.24668;
  return D.24652;
}


mono_class_get_inflated_method (struct MonoClass * class, struct MonoMethod * method)
{
  struct MonoGenericClass * D.24670;
  struct MonoClass * D.24671;
  _Bool D.24672;
  long int D.24673;
  long int D.24674;
  unsigned char D.24677;
  _Bool D.24678;
  long int D.24679;
  long int D.24680;
  struct MonoMethod * * D.24683;
  long unsigned int D.24684;
  long unsigned int D.24685;
  struct MonoMethod * * D.24686;
  struct MonoMethod * D.24687;
  struct MonoMethod * * D.24690;
  struct MonoMethod * D.24693;
  struct MonoMethod * * D.24694;
  struct MonoGenericContext * D.24695;
  unsigned int i.105;
  unsigned int D.24697;
  struct MonoClass * gklass;
  int i;

  D.24670 = class->generic_class;
  gklass = D.24670->container_class;
  D.24671 = method->klass;
  D.24672 = D.24671 != gklass;
  D.24673 = (long int) D.24672;
  D.24674 = __builtin_expect (D.24673, 0);
  if (D.24674 != 0) goto <D.24675>; else goto <D.24676>;
  <D.24675>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2222, "method->klass == gklass");
  <D.24676>:
  mono_class_setup_methods (gklass);
  D.24677 = gklass->exception_type;
  D.24678 = D.24677 != 0;
  D.24679 = (long int) D.24678;
  D.24680 = __builtin_expect (D.24679, 0);
  if (D.24680 != 0) goto <D.24681>; else goto <D.24682>;
  <D.24681>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2225, "!gklass->exception_type");
  <D.24682>:
  i = 0;
  goto <D.19352>;
  <D.19351>:
  D.24683 = gklass->methods;
  D.24684 = (long unsigned int) i;
  D.24685 = D.24684 * 8;
  D.24686 = D.24683 + D.24685;
  D.24687 = *D.24686;
  if (D.24687 == method) goto <D.24688>; else goto <D.24689>;
  <D.24688>:
  D.24690 = class->methods;
  if (D.24690 != 0B) goto <D.24691>; else goto <D.24692>;
  <D.24691>:
  D.24690 = class->methods;
  D.24684 = (long unsigned int) i;
  D.24685 = D.24684 * 8;
  D.24694 = D.24690 + D.24685;
  D.24693 = *D.24694;
  return D.24693;
  <D.24692>:
  D.24695 = mono_class_get_context (class);
  D.24683 = gklass->methods;
  D.24684 = (long unsigned int) i;
  D.24685 = D.24684 * 8;
  D.24686 = D.24683 + D.24685;
  D.24687 = *D.24686;
  D.24693 = mono_class_inflate_generic_method_full (D.24687, class, D.24695);
  return D.24693;
  <D.24689>:
  i = i + 1;
  <D.19352>:
  i.105 = (unsigned int) i;
  D.24697 = gklass->method.count;
  if (i.105 < D.24697) goto <D.19351>; else goto <D.19353>;
  <D.19353>:
  D.24693 = 0B;
  return D.24693;
}


mono_class_get_vtable_entry (struct MonoClass * class, int offset)
{
  unsigned char D.24699;
  struct MonoClass * D.24702;
  int D.24703;
  struct MonoMethod * D.24706;
  struct MonoMethod * * D.24707;
  long unsigned int D.24708;
  long unsigned int D.24709;
  struct MonoMethod * * D.24710;
  struct MonoGenericClass * D.24711;
  struct MonoMethod * * D.24714;
  struct MonoMethod * * D.24715;
  struct MonoGenericContext * D.24716;
  unsigned char D.24718;
  struct MonoMethod * * D.24721;
  struct MonoMethod * * D.24722;
  struct MonoMethod * m;

  D.24699 = class->rank;
  if (D.24699 == 1) goto <D.24700>; else goto <D.24701>;
  <D.24700>:
  D.24702 = class->parent;
  mono_class_setup_vtable (D.24702);
  D.24702 = class->parent;
  D.24703 = D.24702->vtable_size;
  if (D.24703 > offset) goto <D.24704>; else goto <D.24705>;
  <D.24704>:
  D.24702 = class->parent;
  D.24707 = D.24702->vtable;
  D.24708 = (long unsigned int) offset;
  D.24709 = D.24708 * 8;
  D.24710 = D.24707 + D.24709;
  D.24706 = *D.24710;
  return D.24706;
  <D.24705>:
  <D.24701>:
  D.24711 = class->generic_class;
  if (D.24711 != 0B) goto <D.24712>; else goto <D.24713>;
  <D.24712>:
  {
    struct MonoClass * gklass;

    D.24711 = class->generic_class;
    gklass = D.24711->container_class;
    mono_class_setup_vtable (gklass);
    D.24714 = gklass->vtable;
    D.24708 = (long unsigned int) offset;
    D.24709 = D.24708 * 8;
    D.24715 = D.24714 + D.24709;
    m = *D.24715;
    D.24716 = mono_class_get_context (class);
    m = mono_class_inflate_generic_method_full (m, class, D.24716);
  }
  goto <D.24717>;
  <D.24713>:
  mono_class_setup_vtable (class);
  D.24718 = class->exception_type;
  if (D.24718 != 0) goto <D.24719>; else goto <D.24720>;
  <D.24719>:
  D.24706 = 0B;
  return D.24706;
  <D.24720>:
  D.24721 = class->vtable;
  D.24708 = (long unsigned int) offset;
  D.24709 = D.24708 * 8;
  D.24722 = D.24721 + D.24709;
  m = *D.24722;
  <D.24717>:
  D.24706 = m;
  return D.24706;
}


mono_class_get_vtable_size (struct MonoClass * klass)
{
  int D.24724;

  mono_class_setup_vtable (klass);
  D.24724 = klass->vtable_size;
  return D.24724;
}


mono_unload_interface_ids (struct MonoBitSet * bitset)
{
  struct MonoBitSet * global_interface_bitset.106;

  mono_loader_lock ();
  global_interface_bitset.106 = global_interface_bitset;
  mono_bitset_sub (global_interface_bitset.106, bitset);
  mono_loader_unlock ();
}


mono_unload_interface_id (struct MonoClass * class)
{
  struct MonoBitSet * global_interface_bitset.107;
  short unsigned int D.24730;
  unsigned int D.24733;

  global_interface_bitset.107 = global_interface_bitset;
  if (global_interface_bitset.107 != 0B) goto <D.24728>; else goto <D.24729>;
  <D.24728>:
  D.24730 = class->interface_id;
  if (D.24730 != 0) goto <D.24731>; else goto <D.24732>;
  <D.24731>:
  mono_loader_lock ();
  D.24730 = class->interface_id;
  D.24733 = (unsigned int) D.24730;
  global_interface_bitset.107 = global_interface_bitset;
  mono_bitset_clear (global_interface_bitset.107, D.24733);
  mono_loader_unlock ();
  <D.24732>:
  <D.24729>:
}


mono_class_get_implemented_interfaces (struct MonoClass * klass, struct MonoError * error)
{
  int D.24734;
  struct GPtrArray * res.108;
  struct GPtrArray * D.24740;
  struct GPtrArray * res;

  try
    {
      res = 0B;
      collect_implemented_interfaces_aux (klass, &res, error);
      D.24734 = mono_error_ok (error);
      if (D.24734 == 0) goto <D.24735>; else goto <D.24736>;
      <D.24735>:
      res.108 = res;
      if (res.108 != 0B) goto <D.24738>; else goto <D.24739>;
      <D.24738>:
      res.108 = res;
      monoeg_g_ptr_array_free (res.108, 1);
      <D.24739>:
      D.24740 = 0B;
      return D.24740;
      <D.24736>:
      D.24740 = res;
      return D.24740;
    }
  finally
    {
      res = {CLOBBER};
    }
}


collect_implemented_interfaces_aux (struct MonoClass * klass, struct GPtrArray * * res, struct MonoError * error)
{
  int D.24743;
  struct MonoClass * * D.24746;
  long unsigned int D.24747;
  long unsigned int D.24748;
  struct MonoClass * * D.24749;
  struct GPtrArray * D.24750;
  struct GPtrArray * D.24753;
  unsigned char D.24754;
  int D.24757;
  short unsigned int D.24760;
  int D.24761;
  int i;
  struct MonoClass * ic;

  mono_class_setup_interfaces (klass, error);
  D.24743 = mono_error_ok (error);
  if (D.24743 == 0) goto <D.24744>; else goto <D.24745>;
  <D.24744>:
  return;
  <D.24745>:
  i = 0;
  goto <D.19468>;
  <D.19467>:
  D.24746 = klass->interfaces;
  D.24747 = (long unsigned int) i;
  D.24748 = D.24747 * 8;
  D.24749 = D.24746 + D.24748;
  ic = *D.24749;
  D.24750 = *res;
  if (D.24750 == 0B) goto <D.24751>; else goto <D.24752>;
  <D.24751>:
  D.24753 = monoeg_g_ptr_array_new ();
  *res = D.24753;
  <D.24752>:
  D.24750 = *res;
  monoeg_g_ptr_array_add (D.24750, ic);
  mono_class_init (ic);
  D.24754 = ic->exception_type;
  if (D.24754 != 0) goto <D.24755>; else goto <D.24756>;
  <D.24755>:
  mono_error_set_type_load_class (error, ic, "Error Loading class");
  return;
  <D.24756>:
  collect_implemented_interfaces_aux (ic, res, error);
  D.24757 = mono_error_ok (error);
  if (D.24757 == 0) goto <D.24758>; else goto <D.24759>;
  <D.24758>:
  return;
  <D.24759>:
  i = i + 1;
  <D.19468>:
  D.24760 = klass->interface_count;
  D.24761 = (int) D.24760;
  if (D.24761 > i) goto <D.19467>; else goto <D.19469>;
  <D.19469>:
}


mono_class_interface_offset (struct MonoClass * klass, struct MonoClass * itf)
{
  short unsigned int D.24763;
  long unsigned int D.24764;
  struct MonoClass * * D.24765;
  int D.24768;
  guint16 * D.24769;
  long int result.109;
  long int D.24771;
  long int D.24772;
  long int D.24773;
  long unsigned int D.24774;
  long unsigned int D.24775;
  guint16 * D.24776;
  short unsigned int D.24777;
  struct MonoClass * * result;

  D.24763 = klass->interface_offsets_count;
  D.24764 = (long unsigned int) D.24763;
  D.24765 = klass->interfaces_packed;
  result = mono_binary_search (itf, D.24765, D.24764, 8, compare_interface_ids);
  if (result != 0B) goto <D.24766>; else goto <D.24767>;
  <D.24766>:
  D.24769 = klass->interface_offsets_packed;
  result.109 = (long int) result;
  D.24765 = klass->interfaces_packed;
  D.24771 = (long int) D.24765;
  D.24772 = result.109 - D.24771;
  D.24773 = D.24772 /[ex] 8;
  D.24774 = (long unsigned int) D.24773;
  D.24775 = D.24774 * 2;
  D.24776 = D.24769 + D.24775;
  D.24777 = *D.24776;
  D.24768 = (int) D.24777;
  return D.24768;
  <D.24767>:
  D.24768 = -1;
  return D.24768;
}


compare_interface_ids (const void * p_key, const void * p_element)
{
  int D.24779;
  short unsigned int D.24780;
  int D.24781;
  short unsigned int D.24782;
  int D.24783;
  const struct MonoClass * key;
  const struct MonoClass * element;

  key = p_key;
  element = MEM[(struct MonoClass * *)p_element];
  D.24780 = key->interface_id;
  D.24781 = (int) D.24780;
  D.24782 = element->interface_id;
  D.24783 = (int) D.24782;
  D.24779 = D.24781 - D.24783;
  return D.24779;
}


mono_class_interface_offset_with_variance (struct MonoClass * klass, struct MonoClass * itf, gboolean * non_exact_match)
{
  int D.24787;
  int D.24788;
  struct MonoClass * * D.24791;
  long unsigned int D.24792;
  long unsigned int D.24793;
  struct MonoClass * * D.24794;
  struct MonoClass * D.24795;
  int D.24796;
  guint16 * D.24799;
  long unsigned int D.24800;
  guint16 * D.24801;
  short unsigned int D.24802;
  short unsigned int D.24803;
  int D.24804;
  int i;

  i = mono_class_interface_offset (klass, itf);
  *non_exact_match = 0;
  if (i >= 0) goto <D.24785>; else goto <D.24786>;
  <D.24785>:
  D.24787 = i;
  return D.24787;
  <D.24786>:
  D.24788 = mono_class_has_variant_generic_params (itf);
  if (D.24788 == 0) goto <D.24789>; else goto <D.24790>;
  <D.24789>:
  D.24787 = -1;
  return D.24787;
  <D.24790>:
  i = 0;
  goto <D.19493>;
  <D.19492>:
  D.24791 = klass->interfaces_packed;
  D.24792 = (long unsigned int) i;
  D.24793 = D.24792 * 8;
  D.24794 = D.24791 + D.24793;
  D.24795 = *D.24794;
  D.24796 = mono_class_is_variant_compatible (itf, D.24795, 0);
  if (D.24796 != 0) goto <D.24797>; else goto <D.24798>;
  <D.24797>:
  *non_exact_match = 1;
  D.24799 = klass->interface_offsets_packed;
  D.24792 = (long unsigned int) i;
  D.24800 = D.24792 * 2;
  D.24801 = D.24799 + D.24800;
  D.24802 = *D.24801;
  D.24787 = (int) D.24802;
  return D.24787;
  <D.24798>:
  i = i + 1;
  <D.19493>:
  D.24803 = klass->interface_offsets_count;
  D.24804 = (int) D.24803;
  if (D.24804 > i) goto <D.19492>; else goto <D.19494>;
  <D.19494>:
  D.24787 = -1;
  return D.24787;
}


mono_class_setup_interface_offsets (struct MonoClass * class)
{
  mono_loader_lock ();
  setup_interface_offsets (class, 0, 0);
  mono_loader_unlock ();
}


setup_interface_offsets (struct MonoClass * class, int cur_slot, gboolean overwrite)
{
  short unsigned int D.24806;
  long unsigned int D.24807;
  long unsigned int D.24808;
  struct MonoClass * * D.24809;
  long unsigned int D.24810;
  long unsigned int D.24811;
  struct MonoClass * * D.24812;
  short unsigned int D.24813;
  int D.24814;
  struct MonoClass * * D.24815;
  long unsigned int D.24816;
  long unsigned int D.24817;
  struct MonoClass * * D.24818;
  unsigned char D.24819;
  unsigned char D.24820;
  short unsigned int D.24823;
  int D.24824;
  int D.24827;
  const char * D.24830;
  gchar * D.24831;
  unsigned int D.24834;
  unsigned int num_ifaces.110;
  unsigned int D.24836;
  void * * D.24837;
  void * * D.24838;
  unsigned int i.111;
  struct GPtrArray * * D.24842;
  int D.24843;
  struct MonoClass * * D.24844;
  int num_array_interfaces.112;
  unsigned int D.24850;
  unsigned int D.24851;
  unsigned char D.24853;
  short unsigned int D.24855;
  int D.24856;
  short unsigned int D.24859;
  long unsigned int D.24860;
  long unsigned int D.24861;
  long unsigned int D.24862;
  long unsigned int D.24863;
  int * D.24864;
  _Bool D.24867;
  long int D.24868;
  long int D.24869;
  int D.24872;
  sizetype D.24873;
  struct MonoClass * * D.24874;
  struct MonoClass * D.24875;
  _Bool D.24876;
  long int D.24877;
  long int D.24878;
  struct GPtrArray * * D.24881;
  int D.24884;
  gchar * D.24889;
  int is_enumerator.113;
  struct MonoClass * * D.24899;
  long unsigned int D.24900;
  long unsigned int D.24901;
  struct MonoClass * * D.24902;
  struct MonoClass * D.24903;
  _Bool D.24904;
  long int D.24905;
  long int D.24906;
  int D.19709;
  int iftmp.114;
  int D.19708;
  const char[14] * D.24912;
  unsigned char D.24913;
  int D.24914;
  unsigned char D.24915;
  int D.24916;
  _Bool D.24917;
  _Bool D.24918;
  _Bool D.24919;
  const unsigned char * D.24922;
  unsigned char D.24923;
  int D.24924;
  const unsigned char * D.24925;
  unsigned char D.24926;
  int D.24927;
  _Bool D.24928;
  _Bool D.24929;
  const unsigned char * D.24932;
  unsigned char D.24933;
  int D.24934;
  const unsigned char * D.24935;
  unsigned char D.24936;
  int D.24937;
  _Bool D.24938;
  _Bool D.24939;
  const unsigned char * D.24942;
  unsigned char D.24943;
  int D.24944;
  const unsigned char * D.24945;
  unsigned char D.24946;
  int D.24947;
  const char * D.24949;
  long unsigned int D.24954;
  long unsigned int D.24955;
  struct MonoClass * * D.24956;
  struct MonoClass * iftmp.115;
  long unsigned int D.24960;
  long unsigned int D.24961;
  struct MonoClass * * D.24962;
  int iftmp.116;
  struct MonoClass * D.24968;
  struct MonoClass * * D.24969;
  long unsigned int D.24970;
  long unsigned int D.24971;
  struct MonoClass * * D.24972;
  struct MonoClass * D.24973;
  long unsigned int D.24974;
  long unsigned int D.24975;
  struct MonoClass * * D.24976;
  struct MonoClass * D.24977;
  int iftmp.117;
  struct MonoClass * D.24981;
  int iftmp.118;
  struct MonoClass * * D.24986;
  long unsigned int D.24987;
  long unsigned int D.24988;
  struct MonoClass * * D.24989;
  struct MonoClass * D.24990;
  int iftmp.119;
  _Bool D.24996;
  _Bool D.24997;
  _Bool D.24998;
  _Bool D.25000;
  long int D.25001;
  long int D.25002;
  struct MonoGenericClass * D.25005;
  struct MonoClass * D.25006;
  struct MonoClass * D.25007;
  int D.19734;
  int iftmp.120;
  int D.19733;
  const char[14] * D.25014;
  unsigned char D.25015;
  int D.25016;
  unsigned char D.25017;
  int D.25018;
  _Bool D.25019;
  _Bool D.25020;
  _Bool D.25021;
  const unsigned char * D.25024;
  unsigned char D.25025;
  int D.25026;
  const unsigned char * D.25027;
  unsigned char D.25028;
  int D.25029;
  _Bool D.25030;
  _Bool D.25031;
  const unsigned char * D.25034;
  unsigned char D.25035;
  int D.25036;
  const unsigned char * D.25037;
  unsigned char D.25038;
  int D.25039;
  _Bool D.25040;
  _Bool D.25041;
  const unsigned char * D.25044;
  unsigned char D.25045;
  int D.25046;
  const unsigned char * D.25047;
  unsigned char D.25048;
  int D.25049;
  int D.19743;
  int iftmp.121;
  int D.19742;
  const char[14] * D.25057;
  unsigned char D.25058;
  int D.25059;
  unsigned char D.25060;
  int D.25061;
  _Bool D.25062;
  _Bool D.25063;
  _Bool D.25064;
  const unsigned char * D.25067;
  unsigned char D.25068;
  int D.25069;
  const unsigned char * D.25070;
  unsigned char D.25071;
  int D.25072;
  _Bool D.25073;
  _Bool D.25074;
  const unsigned char * D.25077;
  unsigned char D.25078;
  int D.25079;
  const unsigned char * D.25080;
  unsigned char D.25081;
  int D.25082;
  _Bool D.25083;
  _Bool D.25084;
  const unsigned char * D.25087;
  unsigned char D.25088;
  int D.25089;
  const unsigned char * D.25090;
  unsigned char D.25091;
  int D.25092;
  int D.19752;
  int iftmp.122;
  int D.19751;
  const char[16] * D.25100;
  unsigned char D.25101;
  int D.25102;
  unsigned char D.25103;
  int D.25104;
  _Bool D.25105;
  _Bool D.25106;
  _Bool D.25107;
  const unsigned char * D.25110;
  unsigned char D.25111;
  int D.25112;
  const unsigned char * D.25113;
  unsigned char D.25114;
  int D.25115;
  _Bool D.25116;
  _Bool D.25117;
  const unsigned char * D.25120;
  unsigned char D.25121;
  int D.25122;
  const unsigned char * D.25123;
  unsigned char D.25124;
  int D.25125;
  _Bool D.25126;
  _Bool D.25127;
  const unsigned char * D.25130;
  unsigned char D.25131;
  int D.25132;
  const unsigned char * D.25133;
  unsigned char D.25134;
  int D.25135;
  int D.19761;
  int iftmp.123;
  int D.19760;
  const char[22] * D.25143;
  unsigned char D.25144;
  int D.25145;
  unsigned char D.25146;
  int D.25147;
  _Bool D.25148;
  _Bool D.25149;
  _Bool D.25150;
  const unsigned char * D.25153;
  unsigned char D.25154;
  int D.25155;
  const unsigned char * D.25156;
  unsigned char D.25157;
  int D.25158;
  _Bool D.25159;
  _Bool D.25160;
  const unsigned char * D.25163;
  unsigned char D.25164;
  int D.25165;
  const unsigned char * D.25166;
  unsigned char D.25167;
  int D.25168;
  _Bool D.25169;
  _Bool D.25170;
  const unsigned char * D.25173;
  unsigned char D.25174;
  int D.25175;
  const unsigned char * D.25176;
  unsigned char D.25177;
  int D.25178;
  int D.25183;
  struct MonoClass * * D.25188;
  short unsigned int D.25191;
  int D.25192;
  _Bool D.25193;
  long int D.25194;
  long int D.25195;
  short unsigned int D.25198;
  unsigned int interface_offsets_count.124;
  unsigned int D.25200;
  int D.25201;
  void * D.25202;
  unsigned int D.25203;
  int D.25204;
  void * D.25205;
  int D.25206;
  int D.25207;
  unsigned int D.25208;
  unsigned int iftmp.125;
  int D.25210;
  unsigned int D.25214;
  struct MonoClass * * D.25215;
  struct MonoClass * D.25216;
  short unsigned int D.25217;
  int D.25218;
  sizetype D.25219;
  uint8_t * D.25220;
  unsigned char D.25221;
  signed char D.25222;
  int D.25223;
  int D.25224;
  signed char D.25225;
  signed char D.25226;
  unsigned char D.25227;
  struct MonoClass * * D.25228;
  guint16 * D.25229;
  long unsigned int D.25230;
  guint16 * D.25231;
  short unsigned int D.25232;
  struct GPtrArray * * D.25233;
  int D.25236;
  struct MonoError error;
  struct MonoClass * k;
  struct MonoClass * ic;
  int i;
  int j;
  int max_iid;
  int num_ifaces;
  struct MonoClass * * interfaces_full;
  int * interface_offsets_full;
  struct GPtrArray * ifaces;
  struct GPtrArray * * ifaces_array;
  int interface_offsets_count;
  struct MonoClass * * array_interfaces;
  int num_array_interfaces;
  int is_enumerator;
  void end = <<< error >>>;

  try
    {
      interfaces_full = 0B;
      interface_offsets_full = 0B;
      ifaces_array = 0B;
      array_interfaces = 0B;
      is_enumerator = 0;
      mono_class_setup_supertypes (class);
      array_interfaces = get_implicit_generic_array_interfaces (class, &num_array_interfaces, &is_enumerator);
      max_iid = 0;
      num_ifaces = num_array_interfaces;
      D.24806 = class->idepth;
      D.24807 = (long unsigned int) D.24806;
      D.24808 = D.24807 * 8;
      ifaces_array = monoeg_malloc0 (D.24808);
      j = 0;
      goto <D.19678>;
      <D.19677>:
      D.24809 = class->supertypes;
      D.24810 = (long unsigned int) j;
      D.24811 = D.24810 * 8;
      D.24812 = D.24809 + D.24811;
      k = *D.24812;
      D.24813 = k->interface_count;
      D.24814 = (int) D.24813;
      num_ifaces = D.24814 + num_ifaces;
      i = 0;
      goto <D.19670>;
      <D.19669>:
      D.24815 = k->interfaces;
      D.24816 = (long unsigned int) i;
      D.24817 = D.24816 * 8;
      D.24818 = D.24815 + D.24817;
      ic = *D.24818;
      D.24819 = BIT_FIELD_REF <*ic, 8, 256>;
      D.24820 = D.24819 & 1;
      if (D.24820 == 0) goto <D.24821>; else goto <D.24822>;
      <D.24821>:
      mono_class_init (ic);
      <D.24822>:
      D.24823 = ic->interface_id;
      D.24824 = (int) D.24823;
      if (D.24824 > max_iid) goto <D.24825>; else goto <D.24826>;
      <D.24825>:
      D.24823 = ic->interface_id;
      max_iid = (int) D.24823;
      <D.24826>:
      i = i + 1;
      <D.19670>:
      D.24813 = k->interface_count;
      D.24814 = (int) D.24813;
      if (D.24814 > i) goto <D.19669>; else goto <D.19671>;
      <D.19671>:
      ifaces = mono_class_get_implemented_interfaces (k, &error);
      D.24827 = mono_error_ok (&error);
      if (D.24827 == 0) goto <D.24828>; else goto <D.24829>;
      <D.24828>:
      {
        char * name;

        name = mono_type_get_full_name (k);
        D.24830 = mono_error_get_message (&error);
        D.24831 = monoeg_g_strdup_printf ("Error getting the interfaces of %s due to %s", name, D.24830);
        mono_class_set_failure (class, 7, D.24831);
        monoeg_g_free (name);
        mono_error_cleanup (&error);
        cur_slot = -1;
        goto end;
      }
      <D.24829>:
      if (ifaces != 0B) goto <D.24832>; else goto <D.24833>;
      <D.24832>:
      D.24834 = ifaces->len;
      num_ifaces.110 = (unsigned int) num_ifaces;
      D.24836 = D.24834 + num_ifaces.110;
      num_ifaces = (int) D.24836;
      i = 0;
      goto <D.19675>;
      <D.19674>:
      D.24837 = ifaces->pdata;
      D.24816 = (long unsigned int) i;
      D.24817 = D.24816 * 8;
      D.24838 = D.24837 + D.24817;
      ic = *D.24838;
      D.24823 = ic->interface_id;
      D.24824 = (int) D.24823;
      if (D.24824 > max_iid) goto <D.24839>; else goto <D.24840>;
      <D.24839>:
      D.24823 = ic->interface_id;
      max_iid = (int) D.24823;
      <D.24840>:
      i = i + 1;
      <D.19675>:
      i.111 = (unsigned int) i;
      D.24834 = ifaces->len;
      if (i.111 < D.24834) goto <D.19674>; else goto <D.19676>;
      <D.19676>:
      D.24810 = (long unsigned int) j;
      D.24811 = D.24810 * 8;
      D.24842 = ifaces_array + D.24811;
      *D.24842 = ifaces;
      <D.24833>:
      j = j + 1;
      <D.19678>:
      D.24806 = class->idepth;
      D.24843 = (int) D.24806;
      if (D.24843 > j) goto <D.19677>; else goto <D.19679>;
      <D.19679>:
      i = 0;
      goto <D.19681>;
      <D.19680>:
      D.24816 = (long unsigned int) i;
      D.24817 = D.24816 * 8;
      D.24844 = array_interfaces + D.24817;
      ic = *D.24844;
      mono_class_init (ic);
      D.24823 = ic->interface_id;
      D.24824 = (int) D.24823;
      if (D.24824 > max_iid) goto <D.24845>; else goto <D.24846>;
      <D.24845>:
      D.24823 = ic->interface_id;
      max_iid = (int) D.24823;
      <D.24846>:
      i = i + 1;
      <D.19681>:
      num_array_interfaces.112 = num_array_interfaces;
      if (i < num_array_interfaces.112) goto <D.19680>; else goto <D.19682>;
      <D.19682>:
      D.24850 = class->flags;
      D.24851 = D.24850 & 32;
      if (D.24851 != 0) goto <D.24848>; else goto <D.24852>;
      <D.24852>:
      D.24853 = class->byval_arg.type;
      if (D.24853 == 19) goto <D.24848>; else goto <D.24854>;
      <D.24854>:
      D.24853 = class->byval_arg.type;
      if (D.24853 == 30) goto <D.24848>; else goto <D.24849>;
      <D.24848>:
      num_ifaces = num_ifaces + 1;
      D.24855 = class->interface_id;
      D.24856 = (int) D.24855;
      if (D.24856 > max_iid) goto <D.24857>; else goto <D.24858>;
      <D.24857>:
      D.24855 = class->interface_id;
      max_iid = (int) D.24855;
      <D.24858>:
      <D.24849>:
      D.24859 = (short unsigned int) max_iid;
      class->max_interface_id = D.24859;
      D.24860 = (long unsigned int) num_ifaces;
      D.24861 = D.24860 * 8;
      interfaces_full = monoeg_malloc0 (D.24861);
      D.24860 = (long unsigned int) num_ifaces;
      D.24862 = D.24860 * 4;
      interface_offsets_full = monoeg_malloc (D.24862);
      i = 0;
      goto <D.19684>;
      <D.19683>:
      D.24816 = (long unsigned int) i;
      D.24863 = D.24816 * 4;
      D.24864 = interface_offsets_full + D.24863;
      *D.24864 = -1;
      i = i + 1;
      <D.19684>:
      if (i < num_ifaces) goto <D.19683>; else goto <D.19685>;
      <D.19685>:
      j = 0;
      goto <D.19691>;
      <D.19690>:
      D.24809 = class->supertypes;
      D.24810 = (long unsigned int) j;
      D.24811 = D.24810 * 8;
      D.24812 = D.24809 + D.24811;
      k = *D.24812;
      D.24810 = (long unsigned int) j;
      D.24811 = D.24810 * 8;
      D.24842 = ifaces_array + D.24811;
      ifaces = *D.24842;
      if (ifaces != 0B) goto <D.24865>; else goto <D.24866>;
      <D.24865>:
      i = 0;
      goto <D.19688>;
      <D.19687>:
      {
        int io;

        D.24837 = ifaces->pdata;
        D.24816 = (long unsigned int) i;
        D.24817 = D.24816 * 8;
        D.24838 = D.24837 + D.24817;
        ic = *D.24838;
        io = mono_class_interface_offset (k, ic);
        D.24867 = io < 0;
        D.24868 = (long int) D.24867;
        D.24869 = __builtin_expect (D.24868, 0);
        if (D.24869 != 0) goto <D.24870>; else goto <D.24871>;
        <D.24870>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3372, "io >= 0");
        <D.24871>:
        set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, io, 1);
      }
      i = i + 1;
      <D.19688>:
      i.111 = (unsigned int) i;
      D.24834 = ifaces->len;
      if (i.111 < D.24834) goto <D.19687>; else goto <D.19689>;
      <D.19689>:
      <D.24866>:
      j = j + 1;
      <D.19691>:
      D.24806 = class->idepth;
      D.24843 = (int) D.24806;
      D.24872 = D.24843 + -1;
      if (D.24872 > j) goto <D.19690>; else goto <D.19692>;
      <D.19692>:
      D.24809 = class->supertypes;
      D.24806 = class->idepth;
      D.24807 = (long unsigned int) D.24806;
      D.24808 = D.24807 * 8;
      D.24873 = D.24808 + 18446744073709551608;
      D.24874 = D.24809 + D.24873;
      D.24875 = *D.24874;
      D.24876 = D.24875 != class;
      D.24877 = (long int) D.24876;
      D.24878 = __builtin_expect (D.24877, 0);
      if (D.24878 != 0) goto <D.24879>; else goto <D.24880>;
      <D.24879>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3378, "class == class->supertypes [class->idepth - 1]");
      <D.24880>:
      D.24806 = class->idepth;
      D.24807 = (long unsigned int) D.24806;
      D.24808 = D.24807 * 8;
      D.24873 = D.24808 + 18446744073709551608;
      D.24881 = ifaces_array + D.24873;
      ifaces = *D.24881;
      if (ifaces != 0B) goto <D.24882>; else goto <D.24883>;
      <D.24882>:
      i = 0;
      goto <D.19697>;
      <D.19696>:
      {
        int count;

        D.24837 = ifaces->pdata;
        D.24816 = (long unsigned int) i;
        D.24817 = D.24816 * 8;
        D.24838 = D.24837 + D.24817;
        ic = *D.24838;
        D.24884 = set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, cur_slot, 0);
        if (D.24884 != 0) goto <D.24885>; else goto <D.24886>;
        <D.24885>:
        // predicted unlikely by continue predictor.
        goto <D.19694>;
        <D.24886>:
        count = count_virtual_methods (ic);
        if (count == -1) goto <D.24887>; else goto <D.24888>;
        <D.24887>:
        {
          char * name;

          name = mono_type_get_full_name (ic);
          D.24889 = monoeg_g_strdup_printf ("Error calculating interface offset of %s", name);
          mono_class_set_failure (class, 7, D.24889);
          monoeg_g_free (name);
          cur_slot = -1;
          goto end;
        }
        <D.24888>:
        cur_slot = cur_slot + count;
      }
      <D.19694>:
      i = i + 1;
      <D.19697>:
      i.111 = (unsigned int) i;
      D.24834 = ifaces->len;
      if (i.111 < D.24834) goto <D.19696>; else goto <D.19698>;
      <D.19698>:
      <D.24883>:
      D.24850 = class->flags;
      D.24851 = D.24850 & 32;
      if (D.24851 != 0) goto <D.24890>; else goto <D.24892>;
      <D.24892>:
      D.24853 = class->byval_arg.type;
      if (D.24853 == 19) goto <D.24890>; else goto <D.24893>;
      <D.24893>:
      D.24853 = class->byval_arg.type;
      if (D.24853 == 30) goto <D.24890>; else goto <D.24891>;
      <D.24890>:
      set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, class, cur_slot, 1);
      <D.24891>:
      num_array_interfaces.112 = num_array_interfaces;
      if (num_array_interfaces.112 != 0) goto <D.24894>; else goto <D.24895>;
      <D.24894>:
      is_enumerator.113 = is_enumerator;
      if (is_enumerator.113 != 0) goto <D.24897>; else goto <D.24898>;
      <D.24897>:
      {
        int ienumerator_idx;
        int ienumerator_offset;

        ienumerator_idx = find_array_interface (class, "IEnumerator`1");
        D.24899 = class->interfaces;
        D.24900 = (long unsigned int) ienumerator_idx;
        D.24901 = D.24900 * 8;
        D.24902 = D.24899 + D.24901;
        D.24903 = *D.24902;
        ienumerator_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.24903);
        D.24904 = ienumerator_offset < 0;
        D.24905 = (long int) D.24904;
        D.24906 = __builtin_expect (D.24905, 0);
        if (D.24906 != 0) goto <D.24907>; else goto <D.24908>;
        <D.24907>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3405, "ienumerator_offset >= 0");
        <D.24908>:
        i = 0;
        goto <D.19711>;
        <D.19710>:
        D.24816 = (long unsigned int) i;
        D.24817 = D.24816 * 8;
        D.24844 = array_interfaces + D.24817;
        ic = *D.24844;
        {
          size_t __s1_len;
          size_t __s2_len;

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

            __s2 = ic->name;
            D.24912 = "IEnumerator`1";
            D.24913 = MEM[(const unsigned char *)D.24912];
            D.24914 = (int) D.24913;
            D.24915 = *__s2;
            D.24916 = (int) D.24915;
            __result = D.24914 - D.24916;
            {
              D.24917 = __s2_len != 0;
              D.24918 = __result == 0;
              D.24919 = D.24917 & D.24918;
              if (D.24919 != 0) goto <D.24920>; else goto <D.24921>;
              <D.24920>:
              D.24922 = &MEM[(void *)"IEnumerator`1" + 1B];
              D.24923 = *D.24922;
              D.24924 = (int) D.24923;
              D.24925 = __s2 + 1;
              D.24926 = *D.24925;
              D.24927 = (int) D.24926;
              __result = D.24924 - D.24927;
              D.24928 = __s2_len > 1;
              D.24918 = __result == 0;
              D.24929 = D.24928 & D.24918;
              if (D.24929 != 0) goto <D.24930>; else goto <D.24931>;
              <D.24930>:
              D.24932 = &MEM[(void *)"IEnumerator`1" + 2B];
              D.24933 = *D.24932;
              D.24934 = (int) D.24933;
              D.24935 = __s2 + 2;
              D.24936 = *D.24935;
              D.24937 = (int) D.24936;
              __result = D.24934 - D.24937;
              D.24938 = __s2_len > 2;
              D.24918 = __result == 0;
              D.24939 = D.24938 & D.24918;
              if (D.24939 != 0) goto <D.24940>; else goto <D.24941>;
              <D.24940>:
              D.24942 = &MEM[(void *)"IEnumerator`1" + 3B];
              D.24943 = *D.24942;
              D.24944 = (int) D.24943;
              D.24945 = __s2 + 3;
              D.24946 = *D.24945;
              D.24947 = (int) D.24946;
              __result = D.24944 - D.24947;
              <D.24941>:
              <D.24931>:
              <D.24921>:
            }
            D.19708 = __result;
          }
          iftmp.114 = -D.19708;
          goto <D.24948>;
          <D.24911>:
          D.24949 = ic->name;
          iftmp.114 = __builtin_strcmp (D.24949, "IEnumerator`1");
          <D.24948>:
          D.19709 = iftmp.114;
        }
        if (D.19709 == 0) goto <D.24950>; else goto <D.24951>;
        <D.24950>:
        set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, ienumerator_offset, 1);
        goto <D.24952>;
        <D.24951>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 3411);
        <D.24952>:
        i = i + 1;
        <D.19711>:
        num_array_interfaces.112 = num_array_interfaces;
        if (i < num_array_interfaces.112) goto <D.19710>; else goto <D.19712>;
        <D.19712>:
      }
      goto <D.24953>;
      <D.24898>:
      {
        int ilist_offset;
        int icollection_offset;
        int ienumerable_offset;
        int ireadonlylist_offset;
        int ireadonlycollection_offset;
        int ilist_iface_idx;
        struct MonoClass * ilist_class;
        int ireadonlylist_iface_idx;
        struct MonoClass * ireadonlylist_class;
        int icollection_iface_idx;
        int ienumerable_iface_idx;
        int ireadonlycollection_iface_idx;

        ilist_iface_idx = find_array_interface (class, "IList`1");
        D.24899 = class->interfaces;
        D.24954 = (long unsigned int) ilist_iface_idx;
        D.24955 = D.24954 * 8;
        D.24956 = D.24899 + D.24955;
        ilist_class = *D.24956;
        ireadonlylist_iface_idx = find_array_interface (class, "IReadOnlyList`1");
        if (ireadonlylist_iface_idx != -1) goto <D.24958>; else goto <D.24959>;
        <D.24958>:
        D.24899 = class->interfaces;
        D.24960 = (long unsigned int) ireadonlylist_iface_idx;
        D.24961 = D.24960 * 8;
        D.24962 = D.24899 + D.24961;
        iftmp.115 = *D.24962;
        goto <D.24963>;
        <D.24959>:
        iftmp.115 = 0B;
        <D.24963>:
        ireadonlylist_class = iftmp.115;
        icollection_iface_idx = find_array_interface (ilist_class, "ICollection`1");
        ienumerable_iface_idx = find_array_interface (ilist_class, "IEnumerable`1");
        if (ireadonlylist_iface_idx != -1) goto <D.24965>; else goto <D.24966>;
        <D.24965>:
        iftmp.116 = find_array_interface (ireadonlylist_class, "IReadOnlyCollection`1");
        goto <D.24967>;
        <D.24966>:
        iftmp.116 = -1;
        <D.24967>:
        ireadonlycollection_iface_idx = iftmp.116;
        D.24899 = class->interfaces;
        D.24954 = (long unsigned int) ilist_iface_idx;
        D.24955 = D.24954 * 8;
        D.24956 = D.24899 + D.24955;
        D.24968 = *D.24956;
        ilist_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.24968);
        D.24969 = ilist_class->interfaces;
        D.24970 = (long unsigned int) icollection_iface_idx;
        D.24971 = D.24970 * 8;
        D.24972 = D.24969 + D.24971;
        D.24973 = *D.24972;
        icollection_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.24973);
        D.24969 = ilist_class->interfaces;
        D.24974 = (long unsigned int) ienumerable_iface_idx;
        D.24975 = D.24974 * 8;
        D.24976 = D.24969 + D.24975;
        D.24977 = *D.24976;
        ienumerable_offset = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.24977);
        if (ireadonlylist_iface_idx != -1) goto <D.24979>; else goto <D.24980>;
        <D.24979>:
        D.24899 = class->interfaces;
        D.24960 = (long unsigned int) ireadonlylist_iface_idx;
        D.24961 = D.24960 * 8;
        D.24962 = D.24899 + D.24961;
        D.24981 = *D.24962;
        iftmp.117 = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.24981);
        goto <D.24982>;
        <D.24980>:
        iftmp.117 = -1;
        <D.24982>:
        ireadonlylist_offset = iftmp.117;
        if (ireadonlycollection_iface_idx != -1) goto <D.24984>; else goto <D.24985>;
        <D.24984>:
        D.24986 = ireadonlylist_class->interfaces;
        D.24987 = (long unsigned int) ireadonlycollection_iface_idx;
        D.24988 = D.24987 * 8;
        D.24989 = D.24986 + D.24988;
        D.24990 = *D.24989;
        iftmp.118 = find_interface_offset (num_ifaces, interfaces_full, interface_offsets_full, D.24990);
        goto <D.24991>;
        <D.24985>:
        iftmp.118 = -1;
        <D.24991>:
        ireadonlycollection_offset = iftmp.118;
        D.24996 = ilist_offset < 0;
        D.24997 = icollection_offset < 0;
        D.24998 = D.24996 | D.24997;
        if (D.24998 != 0) goto <D.24993>; else goto <D.24999>;
        <D.24999>:
        if (ienumerable_offset < 0) goto <D.24993>; else goto <D.24994>;
        <D.24993>:
        iftmp.119 = 1;
        goto <D.24995>;
        <D.24994>:
        iftmp.119 = 0;
        <D.24995>:
        D.25000 = iftmp.119 != 0;
        D.25001 = (long int) D.25000;
        D.25002 = __builtin_expect (D.25001, 0);
        if (D.25002 != 0) goto <D.25003>; else goto <D.25004>;
        <D.25003>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3428, "ilist_offset >= 0 && icollection_offset >= 0 && ienumerable_offset >= 0");
        <D.25004>:
        i = 0;
        goto <D.19763>;
        <D.19762>:
        {
          int offset;

          D.24816 = (long unsigned int) i;
          D.24817 = D.24816 * 8;
          D.24844 = array_interfaces + D.24817;
          ic = *D.24844;
          D.25005 = ic->generic_class;
          D.25006 = D.25005->container_class;
          D.25007 = mono_defaults.generic_ilist_class;
          if (D.25006 == D.25007) goto <D.25008>; else goto <D.25009>;
          <D.25008>:
          offset = ilist_offset;
          goto <D.25010>;
          <D.25009>:
          {
            size_t __s1_len;
            size_t __s2_len;

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

              __s2 = ic->name;
              D.25014 = "ICollection`1";
              D.25015 = MEM[(const unsigned char *)D.25014];
              D.25016 = (int) D.25015;
              D.25017 = *__s2;
              D.25018 = (int) D.25017;
              __result = D.25016 - D.25018;
              {
                D.25019 = __s2_len != 0;
                D.25020 = __result == 0;
                D.25021 = D.25019 & D.25020;
                if (D.25021 != 0) goto <D.25022>; else goto <D.25023>;
                <D.25022>:
                D.25024 = &MEM[(void *)"ICollection`1" + 1B];
                D.25025 = *D.25024;
                D.25026 = (int) D.25025;
                D.25027 = __s2 + 1;
                D.25028 = *D.25027;
                D.25029 = (int) D.25028;
                __result = D.25026 - D.25029;
                D.25030 = __s2_len > 1;
                D.25020 = __result == 0;
                D.25031 = D.25030 & D.25020;
                if (D.25031 != 0) goto <D.25032>; else goto <D.25033>;
                <D.25032>:
                D.25034 = &MEM[(void *)"ICollection`1" + 2B];
                D.25035 = *D.25034;
                D.25036 = (int) D.25035;
                D.25037 = __s2 + 2;
                D.25038 = *D.25037;
                D.25039 = (int) D.25038;
                __result = D.25036 - D.25039;
                D.25040 = __s2_len > 2;
                D.25020 = __result == 0;
                D.25041 = D.25040 & D.25020;
                if (D.25041 != 0) goto <D.25042>; else goto <D.25043>;
                <D.25042>:
                D.25044 = &MEM[(void *)"ICollection`1" + 3B];
                D.25045 = *D.25044;
                D.25046 = (int) D.25045;
                D.25047 = __s2 + 3;
                D.25048 = *D.25047;
                D.25049 = (int) D.25048;
                __result = D.25046 - D.25049;
                <D.25043>:
                <D.25033>:
                <D.25023>:
              }
              D.19733 = __result;
            }
            iftmp.120 = -D.19733;
            goto <D.25050>;
            <D.25013>:
            D.24949 = ic->name;
            iftmp.120 = __builtin_strcmp (D.24949, "ICollection`1");
            <D.25050>:
            D.19734 = iftmp.120;
          }
          if (D.19734 == 0) goto <D.25051>; else goto <D.25052>;
          <D.25051>:
          offset = icollection_offset;
          goto <D.25053>;
          <D.25052>:
          {
            size_t __s1_len;
            size_t __s2_len;

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

              __s2 = ic->name;
              D.25057 = "IEnumerable`1";
              D.25058 = MEM[(const unsigned char *)D.25057];
              D.25059 = (int) D.25058;
              D.25060 = *__s2;
              D.25061 = (int) D.25060;
              __result = D.25059 - D.25061;
              {
                D.25062 = __s2_len != 0;
                D.25063 = __result == 0;
                D.25064 = D.25062 & D.25063;
                if (D.25064 != 0) goto <D.25065>; else goto <D.25066>;
                <D.25065>:
                D.25067 = &MEM[(void *)"IEnumerable`1" + 1B];
                D.25068 = *D.25067;
                D.25069 = (int) D.25068;
                D.25070 = __s2 + 1;
                D.25071 = *D.25070;
                D.25072 = (int) D.25071;
                __result = D.25069 - D.25072;
                D.25073 = __s2_len > 1;
                D.25063 = __result == 0;
                D.25074 = D.25073 & D.25063;
                if (D.25074 != 0) goto <D.25075>; else goto <D.25076>;
                <D.25075>:
                D.25077 = &MEM[(void *)"IEnumerable`1" + 2B];
                D.25078 = *D.25077;
                D.25079 = (int) D.25078;
                D.25080 = __s2 + 2;
                D.25081 = *D.25080;
                D.25082 = (int) D.25081;
                __result = D.25079 - D.25082;
                D.25083 = __s2_len > 2;
                D.25063 = __result == 0;
                D.25084 = D.25083 & D.25063;
                if (D.25084 != 0) goto <D.25085>; else goto <D.25086>;
                <D.25085>:
                D.25087 = &MEM[(void *)"IEnumerable`1" + 3B];
                D.25088 = *D.25087;
                D.25089 = (int) D.25088;
                D.25090 = __s2 + 3;
                D.25091 = *D.25090;
                D.25092 = (int) D.25091;
                __result = D.25089 - D.25092;
                <D.25086>:
                <D.25076>:
                <D.25066>:
              }
              D.19742 = __result;
            }
            iftmp.121 = -D.19742;
            goto <D.25093>;
            <D.25056>:
            D.24949 = ic->name;
            iftmp.121 = __builtin_strcmp (D.24949, "IEnumerable`1");
            <D.25093>:
            D.19743 = iftmp.121;
          }
          if (D.19743 == 0) goto <D.25094>; else goto <D.25095>;
          <D.25094>:
          offset = ienumerable_offset;
          goto <D.25096>;
          <D.25095>:
          {
            size_t __s1_len;
            size_t __s2_len;

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

              __s2 = ic->name;
              D.25100 = "IReadOnlyList`1";
              D.25101 = MEM[(const unsigned char *)D.25100];
              D.25102 = (int) D.25101;
              D.25103 = *__s2;
              D.25104 = (int) D.25103;
              __result = D.25102 - D.25104;
              {
                D.25105 = __s2_len != 0;
                D.25106 = __result == 0;
                D.25107 = D.25105 & D.25106;
                if (D.25107 != 0) goto <D.25108>; else goto <D.25109>;
                <D.25108>:
                D.25110 = &MEM[(void *)"IReadOnlyList`1" + 1B];
                D.25111 = *D.25110;
                D.25112 = (int) D.25111;
                D.25113 = __s2 + 1;
                D.25114 = *D.25113;
                D.25115 = (int) D.25114;
                __result = D.25112 - D.25115;
                D.25116 = __s2_len > 1;
                D.25106 = __result == 0;
                D.25117 = D.25116 & D.25106;
                if (D.25117 != 0) goto <D.25118>; else goto <D.25119>;
                <D.25118>:
                D.25120 = &MEM[(void *)"IReadOnlyList`1" + 2B];
                D.25121 = *D.25120;
                D.25122 = (int) D.25121;
                D.25123 = __s2 + 2;
                D.25124 = *D.25123;
                D.25125 = (int) D.25124;
                __result = D.25122 - D.25125;
                D.25126 = __s2_len > 2;
                D.25106 = __result == 0;
                D.25127 = D.25126 & D.25106;
                if (D.25127 != 0) goto <D.25128>; else goto <D.25129>;
                <D.25128>:
                D.25130 = &MEM[(void *)"IReadOnlyList`1" + 3B];
                D.25131 = *D.25130;
                D.25132 = (int) D.25131;
                D.25133 = __s2 + 3;
                D.25134 = *D.25133;
                D.25135 = (int) D.25134;
                __result = D.25132 - D.25135;
                <D.25129>:
                <D.25119>:
                <D.25109>:
              }
              D.19751 = __result;
            }
            iftmp.122 = -D.19751;
            goto <D.25136>;
            <D.25099>:
            D.24949 = ic->name;
            iftmp.122 = __builtin_strcmp (D.24949, "IReadOnlyList`1");
            <D.25136>:
            D.19752 = iftmp.122;
          }
          if (D.19752 == 0) goto <D.25137>; else goto <D.25138>;
          <D.25137>:
          offset = ireadonlylist_offset;
          goto <D.25139>;
          <D.25138>:
          {
            size_t __s1_len;
            size_t __s2_len;

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

              __s2 = ic->name;
              D.25143 = "IReadOnlyCollection`1";
              D.25144 = MEM[(const unsigned char *)D.25143];
              D.25145 = (int) D.25144;
              D.25146 = *__s2;
              D.25147 = (int) D.25146;
              __result = D.25145 - D.25147;
              {
                D.25148 = __s2_len != 0;
                D.25149 = __result == 0;
                D.25150 = D.25148 & D.25149;
                if (D.25150 != 0) goto <D.25151>; else goto <D.25152>;
                <D.25151>:
                D.25153 = &MEM[(void *)"IReadOnlyCollection`1" + 1B];
                D.25154 = *D.25153;
                D.25155 = (int) D.25154;
                D.25156 = __s2 + 1;
                D.25157 = *D.25156;
                D.25158 = (int) D.25157;
                __result = D.25155 - D.25158;
                D.25159 = __s2_len > 1;
                D.25149 = __result == 0;
                D.25160 = D.25159 & D.25149;
                if (D.25160 != 0) goto <D.25161>; else goto <D.25162>;
                <D.25161>:
                D.25163 = &MEM[(void *)"IReadOnlyCollection`1" + 2B];
                D.25164 = *D.25163;
                D.25165 = (int) D.25164;
                D.25166 = __s2 + 2;
                D.25167 = *D.25166;
                D.25168 = (int) D.25167;
                __result = D.25165 - D.25168;
                D.25169 = __s2_len > 2;
                D.25149 = __result == 0;
                D.25170 = D.25169 & D.25149;
                if (D.25170 != 0) goto <D.25171>; else goto <D.25172>;
                <D.25171>:
                D.25173 = &MEM[(void *)"IReadOnlyCollection`1" + 3B];
                D.25174 = *D.25173;
                D.25175 = (int) D.25174;
                D.25176 = __s2 + 3;
                D.25177 = *D.25176;
                D.25178 = (int) D.25177;
                __result = D.25175 - D.25178;
                <D.25172>:
                <D.25162>:
                <D.25152>:
              }
              D.19760 = __result;
            }
            iftmp.123 = -D.19760;
            goto <D.25179>;
            <D.25142>:
            D.24949 = ic->name;
            iftmp.123 = __builtin_strcmp (D.24949, "IReadOnlyCollection`1");
            <D.25179>:
            D.19761 = iftmp.123;
          }
          if (D.19761 == 0) goto <D.25180>; else goto <D.25181>;
          <D.25180>:
          offset = ireadonlycollection_offset;
          goto <D.25182>;
          <D.25181>:
          monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 3443);
          <D.25182>:
          <D.25139>:
          <D.25096>:
          <D.25053>:
          <D.25010>:
          set_interface_and_offset (num_ifaces, interfaces_full, interface_offsets_full, ic, offset, 1);
        }
        i = i + 1;
        <D.19763>:
        num_array_interfaces.112 = num_array_interfaces;
        if (i < num_array_interfaces.112) goto <D.19762>; else goto <D.19764>;
        <D.19764>:
      }
      <D.24953>:
      <D.24895>:
      interface_offsets_count = 0;
      i = 0;
      goto <D.19766>;
      <D.19765>:
      D.24816 = (long unsigned int) i;
      D.24863 = D.24816 * 4;
      D.24864 = interface_offsets_full + D.24863;
      D.25183 = *D.24864;
      if (D.25183 != -1) goto <D.25184>; else goto <D.25185>;
      <D.25184>:
      interface_offsets_count = interface_offsets_count + 1;
      <D.25185>:
      i = i + 1;
      <D.19766>:
      if (i < num_ifaces) goto <D.19765>; else goto <D.19767>;
      <D.19767>:
      D.25188 = class->interfaces_packed;
      if (D.25188 != 0B) goto <D.25189>; else goto <D.25186>;
      <D.25189>:
      if (overwrite == 0) goto <D.25190>; else goto <D.25186>;
      <D.25190>:
      D.25191 = class->interface_offsets_count;
      D.25192 = (int) D.25191;
      D.25193 = D.25192 != interface_offsets_count;
      D.25194 = (long int) D.25193;
      D.25195 = __builtin_expect (D.25194, 0);
      if (D.25195 != 0) goto <D.25196>; else goto <D.25197>;
      <D.25196>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 3465, "class->interface_offsets_count == interface_offsets_count");
      <D.25197>:
      goto <D.25187>;
      <D.25186>:
      {
        uint8_t * bitmap;
        int bsize;

        D.25198 = (short unsigned int) interface_offsets_count;
        class->interface_offsets_count = D.25198;
        interface_offsets_count.124 = (unsigned int) interface_offsets_count;
        D.25200 = interface_offsets_count.124 * 8;
        D.25201 = (int) D.25200;
        D.25202 = mono_class_alloc (class, D.25201);
        class->interfaces_packed = D.25202;
        interface_offsets_count.124 = (unsigned int) interface_offsets_count;
        D.25203 = interface_offsets_count.124 * 2;
        D.25204 = (int) D.25203;
        D.25205 = mono_class_alloc (class, D.25204);
        class->interface_offsets_packed = D.25205;
        D.25206 = max_iid + 1;
        D.25207 = D.25206 >> 3;
        D.25208 = (unsigned int) D.25207;
        D.25206 = max_iid + 1;
        D.25210 = D.25206 & 7;
        if (D.25210 != 0) goto <D.25211>; else goto <D.25212>;
        <D.25211>:
        iftmp.125 = 1;
        goto <D.25213>;
        <D.25212>:
        iftmp.125 = 0;
        <D.25213>:
        D.25214 = D.25208 + iftmp.125;
        bsize = (int) D.25214;
        bitmap = mono_class_alloc0 (class, bsize);
        i = 0;
        goto <D.19772>;
        <D.19771>:
        {
          int id;

          D.24816 = (long unsigned int) i;
          D.24817 = D.24816 * 8;
          D.25215 = interfaces_full + D.24817;
          D.25216 = *D.25215;
          D.25217 = D.25216->interface_id;
          id = (int) D.25217;
          D.25218 = id >> 3;
          D.25219 = (sizetype) D.25218;
          D.25220 = bitmap + D.25219;
          D.25218 = id >> 3;
          D.25219 = (sizetype) D.25218;
          D.25220 = bitmap + D.25219;
          D.25221 = *D.25220;
          D.25222 = (signed char) D.25221;
          D.25223 = id & 7;
          D.25224 = 1 << D.25223;
          D.25225 = (signed char) D.25224;
          D.25226 = D.25222 | D.25225;
          D.25227 = (unsigned char) D.25226;
          *D.25220 = D.25227;
          D.25188 = class->interfaces_packed;
          D.24816 = (long unsigned int) i;
          D.24817 = D.24816 * 8;
          D.25228 = D.25188 + D.24817;
          D.24816 = (long unsigned int) i;
          D.24817 = D.24816 * 8;
          D.25215 = interfaces_full + D.24817;
          D.25216 = *D.25215;
          *D.25228 = D.25216;
          D.25229 = class->interface_offsets_packed;
          D.24816 = (long unsigned int) i;
          D.25230 = D.24816 * 2;
          D.25231 = D.25229 + D.25230;
          D.24816 = (long unsigned int) i;
          D.24863 = D.24816 * 4;
          D.24864 = interface_offsets_full + D.24863;
          D.25183 = *D.24864;
          D.25232 = (short unsigned int) D.25183;
          *D.25231 = D.25232;
        }
        i = i + 1;
        <D.19772>:
        if (i < interface_offsets_count) goto <D.19771>; else goto <D.19773>;
        <D.19773>:
        class->interface_bitmap = bitmap;
      }
      <D.25187>:
      end:
      monoeg_g_free (interfaces_full);
      monoeg_g_free (interface_offsets_full);
      monoeg_g_free (array_interfaces);
      i = 0;
      goto <D.19775>;
      <D.19774>:
      D.24816 = (long unsigned int) i;
      D.24817 = D.24816 * 8;
      D.25233 = ifaces_array + D.24817;
      ifaces = *D.25233;
      if (ifaces != 0B) goto <D.25234>; else goto <D.25235>;
      <D.25234>:
      monoeg_g_ptr_array_free (ifaces, 1);
      <D.25235>:
      i = i + 1;
      <D.19775>:
      D.24806 = class->idepth;
      D.24843 = (int) D.24806;
      if (D.24843 > i) goto <D.19774>; else goto <D.19776>;
      <D.19776>:
      monoeg_g_free (ifaces_array);
      D.25236 = cur_slot;
      return D.25236;
    }
  finally
    {
      error = {CLOBBER};
      num_array_interfaces = {CLOBBER};
      is_enumerator = {CLOBBER};
    }
}


get_implicit_generic_array_interfaces (struct MonoClass * class, int * num, int * is_enumerator)
{
  struct MonoClass * D.25239;
  struct MonoClass * * D.25242;
  unsigned char D.25243;
  unsigned char D.25244;
  struct MonoGenericClass * D.25249;
  struct MonoClass * D.25251;
  struct MonoClass * D.25252;
  int D.19562;
  int iftmp.126;
  int D.19561;
  const char[21] * D.25257;
  unsigned char D.25258;
  int D.25259;
  unsigned char D.25260;
  int D.25261;
  _Bool D.25262;
  _Bool D.25263;
  _Bool D.25264;
  const unsigned char * D.25267;
  unsigned char D.25268;
  int D.25269;
  const unsigned char * D.25270;
  unsigned char D.25271;
  int D.25272;
  _Bool D.25273;
  _Bool D.25274;
  const unsigned char * D.25277;
  unsigned char D.25278;
  int D.25279;
  const unsigned char * D.25280;
  unsigned char D.25281;
  int D.25282;
  _Bool D.25283;
  _Bool D.25284;
  const unsigned char * D.25287;
  unsigned char D.25288;
  int D.25289;
  const unsigned char * D.25290;
  unsigned char D.25291;
  int D.25292;
  const char * D.25294;
  struct MonoGenericInst * D.25296;
  struct MonoType * D.25297;
  int iftmp.127;
  struct MonoClass * D.25305;
  unsigned char D.25306;
  struct MonoClass * generic_icollection_class.128;
  struct MonoImage * D.25310;
  struct MonoClass * generic_icollection_class.129;
  struct MonoClass * generic_ienumerable_class.130;
  struct MonoClass * generic_ienumerator_class.131;
  struct MonoClass * generic_ireadonlylist_class.132;
  struct MonoClass * generic_ireadonlycollection_class.133;
  unsigned char D.25316;
  unsigned char D.25317;
  int iftmp.134;
  struct MonoClass * generic_ireadonlylist_class.135;
  int iftmp.136;
  struct MonoClass * D.25326;
  long unsigned int D.25334;
  long unsigned int D.25335;
  struct MonoClass * D.25336;
  long unsigned int D.25339;
  long unsigned int D.25340;
  struct MonoClass * * D.25341;
  short unsigned int D.25343;
  int iftmp.137;
  unsigned char D.25352;
  _Bool D.25353;
  _Bool D.25354;
  _Bool D.25355;
  struct MonoImage * D.25358;
  unsigned char D.25359;
  unsigned char D.25360;
  unsigned char D.25362;
  int iftmp.138;
  short unsigned int D.25366;
  short unsigned int D.25368;
  unsigned int D.25372;
  unsigned int D.25373;
  unsigned char D.25375;
  unsigned char D.25379;
  unsigned char D.25380;
  int iftmp.139;
  int D.25393;
  int D.25394;
  struct MonoClass * D.25401;
  struct MonoClass * * D.25402;
  long unsigned int D.25403;
  long unsigned int D.25404;
  struct MonoClass * * D.25405;
  struct MonoClass * D.25406;
  long unsigned int D.25407;
  long unsigned int D.25408;
  struct MonoClass * * D.25409;
  struct MonoClass * * D.25412;
  struct MonoClass * * D.25413;
  struct MonoClass * D.25414;
  struct MonoClass * * D.25416;
  struct MonoClass * * D.25417;
  struct MonoClass * D.25418;
  int D.25419;
  unsigned int original_rank.140;
  struct MonoClass * D.25423;
  struct MonoClass * * D.25424;
  struct MonoClass * D.25425;
  sizetype D.25426;
  sizetype D.25427;
  sizetype D.25428;
  struct MonoClass * * D.25429;
  struct MonoClass * D.25430;
  sizetype D.25433;
  sizetype D.25434;
  struct MonoClass * * D.25435;
  struct MonoClass * generic_ienumerable_class.141;
  struct MonoClass * D.25437;
  sizetype D.25440;
  sizetype D.25441;
  struct MonoClass * * D.25442;
  struct MonoClass * D.25443;
  sizetype D.25444;
  sizetype D.25445;
  struct MonoClass * * D.25446;
  struct MonoClass * generic_ireadonlycollection_class.142;
  struct MonoClass * D.25448;
  struct MonoClass * D.25452;
  struct MonoClass * D.25455;
  struct MonoClass * generic_ienumerator_class.143;
  struct MonoClass * D.25457;
  long unsigned int D.25464;
  long unsigned int D.25465;
  struct MonoClass * * D.25466;
  struct MonoClass * D.25467;
  struct MonoClass * D.25468;
  int D.25469;
  struct MonoClass * D.25470;
  int j.144;
  long unsigned int D.25473;
  long unsigned int D.25474;
  struct MonoClass * * D.25475;
  struct MonoClass * D.25476;
  struct MonoClass * D.25477;
  struct MonoClass * D.25480;
  struct MonoClass * D.25481;
  struct MonoClass * eclass;
  static struct MonoClass * generic_icollection_class = 0B;
  static struct MonoClass * generic_ienumerable_class = 0B;
  static struct MonoClass * generic_ienumerator_class = 0B;
  static struct MonoClass * generic_ireadonlylist_class = 0B;
  static struct MonoClass * generic_ireadonlycollection_class = 0B;
  struct MonoClass * valuetype_types[2];
  struct MonoClass * * interfaces;
  int i;
  int nifaces;
  int interface_count;
  int real_count;
  int original_rank;
  int all_interfaces;
  gboolean internal_enumerator;
  gboolean eclass_is_valuetype;

  try
    {
      eclass = class->element_class;
      valuetype_types[0] = 0B;
      valuetype_types[1] = 0B;
      interfaces = 0B;
      D.25239 = mono_defaults.generic_ilist_class;
      if (D.25239 == 0B) goto <D.25240>; else goto <D.25241>;
      <D.25240>:
      *num = 0;
      D.25242 = 0B;
      return D.25242;
      <D.25241>:
      internal_enumerator = 0;
      eclass_is_valuetype = 0;
      D.25243 = eclass->rank;
      original_rank = (int) D.25243;
      D.25244 = class->byval_arg.type;
      if (D.25244 != 29) goto <D.25245>; else goto <D.25246>;
      <D.25245>:
      D.25249 = class->generic_class;
      if (D.25249 != 0B) goto <D.25250>; else goto <D.25247>;
      <D.25250>:
      D.25251 = class->nested_in;
      D.25252 = mono_defaults.array_class;
      if (D.25251 == D.25252) goto <D.25253>; else goto <D.25247>;
      <D.25253>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          __s2 = class->name;
          D.25257 = "InternalEnumerator`1";
          D.25258 = MEM[(const unsigned char *)D.25257];
          D.25259 = (int) D.25258;
          D.25260 = *__s2;
          D.25261 = (int) D.25260;
          __result = D.25259 - D.25261;
          {
            D.25262 = __s2_len != 0;
            D.25263 = __result == 0;
            D.25264 = D.25262 & D.25263;
            if (D.25264 != 0) goto <D.25265>; else goto <D.25266>;
            <D.25265>:
            D.25267 = &MEM[(void *)"InternalEnumerator`1" + 1B];
            D.25268 = *D.25267;
            D.25269 = (int) D.25268;
            D.25270 = __s2 + 1;
            D.25271 = *D.25270;
            D.25272 = (int) D.25271;
            __result = D.25269 - D.25272;
            D.25273 = __s2_len > 1;
            D.25263 = __result == 0;
            D.25274 = D.25273 & D.25263;
            if (D.25274 != 0) goto <D.25275>; else goto <D.25276>;
            <D.25275>:
            D.25277 = &MEM[(void *)"InternalEnumerator`1" + 2B];
            D.25278 = *D.25277;
            D.25279 = (int) D.25278;
            D.25280 = __s2 + 2;
            D.25281 = *D.25280;
            D.25282 = (int) D.25281;
            __result = D.25279 - D.25282;
            D.25283 = __s2_len > 2;
            D.25263 = __result == 0;
            D.25284 = D.25283 & D.25263;
            if (D.25284 != 0) goto <D.25285>; else goto <D.25286>;
            <D.25285>:
            D.25287 = &MEM[(void *)"InternalEnumerator`1" + 3B];
            D.25288 = *D.25287;
            D.25289 = (int) D.25288;
            D.25290 = __s2 + 3;
            D.25291 = *D.25290;
            D.25292 = (int) D.25291;
            __result = D.25289 - D.25292;
            <D.25286>:
            <D.25276>:
            <D.25266>:
          }
          D.19561 = __result;
        }
        iftmp.126 = -D.19561;
        goto <D.25293>;
        <D.25256>:
        D.25294 = class->name;
        iftmp.126 = __builtin_strcmp (D.25294, "InternalEnumerator`1");
        <D.25293>:
        D.19562 = iftmp.126;
      }
      if (D.19562 == 0) goto <D.25295>; else goto <D.25247>;
      <D.25295>:
      D.25249 = class->generic_class;
      D.25296 = D.25249->context.class_inst;
      D.25297 = D.25296->type_argv[0];
      eclass = mono_class_from_mono_type (D.25297);
      D.25243 = eclass->rank;
      original_rank = (int) D.25243;
      D.25243 = eclass->rank;
      if (D.25243 == 0) goto <D.25298>; else goto <D.25299>;
      <D.25298>:
      eclass = eclass->element_class;
      <D.25299>:
      internal_enumerator = 1;
      *is_enumerator = 1;
      goto <D.25248>;
      <D.25247>:
      *num = 0;
      D.25242 = 0B;
      return D.25242;
      <D.25248>:
      <D.25246>:
      D.25243 = eclass->rank;
      if (D.25243 == 0) goto <D.25301>; else goto <D.25304>;
      <D.25304>:
      D.25305 = eclass->element_class;
      D.25306 = D.25305->rank;
      if (D.25306 == 0) goto <D.25301>; else goto <D.25302>;
      <D.25301>:
      iftmp.127 = 1;
      goto <D.25303>;
      <D.25302>:
      iftmp.127 = 0;
      <D.25303>:
      all_interfaces = iftmp.127;
      generic_icollection_class.128 = generic_icollection_class;
      if (generic_icollection_class.128 == 0B) goto <D.25308>; else goto <D.25309>;
      <D.25308>:
      D.25310 = mono_defaults.corlib;
      generic_icollection_class.129 = mono_class_from_name (D.25310, "System.Collections.Generic", "ICollection`1");
      generic_icollection_class = generic_icollection_class.129;
      D.25310 = mono_defaults.corlib;
      generic_ienumerable_class.130 = mono_class_from_name (D.25310, "System.Collections.Generic", "IEnumerable`1");
      generic_ienumerable_class = generic_ienumerable_class.130;
      D.25310 = mono_defaults.corlib;
      generic_ienumerator_class.131 = mono_class_from_name (D.25310, "System.Collections.Generic", "IEnumerator`1");
      generic_ienumerator_class = generic_ienumerator_class.131;
      D.25310 = mono_defaults.corlib;
      generic_ireadonlylist_class.132 = mono_class_from_name (D.25310, "System.Collections.Generic", "IReadOnlyList`1");
      generic_ireadonlylist_class = generic_ireadonlylist_class.132;
      D.25310 = mono_defaults.corlib;
      generic_ireadonlycollection_class.133 = mono_class_from_name (D.25310, "System.Collections.Generic", "IReadOnlyCollection`1");
      generic_ireadonlycollection_class = generic_ireadonlycollection_class.133;
      <D.25309>:
      mono_class_init (eclass);
      D.25316 = BIT_FIELD_REF <*eclass, 8, 256>;
      D.25317 = D.25316 & 8;
      if (D.25317 != 0) goto <D.25318>; else goto <D.25319>;
      <D.25318>:
      generic_ireadonlylist_class.135 = generic_ireadonlylist_class;
      if (generic_ireadonlylist_class.135 != 0B) goto <D.25322>; else goto <D.25323>;
      <D.25322>:
      iftmp.134 = 5;
      goto <D.25324>;
      <D.25323>:
      iftmp.134 = 3;
      <D.25324>:
      nifaces = iftmp.134;
      fill_valuetype_array_derived_types (&valuetype_types, eclass, original_rank);
      D.25326 = valuetype_types[1];
      if (D.25326 != 0B) goto <D.25327>; else goto <D.25328>;
      <D.25327>:
      iftmp.136 = nifaces * 2;
      goto <D.25329>;
      <D.25328>:
      iftmp.136 = nifaces;
      <D.25329>:
      interface_count = iftmp.136;
      real_count = interface_count;
      if (internal_enumerator != 0) goto <D.25330>; else goto <D.25331>;
      <D.25330>:
      real_count = real_count + 1;
      D.25326 = valuetype_types[1];
      if (D.25326 != 0B) goto <D.25332>; else goto <D.25333>;
      <D.25332>:
      real_count = real_count + 1;
      <D.25333>:
      <D.25331>:
      D.25334 = (long unsigned int) real_count;
      D.25335 = D.25334 * 8;
      interfaces = monoeg_malloc0 (D.25335);
      D.25336 = valuetype_types[0];
      *interfaces = D.25336;
      D.25326 = valuetype_types[1];
      if (D.25326 != 0B) goto <D.25337>; else goto <D.25338>;
      <D.25337>:
      D.25339 = (long unsigned int) nifaces;
      D.25340 = D.25339 * 8;
      D.25341 = interfaces + D.25340;
      D.25326 = valuetype_types[1];
      *D.25341 = D.25326;
      <D.25338>:
      eclass_is_valuetype = 1;
      goto <D.25342>;
      <D.25319>:
      {
        int j;
        int idepth;

        D.25343 = eclass->idepth;
        idepth = (int) D.25343;
        if (internal_enumerator == 0) goto <D.25344>; else goto <D.25345>;
        <D.25344>:
        idepth = idepth + -1;
        <D.25345>:
        generic_ireadonlylist_class.135 = generic_ireadonlylist_class;
        if (generic_ireadonlylist_class.135 != 0B) goto <D.25347>; else goto <D.25348>;
        <D.25347>:
        iftmp.137 = 2;
        goto <D.25349>;
        <D.25348>:
        iftmp.137 = 3;
        <D.25349>:
        nifaces = iftmp.137;
        D.25352 = eclass->this_arg.type;
        D.25353 = D.25352 != 19;
        D.25354 = D.25352 != 30;
        D.25355 = D.25353 & D.25354;
        if (D.25355 != 0) goto <D.25356>; else goto <D.25357>;
        <D.25356>:
        D.25358 = eclass->image;
        D.25359 = BIT_FIELD_REF <*D.25358, 8, 224>;
        D.25360 = D.25359 & 8;
        if (D.25360 == 0) goto <D.25350>; else goto <D.25361>;
        <D.25361>:
        D.25316 = BIT_FIELD_REF <*eclass, 8, 256>;
        D.25362 = D.25316 & 128;
        if (D.25362 != 0) goto <D.25350>; else goto <D.25351>;
        <D.25350>:
        mono_class_setup_interface_offsets (eclass);
        <D.25351>:
        <D.25357>:
        if (all_interfaces != 0) goto <D.25364>; else goto <D.25365>;
        <D.25364>:
        D.25366 = eclass->interface_offsets_count;
        iftmp.138 = (int) D.25366;
        goto <D.25367>;
        <D.25365>:
        D.25368 = eclass->interface_count;
        iftmp.138 = (int) D.25368;
        <D.25367>:
        interface_count = iftmp.138;
        D.25372 = eclass->flags;
        D.25373 = D.25372 & 32;
        if (D.25373 != 0) goto <D.25369>; else goto <D.25374>;
        <D.25374>:
        D.25375 = eclass->byval_arg.type;
        if (D.25375 == 19) goto <D.25369>; else goto <D.25376>;
        <D.25376>:
        D.25375 = eclass->byval_arg.type;
        if (D.25375 == 30) goto <D.25369>; else goto <D.25370>;
        <D.25369>:
        interface_count = interface_count + 1;
        goto <D.25371>;
        <D.25370>:
        interface_count = interface_count + idepth;
        <D.25371>:
        D.25243 = eclass->rank;
        if (D.25243 != 0) goto <D.25377>; else goto <D.25378>;
        <D.25377>:
        D.25305 = eclass->element_class;
        D.25379 = BIT_FIELD_REF <*D.25305, 8, 256>;
        D.25380 = D.25379 & 8;
        if (D.25380 != 0) goto <D.25381>; else goto <D.25382>;
        <D.25381>:
        D.25305 = eclass->element_class;
        fill_valuetype_array_derived_types (&valuetype_types, D.25305, original_rank);
        D.25326 = valuetype_types[1];
        if (D.25326 != 0B) goto <D.25383>; else goto <D.25384>;
        <D.25383>:
        interface_count = interface_count + 1;
        <D.25384>:
        <D.25382>:
        <D.25378>:
        interface_count = interface_count * nifaces;
        real_count = interface_count;
        if (internal_enumerator != 0) goto <D.25385>; else goto <D.25386>;
        <D.25385>:
        D.25372 = eclass->flags;
        D.25373 = D.25372 & 32;
        if (D.25373 == 0) goto <D.25390>; else goto <D.25388>;
        <D.25390>:
        D.25375 = eclass->byval_arg.type;
        if (D.25375 != 19) goto <D.25391>; else goto <D.25388>;
        <D.25391>:
        D.25375 = eclass->byval_arg.type;
        if (D.25375 != 30) goto <D.25392>; else goto <D.25388>;
        <D.25392>:
        iftmp.139 = idepth;
        goto <D.25389>;
        <D.25388>:
        iftmp.139 = 1;
        <D.25389>:
        D.25366 = eclass->interface_offsets_count;
        D.25393 = (int) D.25366;
        D.25394 = iftmp.139 + D.25393;
        real_count = D.25394 + real_count;
        D.25326 = valuetype_types[1];
        if (D.25326 != 0B) goto <D.25395>; else goto <D.25396>;
        <D.25395>:
        real_count = real_count + 1;
        <D.25396>:
        <D.25386>:
        D.25334 = (long unsigned int) real_count;
        D.25335 = D.25334 * 8;
        interfaces = monoeg_malloc0 (D.25335);
        D.25372 = eclass->flags;
        D.25373 = D.25372 & 32;
        if (D.25373 != 0) goto <D.25397>; else goto <D.25399>;
        <D.25399>:
        D.25375 = eclass->byval_arg.type;
        if (D.25375 == 19) goto <D.25397>; else goto <D.25400>;
        <D.25400>:
        D.25375 = eclass->byval_arg.type;
        if (D.25375 == 30) goto <D.25397>; else goto <D.25398>;
        <D.25397>:
        D.25401 = mono_defaults.object_class;
        *interfaces = D.25401;
        j = nifaces;
        goto <D.19567>;
        <D.25398>:
        j = 0;
        i = 0;
        goto <D.19566>;
        <D.19565>:
        D.25402 = eclass->supertypes;
        D.25403 = (long unsigned int) i;
        D.25404 = D.25403 * 8;
        D.25405 = D.25402 + D.25404;
        D.25406 = *D.25405;
        mono_class_init (D.25406);
        D.25407 = (long unsigned int) j;
        D.25408 = D.25407 * 8;
        D.25409 = interfaces + D.25408;
        D.25402 = eclass->supertypes;
        D.25403 = (long unsigned int) i;
        D.25404 = D.25403 * 8;
        D.25405 = D.25402 + D.25404;
        D.25406 = *D.25405;
        *D.25409 = D.25406;
        j = j + nifaces;
        i = i + 1;
        <D.19566>:
        if (i < idepth) goto <D.19565>; else goto <D.19567>;
        <D.19567>:
        if (all_interfaces != 0) goto <D.25410>; else goto <D.25411>;
        <D.25410>:
        i = 0;
        goto <D.19569>;
        <D.19568>:
        D.25407 = (long unsigned int) j;
        D.25408 = D.25407 * 8;
        D.25409 = interfaces + D.25408;
        D.25412 = eclass->interfaces_packed;
        D.25403 = (long unsigned int) i;
        D.25404 = D.25403 * 8;
        D.25413 = D.25412 + D.25404;
        D.25414 = *D.25413;
        *D.25409 = D.25414;
        j = j + nifaces;
        i = i + 1;
        <D.19569>:
        D.25366 = eclass->interface_offsets_count;
        D.25393 = (int) D.25366;
        if (D.25393 > i) goto <D.19568>; else goto <D.19570>;
        <D.19570>:
        goto <D.25415>;
        <D.25411>:
        i = 0;
        goto <D.19572>;
        <D.19571>:
        D.25407 = (long unsigned int) j;
        D.25408 = D.25407 * 8;
        D.25409 = interfaces + D.25408;
        D.25416 = eclass->interfaces;
        D.25403 = (long unsigned int) i;
        D.25404 = D.25403 * 8;
        D.25417 = D.25416 + D.25404;
        D.25418 = *D.25417;
        *D.25409 = D.25418;
        j = j + nifaces;
        i = i + 1;
        <D.19572>:
        D.25368 = eclass->interface_count;
        D.25419 = (int) D.25368;
        if (D.25419 > i) goto <D.19571>; else goto <D.19573>;
        <D.19573>:
        <D.25415>:
        D.25326 = valuetype_types[1];
        if (D.25326 != 0B) goto <D.25420>; else goto <D.25421>;
        <D.25420>:
        D.25407 = (long unsigned int) j;
        D.25408 = D.25407 * 8;
        D.25409 = interfaces + D.25408;
        original_rank.140 = (unsigned int) original_rank;
        D.25326 = valuetype_types[1];
        D.25423 = array_class_get_if_rank (D.25326, original_rank.140);
        *D.25409 = D.25423;
        j = j + nifaces;
        <D.25421>:
      }
      <D.25342>:
      i = 0;
      goto <D.19576>;
      <D.19575>:
      {
        struct MonoClass * iface;

        D.25403 = (long unsigned int) i;
        D.25404 = D.25403 * 8;
        D.25424 = interfaces + D.25404;
        iface = *D.25424;
        D.25403 = (long unsigned int) i;
        D.25404 = D.25403 * 8;
        D.25424 = interfaces + D.25404;
        D.25239 = mono_defaults.generic_ilist_class;
        D.25425 = inflate_class_one_arg (D.25239, iface);
        *D.25424 = D.25425;
        D.25426 = (sizetype) i;
        D.25427 = D.25426 + 1;
        D.25428 = D.25427 * 8;
        D.25429 = interfaces + D.25428;
        generic_icollection_class.128 = generic_icollection_class;
        D.25430 = inflate_class_one_arg (generic_icollection_class.128, iface);
        *D.25429 = D.25430;
        D.25316 = BIT_FIELD_REF <*eclass, 8, 256>;
        D.25317 = D.25316 & 8;
        if (D.25317 != 0) goto <D.25431>; else goto <D.25432>;
        <D.25431>:
        D.25426 = (sizetype) i;
        D.25433 = D.25426 + 2;
        D.25434 = D.25433 * 8;
        D.25435 = interfaces + D.25434;
        generic_ienumerable_class.141 = generic_ienumerable_class;
        D.25437 = inflate_class_one_arg (generic_ienumerable_class.141, iface);
        *D.25435 = D.25437;
        generic_ireadonlylist_class.135 = generic_ireadonlylist_class;
        if (generic_ireadonlylist_class.135 != 0B) goto <D.25438>; else goto <D.25439>;
        <D.25438>:
        D.25426 = (sizetype) i;
        D.25440 = D.25426 + 3;
        D.25441 = D.25440 * 8;
        D.25442 = interfaces + D.25441;
        generic_ireadonlylist_class.135 = generic_ireadonlylist_class;
        D.25443 = inflate_class_one_arg (generic_ireadonlylist_class.135, iface);
        *D.25442 = D.25443;
        D.25426 = (sizetype) i;
        D.25444 = D.25426 + 4;
        D.25445 = D.25444 * 8;
        D.25446 = interfaces + D.25445;
        generic_ireadonlycollection_class.142 = generic_ireadonlycollection_class;
        D.25448 = inflate_class_one_arg (generic_ireadonlycollection_class.142, iface);
        *D.25446 = D.25448;
        <D.25439>:
        goto <D.25449>;
        <D.25432>:
        generic_ireadonlylist_class.135 = generic_ireadonlylist_class;
        if (generic_ireadonlylist_class.135 == 0B) goto <D.25450>; else goto <D.25451>;
        <D.25450>:
        D.25426 = (sizetype) i;
        D.25433 = D.25426 + 2;
        D.25434 = D.25433 * 8;
        D.25435 = interfaces + D.25434;
        generic_ienumerable_class.141 = generic_ienumerable_class;
        D.25452 = inflate_class_one_arg (generic_ienumerable_class.141, iface);
        *D.25435 = D.25452;
        <D.25451>:
        <D.25449>:
      }
      i = i + nifaces;
      <D.19576>:
      if (i < interface_count) goto <D.19575>; else goto <D.19577>;
      <D.19577>:
      if (internal_enumerator != 0) goto <D.25453>; else goto <D.25454>;
      <D.25453>:
      {
        int j;

        i = 0;
        goto <D.19580>;
        <D.19579>:
        D.25403 = (long unsigned int) i;
        D.25404 = D.25403 * 8;
        D.25424 = interfaces + D.25404;
        D.25403 = (long unsigned int) i;
        D.25404 = D.25403 * 8;
        D.25424 = interfaces + D.25404;
        D.25455 = *D.25424;
        generic_ienumerator_class.143 = generic_ienumerator_class;
        D.25457 = inflate_class_one_arg (generic_ienumerator_class.143, D.25455);
        *D.25424 = D.25457;
        i = i + 1;
        <D.19580>:
        if (i < interface_count) goto <D.19579>; else goto <D.19581>;
        <D.19581>:
        j = interface_count;
        if (eclass_is_valuetype == 0) goto <D.25458>; else goto <D.25459>;
        <D.25458>:
        D.25372 = eclass->flags;
        D.25373 = D.25372 & 32;
        if (D.25373 != 0) goto <D.25460>; else goto <D.25462>;
        <D.25462>:
        D.25375 = eclass->byval_arg.type;
        if (D.25375 == 19) goto <D.25460>; else goto <D.25463>;
        <D.25463>:
        D.25375 = eclass->byval_arg.type;
        if (D.25375 == 30) goto <D.25460>; else goto <D.25461>;
        <D.25460>:
        D.25464 = (long unsigned int) j;
        D.25465 = D.25464 * 8;
        D.25466 = interfaces + D.25465;
        D.25401 = mono_defaults.object_class;
        generic_ienumerator_class.143 = generic_ienumerator_class;
        D.25467 = inflate_class_one_arg (generic_ienumerator_class.143, D.25401);
        *D.25466 = D.25467;
        j = j + 1;
        goto <D.19584>;
        <D.25461>:
        i = 0;
        goto <D.19583>;
        <D.19582>:
        D.25464 = (long unsigned int) j;
        D.25465 = D.25464 * 8;
        D.25466 = interfaces + D.25465;
        D.25402 = eclass->supertypes;
        D.25403 = (long unsigned int) i;
        D.25404 = D.25403 * 8;
        D.25405 = D.25402 + D.25404;
        D.25406 = *D.25405;
        generic_ienumerator_class.143 = generic_ienumerator_class;
        D.25468 = inflate_class_one_arg (generic_ienumerator_class.143, D.25406);
        *D.25466 = D.25468;
        j = j + 1;
        i = i + 1;
        <D.19583>:
        D.25343 = eclass->idepth;
        D.25469 = (int) D.25343;
        if (D.25469 > i) goto <D.19582>; else goto <D.19584>;
        <D.19584>:
        i = 0;
        goto <D.19586>;
        <D.19585>:
        D.25464 = (long unsigned int) j;
        D.25465 = D.25464 * 8;
        D.25466 = interfaces + D.25465;
        D.25412 = eclass->interfaces_packed;
        D.25403 = (long unsigned int) i;
        D.25404 = D.25403 * 8;
        D.25413 = D.25412 + D.25404;
        D.25414 = *D.25413;
        generic_ienumerator_class.143 = generic_ienumerator_class;
        D.25470 = inflate_class_one_arg (generic_ienumerator_class.143, D.25414);
        *D.25466 = D.25470;
        j = j + 1;
        i = i + 1;
        <D.19586>:
        D.25366 = eclass->interface_offsets_count;
        D.25393 = (int) D.25366;
        if (D.25393 > i) goto <D.19585>; else goto <D.19587>;
        <D.19587>:
        goto <D.25471>;
        <D.25459>:
        j.144 = j;
        j = j.144 + 1;
        D.25473 = (long unsigned int) j.144;
        D.25474 = D.25473 * 8;
        D.25475 = interfaces + D.25474;
        original_rank.140 = (unsigned int) original_rank;
        D.25336 = valuetype_types[0];
        D.25476 = array_class_get_if_rank (D.25336, original_rank.140);
        generic_ienumerator_class.143 = generic_ienumerator_class;
        D.25477 = inflate_class_one_arg (generic_ienumerator_class.143, D.25476);
        *D.25475 = D.25477;
        <D.25471>:
        D.25326 = valuetype_types[1];
        if (D.25326 != 0B) goto <D.25478>; else goto <D.25479>;
        <D.25478>:
        D.25464 = (long unsigned int) j;
        D.25465 = D.25464 * 8;
        D.25466 = interfaces + D.25465;
        original_rank.140 = (unsigned int) original_rank;
        D.25326 = valuetype_types[1];
        D.25480 = array_class_get_if_rank (D.25326, original_rank.140);
        generic_ienumerator_class.143 = generic_ienumerator_class;
        D.25481 = inflate_class_one_arg (generic_ienumerator_class.143, D.25480);
        *D.25466 = D.25481;
        <D.25479>:
      }
      <D.25454>:
      *num = real_count;
      D.25242 = interfaces;
      return D.25242;
    }
  finally
    {
      valuetype_types = {CLOBBER};
    }
}


fill_valuetype_array_derived_types (struct MonoClass * * valuetype_types, struct MonoClass * eclass, int rank)
{
  struct MonoClass * D.25484;
  struct MonoClass * * D.25487;
  struct MonoClass * D.25488;
  struct MonoClass * D.25493;
  struct MonoClass * D.25496;
  struct MonoClass * D.25501;
  struct MonoClass * D.25504;
  struct MonoClass * D.25509;
  struct MonoClass * D.25512;
  unsigned char D.25517;
  unsigned char D.25518;
  struct MonoType * D.25521;
  struct MonoType * D.25524;
  struct MonoClass * D.25525;

  *valuetype_types = eclass;
  D.25484 = mono_defaults.int16_class;
  if (D.25484 == eclass) goto <D.25485>; else goto <D.25486>;
  <D.25485>:
  D.25487 = valuetype_types + 8;
  D.25488 = mono_defaults.uint16_class;
  *D.25487 = D.25488;
  goto <D.25489>;
  <D.25486>:
  D.25488 = mono_defaults.uint16_class;
  if (D.25488 == eclass) goto <D.25490>; else goto <D.25491>;
  <D.25490>:
  D.25487 = valuetype_types + 8;
  D.25484 = mono_defaults.int16_class;
  *D.25487 = D.25484;
  goto <D.25492>;
  <D.25491>:
  D.25493 = mono_defaults.int32_class;
  if (D.25493 == eclass) goto <D.25494>; else goto <D.25495>;
  <D.25494>:
  D.25487 = valuetype_types + 8;
  D.25496 = mono_defaults.uint32_class;
  *D.25487 = D.25496;
  goto <D.25497>;
  <D.25495>:
  D.25496 = mono_defaults.uint32_class;
  if (D.25496 == eclass) goto <D.25498>; else goto <D.25499>;
  <D.25498>:
  D.25487 = valuetype_types + 8;
  D.25493 = mono_defaults.int32_class;
  *D.25487 = D.25493;
  goto <D.25500>;
  <D.25499>:
  D.25501 = mono_defaults.int64_class;
  if (D.25501 == eclass) goto <D.25502>; else goto <D.25503>;
  <D.25502>:
  D.25487 = valuetype_types + 8;
  D.25504 = mono_defaults.uint64_class;
  *D.25487 = D.25504;
  goto <D.25505>;
  <D.25503>:
  D.25504 = mono_defaults.uint64_class;
  if (D.25504 == eclass) goto <D.25506>; else goto <D.25507>;
  <D.25506>:
  D.25487 = valuetype_types + 8;
  D.25501 = mono_defaults.int64_class;
  *D.25487 = D.25501;
  goto <D.25508>;
  <D.25507>:
  D.25509 = mono_defaults.byte_class;
  if (D.25509 == eclass) goto <D.25510>; else goto <D.25511>;
  <D.25510>:
  D.25487 = valuetype_types + 8;
  D.25512 = mono_defaults.sbyte_class;
  *D.25487 = D.25512;
  goto <D.25513>;
  <D.25511>:
  D.25512 = mono_defaults.sbyte_class;
  if (D.25512 == eclass) goto <D.25514>; else goto <D.25515>;
  <D.25514>:
  D.25487 = valuetype_types + 8;
  D.25509 = mono_defaults.byte_class;
  *D.25487 = D.25509;
  goto <D.25516>;
  <D.25515>:
  D.25517 = BIT_FIELD_REF <*eclass, 8, 256>;
  D.25518 = D.25517 & 16;
  if (D.25518 != 0) goto <D.25519>; else goto <D.25520>;
  <D.25519>:
  D.25521 = mono_class_enum_basetype (eclass);
  if (D.25521 != 0B) goto <D.25522>; else goto <D.25523>;
  <D.25522>:
  D.25487 = valuetype_types + 8;
  D.25524 = mono_class_enum_basetype (eclass);
  D.25525 = mono_class_from_mono_type (D.25524);
  *D.25487 = D.25525;
  <D.25523>:
  <D.25520>:
  <D.25516>:
  <D.25513>:
  <D.25508>:
  <D.25505>:
  <D.25500>:
  <D.25497>:
  <D.25492>:
  <D.25489>:
}


array_class_get_if_rank (struct MonoClass * class, guint rank)
{
  struct MonoClass * D.25526;
  struct MonoClass * iftmp.145;

  if (rank != 0) goto <D.25528>; else goto <D.25529>;
  <D.25528>:
  iftmp.145 = mono_array_class_get (class, rank);
  goto <D.25530>;
  <D.25529>:
  iftmp.145 = class;
  <D.25530>:
  D.25526 = iftmp.145;
  return D.25526;
}


inflate_class_one_arg (struct MonoClass * gtype, struct MonoClass * arg0)
{
  struct MonoType * D.25532;
  struct MonoClass * D.25533;
  struct MonoType * args[1];

  try
    {
      D.25532 = &arg0->byval_arg;
      args[0] = D.25532;
      D.25533 = mono_class_bind_generic_parameters (gtype, 1, &args, 0);
      return D.25533;
    }
  finally
    {
      args = {CLOBBER};
    }
}


count_virtual_methods (struct MonoClass * class)
{
  struct MonoMethod * * D.25538;
  unsigned int D.25540;
  struct MonoImage * D.25542;
  unsigned char D.25543;
  unsigned char D.25544;
  struct MonoGenericClass * D.25546;
  unsigned char D.25547;
  int D.25550;
  long unsigned int D.25551;
  long unsigned int D.25552;
  struct MonoMethod * * D.25553;
  struct MonoMethod * D.25554;
  short unsigned int D.25555;
  unsigned int D.25556;
  unsigned int i.146;
  unsigned int D.25560;
  unsigned int D.25561;
  unsigned int D.25562;
  int D.25563;
  int i;
  int count;
  guint32 flags;

  count = 0;
  class = mono_class_get_generic_type_definition (class);
  D.25538 = class->methods;
  if (D.25538 != 0B) goto <D.25536>; else goto <D.25539>;
  <D.25539>:
  D.25540 = class->type_token;
  if (D.25540 == 0) goto <D.25536>; else goto <D.25541>;
  <D.25541>:
  D.25542 = class->image;
  D.25543 = BIT_FIELD_REF <*D.25542, 8, 224>;
  D.25544 = D.25543 & 8;
  if (D.25544 != 0) goto <D.25536>; else goto <D.25545>;
  <D.25545>:
  D.25546 = class->generic_class;
  if (D.25546 != 0B) goto <D.25536>; else goto <D.25537>;
  <D.25536>:
  mono_class_setup_methods (class);
  D.25547 = class->exception_type;
  if (D.25547 != 0) goto <D.25548>; else goto <D.25549>;
  <D.25548>:
  D.25550 = -1;
  return D.25550;
  <D.25549>:
  i = 0;
  goto <D.19612>;
  <D.19611>:
  D.25538 = class->methods;
  D.25551 = (long unsigned int) i;
  D.25552 = D.25551 * 8;
  D.25553 = D.25538 + D.25552;
  D.25554 = *D.25553;
  D.25555 = D.25554->flags;
  flags = (guint32) D.25555;
  D.25556 = flags & 64;
  if (D.25556 != 0) goto <D.25557>; else goto <D.25558>;
  <D.25557>:
  count = count + 1;
  <D.25558>:
  i = i + 1;
  <D.19612>:
  i.146 = (unsigned int) i;
  D.25560 = class->method.count;
  if (i.146 < D.25560) goto <D.19611>; else goto <D.19613>;
  <D.19613>:
  goto <D.19616>;
  <D.25537>:
  i = 0;
  goto <D.19615>;
  <D.19614>:
  D.25561 = class->method.first;
  i.146 = (unsigned int) i;
  D.25562 = D.25561 + i.146;
  D.25563 = (int) D.25562;
  D.25542 = class->image;
  flags = mono_metadata_decode_table_row_col (D.25542, 6, D.25563, 2);
  D.25556 = flags & 64;
  if (D.25556 != 0) goto <D.25564>; else goto <D.25565>;
  <D.25564>:
  count = count + 1;
  <D.25565>:
  i = i + 1;
  <D.19615>:
  i.146 = (unsigned int) i;
  D.25560 = class->method.count;
  if (i.146 < D.25560) goto <D.19614>; else goto <D.19616>;
  <D.19616>:
  D.25550 = count;
  return D.25550;
}


find_array_interface (struct MonoClass * klass, const char * name)
{
  int D.19601;
  struct MonoClass * * D.25567;
  long unsigned int D.25568;
  long unsigned int D.25569;
  struct MonoClass * * D.25570;
  struct MonoClass * D.25571;
  const char * D.25572;
  int D.25575;
  short unsigned int D.25576;
  int D.25577;
  int i;

  i = 0;
  goto <D.19603>;
  <D.19602>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.25567 = klass->interfaces;
    D.25568 = (long unsigned int) i;
    D.25569 = D.25568 * 8;
    D.25570 = D.25567 + D.25569;
    D.25571 = *D.25570;
    D.25572 = D.25571->name;
    D.19601 = __builtin_strcmp (D.25572, name);
  }
  if (D.19601 == 0) goto <D.25573>; else goto <D.25574>;
  <D.25573>:
  D.25575 = i;
  return D.25575;
  <D.25574>:
  i = i + 1;
  <D.19603>:
  D.25576 = klass->interface_count;
  D.25577 = (int) D.25576;
  if (D.25577 > i) goto <D.19602>; else goto <D.19604>;
  <D.19604>:
  D.25575 = -1;
  return D.25575;
}


find_interface_offset (int num_ifaces, struct MonoClass * * interfaces_full, int * interface_offsets_full, struct MonoClass * ic)
{
  int D.25581;
  long unsigned int D.25582;
  long unsigned int D.25583;
  int * D.25584;
  int i;

  i = find_interface (num_ifaces, interfaces_full, ic);
  if (1 != 0) goto <D.25579>; else goto <D.25580>;
  <D.25579>:
  D.25582 = (long unsigned int) i;
  D.25583 = D.25582 * 4;
  D.25584 = interface_offsets_full + D.25583;
  D.25581 = *D.25584;
  return D.25581;
  <D.25580>:
  D.25581 = -1;
  return D.25581;
}


find_interface (int num_ifaces, struct MonoClass * * interfaces_full, struct MonoClass * ic)
{
  int D.25588;
  int D.25591;
  long unsigned int D.25592;
  long unsigned int D.25593;
  struct MonoClass * * D.25594;
  struct MonoClass * D.25595;
  short unsigned int D.25604;
  short unsigned int D.25605;
  int m;
  int l;

  l = 0;
  if (num_ifaces == 0) goto <D.25586>; else goto <D.25587>;
  <D.25586>:
  D.25588 = -1;
  return D.25588;
  <D.25587>:
  <D.19624>:
  if (l > num_ifaces) goto <D.25589>; else goto <D.25590>;
  <D.25589>:
  D.25588 = -1;
  return D.25588;
  <D.25590>:
  D.25591 = l + num_ifaces;
  m = D.25591 / 2;
  D.25592 = (long unsigned int) m;
  D.25593 = D.25592 * 8;
  D.25594 = interfaces_full + D.25593;
  D.25595 = *D.25594;
  if (D.25595 == ic) goto <D.25596>; else goto <D.25597>;
  <D.25596>:
  D.25588 = m;
  return D.25588;
  <D.25597>:
  if (l == num_ifaces) goto <D.25598>; else goto <D.25599>;
  <D.25598>:
  D.25588 = -1;
  return D.25588;
  <D.25599>:
  D.25592 = (long unsigned int) m;
  D.25593 = D.25592 * 8;
  D.25594 = interfaces_full + D.25593;
  D.25595 = *D.25594;
  if (D.25595 == 0B) goto <D.25600>; else goto <D.25603>;
  <D.25603>:
  D.25592 = (long unsigned int) m;
  D.25593 = D.25592 * 8;
  D.25594 = interfaces_full + D.25593;
  D.25595 = *D.25594;
  D.25604 = D.25595->interface_id;
  D.25605 = ic->interface_id;
  if (D.25604 > D.25605) goto <D.25600>; else goto <D.25601>;
  <D.25600>:
  num_ifaces = m + -1;
  goto <D.25602>;
  <D.25601>:
  l = m + 1;
  <D.25602>:
  goto <D.19624>;
}


set_interface_and_offset (int num_ifaces, struct MonoClass * * interfaces_full, int * interface_offsets_full, struct MonoClass * ic, int offset, mono_bool force_set)
{
  mono_bool D.25611;
  long unsigned int D.25612;
  long unsigned int D.25613;
  int * D.25614;
  long unsigned int D.25615;
  struct MonoClass * * D.25616;
  struct MonoClass * D.25617;
  short unsigned int D.25620;
  short unsigned int D.25621;
  long unsigned int D.25625;
  long unsigned int D.25626;
  struct MonoClass * * D.25627;
  struct MonoClass * D.25628;
  int D.25629;
  long unsigned int D.25630;
  long unsigned int D.25631;
  const void * D.25632;
  sizetype D.25633;
  sizetype D.25634;
  sizetype D.25635;
  struct MonoClass * * D.25636;
  long unsigned int D.25637;
  const void * D.25638;
  sizetype D.25639;
  int * D.25640;
  int i;

  i = find_interface (num_ifaces, interfaces_full, ic);
  if (i >= 0) goto <D.25607>; else goto <D.25608>;
  <D.25607>:
  if (force_set == 0) goto <D.25609>; else goto <D.25610>;
  <D.25609>:
  D.25611 = 1;
  return D.25611;
  <D.25610>:
  D.25612 = (long unsigned int) i;
  D.25613 = D.25612 * 4;
  D.25614 = interface_offsets_full + D.25613;
  *D.25614 = offset;
  D.25611 = 0;
  return D.25611;
  <D.25608>:
  i = 0;
  goto <D.19648>;
  <D.19647>:
  D.25612 = (long unsigned int) i;
  D.25615 = D.25612 * 8;
  D.25616 = interfaces_full + D.25615;
  D.25617 = *D.25616;
  if (D.25617 != 0B) goto <D.25618>; else goto <D.25619>;
  <D.25618>:
  {
    int end;

    D.25612 = (long unsigned int) i;
    D.25615 = D.25612 * 8;
    D.25616 = interfaces_full + D.25615;
    D.25617 = *D.25616;
    D.25620 = D.25617->interface_id;
    D.25621 = ic->interface_id;
    if (D.25620 < D.25621) goto <D.25622>; else goto <D.25623>;
    <D.25622>:
    // predicted unlikely by continue predictor.
    goto <D.19642>;
    <D.25623>:
    end = i + 1;
    goto <D.19644>;
    <D.19643>:
    end = end + 1;
    <D.19644>:
    if (end < num_ifaces) goto <D.25624>; else goto <D.19645>;
    <D.25624>:
    D.25625 = (long unsigned int) end;
    D.25626 = D.25625 * 8;
    D.25627 = interfaces_full + D.25626;
    D.25628 = *D.25627;
    if (D.25628 != 0B) goto <D.19643>; else goto <D.19645>;
    <D.19645>:
    D.25629 = end - i;
    D.25630 = (long unsigned int) D.25629;
    D.25631 = D.25630 * 8;
    D.25612 = (long unsigned int) i;
    D.25615 = D.25612 * 8;
    D.25632 = interfaces_full + D.25615;
    D.25633 = (sizetype) i;
    D.25634 = D.25633 + 1;
    D.25635 = D.25634 * 8;
    D.25636 = interfaces_full + D.25635;
    memmove (D.25636, D.25632, D.25631);
    D.25629 = end - i;
    D.25630 = (long unsigned int) D.25629;
    D.25637 = D.25630 * 4;
    D.25612 = (long unsigned int) i;
    D.25613 = D.25612 * 4;
    D.25638 = interface_offsets_full + D.25613;
    D.25633 = (sizetype) i;
    D.25634 = D.25633 + 1;
    D.25639 = D.25634 * 4;
    D.25640 = interface_offsets_full + D.25639;
    memmove (D.25640, D.25638, D.25637);
  }
  <D.25619>:
  D.25612 = (long unsigned int) i;
  D.25615 = D.25612 * 8;
  D.25616 = interfaces_full + D.25615;
  *D.25616 = ic;
  D.25612 = (long unsigned int) i;
  D.25613 = D.25612 * 4;
  D.25614 = interface_offsets_full + D.25613;
  *D.25614 = offset;
  goto <D.19646>;
  <D.19642>:
  i = i + 1;
  <D.19648>:
  if (i < num_ifaces) goto <D.19647>; else goto <D.19646>;
  <D.19646>:
  D.25611 = 0;
  return D.25611;
}


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

  D.25643 = __builtin_object_size (__dest, 0);
  D.25642 = __builtin___memmove_chk (__dest, __src, __len, D.25643);
  return D.25642;
}


mono_class_check_vtable_constraints (struct MonoClass * class, struct GList * in_setup)
{
  struct MonoGenericClass * D.25645;
  gboolean D.25648;
  unsigned char D.25649;
  _Bool D.25650;
  struct MonoClass * D.25651;
  struct MonoClass * D.25652;
  unsigned char D.25653;
  gchar * D.25656;
  struct MonoType * D.25657;
  unsigned char D.25658;
  int D.25663;
  int D.25665;
  int D.25666;
  gchar * D.25669;
  <unnamed-unsigned:22> D.25670;
  int D.25671;
  struct MonoGenericInst * ginst;
  int i;

  D.25645 = class->generic_class;
  if (D.25645 == 0B) goto <D.25646>; else goto <D.25647>;
  <D.25646>:
  mono_class_setup_vtable_full (class, in_setup);
  D.25649 = class->exception_type;
  D.25650 = D.25649 == 0;
  D.25648 = (gboolean) D.25650;
  return D.25648;
  <D.25647>:
  D.25651 = mono_class_get_generic_type_definition (class);
  mono_class_setup_vtable_full (D.25651, in_setup);
  D.25645 = class->generic_class;
  D.25652 = D.25645->container_class;
  D.25653 = D.25652->exception_type;
  if (D.25653 != 0) goto <D.25654>; else goto <D.25655>;
  <D.25654>:
  D.25656 = monoeg_strdup ("Failed to load generic definition vtable");
  mono_class_set_failure (class, 7, D.25656);
  D.25648 = 0;
  return D.25648;
  <D.25655>:
  D.25645 = class->generic_class;
  ginst = D.25645->context.class_inst;
  i = 0;
  goto <D.19793>;
  <D.19792>:
  {
    struct MonoClass * arg;

    D.25657 = ginst->type_argv[i];
    D.25658 = D.25657->type;
    if (D.25658 != 21) goto <D.25659>; else goto <D.25660>;
    <D.25659>:
    // predicted unlikely by continue predictor.
    goto <D.19791>;
    <D.25660>:
    D.25657 = ginst->type_argv[i];
    arg = mono_class_from_mono_type (D.25657);
    D.25663 = mono_class_has_gtd_parent (class, arg);
    if (D.25663 != 0) goto <D.25661>; else goto <D.25664>;
    <D.25664>:
    D.25665 = mono_class_has_gtd_parent (arg, class);
    if (D.25665 != 0) goto <D.25661>; else goto <D.25662>;
    <D.25661>:
    // predicted unlikely by continue predictor.
    goto <D.19791>;
    <D.25662>:
    D.25666 = mono_class_check_vtable_constraints (arg, in_setup);
    if (D.25666 == 0) goto <D.25667>; else goto <D.25668>;
    <D.25667>:
    D.25669 = monoeg_g_strdup_printf ("Failed to load generic parameter %d", i);
    mono_class_set_failure (class, 7, D.25669);
    D.25648 = 0;
    return D.25648;
    <D.25668>:
  }
  <D.19791>:
  i = i + 1;
  <D.19793>:
  D.25670 = ginst->type_argc;
  D.25671 = (int) D.25670;
  if (D.25671 > i) goto <D.19792>; else goto <D.19794>;
  <D.19794>:
  D.25648 = 1;
  return D.25648;
}


mono_class_setup_vtable_full (struct MonoClass * class, struct GList * in_setup)
{
  struct MonoMethod * * D.25673;
  unsigned int D.25678;
  unsigned int D.25679;
  unsigned char D.25681;
  unsigned char D.25683;
  struct GList * D.25686;
  long unsigned int D.25691;
  long unsigned int D.25692;
  struct MonoGenericClass * D.25693;
  int D.25696;
  struct MonoClass * D.25699;
  struct MonoImage * D.25701;
  unsigned char D.25702;
  unsigned char D.25703;
  int onum.147;
  struct MonoMethod * * overrides.148;
  gchar * D.25712;
  struct MonoMethod * * overrides;
  struct MonoGenericContext * context;
  guint32 type_token;
  int onum;
  gboolean ok;

  try
    {
      onum = 0;
      ok = 1;
      D.25673 = class->vtable;
      if (D.25673 != 0B) goto <D.25674>; else goto <D.25675>;
      <D.25674>:
      return;
      <D.25675>:
      D.25678 = class->flags;
      D.25679 = D.25678 & 32;
      if (D.25679 != 0) goto <D.25676>; else goto <D.25680>;
      <D.25680>:
      D.25681 = class->byval_arg.type;
      if (D.25681 == 19) goto <D.25676>; else goto <D.25682>;
      <D.25682>:
      D.25681 = class->byval_arg.type;
      if (D.25681 == 30) goto <D.25676>; else goto <D.25677>;
      <D.25676>:
      mono_class_setup_methods (class);
      return;
      <D.25677>:
      D.25683 = class->exception_type;
      if (D.25683 != 0) goto <D.25684>; else goto <D.25685>;
      <D.25684>:
      return;
      <D.25685>:
      D.25686 = monoeg_g_list_find (in_setup, class);
      if (D.25686 != 0B) goto <D.25687>; else goto <D.25688>;
      <D.25687>:
      return;
      <D.25688>:
      mono_loader_lock ();
      D.25673 = class->vtable;
      if (D.25673 != 0B) goto <D.25689>; else goto <D.25690>;
      <D.25689>:
      mono_loader_unlock ();
      return;
      <D.25690>:
      D.25691 = mono_stats.generic_vtable_count;
      D.25692 = D.25691 + 1;
      mono_stats.generic_vtable_count = D.25692;
      in_setup = monoeg_g_list_prepend (in_setup, class);
      D.25693 = class->generic_class;
      if (D.25693 != 0B) goto <D.25694>; else goto <D.25695>;
      <D.25694>:
      D.25696 = mono_class_check_vtable_constraints (class, in_setup);
      if (D.25696 == 0) goto <D.25697>; else goto <D.25698>;
      <D.25697>:
      mono_loader_unlock ();
      monoeg_g_list_remove (in_setup, class);
      return;
      <D.25698>:
      context = mono_class_get_context (class);
      D.25693 = class->generic_class;
      D.25699 = D.25693->container_class;
      type_token = D.25699->type_token;
      goto <D.25700>;
      <D.25695>:
      context = class->generic_container;
      type_token = class->type_token;
      <D.25700>:
      D.25701 = class->image;
      D.25702 = BIT_FIELD_REF <*D.25701, 8, 224>;
      D.25703 = D.25702 & 8;
      if (D.25703 != 0) goto <D.25704>; else goto <D.25705>;
      <D.25704>:
      mono_reflection_get_dynamic_overrides (class, &overrides, &onum);
      goto <D.25706>;
      <D.25705>:
      D.25701 = class->image;
      ok = mono_class_get_overrides_full (D.25701, type_token, &overrides, &onum, context);
      <D.25706>:
      if (ok != 0) goto <D.25707>; else goto <D.25708>;
      <D.25707>:
      onum.147 = onum;
      overrides.148 = overrides;
      mono_class_setup_vtable_general (class, overrides.148, onum.147, in_setup);
      goto <D.25711>;
      <D.25708>:
      D.25712 = monoeg_strdup ("Could not load list of method overrides");
      mono_class_set_failure (class, 7, D.25712);
      <D.25711>:
      overrides.148 = overrides;
      monoeg_g_free (overrides.148);
      mono_loader_unlock ();
      monoeg_g_list_remove (in_setup, class);
      return;
    }
  finally
    {
      overrides = {CLOBBER};
      onum = {CLOBBER};
    }
}


mono_class_has_gtd_parent (struct MonoClass * klass, struct MonoClass * parent)
{
  gboolean D.25715;
  int iftmp.149;
  short unsigned int D.25719;
  short unsigned int D.25720;
  struct MonoClass * * D.25722;
  long unsigned int D.25723;
  long unsigned int D.25724;
  sizetype D.25725;
  struct MonoClass * * D.25726;
  struct MonoClass * D.25727;
  struct MonoClass * D.25728;

  klass = mono_class_get_generic_type_definition (klass);
  parent = mono_class_get_generic_type_definition (parent);
  mono_class_setup_supertypes (klass);
  mono_class_setup_supertypes (parent);
  D.25719 = klass->idepth;
  D.25720 = parent->idepth;
  if (D.25719 >= D.25720) goto <D.25721>; else goto <D.25717>;
  <D.25721>:
  D.25722 = klass->supertypes;
  D.25720 = parent->idepth;
  D.25723 = (long unsigned int) D.25720;
  D.25724 = D.25723 * 8;
  D.25725 = D.25724 + 18446744073709551608;
  D.25726 = D.25722 + D.25725;
  D.25727 = *D.25726;
  D.25728 = mono_class_get_generic_type_definition (D.25727);
  if (D.25728 == parent) goto <D.25729>; else goto <D.25717>;
  <D.25729>:
  iftmp.149 = 1;
  goto <D.25718>;
  <D.25717>:
  iftmp.149 = 0;
  <D.25718>:
  D.25715 = iftmp.149;
  return D.25715;
}


mono_class_setup_vtable (struct MonoClass * class)
{
  mono_class_setup_vtable_full (class, 0B);
}


mono_class_setup_vtable_general (struct MonoClass * class, struct MonoMethod * * overrides, int onum, struct GList * in_setup)
{
  struct MonoMethod * * D.25731;
  int D.25736;
  int D.25739;
  const char * D.25742;
  gchar * D.25743;
  void * * D.25746;
  long unsigned int D.25747;
  long unsigned int D.25748;
  void * * D.25749;
  unsigned int D.25750;
  unsigned int max_vtsize.150;
  unsigned int D.25752;
  unsigned int i.151;
  unsigned int D.25754;
  struct MonoClass * D.25755;
  unsigned char D.25758;
  gchar * D.25761;
  int D.25762;
  unsigned int D.25763;
  unsigned int D.25764;
  int D.25765;
  long unsigned int D.25768;
  long unsigned int D.25769;
  short unsigned int D.25772;
  struct MonoGenericClass * D.25773;
  unsigned char D.25776;
  int D.25779;
  unsigned int D.25780;
  unsigned int D.25781;
  int D.25782;
  struct MonoMethod * * D.25783;
  struct MonoMethod * * D.25784;
  struct MonoMethod * D.25785;
  struct MonoGenericContext * D.25788;
  int D.25789;
  const char * D.25792;
  struct MonoMethod * * D.25793;
  struct MonoMethod * D.25794;
  short int D.25795;
  struct MonoMethod * * D.25796;
  struct MonoMethod * * D.25799;
  struct MonoMethod * * D.25802;
  struct MonoMethod * D.25803;
  short int D.25804;
  struct MonoMethod * * D.25807;
  struct MonoMethod * D.25808;
  short int D.25809;
  unsigned int i.152;
  int D.25815;
  long unsigned int D.25816;
  long unsigned int D.25817;
  struct MonoMethod * * D.25818;
  struct MonoClass * * D.25819;
  long unsigned int D.25820;
  long unsigned int D.25821;
  struct MonoClass * * D.25822;
  int D.25825;
  long unsigned int D.25826;
  long unsigned int D.25827;
  struct MonoMethod * * D.25828;
  int D.25829;
  long unsigned int D.25830;
  long unsigned int D.25831;
  struct MonoMethod * * D.25832;
  struct MonoMethod * D.25833;
  unsigned int j.153;
  unsigned int D.25835;
  unsigned char D.25837;
  short unsigned int D.25838;
  int D.25839;
  int D.25840;
  short int D.25843;
  short int D.25846;
  int D.25848;
  _Bool D.25849;
  long int D.25850;
  long int D.25851;
  long unsigned int D.25854;
  long unsigned int D.25855;
  struct MonoMethod * * D.25856;
  int D.25857;
  long unsigned int D.25858;
  long unsigned int D.25859;
  struct MonoMethod * * D.25860;
  struct MonoClass * D.25863;
  unsigned int D.25864;
  unsigned int D.25865;
  unsigned char D.25867;
  int D.25871;
  long unsigned int D.25872;
  long unsigned int D.25873;
  struct MonoMethod * * D.25874;
  sizetype D.25875;
  sizetype D.25876;
  sizetype D.25877;
  struct MonoMethod * * D.25878;
  struct MonoMethod * D.25879;
  struct MonoMethod * D.25880;
  short int D.25881;
  struct MonoMethod * D.25884;
  <unnamed type> D.25885;
  struct MonoClass * * D.25889;
  struct MonoClass * * D.25890;
  unsigned char D.25891;
  struct MonoClass * * D.25895;
  long unsigned int D.25896;
  long unsigned int D.25897;
  struct MonoClass * * D.25898;
  struct MonoClass * D.25899;
  short unsigned int D.25902;
  int D.25903;
  struct MonoMethod * * D.25905;
  long unsigned int D.25906;
  long unsigned int D.25907;
  struct MonoMethod * * D.25908;
  short int D.25909;
  int D.25910;
  struct MonoMethod * iftmp.154;
  short unsigned int D.25915;
  int D.25916;
  int D.25917;
  long unsigned int D.25922;
  long unsigned int D.25923;
  struct MonoMethod * * D.25924;
  struct MonoMethod * D.25925;
  _Bool D.25926;
  int D.25927;
  int D.25928;
  short int D.25931;
  short int D.25934;
  int D.25940;
  struct MonoMethod * * D.25941;
  long unsigned int D.25942;
  long unsigned int D.25943;
  struct MonoMethod * * D.25944;
  int D.25947;
  short int D.25950;
  _Bool D.25955;
  long int D.25956;
  long int D.25957;
  unsigned int im_index.155;
  unsigned int D.25961;
  short unsigned int D.25962;
  int D.25963;
  unsigned int D.25964;
  unsigned int D.25965;
  long unsigned int D.25968;
  long unsigned int D.25969;
  struct MonoMethod * * D.25970;
  short int D.25971;
  int D.25972;
  short unsigned int D.25973;
  int D.25974;
  int D.25975;
  long unsigned int D.25978;
  long unsigned int D.25979;
  struct MonoMethod * * D.25980;
  struct MonoMethod * D.25981;
  unsigned int im_index.156;
  short unsigned int D.25985;
  int D.25986;
  int D.25987;
  _Bool D.25990;
  _Bool D.25991;
  _Bool D.25992;
  int D.20060;
  const char * D.25995;
  const char * D.25996;
  int D.25999;
  short unsigned int D.26004;
  int D.26005;
  int D.26006;
  <unnamed type> D.26009;
  int D.26013;
  int D.26016;
  gchar * D.26019;
  short int D.26020;
  int D.26021;
  _Bool D.26022;
  long int D.26023;
  long int D.26024;
  unsigned char D.26029;
  short int D.26034;
  unsigned int D.26035;
  unsigned int D.26036;
  int cur_slot.157;
  short int D.26044;
  int D.26045;
  long unsigned int D.26048;
  long unsigned int D.26049;
  struct MonoMethod * * D.26050;
  struct MonoClass * D.26051;
  unsigned int D.26052;
  unsigned int D.26053;
  unsigned char D.26056;
  short int D.26061;
  _Bool D.26062;
  long int D.26063;
  long int D.26064;
  long unsigned int D.26067;
  long unsigned int D.26068;
  struct MonoMethod * * D.26069;
  <unnamed type> D.26072;
  struct MonoMethod * D.26075;
  struct MonoMethod * * D.26078;
  struct MonoMethod * D.26079;
  short unsigned int D.26089;
  int D.26090;
  int D.26091;
  char * iftmp.158;
  gchar * D.26096;
  int D.26099;
  int D.26100;
  int D.26102;
  _Bool D.26105;
  long int D.26106;
  long int D.26107;
  long unsigned int D.26114;
  long unsigned int D.26115;
  struct MonoMethod * * D.26116;
  int D.26117;
  unsigned int D.26119;
  unsigned int D.26120;
  int D.26121;
  int mono_print_vtable.159;
  int D.26125;
  guint8 * D.26128;
  int D.26129;
  sizetype D.26130;
  guint8 * D.26131;
  unsigned char D.26132;
  int D.26133;
  int D.26134;
  int D.26135;
  int D.26136;
  struct MonoType * D.26139;
  char * D.26140;
  char * D.26143;
  short int D.26144;
  int D.26145;
  const char * D.26148;
  const char * D.26149;
  struct MonoClass * * D.26150;
  struct MonoType * D.26151;
  char * D.26152;
  short unsigned int D.26153;
  int D.26154;
  int D.26155;
  int D.26156;
  struct MonoClass * * D.26157;
  struct MonoClass * * D.26158;
  char * D.26159;
  int D.26160;
  int D.26161;
  short unsigned int D.26162;
  int D.26163;
  gchar * D.26164;
  struct MonoError error;
  struct MonoClass * k;
  struct MonoClass * ic;
  struct MonoMethod * * vtable;
  int i;
  int max_vtsize;
  int max_iid;
  int cur_slot;
  struct GPtrArray * ifaces;
  struct GHashTable * override_map;
  gboolean security_enabled;
  struct MonoMethod * cm;
  void * class_iter;
  struct GSList * virt_methods;
  struct GSList * l;
  int stelemref_slot;
  void fail = <<< error >>>;

  try
    {
      max_vtsize = 0;
      cur_slot = 0;
      ifaces = 0B;
      override_map = 0B;
      security_enabled = mono_is_security_manager_active ();
      virt_methods = 0B;
      stelemref_slot = 0;
      D.25731 = class->vtable;
      if (D.25731 != 0B) goto <D.25732>; else goto <D.25733>;
      <D.25732>:
      return;
      <D.25733>:
      if (overrides != 0B) goto <D.25734>; else goto <D.25735>;
      <D.25734>:
      D.25736 = verify_class_overrides (class, overrides, onum);
      if (D.25736 == 0) goto <D.25737>; else goto <D.25738>;
      <D.25737>:
      return;
      <D.25738>:
      <D.25735>:
      ifaces = mono_class_get_implemented_interfaces (class, &error);
      D.25739 = mono_error_ok (&error);
      if (D.25739 == 0) goto <D.25740>; else goto <D.25741>;
      <D.25740>:
      {
        char * name;

        name = mono_type_get_full_name (class);
        D.25742 = mono_error_get_message (&error);
        D.25743 = monoeg_g_strdup_printf ("Could not resolve %s interfaces due to %s", name, D.25742);
        mono_class_set_failure (class, 7, D.25743);
        monoeg_g_free (name);
        mono_error_cleanup (&error);
        return;
      }
      <D.25741>:
      if (ifaces != 0B) goto <D.25744>; else goto <D.25745>;
      <D.25744>:
      i = 0;
      goto <D.19969>;
      <D.19968>:
      {
        struct MonoClass * ic;

        D.25746 = ifaces->pdata;
        D.25747 = (long unsigned int) i;
        D.25748 = D.25747 * 8;
        D.25749 = D.25746 + D.25748;
        ic = *D.25749;
        D.25750 = ic->method.count;
        max_vtsize.150 = (unsigned int) max_vtsize;
        D.25752 = D.25750 + max_vtsize.150;
        max_vtsize = (int) D.25752;
      }
      i = i + 1;
      <D.19969>:
      i.151 = (unsigned int) i;
      D.25754 = ifaces->len;
      if (i.151 < D.25754) goto <D.19968>; else goto <D.19970>;
      <D.19970>:
      monoeg_g_ptr_array_free (ifaces, 1);
      ifaces = 0B;
      <D.25745>:
      D.25755 = class->parent;
      if (D.25755 != 0B) goto <D.25756>; else goto <D.25757>;
      <D.25756>:
      D.25755 = class->parent;
      mono_class_init (D.25755);
      D.25755 = class->parent;
      mono_class_setup_vtable_full (D.25755, in_setup);
      D.25755 = class->parent;
      D.25758 = D.25755->exception_type;
      if (D.25758 != 0) goto <D.25759>; else goto <D.25760>;
      <D.25759>:
      {
        char * name;

        D.25755 = class->parent;
        name = mono_type_get_full_name (D.25755);
        D.25761 = monoeg_g_strdup_printf ("Parent %s failed to load", name);
        mono_class_set_failure (class, 7, D.25761);
        monoeg_g_free (name);
        return;
      }
      <D.25760>:
      D.25755 = class->parent;
      D.25762 = D.25755->vtable_size;
      max_vtsize = D.25762 + max_vtsize;
      D.25755 = class->parent;
      cur_slot = D.25755->vtable_size;
      <D.25757>:
      D.25763 = class->method.count;
      max_vtsize.150 = (unsigned int) max_vtsize;
      D.25764 = D.25763 + max_vtsize.150;
      max_vtsize = (int) D.25764;
      D.25765 = mono_class_need_stelemref_method (class);
      if (D.25765 != 0) goto <D.25766>; else goto <D.25767>;
      <D.25766>:
      stelemref_slot = cur_slot;
      max_vtsize = max_vtsize + 1;
      cur_slot = cur_slot + 1;
      <D.25767>:
      D.25768 = (long unsigned int) max_vtsize;
      D.25769 = D.25768 * 8;
      vtable = __builtin_alloca (D.25769);
      D.25768 = (long unsigned int) max_vtsize;
      D.25769 = D.25768 * 8;
      memset (vtable, 0, D.25769);
      cur_slot = setup_interface_offsets (class, cur_slot, 1);
      if (cur_slot == -1) goto <D.25770>; else goto <D.25771>;
      <D.25770>:
      return;
      <D.25771>:
      D.25772 = class->max_interface_id;
      max_iid = (int) D.25772;
      D.25773 = class->generic_class;
      if (D.25773 != 0B) goto <D.25774>; else goto <D.25775>;
      <D.25774>:
      {
        struct MonoError error;
        struct MonoClass * gklass;
        struct MonoMethod * * tmp;

        try
          {
            D.25773 = class->generic_class;
            gklass = D.25773->container_class;
            mono_class_setup_vtable_full (gklass, in_setup);
            D.25776 = gklass->exception_type;
            if (D.25776 != 0) goto <D.25777>; else goto <D.25778>;
            <D.25777>:
            mono_class_set_failure (class, 7, 0B);
            return;
            <D.25778>:
            D.25779 = gklass->vtable_size;
            D.25780 = (unsigned int) D.25779;
            D.25781 = D.25780 * 8;
            D.25782 = (int) D.25781;
            tmp = mono_class_alloc0 (class, D.25782);
            D.25779 = gklass->vtable_size;
            class->vtable_size = D.25779;
            i = 0;
            goto <D.19978>;
            <D.19977>:
            D.25783 = gklass->vtable;
            D.25747 = (long unsigned int) i;
            D.25748 = D.25747 * 8;
            D.25784 = D.25783 + D.25748;
            D.25785 = *D.25784;
            if (D.25785 != 0B) goto <D.25786>; else goto <D.25787>;
            <D.25786>:
            {
              struct MonoMethod * inflated;

              D.25788 = mono_class_get_context (class);
              D.25783 = gklass->vtable;
              D.25747 = (long unsigned int) i;
              D.25748 = D.25747 * 8;
              D.25784 = D.25783 + D.25748;
              D.25785 = *D.25784;
              inflated = mono_class_inflate_generic_method_full_checked (D.25785, class, D.25788, &error);
              D.25789 = mono_error_ok (&error);
              if (D.25789 == 0) goto <D.25790>; else goto <D.25791>;
              <D.25790>:
              {
                char * err_msg;

                D.25792 = mono_error_get_message (&error);
                err_msg = monoeg_g_strdup_printf ("Could not inflate method due to %s", D.25792);
                mono_class_set_failure (class, 7, err_msg);
                monoeg_g_free (err_msg);
                mono_error_cleanup (&error);
                return;
              }
              <D.25791>:
              D.25747 = (long unsigned int) i;
              D.25748 = D.25747 * 8;
              D.25793 = tmp + D.25748;
              *D.25793 = inflated;
              D.25747 = (long unsigned int) i;
              D.25748 = D.25747 * 8;
              D.25793 = tmp + D.25748;
              D.25794 = *D.25793;
              D.25783 = gklass->vtable;
              D.25747 = (long unsigned int) i;
              D.25748 = D.25747 * 8;
              D.25784 = D.25783 + D.25748;
              D.25785 = *D.25784;
              D.25795 = D.25785->slot;
              D.25794->slot = D.25795;
            }
            <D.25787>:
            i = i + 1;
            <D.19978>:
            D.25779 = gklass->vtable_size;
            if (D.25779 > i) goto <D.19977>; else goto <D.19979>;
            <D.19979>:
            mono_memory_barrier ();
            class->vtable = tmp;
            D.25796 = class->methods;
            if (D.25796 != 0B) goto <D.25797>; else goto <D.25798>;
            <D.25797>:
            D.25799 = gklass->methods;
            if (D.25799 != 0B) goto <D.25800>; else goto <D.25801>;
            <D.25800>:
            i = 0;
            goto <D.19981>;
            <D.19980>:
            D.25796 = class->methods;
            D.25747 = (long unsigned int) i;
            D.25748 = D.25747 * 8;
            D.25802 = D.25796 + D.25748;
            D.25803 = *D.25802;
            D.25804 = D.25803->slot;
            if (D.25804 == -1) goto <D.25805>; else goto <D.25806>;
            <D.25805>:
            D.25796 = class->methods;
            D.25747 = (long unsigned int) i;
            D.25748 = D.25747 * 8;
            D.25802 = D.25796 + D.25748;
            D.25803 = *D.25802;
            D.25799 = gklass->methods;
            D.25747 = (long unsigned int) i;
            D.25748 = D.25747 * 8;
            D.25807 = D.25799 + D.25748;
            D.25808 = *D.25807;
            D.25809 = D.25808->slot;
            D.25803->slot = D.25809;
            <D.25806>:
            i = i + 1;
            <D.19981>:
            i.152 = (unsigned int) i;
            D.25763 = class->method.count;
            if (i.152 < D.25763) goto <D.19980>; else goto <D.19982>;
            <D.19982>:
            <D.25801>:
            <D.25798>:
            return;
          }
        finally
          {
            error = {CLOBBER};
          }
      }
      <D.25775>:
      D.25755 = class->parent;
      if (D.25755 != 0B) goto <D.25811>; else goto <D.25812>;
      <D.25811>:
      D.25755 = class->parent;
      D.25762 = D.25755->vtable_size;
      if (D.25762 != 0) goto <D.25813>; else goto <D.25814>;
      <D.25813>:
      {
        struct MonoClass * parent;
        int i;

        parent = class->parent;
        D.25815 = parent->vtable_size;
        D.25816 = (long unsigned int) D.25815;
        D.25817 = D.25816 * 8;
        D.25818 = parent->vtable;
        memcpy (vtable, D.25818, D.25817);
        i = 0;
        goto <D.19993>;
        <D.19992>:
        {
          struct MonoClass * parent_interface;
          int interface_offset;

          D.25819 = parent->interfaces_packed;
          D.25820 = (long unsigned int) i;
          D.25821 = D.25820 * 8;
          D.25822 = D.25819 + D.25821;
          parent_interface = *D.25822;
          interface_offset = mono_class_interface_offset (class, parent_interface);
          D.25815 = parent->vtable_size;
          if (D.25815 <= interface_offset) goto <D.25823>; else goto <D.25824>;
          <D.25823>:
          {
            int parent_interface_offset;
            int j;

            parent_interface_offset = mono_class_interface_offset (parent, parent_interface);
            mono_class_setup_methods (parent_interface);
            j = 0;
            goto <D.19990>;
            <D.19989>:
            D.25825 = interface_offset + j;
            D.25826 = (long unsigned int) D.25825;
            D.25827 = D.25826 * 8;
            D.25828 = vtable + D.25827;
            D.25818 = parent->vtable;
            D.25829 = parent_interface_offset + j;
            D.25830 = (long unsigned int) D.25829;
            D.25831 = D.25830 * 8;
            D.25832 = D.25818 + D.25831;
            D.25833 = *D.25832;
            *D.25828 = D.25833;
            j = j + 1;
            <D.19990>:
            j.153 = (unsigned int) j;
            D.25835 = parent_interface->method.count;
            if (j.153 < D.25835) goto <D.25836>; else goto <D.19991>;
            <D.25836>:
            D.25837 = class->exception_type;
            if (D.25837 == 0) goto <D.19989>; else goto <D.19991>;
            <D.19991>:
          }
          <D.25824>:
        }
        i = i + 1;
        <D.19993>:
        D.25838 = parent->interface_offsets_count;
        D.25839 = (int) D.25838;
        if (D.25839 > i) goto <D.19992>; else goto <D.19994>;
        <D.19994>:
      }
      <D.25814>:
      <D.25812>:
      D.25840 = mono_class_need_stelemref_method (class);
      if (D.25840 != 0) goto <D.25841>; else goto <D.25842>;
      <D.25841>:
      {
        struct MonoMethod * method;

        method = mono_marshal_get_virtual_stelemref (class);
        D.25843 = method->slot;
        if (D.25843 == 0) goto <D.25844>; else goto <D.25845>;
        <D.25844>:
        D.25846 = (short int) stelemref_slot;
        method->slot = D.25846;
        goto <D.25847>;
        <D.25845>:
        D.25843 = method->slot;
        D.25848 = (int) D.25843;
        D.25849 = D.25848 != stelemref_slot;
        D.25850 = (long int) D.25849;
        D.25851 = __builtin_expect (D.25850, 0);
        if (D.25851 != 0) goto <D.25852>; else goto <D.25853>;
        <D.25852>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4263, "method->slot == stelemref_slot");
        <D.25853>:
        <D.25847>:
        D.25854 = (long unsigned int) stelemref_slot;
        D.25855 = D.25854 * 8;
        D.25856 = vtable + D.25855;
        *D.25856 = method;
      }
      <D.25842>:
      i = 0;
      goto <D.19999>;
      <D.19998>:
      {
        struct MonoMethod * decl;

        D.25857 = i * 2;
        D.25858 = (long unsigned int) D.25857;
        D.25859 = D.25858 * 8;
        D.25860 = overrides + D.25859;
        decl = *D.25860;
        D.25863 = decl->klass;
        D.25864 = D.25863->flags;
        D.25865 = D.25864 & 32;
        if (D.25865 != 0) goto <D.25861>; else goto <D.25866>;
        <D.25866>:
        D.25863 = decl->klass;
        D.25867 = D.25863->byval_arg.type;
        if (D.25867 == 19) goto <D.25861>; else goto <D.25868>;
        <D.25868>:
        D.25863 = decl->klass;
        D.25867 = D.25863->byval_arg.type;
        if (D.25867 == 30) goto <D.25861>; else goto <D.25862>;
        <D.25861>:
        {
          int dslot;

          dslot = mono_method_get_vtable_slot (decl);
          if (dslot == -1) goto <D.25869>; else goto <D.25870>;
          <D.25869>:
          mono_class_set_failure (class, 7, 0B);
          return;
          <D.25870>:
          D.25863 = decl->klass;
          D.25871 = mono_class_interface_offset (class, D.25863);
          dslot = D.25871 + dslot;
          D.25872 = (long unsigned int) dslot;
          D.25873 = D.25872 * 8;
          D.25874 = vtable + D.25873;
          D.25857 = i * 2;
          D.25875 = (sizetype) D.25857;
          D.25876 = D.25875 + 1;
          D.25877 = D.25876 * 8;
          D.25878 = overrides + D.25877;
          D.25879 = *D.25878;
          *D.25874 = D.25879;
          D.25872 = (long unsigned int) dslot;
          D.25873 = D.25872 * 8;
          D.25874 = vtable + D.25873;
          D.25880 = *D.25874;
          D.25881 = (short int) dslot;
          D.25880->slot = D.25881;
          if (override_map == 0B) goto <D.25882>; else goto <D.25883>;
          <D.25882>:
          override_map = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
          <D.25883>:
          D.25857 = i * 2;
          D.25875 = (sizetype) D.25857;
          D.25876 = D.25875 + 1;
          D.25877 = D.25876 * 8;
          D.25878 = overrides + D.25877;
          D.25879 = *D.25878;
          D.25857 = i * 2;
          D.25858 = (long unsigned int) D.25857;
          D.25859 = D.25858 * 8;
          D.25860 = overrides + D.25859;
          D.25884 = *D.25860;
          monoeg_g_hash_table_insert_replace (override_map, D.25884, D.25879, 0);
          D.25885 = mono_security_get_mode ();
          if (D.25885 == 1) goto <D.25886>; else goto <D.25887>;
          <D.25886>:
          D.25872 = (long unsigned int) dslot;
          D.25873 = D.25872 * 8;
          D.25874 = vtable + D.25873;
          D.25880 = *D.25874;
          mono_security_core_clr_check_override (class, D.25880, decl);
          <D.25887>:
        }
        <D.25862>:
      }
      i = i + 1;
      <D.19999>:
      if (i < onum) goto <D.19998>; else goto <D.20000>;
      <D.20000>:
      {
        void * iter;
        struct MonoMethod * cm;

        try
          {
            iter = 0B;
            virt_methods = 0B;
            goto <D.20004>;
            <D.20003>:
            virt_methods = monoeg_g_slist_prepend (virt_methods, cm);
            <D.20004>:
            cm = mono_class_get_virtual_methods (class, &iter);
            if (cm != 0B) goto <D.20003>; else goto <D.20005>;
            <D.20005>:
            D.25837 = class->exception_type;
            if (D.25837 != 0) goto fail; else goto <D.25888>;
            <D.25888>:
          }
        finally
          {
            iter = {CLOBBER};
          }
      }
      i = 0;
      goto <D.20034>;
      <D.20033>:
      {
        struct MonoClass * parent;
        int ic_offset;
        gboolean interface_is_explicitly_implemented_by_class;
        int im_index;

        parent = class->parent;
        D.25889 = class->interfaces_packed;
        D.25747 = (long unsigned int) i;
        D.25748 = D.25747 * 8;
        D.25890 = D.25889 + D.25748;
        ic = *D.25890;
        ic_offset = mono_class_interface_offset (class, ic);
        mono_class_setup_methods (ic);
        D.25891 = ic->exception_type;
        if (D.25891 != 0) goto fail; else goto <D.25892>;
        <D.25892>:
        if (parent != 0B) goto <D.25893>; else goto <D.25894>;
        <D.25893>:
        {
          int implemented_interfaces_index;

          interface_is_explicitly_implemented_by_class = 0;
          implemented_interfaces_index = 0;
          goto <D.20014>;
          <D.20013>:
          D.25895 = class->interfaces;
          D.25896 = (long unsigned int) implemented_interfaces_index;
          D.25897 = D.25896 * 8;
          D.25898 = D.25895 + D.25897;
          D.25899 = *D.25898;
          if (D.25899 == ic) goto <D.25900>; else goto <D.25901>;
          <D.25900>:
          interface_is_explicitly_implemented_by_class = 1;
          goto <D.20012>;
          <D.25901>:
          implemented_interfaces_index = implemented_interfaces_index + 1;
          <D.20014>:
          D.25902 = class->interface_count;
          D.25903 = (int) D.25902;
          if (D.25903 > implemented_interfaces_index) goto <D.20013>; else goto <D.20012>;
          <D.20012>:
        }
        goto <D.25904>;
        <D.25894>:
        interface_is_explicitly_implemented_by_class = 1;
        <D.25904>:
        im_index = 0;
        goto <D.20031>;
        <D.20030>:
        {
          struct MonoMethod * im;
          int im_slot;
          struct MonoMethod * override_im;

          D.25905 = ic->methods;
          D.25906 = (long unsigned int) im_index;
          D.25907 = D.25906 * 8;
          D.25908 = D.25905 + D.25907;
          im = *D.25908;
          D.25909 = im->slot;
          D.25910 = (int) D.25909;
          im_slot = D.25910 + ic_offset;
          if (override_map != 0B) goto <D.25912>; else goto <D.25913>;
          <D.25912>:
          iftmp.154 = monoeg_g_hash_table_lookup (override_map, im);
          goto <D.25914>;
          <D.25913>:
          iftmp.154 = 0B;
          <D.25914>:
          override_im = iftmp.154;
          D.25915 = im->flags;
          D.25916 = (int) D.25915;
          D.25917 = D.25916 & 16;
          if (D.25917 != 0) goto <D.25918>; else goto <D.25919>;
          <D.25918>:
          // predicted unlikely by continue predictor.
          goto <D.20018>;
          <D.25919>:
          if (override_im == 0B) goto <D.25920>; else goto <D.25921>;
          <D.25920>:
          {
            int cm_index;
            void * iter;
            struct MonoMethod * cm;

            iter = 0B;
            l = virt_methods;
            goto <D.20023>;
            <D.20022>:
            cm = l->data;
            D.25922 = (long unsigned int) im_slot;
            D.25923 = D.25922 * 8;
            D.25924 = vtable + D.25923;
            D.25925 = *D.25924;
            D.25926 = D.25925 == 0B;
            D.25927 = (int) D.25926;
            D.25928 = check_interface_method_override (class, im, cm, 1, interface_is_explicitly_implemented_by_class, D.25927, security_enabled);
            if (D.25928 != 0) goto <D.25929>; else goto <D.25930>;
            <D.25929>:
            D.25922 = (long unsigned int) im_slot;
            D.25923 = D.25922 * 8;
            D.25924 = vtable + D.25923;
            *D.25924 = cm;
            D.25931 = cm->slot;
            if (D.25931 < 0) goto <D.25932>; else goto <D.25933>;
            <D.25932>:
            D.25934 = (short int) im_slot;
            cm->slot = D.25934;
            <D.25933>:
            <D.25930>:
            D.25837 = class->exception_type;
            if (D.25837 != 0) goto fail; else goto <D.25935>;
            <D.25935>:
            l = l->next;
            <D.20023>:
            if (l != 0B) goto <D.20022>; else goto <D.20024>;
            <D.20024>:
            D.25922 = (long unsigned int) im_slot;
            D.25923 = D.25922 * 8;
            D.25924 = vtable + D.25923;
            D.25925 = *D.25924;
            if (D.25925 == 0B) goto <D.25936>; else goto <D.25937>;
            <D.25936>:
            D.25755 = class->parent;
            if (D.25755 != 0B) goto <D.25938>; else goto <D.25939>;
            <D.25938>:
            {
              struct MonoClass * parent;

              parent = class->parent;
              D.25940 = parent->vtable_size;
              cm_index = D.25940 + -1;
              goto <D.20029>;
              <D.20028>:
              {
                struct MonoMethod * cm;

                D.25941 = parent->vtable;
                D.25942 = (long unsigned int) cm_index;
                D.25943 = D.25942 * 8;
                D.25944 = D.25941 + D.25943;
                cm = *D.25944;
                if (cm != 0B) goto <D.25945>; else goto <D.25946>;
                <D.25945>:
                D.25947 = check_interface_method_override (class, im, cm, 0, 0, 1, security_enabled);
                if (D.25947 != 0) goto <D.25948>; else goto <D.25949>;
                <D.25948>:
                D.25922 = (long unsigned int) im_slot;
                D.25923 = D.25922 * 8;
                D.25924 = vtable + D.25923;
                *D.25924 = cm;
                D.25950 = cm->slot;
                if (D.25950 < 0) goto <D.25951>; else goto <D.25952>;
                <D.25951>:
                D.25934 = (short int) im_slot;
                cm->slot = D.25934;
                <D.25952>:
                goto <D.20027>;
                <D.25949>:
                <D.25946>:
                D.25837 = class->exception_type;
                if (D.25837 != 0) goto fail; else goto <D.25953>;
                <D.25953>:
              }
              cm_index = cm_index + -1;
              <D.20029>:
              if (cm_index >= 0) goto <D.20028>; else goto <D.20027>;
              <D.20027>:
            }
            <D.25939>:
            <D.25937>:
          }
          goto <D.25954>;
          <D.25921>:
          D.25922 = (long unsigned int) im_slot;
          D.25923 = D.25922 * 8;
          D.25924 = vtable + D.25923;
          D.25925 = *D.25924;
          D.25955 = D.25925 != override_im;
          D.25956 = (long int) D.25955;
          D.25957 = __builtin_expect (D.25956, 0);
          if (D.25957 != 0) goto <D.25958>; else goto <D.25959>;
          <D.25958>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4399, "vtable [im_slot] == override_im");
          <D.25959>:
          <D.25954>:
        }
        <D.20018>:
        im_index = im_index + 1;
        <D.20031>:
        im_index.155 = (unsigned int) im_index;
        D.25961 = ic->method.count;
        if (im_index.155 < D.25961) goto <D.20030>; else goto <D.20032>;
        <D.20032>:
      }
      i = i + 1;
      <D.20034>:
      D.25962 = class->interface_offsets_count;
      D.25963 = (int) D.25962;
      if (D.25963 > i) goto <D.20033>; else goto <D.20035>;
      <D.20035>:
      D.25964 = class->flags;
      D.25965 = D.25964 & 128;
      if (D.25965 == 0) goto <D.25966>; else goto <D.25967>;
      <D.25966>:
      i = 0;
      goto <D.20045>;
      <D.20044>:
      {
        int ic_offset;
        int im_index;

        D.25889 = class->interfaces_packed;
        D.25747 = (long unsigned int) i;
        D.25748 = D.25747 * 8;
        D.25890 = D.25889 + D.25748;
        ic = *D.25890;
        ic_offset = mono_class_interface_offset (class, ic);
        im_index = 0;
        goto <D.20042>;
        <D.20041>:
        {
          struct MonoMethod * im;
          int im_slot;

          D.25905 = ic->methods;
          D.25968 = (long unsigned int) im_index;
          D.25969 = D.25968 * 8;
          D.25970 = D.25905 + D.25969;
          im = *D.25970;
          D.25971 = im->slot;
          D.25972 = (int) D.25971;
          im_slot = D.25972 + ic_offset;
          D.25973 = im->flags;
          D.25974 = (int) D.25973;
          D.25975 = D.25974 & 16;
          if (D.25975 != 0) goto <D.25976>; else goto <D.25977>;
          <D.25976>:
          // predicted unlikely by continue predictor.
          goto <D.20040>;
          <D.25977>:
          D.25978 = (long unsigned int) im_slot;
          D.25979 = D.25978 * 8;
          D.25980 = vtable + D.25979;
          D.25981 = *D.25980;
          if (D.25981 == 0B) goto <D.25982>; else goto <D.25983>;
          <D.25982>:
          print_unimplemented_interface_method_info (class, ic, im, im_slot, overrides, onum);
          goto fail;
          <D.25983>:
        }
        <D.20040>:
        im_index = im_index + 1;
        <D.20042>:
        im_index.156 = (unsigned int) im_index;
        D.25961 = ic->method.count;
        if (im_index.156 < D.25961) goto <D.20041>; else goto <D.20043>;
        <D.20043>:
      }
      i = i + 1;
      <D.20045>:
      D.25962 = class->interface_offsets_count;
      D.25963 = (int) D.25962;
      if (D.25963 > i) goto <D.20044>; else goto <D.20046>;
      <D.20046>:
      <D.25967>:
      class_iter = 0B;
      l = virt_methods;
      goto <D.20070>;
      <D.20069>:
      cm = l->data;
      D.25985 = cm->flags;
      D.25986 = (int) D.25985;
      D.25987 = D.25986 & 256;
      if (D.25987 == 0) goto <D.25988>; else goto <D.25989>;
      <D.25988>:
      {
        int slot;

        slot = -1;
        k = class->parent;
        goto <D.20068>;
        <D.20067>:
        {
          void * k_iter;
          struct MonoMethod * m1;

          try
            {
              k_iter = 0B;
              goto <D.20065>;
              <D.20064>:
              {
                struct MonoMethodSignature * cmsig;
                struct MonoMethodSignature * m1sig;

                cmsig = mono_method_signature (cm);
                m1sig = mono_method_signature (m1);
                D.25990 = cmsig == 0B;
                D.25991 = m1sig == 0B;
                D.25992 = D.25990 | D.25991;
                if (D.25992 != 0) goto <D.25993>; else goto <D.25994>;
                <D.25993>:
                mono_class_set_failure (class, 7, 0B);
                return;
                <D.25994>:
                {
                  size_t __s1_len;
                  size_t __s2_len;

                  D.25995 = m1->name;
                  D.25996 = cm->name;
                  D.20060 = __builtin_strcmp (D.25996, D.25995);
                }
                if (D.20060 == 0) goto <D.25997>; else goto <D.25998>;
                <D.25997>:
                D.25999 = mono_metadata_signature_equal (cmsig, m1sig);
                if (D.25999 != 0) goto <D.26000>; else goto <D.26001>;
                <D.26000>:
                if (security_enabled != 0) goto <D.26002>; else goto <D.26003>;
                <D.26002>:
                D.26004 = m1->flags;
                D.26005 = (int) D.26004;
                D.26006 = D.26005 & 16384;
                if (D.26006 != 0) goto <D.26007>; else goto <D.26008>;
                <D.26007>:
                mono_secman_inheritancedemand_method (cm, m1);
                <D.26008>:
                <D.26003>:
                D.26009 = mono_security_get_mode ();
                if (D.26009 == 1) goto <D.26010>; else goto <D.26011>;
                <D.26010>:
                mono_security_core_clr_check_override (class, cm, m1);
                <D.26011>:
                slot = mono_method_get_vtable_slot (m1);
                if (slot == -1) goto fail; else goto <D.26012>;
                <D.26012>:
                D.26013 = is_wcf_hack_disabled ();
                if (D.26013 != 0) goto <D.26014>; else goto <D.26015>;
                <D.26014>:
                D.26016 = mono_method_can_access_method_full (cm, m1, 0B);
                if (D.26016 == 0) goto <D.26017>; else goto <D.26018>;
                <D.26017>:
                {
                  char * body_name;
                  char * decl_name;

                  body_name = mono_method_full_name (cm, 1);
                  decl_name = mono_method_full_name (m1, 1);
                  D.26019 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
                  mono_class_set_failure (class, 7, D.26019);
                  monoeg_g_free (body_name);
                  monoeg_g_free (decl_name);
                  goto fail;
                }
                <D.26018>:
                <D.26015>:
                D.26020 = cm->slot;
                D.26021 = (int) D.26020;
                D.26022 = D.26021 >= max_vtsize;
                D.26023 = (long int) D.26022;
                D.26024 = __builtin_expect (D.26023, 0);
                if (D.26024 != 0) goto <D.26025>; else goto <D.26026>;
                <D.26025>:
                monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4484, "cm->slot < max_vtsize");
                <D.26026>:
                if (override_map == 0B) goto <D.26027>; else goto <D.26028>;
                <D.26027>:
                override_map = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
                <D.26028>:
                monoeg_g_hash_table_insert_replace (override_map, m1, cm, 0);
                goto <D.20063>;
                <D.26001>:
                <D.25998>:
              }
              <D.20065>:
              m1 = mono_class_get_virtual_methods (k, &k_iter);
              if (m1 != 0B) goto <D.20064>; else goto <D.20063>;
              <D.20063>:
              D.26029 = k->exception_type;
              if (D.26029 != 0) goto fail; else goto <D.26030>;
              <D.26030>:
              if (slot >= 0) goto <D.20066>; else goto <D.26031>;
              <D.26031>:
            }
          finally
            {
              k_iter = {CLOBBER};
            }
        }
        k = k->parent;
        <D.20068>:
        if (k != 0B) goto <D.20067>; else goto <D.20066>;
        <D.20066>:
        if (slot >= 0) goto <D.26032>; else goto <D.26033>;
        <D.26032>:
        D.26034 = (short int) slot;
        cm->slot = D.26034;
        <D.26033>:
      }
      <D.25989>:
      D.25985 = cm->flags;
      D.26035 = (unsigned int) D.25985;
      D.26036 = D.26035 & 288;
      if (D.26036 == 256) goto <D.26037>; else goto <D.26038>;
      <D.26037>:
      D.26020 = cm->slot;
      if (D.26020 >= 0) goto <D.26039>; else goto <D.26040>;
      <D.26039>:
      cm->slot = -1;
      <D.26040>:
      <D.26038>:
      D.26020 = cm->slot;
      if (D.26020 < 0) goto <D.26041>; else goto <D.26042>;
      <D.26041>:
      cur_slot.157 = cur_slot;
      cur_slot = cur_slot.157 + 1;
      D.26044 = (short int) cur_slot.157;
      cm->slot = D.26044;
      <D.26042>:
      D.25985 = cm->flags;
      D.25986 = (int) D.25985;
      D.26045 = D.25986 & 1024;
      if (D.26045 == 0) goto <D.26046>; else goto <D.26047>;
      <D.26046>:
      D.26020 = cm->slot;
      D.26048 = (long unsigned int) D.26020;
      D.26049 = D.26048 * 8;
      D.26050 = vtable + D.26049;
      *D.26050 = cm;
      <D.26047>:
      l = l->next;
      <D.20070>:
      if (l != 0B) goto <D.20069>; else goto <D.20071>;
      <D.20071>:
      i = 0;
      goto <D.20074>;
      <D.20073>:
      {
        struct MonoMethod * decl;

        D.25857 = i * 2;
        D.25858 = (long unsigned int) D.25857;
        D.25859 = D.25858 * 8;
        D.25860 = overrides + D.25859;
        decl = *D.25860;
        D.26051 = decl->klass;
        D.26052 = D.26051->flags;
        D.26053 = D.26052 & 32;
        if (D.26053 == 0) goto <D.26054>; else goto <D.26055>;
        <D.26054>:
        D.26051 = decl->klass;
        D.26056 = D.26051->byval_arg.type;
        if (D.26056 != 19) goto <D.26057>; else goto <D.26058>;
        <D.26057>:
        D.26051 = decl->klass;
        D.26056 = D.26051->byval_arg.type;
        if (D.26056 != 30) goto <D.26059>; else goto <D.26060>;
        <D.26059>:
        D.26061 = decl->slot;
        D.26062 = D.26061 == -1;
        D.26063 = (long int) D.26062;
        D.26064 = __builtin_expect (D.26063, 0);
        if (D.26064 != 0) goto <D.26065>; else goto <D.26066>;
        <D.26065>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4519, "decl->slot != -1");
        <D.26066>:
        D.26061 = decl->slot;
        D.26067 = (long unsigned int) D.26061;
        D.26068 = D.26067 * 8;
        D.26069 = vtable + D.26068;
        D.25857 = i * 2;
        D.25875 = (sizetype) D.25857;
        D.25876 = D.25875 + 1;
        D.25877 = D.25876 * 8;
        D.25878 = overrides + D.25877;
        D.25879 = *D.25878;
        *D.26069 = D.25879;
        D.25857 = i * 2;
        D.25875 = (sizetype) D.25857;
        D.25876 = D.25875 + 1;
        D.25877 = D.25876 * 8;
        D.25878 = overrides + D.25877;
        D.25879 = *D.25878;
        D.26061 = decl->slot;
        D.25879->slot = D.26061;
        if (override_map == 0B) goto <D.26070>; else goto <D.26071>;
        <D.26070>:
        override_map = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
        <D.26071>:
        D.25857 = i * 2;
        D.25875 = (sizetype) D.25857;
        D.25876 = D.25875 + 1;
        D.25877 = D.25876 * 8;
        D.25878 = overrides + D.25877;
        D.25879 = *D.25878;
        monoeg_g_hash_table_insert_replace (override_map, decl, D.25879, 0);
        D.26072 = mono_security_get_mode ();
        if (D.26072 == 1) goto <D.26073>; else goto <D.26074>;
        <D.26073>:
        D.26061 = decl->slot;
        D.26067 = (long unsigned int) D.26061;
        D.26068 = D.26067 * 8;
        D.26069 = vtable + D.26068;
        D.26075 = *D.26069;
        mono_security_core_clr_check_override (class, D.26075, decl);
        <D.26074>:
        <D.26060>:
        <D.26058>:
        <D.26055>:
      }
      i = i + 1;
      <D.20074>:
      if (i < onum) goto <D.20073>; else goto <D.20075>;
      <D.20075>:
      if (override_map != 0B) goto <D.26076>; else goto <D.26077>;
      <D.26076>:
      {
        struct MonoMethod * cm;

        i = 0;
        goto <D.20078>;
        <D.20077>:
        D.25747 = (long unsigned int) i;
        D.25748 = D.25747 * 8;
        D.26078 = vtable + D.25748;
        D.26079 = *D.26078;
        if (D.26079 != 0B) goto <D.26080>; else goto <D.26081>;
        <D.26080>:
        D.25747 = (long unsigned int) i;
        D.25748 = D.25747 * 8;
        D.26078 = vtable + D.25748;
        D.26079 = *D.26078;
        cm = monoeg_g_hash_table_lookup (override_map, D.26079);
        if (cm != 0B) goto <D.26082>; else goto <D.26083>;
        <D.26082>:
        D.25747 = (long unsigned int) i;
        D.25748 = D.25747 * 8;
        D.26078 = vtable + D.25748;
        *D.26078 = cm;
        <D.26083>:
        <D.26081>:
        i = i + 1;
        <D.20078>:
        if (i < max_vtsize) goto <D.20077>; else goto <D.20079>;
        <D.20079>:
        monoeg_g_hash_table_destroy (override_map);
        override_map = 0B;
      }
      <D.26077>:
      monoeg_g_slist_free (virt_methods);
      virt_methods = 0B;
      D.25964 = class->flags;
      D.25965 = D.25964 & 128;
      if (D.25965 == 0) goto <D.26084>; else goto <D.26085>;
      <D.26084>:
      i = 0;
      goto <D.20083>;
      <D.20082>:
      D.25747 = (long unsigned int) i;
      D.25748 = D.25747 * 8;
      D.26078 = vtable + D.25748;
      D.26079 = *D.26078;
      if (D.26079 == 0B) goto <D.26086>; else goto <D.26088>;
      <D.26088>:
      D.25747 = (long unsigned int) i;
      D.25748 = D.25747 * 8;
      D.26078 = vtable + D.25748;
      D.26079 = *D.26078;
      D.26089 = D.26079->flags;
      D.26090 = (int) D.26089;
      D.26091 = D.26090 & 1040;
      if (D.26091 != 0) goto <D.26086>; else goto <D.26087>;
      <D.26086>:
      {
        char * type_name;
        char * method_name;

        type_name = mono_type_get_full_name (class);
        D.25747 = (long unsigned int) i;
        D.25748 = D.25747 * 8;
        D.26078 = vtable + D.25748;
        D.26079 = *D.26078;
        if (D.26079 != 0B) goto <D.26093>; else goto <D.26094>;
        <D.26093>:
        D.25747 = (long unsigned int) i;
        D.25748 = D.25747 * 8;
        D.26078 = vtable + D.25748;
        D.26079 = *D.26078;
        iftmp.158 = mono_method_full_name (D.26079, 1);
        goto <D.26095>;
        <D.26094>:
        iftmp.158 = monoeg_strdup ("none");
        <D.26095>:
        method_name = iftmp.158;
        D.26096 = monoeg_g_strdup_printf ("Type %s has invalid vtable method slot %d with method %s", type_name, i, method_name);
        mono_class_set_failure (class, 7, D.26096);
        monoeg_g_free (type_name);
        monoeg_g_free (method_name);
        return;
      }
      <D.26087>:
      i = i + 1;
      <D.20083>:
      if (i < cur_slot) goto <D.20082>; else goto <D.20084>;
      <D.20084>:
      <D.26085>:
      D.25773 = class->generic_class;
      if (D.25773 != 0B) goto <D.26097>; else goto <D.26098>;
      <D.26097>:
      {
        struct MonoClass * gklass;

        D.25773 = class->generic_class;
        gklass = D.25773->container_class;
        mono_class_init (gklass);
        D.26099 = gklass->vtable_size;
        D.26100 = MAX_EXPR <D.26099, cur_slot>;
        class->vtable_size = D.26100;
      }
      goto <D.26101>;
      <D.26098>:
      D.26102 = class->vtable_size;
      if (D.26102 != 0) goto <D.26103>; else goto <D.26104>;
      <D.26103>:
      D.26102 = class->vtable_size;
      D.26105 = D.26102 != cur_slot;
      D.26106 = (long int) D.26105;
      D.26107 = __builtin_expect (D.26106, 0);
      if (D.26107 != 0) goto <D.26108>; else goto <D.26109>;
      <D.26108>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4580, "cur_slot == class->vtable_size");
      <D.26109>:
      <D.26104>:
      class->vtable_size = cur_slot;
      <D.26101>:
      D.25755 = class->parent;
      if (D.25755 != 0B) goto <D.26112>; else goto <D.26110>;
      <D.26112>:
      D.25755 = class->parent;
      D.25762 = D.25755->vtable_size;
      D.26102 = class->vtable_size;
      if (D.25762 == D.26102) goto <D.26113>; else goto <D.26110>;
      <D.26113>:
      D.26102 = class->vtable_size;
      D.26114 = (long unsigned int) D.26102;
      D.26115 = D.26114 * 8;
      D.25755 = class->parent;
      D.26116 = D.25755->vtable;
      D.26117 = memcmp (D.26116, vtable, D.26115);
      if (D.26117 == 0) goto <D.26118>; else goto <D.26110>;
      <D.26118>:
      mono_memory_barrier ();
      D.25755 = class->parent;
      D.26116 = D.25755->vtable;
      class->vtable = D.26116;
      goto <D.26111>;
      <D.26110>:
      {
        struct MonoMethod * * tmp;

        D.26102 = class->vtable_size;
        D.26119 = (unsigned int) D.26102;
        D.26120 = D.26119 * 8;
        D.26121 = (int) D.26120;
        tmp = mono_class_alloc0 (class, D.26121);
        D.26102 = class->vtable_size;
        D.26114 = (long unsigned int) D.26102;
        D.26115 = D.26114 * 8;
        memcpy (tmp, vtable, D.26115);
        mono_memory_barrier ();
        class->vtable = tmp;
      }
      <D.26111>:
      mono_print_vtable.159 = mono_print_vtable;
      if (mono_print_vtable.159 != 0) goto <D.26123>; else goto <D.26124>;
      <D.26123>:
      {
        int icount;

        icount = 0;
        print_implemented_interfaces (class);
        i = 0;
        goto <D.20089>;
        <D.20088>:
        D.25772 = class->max_interface_id;
        D.26125 = (int) D.25772;
        if (D.26125 >= i) goto <D.26126>; else goto <D.26127>;
        <D.26126>:
        D.26128 = class->interface_bitmap;
        D.26129 = i >> 3;
        D.26130 = (sizetype) D.26129;
        D.26131 = D.26128 + D.26130;
        D.26132 = *D.26131;
        D.26133 = (int) D.26132;
        D.26134 = i & 7;
        D.26135 = D.26133 >> D.26134;
        D.26136 = D.26135 & 1;
        if (D.26136 != 0) goto <D.26137>; else goto <D.26138>;
        <D.26137>:
        icount = icount + 1;
        <D.26138>:
        <D.26127>:
        i = i + 1;
        <D.20089>:
        if (i <= max_iid) goto <D.20088>; else goto <D.20090>;
        <D.20090>:
        D.26102 = class->vtable_size;
        D.26139 = &class->byval_arg;
        D.26140 = mono_type_full_name (D.26139);
        printf ("VTable %s (vtable entries = %d, interfaces = %d)\n", D.26140, D.26102, icount);
        i = 0;
        goto <D.20093>;
        <D.20092>:
        {
          struct MonoMethod * cm;

          D.25747 = (long unsigned int) i;
          D.25748 = D.25747 * 8;
          D.26078 = vtable + D.25748;
          cm = *D.26078;
          if (cm != 0B) goto <D.26141>; else goto <D.26142>;
          <D.26141>:
          D.26143 = mono_method_full_name (cm, 1);
          D.26144 = cm->slot;
          D.26145 = (int) D.26144;
          printf ("  slot assigned: %03d, slot index: %03d %s\n", i, D.26145, D.26143);
          <D.26142>:
        }
        i = i + 1;
        <D.20093>:
        if (i < cur_slot) goto <D.20092>; else goto <D.20094>;
        <D.20094>:
        if (icount != 0) goto <D.26146>; else goto <D.26147>;
        <D.26146>:
        D.26148 = class->name;
        D.26149 = class->name_space;
        printf ("Interfaces %s.%s (max_iid = %d)\n", D.26149, D.26148, max_iid);
        i = 0;
        goto <D.20096>;
        <D.20095>:
        D.25895 = class->interfaces;
        D.25747 = (long unsigned int) i;
        D.25748 = D.25747 * 8;
        D.26150 = D.25895 + D.25748;
        ic = *D.26150;
        D.26151 = &ic->byval_arg;
        D.26152 = mono_type_full_name (D.26151);
        D.26153 = ic->interface_id;
        D.26154 = (int) D.26153;
        D.26155 = count_virtual_methods (ic);
        D.26156 = mono_class_interface_offset (class, ic);
        printf ("  slot offset: %03d, method count: %03d, iid: %03d %s\n", D.26156, D.26155, D.26154, D.26152);
        i = i + 1;
        <D.20096>:
        D.25902 = class->interface_count;
        D.25903 = (int) D.25902;
        if (D.25903 > i) goto <D.20095>; else goto <D.20097>;
        <D.20097>:
        k = class->parent;
        goto <D.20102>;
        <D.20101>:
        i = 0;
        goto <D.20099>;
        <D.20098>:
        D.26157 = k->interfaces;
        D.25747 = (long unsigned int) i;
        D.25748 = D.25747 * 8;
        D.26158 = D.26157 + D.25748;
        ic = *D.26158;
        D.26151 = &ic->byval_arg;
        D.26159 = mono_type_full_name (D.26151);
        D.26153 = ic->interface_id;
        D.26154 = (int) D.26153;
        D.26160 = count_virtual_methods (ic);
        D.26161 = mono_class_interface_offset (class, ic);
        printf ("  parent slot offset: %03d, method count: %03d, iid: %03d %s\n", D.26161, D.26160, D.26154, D.26159);
        i = i + 1;
        <D.20099>:
        D.26162 = k->interface_count;
        D.26163 = (int) D.26162;
        if (D.26163 > i) goto <D.20098>; else goto <D.20100>;
        <D.20100>:
        k = k->parent;
        <D.20102>:
        if (k != 0B) goto <D.20101>; else goto <D.20103>;
        <D.20103>:
        <D.26147>:
      }
      <D.26124>:
      return;
      fail:
      {
        char * name;

        name = mono_type_get_full_name (class);
        D.26164 = monoeg_g_strdup_printf ("VTable setup of type %s failed", name);
        mono_class_set_failure (class, 7, D.26164);
        monoeg_g_free (name);
        if (override_map != 0B) goto <D.26165>; else goto <D.26166>;
        <D.26165>:
        monoeg_g_hash_table_destroy (override_map);
        <D.26166>:
        if (virt_methods != 0B) goto <D.26167>; else goto <D.26168>;
        <D.26167>:
        monoeg_g_slist_free (virt_methods);
        <D.26168>:
      }
    }
  finally
    {
      error = {CLOBBER};
    }
}


verify_class_overrides (struct MonoClass * class, struct MonoMethod * * overrides, int onum)
{
  int D.26179;
  long unsigned int D.26180;
  long unsigned int D.26181;
  struct MonoMethod * * D.26182;
  sizetype D.26183;
  sizetype D.26184;
  sizetype D.26185;
  struct MonoMethod * * D.26186;
  struct MonoClass * D.26187;
  struct MonoClass * D.26188;
  struct MonoClass * D.26189;
  gchar * D.26192;
  gboolean D.26193;
  short unsigned int D.26194;
  unsigned int D.26195;
  unsigned int D.26196;
  int D.26199;
  int D.26200;
  gchar * D.26203;
  gchar * D.26205;
  short unsigned int D.26206;
  unsigned int D.26207;
  unsigned int D.26208;
  gchar * D.26213;
  gchar * D.26215;
  struct MonoClass * D.26216;
  int D.26217;
  gchar * D.26220;
  int D.26221;
  int D.26224;
  gchar * D.26227;
  int i;

  i = 0;
  goto <D.19939>;
  <D.19938>:
  {
    struct MonoMethod * decl;
    struct MonoMethod * body;

    D.26179 = i * 2;
    D.26180 = (long unsigned int) D.26179;
    D.26181 = D.26180 * 8;
    D.26182 = overrides + D.26181;
    decl = *D.26182;
    D.26179 = i * 2;
    D.26183 = (sizetype) D.26179;
    D.26184 = D.26183 + 1;
    D.26185 = D.26184 * 8;
    D.26186 = overrides + D.26185;
    body = *D.26186;
    D.26187 = body->klass;
    D.26188 = mono_class_get_generic_type_definition (D.26187);
    D.26189 = mono_class_get_generic_type_definition (class);
    if (D.26188 != D.26189) goto <D.26190>; else goto <D.26191>;
    <D.26190>:
    D.26192 = monoeg_strdup ("Method belongs to a different class than the declared one");
    mono_class_set_failure (class, 7, D.26192);
    D.26193 = 0;
    return D.26193;
    <D.26191>:
    D.26194 = body->flags;
    D.26195 = (unsigned int) D.26194;
    D.26196 = D.26195 & 80;
    if (D.26196 != 64) goto <D.26197>; else goto <D.26198>;
    <D.26197>:
    D.26194 = body->flags;
    D.26199 = (int) D.26194;
    D.26200 = D.26199 & 16;
    if (D.26200 != 0) goto <D.26201>; else goto <D.26202>;
    <D.26201>:
    D.26203 = monoeg_strdup ("Method must not be static to override a base type");
    mono_class_set_failure (class, 7, D.26203);
    goto <D.26204>;
    <D.26202>:
    D.26205 = monoeg_strdup ("Method must be virtual to override a base type");
    mono_class_set_failure (class, 7, D.26205);
    <D.26204>:
    D.26193 = 0;
    return D.26193;
    <D.26198>:
    D.26206 = decl->flags;
    D.26207 = (unsigned int) D.26206;
    D.26208 = D.26207 & 80;
    if (D.26208 != 64) goto <D.26209>; else goto <D.26210>;
    <D.26209>:
    D.26194 = body->flags;
    D.26199 = (int) D.26194;
    D.26200 = D.26199 & 16;
    if (D.26200 != 0) goto <D.26211>; else goto <D.26212>;
    <D.26211>:
    D.26213 = monoeg_strdup ("Cannot override a static method in a base type");
    mono_class_set_failure (class, 7, D.26213);
    goto <D.26214>;
    <D.26212>:
    D.26215 = monoeg_strdup ("Cannot override a non virtual method in a base type");
    mono_class_set_failure (class, 7, D.26215);
    <D.26214>:
    D.26193 = 0;
    return D.26193;
    <D.26210>:
    D.26216 = decl->klass;
    D.26217 = mono_class_is_assignable_from_slow (D.26216, class);
    if (D.26217 == 0) goto <D.26218>; else goto <D.26219>;
    <D.26218>:
    D.26220 = monoeg_strdup ("Method overrides a class or interface that extended or implemented by this type");
    mono_class_set_failure (class, 7, D.26220);
    D.26193 = 0;
    return D.26193;
    <D.26219>:
    body = mono_method_get_method_definition (body);
    decl = mono_method_get_method_definition (decl);
    D.26221 = is_wcf_hack_disabled ();
    if (D.26221 != 0) goto <D.26222>; else goto <D.26223>;
    <D.26222>:
    D.26224 = mono_method_can_access_method_full (body, decl, 0B);
    if (D.26224 == 0) goto <D.26225>; else goto <D.26226>;
    <D.26225>:
    {
      char * body_name;
      char * decl_name;

      body_name = mono_method_full_name (body, 1);
      decl_name = mono_method_full_name (decl, 1);
      D.26227 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
      mono_class_set_failure (class, 7, D.26227);
      monoeg_g_free (body_name);
      monoeg_g_free (decl_name);
      D.26193 = 0;
      return D.26193;
    }
    <D.26226>:
    <D.26223>:
  }
  i = i + 1;
  <D.19939>:
  if (i < onum) goto <D.19938>; else goto <D.19940>;
  <D.19940>:
  D.26193 = 1;
  return D.26193;
}


mono_method_get_method_definition (struct MonoMethod * method)
{
  unsigned char D.26229;
  unsigned char D.26230;
  struct MonoMethod * D.26231;

  goto <D.19926>;
  <D.19925>:
  method = MEM[(struct MonoMethodInflated *)method].declaring;
  <D.19926>:
  D.26229 = BIT_FIELD_REF <*method, 8, 264>;
  D.26230 = D.26229 & 16;
  if (D.26230 != 0) goto <D.19925>; else goto <D.19927>;
  <D.19927>:
  D.26231 = method;
  return D.26231;
}


mono_class_need_stelemref_method (struct MonoClass * class)
{
  gboolean D.26233;
  int iftmp.160;
  unsigned char D.26237;
  struct MonoClass * D.26239;
  struct MonoType * D.26240;
  int D.26241;

  D.26237 = class->rank;
  if (D.26237 == 1) goto <D.26238>; else goto <D.26235>;
  <D.26238>:
  D.26239 = class->element_class;
  D.26240 = &D.26239->byval_arg;
  D.26241 = mono_type_is_reference (D.26240);
  if (D.26241 != 0) goto <D.26242>; else goto <D.26235>;
  <D.26242>:
  iftmp.160 = 1;
  goto <D.26236>;
  <D.26235>:
  iftmp.160 = 0;
  <D.26236>:
  D.26233 = iftmp.160;
  return D.26233;
}


check_interface_method_override (struct MonoClass * class, struct MonoMethod * im, struct MonoMethod * cm, gboolean require_newslot, gboolean interface_is_explicitly_implemented_by_class, gboolean slot_is_empty, gboolean security_enabled)
{
  int D.19831;
  const char * D.26244;
  const char * D.26245;
  short unsigned int D.26248;
  int D.26249;
  int D.26250;
  gboolean D.26253;
  int D.26260;
  _Bool D.26264;
  _Bool D.26265;
  _Bool D.26266;
  gchar * D.26269;
  int D.26270;
  short unsigned int D.26275;
  int D.26276;
  int D.26277;
  <unnamed type> D.26280;
  int D.26283;
  int D.26286;
  gchar * D.26289;
  struct MonoClass * D.26292;
  unsigned char D.26293;
  gchar * D.26298;
  int D.26299;
  struct MonoImage * D.26302;
  struct MonoImage * D.26303;
  int D.19846;
  int iftmp.161;
  int D.19845;
  const char[27] * D.26312;
  unsigned char D.26313;
  int D.26314;
  unsigned char D.26315;
  int D.26316;
  _Bool D.26317;
  _Bool D.26318;
  _Bool D.26319;
  const unsigned char * D.26322;
  unsigned char D.26323;
  int D.26324;
  const unsigned char * D.26325;
  unsigned char D.26326;
  int D.26327;
  _Bool D.26328;
  _Bool D.26329;
  const unsigned char * D.26332;
  unsigned char D.26333;
  int D.26334;
  const unsigned char * D.26335;
  unsigned char D.26336;
  int D.26337;
  _Bool D.26338;
  _Bool D.26339;
  const unsigned char * D.26342;
  unsigned char D.26343;
  int D.26344;
  const unsigned char * D.26345;
  unsigned char D.26346;
  int D.26347;
  int D.19855;
  int iftmp.162;
  int D.19854;
  const char[14] * D.26355;
  unsigned char D.26356;
  int D.26357;
  unsigned char D.26358;
  int D.26359;
  _Bool D.26360;
  _Bool D.26361;
  _Bool D.26362;
  const unsigned char * D.26365;
  unsigned char D.26366;
  int D.26367;
  const unsigned char * D.26368;
  unsigned char D.26369;
  int D.26370;
  _Bool D.26371;
  _Bool D.26372;
  const unsigned char * D.26375;
  unsigned char D.26376;
  int D.26377;
  const unsigned char * D.26378;
  unsigned char D.26379;
  int D.26380;
  _Bool D.26381;
  _Bool D.26382;
  const unsigned char * D.26385;
  unsigned char D.26386;
  int D.26387;
  const unsigned char * D.26388;
  unsigned char D.26389;
  int D.26390;
  int D.19864;
  int iftmp.163;
  int D.19863;
  const char[14] * D.26396;
  unsigned char D.26397;
  int D.26398;
  unsigned char D.26399;
  int D.26400;
  _Bool D.26401;
  _Bool D.26402;
  _Bool D.26403;
  const unsigned char * D.26406;
  unsigned char D.26407;
  int D.26408;
  const unsigned char * D.26409;
  unsigned char D.26410;
  int D.26411;
  _Bool D.26412;
  _Bool D.26413;
  const unsigned char * D.26416;
  unsigned char D.26417;
  int D.26418;
  const unsigned char * D.26419;
  unsigned char D.26420;
  int D.26421;
  _Bool D.26422;
  _Bool D.26423;
  const unsigned char * D.26426;
  unsigned char D.26427;
  int D.26428;
  const unsigned char * D.26429;
  unsigned char D.26430;
  int D.26431;
  int D.19873;
  int iftmp.164;
  int D.19872;
  const char[8] * D.26437;
  unsigned char D.26438;
  int D.26439;
  unsigned char D.26440;
  int D.26441;
  _Bool D.26442;
  _Bool D.26443;
  _Bool D.26444;
  const unsigned char * D.26447;
  unsigned char D.26448;
  int D.26449;
  const unsigned char * D.26450;
  unsigned char D.26451;
  int D.26452;
  _Bool D.26453;
  _Bool D.26454;
  const unsigned char * D.26457;
  unsigned char D.26458;
  int D.26459;
  const unsigned char * D.26460;
  unsigned char D.26461;
  int D.26462;
  _Bool D.26463;
  _Bool D.26464;
  const unsigned char * D.26467;
  unsigned char D.26468;
  int D.26469;
  const unsigned char * D.26470;
  unsigned char D.26471;
  int D.26472;
  int D.19882;
  int iftmp.165;
  int D.19881;
  const char[16] * D.26478;
  unsigned char D.26479;
  int D.26480;
  unsigned char D.26481;
  int D.26482;
  _Bool D.26483;
  _Bool D.26484;
  _Bool D.26485;
  const unsigned char * D.26488;
  unsigned char D.26489;
  int D.26490;
  const unsigned char * D.26491;
  unsigned char D.26492;
  int D.26493;
  _Bool D.26494;
  _Bool D.26495;
  const unsigned char * D.26498;
  unsigned char D.26499;
  int D.26500;
  const unsigned char * D.26501;
  unsigned char D.26502;
  int D.26503;
  _Bool D.26504;
  _Bool D.26505;
  const unsigned char * D.26508;
  unsigned char D.26509;
  int D.26510;
  const unsigned char * D.26511;
  unsigned char D.26512;
  int D.26513;
  int D.19891;
  int iftmp.166;
  int D.19890;
  const char[22] * D.26519;
  unsigned char D.26520;
  int D.26521;
  unsigned char D.26522;
  int D.26523;
  _Bool D.26524;
  _Bool D.26525;
  _Bool D.26526;
  const unsigned char * D.26529;
  unsigned char D.26530;
  int D.26531;
  const unsigned char * D.26532;
  unsigned char D.26533;
  int D.26534;
  _Bool D.26535;
  _Bool D.26536;
  const unsigned char * D.26539;
  unsigned char D.26540;
  int D.26541;
  const unsigned char * D.26542;
  unsigned char D.26543;
  int D.26544;
  _Bool D.26545;
  _Bool D.26546;
  const unsigned char * D.26549;
  unsigned char D.26550;
  int D.26551;
  const unsigned char * D.26552;
  unsigned char D.26553;
  int D.26554;
  long unsigned int D.26558;
  char D.26559;
  char * D.26562;
  long unsigned int D.26565;
  int D.19900;
  <unnamed type> D.26574;
  int D.26577;
  int D.26580;
  gchar * D.26583;
  struct MonoMethodSignature * cmsig;
  struct MonoMethodSignature * imsig;

  {
    size_t __s1_len;
    size_t __s2_len;

    D.26244 = cm->name;
    D.26245 = im->name;
    D.19831 = __builtin_strcmp (D.26245, D.26244);
  }
  if (D.19831 == 0) goto <D.26246>; else goto <D.26247>;
  <D.26246>:
  D.26248 = cm->flags;
  D.26249 = (int) D.26248;
  D.26250 = D.26249 & 6;
  if (D.26250 == 0) goto <D.26251>; else goto <D.26252>;
  <D.26251>:
  D.26253 = 0;
  return D.26253;
  <D.26252>:
  if (slot_is_empty == 0) goto <D.26254>; else goto <D.26255>;
  <D.26254>:
  if (require_newslot != 0) goto <D.26256>; else goto <D.26257>;
  <D.26256>:
  if (interface_is_explicitly_implemented_by_class == 0) goto <D.26258>; else goto <D.26259>;
  <D.26258>:
  D.26253 = 0;
  return D.26253;
  <D.26259>:
  D.26248 = cm->flags;
  D.26249 = (int) D.26248;
  D.26260 = D.26249 & 256;
  if (D.26260 == 0) goto <D.26261>; else goto <D.26262>;
  <D.26261>:
  D.26253 = 0;
  return D.26253;
  <D.26262>:
  goto <D.26263>;
  <D.26257>:
  <D.26263>:
  <D.26255>:
  cmsig = mono_method_signature (cm);
  imsig = mono_method_signature (im);
  D.26264 = cmsig == 0B;
  D.26265 = imsig == 0B;
  D.26266 = D.26264 | D.26265;
  if (D.26266 != 0) goto <D.26267>; else goto <D.26268>;
  <D.26267>:
  D.26269 = monoeg_strdup ("Could not resolve the signature of a virtual method");
  mono_class_set_failure (class, 7, D.26269);
  D.26253 = 0;
  return D.26253;
  <D.26268>:
  D.26270 = mono_metadata_signature_equal (cmsig, imsig);
  if (D.26270 == 0) goto <D.26271>; else goto <D.26272>;
  <D.26271>:
  D.26253 = 0;
  return D.26253;
  <D.26272>:
  if (security_enabled != 0) goto <D.26273>; else goto <D.26274>;
  <D.26273>:
  D.26275 = im->flags;
  D.26276 = (int) D.26275;
  D.26277 = D.26276 & 16384;
  if (D.26277 != 0) goto <D.26278>; else goto <D.26279>;
  <D.26278>:
  mono_secman_inheritancedemand_method (cm, im);
  <D.26279>:
  <D.26274>:
  D.26280 = mono_security_get_mode ();
  if (D.26280 == 1) goto <D.26281>; else goto <D.26282>;
  <D.26281>:
  mono_security_core_clr_check_override (class, cm, im);
  <D.26282>:
  D.26283 = is_wcf_hack_disabled ();
  if (D.26283 != 0) goto <D.26284>; else goto <D.26285>;
  <D.26284>:
  D.26286 = mono_method_can_access_method_full (cm, im, 0B);
  if (D.26286 == 0) goto <D.26287>; else goto <D.26288>;
  <D.26287>:
  {
    char * body_name;
    char * decl_name;

    body_name = mono_method_full_name (cm, 1);
    decl_name = mono_method_full_name (im, 1);
    D.26289 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
    mono_class_set_failure (class, 7, D.26289);
    monoeg_g_free (body_name);
    monoeg_g_free (decl_name);
    D.26253 = 0;
    return D.26253;
  }
  <D.26288>:
  <D.26285>:
  D.26253 = 1;
  return D.26253;
  <D.26247>:
  {
    struct MonoClass * ic;
    const char * ic_name_space;
    const char * ic_name;
    char * subname;

    ic = im->klass;
    ic_name_space = ic->name_space;
    ic_name = ic->name;
    if (require_newslot == 0) goto <D.26290>; else goto <D.26291>;
    <D.26290>:
    D.26253 = 0;
    return D.26253;
    <D.26291>:
    D.26292 = cm->klass;
    D.26293 = D.26292->rank;
    if (D.26293 == 0) goto <D.26294>; else goto <D.26295>;
    <D.26294>:
    D.26253 = 0;
    return D.26253;
    <D.26295>:
    cmsig = mono_method_signature (cm);
    imsig = mono_method_signature (im);
    D.26264 = cmsig == 0B;
    D.26265 = imsig == 0B;
    D.26266 = D.26264 | D.26265;
    if (D.26266 != 0) goto <D.26296>; else goto <D.26297>;
    <D.26296>:
    D.26298 = monoeg_strdup ("Could not resolve the signature of a virtual method");
    mono_class_set_failure (class, 7, D.26298);
    D.26253 = 0;
    return D.26253;
    <D.26297>:
    D.26299 = mono_metadata_signature_equal (cmsig, imsig);
    if (D.26299 == 0) goto <D.26300>; else goto <D.26301>;
    <D.26300>:
    D.26253 = 0;
    return D.26253;
    <D.26301>:
    D.26302 = mono_class_get_image (ic);
    D.26303 = mono_defaults.corlib;
    if (D.26302 != D.26303) goto <D.26304>; else goto <D.26305>;
    <D.26304>:
    D.26253 = 0;
    return D.26253;
    <D.26305>:
    if (ic_name_space == 0B) goto <D.26306>; else goto <D.26308>;
    <D.26308>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = ic_name_space;
        D.26312 = "System.Collections.Generic";
        D.26313 = MEM[(const unsigned char *)D.26312];
        D.26314 = (int) D.26313;
        D.26315 = *__s2;
        D.26316 = (int) D.26315;
        __result = D.26314 - D.26316;
        {
          D.26317 = __s2_len != 0;
          D.26318 = __result == 0;
          D.26319 = D.26317 & D.26318;
          if (D.26319 != 0) goto <D.26320>; else goto <D.26321>;
          <D.26320>:
          D.26322 = &MEM[(void *)"System.Collections.Generic" + 1B];
          D.26323 = *D.26322;
          D.26324 = (int) D.26323;
          D.26325 = __s2 + 1;
          D.26326 = *D.26325;
          D.26327 = (int) D.26326;
          __result = D.26324 - D.26327;
          D.26328 = __s2_len > 1;
          D.26318 = __result == 0;
          D.26329 = D.26328 & D.26318;
          if (D.26329 != 0) goto <D.26330>; else goto <D.26331>;
          <D.26330>:
          D.26332 = &MEM[(void *)"System.Collections.Generic" + 2B];
          D.26333 = *D.26332;
          D.26334 = (int) D.26333;
          D.26335 = __s2 + 2;
          D.26336 = *D.26335;
          D.26337 = (int) D.26336;
          __result = D.26334 - D.26337;
          D.26338 = __s2_len > 2;
          D.26318 = __result == 0;
          D.26339 = D.26338 & D.26318;
          if (D.26339 != 0) goto <D.26340>; else goto <D.26341>;
          <D.26340>:
          D.26342 = &MEM[(void *)"System.Collections.Generic" + 3B];
          D.26343 = *D.26342;
          D.26344 = (int) D.26343;
          D.26345 = __s2 + 3;
          D.26346 = *D.26345;
          D.26347 = (int) D.26346;
          __result = D.26344 - D.26347;
          <D.26341>:
          <D.26331>:
          <D.26321>:
        }
        D.19845 = __result;
      }
      iftmp.161 = -D.19845;
      goto <D.26348>;
      <D.26311>:
      iftmp.161 = __builtin_strcmp (ic_name_space, "System.Collections.Generic");
      <D.26348>:
      D.19846 = iftmp.161;
    }
    if (D.19846 != 0) goto <D.26306>; else goto <D.26307>;
    <D.26306>:
    D.26253 = 0;
    return D.26253;
    <D.26307>:
    if (ic_name == 0B) goto <D.26349>; else goto <D.26351>;
    <D.26351>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = ic_name;
        D.26355 = "IEnumerable`1";
        D.26356 = MEM[(const unsigned char *)D.26355];
        D.26357 = (int) D.26356;
        D.26358 = *__s2;
        D.26359 = (int) D.26358;
        __result = D.26357 - D.26359;
        {
          D.26360 = __s2_len != 0;
          D.26361 = __result == 0;
          D.26362 = D.26360 & D.26361;
          if (D.26362 != 0) goto <D.26363>; else goto <D.26364>;
          <D.26363>:
          D.26365 = &MEM[(void *)"IEnumerable`1" + 1B];
          D.26366 = *D.26365;
          D.26367 = (int) D.26366;
          D.26368 = __s2 + 1;
          D.26369 = *D.26368;
          D.26370 = (int) D.26369;
          __result = D.26367 - D.26370;
          D.26371 = __s2_len > 1;
          D.26361 = __result == 0;
          D.26372 = D.26371 & D.26361;
          if (D.26372 != 0) goto <D.26373>; else goto <D.26374>;
          <D.26373>:
          D.26375 = &MEM[(void *)"IEnumerable`1" + 2B];
          D.26376 = *D.26375;
          D.26377 = (int) D.26376;
          D.26378 = __s2 + 2;
          D.26379 = *D.26378;
          D.26380 = (int) D.26379;
          __result = D.26377 - D.26380;
          D.26381 = __s2_len > 2;
          D.26361 = __result == 0;
          D.26382 = D.26381 & D.26361;
          if (D.26382 != 0) goto <D.26383>; else goto <D.26384>;
          <D.26383>:
          D.26385 = &MEM[(void *)"IEnumerable`1" + 3B];
          D.26386 = *D.26385;
          D.26387 = (int) D.26386;
          D.26388 = __s2 + 3;
          D.26389 = *D.26388;
          D.26390 = (int) D.26389;
          __result = D.26387 - D.26390;
          <D.26384>:
          <D.26374>:
          <D.26364>:
        }
        D.19854 = __result;
      }
      iftmp.162 = -D.19854;
      goto <D.26391>;
      <D.26354>:
      iftmp.162 = __builtin_strcmp (ic_name, "IEnumerable`1");
      <D.26391>:
      D.19855 = iftmp.162;
    }
    if (D.19855 != 0) goto <D.26392>; else goto <D.26350>;
    <D.26392>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = ic_name;
        D.26396 = "ICollection`1";
        D.26397 = MEM[(const unsigned char *)D.26396];
        D.26398 = (int) D.26397;
        D.26399 = *__s2;
        D.26400 = (int) D.26399;
        __result = D.26398 - D.26400;
        {
          D.26401 = __s2_len != 0;
          D.26402 = __result == 0;
          D.26403 = D.26401 & D.26402;
          if (D.26403 != 0) goto <D.26404>; else goto <D.26405>;
          <D.26404>:
          D.26406 = &MEM[(void *)"ICollection`1" + 1B];
          D.26407 = *D.26406;
          D.26408 = (int) D.26407;
          D.26409 = __s2 + 1;
          D.26410 = *D.26409;
          D.26411 = (int) D.26410;
          __result = D.26408 - D.26411;
          D.26412 = __s2_len > 1;
          D.26402 = __result == 0;
          D.26413 = D.26412 & D.26402;
          if (D.26413 != 0) goto <D.26414>; else goto <D.26415>;
          <D.26414>:
          D.26416 = &MEM[(void *)"ICollection`1" + 2B];
          D.26417 = *D.26416;
          D.26418 = (int) D.26417;
          D.26419 = __s2 + 2;
          D.26420 = *D.26419;
          D.26421 = (int) D.26420;
          __result = D.26418 - D.26421;
          D.26422 = __s2_len > 2;
          D.26402 = __result == 0;
          D.26423 = D.26422 & D.26402;
          if (D.26423 != 0) goto <D.26424>; else goto <D.26425>;
          <D.26424>:
          D.26426 = &MEM[(void *)"ICollection`1" + 3B];
          D.26427 = *D.26426;
          D.26428 = (int) D.26427;
          D.26429 = __s2 + 3;
          D.26430 = *D.26429;
          D.26431 = (int) D.26430;
          __result = D.26428 - D.26431;
          <D.26425>:
          <D.26415>:
          <D.26405>:
        }
        D.19863 = __result;
      }
      iftmp.163 = -D.19863;
      goto <D.26432>;
      <D.26395>:
      iftmp.163 = __builtin_strcmp (ic_name, "ICollection`1");
      <D.26432>:
      D.19864 = iftmp.163;
    }
    if (D.19864 != 0) goto <D.26433>; else goto <D.26350>;
    <D.26433>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = ic_name;
        D.26437 = "IList`1";
        D.26438 = MEM[(const unsigned char *)D.26437];
        D.26439 = (int) D.26438;
        D.26440 = *__s2;
        D.26441 = (int) D.26440;
        __result = D.26439 - D.26441;
        {
          D.26442 = __s2_len != 0;
          D.26443 = __result == 0;
          D.26444 = D.26442 & D.26443;
          if (D.26444 != 0) goto <D.26445>; else goto <D.26446>;
          <D.26445>:
          D.26447 = &MEM[(void *)"IList`1" + 1B];
          D.26448 = *D.26447;
          D.26449 = (int) D.26448;
          D.26450 = __s2 + 1;
          D.26451 = *D.26450;
          D.26452 = (int) D.26451;
          __result = D.26449 - D.26452;
          D.26453 = __s2_len > 1;
          D.26443 = __result == 0;
          D.26454 = D.26453 & D.26443;
          if (D.26454 != 0) goto <D.26455>; else goto <D.26456>;
          <D.26455>:
          D.26457 = &MEM[(void *)"IList`1" + 2B];
          D.26458 = *D.26457;
          D.26459 = (int) D.26458;
          D.26460 = __s2 + 2;
          D.26461 = *D.26460;
          D.26462 = (int) D.26461;
          __result = D.26459 - D.26462;
          D.26463 = __s2_len > 2;
          D.26443 = __result == 0;
          D.26464 = D.26463 & D.26443;
          if (D.26464 != 0) goto <D.26465>; else goto <D.26466>;
          <D.26465>:
          D.26467 = &MEM[(void *)"IList`1" + 3B];
          D.26468 = *D.26467;
          D.26469 = (int) D.26468;
          D.26470 = __s2 + 3;
          D.26471 = *D.26470;
          D.26472 = (int) D.26471;
          __result = D.26469 - D.26472;
          <D.26466>:
          <D.26456>:
          <D.26446>:
        }
        D.19872 = __result;
      }
      iftmp.164 = -D.19872;
      goto <D.26473>;
      <D.26436>:
      iftmp.164 = __builtin_strcmp (ic_name, "IList`1");
      <D.26473>:
      D.19873 = iftmp.164;
    }
    if (D.19873 != 0) goto <D.26474>; else goto <D.26350>;
    <D.26474>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = ic_name;
        D.26478 = "IReadOnlyList`1";
        D.26479 = MEM[(const unsigned char *)D.26478];
        D.26480 = (int) D.26479;
        D.26481 = *__s2;
        D.26482 = (int) D.26481;
        __result = D.26480 - D.26482;
        {
          D.26483 = __s2_len != 0;
          D.26484 = __result == 0;
          D.26485 = D.26483 & D.26484;
          if (D.26485 != 0) goto <D.26486>; else goto <D.26487>;
          <D.26486>:
          D.26488 = &MEM[(void *)"IReadOnlyList`1" + 1B];
          D.26489 = *D.26488;
          D.26490 = (int) D.26489;
          D.26491 = __s2 + 1;
          D.26492 = *D.26491;
          D.26493 = (int) D.26492;
          __result = D.26490 - D.26493;
          D.26494 = __s2_len > 1;
          D.26484 = __result == 0;
          D.26495 = D.26494 & D.26484;
          if (D.26495 != 0) goto <D.26496>; else goto <D.26497>;
          <D.26496>:
          D.26498 = &MEM[(void *)"IReadOnlyList`1" + 2B];
          D.26499 = *D.26498;
          D.26500 = (int) D.26499;
          D.26501 = __s2 + 2;
          D.26502 = *D.26501;
          D.26503 = (int) D.26502;
          __result = D.26500 - D.26503;
          D.26504 = __s2_len > 2;
          D.26484 = __result == 0;
          D.26505 = D.26504 & D.26484;
          if (D.26505 != 0) goto <D.26506>; else goto <D.26507>;
          <D.26506>:
          D.26508 = &MEM[(void *)"IReadOnlyList`1" + 3B];
          D.26509 = *D.26508;
          D.26510 = (int) D.26509;
          D.26511 = __s2 + 3;
          D.26512 = *D.26511;
          D.26513 = (int) D.26512;
          __result = D.26510 - D.26513;
          <D.26507>:
          <D.26497>:
          <D.26487>:
        }
        D.19881 = __result;
      }
      iftmp.165 = -D.19881;
      goto <D.26514>;
      <D.26477>:
      iftmp.165 = __builtin_strcmp (ic_name, "IReadOnlyList`1");
      <D.26514>:
      D.19882 = iftmp.165;
    }
    if (D.19882 != 0) goto <D.26515>; else goto <D.26350>;
    <D.26515>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = ic_name;
        D.26519 = "IReadOnlyCollection`1";
        D.26520 = MEM[(const unsigned char *)D.26519];
        D.26521 = (int) D.26520;
        D.26522 = *__s2;
        D.26523 = (int) D.26522;
        __result = D.26521 - D.26523;
        {
          D.26524 = __s2_len != 0;
          D.26525 = __result == 0;
          D.26526 = D.26524 & D.26525;
          if (D.26526 != 0) goto <D.26527>; else goto <D.26528>;
          <D.26527>:
          D.26529 = &MEM[(void *)"IReadOnlyCollection`1" + 1B];
          D.26530 = *D.26529;
          D.26531 = (int) D.26530;
          D.26532 = __s2 + 1;
          D.26533 = *D.26532;
          D.26534 = (int) D.26533;
          __result = D.26531 - D.26534;
          D.26535 = __s2_len > 1;
          D.26525 = __result == 0;
          D.26536 = D.26535 & D.26525;
          if (D.26536 != 0) goto <D.26537>; else goto <D.26538>;
          <D.26537>:
          D.26539 = &MEM[(void *)"IReadOnlyCollection`1" + 2B];
          D.26540 = *D.26539;
          D.26541 = (int) D.26540;
          D.26542 = __s2 + 2;
          D.26543 = *D.26542;
          D.26544 = (int) D.26543;
          __result = D.26541 - D.26544;
          D.26545 = __s2_len > 2;
          D.26525 = __result == 0;
          D.26546 = D.26545 & D.26525;
          if (D.26546 != 0) goto <D.26547>; else goto <D.26548>;
          <D.26547>:
          D.26549 = &MEM[(void *)"IReadOnlyCollection`1" + 3B];
          D.26550 = *D.26549;
          D.26551 = (int) D.26550;
          D.26552 = __s2 + 3;
          D.26553 = *D.26552;
          D.26554 = (int) D.26553;
          __result = D.26551 - D.26554;
          <D.26548>:
          <D.26538>:
          <D.26528>:
        }
        D.19890 = __result;
      }
      iftmp.166 = -D.19890;
      goto <D.26555>;
      <D.26518>:
      iftmp.166 = __builtin_strcmp (ic_name, "IReadOnlyCollection`1");
      <D.26555>:
      D.19891 = iftmp.166;
    }
    if (D.19891 != 0) goto <D.26349>; else goto <D.26350>;
    <D.26349>:
    D.26253 = 0;
    return D.26253;
    <D.26350>:
    D.26244 = cm->name;
    subname = strstr (D.26244, ic_name_space);
    D.26244 = cm->name;
    if (D.26244 != subname) goto <D.26556>; else goto <D.26557>;
    <D.26556>:
    D.26253 = 0;
    return D.26253;
    <D.26557>:
    D.26558 = strlen (ic_name_space);
    subname = subname + D.26558;
    D.26559 = *subname;
    if (D.26559 != 46) goto <D.26560>; else goto <D.26561>;
    <D.26560>:
    D.26253 = 0;
    return D.26253;
    <D.26561>:
    subname = subname + 1;
    D.26562 = strstr (subname, ic_name);
    if (D.26562 != subname) goto <D.26563>; else goto <D.26564>;
    <D.26563>:
    D.26253 = 0;
    return D.26253;
    <D.26564>:
    D.26565 = strlen (ic_name);
    subname = subname + D.26565;
    D.26559 = *subname;
    if (D.26559 != 46) goto <D.26566>; else goto <D.26567>;
    <D.26566>:
    D.26253 = 0;
    return D.26253;
    <D.26567>:
    subname = subname + 1;
    {
      size_t __s1_len;
      size_t __s2_len;

      D.26245 = im->name;
      D.19900 = __builtin_strcmp (subname, D.26245);
    }
    if (D.19900 != 0) goto <D.26568>; else goto <D.26569>;
    <D.26568>:
    D.26253 = 0;
    return D.26253;
    <D.26569>:
    if (security_enabled != 0) goto <D.26570>; else goto <D.26571>;
    <D.26570>:
    D.26275 = im->flags;
    D.26276 = (int) D.26275;
    D.26277 = D.26276 & 16384;
    if (D.26277 != 0) goto <D.26572>; else goto <D.26573>;
    <D.26572>:
    mono_secman_inheritancedemand_method (cm, im);
    <D.26573>:
    <D.26571>:
    D.26574 = mono_security_get_mode ();
    if (D.26574 == 1) goto <D.26575>; else goto <D.26576>;
    <D.26575>:
    mono_security_core_clr_check_override (class, cm, im);
    <D.26576>:
    D.26577 = is_wcf_hack_disabled ();
    if (D.26577 != 0) goto <D.26578>; else goto <D.26579>;
    <D.26578>:
    D.26580 = mono_method_can_access_method_full (cm, im, 0B);
    if (D.26580 == 0) goto <D.26581>; else goto <D.26582>;
    <D.26581>:
    {
      char * body_name;
      char * decl_name;

      body_name = mono_method_full_name (cm, 1);
      decl_name = mono_method_full_name (im, 1);
      D.26583 = monoeg_g_strdup_printf ("Method %s overrides method \'%s\' which is not accessible", body_name, decl_name);
      mono_class_set_failure (class, 7, D.26583);
      monoeg_g_free (body_name);
      monoeg_g_free (decl_name);
      D.26253 = 0;
      return D.26253;
    }
    <D.26582>:
    <D.26579>:
    D.26253 = 1;
    return D.26253;
  }
}


print_unimplemented_interface_method_info (struct MonoClass * class, struct MonoClass * ic, struct MonoMethod * im, int im_slot, struct MonoMethod * * overrides, int onum)
{
  int D.26585;
  long unsigned int D.26586;
  long unsigned int D.26587;
  struct MonoMethod * * D.26588;
  struct MonoMethod * D.26589;
  short int D.26590;
  int D.26591;
  const char * D.26592;
  sizetype D.26593;
  sizetype D.26594;
  sizetype D.26595;
  struct MonoMethod * * D.26596;
  struct MonoMethod * D.26597;
  short int D.26598;
  int D.26599;
  const char * D.26600;
  struct MonoMethodSignature * D.26601;
  struct MonoType * D.26602;
  const char * D.26603;
  struct MonoType * D.26604;
  char * D.26605;
  unsigned char D.26606;
  struct MonoMethod * * D.26609;
  long unsigned int D.26610;
  long unsigned int D.26611;
  struct MonoMethod * * D.26612;
  struct MonoMethodSignature * D.26613;
  const char * D.26614;
  unsigned int index.167;
  unsigned int D.26616;
  int index;
  char * method_signature;
  char * type_name;

  index = 0;
  goto <D.19915>;
  <D.19914>:
  D.26585 = index * 2;
  D.26586 = (long unsigned int) D.26585;
  D.26587 = D.26586 * 8;
  D.26588 = overrides + D.26587;
  D.26589 = *D.26588;
  D.26590 = D.26589->slot;
  D.26591 = (int) D.26590;
  D.26585 = index * 2;
  D.26586 = (long unsigned int) D.26585;
  D.26587 = D.26586 * 8;
  D.26588 = overrides + D.26587;
  D.26589 = *D.26588;
  D.26592 = D.26589->name;
  D.26585 = index * 2;
  D.26593 = (sizetype) D.26585;
  D.26594 = D.26593 + 1;
  D.26595 = D.26594 * 8;
  D.26596 = overrides + D.26595;
  D.26597 = *D.26596;
  D.26598 = D.26597->slot;
  D.26599 = (int) D.26598;
  D.26585 = index * 2;
  D.26593 = (sizetype) D.26585;
  D.26594 = D.26593 + 1;
  D.26595 = D.26594 * 8;
  D.26596 = overrides + D.26595;
  D.26597 = *D.26596;
  D.26600 = D.26597->name;
  mono_trace (16, 2, " at slot %d: %s (%d) overrides %s (%d)\n", im_slot, D.26600, D.26599, D.26592, D.26591);
  index = index + 1;
  <D.19915>:
  if (index < onum) goto <D.19914>; else goto <D.19916>;
  <D.19916>:
  D.26601 = mono_method_signature (im);
  method_signature = mono_signature_get_desc (D.26601, 0);
  D.26602 = &class->byval_arg;
  type_name = mono_type_full_name (D.26602);
  D.26603 = im->name;
  D.26604 = &ic->byval_arg;
  D.26605 = mono_type_get_name (D.26604);
  mono_trace (16, 2, "no implementation for interface method %s::%s(%s) in class %s\n", D.26605, D.26603, method_signature, type_name);
  monoeg_g_free (method_signature);
  monoeg_g_free (type_name);
  mono_class_setup_methods (class);
  D.26606 = class->exception_type;
  if (D.26606 != 0) goto <D.26607>; else goto <D.26608>;
  <D.26607>:
  {
    char * name;

    name = mono_type_get_full_name (class);
    mono_trace (16, 2, "CLASS %s failed to resolve methods\n", name);
    monoeg_g_free (name);
    return;
  }
  <D.26608>:
  index = 0;
  goto <D.19920>;
  <D.19919>:
  {
    struct MonoMethod * cm;

    D.26609 = class->methods;
    D.26610 = (long unsigned int) index;
    D.26611 = D.26610 * 8;
    D.26612 = D.26609 + D.26611;
    cm = *D.26612;
    D.26613 = mono_method_signature (cm);
    method_signature = mono_signature_get_desc (D.26613, 1);
    D.26614 = cm->name;
    mono_trace (16, 2, "METHOD %s(%s)\n", D.26614, method_signature);
    monoeg_g_free (method_signature);
  }
  index = index + 1;
  <D.19920>:
  index.167 = (unsigned int) index;
  D.26616 = class->method.count;
  if (index.167 < D.26616) goto <D.19919>; else goto <D.19921>;
  <D.19921>:
}


is_wcf_hack_disabled ()
{
  int inited.168;
  const gchar * D.26621;
  _Bool D.26622;
  int disabled.169;
  gboolean D.26624;
  static gboolean disabled;
  static gboolean inited = 0;

  inited.168 = inited;
  if (inited.168 == 0) goto <D.26619>; else goto <D.26620>;
  <D.26619>:
  D.26621 = monoeg_g_getenv ("MONO_DISABLE_WCF_HACK");
  D.26622 = D.26621 != 0B;
  disabled.169 = (int) D.26622;
  disabled = disabled.169;
  inited = 1;
  <D.26620>:
  D.26624 = disabled;
  return D.26624;
}


mono_class_get_virtual_methods (struct MonoClass * klass, void * * iter)
{
  struct MonoMethod * D.26628;
  struct MonoMethod * * D.26631;
  unsigned int D.26633;
  struct MonoImage * D.26635;
  unsigned char D.26636;
  unsigned char D.26637;
  struct MonoGenericClass * D.26639;
  void * D.26640;
  struct MonoMethod * D.26646;
  short unsigned int D.26649;
  int D.26650;
  int D.26651;
  unsigned int D.26653;
  long unsigned int D.26654;
  long unsigned int D.26655;
  struct MonoMethod * * D.26656;
  long int D.26662;
  unsigned int D.26663;
  unsigned int i.170;
  unsigned int D.26665;
  int D.26666;
  unsigned int D.26667;
  unsigned int D.26671;
  unsigned int D.26672;
  int D.26673;
  long unsigned int D.26674;
  void * D.26675;
  struct MonoMethod * * method;

  if (iter == 0B) goto <D.26626>; else goto <D.26627>;
  <D.26626>:
  D.26628 = 0B;
  return D.26628;
  <D.26627>:
  D.26631 = klass->methods;
  if (D.26631 != 0B) goto <D.26629>; else goto <D.26632>;
  <D.26632>:
  D.26633 = klass->type_token;
  if (D.26633 == 0) goto <D.26629>; else goto <D.26634>;
  <D.26634>:
  D.26635 = klass->image;
  D.26636 = BIT_FIELD_REF <*D.26635, 8, 224>;
  D.26637 = D.26636 & 8;
  if (D.26637 != 0) goto <D.26629>; else goto <D.26638>;
  <D.26638>:
  D.26639 = klass->generic_class;
  if (D.26639 != 0B) goto <D.26629>; else goto <D.26630>;
  <D.26629>:
  D.26640 = *iter;
  if (D.26640 == 0B) goto <D.26641>; else goto <D.26642>;
  <D.26641>:
  mono_class_setup_methods (klass);
  D.26631 = klass->methods;
  if (D.26631 == 0B) goto <D.26643>; else goto <D.26644>;
  <D.26643>:
  D.26628 = 0B;
  return D.26628;
  <D.26644>:
  method = klass->methods;
  goto <D.26645>;
  <D.26642>:
  method = *iter;
  method = method + 8;
  <D.26645>:
  goto <D.21617>;
  <D.21616>:
  D.26646 = *method;
  if (D.26646 != 0B) goto <D.26647>; else goto <D.26648>;
  <D.26647>:
  D.26646 = *method;
  D.26649 = D.26646->flags;
  D.26650 = (int) D.26649;
  D.26651 = D.26650 & 64;
  if (D.26651 != 0) goto <D.21615>; else goto <D.26652>;
  <D.26652>:
  <D.26648>:
  method = method + 8;
  <D.21617>:
  D.26631 = klass->methods;
  D.26653 = klass->method.count;
  D.26654 = (long unsigned int) D.26653;
  D.26655 = D.26654 * 8;
  D.26656 = D.26631 + D.26655;
  if (D.26656 > method) goto <D.21616>; else goto <D.21615>;
  <D.21615>:
  D.26631 = klass->methods;
  D.26653 = klass->method.count;
  D.26654 = (long unsigned int) D.26653;
  D.26655 = D.26654 * 8;
  D.26656 = D.26631 + D.26655;
  if (D.26656 > method) goto <D.26657>; else goto <D.26658>;
  <D.26657>:
  *iter = method;
  D.26628 = *method;
  return D.26628;
  <D.26658>:
  D.26628 = 0B;
  return D.26628;
  <D.26630>:
  {
    struct MonoMethod * res;
    int i;
    int start_index;

    res = 0B;
    D.26640 = *iter;
    if (D.26640 == 0B) goto <D.26659>; else goto <D.26660>;
    <D.26659>:
    start_index = 0;
    goto <D.26661>;
    <D.26660>:
    D.26640 = *iter;
    D.26662 = (long int) D.26640;
    start_index = (int) D.26662;
    <D.26661>:
    i = start_index;
    goto <D.21624>;
    <D.21623>:
    {
      guint32 flags;

      D.26663 = klass->method.first;
      i.170 = (unsigned int) i;
      D.26665 = D.26663 + i.170;
      D.26666 = (int) D.26665;
      D.26635 = klass->image;
      flags = mono_metadata_decode_table_row_col (D.26635, 6, D.26666, 2);
      D.26667 = flags & 64;
      if (D.26667 != 0) goto <D.21622>; else goto <D.26668>;
      <D.26668>:
    }
    i = i + 1;
    <D.21624>:
    i.170 = (unsigned int) i;
    D.26653 = klass->method.count;
    if (i.170 < D.26653) goto <D.21623>; else goto <D.21622>;
    <D.21622>:
    i.170 = (unsigned int) i;
    D.26653 = klass->method.count;
    if (i.170 < D.26653) goto <D.26669>; else goto <D.26670>;
    <D.26669>:
    D.26663 = klass->method.first;
    i.170 = (unsigned int) i;
    D.26665 = D.26663 + i.170;
    D.26671 = D.26665 + 1;
    D.26672 = D.26671 | 100663296;
    D.26635 = klass->image;
    res = mono_get_method (D.26635, D.26672, klass);
    D.26673 = i + 1;
    D.26674 = (long unsigned int) D.26673;
    D.26675 = (void *) D.26674;
    *iter = D.26675;
    D.26628 = res;
    return D.26628;
    <D.26670>:
    D.26628 = 0B;
    return D.26628;
  }
}


print_implemented_interfaces (struct MonoClass * klass)
{
  short unsigned int D.26677;
  int D.26678;
  struct MonoClass * * D.26679;
  long unsigned int D.26680;
  long unsigned int D.26681;
  struct MonoClass * * D.26682;
  struct MonoClass * D.26683;
  const char * D.26684;
  const char * D.26685;
  unsigned int D.26686;
  guint16 * D.26687;
  long unsigned int D.26688;
  guint16 * D.26689;
  short unsigned int D.26690;
  int D.26691;
  short unsigned int D.26692;
  int D.26693;
  short unsigned int D.26696;
  int D.26697;
  guint8 * D.26699;
  int D.26700;
  sizetype D.26701;
  guint8 * D.26702;
  unsigned char D.26703;
  int D.26704;
  int D.26705;
  int D.26706;
  int D.26707;
  sizetype D.26709;
  guint8 * D.26710;
  unsigned char D.26711;
  int D.26712;
  int D.26713;
  int D.26714;
  int D.26715;
  _Bool D.26716;
  int D.26717;
  int D.26718;
  const char * D.26719;
  int D.26720;
  const char * D.26723;
  void * * D.26727;
  void * * D.26728;
  const char * D.26729;
  short unsigned int D.26730;
  int D.26731;
  const char * D.26732;
  unsigned int D.26733;
  int D.26734;
  unsigned int i.171;
  unsigned int D.26736;
  char * name;
  struct MonoError error;
  struct GPtrArray * ifaces;
  int i;
  int ancestor_level;

  try
    {
      ifaces = 0B;
      ancestor_level = 0;
      name = mono_type_get_full_name (klass);
      D.26677 = klass->interface_offsets_count;
      D.26678 = (int) D.26677;
      printf ("Packed interface table for class %s has size %d\n", name, D.26678);
      monoeg_g_free (name);
      i = 0;
      goto <D.19504>;
      <D.19503>:
      D.26679 = klass->interfaces_packed;
      D.26680 = (long unsigned int) i;
      D.26681 = D.26680 * 8;
      D.26682 = D.26679 + D.26681;
      D.26683 = *D.26682;
      D.26684 = D.26683->name;
      D.26679 = klass->interfaces_packed;
      D.26680 = (long unsigned int) i;
      D.26681 = D.26680 * 8;
      D.26682 = D.26679 + D.26681;
      D.26683 = *D.26682;
      D.26685 = D.26683->name_space;
      D.26679 = klass->interfaces_packed;
      D.26680 = (long unsigned int) i;
      D.26681 = D.26680 * 8;
      D.26682 = D.26679 + D.26681;
      D.26683 = *D.26682;
      D.26686 = D.26683->method.count;
      D.26687 = klass->interface_offsets_packed;
      D.26680 = (long unsigned int) i;
      D.26688 = D.26680 * 2;
      D.26689 = D.26687 + D.26688;
      D.26690 = *D.26689;
      D.26691 = (int) D.26690;
      D.26679 = klass->interfaces_packed;
      D.26680 = (long unsigned int) i;
      D.26681 = D.26680 * 8;
      D.26682 = D.26679 + D.26681;
      D.26683 = *D.26682;
      D.26692 = D.26683->interface_id;
      D.26693 = (int) D.26692;
      printf ("  [%03d][UUID %03d][SLOT %03d][SIZE  %03d] interface %s.%s\n", i, D.26693, D.26691, D.26686, D.26685, D.26684);
      i = i + 1;
      <D.19504>:
      D.26677 = klass->interface_offsets_count;
      D.26678 = (int) D.26677;
      if (D.26678 > i) goto <D.19503>; else goto <D.19505>;
      <D.19505>:
      printf ("Interface flags: ");
      i = 0;
      goto <D.19507>;
      <D.19506>:
      D.26696 = klass->max_interface_id;
      D.26697 = (int) D.26696;
      if (D.26697 >= i) goto <D.26698>; else goto <D.26694>;
      <D.26698>:
      D.26699 = klass->interface_bitmap;
      D.26700 = i >> 3;
      D.26701 = (sizetype) D.26700;
      D.26702 = D.26699 + D.26701;
      D.26703 = *D.26702;
      D.26704 = (int) D.26703;
      D.26705 = i & 7;
      D.26706 = D.26704 >> D.26705;
      D.26707 = D.26706 & 1;
      if (D.26707 != 0) goto <D.26708>; else goto <D.26694>;
      <D.26708>:
      printf ("(%d,T)", i);
      goto <D.26695>;
      <D.26694>:
      printf ("(%d,F)", i);
      <D.26695>:
      i = i + 1;
      <D.19507>:
      D.26696 = klass->max_interface_id;
      D.26697 = (int) D.26696;
      if (D.26697 >= i) goto <D.19506>; else goto <D.19508>;
      <D.19508>:
      printf ("\n");
      printf ("Dump interface flags:");
      i = 0;
      goto <D.19510>;
      <D.19509>:
      D.26699 = klass->interface_bitmap;
      D.26709 = (sizetype) i;
      D.26710 = D.26699 + D.26709;
      D.26711 = *D.26710;
      D.26712 = (int) D.26711;
      printf (" %02X", D.26712);
      i = i + 1;
      <D.19510>:
      D.26696 = klass->max_interface_id;
      D.26697 = (int) D.26696;
      D.26713 = D.26697 + 1;
      D.26714 = D.26713 >> 3;
      D.26696 = klass->max_interface_id;
      D.26697 = (int) D.26696;
      D.26713 = D.26697 + 1;
      D.26715 = D.26713 & 7;
      D.26716 = D.26715 != 0;
      D.26717 = (int) D.26716;
      D.26718 = D.26714 + D.26717;
      if (D.26718 > i) goto <D.19509>; else goto <D.19511>;
      <D.19511>:
      printf ("\n");
      goto <D.19517>;
      <D.19516>:
      D.26719 = klass->name;
      printf ("[LEVEL %d] Implemented interfaces by class %s:\n", ancestor_level, D.26719);
      ifaces = mono_class_get_implemented_interfaces (klass, &error);
      D.26720 = mono_error_ok (&error);
      if (D.26720 == 0) goto <D.26721>; else goto <D.26722>;
      <D.26721>:
      D.26723 = mono_error_get_message (&error);
      printf ("  Type failed due to %s\n", D.26723);
      mono_error_cleanup (&error);
      goto <D.26724>;
      <D.26722>:
      if (ifaces != 0B) goto <D.26725>; else goto <D.26726>;
      <D.26725>:
      i = 0;
      goto <D.19514>;
      <D.19513>:
      {
        struct MonoClass * ic;

        D.26727 = ifaces->pdata;
        D.26680 = (long unsigned int) i;
        D.26681 = D.26680 * 8;
        D.26728 = D.26727 + D.26681;
        ic = *D.26728;
        D.26729 = ic->name;
        D.26730 = ic->interface_id;
        D.26731 = (int) D.26730;
        printf ("  [UIID %d] interface %s\n", D.26731, D.26729);
        D.26729 = ic->name;
        D.26732 = ic->name_space;
        D.26733 = ic->method.count;
        D.26734 = mono_class_interface_offset (klass, ic);
        D.26730 = ic->interface_id;
        D.26731 = (int) D.26730;
        printf ("  [%03d][UUID %03d][SLOT %03d][SIZE  %03d] interface %s.%s\n", i, D.26731, D.26734, D.26733, D.26732, D.26729);
      }
      i = i + 1;
      <D.19514>:
      i.171 = (unsigned int) i;
      D.26736 = ifaces->len;
      if (i.171 < D.26736) goto <D.19513>; else goto <D.19515>;
      <D.19515>:
      monoeg_g_ptr_array_free (ifaces, 1);
      <D.26726>:
      <D.26724>:
      ancestor_level = ancestor_level + 1;
      klass = klass->parent;
      <D.19517>:
      if (klass != 0B) goto <D.19516>; else goto <D.19518>;
      <D.19518>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


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

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


mono_method_get_vtable_slot (struct MonoMethod * method)
{
  short int D.26739;
  struct MonoClass * D.26742;
  unsigned char D.26743;
  int D.26746;
  struct MonoGenericClass * D.26749;
  _Bool D.26750;
  long int D.26751;
  long int D.26752;
  struct MonoMethod * * D.26755;
  _Bool D.26756;
  long int D.26757;
  long int D.26758;
  long unsigned int D.26761;
  long unsigned int D.26762;
  struct MonoMethod * * D.26763;
  struct MonoMethod * D.26764;
  unsigned int i.172;
  unsigned int D.26767;
  _Bool D.26768;
  long int D.26769;
  long int D.26770;
  struct MonoMethod * * D.26773;
  _Bool D.26774;
  long int D.26775;
  long int D.26776;
  struct MonoMethod * * D.26779;
  struct MonoMethod * D.26780;
  short int D.26781;
  _Bool D.26782;
  long int D.26783;
  long int D.26784;

  D.26739 = method->slot;
  if (D.26739 == -1) goto <D.26740>; else goto <D.26741>;
  <D.26740>:
  D.26742 = method->klass;
  mono_class_setup_vtable (D.26742);
  D.26742 = method->klass;
  D.26743 = D.26742->exception_type;
  if (D.26743 != 0) goto <D.26744>; else goto <D.26745>;
  <D.26744>:
  D.26746 = -1;
  return D.26746;
  <D.26745>:
  D.26739 = method->slot;
  if (D.26739 == -1) goto <D.26747>; else goto <D.26748>;
  <D.26747>:
  {
    struct MonoClass * gklass;
    int i;

    D.26742 = method->klass;
    D.26749 = D.26742->generic_class;
    D.26750 = D.26749 == 0B;
    D.26751 = (long int) D.26750;
    D.26752 = __builtin_expect (D.26751, 0);
    if (D.26752 != 0) goto <D.26753>; else goto <D.26754>;
    <D.26753>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4676, "method->klass->generic_class");
    <D.26754>:
    D.26742 = method->klass;
    D.26749 = D.26742->generic_class;
    gklass = D.26749->container_class;
    D.26742 = method->klass;
    mono_class_setup_methods (D.26742);
    D.26742 = method->klass;
    D.26755 = D.26742->methods;
    D.26756 = D.26755 == 0B;
    D.26757 = (long int) D.26756;
    D.26758 = __builtin_expect (D.26757, 0);
    if (D.26758 != 0) goto <D.26759>; else goto <D.26760>;
    <D.26759>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4679, "method->klass->methods");
    <D.26760>:
    i = 0;
    goto <D.20112>;
    <D.20111>:
    D.26742 = method->klass;
    D.26755 = D.26742->methods;
    D.26761 = (long unsigned int) i;
    D.26762 = D.26761 * 8;
    D.26763 = D.26755 + D.26762;
    D.26764 = *D.26763;
    if (D.26764 == method) goto <D.20110>; else goto <D.26765>;
    <D.26765>:
    i = i + 1;
    <D.20112>:
    i.172 = (unsigned int) i;
    D.26742 = method->klass;
    D.26767 = D.26742->method.count;
    if (i.172 < D.26767) goto <D.20111>; else goto <D.20110>;
    <D.20110>:
    i.172 = (unsigned int) i;
    D.26742 = method->klass;
    D.26767 = D.26742->method.count;
    D.26768 = i.172 >= D.26767;
    D.26769 = (long int) D.26768;
    D.26770 = __builtin_expect (D.26769, 0);
    if (D.26770 != 0) goto <D.26771>; else goto <D.26772>;
    <D.26771>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4684, "i < method->klass->method.count");
    <D.26772>:
    D.26773 = gklass->methods;
    D.26774 = D.26773 == 0B;
    D.26775 = (long int) D.26774;
    D.26776 = __builtin_expect (D.26775, 0);
    if (D.26776 != 0) goto <D.26777>; else goto <D.26778>;
    <D.26777>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4685, "gklass->methods");
    <D.26778>:
    D.26773 = gklass->methods;
    D.26761 = (long unsigned int) i;
    D.26762 = D.26761 * 8;
    D.26779 = D.26773 + D.26762;
    D.26780 = *D.26779;
    D.26781 = D.26780->slot;
    method->slot = D.26781;
  }
  <D.26748>:
  D.26739 = method->slot;
  D.26782 = D.26739 == -1;
  D.26783 = (long int) D.26782;
  D.26784 = __builtin_expect (D.26783, 0);
  if (D.26784 != 0) goto <D.26785>; else goto <D.26786>;
  <D.26785>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4688, "method->slot != -1");
  <D.26786>:
  <D.26741>:
  D.26739 = method->slot;
  D.26746 = (int) D.26739;
  return D.26746;
}


mono_method_get_vtable_index (struct MonoMethod * method)
{
  unsigned char D.26788;
  unsigned char D.26789;
  short unsigned int D.26792;
  int D.26793;
  int D.26794;
  struct MonoMethod * D.26797;
  unsigned char D.26798;
  unsigned char D.26799;
  int D.26802;

  D.26788 = BIT_FIELD_REF <*method, 8, 264>;
  D.26789 = D.26788 & 16;
  if (D.26789 != 0) goto <D.26790>; else goto <D.26791>;
  <D.26790>:
  D.26792 = method->flags;
  D.26793 = (int) D.26792;
  D.26794 = D.26793 & 64;
  if (D.26794 != 0) goto <D.26795>; else goto <D.26796>;
  <D.26795>:
  {
    struct MonoMethodInflated * imethod;

    imethod = method;
    D.26797 = imethod->declaring;
    D.26798 = BIT_FIELD_REF <*D.26797, 8, 264>;
    D.26799 = D.26798 & 8;
    if (D.26799 != 0) goto <D.26800>; else goto <D.26801>;
    <D.26800>:
    D.26797 = imethod->declaring;
    D.26802 = mono_method_get_vtable_slot (D.26797);
    return D.26802;
    <D.26801>:
  }
  <D.26796>:
  <D.26791>:
  D.26802 = mono_method_get_vtable_slot (method);
  return D.26802;
}


mono_class_init (struct MonoClass * class)
{
  _Bool D.26804;
  long int D.26805;
  long int D.26806;
  long unsigned int D.26809;
  long unsigned int D.26810;
  mono_bool D.26813;
  unsigned char D.26814;
  _Bool D.26815;
  unsigned char D.26818;
  unsigned char D.26819;
  gchar * D.26822;
  int D.26823;
  int D.26826;
  struct MonoImage * D.26829;
  const char * D.26830;
  const char * D.26831;
  char * D.26832;
  unsigned char D.26833;
  _Bool D.26834;
  _Bool D.26835;
  _Bool D.26836;
  unsigned char D.26839;
  unsigned char D.26840;
  unsigned char D.26843;
  int D.26846;
  struct MonoClass * D.26849;
  unsigned int D.26852;
  unsigned int D.26853;
  long unsigned int D.26856;
  long unsigned int D.26857;
  struct MonoGenericClass * D.26858;
  unsigned char D.26861;
  unsigned char D.26862;
  long unsigned int D.26865;
  long unsigned int D.26866;
  unsigned char D.26867;
  gchar * D.26872;
  unsigned int D.26875;
  unsigned int D.26876;
  unsigned char D.26878;
  unsigned int D.26880;
  short unsigned int D.26881;
  unsigned char D.26884;
  unsigned char D.26885;
  unsigned char D.26891;
  unsigned char D.26892;
  unsigned int D.26894;
  unsigned char D.26897;
  unsigned char D.26898;
  unsigned int D.26901;
  int D.26902;
  unsigned int D.26903;
  int D.26904;
  unsigned int D.26905;
  unsigned char D.26906;
  <unnamed-unsigned:4> D.26907;
  unsigned int D.26908;
  unsigned char D.26909;
  <unnamed-unsigned:1> D.26910;
  <unnamed-unsigned:1> D.26911;
  <unnamed-unsigned:1> D.26912;
  <unnamed-unsigned:1> D.26913;
  unsigned char D.26915;
  struct MonoLoaderError * D.26919;
  unsigned char D.26921;
  guint32 iftmp.173;
  short unsigned int D.26928;
  unsigned int D.26931;
  int D.26932;
  int D.26933;
  unsigned int D.26934;
  unsigned int D.26935;
  struct MonoMethod * default_ghc.174;
  unsigned int D.26941;
  int D.26942;
  <unnamed-unsigned:1> D.26943;
  <unnamed-unsigned:1> D.26944;
  <unnamed-unsigned:1> D.26945;
  struct MonoClass * D.26951;
  struct MonoType * D.26952;
  int D.26953;
  _Bool D.26954;
  int D.26955;
  int D.26958;
  <unnamed-unsigned:1> D.26966;
  int D.26967;
  unsigned char D.26968;
  <unnamed-unsigned:1> D.26969;
  <unnamed-unsigned:1> D.26970;
  unsigned char D.26971;
  int D.26974;
  struct MonoImage * D.26980;
  short unsigned int D.26985;
  int D.26986;
  int D.26987;
  struct MonoMethod * * D.26992;
  long unsigned int D.26993;
  long unsigned int D.26994;
  struct MonoMethod * * D.26995;
  short unsigned int D.26996;
  int D.26997;
  int D.26998;
  int D.20287;
  int iftmp.175;
  int D.20283;
  const char[7] * D.27004;
  unsigned char D.27005;
  int D.27006;
  unsigned char D.27007;
  int D.27008;
  _Bool D.27009;
  _Bool D.27010;
  _Bool D.27011;
  const unsigned char * D.27014;
  unsigned char D.27015;
  int D.27016;
  const unsigned char * D.27017;
  unsigned char D.27018;
  int D.27019;
  _Bool D.27020;
  _Bool D.27021;
  const unsigned char * D.27024;
  unsigned char D.27025;
  int D.27026;
  const unsigned char * D.27027;
  unsigned char D.27028;
  int D.27029;
  _Bool D.27030;
  _Bool D.27031;
  const unsigned char * D.27034;
  unsigned char D.27035;
  int D.27036;
  const unsigned char * D.27037;
  unsigned char D.27038;
  int D.27039;
  const char * D.27041;
  unsigned int i.176;
  unsigned char D.27047;
  struct MonoLoaderError * D.27050;
  int D.27052;
  struct MonoLoaderError * D.27057;
  int D.27059;
  <unnamed type> D.27063;
  struct MonoLoaderError * D.27066;
  struct MonoLoaderError * D.27071;
  int D.27074;
  gchar * D.27077;
  void (*<T1e9a>) (struct MonoClass *) mono_debugger_class_init_func.177;
  int i;
  struct MonoCachedClassInfo cached_info;
  gboolean has_cached_info;
  void leave = <<< error >>>;

  try
    {
      D.26804 = class == 0B;
      D.26805 = (long int) D.26804;
      D.26806 = __builtin_expect (D.26805, 0);
      if (D.26806 != 0) goto <D.26807>; else goto <D.26808>;
      <D.26807>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4915, "class");
      <D.26808>:
      D.26809 = BIT_FIELD_REF <*class, 64, 256>;
      D.26810 = D.26809 & 280375465082881;
      if (D.26810 != 0) goto <D.26811>; else goto <D.26812>;
      <D.26811>:
      D.26814 = class->exception_type;
      D.26815 = D.26814 == 0;
      D.26813 = (mono_bool) D.26815;
      return D.26813;
      <D.26812>:
      mono_loader_lock ();
      D.26809 = BIT_FIELD_REF <*class, 64, 256>;
      D.26810 = D.26809 & 280375465082881;
      if (D.26810 != 0) goto <D.26816>; else goto <D.26817>;
      <D.26816>:
      mono_loader_unlock ();
      D.26814 = class->exception_type;
      D.26815 = D.26814 == 0;
      D.26813 = (mono_bool) D.26815;
      return D.26813;
      <D.26817>:
      D.26818 = BIT_FIELD_REF <*class, 8, 256>;
      D.26819 = D.26818 & 2;
      if (D.26819 != 0) goto <D.26820>; else goto <D.26821>;
      <D.26820>:
      D.26822 = monoeg_strdup ("Recursive type definition detected");
      mono_class_set_failure (class, 7, D.26822);
      goto leave;
      <D.26821>:
      class->init_pending = 1;
      D.26823 = mono_verifier_is_enabled_for_class (class);
      if (D.26823 != 0) goto <D.26824>; else goto <D.26825>;
      <D.26824>:
      D.26826 = mono_verifier_verify_class (class);
      if (D.26826 == 0) goto <D.26827>; else goto <D.26828>;
      <D.26827>:
      D.26829 = class->image;
      D.26830 = D.26829->assembly_name;
      D.26831 = class->name;
      D.26829 = class->image;
      D.26832 = concat_two_strings_with_zero (D.26829, D.26831, D.26830);
      mono_class_set_failure (class, 7, D.26832);
      goto leave;
      <D.26828>:
      <D.26825>:
      D.26833 = class->byval_arg.type;
      D.26834 = D.26833 == 20;
      D.26835 = D.26833 == 29;
      D.26836 = D.26834 | D.26835;
      if (D.26836 != 0) goto <D.26837>; else goto <D.26838>;
      <D.26837>:
      {
        struct MonoClass * element_class;

        element_class = class->element_class;
        D.26839 = BIT_FIELD_REF <*element_class, 8, 256>;
        D.26840 = D.26839 & 1;
        if (D.26840 == 0) goto <D.26841>; else goto <D.26842>;
        <D.26841>:
        mono_class_init (element_class);
        <D.26842>:
        D.26843 = element_class->exception_type;
        if (D.26843 != 0) goto <D.26844>; else goto <D.26845>;
        <D.26844>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.26845>:
      }
      <D.26838>:
      D.26846 = mono_is_security_manager_active ();
      if (D.26846 != 0) goto <D.26847>; else goto <D.26848>;
      <D.26847>:
      D.26849 = class->parent;
      if (D.26849 != 0B) goto <D.26850>; else goto <D.26851>;
      <D.26850>:
      D.26849 = class->parent;
      D.26852 = D.26849->flags;
      D.26853 = D.26852 & 262144;
      if (D.26853 != 0) goto <D.26854>; else goto <D.26855>;
      <D.26854>:
      D.26849 = class->parent;
      mono_secman_inheritancedemand_class (class, D.26849);
      <D.26855>:
      <D.26851>:
      <D.26848>:
      D.26856 = mono_stats.initialized_class_count;
      D.26857 = D.26856 + 1;
      mono_stats.initialized_class_count = D.26857;
      D.26858 = class->generic_class;
      if (D.26858 != 0B) goto <D.26859>; else goto <D.26860>;
      <D.26859>:
      D.26858 = class->generic_class;
      D.26861 = BIT_FIELD_REF <*D.26858, 8, 192>;
      D.26862 = D.26861 & 1;
      if (D.26862 == 0) goto <D.26863>; else goto <D.26864>;
      <D.26863>:
      {
        struct MonoClass * gklass;

        D.26858 = class->generic_class;
        gklass = D.26858->container_class;
        D.26865 = mono_stats.generic_class_count;
        D.26866 = D.26865 + 1;
        mono_stats.generic_class_count = D.26866;
        class->method = gklass->method;
        class->field = gklass->field;
        mono_class_init (gklass);
        D.26867 = gklass->exception_type;
        if (D.26867 == 0) goto <D.26868>; else goto <D.26869>;
        <D.26868>:
        mono_class_setup_methods (gklass);
        <D.26869>:
        D.26867 = gklass->exception_type;
        if (D.26867 != 0) goto <D.26870>; else goto <D.26871>;
        <D.26870>:
        D.26872 = monoeg_g_strdup_printf ("Generic Type Defintion failed to init");
        mono_class_set_failure (class, 7, D.26872);
        goto leave;
        <D.26871>:
        D.26875 = class->flags;
        D.26876 = D.26875 & 32;
        if (D.26876 != 0) goto <D.26873>; else goto <D.26877>;
        <D.26877>:
        D.26878 = class->byval_arg.type;
        if (D.26878 == 19) goto <D.26873>; else goto <D.26879>;
        <D.26879>:
        D.26878 = class->byval_arg.type;
        if (D.26878 == 30) goto <D.26873>; else goto <D.26874>;
        <D.26873>:
        D.26880 = mono_get_unique_iid (class);
        D.26881 = (short unsigned int) D.26880;
        class->interface_id = D.26881;
        <D.26874>:
      }
      <D.26864>:
      <D.26860>:
      D.26849 = class->parent;
      if (D.26849 != 0B) goto <D.26882>; else goto <D.26883>;
      <D.26882>:
      D.26849 = class->parent;
      D.26884 = BIT_FIELD_REF <*D.26849, 8, 256>;
      D.26885 = D.26884 & 1;
      if (D.26885 == 0) goto <D.26886>; else goto <D.26887>;
      <D.26886>:
      D.26849 = class->parent;
      mono_class_init (D.26849);
      <D.26887>:
      <D.26883>:
      has_cached_info = mono_class_get_cached_class_info (class, &cached_info);
      D.26858 = class->generic_class;
      if (D.26858 != 0B) goto <D.26888>; else goto <D.26890>;
      <D.26890>:
      D.26829 = class->image;
      D.26891 = BIT_FIELD_REF <*D.26829, 8, 224>;
      D.26892 = D.26891 & 8;
      if (D.26892 != 0) goto <D.26888>; else goto <D.26893>;
      <D.26893>:
      D.26894 = class->type_token;
      if (D.26894 == 0) goto <D.26888>; else goto <D.26895>;
      <D.26895>:
      if (has_cached_info != 0) goto <D.26896>; else goto <D.26889>;
      <D.26896>:
      D.26897 = BIT_FIELD_REF <cached_info, 8, 32>;
      D.26898 = D.26897 & 8;
      if (D.26898 == 0) goto <D.26888>; else goto <D.26889>;
      <D.26888>:
      class->nested_classes_inited = 1;
      <D.26889>:
      if (has_cached_info != 0) goto <D.26899>; else goto <D.26900>;
      <D.26899>:
      D.26901 = cached_info.instance_size;
      D.26902 = (int) D.26901;
      class->instance_size = D.26902;
      D.26903 = cached_info.class_size;
      D.26904 = (int) D.26903;
      class->sizes.class_size = D.26904;
      D.26905 = cached_info.packing_size;
      D.26906 = (unsigned char) D.26905;
      D.26907 = (<unnamed-unsigned:4>) D.26906;
      class->packing_size = D.26907;
      D.26908 = cached_info.min_align;
      D.26909 = (unsigned char) D.26908;
      class->min_align = D.26909;
      D.26910 = cached_info.blittable;
      class->blittable = D.26910;
      D.26911 = cached_info.has_references;
      class->has_references = D.26911;
      D.26912 = cached_info.has_static_refs;
      class->has_static_refs = D.26912;
      D.26913 = cached_info.no_special_static_fields;
      class->no_special_static_fields = D.26913;
      goto <D.26914>;
      <D.26900>:
      D.26818 = BIT_FIELD_REF <*class, 8, 256>;
      D.26915 = D.26818 & 4;
      if (D.26915 == 0) goto <D.26916>; else goto <D.26917>;
      <D.26916>:
      mono_class_setup_fields (class);
      D.26814 = class->exception_type;
      if (D.26814 != 0) goto leave; else goto <D.26918>;
      <D.26918>:
      D.26919 = mono_loader_get_last_error ();
      if (D.26919 != 0B) goto leave; else goto <D.26920>;
      <D.26920>:
      <D.26917>:
      <D.26914>:
      D.26921 = class->rank;
      if (D.26921 != 0) goto <D.26922>; else goto <D.26923>;
      <D.26922>:
      D.26921 = class->rank;
      if (D.26921 > 1) goto <D.26925>; else goto <D.26926>;
      <D.26925>:
      iftmp.173 = 5;
      goto <D.26927>;
      <D.26926>:
      iftmp.173 = 4;
      <D.26927>:
      class->method.count = iftmp.173;
      D.26928 = class->interface_count;
      if (D.26928 != 0) goto <D.26929>; else goto <D.26930>;
      <D.26929>:
      {
        int count_generic;

        count_generic = generic_array_methods (class);
        D.26931 = class->method.count;
        D.26928 = class->interface_count;
        D.26932 = (int) D.26928;
        D.26933 = D.26932 * count_generic;
        D.26934 = (unsigned int) D.26933;
        D.26935 = D.26931 + D.26934;
        class->method.count = D.26935;
      }
      <D.26930>:
      <D.26923>:
      mono_class_setup_supertypes (class);
      default_ghc.174 = default_ghc;
      if (default_ghc.174 == 0B) goto <D.26937>; else goto <D.26938>;
      <D.26937>:
      initialize_object_slots (class);
      <D.26938>:
      if (has_cached_info != 0) goto <D.26939>; else goto <D.26940>;
      <D.26939>:
      D.26941 = cached_info.vtable_size;
      D.26942 = (int) D.26941;
      class->vtable_size = D.26942;
      D.26943 = cached_info.has_finalize;
      class->has_finalize = D.26943;
      class->has_finalize_inited = 1;
      D.26944 = cached_info.ghcimpl;
      class->ghcimpl = D.26944;
      D.26945 = cached_info.has_cctor;
      class->has_cctor = D.26945;
      goto <D.26946>;
      <D.26940>:
      D.26921 = class->rank;
      if (D.26921 == 1) goto <D.26949>; else goto <D.26947>;
      <D.26949>:
      D.26878 = class->byval_arg.type;
      if (D.26878 == 29) goto <D.26950>; else goto <D.26947>;
      <D.26950>:
      {
        static int szarray_vtable_size[2] = {0};
        int slot;

        D.26951 = class->element_class;
        D.26952 = &D.26951->byval_arg;
        D.26953 = mono_type_is_reference (D.26952);
        D.26954 = D.26953 == 0;
        slot = (int) D.26954;
        D.26955 = szarray_vtable_size[slot];
        if (D.26955 == 0) goto <D.26956>; else goto <D.26957>;
        <D.26956>:
        mono_class_setup_vtable (class);
        D.26958 = class->vtable_size;
        szarray_vtable_size[slot] = D.26958;
        goto <D.26959>;
        <D.26957>:
        D.26955 = szarray_vtable_size[slot];
        class->vtable_size = D.26955;
        <D.26959>:
        class->has_finalize_inited = 1;
      }
      goto <D.26948>;
      <D.26947>:
      D.26858 = class->generic_class;
      if (D.26858 != 0B) goto <D.26962>; else goto <D.26960>;
      <D.26962>:
      D.26875 = class->flags;
      D.26876 = D.26875 & 32;
      if (D.26876 == 0) goto <D.26963>; else goto <D.26960>;
      <D.26963>:
      D.26878 = class->byval_arg.type;
      if (D.26878 != 19) goto <D.26964>; else goto <D.26960>;
      <D.26964>:
      D.26878 = class->byval_arg.type;
      if (D.26878 != 30) goto <D.26965>; else goto <D.26960>;
      <D.26965>:
      {
        struct MonoClass * gklass;

        D.26858 = class->generic_class;
        gklass = D.26858->container_class;
        D.26966 = gklass->ghcimpl;
        class->ghcimpl = D.26966;
        D.26967 = mono_class_has_finalizer (gklass);
        D.26968 = (unsigned char) D.26967;
        D.26969 = (<unnamed-unsigned:1>) D.26968;
        class->has_finalize = D.26969;
        class->has_finalize_inited = 1;
        D.26970 = gklass->has_cctor;
        class->has_cctor = D.26970;
        mono_class_setup_vtable (gklass);
        D.26971 = gklass->exception_type;
        if (D.26971 != 0) goto <D.26972>; else goto <D.26973>;
        <D.26972>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.26973>:
        D.26974 = gklass->vtable_size;
        class->vtable_size = D.26974;
      }
      goto <D.26961>;
      <D.26960>:
      D.26875 = class->flags;
      D.26876 = D.26875 & 32;
      if (D.26876 == 0) goto <D.26978>; else goto <D.26975>;
      <D.26978>:
      D.26878 = class->byval_arg.type;
      if (D.26878 != 19) goto <D.26979>; else goto <D.26975>;
      <D.26979>:
      D.26878 = class->byval_arg.type;
      if (D.26878 != 30) goto <D.26976>; else goto <D.26975>;
      <D.26975>:
      D.26829 = class->image;
      D.26980 = mono_defaults.corlib;
      if (D.26829 != D.26980) goto <D.26976>; else goto <D.26977>;
      <D.26976>:
      {
        struct MonoMethod * cmethod;

        cmethod = 0B;
        D.26894 = class->type_token;
        if (D.26894 != 0) goto <D.26981>; else goto <D.26982>;
        <D.26981>:
        cmethod = find_method_in_metadata (class, ".cctor", 0, 2048);
        if (cmethod != 0B) goto <D.26983>; else goto <D.26984>;
        <D.26983>:
        D.26985 = cmethod->flags;
        D.26986 = (int) D.26985;
        D.26987 = D.26986 & 2048;
        if (D.26987 != 0) goto <D.26988>; else goto <D.26989>;
        <D.26988>:
        class->has_cctor = 1;
        <D.26989>:
        <D.26984>:
        goto <D.26990>;
        <D.26982>:
        mono_class_setup_methods (class);
        D.26814 = class->exception_type;
        if (D.26814 != 0) goto leave; else goto <D.26991>;
        <D.26991>:
        i = 0;
        goto <D.20290>;
        <D.20289>:
        {
          struct MonoMethod * method;

          D.26992 = class->methods;
          D.26993 = (long unsigned int) i;
          D.26994 = D.26993 * 8;
          D.26995 = D.26992 + D.26994;
          method = *D.26995;
          D.26996 = method->flags;
          D.26997 = (int) D.26996;
          D.26998 = D.26997 & 2048;
          if (D.26998 != 0) goto <D.26999>; else goto <D.27000>;
          <D.26999>:
          {
            size_t __s1_len;
            size_t __s2_len;

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

              __s2 = method->name;
              D.27004 = ".cctor";
              D.27005 = MEM[(const unsigned char *)D.27004];
              D.27006 = (int) D.27005;
              D.27007 = *__s2;
              D.27008 = (int) D.27007;
              __result = D.27006 - D.27008;
              {
                D.27009 = __s1_len != 0;
                D.27010 = __result == 0;
                D.27011 = D.27009 & D.27010;
                if (D.27011 != 0) goto <D.27012>; else goto <D.27013>;
                <D.27012>:
                D.27014 = &MEM[(void *)".cctor" + 1B];
                D.27015 = *D.27014;
                D.27016 = (int) D.27015;
                D.27017 = __s2 + 1;
                D.27018 = *D.27017;
                D.27019 = (int) D.27018;
                __result = D.27016 - D.27019;
                D.27020 = __s1_len > 1;
                D.27010 = __result == 0;
                D.27021 = D.27020 & D.27010;
                if (D.27021 != 0) goto <D.27022>; else goto <D.27023>;
                <D.27022>:
                D.27024 = &MEM[(void *)".cctor" + 2B];
                D.27025 = *D.27024;
                D.27026 = (int) D.27025;
                D.27027 = __s2 + 2;
                D.27028 = *D.27027;
                D.27029 = (int) D.27028;
                __result = D.27026 - D.27029;
                D.27030 = __s1_len > 2;
                D.27010 = __result == 0;
                D.27031 = D.27030 & D.27010;
                if (D.27031 != 0) goto <D.27032>; else goto <D.27033>;
                <D.27032>:
                D.27034 = &MEM[(void *)".cctor" + 3B];
                D.27035 = *D.27034;
                D.27036 = (int) D.27035;
                D.27037 = __s2 + 3;
                D.27038 = *D.27037;
                D.27039 = (int) D.27038;
                __result = D.27036 - D.27039;
                <D.27033>:
                <D.27023>:
                <D.27013>:
              }
              D.20283 = __result;
            }
            iftmp.175 = D.20283;
            goto <D.27040>;
            <D.27003>:
            D.27041 = method->name;
            iftmp.175 = __builtin_strcmp (".cctor", D.27041);
            <D.27040>:
            D.20287 = iftmp.175;
          }
          if (D.20287 == 0) goto <D.27042>; else goto <D.27043>;
          <D.27042>:
          class->has_cctor = 1;
          goto <D.20288>;
          <D.27043>:
          <D.27000>:
        }
        i = i + 1;
        <D.20290>:
        i.176 = (unsigned int) i;
        D.26931 = class->method.count;
        if (i.176 < D.26931) goto <D.20289>; else goto <D.20288>;
        <D.20288>:
        <D.26990>:
      }
      <D.26977>:
      <D.26961>:
      <D.26948>:
      <D.26946>:
      D.26849 = class->parent;
      if (D.26849 != 0B) goto <D.27045>; else goto <D.27046>;
      <D.27045>:
      {
        int first_iface_slot;

        D.26849 = class->parent;
        mono_class_init (D.26849);
        D.26849 = class->parent;
        D.27047 = D.26849->exception_type;
        if (D.27047 != 0) goto <D.27048>; else goto <D.27049>;
        <D.27048>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.27049>:
        D.27050 = mono_loader_get_last_error ();
        if (D.27050 != 0B) goto leave; else goto <D.27051>;
        <D.27051>:
        D.26849 = class->parent;
        D.27052 = D.26849->vtable_size;
        if (D.27052 == 0) goto <D.27053>; else goto <D.27054>;
        <D.27053>:
        D.26849 = class->parent;
        mono_class_setup_vtable (D.26849);
        D.26849 = class->parent;
        D.27047 = D.26849->exception_type;
        if (D.27047 != 0) goto <D.27055>; else goto <D.27056>;
        <D.27055>:
        mono_class_set_failure (class, 7, 0B);
        goto leave;
        <D.27056>:
        D.27057 = mono_loader_get_last_error ();
        if (D.27057 != 0B) goto leave; else goto <D.27058>;
        <D.27058>:
        <D.27054>:
        D.26849 = class->parent;
        first_iface_slot = D.26849->vtable_size;
        D.27059 = mono_class_need_stelemref_method (class);
        if (D.27059 != 0) goto <D.27060>; else goto <D.27061>;
        <D.27060>:
        first_iface_slot = first_iface_slot + 1;
        <D.27061>:
        setup_interface_offsets (class, first_iface_slot, 1);
      }
      goto <D.27062>;
      <D.27046>:
      setup_interface_offsets (class, 0, 1);
      <D.27062>:
      D.27063 = mono_security_get_mode ();
      if (D.27063 == 1) goto <D.27064>; else goto <D.27065>;
      <D.27064>:
      mono_security_core_clr_check_inheritance (class);
      <D.27065>:
      D.27066 = mono_loader_get_last_error ();
      if (D.27066 != 0B) goto <D.27067>; else goto <D.27068>;
      <D.27067>:
      D.26814 = class->exception_type;
      if (D.26814 == 0) goto <D.27069>; else goto <D.27070>;
      <D.27069>:
      D.27071 = mono_loader_get_last_error ();
      set_failure_from_loader_error (class, D.27071);
      <D.27070>:
      mono_loader_clear_error ();
      <D.27068>:
      D.26858 = class->generic_class;
      if (D.26858 != 0B) goto <D.27072>; else goto <D.27073>;
      <D.27072>:
      D.27074 = mono_verifier_class_is_valid_generic_instantiation (class);
      if (D.27074 == 0) goto <D.27075>; else goto <D.27076>;
      <D.27075>:
      D.27077 = monoeg_strdup ("Invalid generic instantiation");
      mono_class_set_failure (class, 7, D.27077);
      <D.27076>:
      <D.27073>:
      goto leave;
      leave:
      mono_memory_barrier ();
      class->inited = 1;
      class->init_pending = 0;
      mono_loader_unlock ();
      mono_debugger_class_init_func.177 = mono_debugger_class_init_func;
      if (mono_debugger_class_init_func.177 != 0B) goto <D.27079>; else goto <D.27080>;
      <D.27079>:
      mono_debugger_class_init_func.177 = mono_debugger_class_init_func;
      mono_debugger_class_init_func.177 (class);
      <D.27080>:
      D.26814 = class->exception_type;
      D.26815 = D.26814 == 0;
      D.26813 = (mono_bool) D.26815;
      return D.26813;
    }
  finally
    {
      cached_info = {CLOBBER};
    }
}


mono_get_unique_iid (struct MonoClass * class)
{
  int iftmp.178;
  unsigned int D.27086;
  unsigned int D.27087;
  unsigned char D.27089;
  _Bool D.27092;
  long int D.27093;
  long int D.27094;
  struct MonoBitSet * global_interface_bitset.179;
  struct MonoBitSet * global_interface_bitset.180;
  unsigned int D.27103;
  int D.27104;
  unsigned int D.27105;
  unsigned int iid.181;
  struct MonoGenericClass * D.27107;
  struct MonoImage * D.27110;
  struct MonoBitSet * D.27111;
  unsigned int D.27114;
  int D.27117;
  unsigned int D.27118;
  struct MonoBitSet * D.27120;
  int mono_print_vtable.182;
  struct MonoType * D.27124;
  struct MonoGenericInst * D.27128;
  unsigned char D.27129;
  unsigned char D.27130;
  unsigned int D.27132;
  _Bool D.27133;
  long int D.27134;
  long int D.27135;
  char * D.27138;
  _Bool D.27139;
  long int D.27140;
  long int D.27141;
  guint D.27144;
  int iid;

  D.27086 = class->flags;
  D.27087 = D.27086 & 32;
  if (D.27087 == 0) goto <D.27088>; else goto <D.27084>;
  <D.27088>:
  D.27089 = class->byval_arg.type;
  if (D.27089 != 19) goto <D.27090>; else goto <D.27084>;
  <D.27090>:
  D.27089 = class->byval_arg.type;
  if (D.27089 != 30) goto <D.27091>; else goto <D.27084>;
  <D.27091>:
  iftmp.178 = 1;
  goto <D.27085>;
  <D.27084>:
  iftmp.178 = 0;
  <D.27085>:
  D.27092 = iftmp.178 != 0;
  D.27093 = (long int) D.27092;
  D.27094 = __builtin_expect (D.27093, 0);
  if (D.27094 != 0) goto <D.27095>; else goto <D.27096>;
  <D.27095>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2592, "MONO_CLASS_IS_INTERFACE (class)");
  <D.27096>:
  global_interface_bitset.179 = global_interface_bitset;
  if (global_interface_bitset.179 == 0B) goto <D.27098>; else goto <D.27099>;
  <D.27098>:
  global_interface_bitset.180 = mono_bitset_new (128, 0);
  global_interface_bitset = global_interface_bitset.180;
  <D.27099>:
  global_interface_bitset.179 = global_interface_bitset;
  iid = mono_bitset_find_first_unset (global_interface_bitset.179, -1);
  if (iid < 0) goto <D.27101>; else goto <D.27102>;
  <D.27101>:
  {
    int old_size;
    struct MonoBitSet * new_set;

    global_interface_bitset.179 = global_interface_bitset;
    D.27103 = mono_bitset_size (global_interface_bitset.179);
    old_size = (int) D.27103;
    D.27104 = old_size * 2;
    D.27105 = (unsigned int) D.27104;
    global_interface_bitset.179 = global_interface_bitset;
    new_set = mono_bitset_clone (global_interface_bitset.179, D.27105);
    global_interface_bitset.179 = global_interface_bitset;
    mono_bitset_free (global_interface_bitset.179);
    global_interface_bitset = new_set;
    iid = old_size;
  }
  <D.27102>:
  iid.181 = (unsigned int) iid;
  global_interface_bitset.179 = global_interface_bitset;
  mono_bitset_set (global_interface_bitset.179, iid.181);
  D.27107 = class->generic_class;
  if (D.27107 == 0B) goto <D.27108>; else goto <D.27109>;
  <D.27108>:
  D.27110 = class->image;
  D.27111 = D.27110->interface_bitset;
  if (D.27111 != 0B) goto <D.27112>; else goto <D.27113>;
  <D.27112>:
  iid.181 = (unsigned int) iid;
  D.27110 = class->image;
  D.27111 = D.27110->interface_bitset;
  D.27114 = mono_bitset_size (D.27111);
  if (iid.181 >= D.27114) goto <D.27115>; else goto <D.27116>;
  <D.27115>:
  {
    struct MonoBitSet * new_set;

    D.27117 = iid + 1;
    D.27118 = (unsigned int) D.27117;
    D.27110 = class->image;
    D.27111 = D.27110->interface_bitset;
    new_set = mono_bitset_clone (D.27111, D.27118);
    D.27110 = class->image;
    D.27111 = D.27110->interface_bitset;
    mono_bitset_free (D.27111);
    D.27110 = class->image;
    D.27110->interface_bitset = new_set;
  }
  <D.27116>:
  goto <D.27119>;
  <D.27113>:
  D.27110 = class->image;
  D.27117 = iid + 1;
  D.27118 = (unsigned int) D.27117;
  D.27120 = mono_bitset_new (D.27118, 0);
  D.27110->interface_bitset = D.27120;
  <D.27119>:
  iid.181 = (unsigned int) iid;
  D.27110 = class->image;
  D.27111 = D.27110->interface_bitset;
  mono_bitset_set (D.27111, iid.181);
  <D.27109>:
  mono_print_vtable.182 = mono_print_vtable;
  if (mono_print_vtable.182 != 0) goto <D.27122>; else goto <D.27123>;
  <D.27122>:
  {
    int generic_id;
    char * type_name;

    D.27124 = &class->byval_arg;
    type_name = mono_type_full_name (D.27124);
    D.27107 = class->generic_class;
    if (D.27107 != 0B) goto <D.27127>; else goto <D.27125>;
    <D.27127>:
    D.27107 = class->generic_class;
    D.27128 = D.27107->context.class_inst;
    D.27129 = BIT_FIELD_REF <*D.27128, 8, 48>;
    D.27130 = D.27129 & 64;
    if (D.27130 == 0) goto <D.27131>; else goto <D.27125>;
    <D.27131>:
    D.27107 = class->generic_class;
    D.27128 = D.27107->context.class_inst;
    D.27132 = D.27128->id;
    generic_id = (int) D.27132;
    D.27133 = generic_id == 0;
    D.27134 = (long int) D.27133;
    D.27135 = __builtin_expect (D.27134, 0);
    if (D.27135 != 0) goto <D.27136>; else goto <D.27137>;
    <D.27136>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2627, "generic_id != 0");
    <D.27137>:
    goto <D.27126>;
    <D.27125>:
    generic_id = 0;
    <D.27126>:
    D.27110 = class->image;
    D.27138 = D.27110->name;
    printf ("Interface: assigned id %d to %s|%s|%d\n", iid, D.27138, type_name, generic_id);
    monoeg_g_free (type_name);
  }
  <D.27123>:
  D.27139 = iid > 65535;
  D.27140 = (long int) D.27139;
  D.27141 = __builtin_expect (D.27140, 0);
  if (D.27141 != 0) goto <D.27142>; else goto <D.27143>;
  <D.27142>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 2636, "iid <= 65535");
  <D.27143>:
  D.27144 = (guint) iid;
  return D.27144;
}


mono_class_get_cached_class_info (struct MonoClass * klass, struct MonoCachedClassInfo * res)
{
  gboolean (*<T1ed1>) (struct MonoClass *, struct MonoCachedClassInfo *) get_cached_class_info.183;
  gboolean D.27149;

  get_cached_class_info.183 = get_cached_class_info;
  if (get_cached_class_info.183 == 0B) goto <D.27147>; else goto <D.27148>;
  <D.27147>:
  D.27149 = 0;
  return D.27149;
  <D.27148>:
  get_cached_class_info.183 = get_cached_class_info;
  D.27149 = get_cached_class_info.183 (klass, res);
  return D.27149;
}


initialize_object_slots (struct MonoClass * class)
{
  struct MonoMethod * default_ghc.184;
  struct MonoClass * D.27154;
  struct MonoMethod * * D.27157;
  long unsigned int D.27158;
  long unsigned int D.27159;
  struct MonoMethod * * D.27160;
  int D.20134;
  int iftmp.185;
  int D.20133;
  const char[12] * D.27164;
  unsigned char D.27165;
  int D.27166;
  unsigned char D.27167;
  int D.27168;
  _Bool D.27169;
  _Bool D.27170;
  _Bool D.27171;
  const unsigned char * D.27174;
  unsigned char D.27175;
  int D.27176;
  const unsigned char * D.27177;
  unsigned char D.27178;
  int D.27179;
  _Bool D.27180;
  _Bool D.27181;
  const unsigned char * D.27184;
  unsigned char D.27185;
  int D.27186;
  const unsigned char * D.27187;
  unsigned char D.27188;
  int D.27189;
  _Bool D.27190;
  _Bool D.27191;
  const unsigned char * D.27194;
  unsigned char D.27195;
  int D.27196;
  const unsigned char * D.27197;
  unsigned char D.27198;
  int D.27199;
  const char * D.27201;
  int D.20143;
  int iftmp.186;
  int D.20142;
  const char[9] * D.27208;
  unsigned char D.27209;
  int D.27210;
  unsigned char D.27211;
  int D.27212;
  _Bool D.27213;
  _Bool D.27214;
  _Bool D.27215;
  const unsigned char * D.27218;
  unsigned char D.27219;
  int D.27220;
  const unsigned char * D.27221;
  unsigned char D.27222;
  int D.27223;
  _Bool D.27224;
  _Bool D.27225;
  const unsigned char * D.27228;
  unsigned char D.27229;
  int D.27230;
  const unsigned char * D.27231;
  unsigned char D.27232;
  int D.27233;
  _Bool D.27234;
  _Bool D.27235;
  const unsigned char * D.27238;
  unsigned char D.27239;
  int D.27240;
  const unsigned char * D.27241;
  unsigned char D.27242;
  int D.27243;
  int D.27247;
  int ghc_slot.187;
  _Bool D.27249;
  long int D.27250;
  long int D.27251;
  long unsigned int D.27254;
  long unsigned int D.27255;
  struct MonoMethod * * D.27256;
  struct MonoMethod * default_ghc.188;
  int finalize_slot.189;
  _Bool D.27259;
  long int D.27260;
  long int D.27261;
  long unsigned int D.27264;
  long unsigned int D.27265;
  struct MonoMethod * * D.27266;
  struct MonoMethod * default_finalize.190;
  int i;

  default_ghc.184 = default_ghc;
  if (default_ghc.184 != 0B) goto <D.27152>; else goto <D.27153>;
  <D.27152>:
  return;
  <D.27153>:
  D.27154 = mono_defaults.object_class;
  if (D.27154 == class) goto <D.27155>; else goto <D.27156>;
  <D.27155>:
  mono_class_setup_vtable (class);
  i = 0;
  goto <D.20145>;
  <D.20144>:
  {
    struct MonoMethod * cm;

    D.27157 = class->vtable;
    D.27158 = (long unsigned int) i;
    D.27159 = D.27158 * 8;
    D.27160 = D.27157 + D.27159;
    cm = *D.27160;
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = cm->name;
        D.27164 = "GetHashCode";
        D.27165 = MEM[(const unsigned char *)D.27164];
        D.27166 = (int) D.27165;
        D.27167 = *__s2;
        D.27168 = (int) D.27167;
        __result = D.27166 - D.27168;
        {
          D.27169 = __s2_len != 0;
          D.27170 = __result == 0;
          D.27171 = D.27169 & D.27170;
          if (D.27171 != 0) goto <D.27172>; else goto <D.27173>;
          <D.27172>:
          D.27174 = &MEM[(void *)"GetHashCode" + 1B];
          D.27175 = *D.27174;
          D.27176 = (int) D.27175;
          D.27177 = __s2 + 1;
          D.27178 = *D.27177;
          D.27179 = (int) D.27178;
          __result = D.27176 - D.27179;
          D.27180 = __s2_len > 1;
          D.27170 = __result == 0;
          D.27181 = D.27180 & D.27170;
          if (D.27181 != 0) goto <D.27182>; else goto <D.27183>;
          <D.27182>:
          D.27184 = &MEM[(void *)"GetHashCode" + 2B];
          D.27185 = *D.27184;
          D.27186 = (int) D.27185;
          D.27187 = __s2 + 2;
          D.27188 = *D.27187;
          D.27189 = (int) D.27188;
          __result = D.27186 - D.27189;
          D.27190 = __s2_len > 2;
          D.27170 = __result == 0;
          D.27191 = D.27190 & D.27170;
          if (D.27191 != 0) goto <D.27192>; else goto <D.27193>;
          <D.27192>:
          D.27194 = &MEM[(void *)"GetHashCode" + 3B];
          D.27195 = *D.27194;
          D.27196 = (int) D.27195;
          D.27197 = __s2 + 3;
          D.27198 = *D.27197;
          D.27199 = (int) D.27198;
          __result = D.27196 - D.27199;
          <D.27193>:
          <D.27183>:
          <D.27173>:
        }
        D.20133 = __result;
      }
      iftmp.185 = -D.20133;
      goto <D.27200>;
      <D.27163>:
      D.27201 = cm->name;
      iftmp.185 = __builtin_strcmp (D.27201, "GetHashCode");
      <D.27200>:
      D.20134 = iftmp.185;
    }
    if (D.20134 == 0) goto <D.27202>; else goto <D.27203>;
    <D.27202>:
    ghc_slot = i;
    goto <D.27204>;
    <D.27203>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = cm->name;
        D.27208 = "Finalize";
        D.27209 = MEM[(const unsigned char *)D.27208];
        D.27210 = (int) D.27209;
        D.27211 = *__s2;
        D.27212 = (int) D.27211;
        __result = D.27210 - D.27212;
        {
          D.27213 = __s2_len != 0;
          D.27214 = __result == 0;
          D.27215 = D.27213 & D.27214;
          if (D.27215 != 0) goto <D.27216>; else goto <D.27217>;
          <D.27216>:
          D.27218 = &MEM[(void *)"Finalize" + 1B];
          D.27219 = *D.27218;
          D.27220 = (int) D.27219;
          D.27221 = __s2 + 1;
          D.27222 = *D.27221;
          D.27223 = (int) D.27222;
          __result = D.27220 - D.27223;
          D.27224 = __s2_len > 1;
          D.27214 = __result == 0;
          D.27225 = D.27224 & D.27214;
          if (D.27225 != 0) goto <D.27226>; else goto <D.27227>;
          <D.27226>:
          D.27228 = &MEM[(void *)"Finalize" + 2B];
          D.27229 = *D.27228;
          D.27230 = (int) D.27229;
          D.27231 = __s2 + 2;
          D.27232 = *D.27231;
          D.27233 = (int) D.27232;
          __result = D.27230 - D.27233;
          D.27234 = __s2_len > 2;
          D.27214 = __result == 0;
          D.27235 = D.27234 & D.27214;
          if (D.27235 != 0) goto <D.27236>; else goto <D.27237>;
          <D.27236>:
          D.27238 = &MEM[(void *)"Finalize" + 3B];
          D.27239 = *D.27238;
          D.27240 = (int) D.27239;
          D.27241 = __s2 + 3;
          D.27242 = *D.27241;
          D.27243 = (int) D.27242;
          __result = D.27240 - D.27243;
          <D.27237>:
          <D.27227>:
          <D.27217>:
        }
        D.20142 = __result;
      }
      iftmp.186 = -D.20142;
      goto <D.27244>;
      <D.27207>:
      D.27201 = cm->name;
      iftmp.186 = __builtin_strcmp (D.27201, "Finalize");
      <D.27244>:
      D.20143 = iftmp.186;
    }
    if (D.20143 == 0) goto <D.27245>; else goto <D.27246>;
    <D.27245>:
    finalize_slot = i;
    <D.27246>:
    <D.27204>:
  }
  i = i + 1;
  <D.20145>:
  D.27247 = class->vtable_size;
  if (D.27247 > i) goto <D.20144>; else goto <D.20146>;
  <D.20146>:
  ghc_slot.187 = ghc_slot;
  D.27249 = ghc_slot.187 <= 0;
  D.27250 = (long int) D.27249;
  D.27251 = __builtin_expect (D.27250, 0);
  if (D.27251 != 0) goto <D.27252>; else goto <D.27253>;
  <D.27252>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4736, "ghc_slot > 0");
  <D.27253>:
  D.27157 = class->vtable;
  ghc_slot.187 = ghc_slot;
  D.27254 = (long unsigned int) ghc_slot.187;
  D.27255 = D.27254 * 8;
  D.27256 = D.27157 + D.27255;
  default_ghc.188 = *D.27256;
  default_ghc = default_ghc.188;
  finalize_slot.189 = finalize_slot;
  D.27259 = finalize_slot.189 <= 0;
  D.27260 = (long int) D.27259;
  D.27261 = __builtin_expect (D.27260, 0);
  if (D.27261 != 0) goto <D.27262>; else goto <D.27263>;
  <D.27262>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 4739, "finalize_slot > 0");
  <D.27263>:
  D.27157 = class->vtable;
  finalize_slot.189 = finalize_slot;
  D.27264 = (long unsigned int) finalize_slot.189;
  D.27265 = D.27264 * 8;
  D.27266 = D.27157 + D.27265;
  default_finalize.190 = *D.27266;
  default_finalize = default_finalize.190;
  <D.27156>:
}


find_method_in_metadata (struct MonoClass * klass, const char * name, int param_count, int flags)
{
  unsigned int D.27269;
  unsigned int i.191;
  unsigned int D.27271;
  int D.27272;
  struct MonoImage * D.27273;
  int D.21748;
  unsigned int D.27274;
  const char * D.27275;
  unsigned int D.27278;
  unsigned int D.27279;
  short unsigned int D.27284;
  int D.27285;
  unsigned int D.27288;
  struct MonoMethod * D.27289;
  struct MonoMethod * res;
  int i;

  res = 0B;
  i = 0;
  goto <D.21751>;
  <D.21750>:
  {
    guint32 cols[6];
    struct MonoMethod * method;
    struct MonoMethodSignature * sig;

    try
      {
        D.27269 = klass->method.first;
        i.191 = (unsigned int) i;
        D.27271 = D.27269 + i.191;
        D.27272 = (int) D.27271;
        D.27273 = klass->image;
        mono_metadata_decode_table_row (D.27273, 6, D.27272, &cols, 6);
        {
          size_t __s1_len;
          size_t __s2_len;

          D.27274 = cols[3];
          D.27273 = klass->image;
          D.27275 = mono_metadata_string_heap (D.27273, D.27274);
          D.21748 = __builtin_strcmp (D.27275, name);
        }
        if (D.21748 == 0) goto <D.27276>; else goto <D.27277>;
        <D.27276>:
        D.27269 = klass->method.first;
        i.191 = (unsigned int) i;
        D.27271 = D.27269 + i.191;
        D.27278 = D.27271 + 1;
        D.27279 = D.27278 | 100663296;
        D.27273 = klass->image;
        method = mono_get_method (D.27273, D.27279, klass);
        if (param_count == -1) goto <D.27280>; else goto <D.27281>;
        <D.27280>:
        res = method;
        goto <D.21749>;
        <D.27281>:
        sig = mono_method_signature (method);
        if (sig != 0B) goto <D.27282>; else goto <D.27283>;
        <D.27282>:
        D.27284 = sig->param_count;
        D.27285 = (int) D.27284;
        if (D.27285 == param_count) goto <D.27286>; else goto <D.27287>;
        <D.27286>:
        res = method;
        goto <D.21749>;
        <D.27287>:
        <D.27283>:
        <D.27277>:
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  i = i + 1;
  <D.21751>:
  i.191 = (unsigned int) i;
  D.27288 = klass->method.count;
  if (i.191 < D.27288) goto <D.21750>; else goto <D.21749>;
  <D.21749>:
  D.27289 = res;
  return D.27289;
}


mono_class_has_finalizer (struct MonoClass * klass)
{
  unsigned char D.27293;
  unsigned char D.27294;
  unsigned int D.27297;
  unsigned int D.27298;
  unsigned char D.27301;
  unsigned char D.27306;
  unsigned char D.27307;
  struct MonoClass * D.27312;
  unsigned char D.27314;
  unsigned char D.27315;
  unsigned char D.27319;
  struct MonoLoaderError * D.27321;
  struct MonoMethod * * D.27323;
  int finalize_slot.192;
  long unsigned int D.27325;
  long unsigned int D.27326;
  struct MonoMethod * * D.27327;
  int D.27330;
  _Bool D.27331;
  long int D.27332;
  long int D.27333;
  unsigned char D.27338;
  unsigned char D.27339;
  struct MonoMethod * default_finalize.193;
  gboolean D.27345;
  <unnamed-unsigned:1> D.27346;
  void leave = <<< error >>>;

  D.27293 = BIT_FIELD_REF <*klass, 8, 288>;
  D.27294 = D.27293 & 16;
  if (D.27294 == 0) goto <D.27295>; else goto <D.27296>;
  <D.27295>:
  {
    struct MonoClass * class;

    class = klass;
    mono_loader_lock ();
    D.27297 = class->flags;
    D.27298 = D.27297 & 32;
    if (D.27298 == 0) goto <D.27299>; else goto <D.27300>;
    <D.27299>:
    D.27301 = class->byval_arg.type;
    if (D.27301 != 19) goto <D.27302>; else goto <D.27303>;
    <D.27302>:
    D.27301 = class->byval_arg.type;
    if (D.27301 != 30) goto <D.27304>; else goto <D.27305>;
    <D.27304>:
    D.27306 = BIT_FIELD_REF <*class, 8, 256>;
    D.27307 = D.27306 & 8;
    if (D.27307 == 0) goto <D.27308>; else goto <D.27309>;
    <D.27308>:
    {
      struct MonoMethod * cmethod;

      cmethod = 0B;
      D.27312 = class->parent;
      if (D.27312 != 0B) goto <D.27313>; else goto <D.27310>;
      <D.27313>:
      D.27312 = class->parent;
      D.27314 = BIT_FIELD_REF <*D.27312, 8, 272>;
      D.27315 = D.27314 & 32;
      if (D.27315 != 0) goto <D.27316>; else goto <D.27310>;
      <D.27316>:
      class->has_finalize = 1;
      goto <D.27311>;
      <D.27310>:
      D.27312 = class->parent;
      if (D.27312 != 0B) goto <D.27317>; else goto <D.27318>;
      <D.27317>:
      mono_class_setup_vtable (class);
      D.27319 = class->exception_type;
      if (D.27319 != 0) goto leave; else goto <D.27320>;
      <D.27320>:
      D.27321 = mono_loader_get_last_error ();
      if (D.27321 != 0B) goto leave; else goto <D.27322>;
      <D.27322>:
      D.27323 = class->vtable;
      finalize_slot.192 = finalize_slot;
      D.27325 = (long unsigned int) finalize_slot.192;
      D.27326 = D.27325 * 8;
      D.27327 = D.27323 + D.27326;
      cmethod = *D.27327;
      <D.27318>:
      if (cmethod != 0B) goto <D.27328>; else goto <D.27329>;
      <D.27328>:
      D.27330 = class->vtable_size;
      finalize_slot.192 = finalize_slot;
      D.27331 = D.27330 <= finalize_slot.192;
      D.27332 = (long int) D.27331;
      D.27333 = __builtin_expect (D.27332, 0);
      if (D.27333 != 0) goto <D.27334>; else goto <D.27335>;
      <D.27334>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5201, "class->vtable_size > finalize_slot");
      <D.27335>:
      class->has_finalize = 0;
      D.27312 = class->parent;
      if (D.27312 != 0B) goto <D.27336>; else goto <D.27337>;
      <D.27336>:
      D.27338 = BIT_FIELD_REF <*cmethod, 8, 264>;
      D.27339 = D.27338 & 16;
      if (D.27339 != 0) goto <D.27340>; else goto <D.27341>;
      <D.27340>:
      cmethod = MEM[(struct MonoMethodInflated *)cmethod].declaring;
      <D.27341>:
      default_finalize.193 = default_finalize;
      if (cmethod != default_finalize.193) goto <D.27343>; else goto <D.27344>;
      <D.27343>:
      class->has_finalize = 1;
      <D.27344>:
      <D.27337>:
      <D.27329>:
      <D.27311>:
    }
    <D.27309>:
    <D.27305>:
    <D.27303>:
    <D.27300>:
    mono_memory_barrier ();
    klass->has_finalize_inited = 1;
    mono_loader_unlock ();
  }
  <D.27296>:
  D.27346 = klass->has_finalize;
  D.27345 = (gboolean) D.27346;
  return D.27345;
  leave:
  mono_loader_unlock ();
  D.27345 = 0;
  return D.27345;
}


mono_is_corlib_image (struct MonoImage * image)
{
  unsigned char D.27348;
  unsigned char D.27349;
  gboolean D.27352;
  int iftmp.194;
  struct MonoAssembly * D.27356;
  int D.20309;
  int iftmp.195;
  int D.20308;
  const char[9] * D.27361;
  unsigned char D.27362;
  int D.27363;
  unsigned char D.27364;
  int D.27365;
  _Bool D.27366;
  _Bool D.27367;
  _Bool D.27368;
  const unsigned char * D.27371;
  unsigned char D.27372;
  int D.27373;
  const unsigned char * D.27374;
  unsigned char D.27375;
  int D.27376;
  _Bool D.27377;
  _Bool D.27378;
  const unsigned char * D.27381;
  unsigned char D.27382;
  int D.27383;
  const unsigned char * D.27384;
  unsigned char D.27385;
  int D.27386;
  _Bool D.27387;
  _Bool D.27388;
  const unsigned char * D.27391;
  unsigned char D.27392;
  int D.27393;
  const unsigned char * D.27394;
  unsigned char D.27395;
  int D.27396;
  const char * D.27398;
  struct MonoImage * D.27400;
  _Bool D.27401;

  D.27348 = BIT_FIELD_REF <*image, 8, 224>;
  D.27349 = D.27348 & 8;
  if (D.27349 != 0) goto <D.27350>; else goto <D.27351>;
  <D.27350>:
  D.27356 = image->assembly;
  if (D.27356 != 0B) goto <D.27357>; else goto <D.27354>;
  <D.27357>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.27356 = image->assembly;
      __s2 = D.27356->aname.name;
      D.27361 = "mscorlib";
      D.27362 = MEM[(const unsigned char *)D.27361];
      D.27363 = (int) D.27362;
      D.27364 = *__s2;
      D.27365 = (int) D.27364;
      __result = D.27363 - D.27365;
      {
        D.27366 = __s2_len != 0;
        D.27367 = __result == 0;
        D.27368 = D.27366 & D.27367;
        if (D.27368 != 0) goto <D.27369>; else goto <D.27370>;
        <D.27369>:
        D.27371 = &MEM[(void *)"mscorlib" + 1B];
        D.27372 = *D.27371;
        D.27373 = (int) D.27372;
        D.27374 = __s2 + 1;
        D.27375 = *D.27374;
        D.27376 = (int) D.27375;
        __result = D.27373 - D.27376;
        D.27377 = __s2_len > 1;
        D.27367 = __result == 0;
        D.27378 = D.27377 & D.27367;
        if (D.27378 != 0) goto <D.27379>; else goto <D.27380>;
        <D.27379>:
        D.27381 = &MEM[(void *)"mscorlib" + 2B];
        D.27382 = *D.27381;
        D.27383 = (int) D.27382;
        D.27384 = __s2 + 2;
        D.27385 = *D.27384;
        D.27386 = (int) D.27385;
        __result = D.27383 - D.27386;
        D.27387 = __s2_len > 2;
        D.27367 = __result == 0;
        D.27388 = D.27387 & D.27367;
        if (D.27388 != 0) goto <D.27389>; else goto <D.27390>;
        <D.27389>:
        D.27391 = &MEM[(void *)"mscorlib" + 3B];
        D.27392 = *D.27391;
        D.27393 = (int) D.27392;
        D.27394 = __s2 + 3;
        D.27395 = *D.27394;
        D.27396 = (int) D.27395;
        __result = D.27393 - D.27396;
        <D.27390>:
        <D.27380>:
        <D.27370>:
      }
      D.20308 = __result;
    }
    iftmp.195 = -D.20308;
    goto <D.27397>;
    <D.27360>:
    D.27356 = image->assembly;
    D.27398 = D.27356->aname.name;
    iftmp.195 = __builtin_strcmp (D.27398, "mscorlib");
    <D.27397>:
    D.20309 = iftmp.195;
  }
  if (D.20309 == 0) goto <D.27399>; else goto <D.27354>;
  <D.27399>:
  iftmp.194 = 1;
  goto <D.27355>;
  <D.27354>:
  iftmp.194 = 0;
  <D.27355>:
  D.27352 = iftmp.194;
  return D.27352;
  <D.27351>:
  D.27400 = mono_defaults.corlib;
  D.27401 = D.27400 == image;
  D.27352 = (gboolean) D.27401;
  return D.27352;
}


mono_class_setup_mono_type (struct MonoClass * class)
{
  struct MonoImage * D.27403;
  int D.20324;
  int iftmp.196;
  int D.20323;
  const char[7] * D.27409;
  unsigned char D.27410;
  int D.27411;
  unsigned char D.27412;
  int D.27413;
  _Bool D.27414;
  _Bool D.27415;
  _Bool D.27416;
  const unsigned char * D.27419;
  unsigned char D.27420;
  int D.27421;
  const unsigned char * D.27422;
  unsigned char D.27423;
  int D.27424;
  _Bool D.27425;
  _Bool D.27426;
  const unsigned char * D.27429;
  unsigned char D.27430;
  int D.27431;
  const unsigned char * D.27432;
  unsigned char D.27433;
  int D.27434;
  _Bool D.27435;
  _Bool D.27436;
  const unsigned char * D.27439;
  unsigned char D.27440;
  int D.27441;
  const unsigned char * D.27442;
  unsigned char D.27443;
  int D.27444;
  int D.20333;
  int iftmp.197;
  int D.20332;
  const char[10] * D.27451;
  unsigned char D.27452;
  int D.27453;
  unsigned char D.27454;
  int D.27455;
  _Bool D.27456;
  _Bool D.27457;
  _Bool D.27458;
  const unsigned char * D.27461;
  unsigned char D.27462;
  int D.27463;
  const unsigned char * D.27464;
  unsigned char D.27465;
  int D.27466;
  _Bool D.27467;
  _Bool D.27468;
  const unsigned char * D.27471;
  unsigned char D.27472;
  int D.27473;
  const unsigned char * D.27474;
  unsigned char D.27475;
  int D.27476;
  _Bool D.27477;
  _Bool D.27478;
  const unsigned char * D.27481;
  unsigned char D.27482;
  int D.27483;
  const unsigned char * D.27484;
  unsigned char D.27485;
  int D.27486;
  int D.20342;
  int iftmp.198;
  int D.20341;
  const char[5] * D.27494;
  unsigned char D.27495;
  int D.27496;
  unsigned char D.27497;
  int D.27498;
  _Bool D.27499;
  _Bool D.27500;
  _Bool D.27501;
  const unsigned char * D.27504;
  unsigned char D.27505;
  int D.27506;
  const unsigned char * D.27507;
  unsigned char D.27508;
  int D.27509;
  _Bool D.27510;
  _Bool D.27511;
  const unsigned char * D.27514;
  unsigned char D.27515;
  int D.27516;
  const unsigned char * D.27517;
  unsigned char D.27518;
  int D.27519;
  _Bool D.27520;
  _Bool D.27521;
  const unsigned char * D.27524;
  unsigned char D.27525;
  int D.27526;
  const unsigned char * D.27527;
  unsigned char D.27528;
  int D.27529;
  int D.20351;
  int iftmp.199;
  int D.20350;
  const char[7] * D.27537;
  unsigned char D.27538;
  int D.27539;
  unsigned char D.27540;
  int D.27541;
  _Bool D.27542;
  _Bool D.27543;
  _Bool D.27544;
  const unsigned char * D.27547;
  unsigned char D.27548;
  int D.27549;
  const unsigned char * D.27550;
  unsigned char D.27551;
  int D.27552;
  _Bool D.27553;
  _Bool D.27554;
  const unsigned char * D.27557;
  unsigned char D.27558;
  int D.27559;
  const unsigned char * D.27560;
  unsigned char D.27561;
  int D.27562;
  _Bool D.27563;
  _Bool D.27564;
  const unsigned char * D.27567;
  unsigned char D.27568;
  int D.27569;
  const unsigned char * D.27570;
  unsigned char D.27571;
  int D.27572;
  unsigned char D.27576;
  int D.20360;
  int iftmp.200;
  int D.20359;
  const char[7] * D.27581;
  unsigned char D.27582;
  int D.27583;
  unsigned char D.27584;
  int D.27585;
  _Bool D.27586;
  _Bool D.27587;
  _Bool D.27588;
  const unsigned char * D.27591;
  unsigned char D.27592;
  int D.27593;
  const unsigned char * D.27594;
  unsigned char D.27595;
  int D.27596;
  _Bool D.27597;
  _Bool D.27598;
  const unsigned char * D.27601;
  unsigned char D.27602;
  int D.27603;
  const unsigned char * D.27604;
  unsigned char D.27605;
  int D.27606;
  _Bool D.27607;
  _Bool D.27608;
  const unsigned char * D.27611;
  unsigned char D.27612;
  int D.27613;
  const unsigned char * D.27614;
  unsigned char D.27615;
  int D.27616;
  int D.20369;
  int iftmp.201;
  int D.20368;
  const char[15] * D.27624;
  unsigned char D.27625;
  int D.27626;
  unsigned char D.27627;
  int D.27628;
  _Bool D.27629;
  _Bool D.27630;
  _Bool D.27631;
  const unsigned char * D.27634;
  unsigned char D.27635;
  int D.27636;
  const unsigned char * D.27637;
  unsigned char D.27638;
  int D.27639;
  _Bool D.27640;
  _Bool D.27641;
  const unsigned char * D.27644;
  unsigned char D.27645;
  int D.27646;
  const unsigned char * D.27647;
  unsigned char D.27648;
  int D.27649;
  _Bool D.27650;
  _Bool D.27651;
  const unsigned char * D.27654;
  unsigned char D.27655;
  int D.27656;
  const unsigned char * D.27657;
  unsigned char D.27658;
  int D.27659;
  unsigned char D.27663;
  unsigned char D.27664;
  int D.20379;
  int iftmp.202;
  int D.20378;
  unsigned char D.27672;
  int D.27673;
  _Bool D.27674;
  _Bool D.27675;
  _Bool D.27676;
  const unsigned char * D.27679;
  unsigned char D.27680;
  int D.27681;
  _Bool D.27682;
  _Bool D.27683;
  const unsigned char * D.27686;
  unsigned char D.27687;
  int D.27688;
  _Bool D.27689;
  _Bool D.27690;
  const unsigned char * D.27693;
  unsigned char D.27694;
  int D.27695;
  char D.27699;
  int D.27700;
  int D.20389;
  int iftmp.203;
  int D.20388;
  const char[8] * D.27704;
  unsigned char D.27705;
  int D.27706;
  unsigned char D.27707;
  int D.27708;
  _Bool D.27709;
  _Bool D.27710;
  _Bool D.27711;
  const unsigned char * D.27714;
  unsigned char D.27715;
  int D.27716;
  const unsigned char * D.27717;
  unsigned char D.27718;
  int D.27719;
  _Bool D.27720;
  _Bool D.27721;
  const unsigned char * D.27724;
  unsigned char D.27725;
  int D.27726;
  const unsigned char * D.27727;
  unsigned char D.27728;
  int D.27729;
  _Bool D.27730;
  _Bool D.27731;
  const unsigned char * D.27734;
  unsigned char D.27735;
  int D.27736;
  const unsigned char * D.27737;
  unsigned char D.27738;
  int D.27739;
  int D.20398;
  int iftmp.204;
  int D.20397;
  const char[5] * D.27747;
  unsigned char D.27748;
  int D.27749;
  unsigned char D.27750;
  int D.27751;
  _Bool D.27752;
  _Bool D.27753;
  _Bool D.27754;
  const unsigned char * D.27757;
  unsigned char D.27758;
  int D.27759;
  const unsigned char * D.27760;
  unsigned char D.27761;
  int D.27762;
  _Bool D.27763;
  _Bool D.27764;
  const unsigned char * D.27767;
  unsigned char D.27768;
  int D.27769;
  const unsigned char * D.27770;
  unsigned char D.27771;
  int D.27772;
  _Bool D.27773;
  _Bool D.27774;
  const unsigned char * D.27777;
  unsigned char D.27778;
  int D.27779;
  const unsigned char * D.27780;
  unsigned char D.27781;
  int D.27782;
  int D.20409;
  int iftmp.205;
  int D.20408;
  const char[5] * D.27789;
  unsigned char D.27790;
  int D.27791;
  unsigned char D.27792;
  int D.27793;
  _Bool D.27794;
  _Bool D.27795;
  _Bool D.27796;
  const unsigned char * D.27799;
  unsigned char D.27800;
  int D.27801;
  const unsigned char * D.27802;
  unsigned char D.27803;
  int D.27804;
  _Bool D.27805;
  _Bool D.27806;
  const unsigned char * D.27809;
  unsigned char D.27810;
  int D.27811;
  const unsigned char * D.27812;
  unsigned char D.27813;
  int D.27814;
  _Bool D.27815;
  _Bool D.27816;
  const unsigned char * D.27819;
  unsigned char D.27820;
  int D.27821;
  const unsigned char * D.27822;
  unsigned char D.27823;
  int D.27824;
  int D.20419;
  int iftmp.206;
  int D.20418;
  const char[7] * D.27831;
  unsigned char D.27832;
  int D.27833;
  unsigned char D.27834;
  int D.27835;
  _Bool D.27836;
  _Bool D.27837;
  _Bool D.27838;
  const unsigned char * D.27841;
  unsigned char D.27842;
  int D.27843;
  const unsigned char * D.27844;
  unsigned char D.27845;
  int D.27846;
  _Bool D.27847;
  _Bool D.27848;
  const unsigned char * D.27851;
  unsigned char D.27852;
  int D.27853;
  const unsigned char * D.27854;
  unsigned char D.27855;
  int D.27856;
  _Bool D.27857;
  _Bool D.27858;
  const unsigned char * D.27861;
  unsigned char D.27862;
  int D.27863;
  const unsigned char * D.27864;
  unsigned char D.27865;
  int D.27866;
  int D.20429;
  int iftmp.207;
  int D.20428;
  const char[6] * D.27873;
  unsigned char D.27874;
  int D.27875;
  unsigned char D.27876;
  int D.27877;
  _Bool D.27878;
  _Bool D.27879;
  _Bool D.27880;
  const unsigned char * D.27883;
  unsigned char D.27884;
  int D.27885;
  const unsigned char * D.27886;
  unsigned char D.27887;
  int D.27888;
  _Bool D.27889;
  _Bool D.27890;
  const unsigned char * D.27893;
  unsigned char D.27894;
  int D.27895;
  const unsigned char * D.27896;
  unsigned char D.27897;
  int D.27898;
  _Bool D.27899;
  _Bool D.27900;
  const unsigned char * D.27903;
  unsigned char D.27904;
  int D.27905;
  const unsigned char * D.27906;
  unsigned char D.27907;
  int D.27908;
  int D.20438;
  int iftmp.208;
  int D.20437;
  const char[6] * D.27916;
  unsigned char D.27917;
  int D.27918;
  unsigned char D.27919;
  int D.27920;
  _Bool D.27921;
  _Bool D.27922;
  _Bool D.27923;
  const unsigned char * D.27926;
  unsigned char D.27927;
  int D.27928;
  const unsigned char * D.27929;
  unsigned char D.27930;
  int D.27931;
  _Bool D.27932;
  _Bool D.27933;
  const unsigned char * D.27936;
  unsigned char D.27937;
  int D.27938;
  const unsigned char * D.27939;
  unsigned char D.27940;
  int D.27941;
  _Bool D.27942;
  _Bool D.27943;
  const unsigned char * D.27946;
  unsigned char D.27947;
  int D.27948;
  const unsigned char * D.27949;
  unsigned char D.27950;
  int D.27951;
  int D.20447;
  int iftmp.209;
  int D.20446;
  const char[6] * D.27959;
  unsigned char D.27960;
  int D.27961;
  unsigned char D.27962;
  int D.27963;
  _Bool D.27964;
  _Bool D.27965;
  _Bool D.27966;
  const unsigned char * D.27969;
  unsigned char D.27970;
  int D.27971;
  const unsigned char * D.27972;
  unsigned char D.27973;
  int D.27974;
  _Bool D.27975;
  _Bool D.27976;
  const unsigned char * D.27979;
  unsigned char D.27980;
  int D.27981;
  const unsigned char * D.27982;
  unsigned char D.27983;
  int D.27984;
  _Bool D.27985;
  _Bool D.27986;
  const unsigned char * D.27989;
  unsigned char D.27990;
  int D.27991;
  const unsigned char * D.27992;
  unsigned char D.27993;
  int D.27994;
  int D.20456;
  int iftmp.210;
  int D.20455;
  const char[7] * D.28002;
  unsigned char D.28003;
  int D.28004;
  unsigned char D.28005;
  int D.28006;
  _Bool D.28007;
  _Bool D.28008;
  _Bool D.28009;
  const unsigned char * D.28012;
  unsigned char D.28013;
  int D.28014;
  const unsigned char * D.28015;
  unsigned char D.28016;
  int D.28017;
  _Bool D.28018;
  _Bool D.28019;
  const unsigned char * D.28022;
  unsigned char D.28023;
  int D.28024;
  const unsigned char * D.28025;
  unsigned char D.28026;
  int D.28027;
  _Bool D.28028;
  _Bool D.28029;
  const unsigned char * D.28032;
  unsigned char D.28033;
  int D.28034;
  const unsigned char * D.28035;
  unsigned char D.28036;
  int D.28037;
  int D.20466;
  int iftmp.211;
  int D.20465;
  const char[7] * D.28044;
  unsigned char D.28045;
  int D.28046;
  unsigned char D.28047;
  int D.28048;
  _Bool D.28049;
  _Bool D.28050;
  _Bool D.28051;
  const unsigned char * D.28054;
  unsigned char D.28055;
  int D.28056;
  const unsigned char * D.28057;
  unsigned char D.28058;
  int D.28059;
  _Bool D.28060;
  _Bool D.28061;
  const unsigned char * D.28064;
  unsigned char D.28065;
  int D.28066;
  const unsigned char * D.28067;
  unsigned char D.28068;
  int D.28069;
  _Bool D.28070;
  _Bool D.28071;
  const unsigned char * D.28074;
  unsigned char D.28075;
  int D.28076;
  const unsigned char * D.28077;
  unsigned char D.28078;
  int D.28079;
  int D.20475;
  int iftmp.212;
  int D.20474;
  const char[6] * D.28087;
  unsigned char D.28088;
  int D.28089;
  unsigned char D.28090;
  int D.28091;
  _Bool D.28092;
  _Bool D.28093;
  _Bool D.28094;
  const unsigned char * D.28097;
  unsigned char D.28098;
  int D.28099;
  const unsigned char * D.28100;
  unsigned char D.28101;
  int D.28102;
  _Bool D.28103;
  _Bool D.28104;
  const unsigned char * D.28107;
  unsigned char D.28108;
  int D.28109;
  const unsigned char * D.28110;
  unsigned char D.28111;
  int D.28112;
  _Bool D.28113;
  _Bool D.28114;
  const unsigned char * D.28117;
  unsigned char D.28118;
  int D.28119;
  const unsigned char * D.28120;
  unsigned char D.28121;
  int D.28122;
  int D.20485;
  int iftmp.213;
  int D.20484;
  const char[7] * D.28129;
  unsigned char D.28130;
  int D.28131;
  unsigned char D.28132;
  int D.28133;
  _Bool D.28134;
  _Bool D.28135;
  _Bool D.28136;
  const unsigned char * D.28139;
  unsigned char D.28140;
  int D.28141;
  const unsigned char * D.28142;
  unsigned char D.28143;
  int D.28144;
  _Bool D.28145;
  _Bool D.28146;
  const unsigned char * D.28149;
  unsigned char D.28150;
  int D.28151;
  const unsigned char * D.28152;
  unsigned char D.28153;
  int D.28154;
  _Bool D.28155;
  _Bool D.28156;
  const unsigned char * D.28159;
  unsigned char D.28160;
  int D.28161;
  const unsigned char * D.28162;
  unsigned char D.28163;
  int D.28164;
  int D.20494;
  int iftmp.214;
  int D.20493;
  const char[7] * D.28172;
  unsigned char D.28173;
  int D.28174;
  unsigned char D.28175;
  int D.28176;
  _Bool D.28177;
  _Bool D.28178;
  _Bool D.28179;
  const unsigned char * D.28182;
  unsigned char D.28183;
  int D.28184;
  const unsigned char * D.28185;
  unsigned char D.28186;
  int D.28187;
  _Bool D.28188;
  _Bool D.28189;
  const unsigned char * D.28192;
  unsigned char D.28193;
  int D.28194;
  const unsigned char * D.28195;
  unsigned char D.28196;
  int D.28197;
  _Bool D.28198;
  _Bool D.28199;
  const unsigned char * D.28202;
  unsigned char D.28203;
  int D.28204;
  const unsigned char * D.28205;
  unsigned char D.28206;
  int D.28207;
  int D.20503;
  int iftmp.215;
  int D.20502;
  const char[7] * D.28215;
  unsigned char D.28216;
  int D.28217;
  unsigned char D.28218;
  int D.28219;
  _Bool D.28220;
  _Bool D.28221;
  _Bool D.28222;
  const unsigned char * D.28225;
  unsigned char D.28226;
  int D.28227;
  const unsigned char * D.28228;
  unsigned char D.28229;
  int D.28230;
  _Bool D.28231;
  _Bool D.28232;
  const unsigned char * D.28235;
  unsigned char D.28236;
  int D.28237;
  const unsigned char * D.28238;
  unsigned char D.28239;
  int D.28240;
  _Bool D.28241;
  _Bool D.28242;
  const unsigned char * D.28245;
  unsigned char D.28246;
  int D.28247;
  const unsigned char * D.28248;
  unsigned char D.28249;
  int D.28250;
  int D.20512;
  int iftmp.216;
  int D.20511;
  const char[8] * D.28258;
  unsigned char D.28259;
  int D.28260;
  unsigned char D.28261;
  int D.28262;
  _Bool D.28263;
  _Bool D.28264;
  _Bool D.28265;
  const unsigned char * D.28268;
  unsigned char D.28269;
  int D.28270;
  const unsigned char * D.28271;
  unsigned char D.28272;
  int D.28273;
  _Bool D.28274;
  _Bool D.28275;
  const unsigned char * D.28278;
  unsigned char D.28279;
  int D.28280;
  const unsigned char * D.28281;
  unsigned char D.28282;
  int D.28283;
  _Bool D.28284;
  _Bool D.28285;
  const unsigned char * D.28288;
  unsigned char D.28289;
  int D.28290;
  const unsigned char * D.28291;
  unsigned char D.28292;
  int D.28293;
  int D.20522;
  int iftmp.217;
  int D.20521;
  unsigned char D.28300;
  int D.28301;
  _Bool D.28302;
  _Bool D.28303;
  _Bool D.28304;
  const unsigned char * D.28307;
  unsigned char D.28308;
  int D.28309;
  _Bool D.28310;
  _Bool D.28311;
  const unsigned char * D.28314;
  unsigned char D.28315;
  int D.28316;
  _Bool D.28317;
  _Bool D.28318;
  const unsigned char * D.28321;
  unsigned char D.28322;
  int D.28323;
  int D.20532;
  int iftmp.218;
  int D.20531;
  const char[5] * D.28330;
  unsigned char D.28331;
  int D.28332;
  unsigned char D.28333;
  int D.28334;
  _Bool D.28335;
  _Bool D.28336;
  _Bool D.28337;
  const unsigned char * D.28340;
  unsigned char D.28341;
  int D.28342;
  const unsigned char * D.28343;
  unsigned char D.28344;
  int D.28345;
  _Bool D.28346;
  _Bool D.28347;
  const unsigned char * D.28350;
  unsigned char D.28351;
  int D.28352;
  const unsigned char * D.28353;
  unsigned char D.28354;
  int D.28355;
  _Bool D.28356;
  _Bool D.28357;
  const unsigned char * D.28360;
  unsigned char D.28361;
  int D.28362;
  const unsigned char * D.28363;
  unsigned char D.28364;
  int D.28365;
  unsigned char D.28369;
  unsigned int D.28372;
  unsigned int D.28373;
  unsigned int D.28376;
  short unsigned int D.28377;
  const char * name;
  const char * nspace;
  gboolean is_corlib;

  name = class->name;
  nspace = class->name_space;
  D.27403 = class->image;
  is_corlib = mono_is_corlib_image (D.27403);
  class->this_arg.byref = 1;
  class->this_arg.data.klass = class;
  class->this_arg.type = 18;
  class->byval_arg.data.klass = class;
  class->byval_arg.type = 18;
  if (is_corlib != 0) goto <D.27404>; else goto <D.27405>;
  <D.27404>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = nspace;
      D.27409 = "System";
      D.27410 = MEM[(const unsigned char *)D.27409];
      D.27411 = (int) D.27410;
      D.27412 = *__s2;
      D.27413 = (int) D.27412;
      __result = D.27411 - D.27413;
      {
        D.27414 = __s2_len != 0;
        D.27415 = __result == 0;
        D.27416 = D.27414 & D.27415;
        if (D.27416 != 0) goto <D.27417>; else goto <D.27418>;
        <D.27417>:
        D.27419 = &MEM[(void *)"System" + 1B];
        D.27420 = *D.27419;
        D.27421 = (int) D.27420;
        D.27422 = __s2 + 1;
        D.27423 = *D.27422;
        D.27424 = (int) D.27423;
        __result = D.27421 - D.27424;
        D.27425 = __s2_len > 1;
        D.27415 = __result == 0;
        D.27426 = D.27425 & D.27415;
        if (D.27426 != 0) goto <D.27427>; else goto <D.27428>;
        <D.27427>:
        D.27429 = &MEM[(void *)"System" + 2B];
        D.27430 = *D.27429;
        D.27431 = (int) D.27430;
        D.27432 = __s2 + 2;
        D.27433 = *D.27432;
        D.27434 = (int) D.27433;
        __result = D.27431 - D.27434;
        D.27435 = __s2_len > 2;
        D.27415 = __result == 0;
        D.27436 = D.27435 & D.27415;
        if (D.27436 != 0) goto <D.27437>; else goto <D.27438>;
        <D.27437>:
        D.27439 = &MEM[(void *)"System" + 3B];
        D.27440 = *D.27439;
        D.27441 = (int) D.27440;
        D.27442 = __s2 + 3;
        D.27443 = *D.27442;
        D.27444 = (int) D.27443;
        __result = D.27441 - D.27444;
        <D.27438>:
        <D.27428>:
        <D.27418>:
      }
      D.20323 = __result;
    }
    iftmp.196 = -D.20323;
    goto <D.27445>;
    <D.27408>:
    iftmp.196 = __builtin_strcmp (nspace, "System");
    <D.27445>:
    D.20324 = iftmp.196;
  }
  if (D.20324 == 0) goto <D.27446>; else goto <D.27447>;
  <D.27446>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = name;
      D.27451 = "ValueType";
      D.27452 = MEM[(const unsigned char *)D.27451];
      D.27453 = (int) D.27452;
      D.27454 = *__s2;
      D.27455 = (int) D.27454;
      __result = D.27453 - D.27455;
      {
        D.27456 = __s2_len != 0;
        D.27457 = __result == 0;
        D.27458 = D.27456 & D.27457;
        if (D.27458 != 0) goto <D.27459>; else goto <D.27460>;
        <D.27459>:
        D.27461 = &MEM[(void *)"ValueType" + 1B];
        D.27462 = *D.27461;
        D.27463 = (int) D.27462;
        D.27464 = __s2 + 1;
        D.27465 = *D.27464;
        D.27466 = (int) D.27465;
        __result = D.27463 - D.27466;
        D.27467 = __s2_len > 1;
        D.27457 = __result == 0;
        D.27468 = D.27467 & D.27457;
        if (D.27468 != 0) goto <D.27469>; else goto <D.27470>;
        <D.27469>:
        D.27471 = &MEM[(void *)"ValueType" + 2B];
        D.27472 = *D.27471;
        D.27473 = (int) D.27472;
        D.27474 = __s2 + 2;
        D.27475 = *D.27474;
        D.27476 = (int) D.27475;
        __result = D.27473 - D.27476;
        D.27477 = __s2_len > 2;
        D.27457 = __result == 0;
        D.27478 = D.27477 & D.27457;
        if (D.27478 != 0) goto <D.27479>; else goto <D.27480>;
        <D.27479>:
        D.27481 = &MEM[(void *)"ValueType" + 3B];
        D.27482 = *D.27481;
        D.27483 = (int) D.27482;
        D.27484 = __s2 + 3;
        D.27485 = *D.27484;
        D.27486 = (int) D.27485;
        __result = D.27483 - D.27486;
        <D.27480>:
        <D.27470>:
        <D.27460>:
      }
      D.20332 = __result;
    }
    iftmp.197 = -D.20332;
    goto <D.27487>;
    <D.27450>:
    iftmp.197 = __builtin_strcmp (name, "ValueType");
    <D.27487>:
    D.20333 = iftmp.197;
  }
  if (D.20333 == 0) goto <D.27488>; else goto <D.27489>;
  <D.27488>:
  class->blittable = 1;
  goto <D.27490>;
  <D.27489>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = name;
      D.27494 = "Enum";
      D.27495 = MEM[(const unsigned char *)D.27494];
      D.27496 = (int) D.27495;
      D.27497 = *__s2;
      D.27498 = (int) D.27497;
      __result = D.27496 - D.27498;
      {
        D.27499 = __s2_len != 0;
        D.27500 = __result == 0;
        D.27501 = D.27499 & D.27500;
        if (D.27501 != 0) goto <D.27502>; else goto <D.27503>;
        <D.27502>:
        D.27504 = &MEM[(void *)"Enum" + 1B];
        D.27505 = *D.27504;
        D.27506 = (int) D.27505;
        D.27507 = __s2 + 1;
        D.27508 = *D.27507;
        D.27509 = (int) D.27508;
        __result = D.27506 - D.27509;
        D.27510 = __s2_len > 1;
        D.27500 = __result == 0;
        D.27511 = D.27510 & D.27500;
        if (D.27511 != 0) goto <D.27512>; else goto <D.27513>;
        <D.27512>:
        D.27514 = &MEM[(void *)"Enum" + 2B];
        D.27515 = *D.27514;
        D.27516 = (int) D.27515;
        D.27517 = __s2 + 2;
        D.27518 = *D.27517;
        D.27519 = (int) D.27518;
        __result = D.27516 - D.27519;
        D.27520 = __s2_len > 2;
        D.27500 = __result == 0;
        D.27521 = D.27520 & D.27500;
        if (D.27521 != 0) goto <D.27522>; else goto <D.27523>;
        <D.27522>:
        D.27524 = &MEM[(void *)"Enum" + 3B];
        D.27525 = *D.27524;
        D.27526 = (int) D.27525;
        D.27527 = __s2 + 3;
        D.27528 = *D.27527;
        D.27529 = (int) D.27528;
        __result = D.27526 - D.27529;
        <D.27523>:
        <D.27513>:
        <D.27503>:
      }
      D.20341 = __result;
    }
    iftmp.198 = -D.20341;
    goto <D.27530>;
    <D.27493>:
    iftmp.198 = __builtin_strcmp (name, "Enum");
    <D.27530>:
    D.20342 = iftmp.198;
  }
  if (D.20342 == 0) goto <D.27531>; else goto <D.27532>;
  <D.27531>:
  class->valuetype = 0;
  class->enumtype = 0;
  goto <D.27533>;
  <D.27532>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = name;
      D.27537 = "Object";
      D.27538 = MEM[(const unsigned char *)D.27537];
      D.27539 = (int) D.27538;
      D.27540 = *__s2;
      D.27541 = (int) D.27540;
      __result = D.27539 - D.27541;
      {
        D.27542 = __s2_len != 0;
        D.27543 = __result == 0;
        D.27544 = D.27542 & D.27543;
        if (D.27544 != 0) goto <D.27545>; else goto <D.27546>;
        <D.27545>:
        D.27547 = &MEM[(void *)"Object" + 1B];
        D.27548 = *D.27547;
        D.27549 = (int) D.27548;
        D.27550 = __s2 + 1;
        D.27551 = *D.27550;
        D.27552 = (int) D.27551;
        __result = D.27549 - D.27552;
        D.27553 = __s2_len > 1;
        D.27543 = __result == 0;
        D.27554 = D.27553 & D.27543;
        if (D.27554 != 0) goto <D.27555>; else goto <D.27556>;
        <D.27555>:
        D.27557 = &MEM[(void *)"Object" + 2B];
        D.27558 = *D.27557;
        D.27559 = (int) D.27558;
        D.27560 = __s2 + 2;
        D.27561 = *D.27560;
        D.27562 = (int) D.27561;
        __result = D.27559 - D.27562;
        D.27563 = __s2_len > 2;
        D.27543 = __result == 0;
        D.27564 = D.27563 & D.27543;
        if (D.27564 != 0) goto <D.27565>; else goto <D.27566>;
        <D.27565>:
        D.27567 = &MEM[(void *)"Object" + 3B];
        D.27568 = *D.27567;
        D.27569 = (int) D.27568;
        D.27570 = __s2 + 3;
        D.27571 = *D.27570;
        D.27572 = (int) D.27571;
        __result = D.27569 - D.27572;
        <D.27566>:
        <D.27556>:
        <D.27546>:
      }
      D.20350 = __result;
    }
    iftmp.199 = -D.20350;
    goto <D.27573>;
    <D.27536>:
    iftmp.199 = __builtin_strcmp (name, "Object");
    <D.27573>:
    D.20351 = iftmp.199;
  }
  if (D.20351 == 0) goto <D.27574>; else goto <D.27575>;
  <D.27574>:
  class->byval_arg.type = 28;
  D.27576 = class->byval_arg.type;
  class->this_arg.type = D.27576;
  goto <D.27577>;
  <D.27575>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = name;
      D.27581 = "String";
      D.27582 = MEM[(const unsigned char *)D.27581];
      D.27583 = (int) D.27582;
      D.27584 = *__s2;
      D.27585 = (int) D.27584;
      __result = D.27583 - D.27585;
      {
        D.27586 = __s2_len != 0;
        D.27587 = __result == 0;
        D.27588 = D.27586 & D.27587;
        if (D.27588 != 0) goto <D.27589>; else goto <D.27590>;
        <D.27589>:
        D.27591 = &MEM[(void *)"String" + 1B];
        D.27592 = *D.27591;
        D.27593 = (int) D.27592;
        D.27594 = __s2 + 1;
        D.27595 = *D.27594;
        D.27596 = (int) D.27595;
        __result = D.27593 - D.27596;
        D.27597 = __s2_len > 1;
        D.27587 = __result == 0;
        D.27598 = D.27597 & D.27587;
        if (D.27598 != 0) goto <D.27599>; else goto <D.27600>;
        <D.27599>:
        D.27601 = &MEM[(void *)"String" + 2B];
        D.27602 = *D.27601;
        D.27603 = (int) D.27602;
        D.27604 = __s2 + 2;
        D.27605 = *D.27604;
        D.27606 = (int) D.27605;
        __result = D.27603 - D.27606;
        D.27607 = __s2_len > 2;
        D.27587 = __result == 0;
        D.27608 = D.27607 & D.27587;
        if (D.27608 != 0) goto <D.27609>; else goto <D.27610>;
        <D.27609>:
        D.27611 = &MEM[(void *)"String" + 3B];
        D.27612 = *D.27611;
        D.27613 = (int) D.27612;
        D.27614 = __s2 + 3;
        D.27615 = *D.27614;
        D.27616 = (int) D.27615;
        __result = D.27613 - D.27616;
        <D.27610>:
        <D.27600>:
        <D.27590>:
      }
      D.20359 = __result;
    }
    iftmp.200 = -D.20359;
    goto <D.27617>;
    <D.27580>:
    iftmp.200 = __builtin_strcmp (name, "String");
    <D.27617>:
    D.20360 = iftmp.200;
  }
  if (D.20360 == 0) goto <D.27618>; else goto <D.27619>;
  <D.27618>:
  class->byval_arg.type = 14;
  D.27576 = class->byval_arg.type;
  class->this_arg.type = D.27576;
  goto <D.27620>;
  <D.27619>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = name;
      D.27624 = "TypedReference";
      D.27625 = MEM[(const unsigned char *)D.27624];
      D.27626 = (int) D.27625;
      D.27627 = *__s2;
      D.27628 = (int) D.27627;
      __result = D.27626 - D.27628;
      {
        D.27629 = __s2_len != 0;
        D.27630 = __result == 0;
        D.27631 = D.27629 & D.27630;
        if (D.27631 != 0) goto <D.27632>; else goto <D.27633>;
        <D.27632>:
        D.27634 = &MEM[(void *)"TypedReference" + 1B];
        D.27635 = *D.27634;
        D.27636 = (int) D.27635;
        D.27637 = __s2 + 1;
        D.27638 = *D.27637;
        D.27639 = (int) D.27638;
        __result = D.27636 - D.27639;
        D.27640 = __s2_len > 1;
        D.27630 = __result == 0;
        D.27641 = D.27640 & D.27630;
        if (D.27641 != 0) goto <D.27642>; else goto <D.27643>;
        <D.27642>:
        D.27644 = &MEM[(void *)"TypedReference" + 2B];
        D.27645 = *D.27644;
        D.27646 = (int) D.27645;
        D.27647 = __s2 + 2;
        D.27648 = *D.27647;
        D.27649 = (int) D.27648;
        __result = D.27646 - D.27649;
        D.27650 = __s2_len > 2;
        D.27630 = __result == 0;
        D.27651 = D.27650 & D.27630;
        if (D.27651 != 0) goto <D.27652>; else goto <D.27653>;
        <D.27652>:
        D.27654 = &MEM[(void *)"TypedReference" + 3B];
        D.27655 = *D.27654;
        D.27656 = (int) D.27655;
        D.27657 = __s2 + 3;
        D.27658 = *D.27657;
        D.27659 = (int) D.27658;
        __result = D.27656 - D.27659;
        <D.27653>:
        <D.27643>:
        <D.27633>:
      }
      D.20368 = __result;
    }
    iftmp.201 = -D.20368;
    goto <D.27660>;
    <D.27623>:
    iftmp.201 = __builtin_strcmp (name, "TypedReference");
    <D.27660>:
    D.20369 = iftmp.201;
  }
  if (D.20369 == 0) goto <D.27661>; else goto <D.27662>;
  <D.27661>:
  class->byval_arg.type = 22;
  D.27576 = class->byval_arg.type;
  class->this_arg.type = D.27576;
  <D.27662>:
  <D.27620>:
  <D.27577>:
  <D.27533>:
  <D.27490>:
  <D.27447>:
  <D.27405>:
  D.27663 = BIT_FIELD_REF <*class, 8, 256>;
  D.27664 = D.27663 & 8;
  if (D.27664 != 0) goto <D.27665>; else goto <D.27666>;
  <D.27665>:
  {
    int t;

    t = 17;
    if (is_corlib != 0) goto <D.27667>; else goto <D.27668>;
    <D.27667>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = nspace;
        D.27409 = "System";
        D.27410 = MEM[(const unsigned char *)D.27409];
        D.27411 = (int) D.27410;
        D.27672 = *__s2;
        D.27673 = (int) D.27672;
        __result = D.27411 - D.27673;
        {
          D.27674 = __s2_len != 0;
          D.27675 = __result == 0;
          D.27676 = D.27674 & D.27675;
          if (D.27676 != 0) goto <D.27677>; else goto <D.27678>;
          <D.27677>:
          D.27419 = &MEM[(void *)"System" + 1B];
          D.27420 = *D.27419;
          D.27421 = (int) D.27420;
          D.27679 = __s2 + 1;
          D.27680 = *D.27679;
          D.27681 = (int) D.27680;
          __result = D.27421 - D.27681;
          D.27682 = __s2_len > 1;
          D.27675 = __result == 0;
          D.27683 = D.27682 & D.27675;
          if (D.27683 != 0) goto <D.27684>; else goto <D.27685>;
          <D.27684>:
          D.27429 = &MEM[(void *)"System" + 2B];
          D.27430 = *D.27429;
          D.27431 = (int) D.27430;
          D.27686 = __s2 + 2;
          D.27687 = *D.27686;
          D.27688 = (int) D.27687;
          __result = D.27431 - D.27688;
          D.27689 = __s2_len > 2;
          D.27675 = __result == 0;
          D.27690 = D.27689 & D.27675;
          if (D.27690 != 0) goto <D.27691>; else goto <D.27692>;
          <D.27691>:
          D.27439 = &MEM[(void *)"System" + 3B];
          D.27440 = *D.27439;
          D.27441 = (int) D.27440;
          D.27693 = __s2 + 3;
          D.27694 = *D.27693;
          D.27695 = (int) D.27694;
          __result = D.27441 - D.27695;
          <D.27692>:
          <D.27685>:
          <D.27678>:
        }
        D.20378 = __result;
      }
      iftmp.202 = -D.20378;
      goto <D.27696>;
      <D.27671>:
      iftmp.202 = __builtin_strcmp (nspace, "System");
      <D.27696>:
      D.20379 = iftmp.202;
    }
    if (D.20379 == 0) goto <D.27697>; else goto <D.27698>;
    <D.27697>:
    D.27699 = *name;
    D.27700 = (int) D.27699;
    switch (D.27700) <default: <D.20533>, case 66: <D.20380>, case 67: <D.20400>, case 68: <D.20410>, case 73: <D.20420>, case 83: <D.20457>, case 84: <D.20513>, case 85: <D.20476>, case 86: <D.20523>>
    <D.20380>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.27704 = "Boolean";
        D.27705 = MEM[(const unsigned char *)D.27704];
        D.27706 = (int) D.27705;
        D.27707 = *__s2;
        D.27708 = (int) D.27707;
        __result = D.27706 - D.27708;
        {
          D.27709 = __s2_len != 0;
          D.27710 = __result == 0;
          D.27711 = D.27709 & D.27710;
          if (D.27711 != 0) goto <D.27712>; else goto <D.27713>;
          <D.27712>:
          D.27714 = &MEM[(void *)"Boolean" + 1B];
          D.27715 = *D.27714;
          D.27716 = (int) D.27715;
          D.27717 = __s2 + 1;
          D.27718 = *D.27717;
          D.27719 = (int) D.27718;
          __result = D.27716 - D.27719;
          D.27720 = __s2_len > 1;
          D.27710 = __result == 0;
          D.27721 = D.27720 & D.27710;
          if (D.27721 != 0) goto <D.27722>; else goto <D.27723>;
          <D.27722>:
          D.27724 = &MEM[(void *)"Boolean" + 2B];
          D.27725 = *D.27724;
          D.27726 = (int) D.27725;
          D.27727 = __s2 + 2;
          D.27728 = *D.27727;
          D.27729 = (int) D.27728;
          __result = D.27726 - D.27729;
          D.27730 = __s2_len > 2;
          D.27710 = __result == 0;
          D.27731 = D.27730 & D.27710;
          if (D.27731 != 0) goto <D.27732>; else goto <D.27733>;
          <D.27732>:
          D.27734 = &MEM[(void *)"Boolean" + 3B];
          D.27735 = *D.27734;
          D.27736 = (int) D.27735;
          D.27737 = __s2 + 3;
          D.27738 = *D.27737;
          D.27739 = (int) D.27738;
          __result = D.27736 - D.27739;
          <D.27733>:
          <D.27723>:
          <D.27713>:
        }
        D.20388 = __result;
      }
      iftmp.203 = -D.20388;
      goto <D.27740>;
      <D.27703>:
      iftmp.203 = __builtin_strcmp (name, "Boolean");
      <D.27740>:
      D.20389 = iftmp.203;
    }
    if (D.20389 == 0) goto <D.27741>; else goto <D.27742>;
    <D.27741>:
    t = 2;
    goto <D.27743>;
    <D.27742>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.27747 = "Byte";
        D.27748 = MEM[(const unsigned char *)D.27747];
        D.27749 = (int) D.27748;
        D.27750 = *__s2;
        D.27751 = (int) D.27750;
        __result = D.27749 - D.27751;
        {
          D.27752 = __s2_len != 0;
          D.27753 = __result == 0;
          D.27754 = D.27752 & D.27753;
          if (D.27754 != 0) goto <D.27755>; else goto <D.27756>;
          <D.27755>:
          D.27757 = &MEM[(void *)"Byte" + 1B];
          D.27758 = *D.27757;
          D.27759 = (int) D.27758;
          D.27760 = __s2 + 1;
          D.27761 = *D.27760;
          D.27762 = (int) D.27761;
          __result = D.27759 - D.27762;
          D.27763 = __s2_len > 1;
          D.27753 = __result == 0;
          D.27764 = D.27763 & D.27753;
          if (D.27764 != 0) goto <D.27765>; else goto <D.27766>;
          <D.27765>:
          D.27767 = &MEM[(void *)"Byte" + 2B];
          D.27768 = *D.27767;
          D.27769 = (int) D.27768;
          D.27770 = __s2 + 2;
          D.27771 = *D.27770;
          D.27772 = (int) D.27771;
          __result = D.27769 - D.27772;
          D.27773 = __s2_len > 2;
          D.27753 = __result == 0;
          D.27774 = D.27773 & D.27753;
          if (D.27774 != 0) goto <D.27775>; else goto <D.27776>;
          <D.27775>:
          D.27777 = &MEM[(void *)"Byte" + 3B];
          D.27778 = *D.27777;
          D.27779 = (int) D.27778;
          D.27780 = __s2 + 3;
          D.27781 = *D.27780;
          D.27782 = (int) D.27781;
          __result = D.27779 - D.27782;
          <D.27776>:
          <D.27766>:
          <D.27756>:
        }
        D.20397 = __result;
      }
      iftmp.204 = -D.20397;
      goto <D.27783>;
      <D.27746>:
      iftmp.204 = __builtin_strcmp (name, "Byte");
      <D.27783>:
      D.20398 = iftmp.204;
    }
    if (D.20398 == 0) goto <D.27784>; else goto <D.27785>;
    <D.27784>:
    t = 5;
    class->blittable = 1;
    <D.27785>:
    <D.27743>:
    goto <D.20399>;
    <D.20400>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.27789 = "Char";
        D.27790 = MEM[(const unsigned char *)D.27789];
        D.27791 = (int) D.27790;
        D.27792 = *__s2;
        D.27793 = (int) D.27792;
        __result = D.27791 - D.27793;
        {
          D.27794 = __s2_len != 0;
          D.27795 = __result == 0;
          D.27796 = D.27794 & D.27795;
          if (D.27796 != 0) goto <D.27797>; else goto <D.27798>;
          <D.27797>:
          D.27799 = &MEM[(void *)"Char" + 1B];
          D.27800 = *D.27799;
          D.27801 = (int) D.27800;
          D.27802 = __s2 + 1;
          D.27803 = *D.27802;
          D.27804 = (int) D.27803;
          __result = D.27801 - D.27804;
          D.27805 = __s2_len > 1;
          D.27795 = __result == 0;
          D.27806 = D.27805 & D.27795;
          if (D.27806 != 0) goto <D.27807>; else goto <D.27808>;
          <D.27807>:
          D.27809 = &MEM[(void *)"Char" + 2B];
          D.27810 = *D.27809;
          D.27811 = (int) D.27810;
          D.27812 = __s2 + 2;
          D.27813 = *D.27812;
          D.27814 = (int) D.27813;
          __result = D.27811 - D.27814;
          D.27815 = __s2_len > 2;
          D.27795 = __result == 0;
          D.27816 = D.27815 & D.27795;
          if (D.27816 != 0) goto <D.27817>; else goto <D.27818>;
          <D.27817>:
          D.27819 = &MEM[(void *)"Char" + 3B];
          D.27820 = *D.27819;
          D.27821 = (int) D.27820;
          D.27822 = __s2 + 3;
          D.27823 = *D.27822;
          D.27824 = (int) D.27823;
          __result = D.27821 - D.27824;
          <D.27818>:
          <D.27808>:
          <D.27798>:
        }
        D.20408 = __result;
      }
      iftmp.205 = -D.20408;
      goto <D.27825>;
      <D.27788>:
      iftmp.205 = __builtin_strcmp (name, "Char");
      <D.27825>:
      D.20409 = iftmp.205;
    }
    if (D.20409 == 0) goto <D.27826>; else goto <D.27827>;
    <D.27826>:
    t = 3;
    <D.27827>:
    goto <D.20399>;
    <D.20410>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.27831 = "Double";
        D.27832 = MEM[(const unsigned char *)D.27831];
        D.27833 = (int) D.27832;
        D.27834 = *__s2;
        D.27835 = (int) D.27834;
        __result = D.27833 - D.27835;
        {
          D.27836 = __s2_len != 0;
          D.27837 = __result == 0;
          D.27838 = D.27836 & D.27837;
          if (D.27838 != 0) goto <D.27839>; else goto <D.27840>;
          <D.27839>:
          D.27841 = &MEM[(void *)"Double" + 1B];
          D.27842 = *D.27841;
          D.27843 = (int) D.27842;
          D.27844 = __s2 + 1;
          D.27845 = *D.27844;
          D.27846 = (int) D.27845;
          __result = D.27843 - D.27846;
          D.27847 = __s2_len > 1;
          D.27837 = __result == 0;
          D.27848 = D.27847 & D.27837;
          if (D.27848 != 0) goto <D.27849>; else goto <D.27850>;
          <D.27849>:
          D.27851 = &MEM[(void *)"Double" + 2B];
          D.27852 = *D.27851;
          D.27853 = (int) D.27852;
          D.27854 = __s2 + 2;
          D.27855 = *D.27854;
          D.27856 = (int) D.27855;
          __result = D.27853 - D.27856;
          D.27857 = __s2_len > 2;
          D.27837 = __result == 0;
          D.27858 = D.27857 & D.27837;
          if (D.27858 != 0) goto <D.27859>; else goto <D.27860>;
          <D.27859>:
          D.27861 = &MEM[(void *)"Double" + 3B];
          D.27862 = *D.27861;
          D.27863 = (int) D.27862;
          D.27864 = __s2 + 3;
          D.27865 = *D.27864;
          D.27866 = (int) D.27865;
          __result = D.27863 - D.27866;
          <D.27860>:
          <D.27850>:
          <D.27840>:
        }
        D.20418 = __result;
      }
      iftmp.206 = -D.20418;
      goto <D.27867>;
      <D.27830>:
      iftmp.206 = __builtin_strcmp (name, "Double");
      <D.27867>:
      D.20419 = iftmp.206;
    }
    if (D.20419 == 0) goto <D.27868>; else goto <D.27869>;
    <D.27868>:
    t = 13;
    class->blittable = 1;
    <D.27869>:
    goto <D.20399>;
    <D.20420>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.27873 = "Int32";
        D.27874 = MEM[(const unsigned char *)D.27873];
        D.27875 = (int) D.27874;
        D.27876 = *__s2;
        D.27877 = (int) D.27876;
        __result = D.27875 - D.27877;
        {
          D.27878 = __s2_len != 0;
          D.27879 = __result == 0;
          D.27880 = D.27878 & D.27879;
          if (D.27880 != 0) goto <D.27881>; else goto <D.27882>;
          <D.27881>:
          D.27883 = &MEM[(void *)"Int32" + 1B];
          D.27884 = *D.27883;
          D.27885 = (int) D.27884;
          D.27886 = __s2 + 1;
          D.27887 = *D.27886;
          D.27888 = (int) D.27887;
          __result = D.27885 - D.27888;
          D.27889 = __s2_len > 1;
          D.27879 = __result == 0;
          D.27890 = D.27889 & D.27879;
          if (D.27890 != 0) goto <D.27891>; else goto <D.27892>;
          <D.27891>:
          D.27893 = &MEM[(void *)"Int32" + 2B];
          D.27894 = *D.27893;
          D.27895 = (int) D.27894;
          D.27896 = __s2 + 2;
          D.27897 = *D.27896;
          D.27898 = (int) D.27897;
          __result = D.27895 - D.27898;
          D.27899 = __s2_len > 2;
          D.27879 = __result == 0;
          D.27900 = D.27899 & D.27879;
          if (D.27900 != 0) goto <D.27901>; else goto <D.27902>;
          <D.27901>:
          D.27903 = &MEM[(void *)"Int32" + 3B];
          D.27904 = *D.27903;
          D.27905 = (int) D.27904;
          D.27906 = __s2 + 3;
          D.27907 = *D.27906;
          D.27908 = (int) D.27907;
          __result = D.27905 - D.27908;
          <D.27902>:
          <D.27892>:
          <D.27882>:
        }
        D.20428 = __result;
      }
      iftmp.207 = -D.20428;
      goto <D.27909>;
      <D.27872>:
      iftmp.207 = __builtin_strcmp (name, "Int32");
      <D.27909>:
      D.20429 = iftmp.207;
    }
    if (D.20429 == 0) goto <D.27910>; else goto <D.27911>;
    <D.27910>:
    t = 8;
    class->blittable = 1;
    goto <D.27912>;
    <D.27911>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.27916 = "Int16";
        D.27917 = MEM[(const unsigned char *)D.27916];
        D.27918 = (int) D.27917;
        D.27919 = *__s2;
        D.27920 = (int) D.27919;
        __result = D.27918 - D.27920;
        {
          D.27921 = __s2_len != 0;
          D.27922 = __result == 0;
          D.27923 = D.27921 & D.27922;
          if (D.27923 != 0) goto <D.27924>; else goto <D.27925>;
          <D.27924>:
          D.27926 = &MEM[(void *)"Int16" + 1B];
          D.27927 = *D.27926;
          D.27928 = (int) D.27927;
          D.27929 = __s2 + 1;
          D.27930 = *D.27929;
          D.27931 = (int) D.27930;
          __result = D.27928 - D.27931;
          D.27932 = __s2_len > 1;
          D.27922 = __result == 0;
          D.27933 = D.27932 & D.27922;
          if (D.27933 != 0) goto <D.27934>; else goto <D.27935>;
          <D.27934>:
          D.27936 = &MEM[(void *)"Int16" + 2B];
          D.27937 = *D.27936;
          D.27938 = (int) D.27937;
          D.27939 = __s2 + 2;
          D.27940 = *D.27939;
          D.27941 = (int) D.27940;
          __result = D.27938 - D.27941;
          D.27942 = __s2_len > 2;
          D.27922 = __result == 0;
          D.27943 = D.27942 & D.27922;
          if (D.27943 != 0) goto <D.27944>; else goto <D.27945>;
          <D.27944>:
          D.27946 = &MEM[(void *)"Int16" + 3B];
          D.27947 = *D.27946;
          D.27948 = (int) D.27947;
          D.27949 = __s2 + 3;
          D.27950 = *D.27949;
          D.27951 = (int) D.27950;
          __result = D.27948 - D.27951;
          <D.27945>:
          <D.27935>:
          <D.27925>:
        }
        D.20437 = __result;
      }
      iftmp.208 = -D.20437;
      goto <D.27952>;
      <D.27915>:
      iftmp.208 = __builtin_strcmp (name, "Int16");
      <D.27952>:
      D.20438 = iftmp.208;
    }
    if (D.20438 == 0) goto <D.27953>; else goto <D.27954>;
    <D.27953>:
    t = 6;
    class->blittable = 1;
    goto <D.27955>;
    <D.27954>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.27959 = "Int64";
        D.27960 = MEM[(const unsigned char *)D.27959];
        D.27961 = (int) D.27960;
        D.27962 = *__s2;
        D.27963 = (int) D.27962;
        __result = D.27961 - D.27963;
        {
          D.27964 = __s2_len != 0;
          D.27965 = __result == 0;
          D.27966 = D.27964 & D.27965;
          if (D.27966 != 0) goto <D.27967>; else goto <D.27968>;
          <D.27967>:
          D.27969 = &MEM[(void *)"Int64" + 1B];
          D.27970 = *D.27969;
          D.27971 = (int) D.27970;
          D.27972 = __s2 + 1;
          D.27973 = *D.27972;
          D.27974 = (int) D.27973;
          __result = D.27971 - D.27974;
          D.27975 = __s2_len > 1;
          D.27965 = __result == 0;
          D.27976 = D.27975 & D.27965;
          if (D.27976 != 0) goto <D.27977>; else goto <D.27978>;
          <D.27977>:
          D.27979 = &MEM[(void *)"Int64" + 2B];
          D.27980 = *D.27979;
          D.27981 = (int) D.27980;
          D.27982 = __s2 + 2;
          D.27983 = *D.27982;
          D.27984 = (int) D.27983;
          __result = D.27981 - D.27984;
          D.27985 = __s2_len > 2;
          D.27965 = __result == 0;
          D.27986 = D.27985 & D.27965;
          if (D.27986 != 0) goto <D.27987>; else goto <D.27988>;
          <D.27987>:
          D.27989 = &MEM[(void *)"Int64" + 3B];
          D.27990 = *D.27989;
          D.27991 = (int) D.27990;
          D.27992 = __s2 + 3;
          D.27993 = *D.27992;
          D.27994 = (int) D.27993;
          __result = D.27991 - D.27994;
          <D.27988>:
          <D.27978>:
          <D.27968>:
        }
        D.20446 = __result;
      }
      iftmp.209 = -D.20446;
      goto <D.27995>;
      <D.27958>:
      iftmp.209 = __builtin_strcmp (name, "Int64");
      <D.27995>:
      D.20447 = iftmp.209;
    }
    if (D.20447 == 0) goto <D.27996>; else goto <D.27997>;
    <D.27996>:
    t = 10;
    class->blittable = 1;
    goto <D.27998>;
    <D.27997>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28002 = "IntPtr";
        D.28003 = MEM[(const unsigned char *)D.28002];
        D.28004 = (int) D.28003;
        D.28005 = *__s2;
        D.28006 = (int) D.28005;
        __result = D.28004 - D.28006;
        {
          D.28007 = __s2_len != 0;
          D.28008 = __result == 0;
          D.28009 = D.28007 & D.28008;
          if (D.28009 != 0) goto <D.28010>; else goto <D.28011>;
          <D.28010>:
          D.28012 = &MEM[(void *)"IntPtr" + 1B];
          D.28013 = *D.28012;
          D.28014 = (int) D.28013;
          D.28015 = __s2 + 1;
          D.28016 = *D.28015;
          D.28017 = (int) D.28016;
          __result = D.28014 - D.28017;
          D.28018 = __s2_len > 1;
          D.28008 = __result == 0;
          D.28019 = D.28018 & D.28008;
          if (D.28019 != 0) goto <D.28020>; else goto <D.28021>;
          <D.28020>:
          D.28022 = &MEM[(void *)"IntPtr" + 2B];
          D.28023 = *D.28022;
          D.28024 = (int) D.28023;
          D.28025 = __s2 + 2;
          D.28026 = *D.28025;
          D.28027 = (int) D.28026;
          __result = D.28024 - D.28027;
          D.28028 = __s2_len > 2;
          D.28008 = __result == 0;
          D.28029 = D.28028 & D.28008;
          if (D.28029 != 0) goto <D.28030>; else goto <D.28031>;
          <D.28030>:
          D.28032 = &MEM[(void *)"IntPtr" + 3B];
          D.28033 = *D.28032;
          D.28034 = (int) D.28033;
          D.28035 = __s2 + 3;
          D.28036 = *D.28035;
          D.28037 = (int) D.28036;
          __result = D.28034 - D.28037;
          <D.28031>:
          <D.28021>:
          <D.28011>:
        }
        D.20455 = __result;
      }
      iftmp.210 = -D.20455;
      goto <D.28038>;
      <D.28001>:
      iftmp.210 = __builtin_strcmp (name, "IntPtr");
      <D.28038>:
      D.20456 = iftmp.210;
    }
    if (D.20456 == 0) goto <D.28039>; else goto <D.28040>;
    <D.28039>:
    t = 24;
    class->blittable = 1;
    <D.28040>:
    <D.27998>:
    <D.27955>:
    <D.27912>:
    goto <D.20399>;
    <D.20457>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28044 = "Single";
        D.28045 = MEM[(const unsigned char *)D.28044];
        D.28046 = (int) D.28045;
        D.28047 = *__s2;
        D.28048 = (int) D.28047;
        __result = D.28046 - D.28048;
        {
          D.28049 = __s2_len != 0;
          D.28050 = __result == 0;
          D.28051 = D.28049 & D.28050;
          if (D.28051 != 0) goto <D.28052>; else goto <D.28053>;
          <D.28052>:
          D.28054 = &MEM[(void *)"Single" + 1B];
          D.28055 = *D.28054;
          D.28056 = (int) D.28055;
          D.28057 = __s2 + 1;
          D.28058 = *D.28057;
          D.28059 = (int) D.28058;
          __result = D.28056 - D.28059;
          D.28060 = __s2_len > 1;
          D.28050 = __result == 0;
          D.28061 = D.28060 & D.28050;
          if (D.28061 != 0) goto <D.28062>; else goto <D.28063>;
          <D.28062>:
          D.28064 = &MEM[(void *)"Single" + 2B];
          D.28065 = *D.28064;
          D.28066 = (int) D.28065;
          D.28067 = __s2 + 2;
          D.28068 = *D.28067;
          D.28069 = (int) D.28068;
          __result = D.28066 - D.28069;
          D.28070 = __s2_len > 2;
          D.28050 = __result == 0;
          D.28071 = D.28070 & D.28050;
          if (D.28071 != 0) goto <D.28072>; else goto <D.28073>;
          <D.28072>:
          D.28074 = &MEM[(void *)"Single" + 3B];
          D.28075 = *D.28074;
          D.28076 = (int) D.28075;
          D.28077 = __s2 + 3;
          D.28078 = *D.28077;
          D.28079 = (int) D.28078;
          __result = D.28076 - D.28079;
          <D.28073>:
          <D.28063>:
          <D.28053>:
        }
        D.20465 = __result;
      }
      iftmp.211 = -D.20465;
      goto <D.28080>;
      <D.28043>:
      iftmp.211 = __builtin_strcmp (name, "Single");
      <D.28080>:
      D.20466 = iftmp.211;
    }
    if (D.20466 == 0) goto <D.28081>; else goto <D.28082>;
    <D.28081>:
    t = 12;
    class->blittable = 1;
    goto <D.28083>;
    <D.28082>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28087 = "SByte";
        D.28088 = MEM[(const unsigned char *)D.28087];
        D.28089 = (int) D.28088;
        D.28090 = *__s2;
        D.28091 = (int) D.28090;
        __result = D.28089 - D.28091;
        {
          D.28092 = __s2_len != 0;
          D.28093 = __result == 0;
          D.28094 = D.28092 & D.28093;
          if (D.28094 != 0) goto <D.28095>; else goto <D.28096>;
          <D.28095>:
          D.28097 = &MEM[(void *)"SByte" + 1B];
          D.28098 = *D.28097;
          D.28099 = (int) D.28098;
          D.28100 = __s2 + 1;
          D.28101 = *D.28100;
          D.28102 = (int) D.28101;
          __result = D.28099 - D.28102;
          D.28103 = __s2_len > 1;
          D.28093 = __result == 0;
          D.28104 = D.28103 & D.28093;
          if (D.28104 != 0) goto <D.28105>; else goto <D.28106>;
          <D.28105>:
          D.28107 = &MEM[(void *)"SByte" + 2B];
          D.28108 = *D.28107;
          D.28109 = (int) D.28108;
          D.28110 = __s2 + 2;
          D.28111 = *D.28110;
          D.28112 = (int) D.28111;
          __result = D.28109 - D.28112;
          D.28113 = __s2_len > 2;
          D.28093 = __result == 0;
          D.28114 = D.28113 & D.28093;
          if (D.28114 != 0) goto <D.28115>; else goto <D.28116>;
          <D.28115>:
          D.28117 = &MEM[(void *)"SByte" + 3B];
          D.28118 = *D.28117;
          D.28119 = (int) D.28118;
          D.28120 = __s2 + 3;
          D.28121 = *D.28120;
          D.28122 = (int) D.28121;
          __result = D.28119 - D.28122;
          <D.28116>:
          <D.28106>:
          <D.28096>:
        }
        D.20474 = __result;
      }
      iftmp.212 = -D.20474;
      goto <D.28123>;
      <D.28086>:
      iftmp.212 = __builtin_strcmp (name, "SByte");
      <D.28123>:
      D.20475 = iftmp.212;
    }
    if (D.20475 == 0) goto <D.28124>; else goto <D.28125>;
    <D.28124>:
    t = 4;
    class->blittable = 1;
    <D.28125>:
    <D.28083>:
    goto <D.20399>;
    <D.20476>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28129 = "UInt32";
        D.28130 = MEM[(const unsigned char *)D.28129];
        D.28131 = (int) D.28130;
        D.28132 = *__s2;
        D.28133 = (int) D.28132;
        __result = D.28131 - D.28133;
        {
          D.28134 = __s2_len != 0;
          D.28135 = __result == 0;
          D.28136 = D.28134 & D.28135;
          if (D.28136 != 0) goto <D.28137>; else goto <D.28138>;
          <D.28137>:
          D.28139 = &MEM[(void *)"UInt32" + 1B];
          D.28140 = *D.28139;
          D.28141 = (int) D.28140;
          D.28142 = __s2 + 1;
          D.28143 = *D.28142;
          D.28144 = (int) D.28143;
          __result = D.28141 - D.28144;
          D.28145 = __s2_len > 1;
          D.28135 = __result == 0;
          D.28146 = D.28145 & D.28135;
          if (D.28146 != 0) goto <D.28147>; else goto <D.28148>;
          <D.28147>:
          D.28149 = &MEM[(void *)"UInt32" + 2B];
          D.28150 = *D.28149;
          D.28151 = (int) D.28150;
          D.28152 = __s2 + 2;
          D.28153 = *D.28152;
          D.28154 = (int) D.28153;
          __result = D.28151 - D.28154;
          D.28155 = __s2_len > 2;
          D.28135 = __result == 0;
          D.28156 = D.28155 & D.28135;
          if (D.28156 != 0) goto <D.28157>; else goto <D.28158>;
          <D.28157>:
          D.28159 = &MEM[(void *)"UInt32" + 3B];
          D.28160 = *D.28159;
          D.28161 = (int) D.28160;
          D.28162 = __s2 + 3;
          D.28163 = *D.28162;
          D.28164 = (int) D.28163;
          __result = D.28161 - D.28164;
          <D.28158>:
          <D.28148>:
          <D.28138>:
        }
        D.20484 = __result;
      }
      iftmp.213 = -D.20484;
      goto <D.28165>;
      <D.28128>:
      iftmp.213 = __builtin_strcmp (name, "UInt32");
      <D.28165>:
      D.20485 = iftmp.213;
    }
    if (D.20485 == 0) goto <D.28166>; else goto <D.28167>;
    <D.28166>:
    t = 9;
    class->blittable = 1;
    goto <D.28168>;
    <D.28167>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28172 = "UInt16";
        D.28173 = MEM[(const unsigned char *)D.28172];
        D.28174 = (int) D.28173;
        D.28175 = *__s2;
        D.28176 = (int) D.28175;
        __result = D.28174 - D.28176;
        {
          D.28177 = __s2_len != 0;
          D.28178 = __result == 0;
          D.28179 = D.28177 & D.28178;
          if (D.28179 != 0) goto <D.28180>; else goto <D.28181>;
          <D.28180>:
          D.28182 = &MEM[(void *)"UInt16" + 1B];
          D.28183 = *D.28182;
          D.28184 = (int) D.28183;
          D.28185 = __s2 + 1;
          D.28186 = *D.28185;
          D.28187 = (int) D.28186;
          __result = D.28184 - D.28187;
          D.28188 = __s2_len > 1;
          D.28178 = __result == 0;
          D.28189 = D.28188 & D.28178;
          if (D.28189 != 0) goto <D.28190>; else goto <D.28191>;
          <D.28190>:
          D.28192 = &MEM[(void *)"UInt16" + 2B];
          D.28193 = *D.28192;
          D.28194 = (int) D.28193;
          D.28195 = __s2 + 2;
          D.28196 = *D.28195;
          D.28197 = (int) D.28196;
          __result = D.28194 - D.28197;
          D.28198 = __s2_len > 2;
          D.28178 = __result == 0;
          D.28199 = D.28198 & D.28178;
          if (D.28199 != 0) goto <D.28200>; else goto <D.28201>;
          <D.28200>:
          D.28202 = &MEM[(void *)"UInt16" + 3B];
          D.28203 = *D.28202;
          D.28204 = (int) D.28203;
          D.28205 = __s2 + 3;
          D.28206 = *D.28205;
          D.28207 = (int) D.28206;
          __result = D.28204 - D.28207;
          <D.28201>:
          <D.28191>:
          <D.28181>:
        }
        D.20493 = __result;
      }
      iftmp.214 = -D.20493;
      goto <D.28208>;
      <D.28171>:
      iftmp.214 = __builtin_strcmp (name, "UInt16");
      <D.28208>:
      D.20494 = iftmp.214;
    }
    if (D.20494 == 0) goto <D.28209>; else goto <D.28210>;
    <D.28209>:
    t = 7;
    class->blittable = 1;
    goto <D.28211>;
    <D.28210>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28215 = "UInt64";
        D.28216 = MEM[(const unsigned char *)D.28215];
        D.28217 = (int) D.28216;
        D.28218 = *__s2;
        D.28219 = (int) D.28218;
        __result = D.28217 - D.28219;
        {
          D.28220 = __s2_len != 0;
          D.28221 = __result == 0;
          D.28222 = D.28220 & D.28221;
          if (D.28222 != 0) goto <D.28223>; else goto <D.28224>;
          <D.28223>:
          D.28225 = &MEM[(void *)"UInt64" + 1B];
          D.28226 = *D.28225;
          D.28227 = (int) D.28226;
          D.28228 = __s2 + 1;
          D.28229 = *D.28228;
          D.28230 = (int) D.28229;
          __result = D.28227 - D.28230;
          D.28231 = __s2_len > 1;
          D.28221 = __result == 0;
          D.28232 = D.28231 & D.28221;
          if (D.28232 != 0) goto <D.28233>; else goto <D.28234>;
          <D.28233>:
          D.28235 = &MEM[(void *)"UInt64" + 2B];
          D.28236 = *D.28235;
          D.28237 = (int) D.28236;
          D.28238 = __s2 + 2;
          D.28239 = *D.28238;
          D.28240 = (int) D.28239;
          __result = D.28237 - D.28240;
          D.28241 = __s2_len > 2;
          D.28221 = __result == 0;
          D.28242 = D.28241 & D.28221;
          if (D.28242 != 0) goto <D.28243>; else goto <D.28244>;
          <D.28243>:
          D.28245 = &MEM[(void *)"UInt64" + 3B];
          D.28246 = *D.28245;
          D.28247 = (int) D.28246;
          D.28248 = __s2 + 3;
          D.28249 = *D.28248;
          D.28250 = (int) D.28249;
          __result = D.28247 - D.28250;
          <D.28244>:
          <D.28234>:
          <D.28224>:
        }
        D.20502 = __result;
      }
      iftmp.215 = -D.20502;
      goto <D.28251>;
      <D.28214>:
      iftmp.215 = __builtin_strcmp (name, "UInt64");
      <D.28251>:
      D.20503 = iftmp.215;
    }
    if (D.20503 == 0) goto <D.28252>; else goto <D.28253>;
    <D.28252>:
    t = 11;
    class->blittable = 1;
    goto <D.28254>;
    <D.28253>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28258 = "UIntPtr";
        D.28259 = MEM[(const unsigned char *)D.28258];
        D.28260 = (int) D.28259;
        D.28261 = *__s2;
        D.28262 = (int) D.28261;
        __result = D.28260 - D.28262;
        {
          D.28263 = __s2_len != 0;
          D.28264 = __result == 0;
          D.28265 = D.28263 & D.28264;
          if (D.28265 != 0) goto <D.28266>; else goto <D.28267>;
          <D.28266>:
          D.28268 = &MEM[(void *)"UIntPtr" + 1B];
          D.28269 = *D.28268;
          D.28270 = (int) D.28269;
          D.28271 = __s2 + 1;
          D.28272 = *D.28271;
          D.28273 = (int) D.28272;
          __result = D.28270 - D.28273;
          D.28274 = __s2_len > 1;
          D.28264 = __result == 0;
          D.28275 = D.28274 & D.28264;
          if (D.28275 != 0) goto <D.28276>; else goto <D.28277>;
          <D.28276>:
          D.28278 = &MEM[(void *)"UIntPtr" + 2B];
          D.28279 = *D.28278;
          D.28280 = (int) D.28279;
          D.28281 = __s2 + 2;
          D.28282 = *D.28281;
          D.28283 = (int) D.28282;
          __result = D.28280 - D.28283;
          D.28284 = __s2_len > 2;
          D.28264 = __result == 0;
          D.28285 = D.28284 & D.28264;
          if (D.28285 != 0) goto <D.28286>; else goto <D.28287>;
          <D.28286>:
          D.28288 = &MEM[(void *)"UIntPtr" + 3B];
          D.28289 = *D.28288;
          D.28290 = (int) D.28289;
          D.28291 = __s2 + 3;
          D.28292 = *D.28291;
          D.28293 = (int) D.28292;
          __result = D.28290 - D.28293;
          <D.28287>:
          <D.28277>:
          <D.28267>:
        }
        D.20511 = __result;
      }
      iftmp.216 = -D.20511;
      goto <D.28294>;
      <D.28257>:
      iftmp.216 = __builtin_strcmp (name, "UIntPtr");
      <D.28294>:
      D.20512 = iftmp.216;
    }
    if (D.20512 == 0) goto <D.28295>; else goto <D.28296>;
    <D.28295>:
    t = 25;
    class->blittable = 1;
    <D.28296>:
    <D.28254>:
    <D.28211>:
    <D.28168>:
    goto <D.20399>;
    <D.20513>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.27624 = "TypedReference";
        D.27625 = MEM[(const unsigned char *)D.27624];
        D.27626 = (int) D.27625;
        D.28300 = *__s2;
        D.28301 = (int) D.28300;
        __result = D.27626 - D.28301;
        {
          D.28302 = __s2_len != 0;
          D.28303 = __result == 0;
          D.28304 = D.28302 & D.28303;
          if (D.28304 != 0) goto <D.28305>; else goto <D.28306>;
          <D.28305>:
          D.27634 = &MEM[(void *)"TypedReference" + 1B];
          D.27635 = *D.27634;
          D.27636 = (int) D.27635;
          D.28307 = __s2 + 1;
          D.28308 = *D.28307;
          D.28309 = (int) D.28308;
          __result = D.27636 - D.28309;
          D.28310 = __s2_len > 1;
          D.28303 = __result == 0;
          D.28311 = D.28310 & D.28303;
          if (D.28311 != 0) goto <D.28312>; else goto <D.28313>;
          <D.28312>:
          D.27644 = &MEM[(void *)"TypedReference" + 2B];
          D.27645 = *D.27644;
          D.27646 = (int) D.27645;
          D.28314 = __s2 + 2;
          D.28315 = *D.28314;
          D.28316 = (int) D.28315;
          __result = D.27646 - D.28316;
          D.28317 = __s2_len > 2;
          D.28303 = __result == 0;
          D.28318 = D.28317 & D.28303;
          if (D.28318 != 0) goto <D.28319>; else goto <D.28320>;
          <D.28319>:
          D.27654 = &MEM[(void *)"TypedReference" + 3B];
          D.27655 = *D.27654;
          D.27656 = (int) D.27655;
          D.28321 = __s2 + 3;
          D.28322 = *D.28321;
          D.28323 = (int) D.28322;
          __result = D.27656 - D.28323;
          <D.28320>:
          <D.28313>:
          <D.28306>:
        }
        D.20521 = __result;
      }
      iftmp.217 = -D.20521;
      goto <D.28324>;
      <D.28299>:
      iftmp.217 = __builtin_strcmp (name, "TypedReference");
      <D.28324>:
      D.20522 = iftmp.217;
    }
    if (D.20522 == 0) goto <D.28325>; else goto <D.28326>;
    <D.28325>:
    t = 22;
    class->blittable = 1;
    <D.28326>:
    goto <D.20399>;
    <D.20523>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = name;
        D.28330 = "Void";
        D.28331 = MEM[(const unsigned char *)D.28330];
        D.28332 = (int) D.28331;
        D.28333 = *__s2;
        D.28334 = (int) D.28333;
        __result = D.28332 - D.28334;
        {
          D.28335 = __s2_len != 0;
          D.28336 = __result == 0;
          D.28337 = D.28335 & D.28336;
          if (D.28337 != 0) goto <D.28338>; else goto <D.28339>;
          <D.28338>:
          D.28340 = &MEM[(void *)"Void" + 1B];
          D.28341 = *D.28340;
          D.28342 = (int) D.28341;
          D.28343 = __s2 + 1;
          D.28344 = *D.28343;
          D.28345 = (int) D.28344;
          __result = D.28342 - D.28345;
          D.28346 = __s2_len > 1;
          D.28336 = __result == 0;
          D.28347 = D.28346 & D.28336;
          if (D.28347 != 0) goto <D.28348>; else goto <D.28349>;
          <D.28348>:
          D.28350 = &MEM[(void *)"Void" + 2B];
          D.28351 = *D.28350;
          D.28352 = (int) D.28351;
          D.28353 = __s2 + 2;
          D.28354 = *D.28353;
          D.28355 = (int) D.28354;
          __result = D.28352 - D.28355;
          D.28356 = __s2_len > 2;
          D.28336 = __result == 0;
          D.28357 = D.28356 & D.28336;
          if (D.28357 != 0) goto <D.28358>; else goto <D.28359>;
          <D.28358>:
          D.28360 = &MEM[(void *)"Void" + 3B];
          D.28361 = *D.28360;
          D.28362 = (int) D.28361;
          D.28363 = __s2 + 3;
          D.28364 = *D.28363;
          D.28365 = (int) D.28364;
          __result = D.28362 - D.28365;
          <D.28359>:
          <D.28349>:
          <D.28339>:
        }
        D.20531 = __result;
      }
      iftmp.218 = -D.20531;
      goto <D.28366>;
      <D.28329>:
      iftmp.218 = __builtin_strcmp (name, "Void");
      <D.28366>:
      D.20532 = iftmp.218;
    }
    if (D.20532 == 0) goto <D.28367>; else goto <D.28368>;
    <D.28367>:
    t = 1;
    <D.28368>:
    goto <D.20399>;
    <D.20533>:
    goto <D.20399>;
    <D.20399>:
    <D.27698>:
    <D.27668>:
    D.28369 = (unsigned char) t;
    class->byval_arg.type = D.28369;
    D.27576 = class->byval_arg.type;
    class->this_arg.type = D.27576;
  }
  <D.27666>:
  D.28372 = class->flags;
  D.28373 = D.28372 & 32;
  if (D.28373 != 0) goto <D.28370>; else goto <D.28374>;
  <D.28374>:
  D.27576 = class->byval_arg.type;
  if (D.27576 == 19) goto <D.28370>; else goto <D.28375>;
  <D.28375>:
  D.27576 = class->byval_arg.type;
  if (D.27576 == 30) goto <D.28370>; else goto <D.28371>;
  <D.28370>:
  D.28376 = mono_get_unique_iid (class);
  D.28377 = (short unsigned int) D.28376;
  class->interface_id = D.28377;
  <D.28371>:
}


mono_class_setup_parent (struct MonoClass * class, struct MonoClass * parent)
{
  struct MonoImage * D.28379;
  int iftmp.219;
  int D.20551;
  int iftmp.220;
  int D.20550;
  const char[7] * D.28386;
  unsigned char D.28387;
  int D.28388;
  unsigned char D.28389;
  int D.28390;
  _Bool D.28391;
  _Bool D.28392;
  _Bool D.28393;
  const unsigned char * D.28396;
  unsigned char D.28397;
  int D.28398;
  const unsigned char * D.28399;
  unsigned char D.28400;
  int D.28401;
  _Bool D.28402;
  _Bool D.28403;
  const unsigned char * D.28406;
  unsigned char D.28407;
  int D.28408;
  const unsigned char * D.28409;
  unsigned char D.28410;
  int D.28411;
  _Bool D.28412;
  _Bool D.28413;
  const unsigned char * D.28416;
  unsigned char D.28417;
  int D.28418;
  const unsigned char * D.28419;
  unsigned char D.28420;
  int D.28421;
  const char * D.28423;
  int D.20560;
  int iftmp.221;
  int D.20559;
  const char[7] * D.28431;
  unsigned char D.28432;
  int D.28433;
  unsigned char D.28434;
  int D.28435;
  _Bool D.28436;
  _Bool D.28437;
  _Bool D.28438;
  const unsigned char * D.28441;
  unsigned char D.28442;
  int D.28443;
  const unsigned char * D.28444;
  unsigned char D.28445;
  int D.28446;
  _Bool D.28447;
  _Bool D.28448;
  const unsigned char * D.28451;
  unsigned char D.28452;
  int D.28453;
  const unsigned char * D.28454;
  unsigned char D.28455;
  int D.28456;
  _Bool D.28457;
  _Bool D.28458;
  const unsigned char * D.28461;
  unsigned char D.28462;
  int D.28463;
  const unsigned char * D.28464;
  unsigned char D.28465;
  int D.28466;
  const char * D.28468;
  int D.20569;
  int iftmp.222;
  int D.20568;
  const char[9] * D.28474;
  unsigned char D.28475;
  int D.28476;
  unsigned char D.28477;
  int D.28478;
  _Bool D.28479;
  _Bool D.28480;
  _Bool D.28481;
  const unsigned char * D.28484;
  unsigned char D.28485;
  int D.28486;
  const unsigned char * D.28487;
  unsigned char D.28488;
  int D.28489;
  _Bool D.28490;
  _Bool D.28491;
  const unsigned char * D.28494;
  unsigned char D.28495;
  int D.28496;
  const unsigned char * D.28497;
  unsigned char D.28498;
  int D.28499;
  _Bool D.28500;
  _Bool D.28501;
  const unsigned char * D.28504;
  unsigned char D.28505;
  int D.28506;
  const unsigned char * D.28507;
  unsigned char D.28508;
  int D.28509;
  unsigned int D.28515;
  unsigned int D.28516;
  unsigned char D.28518;
  unsigned int D.28521;
  struct MonoClass * D.28524;
  struct MonoGenericClass * D.28529;
  const char * D.28532;
  <unnamed-unsigned:1> D.28535;
  <unnamed-unsigned:1> D.28536;
  <unnamed-unsigned:1> D.28537;
  unsigned char D.28541;
  unsigned char D.28542;
  char D.28545;
  int D.20578;
  int iftmp.223;
  int D.20577;
  const char[19] * D.28551;
  unsigned char D.28552;
  int D.28553;
  unsigned char D.28554;
  int D.28555;
  _Bool D.28556;
  _Bool D.28557;
  _Bool D.28558;
  const unsigned char * D.28561;
  unsigned char D.28562;
  int D.28563;
  const unsigned char * D.28564;
  unsigned char D.28565;
  int D.28566;
  _Bool D.28567;
  _Bool D.28568;
  const unsigned char * D.28571;
  unsigned char D.28572;
  int D.28573;
  const unsigned char * D.28574;
  unsigned char D.28575;
  int D.28576;
  _Bool D.28577;
  _Bool D.28578;
  const unsigned char * D.28581;
  unsigned char D.28582;
  int D.28583;
  const unsigned char * D.28584;
  unsigned char D.28585;
  int D.28586;
  int D.20587;
  int iftmp.224;
  int D.20586;
  const char[19] * D.28595;
  unsigned char D.28596;
  int D.28597;
  unsigned char D.28598;
  int D.28599;
  _Bool D.28600;
  _Bool D.28601;
  _Bool D.28602;
  const unsigned char * D.28605;
  unsigned char D.28606;
  int D.28607;
  const unsigned char * D.28608;
  unsigned char D.28609;
  int D.28610;
  _Bool D.28611;
  _Bool D.28612;
  const unsigned char * D.28615;
  unsigned char D.28616;
  int D.28617;
  const unsigned char * D.28618;
  unsigned char D.28619;
  int D.28620;
  _Bool D.28621;
  _Bool D.28622;
  const unsigned char * D.28625;
  unsigned char D.28626;
  int D.28627;
  const unsigned char * D.28628;
  unsigned char D.28629;
  int D.28630;
  int D.20596;
  int iftmp.225;
  int D.20595;
  const char[9] * D.28639;
  unsigned char D.28640;
  int D.28641;
  unsigned char D.28642;
  int D.28643;
  _Bool D.28644;
  _Bool D.28645;
  _Bool D.28646;
  const unsigned char * D.28649;
  unsigned char D.28650;
  int D.28651;
  const unsigned char * D.28652;
  unsigned char D.28653;
  int D.28654;
  _Bool D.28655;
  _Bool D.28656;
  const unsigned char * D.28659;
  unsigned char D.28660;
  int D.28661;
  const unsigned char * D.28662;
  unsigned char D.28663;
  int D.28664;
  _Bool D.28665;
  _Bool D.28666;
  const unsigned char * D.28669;
  unsigned char D.28670;
  int D.28671;
  const unsigned char * D.28672;
  unsigned char D.28673;
  int D.28674;
  struct MonoClass * D.28680;
  unsigned char D.28681;
  unsigned char D.28682;
  struct MonoImage * D.28684;
  int D.28685;
  int D.20605;
  int iftmp.226;
  int D.20604;
  const char[10] * D.28690;
  unsigned char D.28691;
  int D.28692;
  unsigned char D.28693;
  int D.28694;
  _Bool D.28695;
  _Bool D.28696;
  _Bool D.28697;
  const unsigned char * D.28700;
  unsigned char D.28701;
  int D.28702;
  const unsigned char * D.28703;
  unsigned char D.28704;
  int D.28705;
  _Bool D.28706;
  _Bool D.28707;
  const unsigned char * D.28710;
  unsigned char D.28711;
  int D.28712;
  const unsigned char * D.28713;
  unsigned char D.28714;
  int D.28715;
  _Bool D.28716;
  _Bool D.28717;
  const unsigned char * D.28720;
  unsigned char D.28721;
  int D.28722;
  const unsigned char * D.28723;
  unsigned char D.28724;
  int D.28725;
  const char * D.28727;
  int D.20614;
  int iftmp.227;
  int D.20613;
  unsigned char D.28732;
  int D.28733;
  _Bool D.28734;
  _Bool D.28735;
  _Bool D.28736;
  const unsigned char * D.28739;
  unsigned char D.28740;
  int D.28741;
  _Bool D.28742;
  _Bool D.28743;
  const unsigned char * D.28746;
  unsigned char D.28747;
  int D.28748;
  _Bool D.28749;
  _Bool D.28750;
  const unsigned char * D.28753;
  unsigned char D.28754;
  int D.28755;
  const char * D.28757;
  int D.28758;
  int D.20623;
  int iftmp.228;
  int D.20622;
  const char[5] * D.28764;
  unsigned char D.28765;
  int D.28766;
  unsigned char D.28767;
  int D.28768;
  _Bool D.28769;
  _Bool D.28770;
  _Bool D.28771;
  const unsigned char * D.28774;
  unsigned char D.28775;
  int D.28776;
  const unsigned char * D.28777;
  unsigned char D.28778;
  int D.28779;
  _Bool D.28780;
  _Bool D.28781;
  const unsigned char * D.28784;
  unsigned char D.28785;
  int D.28786;
  const unsigned char * D.28787;
  unsigned char D.28788;
  int D.28789;
  _Bool D.28790;
  _Bool D.28791;
  const unsigned char * D.28794;
  unsigned char D.28795;
  int D.28796;
  const unsigned char * D.28797;
  unsigned char D.28798;
  int D.28799;
  int D.20632;
  int iftmp.229;
  int D.20631;
  unsigned char D.28806;
  int D.28807;
  _Bool D.28808;
  _Bool D.28809;
  _Bool D.28810;
  const unsigned char * D.28813;
  unsigned char D.28814;
  int D.28815;
  _Bool D.28816;
  _Bool D.28817;
  const unsigned char * D.28820;
  unsigned char D.28821;
  int D.28822;
  _Bool D.28823;
  _Bool D.28824;
  const unsigned char * D.28827;
  unsigned char D.28828;
  int D.28829;
  <unnamed-unsigned:1> D.28833;
  gboolean system_namespace;
  gboolean is_corlib;

  D.28379 = class->image;
  is_corlib = mono_is_corlib_image (D.28379);
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = class->name_space;
      D.28386 = "System";
      D.28387 = MEM[(const unsigned char *)D.28386];
      D.28388 = (int) D.28387;
      D.28389 = *__s2;
      D.28390 = (int) D.28389;
      __result = D.28388 - D.28390;
      {
        D.28391 = __s2_len != 0;
        D.28392 = __result == 0;
        D.28393 = D.28391 & D.28392;
        if (D.28393 != 0) goto <D.28394>; else goto <D.28395>;
        <D.28394>:
        D.28396 = &MEM[(void *)"System" + 1B];
        D.28397 = *D.28396;
        D.28398 = (int) D.28397;
        D.28399 = __s2 + 1;
        D.28400 = *D.28399;
        D.28401 = (int) D.28400;
        __result = D.28398 - D.28401;
        D.28402 = __s2_len > 1;
        D.28392 = __result == 0;
        D.28403 = D.28402 & D.28392;
        if (D.28403 != 0) goto <D.28404>; else goto <D.28405>;
        <D.28404>:
        D.28406 = &MEM[(void *)"System" + 2B];
        D.28407 = *D.28406;
        D.28408 = (int) D.28407;
        D.28409 = __s2 + 2;
        D.28410 = *D.28409;
        D.28411 = (int) D.28410;
        __result = D.28408 - D.28411;
        D.28412 = __s2_len > 2;
        D.28392 = __result == 0;
        D.28413 = D.28412 & D.28392;
        if (D.28413 != 0) goto <D.28414>; else goto <D.28415>;
        <D.28414>:
        D.28416 = &MEM[(void *)"System" + 3B];
        D.28417 = *D.28416;
        D.28418 = (int) D.28417;
        D.28419 = __s2 + 3;
        D.28420 = *D.28419;
        D.28421 = (int) D.28420;
        __result = D.28418 - D.28421;
        <D.28415>:
        <D.28405>:
        <D.28395>:
      }
      D.20550 = __result;
    }
    iftmp.220 = -D.20550;
    goto <D.28422>;
    <D.28385>:
    D.28423 = class->name_space;
    iftmp.220 = __builtin_strcmp (D.28423, "System");
    <D.28422>:
    D.20551 = iftmp.220;
  }
  if (D.20551 == 0) goto <D.28424>; else goto <D.28381>;
  <D.28424>:
  if (is_corlib != 0) goto <D.28425>; else goto <D.28381>;
  <D.28425>:
  iftmp.219 = 1;
  goto <D.28382>;
  <D.28381>:
  iftmp.219 = 0;
  <D.28382>:
  system_namespace = iftmp.219;
  if (system_namespace != 0) goto <D.28426>; else goto <D.28427>;
  <D.28426>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = class->name;
      D.28431 = "Object";
      D.28432 = MEM[(const unsigned char *)D.28431];
      D.28433 = (int) D.28432;
      D.28434 = *__s2;
      D.28435 = (int) D.28434;
      __result = D.28433 - D.28435;
      {
        D.28436 = __s2_len != 0;
        D.28437 = __result == 0;
        D.28438 = D.28436 & D.28437;
        if (D.28438 != 0) goto <D.28439>; else goto <D.28440>;
        <D.28439>:
        D.28441 = &MEM[(void *)"Object" + 1B];
        D.28442 = *D.28441;
        D.28443 = (int) D.28442;
        D.28444 = __s2 + 1;
        D.28445 = *D.28444;
        D.28446 = (int) D.28445;
        __result = D.28443 - D.28446;
        D.28447 = __s2_len > 1;
        D.28437 = __result == 0;
        D.28448 = D.28447 & D.28437;
        if (D.28448 != 0) goto <D.28449>; else goto <D.28450>;
        <D.28449>:
        D.28451 = &MEM[(void *)"Object" + 2B];
        D.28452 = *D.28451;
        D.28453 = (int) D.28452;
        D.28454 = __s2 + 2;
        D.28455 = *D.28454;
        D.28456 = (int) D.28455;
        __result = D.28453 - D.28456;
        D.28457 = __s2_len > 2;
        D.28437 = __result == 0;
        D.28458 = D.28457 & D.28437;
        if (D.28458 != 0) goto <D.28459>; else goto <D.28460>;
        <D.28459>:
        D.28461 = &MEM[(void *)"Object" + 3B];
        D.28462 = *D.28461;
        D.28463 = (int) D.28462;
        D.28464 = __s2 + 3;
        D.28465 = *D.28464;
        D.28466 = (int) D.28465;
        __result = D.28463 - D.28466;
        <D.28460>:
        <D.28450>:
        <D.28440>:
      }
      D.20559 = __result;
    }
    iftmp.221 = -D.20559;
    goto <D.28467>;
    <D.28430>:
    D.28468 = class->name;
    iftmp.221 = __builtin_strcmp (D.28468, "Object");
    <D.28467>:
    D.20560 = iftmp.221;
  }
  if (D.20560 == 0) goto <D.28469>; else goto <D.28470>;
  <D.28469>:
  class->parent = 0B;
  class->instance_size = 16;
  return;
  <D.28470>:
  <D.28427>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = class->name;
      D.28474 = "<Module>";
      D.28475 = MEM[(const unsigned char *)D.28474];
      D.28476 = (int) D.28475;
      D.28477 = *__s2;
      D.28478 = (int) D.28477;
      __result = D.28476 - D.28478;
      {
        D.28479 = __s2_len != 0;
        D.28480 = __result == 0;
        D.28481 = D.28479 & D.28480;
        if (D.28481 != 0) goto <D.28482>; else goto <D.28483>;
        <D.28482>:
        D.28484 = &MEM[(void *)"<Module>" + 1B];
        D.28485 = *D.28484;
        D.28486 = (int) D.28485;
        D.28487 = __s2 + 1;
        D.28488 = *D.28487;
        D.28489 = (int) D.28488;
        __result = D.28486 - D.28489;
        D.28490 = __s2_len > 1;
        D.28480 = __result == 0;
        D.28491 = D.28490 & D.28480;
        if (D.28491 != 0) goto <D.28492>; else goto <D.28493>;
        <D.28492>:
        D.28494 = &MEM[(void *)"<Module>" + 2B];
        D.28495 = *D.28494;
        D.28496 = (int) D.28495;
        D.28497 = __s2 + 2;
        D.28498 = *D.28497;
        D.28499 = (int) D.28498;
        __result = D.28496 - D.28499;
        D.28500 = __s2_len > 2;
        D.28480 = __result == 0;
        D.28501 = D.28500 & D.28480;
        if (D.28501 != 0) goto <D.28502>; else goto <D.28503>;
        <D.28502>:
        D.28504 = &MEM[(void *)"<Module>" + 3B];
        D.28505 = *D.28504;
        D.28506 = (int) D.28505;
        D.28507 = __s2 + 3;
        D.28508 = *D.28507;
        D.28509 = (int) D.28508;
        __result = D.28506 - D.28509;
        <D.28503>:
        <D.28493>:
        <D.28483>:
      }
      D.20568 = __result;
    }
    iftmp.222 = -D.20568;
    goto <D.28510>;
    <D.28473>:
    D.28468 = class->name;
    iftmp.222 = __builtin_strcmp (D.28468, "<Module>");
    <D.28510>:
    D.20569 = iftmp.222;
  }
  if (D.20569 == 0) goto <D.28511>; else goto <D.28512>;
  <D.28511>:
  class->parent = 0B;
  class->instance_size = 0;
  return;
  <D.28512>:
  D.28515 = class->flags;
  D.28516 = D.28515 & 32;
  if (D.28516 == 0) goto <D.28517>; else goto <D.28513>;
  <D.28517>:
  D.28518 = class->byval_arg.type;
  if (D.28518 != 19) goto <D.28519>; else goto <D.28513>;
  <D.28519>:
  D.28518 = class->byval_arg.type;
  if (D.28518 != 30) goto <D.28520>; else goto <D.28513>;
  <D.28520>:
  D.28515 = class->flags;
  D.28521 = D.28515 & 4096;
  if (D.28521 != 0) goto <D.28522>; else goto <D.28523>;
  <D.28522>:
  init_com_from_comimport (class);
  D.28524 = mono_defaults.object_class;
  if (D.28524 == parent) goto <D.28525>; else goto <D.28526>;
  <D.28525>:
  parent = mono_class_get_com_object_class ();
  <D.28526>:
  <D.28523>:
  if (parent == 0B) goto <D.28527>; else goto <D.28528>;
  <D.28527>:
  parent = mono_defaults.object_class;
  mono_class_set_failure (class, 7, 0B);
  <D.28528>:
  class->parent = parent;
  D.28529 = parent->generic_class;
  if (D.28529 != 0B) goto <D.28530>; else goto <D.28531>;
  <D.28530>:
  D.28532 = parent->name;
  if (D.28532 == 0B) goto <D.28533>; else goto <D.28534>;
  <D.28533>:
  return;
  <D.28534>:
  <D.28531>:
  D.28535 = parent->marshalbyref;
  class->marshalbyref = D.28535;
  D.28536 = parent->contextbound;
  class->contextbound = D.28536;
  D.28537 = parent->delegate;
  class->delegate = D.28537;
  D.28515 = class->flags;
  D.28521 = D.28515 & 4096;
  if (D.28521 != 0) goto <D.28538>; else goto <D.28540>;
  <D.28540>:
  D.28541 = BIT_FIELD_REF <*parent, 8, 280>;
  D.28542 = D.28541 & 64;
  if (D.28542 != 0) goto <D.28538>; else goto <D.28539>;
  <D.28538>:
  class->is_com_object = 1;
  <D.28539>:
  if (system_namespace != 0) goto <D.28543>; else goto <D.28544>;
  <D.28543>:
  D.28468 = class->name;
  D.28545 = *D.28468;
  if (D.28545 == 77) goto <D.28546>; else goto <D.28547>;
  <D.28546>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = class->name;
      D.28551 = "MarshalByRefObject";
      D.28552 = MEM[(const unsigned char *)D.28551];
      D.28553 = (int) D.28552;
      D.28554 = *__s2;
      D.28555 = (int) D.28554;
      __result = D.28553 - D.28555;
      {
        D.28556 = __s2_len != 0;
        D.28557 = __result == 0;
        D.28558 = D.28556 & D.28557;
        if (D.28558 != 0) goto <D.28559>; else goto <D.28560>;
        <D.28559>:
        D.28561 = &MEM[(void *)"MarshalByRefObject" + 1B];
        D.28562 = *D.28561;
        D.28563 = (int) D.28562;
        D.28564 = __s2 + 1;
        D.28565 = *D.28564;
        D.28566 = (int) D.28565;
        __result = D.28563 - D.28566;
        D.28567 = __s2_len > 1;
        D.28557 = __result == 0;
        D.28568 = D.28567 & D.28557;
        if (D.28568 != 0) goto <D.28569>; else goto <D.28570>;
        <D.28569>:
        D.28571 = &MEM[(void *)"MarshalByRefObject" + 2B];
        D.28572 = *D.28571;
        D.28573 = (int) D.28572;
        D.28574 = __s2 + 2;
        D.28575 = *D.28574;
        D.28576 = (int) D.28575;
        __result = D.28573 - D.28576;
        D.28577 = __s2_len > 2;
        D.28557 = __result == 0;
        D.28578 = D.28577 & D.28557;
        if (D.28578 != 0) goto <D.28579>; else goto <D.28580>;
        <D.28579>:
        D.28581 = &MEM[(void *)"MarshalByRefObject" + 3B];
        D.28582 = *D.28581;
        D.28583 = (int) D.28582;
        D.28584 = __s2 + 3;
        D.28585 = *D.28584;
        D.28586 = (int) D.28585;
        __result = D.28583 - D.28586;
        <D.28580>:
        <D.28570>:
        <D.28560>:
      }
      D.20577 = __result;
    }
    iftmp.223 = -D.20577;
    goto <D.28587>;
    <D.28550>:
    D.28468 = class->name;
    iftmp.223 = __builtin_strcmp (D.28468, "MarshalByRefObject");
    <D.28587>:
    D.20578 = iftmp.223;
  }
  if (D.20578 == 0) goto <D.28588>; else goto <D.28589>;
  <D.28588>:
  class->marshalbyref = 1;
  <D.28589>:
  <D.28547>:
  D.28468 = class->name;
  D.28545 = *D.28468;
  if (D.28545 == 67) goto <D.28590>; else goto <D.28591>;
  <D.28590>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = class->name;
      D.28595 = "ContextBoundObject";
      D.28596 = MEM[(const unsigned char *)D.28595];
      D.28597 = (int) D.28596;
      D.28598 = *__s2;
      D.28599 = (int) D.28598;
      __result = D.28597 - D.28599;
      {
        D.28600 = __s2_len != 0;
        D.28601 = __result == 0;
        D.28602 = D.28600 & D.28601;
        if (D.28602 != 0) goto <D.28603>; else goto <D.28604>;
        <D.28603>:
        D.28605 = &MEM[(void *)"ContextBoundObject" + 1B];
        D.28606 = *D.28605;
        D.28607 = (int) D.28606;
        D.28608 = __s2 + 1;
        D.28609 = *D.28608;
        D.28610 = (int) D.28609;
        __result = D.28607 - D.28610;
        D.28611 = __s2_len > 1;
        D.28601 = __result == 0;
        D.28612 = D.28611 & D.28601;
        if (D.28612 != 0) goto <D.28613>; else goto <D.28614>;
        <D.28613>:
        D.28615 = &MEM[(void *)"ContextBoundObject" + 2B];
        D.28616 = *D.28615;
        D.28617 = (int) D.28616;
        D.28618 = __s2 + 2;
        D.28619 = *D.28618;
        D.28620 = (int) D.28619;
        __result = D.28617 - D.28620;
        D.28621 = __s2_len > 2;
        D.28601 = __result == 0;
        D.28622 = D.28621 & D.28601;
        if (D.28622 != 0) goto <D.28623>; else goto <D.28624>;
        <D.28623>:
        D.28625 = &MEM[(void *)"ContextBoundObject" + 3B];
        D.28626 = *D.28625;
        D.28627 = (int) D.28626;
        D.28628 = __s2 + 3;
        D.28629 = *D.28628;
        D.28630 = (int) D.28629;
        __result = D.28627 - D.28630;
        <D.28624>:
        <D.28614>:
        <D.28604>:
      }
      D.20586 = __result;
    }
    iftmp.224 = -D.20586;
    goto <D.28631>;
    <D.28594>:
    D.28468 = class->name;
    iftmp.224 = __builtin_strcmp (D.28468, "ContextBoundObject");
    <D.28631>:
    D.20587 = iftmp.224;
  }
  if (D.20587 == 0) goto <D.28632>; else goto <D.28633>;
  <D.28632>:
  class->contextbound = 1;
  <D.28633>:
  <D.28591>:
  D.28468 = class->name;
  D.28545 = *D.28468;
  if (D.28545 == 68) goto <D.28634>; else goto <D.28635>;
  <D.28634>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = class->name;
      D.28639 = "Delegate";
      D.28640 = MEM[(const unsigned char *)D.28639];
      D.28641 = (int) D.28640;
      D.28642 = *__s2;
      D.28643 = (int) D.28642;
      __result = D.28641 - D.28643;
      {
        D.28644 = __s2_len != 0;
        D.28645 = __result == 0;
        D.28646 = D.28644 & D.28645;
        if (D.28646 != 0) goto <D.28647>; else goto <D.28648>;
        <D.28647>:
        D.28649 = &MEM[(void *)"Delegate" + 1B];
        D.28650 = *D.28649;
        D.28651 = (int) D.28650;
        D.28652 = __s2 + 1;
        D.28653 = *D.28652;
        D.28654 = (int) D.28653;
        __result = D.28651 - D.28654;
        D.28655 = __s2_len > 1;
        D.28645 = __result == 0;
        D.28656 = D.28655 & D.28645;
        if (D.28656 != 0) goto <D.28657>; else goto <D.28658>;
        <D.28657>:
        D.28659 = &MEM[(void *)"Delegate" + 2B];
        D.28660 = *D.28659;
        D.28661 = (int) D.28660;
        D.28662 = __s2 + 2;
        D.28663 = *D.28662;
        D.28664 = (int) D.28663;
        __result = D.28661 - D.28664;
        D.28665 = __s2_len > 2;
        D.28645 = __result == 0;
        D.28666 = D.28665 & D.28645;
        if (D.28666 != 0) goto <D.28667>; else goto <D.28668>;
        <D.28667>:
        D.28669 = &MEM[(void *)"Delegate" + 3B];
        D.28670 = *D.28669;
        D.28671 = (int) D.28670;
        D.28672 = __s2 + 3;
        D.28673 = *D.28672;
        D.28674 = (int) D.28673;
        __result = D.28671 - D.28674;
        <D.28668>:
        <D.28658>:
        <D.28648>:
      }
      D.20595 = __result;
    }
    iftmp.225 = -D.20595;
    goto <D.28675>;
    <D.28638>:
    D.28468 = class->name;
    iftmp.225 = __builtin_strcmp (D.28468, "Delegate");
    <D.28675>:
    D.20596 = iftmp.225;
  }
  if (D.20596 == 0) goto <D.28676>; else goto <D.28677>;
  <D.28676>:
  class->delegate = 1;
  <D.28677>:
  <D.28635>:
  <D.28544>:
  D.28680 = class->parent;
  D.28681 = BIT_FIELD_REF <*D.28680, 8, 256>;
  D.28682 = D.28681 & 16;
  if (D.28682 != 0) goto <D.28678>; else goto <D.28683>;
  <D.28683>:
  D.28680 = class->parent;
  D.28684 = D.28680->image;
  D.28685 = mono_is_corlib_image (D.28684);
  if (D.28685 != 0) goto <D.28686>; else goto <D.28679>;
  <D.28686>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.28680 = class->parent;
      __s2 = D.28680->name;
      D.28690 = "ValueType";
      D.28691 = MEM[(const unsigned char *)D.28690];
      D.28692 = (int) D.28691;
      D.28693 = *__s2;
      D.28694 = (int) D.28693;
      __result = D.28692 - D.28694;
      {
        D.28695 = __s2_len != 0;
        D.28696 = __result == 0;
        D.28697 = D.28695 & D.28696;
        if (D.28697 != 0) goto <D.28698>; else goto <D.28699>;
        <D.28698>:
        D.28700 = &MEM[(void *)"ValueType" + 1B];
        D.28701 = *D.28700;
        D.28702 = (int) D.28701;
        D.28703 = __s2 + 1;
        D.28704 = *D.28703;
        D.28705 = (int) D.28704;
        __result = D.28702 - D.28705;
        D.28706 = __s2_len > 1;
        D.28696 = __result == 0;
        D.28707 = D.28706 & D.28696;
        if (D.28707 != 0) goto <D.28708>; else goto <D.28709>;
        <D.28708>:
        D.28710 = &MEM[(void *)"ValueType" + 2B];
        D.28711 = *D.28710;
        D.28712 = (int) D.28711;
        D.28713 = __s2 + 2;
        D.28714 = *D.28713;
        D.28715 = (int) D.28714;
        __result = D.28712 - D.28715;
        D.28716 = __s2_len > 2;
        D.28696 = __result == 0;
        D.28717 = D.28716 & D.28696;
        if (D.28717 != 0) goto <D.28718>; else goto <D.28719>;
        <D.28718>:
        D.28720 = &MEM[(void *)"ValueType" + 3B];
        D.28721 = *D.28720;
        D.28722 = (int) D.28721;
        D.28723 = __s2 + 3;
        D.28724 = *D.28723;
        D.28725 = (int) D.28724;
        __result = D.28722 - D.28725;
        <D.28719>:
        <D.28709>:
        <D.28699>:
      }
      D.20604 = __result;
    }
    iftmp.226 = -D.20604;
    goto <D.28726>;
    <D.28689>:
    D.28680 = class->parent;
    D.28727 = D.28680->name;
    iftmp.226 = __builtin_strcmp (D.28727, "ValueType");
    <D.28726>:
    D.20605 = iftmp.226;
  }
  if (D.20605 == 0) goto <D.28728>; else goto <D.28679>;
  <D.28728>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.28680 = class->parent;
      __s2 = D.28680->name_space;
      D.28386 = "System";
      D.28387 = MEM[(const unsigned char *)D.28386];
      D.28388 = (int) D.28387;
      D.28732 = *__s2;
      D.28733 = (int) D.28732;
      __result = D.28388 - D.28733;
      {
        D.28734 = __s2_len != 0;
        D.28735 = __result == 0;
        D.28736 = D.28734 & D.28735;
        if (D.28736 != 0) goto <D.28737>; else goto <D.28738>;
        <D.28737>:
        D.28396 = &MEM[(void *)"System" + 1B];
        D.28397 = *D.28396;
        D.28398 = (int) D.28397;
        D.28739 = __s2 + 1;
        D.28740 = *D.28739;
        D.28741 = (int) D.28740;
        __result = D.28398 - D.28741;
        D.28742 = __s2_len > 1;
        D.28735 = __result == 0;
        D.28743 = D.28742 & D.28735;
        if (D.28743 != 0) goto <D.28744>; else goto <D.28745>;
        <D.28744>:
        D.28406 = &MEM[(void *)"System" + 2B];
        D.28407 = *D.28406;
        D.28408 = (int) D.28407;
        D.28746 = __s2 + 2;
        D.28747 = *D.28746;
        D.28748 = (int) D.28747;
        __result = D.28408 - D.28748;
        D.28749 = __s2_len > 2;
        D.28735 = __result == 0;
        D.28750 = D.28749 & D.28735;
        if (D.28750 != 0) goto <D.28751>; else goto <D.28752>;
        <D.28751>:
        D.28416 = &MEM[(void *)"System" + 3B];
        D.28417 = *D.28416;
        D.28418 = (int) D.28417;
        D.28753 = __s2 + 3;
        D.28754 = *D.28753;
        D.28755 = (int) D.28754;
        __result = D.28418 - D.28755;
        <D.28752>:
        <D.28745>:
        <D.28738>:
      }
      D.20613 = __result;
    }
    iftmp.227 = -D.20613;
    goto <D.28756>;
    <D.28731>:
    D.28680 = class->parent;
    D.28757 = D.28680->name_space;
    iftmp.227 = __builtin_strcmp (D.28757, "System");
    <D.28756>:
    D.20614 = iftmp.227;
  }
  if (D.20614 == 0) goto <D.28678>; else goto <D.28679>;
  <D.28678>:
  class->valuetype = 1;
  <D.28679>:
  D.28680 = class->parent;
  D.28684 = D.28680->image;
  D.28758 = mono_is_corlib_image (D.28684);
  if (D.28758 != 0) goto <D.28759>; else goto <D.28760>;
  <D.28759>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.28680 = class->parent;
      __s2 = D.28680->name;
      D.28764 = "Enum";
      D.28765 = MEM[(const unsigned char *)D.28764];
      D.28766 = (int) D.28765;
      D.28767 = *__s2;
      D.28768 = (int) D.28767;
      __result = D.28766 - D.28768;
      {
        D.28769 = __s2_len != 0;
        D.28770 = __result == 0;
        D.28771 = D.28769 & D.28770;
        if (D.28771 != 0) goto <D.28772>; else goto <D.28773>;
        <D.28772>:
        D.28774 = &MEM[(void *)"Enum" + 1B];
        D.28775 = *D.28774;
        D.28776 = (int) D.28775;
        D.28777 = __s2 + 1;
        D.28778 = *D.28777;
        D.28779 = (int) D.28778;
        __result = D.28776 - D.28779;
        D.28780 = __s2_len > 1;
        D.28770 = __result == 0;
        D.28781 = D.28780 & D.28770;
        if (D.28781 != 0) goto <D.28782>; else goto <D.28783>;
        <D.28782>:
        D.28784 = &MEM[(void *)"Enum" + 2B];
        D.28785 = *D.28784;
        D.28786 = (int) D.28785;
        D.28787 = __s2 + 2;
        D.28788 = *D.28787;
        D.28789 = (int) D.28788;
        __result = D.28786 - D.28789;
        D.28790 = __s2_len > 2;
        D.28770 = __result == 0;
        D.28791 = D.28790 & D.28770;
        if (D.28791 != 0) goto <D.28792>; else goto <D.28793>;
        <D.28792>:
        D.28794 = &MEM[(void *)"Enum" + 3B];
        D.28795 = *D.28794;
        D.28796 = (int) D.28795;
        D.28797 = __s2 + 3;
        D.28798 = *D.28797;
        D.28799 = (int) D.28798;
        __result = D.28796 - D.28799;
        <D.28793>:
        <D.28783>:
        <D.28773>:
      }
      D.20622 = __result;
    }
    iftmp.228 = -D.20622;
    goto <D.28800>;
    <D.28763>:
    D.28680 = class->parent;
    D.28727 = D.28680->name;
    iftmp.228 = __builtin_strcmp (D.28727, "Enum");
    <D.28800>:
    D.20623 = iftmp.228;
  }
  if (D.20623 == 0) goto <D.28801>; else goto <D.28802>;
  <D.28801>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.28680 = class->parent;
      __s2 = D.28680->name_space;
      D.28386 = "System";
      D.28387 = MEM[(const unsigned char *)D.28386];
      D.28388 = (int) D.28387;
      D.28806 = *__s2;
      D.28807 = (int) D.28806;
      __result = D.28388 - D.28807;
      {
        D.28808 = __s2_len != 0;
        D.28809 = __result == 0;
        D.28810 = D.28808 & D.28809;
        if (D.28810 != 0) goto <D.28811>; else goto <D.28812>;
        <D.28811>:
        D.28396 = &MEM[(void *)"System" + 1B];
        D.28397 = *D.28396;
        D.28398 = (int) D.28397;
        D.28813 = __s2 + 1;
        D.28814 = *D.28813;
        D.28815 = (int) D.28814;
        __result = D.28398 - D.28815;
        D.28816 = __s2_len > 1;
        D.28809 = __result == 0;
        D.28817 = D.28816 & D.28809;
        if (D.28817 != 0) goto <D.28818>; else goto <D.28819>;
        <D.28818>:
        D.28406 = &MEM[(void *)"System" + 2B];
        D.28407 = *D.28406;
        D.28408 = (int) D.28407;
        D.28820 = __s2 + 2;
        D.28821 = *D.28820;
        D.28822 = (int) D.28821;
        __result = D.28408 - D.28822;
        D.28823 = __s2_len > 2;
        D.28809 = __result == 0;
        D.28824 = D.28823 & D.28809;
        if (D.28824 != 0) goto <D.28825>; else goto <D.28826>;
        <D.28825>:
        D.28416 = &MEM[(void *)"System" + 3B];
        D.28417 = *D.28416;
        D.28418 = (int) D.28417;
        D.28827 = __s2 + 3;
        D.28828 = *D.28827;
        D.28829 = (int) D.28828;
        __result = D.28418 - D.28829;
        <D.28826>:
        <D.28819>:
        <D.28812>:
      }
      D.20631 = __result;
    }
    iftmp.229 = -D.20631;
    goto <D.28830>;
    <D.28805>:
    D.28680 = class->parent;
    D.28757 = D.28680->name_space;
    iftmp.229 = __builtin_strcmp (D.28757, "System");
    <D.28830>:
    D.20632 = iftmp.229;
  }
  if (D.20632 == 0) goto <D.28831>; else goto <D.28832>;
  <D.28831>:
  class->enumtype = 1;
  D.28833 = class->enumtype;
  class->valuetype = D.28833;
  <D.28832>:
  <D.28802>:
  <D.28760>:
  goto <D.28514>;
  <D.28513>:
  D.28515 = class->flags;
  D.28521 = D.28515 & 4096;
  if (D.28521 != 0) goto <D.28834>; else goto <D.28835>;
  <D.28834>:
  init_com_from_comimport (class);
  <D.28835>:
  class->parent = 0B;
  <D.28514>:
}


init_com_from_comimport (struct MonoClass * class)
{
  <unnamed type> D.28837;
  struct MonoImage * D.28840;
  int D.28841;

  D.28837 = mono_security_get_mode ();
  if (D.28837 == 1) goto <D.28838>; else goto <D.28839>;
  <D.28838>:
  D.28840 = class->image;
  D.28841 = mono_security_core_clr_determine_platform_image (D.28840);
  if (D.28841 == 0) goto <D.28842>; else goto <D.28843>;
  <D.28842>:
  mono_class_set_failure (class, 7, 0B);
  return;
  <D.28843>:
  <D.28839>:
}


mono_class_setup_supertypes (struct MonoClass * class)
{
  struct MonoClass * D.28847;
  struct MonoClass * * D.28850;
  short unsigned int D.28855;
  short unsigned int D.28856;
  int iftmp.230;
  short unsigned int D.28859;
  unsigned int ms.231;
  unsigned int D.28864;
  int D.28865;
  long unsigned int D.28868;
  long unsigned int D.28869;
  sizetype D.28870;
  struct MonoClass * * D.28871;
  long unsigned int D.28872;
  long unsigned int D.28873;
  int ms;
  struct MonoClass * * supertypes;

  {
    void * __tmp;

    __tmp = class->supertypes;
    supertypes = __tmp;
  }
  if (supertypes != 0B) goto <D.28845>; else goto <D.28846>;
  <D.28845>:
  return;
  <D.28846>:
  D.28847 = class->parent;
  if (D.28847 != 0B) goto <D.28848>; else goto <D.28849>;
  <D.28848>:
  D.28847 = class->parent;
  D.28850 = D.28847->supertypes;
  if (D.28850 == 0B) goto <D.28851>; else goto <D.28852>;
  <D.28851>:
  D.28847 = class->parent;
  mono_class_setup_supertypes (D.28847);
  <D.28852>:
  <D.28849>:
  D.28847 = class->parent;
  if (D.28847 != 0B) goto <D.28853>; else goto <D.28854>;
  <D.28853>:
  D.28847 = class->parent;
  D.28855 = D.28847->idepth;
  D.28856 = D.28855 + 1;
  class->idepth = D.28856;
  goto <D.28857>;
  <D.28854>:
  class->idepth = 1;
  <D.28857>:
  D.28859 = class->idepth;
  if (D.28859 > 5) goto <D.28860>; else goto <D.28861>;
  <D.28860>:
  D.28859 = class->idepth;
  iftmp.230 = (int) D.28859;
  goto <D.28862>;
  <D.28861>:
  iftmp.230 = 6;
  <D.28862>:
  ms = iftmp.230;
  ms.231 = (unsigned int) ms;
  D.28864 = ms.231 * 8;
  D.28865 = (int) D.28864;
  supertypes = mono_class_alloc0 (class, D.28865);
  D.28847 = class->parent;
  if (D.28847 != 0B) goto <D.28866>; else goto <D.28867>;
  <D.28866>:
  D.28859 = class->idepth;
  D.28868 = (long unsigned int) D.28859;
  D.28869 = D.28868 * 8;
  D.28870 = D.28869 + 18446744073709551608;
  D.28871 = supertypes + D.28870;
  *D.28871 = class;
  D.28847 = class->parent;
  D.28855 = D.28847->idepth;
  D.28872 = (long unsigned int) D.28855;
  D.28873 = D.28872 * 8;
  D.28847 = class->parent;
  D.28850 = D.28847->supertypes;
  memcpy (supertypes, D.28850, D.28873);
  goto <D.28874>;
  <D.28867>:
  *supertypes = class;
  <D.28874>:
  class->supertypes = supertypes;
}


mono_class_is_nullable (struct MonoClass * klass)
{
  gboolean D.28876;
  int iftmp.232;
  struct MonoGenericClass * D.28880;
  struct MonoClass * D.28882;
  struct MonoClass * D.28883;

  D.28880 = klass->generic_class;
  if (D.28880 != 0B) goto <D.28881>; else goto <D.28878>;
  <D.28881>:
  D.28880 = klass->generic_class;
  D.28882 = D.28880->container_class;
  D.28883 = mono_defaults.generic_nullable_class;
  if (D.28882 == D.28883) goto <D.28884>; else goto <D.28878>;
  <D.28884>:
  iftmp.232 = 1;
  goto <D.28879>;
  <D.28878>:
  iftmp.232 = 0;
  <D.28879>:
  D.28876 = iftmp.232;
  return D.28876;
}


mono_class_get_nullable_param (struct MonoClass * klass)
{
  int D.28886;
  _Bool D.28887;
  long int D.28888;
  long int D.28889;
  struct MonoClass * D.28892;
  struct MonoGenericClass * D.28893;
  struct MonoGenericInst * D.28894;
  struct MonoType * D.28895;

  D.28886 = mono_class_is_nullable (klass);
  D.28887 = D.28886 == 0;
  D.28888 = (long int) D.28887;
  D.28889 = __builtin_expect (D.28888, 0);
  if (D.28889 != 0) goto <D.28890>; else goto <D.28891>;
  <D.28890>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 5807, "mono_class_is_nullable (klass)");
  <D.28891>:
  D.28893 = klass->generic_class;
  D.28894 = D.28893->context.class_inst;
  D.28895 = D.28894->type_argv[0];
  D.28892 = mono_class_from_mono_type (D.28895);
  return D.28892;
}


mono_generic_class_get_class (struct MonoGenericClass * gclass)
{
  struct MonoClass * D.28897;
  struct MonoClass * D.28900;
  struct MonoImageSet * D.28903;
  int record_gclass_instantiation.233;
  struct GSList * gclass_recorded_list.234;
  struct GSList * gclass_recorded_list.235;
  struct MonoClass * D.28909;
  const char * D.28912;
  const char * D.28913;
  struct MonoImage * D.28914;
  unsigned int D.28915;
  unsigned int D.28916;
  unsigned int D.28917;
  unsigned char D.28918;
  struct MonoGenericClass * D.28919;
  <unnamed-unsigned:1> D.28920;
  <unnamed-unsigned:1> D.28921;
  struct MonoClass * D.28922;
  int D.28923;
  struct MonoClass * D.28926;
  unsigned char D.28927;
  unsigned char D.28928;
  unsigned char D.28931;
  unsigned char D.28932;
  int D.28935;
  int D.28936;
  unsigned int inflated_classes.236;
  unsigned int inflated_classes.237;
  unsigned int inflated_classes_size.238;
  unsigned int inflated_classes_size.239;
  struct MonoClass * klass;
  struct MonoClass * gklass;

  D.28897 = gclass->cached_class;
  if (D.28897 != 0B) goto <D.28898>; else goto <D.28899>;
  <D.28898>:
  D.28900 = gclass->cached_class;
  return D.28900;
  <D.28899>:
  mono_loader_lock ();
  D.28897 = gclass->cached_class;
  if (D.28897 != 0B) goto <D.28901>; else goto <D.28902>;
  <D.28901>:
  mono_loader_unlock ();
  D.28900 = gclass->cached_class;
  return D.28900;
  <D.28902>:
  D.28903 = gclass->owner;
  klass = mono_image_set_alloc0 (D.28903, 272);
  gklass = gclass->container_class;
  record_gclass_instantiation.233 = record_gclass_instantiation;
  if (record_gclass_instantiation.233 > 0) goto <D.28905>; else goto <D.28906>;
  <D.28905>:
  gclass_recorded_list.234 = gclass_recorded_list;
  gclass_recorded_list.235 = monoeg_g_slist_append (gclass_recorded_list.234, klass);
  gclass_recorded_list = gclass_recorded_list.235;
  <D.28906>:
  D.28909 = gklass->nested_in;
  if (D.28909 != 0B) goto <D.28910>; else goto <D.28911>;
  <D.28910>:
  D.28909 = gklass->nested_in;
  klass->nested_in = D.28909;
  <D.28911>:
  D.28912 = gklass->name;
  klass->name = D.28912;
  D.28913 = gklass->name_space;
  klass->name_space = D.28913;
  mono_profiler_class_event (klass, 0);
  D.28914 = gklass->image;
  klass->image = D.28914;
  D.28915 = gklass->flags;
  klass->flags = D.28915;
  D.28916 = gklass->type_token;
  klass->type_token = D.28916;
  D.28917 = gklass->field.count;
  klass->field.count = D.28917;
  klass->is_inflated = 1;
  klass->generic_class = gclass;
  klass->byval_arg.type = 21;
  D.28918 = klass->byval_arg.type;
  klass->this_arg.type = D.28918;
  klass->byval_arg.data.generic_class = gclass;
  D.28919 = klass->byval_arg.data.generic_class;
  klass->this_arg.data.generic_class = D.28919;
  klass->this_arg.byref = 1;
  D.28920 = gklass->enumtype;
  klass->enumtype = D.28920;
  D.28921 = gklass->valuetype;
  klass->valuetype = D.28921;
  klass->element_class = klass;
  D.28922 = klass->element_class;
  klass->cast_class = D.28922;
  D.28923 = mono_class_is_nullable (klass);
  if (D.28923 != 0) goto <D.28924>; else goto <D.28925>;
  <D.28924>:
  D.28926 = mono_class_get_nullable_param (klass);
  klass->element_class = D.28926;
  D.28922 = klass->element_class;
  klass->cast_class = D.28922;
  <D.28925>:
  mono_generic_class_setup_parent (klass, gklass);
  D.28927 = BIT_FIELD_REF <*gclass, 8, 192>;
  D.28928 = D.28927 & 1;
  if (D.28928 != 0) goto <D.28929>; else goto <D.28930>;
  <D.28929>:
  klass->inited = 1;
  mono_class_setup_supertypes (klass);
  D.28931 = BIT_FIELD_REF <*klass, 8, 256>;
  D.28932 = D.28931 & 16;
  if (D.28932 != 0) goto <D.28933>; else goto <D.28934>;
  <D.28933>:
  D.28935 = gklass->instance_size;
  klass->instance_size = D.28935;
  D.28936 = gklass->sizes.class_size;
  klass->sizes.class_size = D.28936;
  mono_memory_barrier ();
  klass->size_inited = 1;
  <D.28934>:
  <D.28930>:
  mono_memory_barrier ();
  gclass->cached_class = klass;
  mono_profiler_class_loaded (klass, 0);
  inflated_classes.236 = inflated_classes;
  inflated_classes.237 = inflated_classes.236 + 1;
  inflated_classes = inflated_classes.237;
  inflated_classes_size.238 = inflated_classes_size;
  inflated_classes_size.239 = inflated_classes_size.238 + 272;
  inflated_classes_size = inflated_classes_size.239;
  mono_loader_unlock ();
  D.28900 = klass;
  return D.28900;
}


mono_class_from_generic_parameter (struct MonoGenericParam * param, struct MonoImage * image, gboolean is_mvar)
{
  struct MonoGenericParamInfo * iftmp.240;
  struct MonoGenericContainer * D.28945;
  struct MonoClass * D.28949;
  struct MonoClass * D.28952;
  _Bool D.28956;
  _Bool D.28957;
  _Bool D.28958;
  struct MonoImage * iftmp.241;
  struct MonoClass * D.28967;
  struct MonoImage * iftmp.242;
  struct MonoGenericContainer * container;
  struct MonoGenericParamInfo * pinfo;
  struct MonoClass * klass;

  container = param->owner;
  mono_loader_lock ();
  if (container != 0B) goto <D.28942>; else goto <D.28943>;
  <D.28942>:
  D.28945 = param->owner;
  if (D.28945 != 0B) goto <D.28946>; else goto <D.28947>;
  <D.28946>:
  iftmp.240 = &MEM[(struct MonoGenericParamFull *)param].info;
  goto <D.28948>;
  <D.28947>:
  iftmp.240 = 0B;
  <D.28948>:
  pinfo = iftmp.240;
  D.28949 = pinfo->pklass;
  if (D.28949 != 0B) goto <D.28950>; else goto <D.28951>;
  <D.28950>:
  mono_loader_unlock ();
  D.28952 = pinfo->pklass;
  return D.28952;
  <D.28951>:
  goto <D.28953>;
  <D.28943>:
  pinfo = 0B;
  image = 0B;
  klass = get_anon_gparam_class (param, is_mvar);
  if (klass != 0B) goto <D.28954>; else goto <D.28955>;
  <D.28954>:
  mono_loader_unlock ();
  D.28952 = klass;
  return D.28952;
  <D.28955>:
  <D.28953>:
  D.28956 = image == 0B;
  D.28957 = container != 0B;
  D.28958 = D.28956 & D.28957;
  if (D.28958 != 0) goto <D.28959>; else goto <D.28960>;
  <D.28959>:
  if (is_mvar != 0) goto <D.28961>; else goto <D.28962>;
  <D.28961>:
  {
    struct MonoMethod * method;

    method = container->owner.method;
    if (method != 0B) goto <D.28966>; else goto <D.28964>;
    <D.28966>:
    D.28967 = method->klass;
    if (D.28967 != 0B) goto <D.28968>; else goto <D.28964>;
    <D.28968>:
    D.28967 = method->klass;
    iftmp.241 = D.28967->image;
    goto <D.28965>;
    <D.28964>:
    iftmp.241 = 0B;
    <D.28965>:
    image = iftmp.241;
  }
  goto <D.28969>;
  <D.28962>:
  {
    struct MonoClass * klass;

    klass = container->owner.klass;
    if (klass != 0B) goto <D.28971>; else goto <D.28972>;
    <D.28971>:
    iftmp.242 = klass->image;
    goto <D.28973>;
    <D.28972>:
    iftmp.242 = 0B;
    <D.28973>:
    image = iftmp.242;
  }
  <D.28969>:
  <D.28960>:
  klass = make_generic_param_class (param, image, is_mvar, pinfo);
  mono_memory_barrier ();
  if (container != 0B) goto <D.28974>; else goto <D.28975>;
  <D.28974>:
  pinfo->pklass = klass;
  goto <D.28976>;
  <D.28975>:
  set_anon_gparam_class (param, is_mvar, klass);
  <D.28976>:
  mono_loader_unlock ();
  mono_profiler_class_loaded (klass, 0);
  D.28952 = klass;
  return D.28952;
}


get_anon_gparam_class (struct MonoGenericParam * param, gboolean is_mvar)
{
  short unsigned int D.28978;
  unsigned int D.28979;
  short unsigned int D.28980;
  unsigned int D.28981;
  unsigned int D.28982;
  unsigned int D.28983;
  _Bool D.28984;
  long int D.28985;
  long int D.28986;
  struct MonoClass * D.28993;
  struct MonoClass * iftmp.243;
  struct MonoClass * * D.28995;
  long unsigned int D.28998;
  long unsigned int D.28999;
  struct MonoClass * * D.29000;
  struct MonoClass * iftmp.244;
  struct MonoClass * * D.29003;
  struct MonoClass * * D.29006;
  struct GHashTable * iftmp.245;
  struct MonoClass * iftmp.246;
  long int D.29015;
  const void * D.29016;
  int n;
  struct MonoImage * image;
  struct GHashTable * ht;

  D.28978 = param->num;
  D.28979 = (unsigned int) D.28978;
  D.28980 = param->serial;
  D.28981 = (unsigned int) D.28980;
  D.28982 = D.28981 << 16;
  D.28983 = D.28979 | D.28982;
  n = (int) D.28983;
  image = param->image;
  D.28984 = image == 0B;
  D.28985 = (long int) D.28984;
  D.28986 = __builtin_expect (D.28985, 0);
  if (D.28986 != 0) goto <D.28987>; else goto <D.28988>;
  <D.28987>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6028, "image");
  <D.28988>:
  if (n <= 15) goto <D.28989>; else goto <D.28990>;
  <D.28989>:
  if (is_mvar != 0) goto <D.28991>; else goto <D.28992>;
  <D.28991>:
  D.28995 = image->mvar_cache_fast;
  if (D.28995 != 0B) goto <D.28996>; else goto <D.28997>;
  <D.28996>:
  D.28995 = image->mvar_cache_fast;
  D.28998 = (long unsigned int) n;
  D.28999 = D.28998 * 8;
  D.29000 = D.28995 + D.28999;
  iftmp.243 = *D.29000;
  goto <D.29001>;
  <D.28997>:
  iftmp.243 = 0B;
  <D.29001>:
  D.28993 = iftmp.243;
  return D.28993;
  <D.28992>:
  D.29003 = image->var_cache_fast;
  if (D.29003 != 0B) goto <D.29004>; else goto <D.29005>;
  <D.29004>:
  D.29003 = image->var_cache_fast;
  D.28998 = (long unsigned int) n;
  D.28999 = D.28998 * 8;
  D.29006 = D.29003 + D.28999;
  iftmp.244 = *D.29006;
  goto <D.29007>;
  <D.29005>:
  iftmp.244 = 0B;
  <D.29007>:
  D.28993 = iftmp.244;
  return D.28993;
  <D.28990>:
  if (is_mvar != 0) goto <D.29009>; else goto <D.29010>;
  <D.29009>:
  iftmp.245 = image->mvar_cache_slow;
  goto <D.29011>;
  <D.29010>:
  iftmp.245 = image->var_cache_slow;
  <D.29011>:
  ht = iftmp.245;
  if (ht != 0B) goto <D.29013>; else goto <D.29014>;
  <D.29013>:
  D.29015 = (long int) n;
  D.29016 = (const void *) D.29015;
  iftmp.246 = monoeg_g_hash_table_lookup (ht, D.29016);
  goto <D.29017>;
  <D.29014>:
  iftmp.246 = 0B;
  <D.29017>:
  D.28993 = iftmp.246;
  return D.28993;
}


make_generic_param_class (struct MonoGenericParam * param, struct MonoImage * image, gboolean is_mvar, struct MonoGenericParamInfo * pinfo)
{
  unsigned int classes_size.247;
  unsigned int classes_size.248;
  const char * D.29025;
  short unsigned int D.29027;
  void * D.29028;
  const char * D.29029;
  const char * iftmp.249;
  struct MonoClass * D.29038;
  const char * iftmp.250;
  struct MonoClass * D.29049;
  struct MonoClass * * D.29053;
  struct MonoClass * D.29054;
  unsigned int D.29055;
  unsigned int D.29056;
  unsigned char D.29058;
  short unsigned int D.29064;
  int D.29065;
  int D.29066;
  struct MonoImage * D.29068;
  struct MonoClass * D.29069;
  struct MonoClass * D.29070;
  int D.29071;
  short unsigned int D.29074;
  short unsigned int D.29075;
  short unsigned int D.29076;
  long unsigned int D.29077;
  unsigned int D.29078;
  unsigned int D.29079;
  void * D.29080;
  struct MonoClass * * D.29081;
  int D.29082;
  long unsigned int D.29083;
  long unsigned int D.29084;
  struct MonoClass * * D.29085;
  long unsigned int D.29086;
  long unsigned int D.29087;
  struct MonoClass * * D.29088;
  struct MonoClass * D.29089;
  struct MonoClass * D.29090;
  unsigned char iftmp.251;
  unsigned char D.29095;
  struct MonoGenericParam * D.29096;
  int iftmp.252;
  unsigned int D.29100;
  struct MonoClass * D.29104;
  unsigned char D.29105;
  gchar * D.29108;
  int D.29110;
  struct MonoClass * D.29111;
  struct MonoClass * klass;
  struct MonoClass * * ptr;
  int count;
  int pos;
  int i;
  struct MonoGenericContainer * container;

  container = param->owner;
  if (image == 0B) goto <D.29019>; else goto <D.29020>;
  <D.29019>:
  image = mono_defaults.corlib;
  <D.29020>:
  klass = mono_image_alloc0 (image, 272);
  classes_size.247 = classes_size;
  classes_size.248 = classes_size.247 + 272;
  classes_size = classes_size.248;
  if (pinfo != 0B) goto <D.29023>; else goto <D.29024>;
  <D.29023>:
  D.29025 = pinfo->name;
  klass->name = D.29025;
  goto <D.29026>;
  <D.29024>:
  {
    int n;

    D.29027 = param->num;
    n = (int) D.29027;
    D.29028 = mono_image_alloc0 (image, 16);
    klass->name = D.29028;
    D.29029 = klass->name;
    sprintf (D.29029, "%d", n);
  }
  <D.29026>:
  if (container != 0B) goto <D.29030>; else goto <D.29031>;
  <D.29030>:
  if (is_mvar != 0) goto <D.29032>; else goto <D.29033>;
  <D.29032>:
  {
    struct MonoMethod * omethod;

    omethod = container->owner.method;
    if (omethod != 0B) goto <D.29037>; else goto <D.29035>;
    <D.29037>:
    D.29038 = omethod->klass;
    if (D.29038 != 0B) goto <D.29039>; else goto <D.29035>;
    <D.29039>:
    D.29038 = omethod->klass;
    iftmp.249 = D.29038->name_space;
    goto <D.29036>;
    <D.29035>:
    iftmp.249 = "";
    <D.29036>:
    klass->name_space = iftmp.249;
  }
  goto <D.29040>;
  <D.29033>:
  {
    struct MonoClass * oklass;

    oklass = container->owner.klass;
    if (oklass != 0B) goto <D.29042>; else goto <D.29043>;
    <D.29042>:
    iftmp.250 = oklass->name_space;
    goto <D.29044>;
    <D.29043>:
    iftmp.250 = "";
    <D.29044>:
    klass->name_space = iftmp.250;
  }
  <D.29040>:
  goto <D.29045>;
  <D.29031>:
  klass->name_space = "";
  <D.29045>:
  mono_profiler_class_event (klass, 0);
  count = 0;
  if (pinfo != 0B) goto <D.29046>; else goto <D.29047>;
  <D.29046>:
  ptr = pinfo->constraints;
  goto <D.20849>;
  <D.20848>:
  ptr = ptr + 8;
  count = count + 1;
  <D.20849>:
  if (ptr != 0B) goto <D.29048>; else goto <D.20850>;
  <D.29048>:
  D.29049 = *ptr;
  if (D.29049 != 0B) goto <D.20848>; else goto <D.20850>;
  <D.20850>:
  <D.29047>:
  pos = 0;
  if (count > 0) goto <D.29052>; else goto <D.29050>;
  <D.29052>:
  D.29053 = pinfo->constraints;
  D.29054 = *D.29053;
  D.29055 = D.29054->flags;
  D.29056 = D.29055 & 32;
  if (D.29056 == 0) goto <D.29057>; else goto <D.29050>;
  <D.29057>:
  D.29053 = pinfo->constraints;
  D.29054 = *D.29053;
  D.29058 = D.29054->byval_arg.type;
  if (D.29058 != 19) goto <D.29059>; else goto <D.29050>;
  <D.29059>:
  D.29053 = pinfo->constraints;
  D.29054 = *D.29053;
  D.29058 = D.29054->byval_arg.type;
  if (D.29058 != 30) goto <D.29060>; else goto <D.29050>;
  <D.29060>:
  D.29053 = pinfo->constraints;
  D.29054 = *D.29053;
  klass->parent = D.29054;
  pos = pos + 1;
  goto <D.29051>;
  <D.29050>:
  if (pinfo != 0B) goto <D.29063>; else goto <D.29061>;
  <D.29063>:
  D.29064 = pinfo->flags;
  D.29065 = (int) D.29064;
  D.29066 = D.29065 & 8;
  if (D.29066 != 0) goto <D.29067>; else goto <D.29061>;
  <D.29067>:
  D.29068 = mono_defaults.corlib;
  D.29069 = mono_class_from_name (D.29068, "System", "ValueType");
  klass->parent = D.29069;
  goto <D.29062>;
  <D.29061>:
  D.29070 = mono_defaults.object_class;
  klass->parent = D.29070;
  <D.29062>:
  <D.29051>:
  D.29071 = count - pos;
  if (D.29071 > 0) goto <D.29072>; else goto <D.29073>;
  <D.29072>:
  D.29074 = (short unsigned int) count;
  D.29075 = (short unsigned int) pos;
  D.29076 = D.29074 - D.29075;
  klass->interface_count = D.29076;
  D.29071 = count - pos;
  D.29077 = (long unsigned int) D.29071;
  D.29078 = (unsigned int) D.29077;
  D.29079 = D.29078 * 8;
  D.29080 = mono_image_alloc0 (image, D.29079);
  klass->interfaces = D.29080;
  klass->interfaces_inited = 1;
  i = pos;
  goto <D.20852>;
  <D.20851>:
  D.29081 = klass->interfaces;
  D.29082 = i - pos;
  D.29083 = (long unsigned int) D.29082;
  D.29084 = D.29083 * 8;
  D.29085 = D.29081 + D.29084;
  D.29053 = pinfo->constraints;
  D.29086 = (long unsigned int) i;
  D.29087 = D.29086 * 8;
  D.29088 = D.29053 + D.29087;
  D.29089 = *D.29088;
  *D.29085 = D.29089;
  i = i + 1;
  <D.20852>:
  if (i < count) goto <D.20851>; else goto <D.20853>;
  <D.20853>:
  <D.29073>:
  klass->image = image;
  klass->inited = 1;
  klass->element_class = klass;
  D.29090 = klass->element_class;
  klass->cast_class = D.29090;
  klass->flags = 1;
  if (is_mvar != 0) goto <D.29092>; else goto <D.29093>;
  <D.29092>:
  iftmp.251 = 30;
  goto <D.29094>;
  <D.29093>:
  iftmp.251 = 19;
  <D.29094>:
  klass->byval_arg.type = iftmp.251;
  D.29095 = klass->byval_arg.type;
  klass->this_arg.type = D.29095;
  klass->byval_arg.data.generic_param = param;
  D.29096 = klass->byval_arg.data.generic_param;
  klass->this_arg.data.generic_param = D.29096;
  klass->this_arg.byref = 1;
  if (pinfo != 0B) goto <D.29098>; else goto <D.29099>;
  <D.29098>:
  D.29100 = pinfo->token;
  iftmp.252 = (int) D.29100;
  goto <D.29101>;
  <D.29099>:
  iftmp.252 = 0;
  <D.29101>:
  klass->sizes.generic_param_token = iftmp.252;
  klass->min_align = 1;
  klass->instance_size = 8;
  mono_memory_barrier ();
  klass->size_inited = 1;
  mono_class_setup_supertypes (klass);
  D.29071 = count - pos;
  if (D.29071 > 0) goto <D.29102>; else goto <D.29103>;
  <D.29102>:
  D.29104 = klass->parent;
  mono_class_setup_vtable (D.29104);
  D.29104 = klass->parent;
  D.29105 = D.29104->exception_type;
  if (D.29105 != 0) goto <D.29106>; else goto <D.29107>;
  <D.29106>:
  D.29108 = monoeg_strdup ("Failed to setup parent interfaces");
  mono_class_set_failure (klass, 7, D.29108);
  goto <D.29109>;
  <D.29107>:
  D.29104 = klass->parent;
  D.29110 = D.29104->vtable_size;
  setup_interface_offsets (klass, D.29110, 1);
  <D.29109>:
  <D.29103>:
  D.29111 = klass;
  return D.29111;
}


sprintf (char * restrict __s, const char * restrict __fmt)
{
  int D.29113;
  long unsigned int D.29114;

  D.29114 = __builtin_object_size (__s, 1);
  D.29113 = __builtin___sprintf_chk (__s, 1, D.29114, __fmt, __builtin_va_arg_pack ());
  return D.29113;
}


set_anon_gparam_class (struct MonoGenericParam * param, gboolean is_mvar, struct MonoClass * klass)
{
  short unsigned int D.29116;
  unsigned int D.29117;
  short unsigned int D.29118;
  unsigned int D.29119;
  unsigned int D.29120;
  unsigned int D.29121;
  _Bool D.29122;
  long int D.29123;
  long int D.29124;
  struct MonoClass * * D.29131;
  void * D.29134;
  long unsigned int D.29135;
  long unsigned int D.29136;
  struct MonoClass * * D.29137;
  struct MonoClass * * D.29139;
  void * D.29142;
  struct MonoClass * * D.29143;
  struct GHashTable * iftmp.253;
  struct GHashTable * iftmp.254;
  long int D.29159;
  void * D.29160;
  int n;
  struct MonoImage * image;
  struct GHashTable * ht;

  D.29116 = param->num;
  D.29117 = (unsigned int) D.29116;
  D.29118 = param->serial;
  D.29119 = (unsigned int) D.29118;
  D.29120 = D.29119 << 16;
  D.29121 = D.29117 | D.29120;
  n = (int) D.29121;
  image = param->image;
  D.29122 = image == 0B;
  D.29123 = (long int) D.29122;
  D.29124 = __builtin_expect (D.29123, 0);
  if (D.29124 != 0) goto <D.29125>; else goto <D.29126>;
  <D.29125>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6051, "image");
  <D.29126>:
  if (n <= 15) goto <D.29127>; else goto <D.29128>;
  <D.29127>:
  if (is_mvar != 0) goto <D.29129>; else goto <D.29130>;
  <D.29129>:
  D.29131 = image->mvar_cache_fast;
  if (D.29131 == 0B) goto <D.29132>; else goto <D.29133>;
  <D.29132>:
  D.29134 = mono_image_alloc0 (image, 128);
  image->mvar_cache_fast = D.29134;
  <D.29133>:
  D.29131 = image->mvar_cache_fast;
  D.29135 = (long unsigned int) n;
  D.29136 = D.29135 * 8;
  D.29137 = D.29131 + D.29136;
  *D.29137 = klass;
  goto <D.29138>;
  <D.29130>:
  D.29139 = image->var_cache_fast;
  if (D.29139 == 0B) goto <D.29140>; else goto <D.29141>;
  <D.29140>:
  D.29142 = mono_image_alloc0 (image, 128);
  image->var_cache_fast = D.29142;
  <D.29141>:
  D.29139 = image->var_cache_fast;
  D.29135 = (long unsigned int) n;
  D.29136 = D.29135 * 8;
  D.29143 = D.29139 + D.29136;
  *D.29143 = klass;
  <D.29138>:
  return;
  <D.29128>:
  if (is_mvar != 0) goto <D.29145>; else goto <D.29146>;
  <D.29145>:
  iftmp.253 = image->mvar_cache_slow;
  goto <D.29147>;
  <D.29146>:
  iftmp.253 = image->var_cache_slow;
  <D.29147>:
  ht = iftmp.253;
  if (ht == 0B) goto <D.29148>; else goto <D.29149>;
  <D.29148>:
  mono_loader_lock ();
  if (is_mvar != 0) goto <D.29151>; else goto <D.29152>;
  <D.29151>:
  iftmp.254 = image->mvar_cache_slow;
  goto <D.29153>;
  <D.29152>:
  iftmp.254 = image->var_cache_slow;
  <D.29153>:
  ht = iftmp.254;
  if (ht == 0B) goto <D.29154>; else goto <D.29155>;
  <D.29154>:
  ht = monoeg_g_hash_table_new (0B, 0B);
  mono_memory_barrier ();
  if (is_mvar != 0) goto <D.29156>; else goto <D.29157>;
  <D.29156>:
  image->mvar_cache_slow = ht;
  goto <D.29158>;
  <D.29157>:
  image->var_cache_slow = ht;
  <D.29158>:
  <D.29155>:
  mono_loader_unlock ();
  <D.29149>:
  D.29159 = (long int) n;
  D.29160 = (void *) D.29159;
  monoeg_g_hash_table_insert_replace (ht, D.29160, klass, 0);
}


mono_ptr_class_get (struct MonoType * type)
{
  struct GHashTable * D.29162;
  struct GHashTable * D.29165;
  struct MonoClass * D.29168;
  unsigned int classes_size.255;
  unsigned int classes_size.256;
  const char * D.29171;
  const char * D.29172;
  char * D.29173;
  struct MonoImage * D.29174;
  unsigned int D.29175;
  unsigned int D.29176;
  struct MonoClass * D.29177;
  unsigned char D.29178;
  struct MonoType * D.29179;
  struct MonoType * D.29180;
  struct MonoClass * result;
  struct MonoClass * el_class;
  struct MonoImage * image;
  char * name;

  el_class = mono_class_from_mono_type (type);
  image = el_class->image;
  mono_loader_lock ();
  D.29162 = image->ptr_cache;
  if (D.29162 == 0B) goto <D.29163>; else goto <D.29164>;
  <D.29163>:
  D.29165 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  image->ptr_cache = D.29165;
  <D.29164>:
  D.29162 = image->ptr_cache;
  result = monoeg_g_hash_table_lookup (D.29162, el_class);
  if (result != 0B) goto <D.29166>; else goto <D.29167>;
  <D.29166>:
  mono_loader_unlock ();
  D.29168 = result;
  return D.29168;
  <D.29167>:
  result = mono_image_alloc0 (image, 272);
  classes_size.255 = classes_size;
  classes_size.256 = classes_size.255 + 272;
  classes_size = classes_size.256;
  result->parent = 0B;
  D.29171 = el_class->name_space;
  result->name_space = D.29171;
  D.29172 = el_class->name;
  name = monoeg_g_strdup_printf ("%s*", D.29172);
  D.29173 = mono_image_strdup (image, name);
  result->name = D.29173;
  monoeg_g_free (name);
  mono_profiler_class_event (result, 0);
  D.29174 = el_class->image;
  result->image = D.29174;
  result->inited = 1;
  D.29175 = el_class->flags;
  D.29176 = D.29175 & 7;
  result->flags = D.29176;
  result->instance_size = 8;
  result->element_class = el_class;
  D.29177 = result->element_class;
  result->cast_class = D.29177;
  result->blittable = 1;
  result->byval_arg.type = 15;
  D.29178 = result->byval_arg.type;
  result->this_arg.type = D.29178;
  D.29177 = result->element_class;
  D.29179 = &D.29177->byval_arg;
  result->byval_arg.data.type = D.29179;
  D.29180 = result->byval_arg.data.type;
  result->this_arg.data.type = D.29180;
  result->this_arg.byref = 1;
  mono_class_setup_supertypes (result);
  D.29162 = image->ptr_cache;
  monoeg_g_hash_table_insert_replace (D.29162, el_class, result, 0);
  mono_loader_unlock ();
  mono_profiler_class_loaded (result, 0);
  D.29168 = result;
  return D.29168;
}


mono_class_from_mono_type (struct MonoType * type)
{
  unsigned char D.29182;
  int D.29183;
  struct MonoClass * D.29184;
  struct MonoClass * iftmp.257;
  struct MonoClass * D.29186;
  struct MonoClass * iftmp.258;
  struct MonoClass * iftmp.259;
  struct MonoClass * iftmp.260;
  struct MonoClass * iftmp.261;
  struct MonoClass * iftmp.262;
  struct MonoClass * iftmp.263;
  struct MonoClass * iftmp.264;
  struct MonoClass * iftmp.265;
  struct MonoClass * iftmp.266;
  struct MonoClass * iftmp.267;
  struct MonoClass * iftmp.268;
  struct MonoClass * iftmp.269;
  struct MonoClass * iftmp.270;
  struct MonoClass * iftmp.271;
  struct MonoClass * iftmp.272;
  struct MonoClass * iftmp.273;
  struct MonoClass * iftmp.274;
  struct MonoArrayType * D.29258;
  unsigned char D.29259;
  unsigned int D.29260;
  struct MonoClass * D.29261;
  struct MonoType * D.29262;
  struct MonoMethodSignature * D.29263;
  struct MonoGenericClass * D.29264;
  struct MonoGenericParam * D.29265;

  D.29182 = type->type;
  D.29183 = (int) D.29182;
  switch (D.29183) <default: <D.20921>, case 1: <D.20895>, case 2: <D.20896>, case 3: <D.20897>, case 4: <D.20898>, case 5: <D.20899>, case 6: <D.20900>, case 7: <D.20901>, case 8: <D.20902>, case 9: <D.20903>, case 10: <D.20906>, case 11: <D.20907>, case 12: <D.20908>, case 13: <D.20909>, case 14: <D.20910>, case 15: <D.20913>, case 17: <D.20917>, case 18: <D.20916>, case 19: <D.20919>, case 20: <D.20912>, case 21: <D.20918>, case 22: <D.20911>, case 24: <D.20904>, case 25: <D.20905>, case 27: <D.20914>, case 28: <D.20894>, case 29: <D.20915>, case 30: <D.20920>>
  <D.20894>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29187>; else goto <D.29188>;
  <D.29187>:
  iftmp.257 = type->data.klass;
  goto <D.29189>;
  <D.29188>:
  iftmp.257 = mono_defaults.object_class;
  <D.29189>:
  D.29184 = iftmp.257;
  return D.29184;
  <D.20895>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29191>; else goto <D.29192>;
  <D.29191>:
  iftmp.258 = type->data.klass;
  goto <D.29193>;
  <D.29192>:
  iftmp.258 = mono_defaults.void_class;
  <D.29193>:
  D.29184 = iftmp.258;
  return D.29184;
  <D.20896>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29195>; else goto <D.29196>;
  <D.29195>:
  iftmp.259 = type->data.klass;
  goto <D.29197>;
  <D.29196>:
  iftmp.259 = mono_defaults.boolean_class;
  <D.29197>:
  D.29184 = iftmp.259;
  return D.29184;
  <D.20897>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29199>; else goto <D.29200>;
  <D.29199>:
  iftmp.260 = type->data.klass;
  goto <D.29201>;
  <D.29200>:
  iftmp.260 = mono_defaults.char_class;
  <D.29201>:
  D.29184 = iftmp.260;
  return D.29184;
  <D.20898>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29203>; else goto <D.29204>;
  <D.29203>:
  iftmp.261 = type->data.klass;
  goto <D.29205>;
  <D.29204>:
  iftmp.261 = mono_defaults.sbyte_class;
  <D.29205>:
  D.29184 = iftmp.261;
  return D.29184;
  <D.20899>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29207>; else goto <D.29208>;
  <D.29207>:
  iftmp.262 = type->data.klass;
  goto <D.29209>;
  <D.29208>:
  iftmp.262 = mono_defaults.byte_class;
  <D.29209>:
  D.29184 = iftmp.262;
  return D.29184;
  <D.20900>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29211>; else goto <D.29212>;
  <D.29211>:
  iftmp.263 = type->data.klass;
  goto <D.29213>;
  <D.29212>:
  iftmp.263 = mono_defaults.int16_class;
  <D.29213>:
  D.29184 = iftmp.263;
  return D.29184;
  <D.20901>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29215>; else goto <D.29216>;
  <D.29215>:
  iftmp.264 = type->data.klass;
  goto <D.29217>;
  <D.29216>:
  iftmp.264 = mono_defaults.uint16_class;
  <D.29217>:
  D.29184 = iftmp.264;
  return D.29184;
  <D.20902>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29219>; else goto <D.29220>;
  <D.29219>:
  iftmp.265 = type->data.klass;
  goto <D.29221>;
  <D.29220>:
  iftmp.265 = mono_defaults.int32_class;
  <D.29221>:
  D.29184 = iftmp.265;
  return D.29184;
  <D.20903>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29223>; else goto <D.29224>;
  <D.29223>:
  iftmp.266 = type->data.klass;
  goto <D.29225>;
  <D.29224>:
  iftmp.266 = mono_defaults.uint32_class;
  <D.29225>:
  D.29184 = iftmp.266;
  return D.29184;
  <D.20904>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29227>; else goto <D.29228>;
  <D.29227>:
  iftmp.267 = type->data.klass;
  goto <D.29229>;
  <D.29228>:
  iftmp.267 = mono_defaults.int_class;
  <D.29229>:
  D.29184 = iftmp.267;
  return D.29184;
  <D.20905>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29231>; else goto <D.29232>;
  <D.29231>:
  iftmp.268 = type->data.klass;
  goto <D.29233>;
  <D.29232>:
  iftmp.268 = mono_defaults.uint_class;
  <D.29233>:
  D.29184 = iftmp.268;
  return D.29184;
  <D.20906>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29235>; else goto <D.29236>;
  <D.29235>:
  iftmp.269 = type->data.klass;
  goto <D.29237>;
  <D.29236>:
  iftmp.269 = mono_defaults.int64_class;
  <D.29237>:
  D.29184 = iftmp.269;
  return D.29184;
  <D.20907>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29239>; else goto <D.29240>;
  <D.29239>:
  iftmp.270 = type->data.klass;
  goto <D.29241>;
  <D.29240>:
  iftmp.270 = mono_defaults.uint64_class;
  <D.29241>:
  D.29184 = iftmp.270;
  return D.29184;
  <D.20908>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29243>; else goto <D.29244>;
  <D.29243>:
  iftmp.271 = type->data.klass;
  goto <D.29245>;
  <D.29244>:
  iftmp.271 = mono_defaults.single_class;
  <D.29245>:
  D.29184 = iftmp.271;
  return D.29184;
  <D.20909>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29247>; else goto <D.29248>;
  <D.29247>:
  iftmp.272 = type->data.klass;
  goto <D.29249>;
  <D.29248>:
  iftmp.272 = mono_defaults.double_class;
  <D.29249>:
  D.29184 = iftmp.272;
  return D.29184;
  <D.20910>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29251>; else goto <D.29252>;
  <D.29251>:
  iftmp.273 = type->data.klass;
  goto <D.29253>;
  <D.29252>:
  iftmp.273 = mono_defaults.string_class;
  <D.29253>:
  D.29184 = iftmp.273;
  return D.29184;
  <D.20911>:
  D.29186 = type->data.klass;
  if (D.29186 != 0B) goto <D.29255>; else goto <D.29256>;
  <D.29255>:
  iftmp.274 = type->data.klass;
  goto <D.29257>;
  <D.29256>:
  iftmp.274 = mono_defaults.typed_reference_class;
  <D.29257>:
  D.29184 = iftmp.274;
  return D.29184;
  <D.20912>:
  D.29258 = type->data.array;
  D.29259 = D.29258->rank;
  D.29260 = (unsigned int) D.29259;
  D.29258 = type->data.array;
  D.29261 = D.29258->eklass;
  D.29184 = mono_bounded_array_class_get (D.29261, D.29260, 1);
  return D.29184;
  <D.20913>:
  D.29262 = type->data.type;
  D.29184 = mono_ptr_class_get (D.29262);
  return D.29184;
  <D.20914>:
  D.29263 = type->data.method;
  D.29184 = mono_fnptr_class_get (D.29263);
  return D.29184;
  <D.20915>:
  D.29186 = type->data.klass;
  D.29184 = mono_array_class_get (D.29186, 1);
  return D.29184;
  <D.20916>:
  <D.20917>:
  D.29184 = type->data.klass;
  return D.29184;
  <D.20918>:
  D.29264 = type->data.generic_class;
  D.29184 = mono_generic_class_get_class (D.29264);
  return D.29184;
  <D.20919>:
  D.29265 = type->data.generic_param;
  D.29184 = mono_class_from_generic_parameter (D.29265, 0B, 0);
  return D.29184;
  <D.20920>:
  D.29265 = type->data.generic_param;
  D.29184 = mono_class_from_generic_parameter (D.29265, 0B, 1);
  return D.29184;
  <D.20921>:
  D.29182 = type->type;
  D.29183 = (int) D.29182;
  monoeg_g_log (0B, 16, "mono_class_from_mono_type: implement me 0x%02x\n", D.29183);
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6305);
  D.29184 = 0B;
  return D.29184;
}


mono_fnptr_class_get (struct MonoMethodSignature * sig)
{
  struct GHashTable * ptr_hash.275;
  struct GHashTable * ptr_hash.276;
  struct MonoClass * D.29273;
  struct MonoImage * D.29274;
  struct MonoClass * D.29275;
  unsigned char D.29276;
  struct MonoMethodSignature * D.29277;
  struct MonoClass * result;
  static struct GHashTable * ptr_hash = 0B;

  mono_loader_lock ();
  ptr_hash.275 = ptr_hash;
  if (ptr_hash.275 == 0B) goto <D.29268>; else goto <D.29269>;
  <D.29268>:
  ptr_hash.276 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  ptr_hash = ptr_hash.276;
  <D.29269>:
  ptr_hash.275 = ptr_hash;
  result = monoeg_g_hash_table_lookup (ptr_hash.275, sig);
  if (result != 0B) goto <D.29271>; else goto <D.29272>;
  <D.29271>:
  mono_loader_unlock ();
  D.29273 = result;
  return D.29273;
  <D.29272>:
  result = monoeg_malloc0 (272);
  result->parent = 0B;
  result->name_space = "System";
  result->name = "MonoFNPtrFakeClass";
  mono_profiler_class_event (result, 0);
  D.29274 = mono_defaults.corlib;
  result->image = D.29274;
  result->inited = 1;
  result->flags = 0;
  result->instance_size = 8;
  result->element_class = result;
  D.29275 = result->element_class;
  result->cast_class = D.29275;
  result->blittable = 1;
  result->byval_arg.type = 27;
  D.29276 = result->byval_arg.type;
  result->this_arg.type = D.29276;
  result->byval_arg.data.method = sig;
  D.29277 = result->byval_arg.data.method;
  result->this_arg.data.method = D.29277;
  result->this_arg.byref = 1;
  result->blittable = 1;
  mono_class_setup_supertypes (result);
  ptr_hash.275 = ptr_hash;
  monoeg_g_hash_table_insert_replace (ptr_hash.275, sig, result, 0);
  mono_loader_unlock ();
  mono_profiler_class_loaded (result, 0);
  D.29273 = result;
  return D.29273;
}


mono_bounded_array_class_get (struct MonoClass * eclass, guint32 rank, gboolean bounded)
{
  _Bool D.29279;
  long int D.29280;
  long int D.29281;
  _Bool D.29286;
  _Bool D.29287;
  _Bool D.29288;
  union mono_mutex_t * D.29291;
  _Bool D.29294;
  long int D.29295;
  long int D.29296;
  struct GHashTable * D.29299;
  struct GHashTable * D.29302;
  _Bool D.29305;
  long int D.29306;
  long int D.29307;
  struct MonoClass * D.29312;
  struct GHashTable * D.29314;
  struct GHashTable * D.29317;
  unsigned char D.29320;
  unsigned int D.29321;
  unsigned char D.29324;
  int D.29325;
  int iftmp.277;
  _Bool D.29327;
  _Bool D.29328;
  _Bool D.29329;
  struct MonoAssembly * D.29337;
  unsigned char D.29339;
  const char * D.29341;
  int D.20968;
  int iftmp.278;
  int D.20967;
  const char[9] * D.29346;
  unsigned char D.29347;
  int D.29348;
  unsigned char D.29349;
  int D.29350;
  _Bool D.29351;
  _Bool D.29352;
  _Bool D.29353;
  const unsigned char * D.29356;
  unsigned char D.29357;
  int D.29358;
  const unsigned char * D.29359;
  unsigned char D.29360;
  int D.29361;
  _Bool D.29362;
  _Bool D.29363;
  const unsigned char * D.29366;
  unsigned char D.29367;
  int D.29368;
  const unsigned char * D.29369;
  unsigned char D.29370;
  int D.29371;
  _Bool D.29372;
  _Bool D.29373;
  const unsigned char * D.29376;
  unsigned char D.29377;
  int D.29378;
  const unsigned char * D.29379;
  unsigned char D.29380;
  int D.29381;
  unsigned char D.29384;
  unsigned char D.29385;
  const char * D.29388;
  const char * D.29389;
  long unsigned int D.29390;
  unsigned int nsize.279;
  unsigned int D.29392;
  unsigned int D.29393;
  long unsigned int D.29394;
  long unsigned int D.29395;
  sizetype D.29396;
  char * D.29397;
  unsigned int D.29400;
  long unsigned int D.29401;
  sizetype D.29402;
  char * D.29403;
  sizetype D.29406;
  char * D.29407;
  unsigned int bounded.280;
  unsigned int D.29409;
  sizetype D.29410;
  char * D.29411;
  unsigned int D.29412;
  sizetype D.29413;
  char * D.29414;
  char * D.29415;
  unsigned int classes_size.281;
  unsigned int classes_size.282;
  struct MonoClass * D.29418;
  int D.29419;
  unsigned char D.29420;
  _Bool D.29421;
  _Bool D.29422;
  _Bool D.29423;
  unsigned char D.29429;
  unsigned char D.29430;
  struct MonoType * D.29432;
  unsigned int D.29436;
  unsigned char D.29438;
  int iftmp.283;
  _Bool D.29444;
  long int D.29445;
  long int D.29446;
  int D.29449;
  struct MonoGenericClass * D.29450;
  unsigned char D.29453;
  unsigned char D.29456;
  int iftmp.284;
  struct MonoType * D.29463;
  int D.29464;
  unsigned char D.29466;
  unsigned char D.29467;
  unsigned char D.29468;
  <unnamed-unsigned:1> D.29469;
  unsigned char D.29470;
  struct MonoClass * D.29473;
  struct MonoClass * D.29475;
  unsigned char D.29476;
  int D.29477;
  struct MonoClass * D.29478;
  struct MonoClass * D.29479;
  struct MonoClass * D.29480;
  struct MonoClass * D.29481;
  unsigned char D.29485;
  struct MonoGenericContainer * D.29489;
  _Bool D.29494;
  long int D.29495;
  long int D.29496;
  _Bool D.29504;
  long int D.29505;
  long int D.29506;
  struct MonoImage * image;
  struct MonoClass * class;
  struct MonoClass * parent;
  struct GSList * list;
  struct GSList * rootlist;
  int nsize;
  char * name;
  gboolean corlib_type;

  parent = 0B;
  rootlist = 0B;
  corlib_type = 0;
  D.29279 = rank > 255;
  D.29280 = (long int) D.29279;
  D.29281 = __builtin_expect (D.29280, 0);
  if (D.29281 != 0) goto <D.29282>; else goto <D.29283>;
  <D.29282>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6386, "rank <= 255");
  <D.29283>:
  if (rank > 1) goto <D.29284>; else goto <D.29285>;
  <D.29284>:
  bounded = 0;
  <D.29285>:
  image = eclass->image;
  D.29286 = rank == 1;
  D.29287 = bounded == 0;
  D.29288 = D.29286 & D.29287;
  if (D.29288 != 0) goto <D.29289>; else goto <D.29290>;
  <D.29289>:
  {
    int ret;

    D.29291 = &image->szarray_cache_lock.mutex;
    ret = pthread_mutex_lock (D.29291);
    if (ret != 0) goto <D.29292>; else goto <D.29293>;
    <D.29292>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
    <D.29293>:
    D.29294 = ret != 0;
    D.29295 = (long int) D.29294;
    D.29296 = __builtin_expect (D.29295, 0);
    if (D.29296 != 0) goto <D.29297>; else goto <D.29298>;
    <D.29297>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6400, "ret == 0");
    <D.29298>:
  }
  D.29299 = image->szarray_cache;
  if (D.29299 == 0B) goto <D.29300>; else goto <D.29301>;
  <D.29300>:
  D.29302 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  image->szarray_cache = D.29302;
  <D.29301>:
  D.29299 = image->szarray_cache;
  class = monoeg_g_hash_table_lookup (D.29299, eclass);
  {
    int ret;

    D.29291 = &image->szarray_cache_lock.mutex;
    ret = pthread_mutex_unlock (D.29291);
    if (ret != 0) goto <D.29303>; else goto <D.29304>;
    <D.29303>:
    monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
    <D.29304>:
    D.29305 = ret != 0;
    D.29306 = (long int) D.29305;
    D.29307 = __builtin_expect (D.29306, 0);
    if (D.29307 != 0) goto <D.29308>; else goto <D.29309>;
    <D.29308>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6404, "ret == 0");
    <D.29309>:
  }
  if (class != 0B) goto <D.29310>; else goto <D.29311>;
  <D.29310>:
  D.29312 = class;
  return D.29312;
  <D.29311>:
  mono_loader_lock ();
  goto <D.29313>;
  <D.29290>:
  mono_loader_lock ();
  D.29314 = image->array_cache;
  if (D.29314 == 0B) goto <D.29315>; else goto <D.29316>;
  <D.29315>:
  D.29317 = monoeg_g_hash_table_new (mono_aligned_addr_hash, 0B);
  image->array_cache = D.29317;
  <D.29316>:
  D.29314 = image->array_cache;
  list = monoeg_g_hash_table_lookup (D.29314, eclass);
  rootlist = list;
  if (rootlist != 0B) goto <D.29318>; else goto <D.29319>;
  <D.29318>:
  goto <D.20958>;
  <D.20957>:
  class = list->data;
  D.29320 = class->rank;
  D.29321 = (unsigned int) D.29320;
  if (D.29321 == rank) goto <D.29322>; else goto <D.29323>;
  <D.29322>:
  D.29324 = class->byval_arg.type;
  D.29325 = (int) D.29324;
  D.29327 = rank > 1;
  D.29328 = bounded != 0;
  D.29329 = D.29327 | D.29328;
  if (D.29329 != 0) goto <D.29330>; else goto <D.29331>;
  <D.29330>:
  iftmp.277 = 20;
  goto <D.29332>;
  <D.29331>:
  iftmp.277 = 29;
  <D.29332>:
  if (D.29325 == iftmp.277) goto <D.29333>; else goto <D.29334>;
  <D.29333>:
  mono_loader_unlock ();
  D.29312 = class;
  return D.29312;
  <D.29334>:
  <D.29323>:
  list = list->next;
  <D.20958>:
  if (list != 0B) goto <D.20957>; else goto <D.20959>;
  <D.20959>:
  <D.29319>:
  <D.29313>:
  D.29337 = image->assembly;
  if (D.29337 != 0B) goto <D.29338>; else goto <D.29335>;
  <D.29338>:
  D.29337 = image->assembly;
  D.29339 = D.29337->dynamic;
  if (D.29339 != 0) goto <D.29340>; else goto <D.29335>;
  <D.29340>:
  D.29341 = image->assembly_name;
  if (D.29341 != 0B) goto <D.29342>; else goto <D.29335>;
  <D.29342>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = image->assembly_name;
      D.29346 = "mscorlib";
      D.29347 = MEM[(const unsigned char *)D.29346];
      D.29348 = (int) D.29347;
      D.29349 = *__s2;
      D.29350 = (int) D.29349;
      __result = D.29348 - D.29350;
      {
        D.29351 = __s2_len != 0;
        D.29352 = __result == 0;
        D.29353 = D.29351 & D.29352;
        if (D.29353 != 0) goto <D.29354>; else goto <D.29355>;
        <D.29354>:
        D.29356 = &MEM[(void *)"mscorlib" + 1B];
        D.29357 = *D.29356;
        D.29358 = (int) D.29357;
        D.29359 = __s2 + 1;
        D.29360 = *D.29359;
        D.29361 = (int) D.29360;
        __result = D.29358 - D.29361;
        D.29362 = __s2_len > 1;
        D.29352 = __result == 0;
        D.29363 = D.29362 & D.29352;
        if (D.29363 != 0) goto <D.29364>; else goto <D.29365>;
        <D.29364>:
        D.29366 = &MEM[(void *)"mscorlib" + 2B];
        D.29367 = *D.29366;
        D.29368 = (int) D.29367;
        D.29369 = __s2 + 2;
        D.29370 = *D.29369;
        D.29371 = (int) D.29370;
        __result = D.29368 - D.29371;
        D.29372 = __s2_len > 2;
        D.29352 = __result == 0;
        D.29373 = D.29372 & D.29352;
        if (D.29373 != 0) goto <D.29374>; else goto <D.29375>;
        <D.29374>:
        D.29376 = &MEM[(void *)"mscorlib" + 3B];
        D.29377 = *D.29376;
        D.29378 = (int) D.29377;
        D.29379 = __s2 + 3;
        D.29380 = *D.29379;
        D.29381 = (int) D.29380;
        __result = D.29378 - D.29381;
        <D.29375>:
        <D.29365>:
        <D.29355>:
      }
      D.20967 = __result;
    }
    iftmp.278 = -D.20967;
    goto <D.29382>;
    <D.29345>:
    D.29341 = image->assembly_name;
    iftmp.278 = __builtin_strcmp (D.29341, "mscorlib");
    <D.29382>:
    D.20968 = iftmp.278;
  }
  if (D.20968 == 0) goto <D.29383>; else goto <D.29335>;
  <D.29383>:
  parent = mono_class_from_name (image, "System", "Array");
  corlib_type = 1;
  goto <D.29336>;
  <D.29335>:
  parent = mono_defaults.array_class;
  D.29384 = BIT_FIELD_REF <*parent, 8, 256>;
  D.29385 = D.29384 & 1;
  if (D.29385 == 0) goto <D.29386>; else goto <D.29387>;
  <D.29386>:
  mono_class_init (parent);
  <D.29387>:
  <D.29336>:
  class = mono_image_alloc0 (image, 272);
  class->image = image;
  D.29388 = eclass->name_space;
  class->name_space = D.29388;
  D.29389 = eclass->name;
  D.29390 = strlen (D.29389);
  nsize = (int) D.29390;
  nsize.279 = (unsigned int) nsize;
  D.29392 = nsize.279 + rank;
  D.29393 = D.29392 + 3;
  D.29394 = (long unsigned int) D.29393;
  name = monoeg_malloc (D.29394);
  D.29395 = (long unsigned int) nsize;
  D.29389 = eclass->name;
  memcpy (name, D.29389, D.29395);
  D.29396 = (sizetype) nsize;
  D.29397 = name + D.29396;
  *D.29397 = 91;
  if (rank > 1) goto <D.29398>; else goto <D.29399>;
  <D.29398>:
  D.29400 = rank + 4294967295;
  D.29401 = (long unsigned int) D.29400;
  D.29396 = (sizetype) nsize;
  D.29402 = D.29396 + 1;
  D.29403 = name + D.29402;
  memset (D.29403, 44, D.29401);
  <D.29399>:
  if (bounded != 0) goto <D.29404>; else goto <D.29405>;
  <D.29404>:
  nsize.279 = (unsigned int) nsize;
  D.29392 = nsize.279 + rank;
  D.29406 = (sizetype) D.29392;
  D.29407 = name + D.29406;
  *D.29407 = 42;
  <D.29405>:
  nsize.279 = (unsigned int) nsize;
  D.29392 = nsize.279 + rank;
  bounded.280 = (unsigned int) bounded;
  D.29409 = D.29392 + bounded.280;
  D.29410 = (sizetype) D.29409;
  D.29411 = name + D.29410;
  *D.29411 = 93;
  nsize.279 = (unsigned int) nsize;
  D.29392 = nsize.279 + rank;
  bounded.280 = (unsigned int) bounded;
  D.29409 = D.29392 + bounded.280;
  D.29412 = D.29409 + 1;
  D.29413 = (sizetype) D.29412;
  D.29414 = name + D.29413;
  *D.29414 = 0;
  D.29415 = mono_image_strdup (image, name);
  class->name = D.29415;
  monoeg_g_free (name);
  mono_profiler_class_event (class, 0);
  classes_size.281 = classes_size;
  classes_size.282 = classes_size.281 + 272;
  classes_size = classes_size.282;
  class->type_token = 0;
  class->flags = 8449;
  class->parent = parent;
  D.29418 = class->parent;
  D.29419 = mono_class_instance_size (D.29418);
  class->instance_size = D.29419;
  D.29420 = eclass->byval_arg.type;
  D.29421 = D.29420 == 22;
  D.29422 = D.29420 == 1;
  D.29423 = D.29421 | D.29422;
  if (D.29423 != 0) goto <D.29424>; else goto <D.29425>;
  <D.29424>:
  mono_class_set_failure (class, 7, 0B);
  goto <D.29426>;
  <D.29425>:
  D.29429 = BIT_FIELD_REF <*eclass, 8, 256>;
  D.29430 = D.29429 & 16;
  if (D.29430 != 0) goto <D.29431>; else goto <D.29427>;
  <D.29431>:
  D.29432 = mono_class_enum_basetype (eclass);
  if (D.29432 == 0B) goto <D.29433>; else goto <D.29427>;
  <D.29433>:
  D.29436 = eclass->ref_info_handle;
  if (D.29436 == 0) goto <D.29434>; else goto <D.29437>;
  <D.29437>:
  D.29429 = BIT_FIELD_REF <*eclass, 8, 256>;
  D.29438 = D.29429 & 128;
  if (D.29438 != 0) goto <D.29434>; else goto <D.29435>;
  <D.29434>:
  monoeg_g_log (0B, 16, "Only incomplete TypeBuilder objects are allowed to be an enum without base_type");
  D.29436 = eclass->ref_info_handle;
  if (D.29436 == 0) goto <D.29440>; else goto <D.29443>;
  <D.29443>:
  D.29429 = BIT_FIELD_REF <*eclass, 8, 256>;
  D.29438 = D.29429 & 128;
  if (D.29438 != 0) goto <D.29440>; else goto <D.29441>;
  <D.29440>:
  iftmp.283 = 1;
  goto <D.29442>;
  <D.29441>:
  iftmp.283 = 0;
  <D.29442>:
  D.29444 = iftmp.283 != 0;
  D.29445 = (long int) D.29444;
  D.29446 = __builtin_expect (D.29445, 0);
  if (D.29446 != 0) goto <D.29447>; else goto <D.29448>;
  <D.29447>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6469, "eclass->ref_info_handle && !eclass->wastypebuilder");
  <D.29448>:
  <D.29435>:
  class->sizes.element_size = -1;
  goto <D.29428>;
  <D.29427>:
  D.29449 = mono_class_array_element_size (eclass);
  class->sizes.element_size = D.29449;
  <D.29428>:
  <D.29426>:
  mono_class_setup_supertypes (class);
  D.29450 = eclass->generic_class;
  if (D.29450 != 0B) goto <D.29451>; else goto <D.29452>;
  <D.29451>:
  mono_class_init (eclass);
  <D.29452>:
  D.29429 = BIT_FIELD_REF <*eclass, 8, 256>;
  D.29453 = D.29429 & 4;
  if (D.29453 == 0) goto <D.29454>; else goto <D.29455>;
  <D.29454>:
  mono_class_setup_fields (eclass);
  <D.29455>:
  D.29456 = eclass->exception_type;
  if (D.29456 != 0) goto <D.29457>; else goto <D.29458>;
  <D.29457>:
  mono_class_set_failure (class, 7, 0B);
  <D.29458>:
  D.29463 = &eclass->byval_arg;
  D.29464 = mono_type_is_reference (D.29463);
  if (D.29464 != 0) goto <D.29460>; else goto <D.29465>;
  <D.29465>:
  D.29466 = BIT_FIELD_REF <*eclass, 8, 280>;
  D.29467 = D.29466 & 8;
  if (D.29467 != 0) goto <D.29460>; else goto <D.29461>;
  <D.29460>:
  iftmp.284 = 1;
  goto <D.29462>;
  <D.29461>:
  iftmp.284 = 0;
  <D.29462>:
  D.29468 = (unsigned char) iftmp.284;
  D.29469 = (<unnamed-unsigned:1>) D.29468;
  class->has_references = D.29469;
  D.29470 = (unsigned char) rank;
  class->rank = D.29470;
  D.29429 = BIT_FIELD_REF <*eclass, 8, 256>;
  D.29430 = D.29429 & 16;
  if (D.29430 != 0) goto <D.29471>; else goto <D.29472>;
  <D.29471>:
  D.29473 = eclass->element_class;
  class->cast_class = D.29473;
  goto <D.29474>;
  <D.29472>:
  class->cast_class = eclass;
  <D.29474>:
  D.29475 = class->cast_class;
  D.29476 = D.29475->byval_arg.type;
  D.29477 = (int) D.29476;
  switch (D.29477) <default: <D.29482>, case 4: <D.20969>, case 7: <D.20971>, case 9: <D.20972>, case 11: <D.20973>, case 24: <D.20974>, case 25: <D.20975>>
  <D.20969>:
  D.29478 = mono_defaults.byte_class;
  class->cast_class = D.29478;
  goto <D.20970>;
  <D.20971>:
  D.29479 = mono_defaults.int16_class;
  class->cast_class = D.29479;
  goto <D.20970>;
  <D.20972>:
  D.29480 = mono_defaults.int32_class;
  class->cast_class = D.29480;
  goto <D.20970>;
  <D.20973>:
  <D.20974>:
  <D.20975>:
  D.29481 = mono_defaults.int64_class;
  class->cast_class = D.29481;
  goto <D.20970>;
  <D.29482>:
  <D.20970>:
  class->element_class = eclass;
  D.29327 = rank > 1;
  D.29328 = bounded != 0;
  D.29329 = D.29327 | D.29328;
  if (D.29329 != 0) goto <D.29483>; else goto <D.29484>;
  <D.29483>:
  {
    struct MonoArrayType * at;

    at = mono_image_alloc0 (image, 32);
    class->byval_arg.type = 20;
    class->byval_arg.data.array = at;
    at->eklass = eclass;
    D.29485 = (unsigned char) rank;
    at->rank = D.29485;
  }
  goto <D.29486>;
  <D.29484>:
  class->byval_arg.type = 29;
  class->byval_arg.data.klass = eclass;
  <D.29486>:
  class->this_arg = class->byval_arg;
  class->this_arg.byref = 1;
  if (corlib_type != 0) goto <D.29487>; else goto <D.29488>;
  <D.29487>:
  class->inited = 1;
  <D.29488>:
  D.29489 = eclass->generic_container;
  class->generic_container = D.29489;
  D.29286 = rank == 1;
  D.29287 = bounded == 0;
  D.29288 = D.29286 & D.29287;
  if (D.29288 != 0) goto <D.29490>; else goto <D.29491>;
  <D.29490>:
  {
    struct MonoClass * prev_class;

    {
      int ret;

      D.29291 = &image->szarray_cache_lock.mutex;
      ret = pthread_mutex_lock (D.29291);
      if (ret != 0) goto <D.29492>; else goto <D.29493>;
      <D.29492>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_lock result %d", ret);
      <D.29493>:
      D.29494 = ret != 0;
      D.29495 = (long int) D.29494;
      D.29496 = __builtin_expect (D.29495, 0);
      if (D.29496 != 0) goto <D.29497>; else goto <D.29498>;
      <D.29497>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6541, "ret == 0");
      <D.29498>:
    }
    D.29299 = image->szarray_cache;
    prev_class = monoeg_g_hash_table_lookup (D.29299, eclass);
    if (prev_class != 0B) goto <D.29499>; else goto <D.29500>;
    <D.29499>:
    class = prev_class;
    goto <D.29501>;
    <D.29500>:
    D.29299 = image->szarray_cache;
    monoeg_g_hash_table_insert_replace (D.29299, eclass, class, 0);
    <D.29501>:
    {
      int ret;

      D.29291 = &image->szarray_cache_lock.mutex;
      ret = pthread_mutex_unlock (D.29291);
      if (ret != 0) goto <D.29502>; else goto <D.29503>;
      <D.29502>:
      monoeg_g_log (0B, 16, "Bad call to mono_mutex_unlock result %d", ret);
      <D.29503>:
      D.29504 = ret != 0;
      D.29505 = (long int) D.29504;
      D.29506 = __builtin_expect (D.29505, 0);
      if (D.29506 != 0) goto <D.29507>; else goto <D.29508>;
      <D.29507>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6548, "ret == 0");
      <D.29508>:
    }
  }
  goto <D.29509>;
  <D.29491>:
  list = monoeg_g_slist_append (rootlist, class);
  D.29314 = image->array_cache;
  monoeg_g_hash_table_insert_replace (D.29314, eclass, list, 0);
  <D.29509>:
  mono_loader_unlock ();
  mono_profiler_class_loaded (class, 0);
  D.29312 = class;
  return D.29312;
}


mono_array_class_get (struct MonoClass * eclass, guint32 rank)
{
  struct MonoClass * D.29511;

  D.29511 = mono_bounded_array_class_get (eclass, rank, 0);
  return D.29511;
}


mono_class_instance_size (struct MonoClass * klass)
{
  unsigned char D.29513;
  unsigned char D.29514;
  int32_t D.29517;

  D.29513 = BIT_FIELD_REF <*klass, 8, 256>;
  D.29514 = D.29513 & 4;
  if (D.29514 == 0) goto <D.29515>; else goto <D.29516>;
  <D.29515>:
  mono_class_init (klass);
  <D.29516>:
  D.29517 = klass->instance_size;
  return D.29517;
}


mono_class_min_align (struct MonoClass * klass)
{
  unsigned char D.29519;
  unsigned char D.29520;
  int32_t D.29523;
  unsigned char D.29524;

  D.29519 = BIT_FIELD_REF <*klass, 8, 256>;
  D.29520 = D.29519 & 4;
  if (D.29520 == 0) goto <D.29521>; else goto <D.29522>;
  <D.29521>:
  mono_class_init (klass);
  <D.29522>:
  D.29524 = klass->min_align;
  D.29523 = (int32_t) D.29524;
  return D.29523;
}


mono_class_value_size (struct MonoClass * klass, guint32 * align)
{
  int D.29526;
  unsigned int D.29527;
  unsigned int D.29528;
  unsigned char D.29531;
  unsigned int D.29532;
  int32_t D.29533;
  gint32 size;

  D.29526 = mono_class_instance_size (klass);
  D.29527 = (unsigned int) D.29526;
  D.29528 = D.29527 + 4294967280;
  size = (gint32) D.29528;
  if (align != 0B) goto <D.29529>; else goto <D.29530>;
  <D.29529>:
  D.29531 = klass->min_align;
  D.29532 = (unsigned int) D.29531;
  *align = D.29532;
  <D.29530>:
  D.29533 = size;
  return D.29533;
}


mono_class_data_size (struct MonoClass * klass)
{
  unsigned char D.29535;
  unsigned char D.29536;
  unsigned char D.29539;
  unsigned char D.29540;
  unsigned char D.29543;
  int32_t D.29546;

  D.29535 = BIT_FIELD_REF <*klass, 8, 256>;
  D.29536 = D.29535 & 1;
  if (D.29536 == 0) goto <D.29537>; else goto <D.29538>;
  <D.29537>:
  mono_class_init (klass);
  <D.29538>:
  D.29539 = BIT_FIELD_REF <*klass, 8, 288>;
  D.29540 = D.29539 & 32;
  if (D.29540 == 0) goto <D.29541>; else goto <D.29542>;
  <D.29541>:
  mono_class_setup_fields_locking (klass);
  <D.29542>:
  D.29543 = klass->rank;
  if (D.29543 != 0) goto <D.29544>; else goto <D.29545>;
  <D.29544>:
  D.29546 = 0;
  return D.29546;
  <D.29545>:
  D.29546 = klass->sizes.class_size;
  return D.29546;
}


mono_class_get_field (struct MonoClass * class, guint32 field_token)
{
  int field_token.285;
  unsigned int D.29549;
  _Bool D.29550;
  long int D.29551;
  long int D.29552;
  struct MonoClassField * D.29555;
  int D.29556;
  int idx;

  field_token.285 = (int) field_token;
  idx = field_token.285 & 16777215;
  D.29549 = field_token & 4278190080;
  D.29550 = D.29549 != 67108864;
  D.29551 = (long int) D.29550;
  D.29552 = __builtin_expect (D.29551, 0);
  if (D.29552 != 0) goto <D.29553>; else goto <D.29554>;
  <D.29553>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6707, "mono_metadata_token_code (field_token) == MONO_TOKEN_FIELD_DEF");
  <D.29554>:
  D.29556 = idx + -1;
  D.29555 = mono_class_get_field_idx (class, D.29556);
  return D.29555;
}


mono_class_get_field_idx (struct MonoClass * class, int idx)
{
  unsigned char D.29558;
  struct MonoClassField * D.29561;
  struct MonoImage * D.29562;
  unsigned char D.29563;
  unsigned char D.29564;
  struct MonoTableInfo * D.29567;
  unsigned int D.29568;
  struct MonoClassField * D.29569;
  long unsigned int D.29570;
  long unsigned int D.29571;
  struct MonoClassField * D.29572;
  const char * D.29573;
  unsigned int i.286;
  unsigned int D.29577;
  unsigned int idx.287;
  unsigned int D.29581;
  unsigned int D.29584;
  unsigned int D.29587;
  long unsigned int D.29588;
  long unsigned int D.29589;

  mono_class_setup_fields_locking (class);
  D.29558 = class->exception_type;
  if (D.29558 != 0) goto <D.29559>; else goto <D.29560>;
  <D.29559>:
  D.29561 = 0B;
  return D.29561;
  <D.29560>:
  goto <D.21008>;
  <D.21007>:
  D.29562 = class->image;
  D.29563 = BIT_FIELD_REF <*D.29562, 8, 224>;
  D.29564 = D.29563 & 32;
  if (D.29564 != 0) goto <D.29565>; else goto <D.29566>;
  <D.29565>:
  {
    const char * name;
    int i;

    D.29562 = class->image;
    D.29567 = &D.29562->tables[4];
    D.29568 = mono_metadata_decode_row_col (D.29567, idx, 1);
    D.29562 = class->image;
    name = mono_metadata_string_heap (D.29562, D.29568);
    i = 0;
    goto <D.21005>;
    <D.21004>:
    D.29569 = class->fields;
    D.29570 = (long unsigned int) i;
    D.29571 = D.29570 * 32;
    D.29572 = D.29569 + D.29571;
    D.29573 = mono_field_get_name (D.29572);
    if (D.29573 == name) goto <D.29574>; else goto <D.29575>;
    <D.29574>:
    D.29569 = class->fields;
    D.29570 = (long unsigned int) i;
    D.29571 = D.29570 * 32;
    D.29561 = D.29569 + D.29571;
    return D.29561;
    <D.29575>:
    i = i + 1;
    <D.21005>:
    i.286 = (unsigned int) i;
    D.29577 = class->field.count;
    if (i.286 < D.29577) goto <D.21004>; else goto <D.21006>;
    <D.21006>:
    monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6680);
  }
  <D.29566>:
  D.29577 = class->field.count;
  if (D.29577 != 0) goto <D.29578>; else goto <D.29579>;
  <D.29578>:
  idx.287 = (unsigned int) idx;
  D.29581 = class->field.first;
  if (idx.287 >= D.29581) goto <D.29582>; else goto <D.29583>;
  <D.29582>:
  idx.287 = (unsigned int) idx;
  D.29581 = class->field.first;
  D.29577 = class->field.count;
  D.29584 = D.29581 + D.29577;
  if (idx.287 < D.29584) goto <D.29585>; else goto <D.29586>;
  <D.29585>:
  D.29569 = class->fields;
  idx.287 = (unsigned int) idx;
  D.29581 = class->field.first;
  D.29587 = idx.287 - D.29581;
  D.29588 = (long unsigned int) D.29587;
  D.29589 = D.29588 * 32;
  D.29561 = D.29569 + D.29589;
  return D.29561;
  <D.29586>:
  <D.29583>:
  <D.29579>:
  class = class->parent;
  <D.21008>:
  if (class != 0B) goto <D.21007>; else goto <D.21009>;
  <D.21009>:
  D.29561 = 0B;
  return D.29561;
}


mono_class_get_field_from_name (struct MonoClass * klass, const char * name)
{
  struct MonoClassField * D.29591;

  D.29591 = mono_class_get_field_from_name_full (klass, name, 0B);
  return D.29591;
}


mono_class_get_field_from_name_full (struct MonoClass * klass, const char * name, struct MonoType * type)
{
  unsigned char D.29593;
  struct MonoClassField * D.29596;
  struct MonoClassField * D.29597;
  long unsigned int D.29598;
  long unsigned int D.29599;
  int D.21034;
  const char * D.29600;
  struct MonoClassField * D.29605;
  int D.29606;
  unsigned int i.288;
  unsigned int D.29610;
  int i;

  mono_class_setup_fields_locking (klass);
  D.29593 = klass->exception_type;
  if (D.29593 != 0) goto <D.29594>; else goto <D.29595>;
  <D.29594>:
  D.29596 = 0B;
  return D.29596;
  <D.29595>:
  goto <D.21041>;
  <D.21040>:
  i = 0;
  goto <D.21038>;
  <D.21037>:
  {
    struct MonoClassField * field;

    D.29597 = klass->fields;
    D.29598 = (long unsigned int) i;
    D.29599 = D.29598 * 32;
    field = D.29597 + D.29599;
    {
      size_t __s1_len;
      size_t __s2_len;

      D.29600 = mono_field_get_name (field);
      D.21034 = __builtin_strcmp (name, D.29600);
    }
    if (D.21034 != 0) goto <D.29601>; else goto <D.29602>;
    <D.29601>:
    // predicted unlikely by continue predictor.
    goto <D.21035>;
    <D.29602>:
    if (type != 0B) goto <D.29603>; else goto <D.29604>;
    <D.29603>:
    {
      struct MonoType * field_type;

      D.29605 = mono_metadata_get_corresponding_field_from_generic_type_definition (field);
      field_type = D.29605->type;
      D.29606 = mono_metadata_type_equal_full (type, field_type, 1);
      if (D.29606 == 0) goto <D.29607>; else goto <D.29608>;
      <D.29607>:
      // predicted unlikely by continue predictor.
      goto <D.21035>;
      <D.29608>:
    }
    <D.29604>:
    D.29596 = field;
    return D.29596;
  }
  <D.21035>:
  i = i + 1;
  <D.21038>:
  i.288 = (unsigned int) i;
  D.29610 = klass->field.count;
  if (i.288 < D.29610) goto <D.21037>; else goto <D.21039>;
  <D.21039>:
  klass = klass->parent;
  <D.21041>:
  if (klass != 0B) goto <D.21040>; else goto <D.21042>;
  <D.21042>:
  D.29596 = 0B;
  return D.29596;
}


mono_class_get_field_token (struct MonoClassField * field)
{
  struct MonoClassField * D.29612;
  uint32_t D.29615;
  long unsigned int D.29616;
  long unsigned int D.29617;
  struct MonoClassField * D.29618;
  unsigned int D.29621;
  unsigned int i.289;
  unsigned int D.29623;
  unsigned int D.29624;
  struct MonoImage * D.29625;
  unsigned char D.29626;
  unsigned char D.29627;
  unsigned int idx.290;
  unsigned int D.29631;
  int D.29632;
  unsigned int D.29633;
  struct MonoClass * klass;
  int i;

  klass = field->parent;
  mono_class_setup_fields_locking (klass);
  goto <D.21053>;
  <D.21052>:
  D.29612 = klass->fields;
  if (D.29612 == 0B) goto <D.29613>; else goto <D.29614>;
  <D.29613>:
  D.29615 = 0;
  return D.29615;
  <D.29614>:
  i = 0;
  goto <D.21050>;
  <D.21049>:
  D.29612 = klass->fields;
  D.29616 = (long unsigned int) i;
  D.29617 = D.29616 * 32;
  D.29618 = D.29612 + D.29617;
  if (D.29618 == field) goto <D.29619>; else goto <D.29620>;
  <D.29619>:
  {
    int idx;

    D.29621 = klass->field.first;
    i.289 = (unsigned int) i;
    D.29623 = D.29621 + i.289;
    D.29624 = D.29623 + 1;
    idx = (int) D.29624;
    D.29625 = klass->image;
    D.29626 = BIT_FIELD_REF <*D.29625, 8, 224>;
    D.29627 = D.29626 & 32;
    if (D.29627 != 0) goto <D.29628>; else goto <D.29629>;
    <D.29628>:
    idx.290 = (unsigned int) idx;
    D.29625 = klass->image;
    D.29631 = mono_metadata_translate_token_index (D.29625, 4, idx.290);
    idx = (int) D.29631;
    <D.29629>:
    D.29632 = idx | 67108864;
    D.29615 = (uint32_t) D.29632;
    return D.29615;
  }
  <D.29620>:
  i = i + 1;
  <D.21050>:
  i.289 = (unsigned int) i;
  D.29633 = klass->field.count;
  if (i.289 < D.29633) goto <D.21049>; else goto <D.21051>;
  <D.21051>:
  klass = klass->parent;
  <D.21053>:
  if (klass != 0B) goto <D.21052>; else goto <D.21054>;
  <D.21054>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6800);
  D.29615 = 0;
  return D.29615;
}


mono_class_get_field_default_value (struct MonoClassField * field, MonoTypeEnum * def_type)
{
  struct MonoType * D.29635;
  short unsigned int D.29636;
  signed short D.29637;
  _Bool D.29638;
  long int D.29639;
  long int D.29640;
  struct MonoClassExt * D.29645;
  struct MonoFieldDefaultValue * D.29647;
  unsigned int D.29650;
  unsigned int D.29651;
  int D.29652;
  void * D.29653;
  long unsigned int D.29654;
  long unsigned int D.29655;
  struct MonoFieldDefaultValue * D.29656;
  const char * D.29657;
  unsigned int D.29660;
  struct MonoClass * D.29661;
  struct MonoImage * D.29662;
  const char * D.29665;
  int D.29666;
  int D.29667;
  _Bool D.29668;
  long int D.29669;
  long int D.29670;
  unsigned int D.29673;
  int D.29674;
  struct MonoTableInfo * D.29675;
  unsigned int D.29676;
  unsigned int D.29677;
  const char * D.29678;
  <unnamed type> D.29679;
  guint32 cindex;
  guint32 constant_cols[4];
  int field_index;
  struct MonoClass * klass;

  try
    {
      klass = field->parent;
      D.29635 = field->type;
      D.29636 = D.29635->attrs;
      D.29637 = (signed short) D.29636;
      D.29638 = D.29637 >= 0;
      D.29639 = (long int) D.29638;
      D.29640 = __builtin_expect (D.29639, 0);
      if (D.29640 != 0) goto <D.29641>; else goto <D.29642>;
      <D.29641>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6827, "field->type->attrs & FIELD_ATTRIBUTE_HAS_DEFAULT");
      <D.29642>:
      D.29645 = klass->ext;
      if (D.29645 == 0B) goto <D.29643>; else goto <D.29646>;
      <D.29646>:
      D.29645 = klass->ext;
      D.29647 = D.29645->field_def_values;
      if (D.29647 == 0B) goto <D.29643>; else goto <D.29644>;
      <D.29643>:
      mono_loader_lock ();
      mono_class_alloc_ext (klass);
      D.29645 = klass->ext;
      D.29647 = D.29645->field_def_values;
      if (D.29647 == 0B) goto <D.29648>; else goto <D.29649>;
      <D.29648>:
      D.29645 = klass->ext;
      D.29650 = klass->field.count;
      D.29651 = D.29650 * 16;
      D.29652 = (int) D.29651;
      D.29653 = mono_class_alloc0 (klass, D.29652);
      D.29645->field_def_values = D.29653;
      <D.29649>:
      mono_loader_unlock ();
      <D.29644>:
      field_index = mono_field_get_index (field);
      D.29645 = klass->ext;
      D.29647 = D.29645->field_def_values;
      D.29654 = (long unsigned int) field_index;
      D.29655 = D.29654 * 16;
      D.29656 = D.29647 + D.29655;
      D.29657 = D.29656->data;
      if (D.29657 == 0B) goto <D.29658>; else goto <D.29659>;
      <D.29658>:
      D.29660 = mono_class_get_field_token (field);
      D.29661 = field->parent;
      D.29662 = D.29661->image;
      cindex = mono_metadata_get_constant_index (D.29662, D.29660, 0);
      if (cindex == 0) goto <D.29663>; else goto <D.29664>;
      <D.29663>:
      D.29665 = 0B;
      return D.29665;
      <D.29664>:
      D.29635 = field->type;
      D.29636 = D.29635->attrs;
      D.29666 = (int) D.29636;
      D.29667 = D.29666 & 256;
      D.29668 = D.29667 != 0;
      D.29669 = (long int) D.29668;
      D.29670 = __builtin_expect (D.29669, 0);
      if (D.29670 != 0) goto <D.29671>; else goto <D.29672>;
      <D.29671>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6844, "!(field->type->attrs & FIELD_ATTRIBUTE_HAS_FIELD_RVA)");
      <D.29672>:
      D.29673 = cindex + 4294967295;
      D.29674 = (int) D.29673;
      D.29661 = field->parent;
      D.29662 = D.29661->image;
      D.29675 = &D.29662->tables[11];
      mono_metadata_decode_row (D.29675, D.29674, &constant_cols, 4);
      D.29645 = klass->ext;
      D.29647 = D.29645->field_def_values;
      D.29654 = (long unsigned int) field_index;
      D.29655 = D.29654 * 16;
      D.29656 = D.29647 + D.29655;
      D.29676 = constant_cols[0];
      D.29656->def_type = D.29676;
      D.29645 = klass->ext;
      D.29647 = D.29645->field_def_values;
      D.29654 = (long unsigned int) field_index;
      D.29655 = D.29654 * 16;
      D.29656 = D.29647 + D.29655;
      D.29677 = constant_cols[3];
      D.29661 = field->parent;
      D.29662 = D.29661->image;
      D.29678 = mono_metadata_blob_heap (D.29662, D.29677);
      D.29656->data = D.29678;
      <D.29659>:
      D.29645 = klass->ext;
      D.29647 = D.29645->field_def_values;
      D.29654 = (long unsigned int) field_index;
      D.29655 = D.29654 * 16;
      D.29656 = D.29647 + D.29655;
      D.29679 = D.29656->def_type;
      *def_type = D.29679;
      D.29645 = klass->ext;
      D.29647 = D.29645->field_def_values;
      D.29654 = (long unsigned int) field_index;
      D.29655 = D.29654 * 16;
      D.29656 = D.29647 + D.29655;
      D.29665 = D.29656->data;
      return D.29665;
    }
  finally
    {
      constant_cols = {CLOBBER};
    }
}


mono_field_get_index (struct MonoClassField * field)
{
  long int field.291;
  struct MonoClass * D.29683;
  struct MonoClassField * D.29684;
  long int D.29685;
  long int D.29686;
  long int D.29687;
  int iftmp.292;
  unsigned int index.293;
  unsigned int D.29694;
  _Bool D.29695;
  long int D.29696;
  long int D.29697;
  int D.29700;
  int index;

  field.291 = (long int) field;
  D.29683 = field->parent;
  D.29684 = D.29683->fields;
  D.29685 = (long int) D.29684;
  D.29686 = field.291 - D.29685;
  D.29687 = D.29686 /[ex] 32;
  index = (int) D.29687;
  if (index < 0) goto <D.29689>; else goto <D.29692>;
  <D.29692>:
  index.293 = (unsigned int) index;
  D.29683 = field->parent;
  D.29694 = D.29683->field.count;
  if (index.293 >= D.29694) goto <D.29689>; else goto <D.29690>;
  <D.29689>:
  iftmp.292 = 1;
  goto <D.29691>;
  <D.29690>:
  iftmp.292 = 0;
  <D.29691>:
  D.29695 = iftmp.292 != 0;
  D.29696 = (long int) D.29695;
  D.29697 = __builtin_expect (D.29696, 0);
  if (D.29697 != 0) goto <D.29698>; else goto <D.29699>;
  <D.29698>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6809, "index >= 0 && index < field->parent->field.count");
  <D.29699>:
  D.29700 = index;
  return D.29700;
}


mono_class_get_property_default_value (struct MonoProperty * property, MonoTypeEnum * def_type)
{
  unsigned int D.29702;
  unsigned int D.29703;
  _Bool D.29704;
  long int D.29705;
  long int D.29706;
  struct MonoImage * D.29709;
  unsigned char D.29710;
  unsigned char D.29711;
  struct MonoClassExt * D.29714;
  struct MonoFieldDefaultValue * D.29715;
  long unsigned int D.29718;
  long unsigned int D.29719;
  struct MonoFieldDefaultValue * D.29720;
  const char * D.29721;
  <unnamed type> D.29724;
  const char * D.29725;
  unsigned int D.29726;
  unsigned int D.29729;
  int D.29730;
  struct MonoTableInfo * D.29731;
  unsigned int D.29732;
  unsigned int D.29733;
  guint32 cindex;
  guint32 constant_cols[4];
  struct MonoClass * klass;

  try
    {
      klass = property->parent;
      D.29702 = property->attrs;
      D.29703 = D.29702 & 4096;
      D.29704 = D.29703 == 0;
      D.29705 = (long int) D.29704;
      D.29706 = __builtin_expect (D.29705, 0);
      if (D.29706 != 0) goto <D.29707>; else goto <D.29708>;
      <D.29707>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6877, "property->attrs & PROPERTY_ATTRIBUTE_HAS_DEFAULT");
      <D.29708>:
      D.29709 = klass->image;
      D.29710 = BIT_FIELD_REF <*D.29709, 8, 224>;
      D.29711 = D.29710 & 8;
      if (D.29711 != 0) goto <D.29712>; else goto <D.29713>;
      <D.29712>:
      {
        int prop_index;

        prop_index = mono_property_get_index (property);
        D.29714 = klass->ext;
        D.29715 = D.29714->prop_def_values;
        if (D.29715 != 0B) goto <D.29716>; else goto <D.29717>;
        <D.29716>:
        D.29714 = klass->ext;
        D.29715 = D.29714->prop_def_values;
        D.29718 = (long unsigned int) prop_index;
        D.29719 = D.29718 * 16;
        D.29720 = D.29715 + D.29719;
        D.29721 = D.29720->data;
        if (D.29721 != 0B) goto <D.29722>; else goto <D.29723>;
        <D.29722>:
        D.29714 = klass->ext;
        D.29715 = D.29714->prop_def_values;
        D.29718 = (long unsigned int) prop_index;
        D.29719 = D.29718 * 16;
        D.29720 = D.29715 + D.29719;
        D.29724 = D.29720->def_type;
        *def_type = D.29724;
        D.29714 = klass->ext;
        D.29715 = D.29714->prop_def_values;
        D.29718 = (long unsigned int) prop_index;
        D.29719 = D.29718 * 16;
        D.29720 = D.29715 + D.29719;
        D.29725 = D.29720->data;
        return D.29725;
        <D.29723>:
        <D.29717>:
        D.29725 = 0B;
        return D.29725;
      }
      <D.29713>:
      D.29726 = mono_class_get_property_token (property);
      D.29709 = klass->image;
      cindex = mono_metadata_get_constant_index (D.29709, D.29726, 0);
      if (cindex == 0) goto <D.29727>; else goto <D.29728>;
      <D.29727>:
      D.29725 = 0B;
      return D.29725;
      <D.29728>:
      D.29729 = cindex + 4294967295;
      D.29730 = (int) D.29729;
      D.29709 = klass->image;
      D.29731 = &D.29709->tables[11];
      mono_metadata_decode_row (D.29731, D.29730, &constant_cols, 4);
      D.29732 = constant_cols[0];
      *def_type = D.29732;
      D.29733 = constant_cols[3];
      D.29709 = klass->image;
      D.29725 = mono_metadata_blob_heap (D.29709, D.29733);
      return D.29725;
    }
  finally
    {
      constant_cols = {CLOBBER};
    }
}


mono_property_get_index (struct MonoProperty * prop)
{
  long int prop.294;
  struct MonoClass * D.29737;
  struct MonoClassExt * D.29738;
  struct MonoProperty * D.29739;
  long int D.29740;
  long int D.29741;
  long int D.29742;
  int iftmp.295;
  unsigned int index.296;
  unsigned int D.29749;
  _Bool D.29750;
  long int D.29751;
  long int D.29752;
  int D.29755;
  int index;

  prop.294 = (long int) prop;
  D.29737 = prop->parent;
  D.29738 = D.29737->ext;
  D.29739 = D.29738->properties;
  D.29740 = (long int) D.29739;
  D.29741 = prop.294 - D.29740;
  D.29742 = D.29741 /[ex] 40;
  index = (int) D.29742;
  if (index < 0) goto <D.29744>; else goto <D.29747>;
  <D.29747>:
  index.296 = (unsigned int) index;
  D.29737 = prop->parent;
  D.29738 = D.29737->ext;
  D.29749 = D.29738->property.count;
  if (index.296 >= D.29749) goto <D.29744>; else goto <D.29745>;
  <D.29744>:
  iftmp.295 = 1;
  goto <D.29746>;
  <D.29745>:
  iftmp.295 = 0;
  <D.29746>:
  D.29750 = iftmp.295 != 0;
  D.29751 = (long int) D.29750;
  D.29752 = __builtin_expect (D.29751, 0);
  if (D.29752 != 0) goto <D.29753>; else goto <D.29754>;
  <D.29753>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 6860, "index >= 0 && index < prop->parent->ext->property.count");
  <D.29754>:
  D.29755 = index;
  return D.29755;
}


mono_class_get_event_token (struct MonoEvent * event)
{
  struct MonoClassExt * D.29757;
  struct MonoEvent * D.29760;
  long unsigned int D.29761;
  long unsigned int D.29762;
  struct MonoEvent * D.29763;
  uint32_t D.29766;
  unsigned int D.29767;
  unsigned int i.297;
  unsigned int D.29769;
  unsigned int D.29770;
  unsigned int D.29771;
  struct MonoClass * klass;
  int i;

  klass = event->parent;
  goto <D.21088>;
  <D.21087>:
  D.29757 = klass->ext;
  if (D.29757 != 0B) goto <D.29758>; else goto <D.29759>;
  <D.29758>:
  i = 0;
  goto <D.21085>;
  <D.21084>:
  D.29757 = klass->ext;
  D.29760 = D.29757->events;
  D.29761 = (long unsigned int) i;
  D.29762 = D.29761 * 56;
  D.29763 = D.29760 + D.29762;
  if (D.29763 == event) goto <D.29764>; else goto <D.29765>;
  <D.29764>:
  D.29757 = klass->ext;
  D.29767 = D.29757->event.first;
  i.297 = (unsigned int) i;
  D.29769 = D.29767 + i.297;
  D.29770 = D.29769 + 1;
  D.29766 = D.29770 | 335544320;
  return D.29766;
  <D.29765>:
  i = i + 1;
  <D.21085>:
  i.297 = (unsigned int) i;
  D.29757 = klass->ext;
  D.29771 = D.29757->event.count;
  if (i.297 < D.29771) goto <D.21084>; else goto <D.21086>;
  <D.21086>:
  <D.29759>:
  klass = klass->parent;
  <D.21088>:
  if (klass != 0B) goto <D.21087>; else goto <D.21089>;
  <D.21089>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6917);
  D.29766 = 0;
  return D.29766;
}


mono_class_get_property_from_name (struct MonoClass * klass, const char * name)
{
  int D.21104;
  const char * D.29773;
  struct MonoProperty * D.29776;

  goto <D.21109>;
  <D.21108>:
  {
    struct MonoProperty * p;
    void * iter;

    try
      {
        iter = 0B;
        goto <D.21106>;
        <D.21105>:
        {
          size_t __s1_len;
          size_t __s2_len;

          D.29773 = p->name;
          D.21104 = __builtin_strcmp (name, D.29773);
        }
        if (D.21104 == 0) goto <D.29774>; else goto <D.29775>;
        <D.29774>:
        D.29776 = p;
        return D.29776;
        <D.29775>:
        <D.21106>:
        p = mono_class_get_properties (klass, &iter);
        if (p != 0B) goto <D.21105>; else goto <D.21107>;
        <D.21107>:
        klass = klass->parent;
      }
    finally
      {
        iter = {CLOBBER};
      }
  }
  <D.21109>:
  if (klass != 0B) goto <D.21108>; else goto <D.21110>;
  <D.21110>:
  D.29776 = 0B;
  return D.29776;
}


mono_class_get_property_token (struct MonoProperty * prop)
{
  struct MonoClassExt * D.29780;
  struct MonoProperty * D.29781;
  long unsigned int D.29782;
  long unsigned int D.29783;
  struct MonoProperty * D.29784;
  uint32_t D.29787;
  unsigned int D.29788;
  unsigned int i.298;
  unsigned int D.29790;
  unsigned int D.29791;
  struct MonoClass * klass;

  klass = prop->parent;
  goto <D.21122>;
  <D.21121>:
  {
    struct MonoProperty * p;
    int i;
    void * iter;

    try
      {
        i = 0;
        iter = 0B;
        goto <D.21119>;
        <D.21118>:
        D.29780 = klass->ext;
        D.29781 = D.29780->properties;
        D.29782 = (long unsigned int) i;
        D.29783 = D.29782 * 40;
        D.29784 = D.29781 + D.29783;
        if (D.29784 == prop) goto <D.29785>; else goto <D.29786>;
        <D.29785>:
        D.29780 = klass->ext;
        D.29788 = D.29780->property.first;
        i.298 = (unsigned int) i;
        D.29790 = D.29788 + i.298;
        D.29791 = D.29790 + 1;
        D.29787 = D.29791 | 385875968;
        return D.29787;
        <D.29786>:
        i = i + 1;
        <D.21119>:
        p = mono_class_get_properties (klass, &iter);
        if (p != 0B) goto <D.21118>; else goto <D.21120>;
        <D.21120>:
        klass = klass->parent;
      }
    finally
      {
        iter = {CLOBBER};
      }
  }
  <D.21122>:
  if (klass != 0B) goto <D.21121>; else goto <D.21123>;
  <D.21123>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 6953);
  D.29787 = 0;
  return D.29787;
}


mono_class_name_from_token (struct MonoImage * image, guint32 type_token)
{
  unsigned char D.29795;
  unsigned char D.29796;
  char * D.29799;
  unsigned int D.29800;
  <unnamed-unsigned:24> D.29801;
  unsigned int D.29802;
  unsigned int D.29805;
  int D.29806;
  unsigned int D.29807;
  unsigned int D.29808;
  char D.29809;
  <unnamed-unsigned:24> D.29812;
  unsigned int D.29813;
  unsigned int D.29816;
  int D.29817;
  const char * D.29820;
  int D.29821;
  unsigned int D.29822;
  unsigned int D.29823;
  const char * name;
  const char * nspace;

  D.29795 = BIT_FIELD_REF <*image, 8, 224>;
  D.29796 = D.29795 & 8;
  if (D.29796 != 0) goto <D.29797>; else goto <D.29798>;
  <D.29797>:
  D.29799 = monoeg_g_strdup_printf ("DynamicType 0x%08x", type_token);
  return D.29799;
  <D.29798>:
  D.29800 = type_token & 4278190080;
  switch (D.29800) <default: <D.21141>, case 16777216: <D.21134>, case 33554432: <D.21130>, case 452984832: <D.21140>>
  <D.21130>:
  {
    guint32 cols[6];
    struct MonoTableInfo * tt;
    guint tidx;

    try
      {
        tt = &image->tables[2];
        tidx = type_token & 16777215;
        D.29801 = tt->rows;
        D.29802 = (unsigned int) D.29801;
        if (D.29802 < tidx) goto <D.29803>; else goto <D.29804>;
        <D.29803>:
        D.29799 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
        return D.29799;
        <D.29804>:
        D.29805 = tidx + 4294967295;
        D.29806 = (int) D.29805;
        mono_metadata_decode_row (tt, D.29806, &cols, 6);
        D.29807 = cols[1];
        name = mono_metadata_string_heap (image, D.29807);
        D.29808 = cols[2];
        nspace = mono_metadata_string_heap (image, D.29808);
        D.29809 = *nspace;
        if (D.29809 == 0) goto <D.29810>; else goto <D.29811>;
        <D.29810>:
        D.29799 = monoeg_g_strdup_printf ("%s", name);
        return D.29799;
        <D.29811>:
        D.29799 = monoeg_g_strdup_printf ("%s.%s", nspace, name);
        return D.29799;
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  <D.21134>:
  {
    struct MonoError error;
    guint32 cols[3];
    struct MonoTableInfo * t;
    guint tidx;

    try
      {
        t = &image->tables[1];
        tidx = type_token & 16777215;
        D.29812 = t->rows;
        D.29813 = (unsigned int) D.29812;
        if (D.29813 < tidx) goto <D.29814>; else goto <D.29815>;
        <D.29814>:
        D.29799 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
        return D.29799;
        <D.29815>:
        D.29816 = tidx + 4294967295;
        D.29817 = mono_verifier_verify_typeref_row (image, D.29816, &error);
        if (D.29817 == 0) goto <D.29818>; else goto <D.29819>;
        <D.29818>:
        {
          char * msg;

          D.29820 = mono_error_get_message (&error);
          msg = monoeg_g_strdup_printf ("Invalid type token 0x%08x due to \'%s\'", type_token, D.29820);
          mono_error_cleanup (&error);
          D.29799 = msg;
          return D.29799;
        }
        <D.29819>:
        D.29816 = tidx + 4294967295;
        D.29821 = (int) D.29816;
        mono_metadata_decode_row (t, D.29821, &cols, 3);
        D.29822 = cols[1];
        name = mono_metadata_string_heap (image, D.29822);
        D.29823 = cols[2];
        nspace = mono_metadata_string_heap (image, D.29823);
        D.29809 = *nspace;
        if (D.29809 == 0) goto <D.29824>; else goto <D.29825>;
        <D.29824>:
        D.29799 = monoeg_g_strdup_printf ("%s", name);
        return D.29799;
        <D.29825>:
        D.29799 = monoeg_g_strdup_printf ("%s.%s", nspace, name);
        return D.29799;
      }
    finally
      {
        error = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.21140>:
  D.29799 = monoeg_g_strdup_printf ("Typespec 0x%08x", type_token);
  return D.29799;
  <D.21141>:
  D.29799 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
  return D.29799;
}


mono_class_get_full (struct MonoImage * image, guint32 type_token, struct MonoGenericContext * context)
{
  unsigned char D.29829;
  unsigned char D.29830;
  unsigned int D.29833;
  unsigned int table.299;
  unsigned int D.29835;
  _Bool D.29836;
  _Bool D.29837;
  _Bool D.29838;
  gchar * D.29841;
  struct MonoClass * D.29842;
  unsigned int D.29843;
  int D.29844;
  int D.29847;
  struct MonoError error;
  struct MonoClass * class;

  try
    {
      class = 0B;
      D.29829 = BIT_FIELD_REF <*image, 8, 224>;
      D.29830 = D.29829 & 8;
      if (D.29830 != 0) goto <D.29831>; else goto <D.29832>;
      <D.29831>:
      {
        int table;

        D.29833 = type_token >> 24;
        table = (int) D.29833;
        table.299 = (unsigned int) table;
        D.29835 = table.299 + 4294967295;
        D.29836 = D.29835 > 1;
        D.29837 = table != 27;
        D.29838 = D.29836 & D.29837;
        if (D.29838 != 0) goto <D.29839>; else goto <D.29840>;
        <D.29839>:
        D.29841 = monoeg_strdup ("Bad type token.");
        mono_loader_set_error_bad_image (D.29841);
        D.29842 = 0B;
        return D.29842;
        <D.29840>:
        D.29842 = mono_lookup_dynamic_token (image, type_token, context);
        return D.29842;
      }
      <D.29832>:
      D.29843 = type_token & 4278190080;
      switch (D.29843) <default: <D.21174>, case 16777216: <D.21172>, case 33554432: <D.21170>, case 452984832: <D.21173>>
      <D.21170>:
      class = mono_class_create_from_typedef (image, type_token, &error);
      D.29844 = mono_error_ok (&error);
      if (D.29844 == 0) goto <D.29845>; else goto <D.29846>;
      <D.29845>:
      mono_loader_set_error_from_mono_error (&error);
      mono_error_cleanup (&error);
      D.29842 = 0B;
      return D.29842;
      <D.29846>:
      goto <D.21171>;
      <D.21172>:
      class = mono_class_from_typeref (image, type_token);
      goto <D.21171>;
      <D.21173>:
      class = mono_class_create_from_typespec (image, type_token, context, &error);
      D.29847 = mono_error_ok (&error);
      if (D.29847 == 0) goto <D.29848>; else goto <D.29849>;
      <D.29848>:
      mono_error_cleanup (&error);
      <D.29849>:
      goto <D.21171>;
      <D.21174>:
      D.29843 = type_token & 4278190080;
      monoeg_g_log (0B, 16, "unknown token type %x", D.29843);
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 7118);
      <D.21171>:
      if (class == 0B) goto <D.29850>; else goto <D.29851>;
      <D.29850>:
      {
        char * name;
        char * assembly;

        name = mono_class_name_from_token (image, type_token);
        assembly = mono_assembly_name_from_token (image, type_token);
        mono_loader_set_error_type_load (name, assembly);
        monoeg_g_free (name);
        monoeg_g_free (assembly);
      }
      <D.29851>:
      D.29842 = class;
      return D.29842;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_create_from_typespec (struct MonoImage * image, guint32 type_spec, struct MonoGenericContext * context, struct MonoError * error)
{
  int D.29854;
  struct MonoClass * D.29857;
  int inflated.300;
  struct MonoClass * ret;
  gboolean inflated;
  struct MonoType * t;

  try
    {
      inflated = 0;
      t = mono_type_retrieve_from_typespec (image, type_spec, context, &inflated, error);
      D.29854 = mono_error_ok (error);
      if (D.29854 == 0) goto <D.29855>; else goto <D.29856>;
      <D.29855>:
      D.29857 = 0B;
      return D.29857;
      <D.29856>:
      ret = mono_class_from_mono_type (t);
      inflated.300 = inflated;
      if (inflated.300 != 0) goto <D.29859>; else goto <D.29860>;
      <D.29859>:
      mono_metadata_free_type (t);
      <D.29860>:
      D.29857 = ret;
      return D.29857;
    }
  finally
    {
      inflated = {CLOBBER};
    }
}


mono_type_retrieve_from_typespec (struct MonoImage * image, guint32 type_spec, struct MonoGenericContext * context, gboolean * did_inflate, struct MonoError * error)
{
  struct MonoType * D.29865;
  struct MonoGenericInst * D.29870;
  struct MonoGenericInst * D.29872;
  int D.29873;
  struct MonoType * t;

  t = mono_type_create_from_typespec (image, type_spec);
  mono_error_init (error);
  *did_inflate = 0;
  if (t == 0B) goto <D.29863>; else goto <D.29864>;
  <D.29863>:
  {
    char * name;
    char * assembly;

    name = mono_class_name_from_token (image, type_spec);
    assembly = mono_assembly_name_from_token (image, type_spec);
    mono_error_set_type_load_name (error, name, assembly, "Could not resolve typespec token %08x", type_spec);
    D.29865 = 0B;
    return D.29865;
  }
  <D.29864>:
  if (context != 0B) goto <D.29868>; else goto <D.29869>;
  <D.29868>:
  D.29870 = context->class_inst;
  if (D.29870 != 0B) goto <D.29866>; else goto <D.29871>;
  <D.29871>:
  D.29872 = context->method_inst;
  if (D.29872 != 0B) goto <D.29866>; else goto <D.29867>;
  <D.29866>:
  {
    struct MonoType * inflated;

    inflated = inflate_generic_type (0B, t, context, error);
    D.29873 = mono_error_ok (error);
    if (D.29873 == 0) goto <D.29874>; else goto <D.29875>;
    <D.29874>:
    D.29865 = 0B;
    return D.29865;
    <D.29875>:
    if (inflated != 0B) goto <D.29876>; else goto <D.29877>;
    <D.29876>:
    t = inflated;
    *did_inflate = 1;
    <D.29877>:
  }
  <D.29867>:
  <D.29869>:
  D.29865 = t;
  return D.29865;
}


mono_assembly_name_from_token (struct MonoImage * image, guint32 type_token)
{
  unsigned char D.29879;
  unsigned char D.29880;
  char * D.29883;
  char * D.29884;
  unsigned int D.29885;
  struct MonoAssembly * D.29886;
  struct MonoAssemblyName * D.29889;
  const char * D.29890;
  const char * iftmp.301;
  <unnamed-unsigned:24> D.29897;
  unsigned int D.29898;
  unsigned int D.29901;
  int D.29902;
  const char * D.29905;
  int D.29906;
  unsigned int D.29907;
  unsigned int D.29908;

  D.29879 = BIT_FIELD_REF <*image, 8, 224>;
  D.29880 = D.29879 & 8;
  if (D.29880 != 0) goto <D.29881>; else goto <D.29882>;
  <D.29881>:
  D.29884 = image->name;
  D.29883 = monoeg_g_strdup_printf ("DynamicAssembly %s", D.29884);
  return D.29883;
  <D.29882>:
  D.29885 = type_token & 4278190080;
  switch (D.29885) <default: <D.21161>, case 16777216: <D.21147>, case 33554432: <D.21146>, case 452984832: <D.21160>>
  <D.21146>:
  D.29886 = image->assembly;
  if (D.29886 != 0B) goto <D.29887>; else goto <D.29888>;
  <D.29887>:
  D.29886 = image->assembly;
  D.29889 = &D.29886->aname;
  D.29883 = mono_stringify_assembly_name (D.29889);
  return D.29883;
  <D.29888>:
  D.29890 = image->assembly_name;
  if (D.29890 != 0B) goto <D.29891>; else goto <D.29892>;
  <D.29891>:
  D.29890 = image->assembly_name;
  D.29883 = monoeg_strdup (D.29890);
  return D.29883;
  <D.29892>:
  D.29884 = image->name;
  if (D.29884 != 0B) goto <D.29894>; else goto <D.29895>;
  <D.29894>:
  iftmp.301 = image->name;
  goto <D.29896>;
  <D.29895>:
  iftmp.301 = "[Could not resolve assembly name";
  <D.29896>:
  D.29883 = monoeg_g_strdup_printf ("%s", iftmp.301);
  return D.29883;
  <D.21147>:
  {
    struct MonoError error;
    struct MonoAssemblyName aname;
    guint32 cols[3];
    struct MonoTableInfo * t;
    guint32 idx;

    try
      {
        t = &image->tables[1];
        idx = type_token & 16777215;
        D.29897 = t->rows;
        D.29898 = (unsigned int) D.29897;
        if (D.29898 < idx) goto <D.29899>; else goto <D.29900>;
        <D.29899>:
        D.29883 = monoeg_g_strdup_printf ("Invalid type token 0x%08x", type_token);
        return D.29883;
        <D.29900>:
        D.29901 = idx + 4294967295;
        D.29902 = mono_verifier_verify_typeref_row (image, D.29901, &error);
        if (D.29902 == 0) goto <D.29903>; else goto <D.29904>;
        <D.29903>:
        {
          char * msg;

          D.29905 = mono_error_get_message (&error);
          msg = monoeg_g_strdup_printf ("Invalid type token 0x%08x due to \'%s\'", type_token, D.29905);
          mono_error_cleanup (&error);
          D.29883 = msg;
          return D.29883;
        }
        <D.29904>:
        D.29901 = idx + 4294967295;
        D.29906 = (int) D.29901;
        mono_metadata_decode_row (t, D.29906, &cols, 3);
        D.29907 = cols[0];
        idx = D.29907 >> 2;
        D.29907 = cols[0];
        D.29908 = D.29907 & 3;
        switch (D.29908) <default: <D.21158>, case 0: <D.21154>, case 1: <D.21155>, case 2: <D.21157>, case 3: <D.21156>>
        <D.21154>:
        D.29883 = monoeg_strdup ("");
        return D.29883;
        <D.21155>:
        D.29883 = monoeg_strdup ("");
        return D.29883;
        <D.21156>:
        D.29883 = monoeg_strdup ("");
        return D.29883;
        <D.21157>:
        D.29901 = idx + 4294967295;
        D.29906 = (int) D.29901;
        mono_assembly_get_assemblyref (image, D.29906, &aname);
        D.29883 = mono_stringify_assembly_name (&aname);
        return D.29883;
        <D.21158>:
        monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 7058);
        goto <D.21159>;
      }
    finally
      {
        error = {CLOBBER};
        aname = {CLOBBER};
        cols = {CLOBBER};
      }
  }
  <D.21160>:
  D.29883 = monoeg_strdup ("");
  return D.29883;
  <D.21161>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "class.c", 7066);
  <D.21159>:
  D.29883 = 0B;
  return D.29883;
}


mono_type_get_full (struct MonoImage * image, guint32 type_token, struct MonoGenericContext * context)
{
  unsigned char D.29912;
  unsigned char D.29913;
  struct MonoType * D.29916;
  void * D.29917;
  unsigned int D.29918;
  struct MonoType * iftmp.302;
  int D.29925;
  const char * D.29928;
  int inflated.303;
  struct MonoClass * D.29932;
  unsigned char D.29933;
  unsigned char D.29934;
  struct MonoError error;
  struct MonoType * type;
  gboolean inflated;

  try
    {
      type = 0B;
      inflated = 0;
      D.29912 = BIT_FIELD_REF <*image, 8, 224>;
      D.29913 = D.29912 & 8;
      if (D.29913 != 0) goto <D.29914>; else goto <D.29915>;
      <D.29914>:
      D.29917 = mono_lookup_dynamic_token (image, type_token, context);
      D.29916 = mono_class_get_type (D.29917);
      return D.29916;
      <D.29915>:
      D.29918 = type_token & 4278190080;
      if (D.29918 != 452984832) goto <D.29919>; else goto <D.29920>;
      <D.29919>:
      {
        struct MonoClass * class;

        class = mono_class_get_full (image, type_token, context);
        if (class != 0B) goto <D.29922>; else goto <D.29923>;
        <D.29922>:
        iftmp.302 = mono_class_get_type (class);
        goto <D.29924>;
        <D.29923>:
        iftmp.302 = 0B;
        <D.29924>:
        D.29916 = iftmp.302;
        return D.29916;
      }
      <D.29920>:
      type = mono_type_retrieve_from_typespec (image, type_token, context, &inflated, &error);
      D.29925 = mono_error_ok (&error);
      if (D.29925 == 0) goto <D.29926>; else goto <D.29927>;
      <D.29926>:
      {
        char * name;
        char * assembly;

        name = mono_class_name_from_token (image, type_token);
        assembly = mono_assembly_name_from_token (image, type_token);
        D.29928 = mono_error_get_message (&error);
        monoeg_g_log (0B, 16, "Error loading type %s from %s due to %s", name, assembly, D.29928);
        mono_error_cleanup (&error);
        mono_loader_set_error_type_load (name, assembly);
        D.29916 = 0B;
        return D.29916;
      }
      <D.29927>:
      inflated.303 = inflated;
      if (inflated.303 != 0) goto <D.29930>; else goto <D.29931>;
      <D.29930>:
      {
        struct MonoType * tmp;

        tmp = type;
        D.29932 = mono_class_from_mono_type (type);
        type = mono_class_get_type (D.29932);
        D.29933 = type->type;
        D.29934 = tmp->type;
        if (D.29933 != D.29934) goto <D.29935>; else goto <D.29936>;
        <D.29935>:
        type = tmp;
        goto <D.29937>;
        <D.29936>:
        mono_metadata_free_type (tmp);
        <D.29937>:
      }
      <D.29931>:
      D.29916 = type;
      return D.29916;
    }
  finally
    {
      error = {CLOBBER};
      inflated = {CLOBBER};
    }
}


mono_class_get (struct MonoImage * image, guint32 type_token)
{
  struct MonoClass * D.29940;

  D.29940 = mono_class_get_full (image, type_token, 0B);
  return D.29940;
}


mono_image_init_name_cache (struct MonoImage * image)
{
  struct GHashTable * D.29942;
  struct GHashTable * D.29945;
  unsigned char D.29946;
  unsigned char D.29947;
  unsigned int D.29950;
  int D.29951;
  unsigned int D.29952;
  unsigned int D.29953;
  unsigned int D.29956;
  unsigned int D.29957;
  long unsigned int D.29958;
  const void * D.29959;
  void * D.29962;
  long unsigned int D.29963;
  void * D.29964;
  <unnamed-unsigned:24> D.29965;
  unsigned int D.29966;
  unsigned int D.29967;
  unsigned int D.29968;
  int D.29971;
  int D.29972;
  long unsigned int D.29973;
  void * D.29974;
  <unnamed-unsigned:24> D.29975;
  int D.29976;
  struct MonoTableInfo * t;
  guint32 cols[6];
  const char * name;
  const char * nspace;
  guint32 i;
  guint32 visib;
  guint32 nspace_index;
  struct GHashTable * name_cache2;
  struct GHashTable * nspace_table;

  try
    {
      t = &image->tables[2];
      mono_image_lock (image);
      D.29942 = image->name_cache;
      if (D.29942 != 0B) goto <D.29943>; else goto <D.29944>;
      <D.29943>:
      mono_image_unlock (image);
      return;
      <D.29944>:
      D.29945 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
      image->name_cache = D.29945;
      D.29946 = BIT_FIELD_REF <*image, 8, 224>;
      D.29947 = D.29946 & 8;
      if (D.29947 != 0) goto <D.29948>; else goto <D.29949>;
      <D.29948>:
      mono_image_unlock (image);
      return;
      <D.29949>:
      name_cache2 = monoeg_g_hash_table_new (0B, 0B);
      i = 1;
      goto <D.21207>;
      <D.21206>:
      D.29950 = i + 4294967295;
      D.29951 = (int) D.29950;
      mono_metadata_decode_row (t, D.29951, &cols, 6);
      D.29952 = cols[0];
      visib = D.29952 & 7;
      D.29953 = visib + 4294967294;
      if (D.29953 <= 5) goto <D.29954>; else goto <D.29955>;
      <D.29954>:
      // predicted unlikely by continue predictor.
      goto <D.21205>;
      <D.29955>:
      D.29956 = cols[1];
      name = mono_metadata_string_heap (image, D.29956);
      D.29957 = cols[2];
      nspace = mono_metadata_string_heap (image, D.29957);
      nspace_index = cols[2];
      D.29958 = (long unsigned int) nspace_index;
      D.29959 = (const void *) D.29958;
      nspace_table = monoeg_g_hash_table_lookup (name_cache2, D.29959);
      if (nspace_table == 0B) goto <D.29960>; else goto <D.29961>;
      <D.29960>:
      nspace_table = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
      D.29942 = image->name_cache;
      monoeg_g_hash_table_insert_replace (D.29942, nspace, nspace_table, 0);
      D.29958 = (long unsigned int) nspace_index;
      D.29962 = (void *) D.29958;
      monoeg_g_hash_table_insert_replace (name_cache2, D.29962, nspace_table, 0);
      <D.29961>:
      D.29963 = (long unsigned int) i;
      D.29964 = (void *) D.29963;
      monoeg_g_hash_table_insert_replace (nspace_table, name, D.29964, 0);
      <D.21205>:
      i = i + 1;
      <D.21207>:
      D.29965 = t->rows;
      D.29966 = (unsigned int) D.29965;
      if (D.29966 >= i) goto <D.21206>; else goto <D.21208>;
      <D.21208>:
      {
        struct MonoTableInfo * t;
        guint32 cols[5];
        int i;

        try
          {
            t = &image->tables[39];
            i = 0;
            goto <D.21213>;
            <D.21212>:
            mono_metadata_decode_row (t, i, &cols, 5);
            D.29967 = cols[2];
            name = mono_metadata_string_heap (image, D.29967);
            D.29968 = cols[3];
            nspace = mono_metadata_string_heap (image, D.29968);
            nspace_index = cols[3];
            D.29958 = (long unsigned int) nspace_index;
            D.29959 = (const void *) D.29958;
            nspace_table = monoeg_g_hash_table_lookup (name_cache2, D.29959);
            if (nspace_table == 0B) goto <D.29969>; else goto <D.29970>;
            <D.29969>:
            nspace_table = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
            D.29942 = image->name_cache;
            monoeg_g_hash_table_insert_replace (D.29942, nspace, nspace_table, 0);
            D.29958 = (long unsigned int) nspace_index;
            D.29962 = (void *) D.29958;
            monoeg_g_hash_table_insert_replace (name_cache2, D.29962, nspace_table, 0);
            <D.29970>:
            D.29971 = i + 1;
            D.29972 = D.29971 | 654311424;
            D.29973 = (long unsigned int) D.29972;
            D.29974 = (void *) D.29973;
            monoeg_g_hash_table_insert_replace (nspace_table, name, D.29974, 0);
            i = i + 1;
            <D.21213>:
            D.29975 = t->rows;
            D.29976 = (int) D.29975;
            if (D.29976 > i) goto <D.21212>; else goto <D.21214>;
            <D.21214>:
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      monoeg_g_hash_table_destroy (name_cache2);
      mono_image_unlock (image);
    }
  finally
    {
      cols = {CLOBBER};
    }
}


mono_image_add_to_name_cache (struct MonoImage * image, const char * nspace, const char * name, guint32 index)
{
  struct GHashTable * D.29980;
  void * D.29985;
  long int D.29986;
  char * D.29989;
  long unsigned int D.29990;
  void * D.29991;
  struct GHashTable * nspace_table;
  struct GHashTable * name_cache;
  guint32 old_index;

  mono_image_lock (image);
  D.29980 = image->name_cache;
  if (D.29980 == 0B) goto <D.29981>; else goto <D.29982>;
  <D.29981>:
  mono_image_init_name_cache (image);
  <D.29982>:
  name_cache = image->name_cache;
  nspace_table = monoeg_g_hash_table_lookup (name_cache, nspace);
  if (nspace_table == 0B) goto <D.29983>; else goto <D.29984>;
  <D.29983>:
  nspace_table = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  monoeg_g_hash_table_insert_replace (name_cache, nspace, nspace_table, 0);
  <D.29984>:
  D.29985 = monoeg_g_hash_table_lookup (nspace_table, name);
  D.29986 = (long int) D.29985;
  old_index = (guint32) D.29986;
  if (old_index != 0) goto <D.29987>; else goto <D.29988>;
  <D.29987>:
  D.29989 = image->name;
  monoeg_g_log (0B, 4, "overrwritting old token %x on image %s for type %s::%s", old_index, D.29989, nspace, name);
  <D.21224>:
  goto <D.21224>;
  <D.29988>:
  D.29990 = (long unsigned int) index;
  D.29991 = (void *) D.29990;
  monoeg_g_hash_table_insert_replace (nspace_table, name, D.29991, 0);
  mono_image_unlock (image);
}


mono_class_from_name_case (struct MonoImage * image, const char * name_space, const char * name)
{
  unsigned char D.29992;
  unsigned char D.29993;
  struct GHashTable * D.29996;
  void * D.29999;
  long int D.30004;
  struct MonoClass * D.30007;
  unsigned int D.30008;
  unsigned int D.30009;
  int D.30010;
  unsigned int D.30011;
  unsigned int D.30012;
  unsigned int D.30015;
  unsigned int D.30016;
  int D.30017;
  int D.30020;
  unsigned int D.30023;
  <unnamed-unsigned:24> D.30024;
  unsigned int D.30025;
  struct MonoTableInfo * t;
  guint32 cols[6];
  const char * n;
  const char * nspace;
  guint32 i;
  guint32 visib;

  try
    {
      t = &image->tables[2];
      D.29992 = BIT_FIELD_REF <*image, 8, 224>;
      D.29993 = D.29992 & 8;
      if (D.29993 != 0) goto <D.29994>; else goto <D.29995>;
      <D.29994>:
      {
        guint32 token;
        struct FindUserData user_data;

        try
          {
            token = 0;
            mono_image_lock (image);
            D.29996 = image->name_cache;
            if (D.29996 == 0B) goto <D.29997>; else goto <D.29998>;
            <D.29997>:
            mono_image_init_name_cache (image);
            <D.29998>:
            user_data.key = name_space;
            user_data.value = 0B;
            D.29996 = image->name_cache;
            monoeg_g_hash_table_foreach (D.29996, find_nocase, &user_data);
            D.29999 = user_data.value;
            if (D.29999 != 0B) goto <D.30000>; else goto <D.30001>;
            <D.30000>:
            {
              struct GHashTable * nspace_table;

              nspace_table = user_data.value;
              user_data.key = name;
              user_data.value = 0B;
              monoeg_g_hash_table_foreach (nspace_table, find_nocase, &user_data);
              D.29999 = user_data.value;
              if (D.29999 != 0B) goto <D.30002>; else goto <D.30003>;
              <D.30002>:
              D.29999 = user_data.value;
              D.30004 = (long int) D.29999;
              token = (guint32) D.30004;
              <D.30003>:
            }
            <D.30001>:
            mono_image_unlock (image);
            if (token != 0) goto <D.30005>; else goto <D.30006>;
            <D.30005>:
            D.30008 = token | 33554432;
            D.30007 = mono_class_get (image, D.30008);
            return D.30007;
            <D.30006>:
            D.30007 = 0B;
            return D.30007;
          }
        finally
          {
            user_data = {CLOBBER};
          }
      }
      <D.29995>:
      i = 1;
      goto <D.21252>;
      <D.21251>:
      D.30009 = i + 4294967295;
      D.30010 = (int) D.30009;
      mono_metadata_decode_row (t, D.30010, &cols, 6);
      D.30011 = cols[0];
      visib = D.30011 & 7;
      D.30012 = visib + 4294967294;
      if (D.30012 <= 5) goto <D.30013>; else goto <D.30014>;
      <D.30013>:
      // predicted unlikely by continue predictor.
      goto <D.21250>;
      <D.30014>:
      D.30015 = cols[1];
      n = mono_metadata_string_heap (image, D.30015);
      D.30016 = cols[2];
      nspace = mono_metadata_string_heap (image, D.30016);
      D.30017 = monoeg_ascii_strcasecmp (n, name);
      if (D.30017 == 0) goto <D.30018>; else goto <D.30019>;
      <D.30018>:
      D.30020 = monoeg_ascii_strcasecmp (nspace, name_space);
      if (D.30020 == 0) goto <D.30021>; else goto <D.30022>;
      <D.30021>:
      D.30023 = i | 33554432;
      D.30007 = mono_class_get (image, D.30023);
      return D.30007;
      <D.30022>:
      <D.30019>:
      <D.21250>:
      i = i + 1;
      <D.21252>:
      D.30024 = t->rows;
      D.30025 = (unsigned int) D.30024;
      if (D.30025 >= i) goto <D.21251>; else goto <D.21253>;
      <D.21253>:
      D.30007 = 0B;
      return D.30007;
    }
  finally
    {
      cols = {CLOBBER};
    }
}


find_nocase (void * key, void * value, void * user_data)
{
  void * D.30029;
  const void * D.30032;
  int D.30033;
  char * name;
  struct FindUserData * data;

  name = key;
  data = user_data;
  D.30029 = data->value;
  if (D.30029 == 0B) goto <D.30030>; else goto <D.30031>;
  <D.30030>:
  D.30032 = data->key;
  D.30033 = monoeg_ascii_strcasecmp (name, D.30032);
  if (D.30033 == 0) goto <D.30034>; else goto <D.30035>;
  <D.30034>:
  data->value = value;
  <D.30035>:
  <D.30031>:
}


mono_class_from_name (struct MonoImage * image, const char * name_space, const char * name)
{
  long int nested.304;
  long int name.305;
  long int D.30040;
  long unsigned int D.30041;
  struct MonoClass * D.30044;
  int D.30045;
  long unsigned int D.30046;
  sizetype D.30047;
  sizetype D.30048;
  gboolean (*<T1ed6>) (struct MonoImage *, const char *, const char *, struct MonoClass * *) get_class_from_name.306;
  unsigned int D.30052;
  unsigned int D.30053;
  struct MonoClass * class.307;
  struct MonoClass * class.308;
  struct MonoClass * iftmp.309;
  struct GHashTable * D.30068;
  void * D.30073;
  long int D.30074;
  unsigned char D.30077;
  unsigned char D.30078;
  struct MonoImage * * D.30081;
  long unsigned int D.30084;
  long unsigned int D.30085;
  struct MonoImage * * D.30086;
  struct MonoClass * class.310;
  unsigned int i.311;
  unsigned int D.30091;
  struct MonoClass * class.312;
  unsigned int D.30099;
  unsigned int D.30102;
  int D.30103;
  unsigned int D.30104;
  unsigned int D.30107;
  struct MonoAssembly * D.30108;
  struct MonoClass * class.313;
  unsigned int D.30116;
  int D.30117;
  struct MonoAssembly * * D.30118;
  long unsigned int D.30119;
  long unsigned int D.30120;
  struct MonoAssembly * * D.30121;
  struct MonoAssembly * D.30122;
  _Bool D.30123;
  long int D.30124;
  long int D.30125;
  struct MonoImage * D.30130;
  struct MonoClass * class.314;
  struct GHashTable * nspace_table;
  struct MonoImage * loaded_image;
  guint32 token;
  int i;
  struct MonoClass * class;
  char * nested;
  char buf[1024];

  try
    {
      token = 0;
      nested = __builtin_strchr (name, 47);
      if (nested != 0B) goto <D.30036>; else goto <D.30037>;
      <D.30036>:
      {
        int pos;
        int len;

        nested.304 = (long int) nested;
        name.305 = (long int) name;
        D.30040 = nested.304 - name.305;
        pos = (int) D.30040;
        D.30041 = strlen (name);
        len = (int) D.30041;
        if (len > 1023) goto <D.30042>; else goto <D.30043>;
        <D.30042>:
        D.30044 = 0B;
        return D.30044;
        <D.30043>:
        D.30045 = len + 1;
        D.30046 = (long unsigned int) D.30045;
        memcpy (&buf, name, D.30046);
        buf[pos] = 0;
        D.30047 = (sizetype) pos;
        D.30048 = D.30047 + 1;
        nested = &buf + D.30048;
        name = &buf;
      }
      <D.30037>:
      get_class_from_name.306 = get_class_from_name;
      if (get_class_from_name.306 != 0B) goto <D.30050>; else goto <D.30051>;
      <D.30050>:
      D.30052 = BIT_FIELD_REF <*image, 32, 6592>;
      D.30053 = D.30052 & 16777215;
      if (D.30053 == 0) goto <D.30054>; else goto <D.30055>;
      <D.30054>:
      {
        gboolean res;

        get_class_from_name.306 = get_class_from_name;
        res = get_class_from_name.306 (image, name_space, name, &class);
        if (res != 0) goto <D.30056>; else goto <D.30057>;
        <D.30056>:
        class.307 = class;
        if (class.307 == 0B) goto <D.30059>; else goto <D.30060>;
        <D.30059>:
        class.308 = search_modules (image, name_space, name);
        class = class.308;
        <D.30060>:
        if (nested != 0B) goto <D.30062>; else goto <D.30063>;
        <D.30062>:
        class.307 = class;
        if (class.307 != 0B) goto <D.30065>; else goto <D.30066>;
        <D.30065>:
        class.307 = class;
        iftmp.309 = return_nested_in (class.307, nested);
        goto <D.30067>;
        <D.30066>:
        iftmp.309 = 0B;
        <D.30067>:
        D.30044 = iftmp.309;
        return D.30044;
        <D.30063>:
        D.30044 = class;
        return D.30044;
        <D.30057>:
      }
      <D.30055>:
      <D.30051>:
      mono_image_lock (image);
      D.30068 = image->name_cache;
      if (D.30068 == 0B) goto <D.30069>; else goto <D.30070>;
      <D.30069>:
      mono_image_init_name_cache (image);
      <D.30070>:
      D.30068 = image->name_cache;
      nspace_table = monoeg_g_hash_table_lookup (D.30068, name_space);
      if (nspace_table != 0B) goto <D.30071>; else goto <D.30072>;
      <D.30071>:
      D.30073 = monoeg_g_hash_table_lookup (nspace_table, name);
      D.30074 = (long int) D.30073;
      token = (guint32) D.30074;
      <D.30072>:
      mono_image_unlock (image);
      if (token == 0) goto <D.30075>; else goto <D.30076>;
      <D.30075>:
      D.30077 = BIT_FIELD_REF <*image, 8, 224>;
      D.30078 = D.30077 & 8;
      if (D.30078 != 0) goto <D.30079>; else goto <D.30080>;
      <D.30079>:
      D.30081 = image->modules;
      if (D.30081 != 0B) goto <D.30082>; else goto <D.30083>;
      <D.30082>:
      i = 0;
      goto <D.21304>;
      <D.21303>:
      {
        struct MonoImage * module;

        D.30081 = image->modules;
        D.30084 = (long unsigned int) i;
        D.30085 = D.30084 * 8;
        D.30086 = D.30081 + D.30085;
        module = *D.30086;
        class.310 = mono_class_from_name (module, name_space, name);
        class = class.310;
        class.307 = class;
        if (class.307 != 0B) goto <D.30088>; else goto <D.30089>;
        <D.30088>:
        D.30044 = class;
        return D.30044;
        <D.30089>:
      }
      i = i + 1;
      <D.21304>:
      i.311 = (unsigned int) i;
      D.30091 = image->module_count;
      if (i.311 < D.30091) goto <D.21303>; else goto <D.21305>;
      <D.21305>:
      <D.30083>:
      <D.30080>:
      <D.30076>:
      if (token == 0) goto <D.30092>; else goto <D.30093>;
      <D.30092>:
      class.312 = search_modules (image, name_space, name);
      class = class.312;
      class.307 = class;
      if (class.307 != 0B) goto <D.30095>; else goto <D.30096>;
      <D.30095>:
      D.30044 = class;
      return D.30044;
      <D.30096>:
      <D.30093>:
      if (token == 0) goto <D.30097>; else goto <D.30098>;
      <D.30097>:
      D.30044 = 0B;
      return D.30044;
      <D.30098>:
      D.30099 = token >> 24;
      if (D.30099 == 39) goto <D.30100>; else goto <D.30101>;
      <D.30100>:
      {
        struct MonoTableInfo * t;
        guint32 cols[5];
        guint32 idx;
        guint32 impl;

        try
          {
            t = &image->tables[39];
            idx = token & 16777215;
            D.30102 = idx + 4294967295;
            D.30103 = (int) D.30102;
            mono_metadata_decode_row (t, D.30103, &cols, 5);
            impl = cols[4];
            D.30104 = impl & 3;
            if (D.30104 == 0) goto <D.30105>; else goto <D.30106>;
            <D.30105>:
            D.30107 = impl >> 2;
            D.30108 = image->assembly;
            loaded_image = mono_assembly_load_module (D.30108, D.30107);
            if (loaded_image == 0B) goto <D.30109>; else goto <D.30110>;
            <D.30109>:
            D.30044 = 0B;
            return D.30044;
            <D.30110>:
            class.313 = mono_class_from_name (loaded_image, name_space, name);
            class = class.313;
            if (nested != 0B) goto <D.30112>; else goto <D.30113>;
            <D.30112>:
            class.307 = class;
            D.30044 = return_nested_in (class.307, nested);
            return D.30044;
            <D.30113>:
            D.30044 = class;
            return D.30044;
            <D.30106>:
            D.30104 = impl & 3;
            if (D.30104 == 1) goto <D.30114>; else goto <D.30115>;
            <D.30114>:
            {
              guint32 assembly_idx;

              assembly_idx = impl >> 2;
              D.30116 = assembly_idx + 4294967295;
              D.30117 = (int) D.30116;
              mono_assembly_load_reference (image, D.30117);
              D.30118 = image->references;
              D.30116 = assembly_idx + 4294967295;
              D.30119 = (long unsigned int) D.30116;
              D.30120 = D.30119 * 8;
              D.30121 = D.30118 + D.30120;
              D.30122 = *D.30121;
              D.30123 = D.30122 == 0B;
              D.30124 = (long int) D.30123;
              D.30125 = __builtin_expect (D.30124, 0);
              if (D.30125 != 0) goto <D.30126>; else goto <D.30127>;
              <D.30126>:
              monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 7552, "image->references [assembly_idx - 1]");
              <D.30127>:
              D.30118 = image->references;
              D.30116 = assembly_idx + 4294967295;
              D.30119 = (long unsigned int) D.30116;
              D.30120 = D.30119 * 8;
              D.30121 = D.30118 + D.30120;
              D.30122 = *D.30121;
              if (D.30122 == -1B) goto <D.30128>; else goto <D.30129>;
              <D.30128>:
              D.30044 = 0B;
              return D.30044;
              <D.30129>:
              D.30118 = image->references;
              D.30116 = assembly_idx + 4294967295;
              D.30119 = (long unsigned int) D.30116;
              D.30120 = D.30119 * 8;
              D.30121 = D.30118 + D.30120;
              D.30122 = *D.30121;
              D.30130 = D.30122->image;
              D.30044 = mono_class_from_name (D.30130, name_space, name);
              return D.30044;
            }
            <D.30115>:
            monoeg_g_log (0B, 4, "not yet implemented");
            <D.21311>:
            goto <D.21311>;
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      <D.30101>:
      token = token | 33554432;
      class.314 = mono_class_get (image, token);
      class = class.314;
      if (nested != 0B) goto <D.30132>; else goto <D.30133>;
      <D.30132>:
      class.307 = class;
      D.30044 = return_nested_in (class.307, nested);
      return D.30044;
      <D.30133>:
      D.30044 = class;
      return D.30044;
    }
  finally
    {
      class = {CLOBBER};
      buf = {CLOBBER};
    }
}


search_modules (struct MonoImage * image, const char * name_space, const char * name)
{
  unsigned int D.30137;
  int D.30140;
  struct MonoClass * D.30145;
  <unnamed-unsigned:24> D.30146;
  int D.30147;
  struct MonoTableInfo * file_table;
  struct MonoImage * file_image;
  struct MonoClass * class;
  int i;

  file_table = &image->tables[38];
  i = 0;
  goto <D.21285>;
  <D.21284>:
  {
    guint32 cols[3];

    try
      {
        mono_metadata_decode_row (file_table, i, &cols, 3);
        D.30137 = cols[0];
        if (D.30137 == 1) goto <D.30138>; else goto <D.30139>;
        <D.30138>:
        // predicted unlikely by continue predictor.
        goto <D.21283>;
        <D.30139>:
        D.30140 = i + 1;
        file_image = mono_image_load_file_for_image (image, D.30140);
        if (file_image != 0B) goto <D.30141>; else goto <D.30142>;
        <D.30141>:
        class = mono_class_from_name (file_image, name_space, name);
        if (class != 0B) goto <D.30143>; else goto <D.30144>;
        <D.30143>:
        D.30145 = class;
        return D.30145;
        <D.30144>:
        <D.30142>:
      }
    finally
      {
        cols = {CLOBBER};
      }
  }
  <D.21283>:
  i = i + 1;
  <D.21285>:
  D.30146 = file_table->rows;
  D.30147 = (int) D.30146;
  if (D.30147 > i) goto <D.21284>; else goto <D.21286>;
  <D.21286>:
  D.30145 = 0B;
  return D.30145;
}


return_nested_in (struct MonoClass * class, char * nested)
{
  int D.21269;
  const char * D.30154;
  struct MonoClass * D.30159;
  struct MonoClass * found;
  char * s;
  void * iter;

  try
    {
      s = __builtin_strchr (nested, 47);
      iter = 0B;
      if (s != 0B) goto <D.30152>; else goto <D.30153>;
      <D.30152>:
      *s = 0;
      s = s + 1;
      <D.30153>:
      goto <D.21271>;
      <D.21270>:
      {
        size_t __s1_len;
        size_t __s2_len;

        D.30154 = found->name;
        D.21269 = __builtin_strcmp (D.30154, nested);
      }
      if (D.21269 == 0) goto <D.30155>; else goto <D.30156>;
      <D.30155>:
      if (s != 0B) goto <D.30157>; else goto <D.30158>;
      <D.30157>:
      D.30159 = return_nested_in (found, s);
      return D.30159;
      <D.30158>:
      D.30159 = found;
      return D.30159;
      <D.30156>:
      <D.21271>:
      found = mono_class_get_nested_types (class, &iter);
      if (found != 0B) goto <D.21270>; else goto <D.21272>;
      <D.21272>:
      D.30159 = 0B;
      return D.30159;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


mono_class_is_subclass_of (struct MonoClass * klass, struct MonoClass * klassc, gboolean check_interfaces)
{
  unsigned int D.30166;
  unsigned int D.30167;
  unsigned char D.30169;
  unsigned int D.30171;
  unsigned int D.30172;
  unsigned char D.30174;
  short unsigned int D.30177;
  short unsigned int D.30178;
  guint8 * D.30181;
  short unsigned int D.30182;
  sizetype D.30183;
  guint8 * D.30184;
  unsigned char D.30185;
  int D.30186;
  int D.30187;
  int D.30188;
  int D.30189;
  int D.30190;
  mono_bool D.30193;
  struct MonoClass * * D.30203;
  long unsigned int D.30204;
  long unsigned int D.30205;
  struct MonoClass * * D.30206;
  short unsigned int D.30209;
  int D.30210;
  int D.30217;
  struct MonoClass * D.30220;

  if (check_interfaces != 0) goto <D.30165>; else goto <D.30162>;
  <D.30165>:
  D.30166 = klassc->flags;
  D.30167 = D.30166 & 32;
  if (D.30167 != 0) goto <D.30163>; else goto <D.30168>;
  <D.30168>:
  D.30169 = klassc->byval_arg.type;
  if (D.30169 == 19) goto <D.30163>; else goto <D.30170>;
  <D.30170>:
  D.30169 = klassc->byval_arg.type;
  if (D.30169 == 30) goto <D.30163>; else goto <D.30162>;
  <D.30163>:
  D.30171 = klass->flags;
  D.30172 = D.30171 & 32;
  if (D.30172 == 0) goto <D.30173>; else goto <D.30162>;
  <D.30173>:
  D.30174 = klass->byval_arg.type;
  if (D.30174 != 19) goto <D.30175>; else goto <D.30162>;
  <D.30175>:
  D.30174 = klass->byval_arg.type;
  if (D.30174 != 30) goto <D.30176>; else goto <D.30162>;
  <D.30176>:
  D.30177 = klassc->interface_id;
  D.30178 = klass->max_interface_id;
  if (D.30177 <= D.30178) goto <D.30179>; else goto <D.30180>;
  <D.30179>:
  D.30181 = klass->interface_bitmap;
  D.30177 = klassc->interface_id;
  D.30182 = D.30177 >> 3;
  D.30183 = (sizetype) D.30182;
  D.30184 = D.30181 + D.30183;
  D.30185 = *D.30184;
  D.30186 = (int) D.30185;
  D.30177 = klassc->interface_id;
  D.30187 = (int) D.30177;
  D.30188 = D.30187 & 7;
  D.30189 = D.30186 >> D.30188;
  D.30190 = D.30189 & 1;
  if (D.30190 != 0) goto <D.30191>; else goto <D.30192>;
  <D.30191>:
  D.30193 = 1;
  return D.30193;
  <D.30192>:
  <D.30180>:
  goto <D.30164>;
  <D.30162>:
  if (check_interfaces != 0) goto <D.30198>; else goto <D.30194>;
  <D.30198>:
  D.30166 = klassc->flags;
  D.30167 = D.30166 & 32;
  if (D.30167 != 0) goto <D.30195>; else goto <D.30199>;
  <D.30199>:
  D.30169 = klassc->byval_arg.type;
  if (D.30169 == 19) goto <D.30195>; else goto <D.30200>;
  <D.30200>:
  D.30169 = klassc->byval_arg.type;
  if (D.30169 == 30) goto <D.30195>; else goto <D.30194>;
  <D.30195>:
  D.30171 = klass->flags;
  D.30172 = D.30171 & 32;
  if (D.30172 != 0) goto <D.30196>; else goto <D.30201>;
  <D.30201>:
  D.30174 = klass->byval_arg.type;
  if (D.30174 == 19) goto <D.30196>; else goto <D.30202>;
  <D.30202>:
  D.30174 = klass->byval_arg.type;
  if (D.30174 == 30) goto <D.30196>; else goto <D.30194>;
  <D.30196>:
  {
    int i;

    i = 0;
    goto <D.21320>;
    <D.21319>:
    {
      struct MonoClass * ic;

      D.30203 = klass->interfaces;
      D.30204 = (long unsigned int) i;
      D.30205 = D.30204 * 8;
      D.30206 = D.30203 + D.30205;
      ic = *D.30206;
      if (ic == klassc) goto <D.30207>; else goto <D.30208>;
      <D.30207>:
      D.30193 = 1;
      return D.30193;
      <D.30208>:
    }
    i = i + 1;
    <D.21320>:
    D.30209 = klass->interface_count;
    D.30210 = (int) D.30209;
    if (D.30210 > i) goto <D.21319>; else goto <D.21321>;
    <D.21321>:
  }
  goto <D.30197>;
  <D.30194>:
  D.30171 = klass->flags;
  D.30172 = D.30171 & 32;
  if (D.30172 == 0) goto <D.30211>; else goto <D.30212>;
  <D.30211>:
  D.30174 = klass->byval_arg.type;
  if (D.30174 != 19) goto <D.30213>; else goto <D.30214>;
  <D.30213>:
  D.30174 = klass->byval_arg.type;
  if (D.30174 != 30) goto <D.30215>; else goto <D.30216>;
  <D.30215>:
  D.30217 = mono_class_has_parent (klass, klassc);
  if (D.30217 != 0) goto <D.30218>; else goto <D.30219>;
  <D.30218>:
  D.30193 = 1;
  return D.30193;
  <D.30219>:
  <D.30216>:
  <D.30214>:
  <D.30212>:
  <D.30197>:
  <D.30164>:
  D.30220 = mono_defaults.object_class;
  if (D.30220 == klassc) goto <D.30221>; else goto <D.30222>;
  <D.30221>:
  D.30193 = 1;
  return D.30193;
  <D.30222>:
  D.30193 = 0;
  return D.30193;
}


mono_class_has_parent (struct MonoClass * klass, struct MonoClass * parent)
{
  struct MonoClass * * D.30224;
  _Bool D.30225;
  long int D.30226;
  long int D.30227;
  struct MonoClass * * D.30230;
  _Bool D.30231;
  long int D.30232;
  long int D.30233;
  gboolean D.30236;

  D.30224 = klass->supertypes;
  D.30225 = D.30224 == 0B;
  D.30226 = (long int) D.30225;
  D.30227 = __builtin_expect (D.30226, 0);
  if (D.30227 != 0) goto <D.30228>; else goto <D.30229>;
  <D.30228>:
  mono_class_setup_supertypes (klass);
  <D.30229>:
  D.30230 = parent->supertypes;
  D.30231 = D.30230 == 0B;
  D.30232 = (long int) D.30231;
  D.30233 = __builtin_expect (D.30232, 0);
  if (D.30233 != 0) goto <D.30234>; else goto <D.30235>;
  <D.30234>:
  mono_class_setup_supertypes (parent);
  <D.30235>:
  D.30236 = mono_class_has_parent_fast (klass, parent);
  return D.30236;
}


mono_class_has_parent_fast (struct MonoClass * klass, struct MonoClass * parent)
{
  gboolean D.30238;
  int iftmp.315;
  short unsigned int D.30242;
  short unsigned int D.30243;
  struct MonoClass * * D.30245;
  long unsigned int D.30246;
  long unsigned int D.30247;
  sizetype D.30248;
  struct MonoClass * * D.30249;
  struct MonoClass * D.30250;

  D.30242 = klass->idepth;
  D.30243 = parent->idepth;
  if (D.30242 >= D.30243) goto <D.30244>; else goto <D.30240>;
  <D.30244>:
  D.30245 = klass->supertypes;
  D.30243 = parent->idepth;
  D.30246 = (long unsigned int) D.30243;
  D.30247 = D.30246 * 8;
  D.30248 = D.30247 + 18446744073709551608;
  D.30249 = D.30245 + D.30248;
  D.30250 = *D.30249;
  if (D.30250 == parent) goto <D.30251>; else goto <D.30240>;
  <D.30251>:
  iftmp.315 = 1;
  goto <D.30241>;
  <D.30240>:
  iftmp.315 = 0;
  <D.30241>:
  D.30238 = iftmp.315;
  return D.30238;
}


mono_class_has_variant_generic_params (struct MonoClass * klass)
{
  struct MonoGenericClass * D.30253;
  gboolean D.30256;
  struct MonoClass * D.30257;
  struct MonoGenericParamFull * D.30258;
  long unsigned int D.30259;
  long unsigned int D.30260;
  struct MonoGenericParamFull * D.30261;
  short unsigned int D.30262;
  int D.30263;
  int D.30264;
  <unnamed-signed:31> D.30267;
  int D.30268;
  int i;
  struct MonoGenericContainer * container;

  D.30253 = klass->generic_class;
  if (D.30253 == 0B) goto <D.30254>; else goto <D.30255>;
  <D.30254>:
  D.30256 = 0;
  return D.30256;
  <D.30255>:
  D.30253 = klass->generic_class;
  D.30257 = D.30253->container_class;
  container = D.30257->generic_container;
  i = 0;
  goto <D.21331>;
  <D.21330>:
  D.30258 = container->type_params;
  D.30259 = (long unsigned int) i;
  D.30260 = D.30259 * 56;
  D.30261 = D.30258 + D.30260;
  D.30262 = D.30261->info.flags;
  D.30263 = (int) D.30262;
  D.30264 = D.30263 & 3;
  if (D.30264 != 0) goto <D.30265>; else goto <D.30266>;
  <D.30265>:
  D.30256 = 1;
  return D.30256;
  <D.30266>:
  i = i + 1;
  <D.21331>:
  D.30267 = container->type_argc;
  D.30268 = (int) D.30267;
  if (D.30268 > i) goto <D.21330>; else goto <D.21332>;
  <D.21332>:
  D.30256 = 0;
  return D.30256;
}


mono_class_is_variant_compatible (struct MonoClass * klass, struct MonoClass * oklass, gboolean check_for_reference_conv)
{
  gboolean D.30272;
  struct MonoClass * D.30275;
  struct MonoGenericClass * D.30277;
  struct MonoGenericInst * D.30278;
  struct MonoGenericClass * D.30279;
  struct MonoGenericInst * D.30280;
  long unsigned int D.30281;
  long unsigned int D.30282;
  struct MonoType * * D.30283;
  struct MonoType * D.30284;
  struct MonoType * * D.30285;
  struct MonoType * D.30286;
  unsigned char D.30289;
  unsigned char D.30290;
  unsigned char D.30291;
  unsigned char D.30292;
  unsigned char D.30294;
  struct MonoGenericParamFull * D.30298;
  long unsigned int D.30299;
  struct MonoGenericParamFull * D.30300;
  short unsigned int D.30301;
  int D.30302;
  int D.30303;
  int D.30306;
  int D.30310;
  int D.30313;
  <unnamed-signed:31> D.30317;
  int D.30318;
  int j;
  struct MonoType * * klass_argv;
  struct MonoType * * oklass_argv;
  struct MonoClass * klass_gtd;
  struct MonoGenericContainer * container;

  klass_gtd = mono_class_get_generic_type_definition (klass);
  container = klass_gtd->generic_container;
  if (klass == oklass) goto <D.30270>; else goto <D.30271>;
  <D.30270>:
  D.30272 = 1;
  return D.30272;
  <D.30271>:
  D.30275 = mono_class_get_generic_type_definition (oklass);
  if (D.30275 != klass_gtd) goto <D.30273>; else goto <D.30276>;
  <D.30276>:
  if (oklass == klass_gtd) goto <D.30273>; else goto <D.30274>;
  <D.30273>:
  D.30272 = 0;
  return D.30272;
  <D.30274>:
  D.30277 = klass->generic_class;
  D.30278 = D.30277->context.class_inst;
  klass_argv = &D.30278->type_argv[0];
  D.30279 = oklass->generic_class;
  D.30280 = D.30279->context.class_inst;
  oklass_argv = &D.30280->type_argv[0];
  j = 0;
  goto <D.21353>;
  <D.21352>:
  {
    struct MonoClass * param1_class;
    struct MonoClass * param2_class;

    D.30281 = (long unsigned int) j;
    D.30282 = D.30281 * 8;
    D.30283 = klass_argv + D.30282;
    D.30284 = *D.30283;
    param1_class = mono_class_from_mono_type (D.30284);
    D.30281 = (long unsigned int) j;
    D.30282 = D.30281 * 8;
    D.30285 = oklass_argv + D.30282;
    D.30286 = *D.30285;
    param2_class = mono_class_from_mono_type (D.30286);
    D.30289 = BIT_FIELD_REF <*param1_class, 8, 256>;
    D.30290 = BIT_FIELD_REF <*param2_class, 8, 256>;
    D.30291 = D.30289 ^ D.30290;
    D.30292 = D.30291 & 8;
    if (D.30292 != 0) goto <D.30287>; else goto <D.30293>;
    <D.30293>:
    D.30289 = BIT_FIELD_REF <*param1_class, 8, 256>;
    D.30294 = D.30289 & 8;
    if (D.30294 != 0) goto <D.30295>; else goto <D.30288>;
    <D.30295>:
    if (param1_class != param2_class) goto <D.30287>; else goto <D.30288>;
    <D.30287>:
    D.30272 = 0;
    return D.30272;
    <D.30288>:
    if (param1_class != param2_class) goto <D.30296>; else goto <D.30297>;
    <D.30296>:
    D.30298 = container->type_params;
    D.30281 = (long unsigned int) j;
    D.30299 = D.30281 * 56;
    D.30300 = D.30298 + D.30299;
    D.30301 = D.30300->info.flags;
    D.30302 = (int) D.30301;
    D.30303 = D.30302 & 1;
    if (D.30303 != 0) goto <D.30304>; else goto <D.30305>;
    <D.30304>:
    D.30306 = mono_gparam_is_reference_conversible (param1_class, param2_class, check_for_reference_conv);
    if (D.30306 == 0) goto <D.30307>; else goto <D.30308>;
    <D.30307>:
    D.30272 = 0;
    return D.30272;
    <D.30308>:
    goto <D.30309>;
    <D.30305>:
    D.30298 = container->type_params;
    D.30281 = (long unsigned int) j;
    D.30299 = D.30281 * 56;
    D.30300 = D.30298 + D.30299;
    D.30301 = D.30300->info.flags;
    D.30302 = (int) D.30301;
    D.30310 = D.30302 & 2;
    if (D.30310 != 0) goto <D.30311>; else goto <D.30312>;
    <D.30311>:
    D.30313 = mono_gparam_is_reference_conversible (param2_class, param1_class, check_for_reference_conv);
    if (D.30313 == 0) goto <D.30314>; else goto <D.30315>;
    <D.30314>:
    D.30272 = 0;
    return D.30272;
    <D.30315>:
    goto <D.30316>;
    <D.30312>:
    D.30272 = 0;
    return D.30272;
    <D.30316>:
    <D.30309>:
    <D.30297>:
  }
  j = j + 1;
  <D.21353>:
  D.30317 = container->type_argc;
  D.30318 = (int) D.30317;
  if (D.30318 > j) goto <D.21352>; else goto <D.21354>;
  <D.21354>:
  D.30272 = 1;
  return D.30272;
}


mono_gparam_is_reference_conversible (struct MonoClass * target, struct MonoClass * candidate, gboolean check_for_reference_conv)
{
  gboolean D.30322;
  struct MonoType * D.30325;
  int D.30326;
  struct MonoType * D.30329;
  int D.30330;
  struct MonoGenericParamInfo * iftmp.316;
  struct MonoGenericContainer * D.30334;
  short unsigned int D.30341;
  int D.30342;
  int D.30343;
  int D.30344;

  if (target == candidate) goto <D.30320>; else goto <D.30321>;
  <D.30320>:
  D.30322 = 1;
  return D.30322;
  <D.30321>:
  if (check_for_reference_conv != 0) goto <D.30323>; else goto <D.30324>;
  <D.30323>:
  D.30325 = &target->byval_arg;
  D.30326 = mono_type_is_generic_argument (D.30325);
  if (D.30326 != 0) goto <D.30327>; else goto <D.30328>;
  <D.30327>:
  D.30329 = &candidate->byval_arg;
  D.30330 = mono_type_is_generic_argument (D.30329);
  if (D.30330 != 0) goto <D.30331>; else goto <D.30332>;
  <D.30331>:
  {
    struct MonoGenericParam * gparam;
    struct MonoGenericParamInfo * pinfo;

    gparam = candidate->byval_arg.data.generic_param;
    D.30334 = gparam->owner;
    if (D.30334 != 0B) goto <D.30335>; else goto <D.30336>;
    <D.30335>:
    iftmp.316 = &MEM[(struct MonoGenericParamFull *)gparam].info;
    goto <D.30337>;
    <D.30336>:
    iftmp.316 = 0B;
    <D.30337>:
    pinfo = iftmp.316;
    if (pinfo == 0B) goto <D.30338>; else goto <D.30340>;
    <D.30340>:
    D.30341 = pinfo->flags;
    D.30342 = (int) D.30341;
    D.30343 = D.30342 & 4;
    if (D.30343 == 0) goto <D.30338>; else goto <D.30339>;
    <D.30338>:
    D.30322 = 0;
    return D.30322;
    <D.30339>:
  }
  <D.30332>:
  <D.30328>:
  <D.30324>:
  D.30344 = mono_class_is_assignable_from (target, candidate);
  if (D.30344 == 0) goto <D.30345>; else goto <D.30346>;
  <D.30345>:
  D.30322 = 0;
  return D.30322;
  <D.30346>:
  D.30322 = 1;
  return D.30322;
}


mono_type_is_generic_argument (struct MonoType * type)
{
  gboolean D.30348;
  unsigned char D.30349;
  _Bool D.30350;
  _Bool D.30351;
  _Bool D.30352;

  D.30349 = type->type;
  D.30350 = D.30349 == 19;
  D.30351 = D.30349 == 30;
  D.30352 = D.30350 | D.30351;
  D.30348 = (gboolean) D.30352;
  return D.30348;
}


mono_class_is_assignable_from (struct MonoClass * klass, struct MonoClass * oklass)
{
  unsigned char D.30354;
  unsigned char D.30355;
  unsigned char D.30358;
  unsigned char D.30359;
  unsigned char D.30364;
  unsigned char D.30366;
  mono_bool D.30367;
  struct MonoType * D.30368;
  int D.30369;
  struct MonoType * D.30372;
  int D.30373;
  unsigned int D.30378;
  unsigned int D.30379;
  unsigned char D.30381;
  unsigned char D.30383;
  _Bool D.30384;
  _Bool D.30385;
  _Bool D.30386;
  struct MonoGenericContainer * D.30389;
  struct MonoGenericParamFull * D.30390;
  short unsigned int D.30391;
  long unsigned int D.30392;
  long unsigned int D.30393;
  struct MonoGenericParamFull * D.30394;
  long unsigned int D.30397;
  long unsigned int D.30398;
  struct MonoClass * * D.30399;
  struct MonoClass * D.30400;
  int D.30401;
  unsigned int D.30404;
  guint8 * D.30407;
  short unsigned int D.30412;
  short unsigned int D.30413;
  short unsigned int D.30416;
  sizetype D.30417;
  guint8 * D.30418;
  unsigned char D.30419;
  int D.30420;
  int D.30421;
  int D.30422;
  int D.30423;
  int D.30424;
  int D.30427;
  int D.30430;
  struct MonoClass * * D.30433;
  long unsigned int D.30434;
  long unsigned int D.30435;
  struct MonoClass * * D.30436;
  int D.30437;
  short unsigned int D.30440;
  int D.30441;
  unsigned char D.30442;
  unsigned char D.30443;
  int D.30446;
  int D.30449;
  unsigned char D.30453;
  unsigned char D.30456;
  unsigned char D.30459;
  unsigned char D.30462;
  unsigned char D.30463;
  struct MonoClass * D.30468;
  struct MonoClass * D.30470;
  struct MonoClass * D.30472;
  struct MonoClass * D.30473;
  struct MonoClass * D.30474;
  int D.30475;
  int D.30478;

  D.30354 = BIT_FIELD_REF <*klass, 8, 256>;
  D.30355 = D.30354 & 1;
  if (D.30355 == 0) goto <D.30356>; else goto <D.30357>;
  <D.30356>:
  mono_class_init (klass);
  <D.30357>:
  D.30358 = BIT_FIELD_REF <*oklass, 8, 256>;
  D.30359 = D.30358 & 1;
  if (D.30359 == 0) goto <D.30360>; else goto <D.30361>;
  <D.30360>:
  mono_class_init (oklass);
  <D.30361>:
  D.30364 = klass->exception_type;
  if (D.30364 != 0) goto <D.30362>; else goto <D.30365>;
  <D.30365>:
  D.30366 = oklass->exception_type;
  if (D.30366 != 0) goto <D.30362>; else goto <D.30363>;
  <D.30362>:
  D.30367 = 0;
  return D.30367;
  <D.30363>:
  D.30368 = &klass->byval_arg;
  D.30369 = mono_type_is_generic_argument (D.30368);
  if (D.30369 != 0) goto <D.30370>; else goto <D.30371>;
  <D.30370>:
  D.30372 = &oklass->byval_arg;
  D.30373 = mono_type_is_generic_argument (D.30372);
  if (D.30373 == 0) goto <D.30374>; else goto <D.30375>;
  <D.30374>:
  D.30367 = 0;
  return D.30367;
  <D.30375>:
  D.30367 = mono_gparam_is_assignable_from (klass, oklass);
  return D.30367;
  <D.30371>:
  D.30378 = klass->flags;
  D.30379 = D.30378 & 32;
  if (D.30379 != 0) goto <D.30376>; else goto <D.30380>;
  <D.30380>:
  D.30381 = klass->byval_arg.type;
  if (D.30381 == 19) goto <D.30376>; else goto <D.30382>;
  <D.30382>:
  D.30381 = klass->byval_arg.type;
  if (D.30381 == 30) goto <D.30376>; else goto <D.30377>;
  <D.30376>:
  D.30383 = oklass->byval_arg.type;
  D.30384 = D.30383 == 19;
  D.30385 = D.30383 == 30;
  D.30386 = D.30384 | D.30385;
  if (D.30386 != 0) goto <D.30387>; else goto <D.30388>;
  <D.30387>:
  {
    struct MonoGenericParam * gparam;
    struct MonoClass * * constraints;
    int i;

    gparam = oklass->byval_arg.data.generic_param;
    D.30389 = gparam->owner;
    D.30390 = D.30389->type_params;
    D.30391 = gparam->num;
    D.30392 = (long unsigned int) D.30391;
    D.30393 = D.30392 * 56;
    D.30394 = D.30390 + D.30393;
    constraints = D.30394->info.constraints;
    if (constraints != 0B) goto <D.30395>; else goto <D.30396>;
    <D.30395>:
    i = 0;
    goto <D.21394>;
    <D.21393>:
    D.30397 = (long unsigned int) i;
    D.30398 = D.30397 * 8;
    D.30399 = constraints + D.30398;
    D.30400 = *D.30399;
    D.30401 = mono_class_is_assignable_from (klass, D.30400);
    if (D.30401 != 0) goto <D.30402>; else goto <D.30403>;
    <D.30402>:
    D.30367 = 1;
    return D.30367;
    <D.30403>:
    i = i + 1;
    <D.21394>:
    D.30397 = (long unsigned int) i;
    D.30398 = D.30397 * 8;
    D.30399 = constraints + D.30398;
    D.30400 = *D.30399;
    if (D.30400 != 0B) goto <D.21393>; else goto <D.21395>;
    <D.21395>:
    <D.30396>:
    D.30367 = 0;
    return D.30367;
  }
  <D.30388>:
  D.30404 = oklass->ref_info_handle;
  if (D.30404 != 0) goto <D.30405>; else goto <D.30406>;
  <D.30405>:
  D.30407 = oklass->interface_bitmap;
  if (D.30407 == 0B) goto <D.30408>; else goto <D.30409>;
  <D.30408>:
  D.30367 = mono_reflection_call_is_assignable_to (oklass, klass);
  return D.30367;
  <D.30409>:
  <D.30406>:
  D.30407 = oklass->interface_bitmap;
  if (D.30407 == 0B) goto <D.30410>; else goto <D.30411>;
  <D.30410>:
  D.30367 = 0;
  return D.30367;
  <D.30411>:
  D.30412 = klass->interface_id;
  D.30413 = oklass->max_interface_id;
  if (D.30412 <= D.30413) goto <D.30414>; else goto <D.30415>;
  <D.30414>:
  D.30407 = oklass->interface_bitmap;
  D.30412 = klass->interface_id;
  D.30416 = D.30412 >> 3;
  D.30417 = (sizetype) D.30416;
  D.30418 = D.30407 + D.30417;
  D.30419 = *D.30418;
  D.30420 = (int) D.30419;
  D.30412 = klass->interface_id;
  D.30421 = (int) D.30412;
  D.30422 = D.30421 & 7;
  D.30423 = D.30420 >> D.30422;
  D.30424 = D.30423 & 1;
  if (D.30424 != 0) goto <D.30425>; else goto <D.30426>;
  <D.30425>:
  D.30367 = 1;
  return D.30367;
  <D.30426>:
  <D.30415>:
  D.30427 = mono_class_has_variant_generic_params (klass);
  if (D.30427 != 0) goto <D.30428>; else goto <D.30429>;
  <D.30428>:
  {
    struct MonoError error;
    int i;

    try
      {
        mono_class_setup_interfaces (oklass, &error);
        D.30430 = mono_error_ok (&error);
        if (D.30430 == 0) goto <D.30431>; else goto <D.30432>;
        <D.30431>:
        mono_error_cleanup (&error);
        D.30367 = 0;
        return D.30367;
        <D.30432>:
        i = 0;
        goto <D.21400>;
        <D.21399>:
        {
          struct MonoClass * iface;

          D.30433 = oklass->interfaces_packed;
          D.30434 = (long unsigned int) i;
          D.30435 = D.30434 * 8;
          D.30436 = D.30433 + D.30435;
          iface = *D.30436;
          D.30437 = mono_class_is_variant_compatible (klass, iface, 0);
          if (D.30437 != 0) goto <D.30438>; else goto <D.30439>;
          <D.30438>:
          D.30367 = 1;
          return D.30367;
          <D.30439>:
        }
        i = i + 1;
        <D.21400>:
        D.30440 = oklass->interface_offsets_count;
        D.30441 = (int) D.30440;
        if (D.30441 > i) goto <D.21399>; else goto <D.21401>;
        <D.21401>:
      }
    finally
      {
        error = {CLOBBER};
      }
  }
  <D.30429>:
  D.30367 = 0;
  return D.30367;
  <D.30377>:
  D.30442 = BIT_FIELD_REF <*klass, 8, 280>;
  D.30443 = D.30442 & 1;
  if (D.30443 != 0) goto <D.30444>; else goto <D.30445>;
  <D.30444>:
  D.30446 = mono_class_has_variant_generic_params (klass);
  if (D.30446 != 0) goto <D.30447>; else goto <D.30448>;
  <D.30447>:
  D.30449 = mono_class_is_variant_compatible (klass, oklass, 0);
  if (D.30449 != 0) goto <D.30450>; else goto <D.30451>;
  <D.30450>:
  D.30367 = 1;
  return D.30367;
  <D.30451>:
  <D.30448>:
  goto <D.30452>;
  <D.30445>:
  D.30453 = klass->rank;
  if (D.30453 != 0) goto <D.30454>; else goto <D.30455>;
  <D.30454>:
  {
    struct MonoClass * eclass;
    struct MonoClass * eoclass;

    D.30456 = oklass->rank;
    D.30453 = klass->rank;
    if (D.30456 != D.30453) goto <D.30457>; else goto <D.30458>;
    <D.30457>:
    D.30367 = 0;
    return D.30367;
    <D.30458>:
    D.30459 = oklass->byval_arg.type;
    D.30381 = klass->byval_arg.type;
    if (D.30459 != D.30381) goto <D.30460>; else goto <D.30461>;
    <D.30460>:
    D.30367 = 0;
    return D.30367;
    <D.30461>:
    eclass = klass->cast_class;
    eoclass = oklass->cast_class;
    D.30462 = BIT_FIELD_REF <*eoclass, 8, 256>;
    D.30463 = D.30462 & 8;
    if (D.30463 != 0) goto <D.30464>; else goto <D.30465>;
    <D.30464>:
    D.30468 = mono_defaults.enum_class;
    if (D.30468 == eclass) goto <D.30466>; else goto <D.30469>;
    <D.30469>:
    D.30468 = mono_defaults.enum_class;
    D.30470 = D.30468->parent;
    if (D.30470 == eclass) goto <D.30466>; else goto <D.30471>;
    <D.30471>:
    D.30472 = mono_defaults.object_class;
    if (D.30472 == eclass) goto <D.30466>; else goto <D.30467>;
    <D.30466>:
    D.30367 = 0;
    return D.30367;
    <D.30467>:
    <D.30465>:
    D.30473 = oklass->cast_class;
    D.30474 = klass->cast_class;
    D.30367 = mono_class_is_assignable_from (D.30474, D.30473);
    return D.30367;
  }
  <D.30455>:
  D.30475 = mono_class_is_nullable (klass);
  if (D.30475 != 0) goto <D.30476>; else goto <D.30477>;
  <D.30476>:
  D.30478 = mono_class_is_nullable (oklass);
  if (D.30478 != 0) goto <D.30479>; else goto <D.30480>;
  <D.30479>:
  D.30473 = oklass->cast_class;
  D.30474 = klass->cast_class;
  D.30367 = mono_class_is_assignable_from (D.30474, D.30473);
  return D.30367;
  <D.30480>:
  D.30474 = klass->cast_class;
  D.30367 = mono_class_is_assignable_from (D.30474, oklass);
  return D.30367;
  <D.30477>:
  D.30472 = mono_defaults.object_class;
  if (D.30472 == klass) goto <D.30481>; else goto <D.30482>;
  <D.30481>:
  D.30367 = 1;
  return D.30367;
  <D.30482>:
  <D.30452>:
  D.30367 = mono_class_has_parent (oklass, klass);
  return D.30367;
}


mono_gparam_is_assignable_from (struct MonoClass * target, struct MonoClass * candidate)
{
  gboolean D.30488;
  unsigned char D.30489;
  unsigned char D.30490;
  struct MonoGenericParamInfo * iftmp.317;
  struct MonoGenericContainer * D.30494;
  struct MonoGenericParamInfo * iftmp.318;
  struct MonoGenericContainer * D.30499;
  short unsigned int D.30503;
  int D.30504;
  short unsigned int D.30505;
  int D.30506;
  struct MonoClass * * D.30507;
  struct MonoType * D.30512;
  int D.30513;
  unsigned int D.30515;
  unsigned int D.30516;
  unsigned char D.30518;
  int D.30521;
  struct MonoClass * D.30530;
  int D.30531;
  _Bool D.30532;
  int D.30533;
  int D.30534;
  _Bool D.30535;
  int D.30536;
  int D.30537;
  int D.30542;
  int D.30547;
  int D.30550;
  int D.30551;
  struct MonoClass * * D.30554;
  struct MonoType * D.30557;
  struct MonoType * D.30558;
  int D.30559;
  int D.30564;
  struct MonoType * D.30566;
  int D.30567;
  int D.30570;
  struct MonoClass * D.30574;
  int D.30577;
  struct MonoGenericParam * gparam;
  struct MonoGenericParam * ogparam;
  struct MonoGenericParamInfo * tinfo;
  struct MonoGenericParamInfo * cinfo;
  struct MonoClass * * candidate_class;
  gboolean class_constraint_satisfied;
  gboolean valuetype_constraint_satisfied;
  int tmask;
  int cmask;

  if (target == candidate) goto <D.30486>; else goto <D.30487>;
  <D.30486>:
  D.30488 = 1;
  return D.30488;
  <D.30487>:
  D.30489 = target->byval_arg.type;
  D.30490 = candidate->byval_arg.type;
  if (D.30489 != D.30490) goto <D.30491>; else goto <D.30492>;
  <D.30491>:
  D.30488 = 0;
  return D.30488;
  <D.30492>:
  gparam = target->byval_arg.data.generic_param;
  ogparam = candidate->byval_arg.data.generic_param;
  D.30494 = gparam->owner;
  if (D.30494 != 0B) goto <D.30495>; else goto <D.30496>;
  <D.30495>:
  iftmp.317 = &MEM[(struct MonoGenericParamFull *)gparam].info;
  goto <D.30497>;
  <D.30496>:
  iftmp.317 = 0B;
  <D.30497>:
  tinfo = iftmp.317;
  D.30499 = ogparam->owner;
  if (D.30499 != 0B) goto <D.30500>; else goto <D.30501>;
  <D.30500>:
  iftmp.318 = &MEM[(struct MonoGenericParamFull *)ogparam].info;
  goto <D.30502>;
  <D.30501>:
  iftmp.318 = 0B;
  <D.30502>:
  cinfo = iftmp.318;
  class_constraint_satisfied = 0;
  valuetype_constraint_satisfied = 0;
  D.30503 = tinfo->flags;
  D.30504 = (int) D.30503;
  tmask = D.30504 & 28;
  D.30505 = cinfo->flags;
  D.30506 = (int) D.30505;
  cmask = D.30506 & 28;
  D.30507 = cinfo->constraints;
  if (D.30507 != 0B) goto <D.30508>; else goto <D.30509>;
  <D.30508>:
  candidate_class = cinfo->constraints;
  goto <D.21370>;
  <D.21369>:
  {
    struct MonoClass * cc;

    cc = *candidate_class;
    D.30512 = &cc->byval_arg;
    D.30513 = mono_type_is_reference (D.30512);
    if (D.30513 != 0) goto <D.30514>; else goto <D.30510>;
    <D.30514>:
    D.30515 = cc->flags;
    D.30516 = D.30515 & 32;
    if (D.30516 == 0) goto <D.30517>; else goto <D.30510>;
    <D.30517>:
    D.30518 = cc->byval_arg.type;
    if (D.30518 != 19) goto <D.30519>; else goto <D.30510>;
    <D.30519>:
    D.30518 = cc->byval_arg.type;
    if (D.30518 != 30) goto <D.30520>; else goto <D.30510>;
    <D.30520>:
    class_constraint_satisfied = 1;
    goto <D.30511>;
    <D.30510>:
    D.30512 = &cc->byval_arg;
    D.30521 = mono_type_is_reference (D.30512);
    if (D.30521 == 0) goto <D.30522>; else goto <D.30523>;
    <D.30522>:
    D.30515 = cc->flags;
    D.30516 = D.30515 & 32;
    if (D.30516 == 0) goto <D.30524>; else goto <D.30525>;
    <D.30524>:
    D.30518 = cc->byval_arg.type;
    if (D.30518 != 19) goto <D.30526>; else goto <D.30527>;
    <D.30526>:
    D.30518 = cc->byval_arg.type;
    if (D.30518 != 30) goto <D.30528>; else goto <D.30529>;
    <D.30528>:
    valuetype_constraint_satisfied = 1;
    <D.30529>:
    <D.30527>:
    <D.30525>:
    <D.30523>:
    <D.30511>:
  }
  candidate_class = candidate_class + 8;
  <D.21370>:
  D.30530 = *candidate_class;
  if (D.30530 != 0B) goto <D.21369>; else goto <D.21371>;
  <D.21371>:
  <D.30509>:
  D.30531 = cmask & 4;
  D.30532 = D.30531 != 0;
  D.30533 = (int) D.30532;
  class_constraint_satisfied = D.30533 | class_constraint_satisfied;
  D.30534 = cmask & 8;
  D.30535 = D.30534 != 0;
  D.30536 = (int) D.30535;
  valuetype_constraint_satisfied = D.30536 | valuetype_constraint_satisfied;
  D.30537 = tmask & 4;
  if (D.30537 != 0) goto <D.30538>; else goto <D.30539>;
  <D.30538>:
  if (class_constraint_satisfied == 0) goto <D.30540>; else goto <D.30541>;
  <D.30540>:
  D.30488 = 0;
  return D.30488;
  <D.30541>:
  <D.30539>:
  D.30542 = tmask & 8;
  if (D.30542 != 0) goto <D.30543>; else goto <D.30544>;
  <D.30543>:
  if (valuetype_constraint_satisfied == 0) goto <D.30545>; else goto <D.30546>;
  <D.30545>:
  D.30488 = 0;
  return D.30488;
  <D.30546>:
  <D.30544>:
  D.30547 = tmask & 16;
  if (D.30547 != 0) goto <D.30548>; else goto <D.30549>;
  <D.30548>:
  D.30550 = cmask & 16;
  D.30551 = D.30550 | valuetype_constraint_satisfied;
  if (D.30551 == 0) goto <D.30552>; else goto <D.30553>;
  <D.30552>:
  D.30488 = 0;
  return D.30488;
  <D.30553>:
  <D.30549>:
  D.30554 = tinfo->constraints;
  if (D.30554 != 0B) goto <D.30555>; else goto <D.30556>;
  <D.30555>:
  {
    struct MonoClass * * target_class;

    target_class = tinfo->constraints;
    goto <D.21380>;
    <D.21379>:
    {
      struct MonoClass * tc;

      tc = *target_class;
      D.30557 = &candidate->byval_arg;
      D.30558 = &tc->byval_arg;
      D.30559 = mono_metadata_type_equal (D.30558, D.30557);
      if (D.30559 != 0) goto <D.30560>; else goto <D.30561>;
      <D.30560>:
      // predicted unlikely by continue predictor.
      goto <D.21374>;
      <D.30561>:
      D.30507 = cinfo->constraints;
      if (D.30507 == 0B) goto <D.30562>; else goto <D.30563>;
      <D.30562>:
      D.30488 = 0;
      return D.30488;
      <D.30563>:
      candidate_class = cinfo->constraints;
      goto <D.21378>;
      <D.21377>:
      {
        struct MonoClass * cc;

        cc = *candidate_class;
        D.30564 = mono_class_is_assignable_from (tc, cc);
        if (D.30564 != 0) goto <D.21376>; else goto <D.30565>;
        <D.30565>:
        D.30566 = &cc->byval_arg;
        D.30567 = mono_type_is_generic_argument (D.30566);
        if (D.30567 != 0) goto <D.30568>; else goto <D.30569>;
        <D.30568>:
        D.30570 = mono_gparam_is_assignable_from (target, cc);
        if (D.30570 != 0) goto <D.21376>; else goto <D.30571>;
        <D.30571>:
        <D.30569>:
      }
      candidate_class = candidate_class + 8;
      <D.21378>:
      D.30530 = *candidate_class;
      if (D.30530 != 0B) goto <D.21377>; else goto <D.21376>;
      <D.21376>:
      D.30530 = *candidate_class;
      if (D.30530 == 0B) goto <D.30572>; else goto <D.30573>;
      <D.30572>:
      D.30488 = 0;
      return D.30488;
      <D.30573>:
    }
    <D.21374>:
    target_class = target_class + 8;
    <D.21380>:
    D.30574 = *target_class;
    if (D.30574 != 0B) goto <D.21379>; else goto <D.21381>;
    <D.21381>:
  }
  <D.30556>:
  D.30507 = cinfo->constraints;
  if (D.30507 != 0B) goto <D.30575>; else goto <D.30576>;
  <D.30575>:
  candidate_class = cinfo->constraints;
  goto <D.21384>;
  <D.21383>:
  {
    struct MonoClass * cc;

    cc = *candidate_class;
    D.30577 = mono_class_is_assignable_from (target, cc);
    if (D.30577 != 0) goto <D.30578>; else goto <D.30579>;
    <D.30578>:
    D.30488 = 1;
    return D.30488;
    <D.30579>:
  }
  candidate_class = candidate_class + 8;
  <D.21384>:
  D.30530 = *candidate_class;
  if (D.30530 != 0B) goto <D.21383>; else goto <D.21385>;
  <D.21385>:
  <D.30576>:
  D.30488 = 0;
  return D.30488;
}


mono_class_is_assignable_from_slow (struct MonoClass * target, struct MonoClass * candidate)
{
  gboolean D.30583;
  struct MonoClass * D.30584;
  int D.30587;
  unsigned int D.30592;
  unsigned int D.30593;
  unsigned char D.30595;
  unsigned char D.30597;
  unsigned char D.30598;
  int D.30601;
  unsigned char D.30604;
  unsigned char D.30607;
  unsigned char D.30610;
  unsigned char D.30613;
  unsigned char D.30614;
  struct MonoClass * D.30619;
  struct MonoClass * D.30621;
  struct MonoClass * D.30623;
  struct MonoClass * D.30624;

  if (candidate == target) goto <D.30581>; else goto <D.30582>;
  <D.30581>:
  D.30583 = 1;
  return D.30583;
  <D.30582>:
  D.30584 = mono_defaults.object_class;
  if (D.30584 == target) goto <D.30585>; else goto <D.30586>;
  <D.30585>:
  D.30583 = 1;
  return D.30583;
  <D.30586>:
  D.30587 = mono_class_has_parent (candidate, target);
  if (D.30587 != 0) goto <D.30588>; else goto <D.30589>;
  <D.30588>:
  D.30583 = 1;
  return D.30583;
  <D.30589>:
  D.30592 = target->flags;
  D.30593 = D.30592 & 32;
  if (D.30593 != 0) goto <D.30590>; else goto <D.30594>;
  <D.30594>:
  D.30595 = target->byval_arg.type;
  if (D.30595 == 19) goto <D.30590>; else goto <D.30596>;
  <D.30596>:
  D.30595 = target->byval_arg.type;
  if (D.30595 == 30) goto <D.30590>; else goto <D.30591>;
  <D.30590>:
  D.30583 = mono_class_implement_interface_slow (target, candidate);
  return D.30583;
  <D.30591>:
  D.30597 = BIT_FIELD_REF <*target, 8, 280>;
  D.30598 = D.30597 & 1;
  if (D.30598 != 0) goto <D.30599>; else goto <D.30600>;
  <D.30599>:
  D.30601 = mono_class_has_variant_generic_params (target);
  if (D.30601 != 0) goto <D.30602>; else goto <D.30603>;
  <D.30602>:
  D.30583 = mono_class_is_variant_compatible (target, candidate, 0);
  return D.30583;
  <D.30603>:
  <D.30600>:
  D.30604 = target->rank;
  if (D.30604 != 0) goto <D.30605>; else goto <D.30606>;
  <D.30605>:
  {
    struct MonoClass * eclass;
    struct MonoClass * eoclass;

    D.30604 = target->rank;
    D.30607 = candidate->rank;
    if (D.30604 != D.30607) goto <D.30608>; else goto <D.30609>;
    <D.30608>:
    D.30583 = 0;
    return D.30583;
    <D.30609>:
    D.30595 = target->byval_arg.type;
    D.30610 = candidate->byval_arg.type;
    if (D.30595 != D.30610) goto <D.30611>; else goto <D.30612>;
    <D.30611>:
    D.30583 = 0;
    return D.30583;
    <D.30612>:
    eclass = target->cast_class;
    eoclass = candidate->cast_class;
    D.30613 = BIT_FIELD_REF <*eoclass, 8, 256>;
    D.30614 = D.30613 & 8;
    if (D.30614 != 0) goto <D.30615>; else goto <D.30616>;
    <D.30615>:
    D.30619 = mono_defaults.enum_class;
    if (D.30619 == eclass) goto <D.30617>; else goto <D.30620>;
    <D.30620>:
    D.30619 = mono_defaults.enum_class;
    D.30621 = D.30619->parent;
    if (D.30621 == eclass) goto <D.30617>; else goto <D.30622>;
    <D.30622>:
    D.30584 = mono_defaults.object_class;
    if (D.30584 == eclass) goto <D.30617>; else goto <D.30618>;
    <D.30617>:
    D.30583 = 0;
    return D.30583;
    <D.30618>:
    <D.30616>:
    D.30623 = candidate->cast_class;
    D.30624 = target->cast_class;
    D.30583 = mono_class_is_assignable_from_slow (D.30624, D.30623);
    return D.30583;
  }
  <D.30606>:
  D.30583 = 0;
  return D.30583;
}


mono_class_implement_interface_slow (struct MonoClass * target, struct MonoClass * candidate)
{
  unsigned int D.30630;
  unsigned int D.30631;
  unsigned char D.30633;
  int D.30635;
  gboolean D.30638;
  struct MonoImage * D.30642;
  unsigned char D.30643;
  unsigned char D.30644;
  unsigned char D.30646;
  unsigned char D.30647;
  struct MonoArray * D.30651;
  long unsigned int D.30654;
  unsigned int D.30655;
  unsigned int D.30656;
  long unsigned int D.30657;
  char * D.30658;
  struct MonoType * D.30659;
  int D.30666;
  int D.30669;
  int D.30672;
  struct MonoClass * * D.30675;
  long unsigned int D.30676;
  long unsigned int D.30677;
  struct MonoClass * * D.30678;
  struct MonoClass * D.30679;
  int D.30684;
  int D.30687;
  short unsigned int D.30690;
  int D.30691;
  struct MonoError error;
  int i;
  gboolean is_variant;

  try
    {
      is_variant = mono_class_has_variant_generic_params (target);
      if (is_variant != 0) goto <D.30628>; else goto <D.30629>;
      <D.30628>:
      D.30630 = candidate->flags;
      D.30631 = D.30630 & 32;
      if (D.30631 != 0) goto <D.30626>; else goto <D.30632>;
      <D.30632>:
      D.30633 = candidate->byval_arg.type;
      if (D.30633 == 19) goto <D.30626>; else goto <D.30634>;
      <D.30634>:
      D.30633 = candidate->byval_arg.type;
      if (D.30633 == 30) goto <D.30626>; else goto <D.30627>;
      <D.30626>:
      D.30635 = mono_class_is_variant_compatible_slow (target, candidate);
      if (D.30635 != 0) goto <D.30636>; else goto <D.30637>;
      <D.30636>:
      D.30638 = 1;
      return D.30638;
      <D.30637>:
      <D.30627>:
      <D.30629>:
      <D.21436>:
      if (candidate == target) goto <D.30639>; else goto <D.30640>;
      <D.30639>:
      D.30638 = 1;
      return D.30638;
      <D.30640>:
      D.30642 = candidate->image;
      D.30643 = BIT_FIELD_REF <*D.30642, 8, 224>;
      D.30644 = D.30643 & 8;
      if (D.30644 != 0) goto <D.30645>; else goto <D.30641>;
      <D.30645>:
      D.30646 = BIT_FIELD_REF <*candidate, 8, 256>;
      D.30647 = D.30646 & 128;
      if (D.30647 == 0) goto <D.30648>; else goto <D.30641>;
      <D.30648>:
      {
        struct MonoReflectionTypeBuilder * tb;
        int j;

        tb = mono_class_get_ref_info (candidate);
        if (tb != 0B) goto <D.30649>; else goto <D.30650>;
        <D.30649>:
        D.30651 = tb->interfaces;
        if (D.30651 != 0B) goto <D.30652>; else goto <D.30653>;
        <D.30652>:
        D.30651 = tb->interfaces;
        D.30654 = mono_array_length (D.30651);
        D.30655 = (unsigned int) D.30654;
        D.30656 = D.30655 + 4294967295;
        j = (int) D.30656;
        goto <D.21431>;
        <D.21430>:
        {
          struct MonoReflectionType * iface;
          struct MonoClass * iface_class;

          D.30657 = (long unsigned int) j;
          D.30651 = tb->interfaces;
          D.30658 = mono_array_addr_with_size (D.30651, 8, D.30657);
          iface = MEM[(struct MonoReflectionType * *)D.30658];
          D.30659 = iface->type;
          if (D.30659 == 0B) goto <D.30660>; else goto <D.30661>;
          <D.30660>:
          // predicted unlikely by continue predictor.
          goto <D.21429>;
          <D.30661>:
          D.30659 = iface->type;
          iface_class = mono_class_from_mono_type (D.30659);
          if (iface_class == target) goto <D.30662>; else goto <D.30663>;
          <D.30662>:
          D.30638 = 1;
          return D.30638;
          <D.30663>:
          if (is_variant != 0) goto <D.30664>; else goto <D.30665>;
          <D.30664>:
          D.30666 = mono_class_is_variant_compatible_slow (target, iface_class);
          if (D.30666 != 0) goto <D.30667>; else goto <D.30668>;
          <D.30667>:
          D.30638 = 1;
          return D.30638;
          <D.30668>:
          <D.30665>:
          D.30669 = mono_class_implement_interface_slow (target, iface_class);
          if (D.30669 != 0) goto <D.30670>; else goto <D.30671>;
          <D.30670>:
          D.30638 = 1;
          return D.30638;
          <D.30671>:
        }
        <D.21429>:
        j = j + -1;
        <D.21431>:
        if (j >= 0) goto <D.21430>; else goto <D.21432>;
        <D.21432>:
        <D.30653>:
        <D.30650>:
      }
      goto <D.21435>;
      <D.30641>:
      mono_class_setup_interfaces (candidate, &error);
      D.30672 = mono_error_ok (&error);
      if (D.30672 == 0) goto <D.30673>; else goto <D.30674>;
      <D.30673>:
      mono_error_cleanup (&error);
      D.30638 = 0;
      return D.30638;
      <D.30674>:
      i = 0;
      goto <D.21434>;
      <D.21433>:
      D.30675 = candidate->interfaces;
      D.30676 = (long unsigned int) i;
      D.30677 = D.30676 * 8;
      D.30678 = D.30675 + D.30677;
      D.30679 = *D.30678;
      if (D.30679 == target) goto <D.30680>; else goto <D.30681>;
      <D.30680>:
      D.30638 = 1;
      return D.30638;
      <D.30681>:
      if (is_variant != 0) goto <D.30682>; else goto <D.30683>;
      <D.30682>:
      D.30675 = candidate->interfaces;
      D.30676 = (long unsigned int) i;
      D.30677 = D.30676 * 8;
      D.30678 = D.30675 + D.30677;
      D.30679 = *D.30678;
      D.30684 = mono_class_is_variant_compatible_slow (target, D.30679);
      if (D.30684 != 0) goto <D.30685>; else goto <D.30686>;
      <D.30685>:
      D.30638 = 1;
      return D.30638;
      <D.30686>:
      <D.30683>:
      D.30675 = candidate->interfaces;
      D.30676 = (long unsigned int) i;
      D.30677 = D.30676 * 8;
      D.30678 = D.30675 + D.30677;
      D.30679 = *D.30678;
      D.30687 = mono_class_implement_interface_slow (target, D.30679);
      if (D.30687 != 0) goto <D.30688>; else goto <D.30689>;
      <D.30688>:
      D.30638 = 1;
      return D.30638;
      <D.30689>:
      i = i + 1;
      <D.21434>:
      D.30690 = candidate->interface_count;
      D.30691 = (int) D.30690;
      if (D.30691 > i) goto <D.21433>; else goto <D.21435>;
      <D.21435>:
      candidate = candidate->parent;
      if (candidate != 0B) goto <D.21436>; else goto <D.21437>;
      <D.21437>:
      D.30638 = 0;
      return D.30638;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_is_variant_compatible_slow (struct MonoClass * klass, struct MonoClass * oklass)
{
  struct MonoClass * D.30696;
  gboolean D.30698;
  struct MonoGenericClass * D.30699;
  struct MonoGenericInst * D.30700;
  struct MonoGenericClass * D.30701;
  struct MonoGenericInst * D.30702;
  long unsigned int D.30703;
  long unsigned int D.30704;
  struct MonoType * * D.30705;
  struct MonoType * D.30706;
  struct MonoType * * D.30707;
  struct MonoType * D.30708;
  unsigned char D.30709;
  unsigned char D.30710;
  unsigned char D.30711;
  unsigned char D.30712;
  struct MonoGenericParamFull * D.30717;
  long unsigned int D.30718;
  struct MonoGenericParamFull * D.30719;
  short unsigned int D.30720;
  int D.30721;
  int D.30722;
  int D.30725;
  int D.30729;
  int D.30732;
  <unnamed-signed:31> D.30736;
  int D.30737;
  int j;
  struct MonoType * * klass_argv;
  struct MonoType * * oklass_argv;
  struct MonoClass * klass_gtd;
  struct MonoGenericContainer * container;

  klass_gtd = mono_class_get_generic_type_definition (klass);
  container = klass_gtd->generic_container;
  D.30696 = mono_class_get_generic_type_definition (oklass);
  if (D.30696 != klass_gtd) goto <D.30694>; else goto <D.30697>;
  <D.30697>:
  if (oklass == klass_gtd) goto <D.30694>; else goto <D.30695>;
  <D.30694>:
  D.30698 = 0;
  return D.30698;
  <D.30695>:
  D.30699 = klass->generic_class;
  D.30700 = D.30699->context.class_inst;
  klass_argv = &D.30700->type_argv[0];
  D.30701 = oklass->generic_class;
  D.30702 = D.30701->context.class_inst;
  oklass_argv = &D.30702->type_argv[0];
  j = 0;
  goto <D.21416>;
  <D.21415>:
  {
    struct MonoClass * param1_class;
    struct MonoClass * param2_class;

    D.30703 = (long unsigned int) j;
    D.30704 = D.30703 * 8;
    D.30705 = klass_argv + D.30704;
    D.30706 = *D.30705;
    param1_class = mono_class_from_mono_type (D.30706);
    D.30703 = (long unsigned int) j;
    D.30704 = D.30703 * 8;
    D.30707 = oklass_argv + D.30704;
    D.30708 = *D.30707;
    param2_class = mono_class_from_mono_type (D.30708);
    D.30709 = BIT_FIELD_REF <*param1_class, 8, 256>;
    D.30710 = BIT_FIELD_REF <*param2_class, 8, 256>;
    D.30711 = D.30709 ^ D.30710;
    D.30712 = D.30711 & 8;
    if (D.30712 != 0) goto <D.30713>; else goto <D.30714>;
    <D.30713>:
    D.30698 = 0;
    return D.30698;
    <D.30714>:
    if (param1_class != param2_class) goto <D.30715>; else goto <D.30716>;
    <D.30715>:
    D.30717 = container->type_params;
    D.30703 = (long unsigned int) j;
    D.30718 = D.30703 * 56;
    D.30719 = D.30717 + D.30718;
    D.30720 = D.30719->info.flags;
    D.30721 = (int) D.30720;
    D.30722 = D.30721 & 1;
    if (D.30722 != 0) goto <D.30723>; else goto <D.30724>;
    <D.30723>:
    D.30725 = mono_class_is_assignable_from_slow (param1_class, param2_class);
    if (D.30725 == 0) goto <D.30726>; else goto <D.30727>;
    <D.30726>:
    D.30698 = 0;
    return D.30698;
    <D.30727>:
    goto <D.30728>;
    <D.30724>:
    D.30717 = container->type_params;
    D.30703 = (long unsigned int) j;
    D.30718 = D.30703 * 56;
    D.30719 = D.30717 + D.30718;
    D.30720 = D.30719->info.flags;
    D.30721 = (int) D.30720;
    D.30729 = D.30721 & 2;
    if (D.30729 != 0) goto <D.30730>; else goto <D.30731>;
    <D.30730>:
    D.30732 = mono_class_is_assignable_from_slow (param2_class, param1_class);
    if (D.30732 == 0) goto <D.30733>; else goto <D.30734>;
    <D.30733>:
    D.30698 = 0;
    return D.30698;
    <D.30734>:
    goto <D.30735>;
    <D.30731>:
    D.30698 = 0;
    return D.30698;
    <D.30735>:
    <D.30728>:
    <D.30716>:
  }
  j = j + 1;
  <D.21416>:
  D.30736 = container->type_argc;
  D.30737 = (int) D.30736;
  if (D.30737 > j) goto <D.21415>; else goto <D.21417>;
  <D.21417>:
  D.30698 = 1;
  return D.30698;
}


mono_class_get_cctor (struct MonoClass * klass)
{
  struct MonoImage * D.30739;
  unsigned char D.30740;
  unsigned char D.30741;
  struct MonoMethod * D.30744;
  unsigned char D.30745;
  unsigned char D.30746;
  int D.30749;
  unsigned int D.30752;
  struct MonoGenericClass * D.30753;
  struct MonoMethod * * D.30756;
  struct MonoClass * D.30759;
  struct MonoMethod * D.30760;
  struct MonoCachedClassInfo cached_info;

  try
    {
      D.30739 = klass->image;
      D.30740 = BIT_FIELD_REF <*D.30739, 8, 224>;
      D.30741 = D.30740 & 8;
      if (D.30741 != 0) goto <D.30742>; else goto <D.30743>;
      <D.30742>:
      D.30744 = mono_class_get_method_from_name_flags (klass, ".cctor", -1, 2048);
      return D.30744;
      <D.30743>:
      D.30745 = BIT_FIELD_REF <*klass, 8, 280>;
      D.30746 = D.30745 & 4;
      if (D.30746 == 0) goto <D.30747>; else goto <D.30748>;
      <D.30747>:
      D.30744 = 0B;
      return D.30744;
      <D.30748>:
      D.30749 = mono_class_get_cached_class_info (klass, &cached_info);
      if (D.30749 != 0) goto <D.30750>; else goto <D.30751>;
      <D.30750>:
      D.30752 = cached_info.cctor_token;
      D.30739 = klass->image;
      D.30744 = mono_get_method (D.30739, D.30752, klass);
      return D.30744;
      <D.30751>:
      D.30753 = klass->generic_class;
      if (D.30753 != 0B) goto <D.30754>; else goto <D.30755>;
      <D.30754>:
      D.30756 = klass->methods;
      if (D.30756 == 0B) goto <D.30757>; else goto <D.30758>;
      <D.30757>:
      D.30753 = klass->generic_class;
      D.30759 = D.30753->container_class;
      D.30760 = mono_class_get_cctor (D.30759);
      D.30744 = mono_class_get_inflated_method (klass, D.30760);
      return D.30744;
      <D.30758>:
      <D.30755>:
      D.30744 = mono_class_get_method_from_name_flags (klass, ".cctor", -1, 2048);
      return D.30744;
    }
  finally
    {
      cached_info = {CLOBBER};
    }
}


mono_class_get_finalizer (struct MonoClass * klass)
{
  unsigned char D.30763;
  unsigned char D.30764;
  int D.30767;
  struct MonoMethod * D.30770;
  int D.30771;
  unsigned int D.30774;
  struct MonoImage * D.30775;
  struct MonoMethod * * D.30776;
  int finalize_slot.319;
  long unsigned int D.30778;
  long unsigned int D.30779;
  struct MonoMethod * * D.30780;
  struct MonoCachedClassInfo cached_info;

  try
    {
      D.30763 = BIT_FIELD_REF <*klass, 8, 256>;
      D.30764 = D.30763 & 1;
      if (D.30764 == 0) goto <D.30765>; else goto <D.30766>;
      <D.30765>:
      mono_class_init (klass);
      <D.30766>:
      D.30767 = mono_class_has_finalizer (klass);
      if (D.30767 == 0) goto <D.30768>; else goto <D.30769>;
      <D.30768>:
      D.30770 = 0B;
      return D.30770;
      <D.30769>:
      D.30771 = mono_class_get_cached_class_info (klass, &cached_info);
      if (D.30771 != 0) goto <D.30772>; else goto <D.30773>;
      <D.30772>:
      D.30774 = cached_info.finalize_token;
      D.30775 = cached_info.finalize_image;
      D.30770 = mono_get_method (D.30775, D.30774, 0B);
      return D.30770;
      <D.30773>:
      mono_class_setup_vtable (klass);
      D.30776 = klass->vtable;
      finalize_slot.319 = finalize_slot;
      D.30778 = (long unsigned int) finalize_slot.319;
      D.30779 = D.30778 * 8;
      D.30780 = D.30776 + D.30779;
      D.30770 = *D.30780;
      return D.30770;
    }
  finally
    {
      cached_info = {CLOBBER};
    }
}


mono_class_needs_cctor_run (struct MonoClass * klass, struct MonoMethod * caller)
{
  gboolean D.30785;
  _Bool D.30786;
  struct MonoMethod * method;

  method = mono_class_get_cctor (klass);
  if (method != 0B) goto <D.30783>; else goto <D.30784>;
  <D.30783>:
  D.30786 = method != caller;
  D.30785 = (gboolean) D.30786;
  return D.30785;
  <D.30784>:
  D.30785 = 0;
  return D.30785;
}


mono_class_array_element_size (struct MonoClass * klass)
{
  unsigned char D.30788;
  int D.30789;
  int32_t D.30790;
  struct MonoClass * D.30791;
  unsigned char D.30792;
  unsigned char D.30793;
  int D.30796;
  unsigned int D.30797;
  unsigned int D.30798;
  struct MonoGenericClass * D.30799;
  struct MonoClass * D.30800;
  struct MonoType * type;
  void handle_enum = <<< error >>>;

  type = &klass->byval_arg;
  handle_enum:
  D.30788 = type->type;
  D.30789 = (int) D.30788;
  switch (D.30789) <default: <D.21487>, case 1: <D.21486>, case 2: <D.21464>, case 3: <D.21467>, case 4: <D.21462>, case 5: <D.21463>, case 6: <D.21465>, case 7: <D.21466>, case 8: <D.21468>, case 9: <D.21469>, case 10: <D.21481>, case 11: <D.21482>, case 12: <D.21470>, case 13: <D.21483>, case 14: <D.21475>, case 15: <D.21473>, case 17: <D.21484>, case 18: <D.21474>, case 19: <D.21479>, case 20: <D.21478>, case 21: <D.21485>, case 24: <D.21471>, case 25: <D.21472>, case 28: <D.21476>, case 29: <D.21477>, case 30: <D.21480>>
  <D.21462>:
  <D.21463>:
  <D.21464>:
  D.30790 = 1;
  return D.30790;
  <D.21465>:
  <D.21466>:
  <D.21467>:
  D.30790 = 2;
  return D.30790;
  <D.21468>:
  <D.21469>:
  <D.21470>:
  D.30790 = 4;
  return D.30790;
  <D.21471>:
  <D.21472>:
  <D.21473>:
  <D.21474>:
  <D.21475>:
  <D.21476>:
  <D.21477>:
  <D.21478>:
  <D.21479>:
  <D.21480>:
  D.30790 = 8;
  return D.30790;
  <D.21481>:
  <D.21482>:
  <D.21483>:
  D.30790 = 8;
  return D.30790;
  <D.21484>:
  D.30791 = type->data.klass;
  D.30792 = BIT_FIELD_REF <*D.30791, 8, 256>;
  D.30793 = D.30792 & 16;
  if (D.30793 != 0) goto <D.30794>; else goto <D.30795>;
  <D.30794>:
  D.30791 = type->data.klass;
  type = mono_class_enum_basetype (D.30791);
  klass = klass->element_class;
  goto handle_enum;
  <D.30795>:
  D.30796 = mono_class_instance_size (klass);
  D.30797 = (unsigned int) D.30796;
  D.30798 = D.30797 + 4294967280;
  D.30790 = (int32_t) D.30798;
  return D.30790;
  <D.21485>:
  D.30799 = type->data.generic_class;
  D.30800 = D.30799->container_class;
  type = &D.30800->byval_arg;
  goto handle_enum;
  <D.21486>:
  D.30790 = 0;
  return D.30790;
  <D.21487>:
  D.30788 = type->type;
  D.30789 = (int) D.30788;
  monoeg_g_log (0B, 4, "unknown type 0x%02x in mono_class_array_element_size", D.30789);
  <D.21488>:
  goto <D.21488>;
  D.30790 = -1;
  return D.30790;
}


mono_array_element_size (struct MonoClass * ac)
{
  unsigned char D.30802;
  _Bool D.30803;
  long int D.30804;
  long int D.30805;
  int32_t D.30808;

  D.30802 = ac->rank;
  D.30803 = D.30802 == 0;
  D.30804 = (long int) D.30803;
  D.30805 = __builtin_expect (D.30804, 0);
  if (D.30805 != 0) goto <D.30806>; else goto <D.30807>;
  <D.30806>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 8238, "ac->rank");
  <D.30807>:
  D.30808 = ac->sizes.element_size;
  return D.30808;
}


mono_ldtoken (struct MonoImage * image, guint32 token, struct MonoClass * * handle_class, struct MonoGenericContext * context)
{
  unsigned char D.30810;
  unsigned char D.30811;
  struct MonoClass * tmp_handle_class.320;
  _Bool D.30815;
  long int D.30816;
  long int D.30817;
  struct MonoClass * D.30822;
  void * D.30825;
  unsigned int D.30826;
  struct MonoClass * D.30831;
  unsigned int D.30832;
  struct MonoClass * D.30837;
  unsigned int D.30838;
  struct MonoClass * D.30843;
  unsigned int D.30844;
  int D.30845;
  struct MonoTableInfo * D.30846;
  unsigned int D.30847;
  const char * sig.321;
  const char * sig.322;
  char D.30850;

  D.30810 = BIT_FIELD_REF <*image, 8, 224>;
  D.30811 = D.30810 & 8;
  if (D.30811 != 0) goto <D.30812>; else goto <D.30813>;
  <D.30812>:
  {
    struct MonoClass * tmp_handle_class;
    void * obj;

    try
      {
        obj = mono_lookup_dynamic_token_class (image, token, 1, &tmp_handle_class, context);
        tmp_handle_class.320 = tmp_handle_class;
        D.30815 = tmp_handle_class.320 == 0B;
        D.30816 = (long int) D.30815;
        D.30817 = __builtin_expect (D.30816, 0);
        if (D.30817 != 0) goto <D.30818>; else goto <D.30819>;
        <D.30818>:
        monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 8250, "tmp_handle_class");
        <D.30819>:
        if (handle_class != 0B) goto <D.30820>; else goto <D.30821>;
        <D.30820>:
        tmp_handle_class.320 = tmp_handle_class;
        *handle_class = tmp_handle_class.320;
        <D.30821>:
        D.30822 = mono_defaults.typehandle_class;
        tmp_handle_class.320 = tmp_handle_class;
        if (D.30822 == tmp_handle_class.320) goto <D.30823>; else goto <D.30824>;
        <D.30823>:
        D.30825 = &MEM[(struct MonoClass *)obj].byval_arg;
        return D.30825;
        <D.30824>:
        D.30825 = obj;
        return D.30825;
      }
    finally
      {
        tmp_handle_class = {CLOBBER};
      }
  }
  <D.30813>:
  D.30826 = token & 4278190080;
  switch (D.30826) <default: <D.21516>, case 16777216: <D.21501>, case 33554432: <D.21500>, case 67108864: <D.21504>, case 100663296: <D.21507>, case 167772160: <D.21510>, case 452984832: <D.21502>, case 721420288: <D.21508>>
  <D.21500>:
  <D.21501>:
  <D.21502>:
  {
    struct MonoType * type;

    if (handle_class != 0B) goto <D.30827>; else goto <D.30828>;
    <D.30827>:
    D.30822 = mono_defaults.typehandle_class;
    *handle_class = D.30822;
    <D.30828>:
    type = mono_type_get_full (image, token, context);
    if (type == 0B) goto <D.30829>; else goto <D.30830>;
    <D.30829>:
    D.30825 = 0B;
    return D.30825;
    <D.30830>:
    D.30831 = mono_class_from_mono_type (type);
    mono_class_init (D.30831);
    D.30825 = type;
    return D.30825;
  }
  <D.21504>:
  {
    struct MonoClass * class;
    guint32 type;

    D.30832 = token & 16777215;
    type = mono_metadata_typedef_from_field (image, D.30832);
    if (type == 0) goto <D.30833>; else goto <D.30834>;
    <D.30833>:
    D.30825 = 0B;
    return D.30825;
    <D.30834>:
    if (handle_class != 0B) goto <D.30835>; else goto <D.30836>;
    <D.30835>:
    D.30837 = mono_defaults.fieldhandle_class;
    *handle_class = D.30837;
    <D.30836>:
    D.30838 = type | 33554432;
    class = mono_class_get_full (image, D.30838, context);
    if (class == 0B) goto <D.30839>; else goto <D.30840>;
    <D.30839>:
    D.30825 = 0B;
    return D.30825;
    <D.30840>:
    mono_class_init (class);
    D.30825 = mono_class_get_field (class, token);
    return D.30825;
  }
  <D.21507>:
  <D.21508>:
  {
    struct MonoMethod * meth;

    meth = mono_get_method_full (image, token, 0B, context);
    if (handle_class != 0B) goto <D.30841>; else goto <D.30842>;
    <D.30841>:
    D.30843 = mono_defaults.methodhandle_class;
    *handle_class = D.30843;
    <D.30842>:
    D.30825 = meth;
    return D.30825;
  }
  <D.21510>:
  {
    guint32 cols[3];
    const char * sig;

    try
      {
        D.30832 = token & 16777215;
        D.30844 = D.30832 + 4294967295;
        D.30845 = (int) D.30844;
        D.30846 = &image->tables[10];
        mono_metadata_decode_row (D.30846, D.30845, &cols, 3);
        D.30847 = cols[2];
        sig.321 = mono_metadata_blob_heap (image, D.30847);
        sig = sig.321;
        sig.322 = sig;
        mono_metadata_decode_blob_size (sig.322, &sig);
        sig.322 = sig;
        D.30850 = *sig.322;
        if (D.30850 == 6) goto <D.30851>; else goto <D.30852>;
        <D.30851>:
        {
          struct MonoClass * klass;
          struct MonoClassField * field;

          try
            {
              field = mono_field_from_token (image, token, &klass, context);
              if (handle_class != 0B) goto <D.30853>; else goto <D.30854>;
              <D.30853>:
              D.30837 = mono_defaults.fieldhandle_class;
              *handle_class = D.30837;
              <D.30854>:
              D.30825 = field;
              return D.30825;
            }
          finally
            {
              klass = {CLOBBER};
            }
        }
        <D.30852>:
        {
          struct MonoMethod * meth;

          meth = mono_get_method_full (image, token, 0B, context);
          if (handle_class != 0B) goto <D.30855>; else goto <D.30856>;
          <D.30855>:
          D.30843 = mono_defaults.methodhandle_class;
          *handle_class = D.30843;
          <D.30856>:
          D.30825 = meth;
          return D.30825;
        }
      }
    finally
      {
        cols = {CLOBBER};
        sig = {CLOBBER};
      }
  }
  <D.21516>:
  monoeg_g_log (0B, 16, "Unknown token 0x%08x in ldtoken", token);
  goto <D.21517>;
  <D.21517>:
  D.30825 = 0B;
  return D.30825;
}


mono_install_lookup_dynamic_token (void * (*MonoLookupDynamicToken) (struct MonoImage *, guint32, gboolean, struct MonoClass * *, struct MonoGenericContext *) func)
{
  lookup_dynamic = func;
}


mono_lookup_dynamic_token (struct MonoImage * image, guint32 token, struct MonoGenericContext * context)
{
  void * D.30861;
  void * (*<T1eca>) (struct MonoImage *, guint32, gboolean, struct MonoClass * *, struct MonoGenericContext *) lookup_dynamic.323;
  struct MonoClass * handle_class;

  try
    {
      lookup_dynamic.323 = lookup_dynamic;
      D.30861 = lookup_dynamic.323 (image, token, 1, &handle_class, context);
      return D.30861;
    }
  finally
    {
      handle_class = {CLOBBER};
    }
}


mono_lookup_dynamic_token_class (struct MonoImage * image, guint32 token, gboolean valid_token, struct MonoClass * * handle_class, struct MonoGenericContext * context)
{
  void * D.30865;
  void * (*<T1eca>) (struct MonoImage *, guint32, gboolean, struct MonoClass * *, struct MonoGenericContext *) lookup_dynamic.324;

  lookup_dynamic.324 = lookup_dynamic;
  D.30865 = lookup_dynamic.324 (image, token, valid_token, handle_class, context);
  return D.30865;
}


mono_install_get_cached_class_info (gboolean (*MonoGetCachedClassInfo) (struct MonoClass *, struct MonoCachedClassInfo *) func)
{
  get_cached_class_info = func;
}


mono_install_get_class_from_name (gboolean (*MonoGetClassFromName) (struct MonoImage *, const char *, const char *, struct MonoClass * *) func)
{
  get_class_from_name = func;
}


mono_class_get_image (struct MonoClass * klass)
{
  struct MonoImage * D.30868;

  D.30868 = klass->image;
  return D.30868;
}


mono_class_get_element_class (struct MonoClass * klass)
{
  struct MonoClass * D.30870;

  D.30870 = klass->element_class;
  return D.30870;
}


mono_class_is_valuetype (struct MonoClass * klass)
{
  mono_bool D.30872;
  <unnamed-unsigned:1> D.30873;

  D.30873 = klass->valuetype;
  D.30872 = (mono_bool) D.30873;
  return D.30872;
}


mono_class_is_enum (struct MonoClass * klass)
{
  mono_bool D.30875;
  <unnamed-unsigned:1> D.30876;

  D.30876 = klass->enumtype;
  D.30875 = (mono_bool) D.30876;
  return D.30875;
}


mono_class_enum_basetype (struct MonoClass * klass)
{
  struct MonoClass * D.30878;
  struct MonoType * D.30881;

  D.30878 = klass->element_class;
  if (D.30878 == klass) goto <D.30879>; else goto <D.30880>;
  <D.30879>:
  D.30881 = 0B;
  return D.30881;
  <D.30880>:
  D.30878 = klass->element_class;
  D.30881 = &D.30878->byval_arg;
  return D.30881;
}


mono_class_get_parent (struct MonoClass * klass)
{
  struct MonoClass * D.30883;

  D.30883 = klass->parent;
  return D.30883;
}


mono_class_get_nesting_type (struct MonoClass * klass)
{
  struct MonoClass * D.30885;

  D.30885 = klass->nested_in;
  return D.30885;
}


mono_class_get_rank (struct MonoClass * klass)
{
  int D.30887;
  unsigned char D.30888;

  D.30888 = klass->rank;
  D.30887 = (int) D.30888;
  return D.30887;
}


mono_class_get_flags (struct MonoClass * klass)
{
  uint32_t D.30890;

  D.30890 = klass->flags;
  return D.30890;
}


mono_class_get_name (struct MonoClass * klass)
{
  const char * D.30892;

  D.30892 = klass->name;
  return D.30892;
}


mono_class_get_namespace (struct MonoClass * klass)
{
  const char * D.30894;

  D.30894 = klass->name_space;
  return D.30894;
}


mono_class_get_type (struct MonoClass * klass)
{
  struct MonoType * D.30896;

  D.30896 = &klass->byval_arg;
  return D.30896;
}


mono_class_get_type_token (struct MonoClass * klass)
{
  uint32_t D.30898;

  D.30898 = klass->type_token;
  return D.30898;
}


mono_class_get_byref_type (struct MonoClass * klass)
{
  struct MonoType * D.30900;

  D.30900 = &klass->this_arg;
  return D.30900;
}


mono_class_num_fields (struct MonoClass * klass)
{
  int D.30902;
  unsigned int D.30903;

  D.30903 = klass->field.count;
  D.30902 = (int) D.30903;
  return D.30902;
}


mono_class_num_methods (struct MonoClass * klass)
{
  int D.30905;
  unsigned int D.30906;

  D.30906 = klass->method.count;
  D.30905 = (int) D.30906;
  return D.30905;
}


mono_class_num_properties (struct MonoClass * klass)
{
  int D.30908;
  struct MonoClassExt * D.30909;
  unsigned int D.30910;

  mono_class_setup_properties (klass);
  D.30909 = klass->ext;
  D.30910 = D.30909->property.count;
  D.30908 = (int) D.30910;
  return D.30908;
}


mono_class_setup_properties (struct MonoClass * class)
{
  struct MonoImage * D.30912;
  struct MonoClassExt * D.30913;
  struct MonoProperty * D.30916;
  struct MonoGenericClass * D.30923;
  unsigned char D.30926;
  gchar * D.30929;
  struct MonoClassExt * D.30930;
  unsigned int D.30931;
  unsigned int D.30932;
  unsigned int D.30933;
  int D.30934;
  long unsigned int D.30935;
  long unsigned int D.30936;
  struct MonoProperty * D.30937;
  struct MonoProperty * D.30938;
  struct MonoMethod * D.30939;
  struct MonoGenericContext * D.30942;
  struct MonoMethod * D.30943;
  struct MonoMethod * D.30944;
  struct MonoGenericContext * D.30947;
  struct MonoMethod * D.30948;
  unsigned int D.30950;
  unsigned int D.30951;
  unsigned int D.30952;
  unsigned int D.30953;
  unsigned int last.325;
  unsigned int first.326;
  unsigned int D.30956;
  unsigned char D.30959;
  unsigned int count.327;
  unsigned int count.328;
  unsigned int D.30964;
  int D.30965;
  int i.329;
  unsigned int first.330;
  unsigned int D.30968;
  long unsigned int D.30969;
  long unsigned int D.30970;
  struct MonoProperty * D.30971;
  unsigned int D.30972;
  unsigned int D.30973;
  const char * D.30974;
  int j.331;
  unsigned char D.30976;
  unsigned char D.30977;
  unsigned int D.30980;
  struct MonoMethod * * D.30982;
  unsigned int D.30983;
  unsigned int D.30984;
  unsigned int D.30985;
  long unsigned int D.30986;
  long unsigned int D.30987;
  struct MonoMethod * * D.30988;
  unsigned int endm.332;
  guint startm;
  guint endm;
  guint i;
  guint j;
  guint32 cols[3];
  struct MonoTableInfo * msemt;
  struct MonoProperty * properties;
  guint32 last;

  try
    {
      D.30912 = class->image;
      msemt = &D.30912->tables[24];
      D.30913 = class->ext;
      if (D.30913 != 0B) goto <D.30914>; else goto <D.30915>;
      <D.30914>:
      D.30913 = class->ext;
      D.30916 = D.30913->properties;
      if (D.30916 != 0B) goto <D.30917>; else goto <D.30918>;
      <D.30917>:
      return;
      <D.30918>:
      <D.30915>:
      mono_loader_lock ();
      D.30913 = class->ext;
      if (D.30913 != 0B) goto <D.30919>; else goto <D.30920>;
      <D.30919>:
      D.30913 = class->ext;
      D.30916 = D.30913->properties;
      if (D.30916 != 0B) goto <D.30921>; else goto <D.30922>;
      <D.30921>:
      mono_loader_unlock ();
      return;
      <D.30922>:
      <D.30920>:
      mono_class_alloc_ext (class);
      D.30923 = class->generic_class;
      if (D.30923 != 0B) goto <D.30924>; else goto <D.30925>;
      <D.30924>:
      {
        struct MonoClass * gklass;

        D.30923 = class->generic_class;
        gklass = D.30923->container_class;
        mono_class_init (gklass);
        mono_class_setup_properties (gklass);
        D.30926 = gklass->exception_type;
        if (D.30926 != 0) goto <D.30927>; else goto <D.30928>;
        <D.30927>:
        D.30929 = monoeg_strdup ("Generic type definition failed to load");
        mono_class_set_failure (class, 7, D.30929);
        mono_loader_unlock ();
        return;
        <D.30928>:
        D.30913 = class->ext;
        D.30930 = gklass->ext;
        D.30913->property = D.30930->property;
        D.30913 = class->ext;
        D.30931 = D.30913->property.count;
        D.30932 = D.30931 + 1;
        D.30933 = D.30932 * 40;
        D.30934 = (int) D.30933;
        properties = mono_class_alloc0 (class, D.30934);
        i = 0;
        goto <D.19377>;
        <D.19376>:
        {
          struct MonoProperty * prop;

          D.30935 = (long unsigned int) i;
          D.30936 = D.30935 * 40;
          prop = properties + D.30936;
          D.30930 = gklass->ext;
          D.30937 = D.30930->properties;
          D.30935 = (long unsigned int) i;
          D.30936 = D.30935 * 40;
          D.30938 = D.30937 + D.30936;
          *prop = *D.30938;
          D.30939 = prop->get;
          if (D.30939 != 0B) goto <D.30940>; else goto <D.30941>;
          <D.30940>:
          D.30942 = mono_class_get_context (class);
          D.30939 = prop->get;
          D.30943 = mono_class_inflate_generic_method_full (D.30939, class, D.30942);
          prop->get = D.30943;
          <D.30941>:
          D.30944 = prop->set;
          if (D.30944 != 0B) goto <D.30945>; else goto <D.30946>;
          <D.30945>:
          D.30947 = mono_class_get_context (class);
          D.30944 = prop->set;
          D.30948 = mono_class_inflate_generic_method_full (D.30944, class, D.30947);
          prop->set = D.30948;
          <D.30946>:
          prop->parent = class;
        }
        i = i + 1;
        <D.19377>:
        D.30913 = class->ext;
        D.30931 = D.30913->property.count;
        if (D.30931 > i) goto <D.19376>; else goto <D.19378>;
        <D.19378>:
      }
      goto <D.30949>;
      <D.30925>:
      {
        int first;
        int count;

        D.30950 = class->type_token;
        D.30951 = D.30950 & 16777215;
        D.30952 = D.30951 + 4294967295;
        D.30912 = class->image;
        D.30953 = mono_metadata_properties_from_typedef (D.30912, D.30952, &last);
        first = (int) D.30953;
        last.325 = last;
        first.326 = (unsigned int) first;
        D.30956 = last.325 - first.326;
        count = (int) D.30956;
        if (count != 0) goto <D.30957>; else goto <D.30958>;
        <D.30957>:
        mono_class_setup_methods (class);
        D.30959 = class->exception_type;
        if (D.30959 != 0) goto <D.30960>; else goto <D.30961>;
        <D.30960>:
        mono_loader_unlock ();
        return;
        <D.30961>:
        <D.30958>:
        D.30913 = class->ext;
        first.326 = (unsigned int) first;
        D.30913->property.first = first.326;
        D.30913 = class->ext;
        count.327 = (unsigned int) count;
        D.30913->property.count = count.327;
        count.328 = (unsigned int) count;
        D.30964 = count.328 * 40;
        D.30965 = (int) D.30964;
        properties = mono_class_alloc0 (class, D.30965);
        i = (guint) first;
        goto <D.19390>;
        <D.19389>:
        i.329 = (int) i;
        D.30912 = class->image;
        mono_metadata_decode_table_row (D.30912, 23, i.329, &cols, 3);
        first.330 = (unsigned int) first;
        D.30968 = i - first.330;
        D.30969 = (long unsigned int) D.30968;
        D.30970 = D.30969 * 40;
        D.30971 = properties + D.30970;
        D.30971->parent = class;
        first.330 = (unsigned int) first;
        D.30968 = i - first.330;
        D.30969 = (long unsigned int) D.30968;
        D.30970 = D.30969 * 40;
        D.30971 = properties + D.30970;
        D.30972 = cols[0];
        D.30971->attrs = D.30972;
        first.330 = (unsigned int) first;
        D.30968 = i - first.330;
        D.30969 = (long unsigned int) D.30968;
        D.30970 = D.30969 * 40;
        D.30971 = properties + D.30970;
        D.30973 = cols[1];
        D.30912 = class->image;
        D.30974 = mono_metadata_string_heap (D.30912, D.30973);
        D.30971->name = D.30974;
        D.30912 = class->image;
        startm = mono_metadata_methods_from_property (D.30912, i, &endm);
        j = startm;
        goto <D.19387>;
        <D.19386>:
        {
          struct MonoMethod * method;

          j.331 = (int) j;
          mono_metadata_decode_row (msemt, j.331, &cols, 3);
          D.30912 = class->image;
          D.30976 = BIT_FIELD_REF <*D.30912, 8, 224>;
          D.30977 = D.30976 & 32;
          if (D.30977 != 0) goto <D.30978>; else goto <D.30979>;
          <D.30978>:
          D.30973 = cols[1];
          D.30980 = D.30973 | 100663296;
          D.30912 = class->image;
          method = mono_get_method (D.30912, D.30980, class);
          goto <D.30981>;
          <D.30979>:
          D.30982 = class->methods;
          D.30973 = cols[1];
          D.30983 = class->method.first;
          D.30984 = D.30973 - D.30983;
          D.30985 = D.30984 + 4294967295;
          D.30986 = (long unsigned int) D.30985;
          D.30987 = D.30986 * 8;
          D.30988 = D.30982 + D.30987;
          method = *D.30988;
          <D.30981>:
          D.30972 = cols[0];
          switch (D.30972) <default: <D.19385>, case 1: <D.19382>, case 2: <D.19384>>
          <D.19382>:
          first.330 = (unsigned int) first;
          D.30968 = i - first.330;
          D.30969 = (long unsigned int) D.30968;
          D.30970 = D.30969 * 40;
          D.30971 = properties + D.30970;
          D.30971->set = method;
          goto <D.19383>;
          <D.19384>:
          first.330 = (unsigned int) first;
          D.30968 = i - first.330;
          D.30969 = (long unsigned int) D.30968;
          D.30970 = D.30969 * 40;
          D.30971 = properties + D.30970;
          D.30971->get = method;
          goto <D.19383>;
          <D.19385>:
          goto <D.19383>;
          <D.19383>:
        }
        j = j + 1;
        <D.19387>:
        endm.332 = endm;
        if (j < endm.332) goto <D.19386>; else goto <D.19388>;
        <D.19388>:
        i = i + 1;
        <D.19390>:
        last.325 = last;
        if (i < last.325) goto <D.19389>; else goto <D.19391>;
        <D.19391>:
      }
      <D.30949>:
      mono_memory_barrier ();
      D.30913 = class->ext;
      D.30913->properties = properties;
      mono_loader_unlock ();
    }
  finally
    {
      endm = {CLOBBER};
      cols = {CLOBBER};
      last = {CLOBBER};
    }
}


mono_class_num_events (struct MonoClass * klass)
{
  int D.30994;
  struct MonoClassExt * D.30995;
  unsigned int D.30996;

  mono_class_setup_events (klass);
  D.30995 = klass->ext;
  D.30996 = D.30995->event.count;
  D.30994 = (int) D.30996;
  return D.30994;
}


mono_class_setup_events (struct MonoClass * class)
{
  struct MonoImage * D.30998;
  struct MonoClassExt * D.30999;
  struct MonoEvent * D.31002;
  struct MonoGenericClass * D.31009;
  unsigned char D.31012;
  gchar * D.31015;
  struct MonoClassExt * D.31016;
  unsigned int D.31017;
  unsigned int D.31018;
  int D.31019;
  void * D.31020;
  long unsigned int D.31023;
  long unsigned int D.31024;
  struct MonoEvent * D.31025;
  const char * D.31026;
  struct MonoMethod * iftmp.333;
  struct MonoMethod * D.31028;
  struct MonoMethod * iftmp.334;
  struct MonoMethod * D.31033;
  struct MonoMethod * iftmp.335;
  struct MonoMethod * D.31038;
  struct MonoMethod * * iftmp.336;
  struct MonoMethod * * D.31043;
  unsigned int D.31047;
  unsigned int D.31048;
  unsigned int D.31049;
  unsigned int D.31050;
  unsigned int D.31051;
  unsigned int last.337;
  unsigned int first.338;
  unsigned int D.31054;
  unsigned char D.31057;
  gchar * D.31060;
  unsigned int count.339;
  unsigned int first.340;
  unsigned int D.31063;
  long unsigned int D.31064;
  long unsigned int D.31065;
  int i.341;
  unsigned int D.31067;
  unsigned int D.31068;
  const char * D.31069;
  int j.342;
  unsigned char D.31071;
  unsigned char D.31072;
  unsigned int D.31075;
  struct MonoMethod * * D.31077;
  unsigned int D.31078;
  unsigned int D.31079;
  unsigned int D.31080;
  long unsigned int D.31081;
  long unsigned int D.31082;
  struct MonoMethod * * D.31083;
  struct MonoMethod * * D.31084;
  void * D.31087;
  long unsigned int D.31089;
  long unsigned int D.31090;
  struct MonoMethod * * D.31091;
  struct MonoMethod * D.31092;
  int D.31093;
  long unsigned int D.31094;
  long unsigned int D.31095;
  void * D.31096;
  sizetype D.31097;
  sizetype D.31098;
  sizetype D.31099;
  struct MonoMethod * * D.31100;
  unsigned int endm.343;
  int first;
  int count;
  guint startm;
  guint endm;
  guint i;
  guint j;
  guint32 cols[3];
  struct MonoTableInfo * msemt;
  guint32 last;
  struct MonoEvent * events;

  try
    {
      D.30998 = class->image;
      msemt = &D.30998->tables[24];
      D.30999 = class->ext;
      if (D.30999 != 0B) goto <D.31000>; else goto <D.31001>;
      <D.31000>:
      D.30999 = class->ext;
      D.31002 = D.30999->events;
      if (D.31002 != 0B) goto <D.31003>; else goto <D.31004>;
      <D.31003>:
      return;
      <D.31004>:
      <D.31001>:
      mono_loader_lock ();
      D.30999 = class->ext;
      if (D.30999 != 0B) goto <D.31005>; else goto <D.31006>;
      <D.31005>:
      D.30999 = class->ext;
      D.31002 = D.30999->events;
      if (D.31002 != 0B) goto <D.31007>; else goto <D.31008>;
      <D.31007>:
      mono_loader_unlock ();
      return;
      <D.31008>:
      <D.31006>:
      mono_class_alloc_ext (class);
      D.31009 = class->generic_class;
      if (D.31009 != 0B) goto <D.31010>; else goto <D.31011>;
      <D.31010>:
      {
        struct MonoClass * gklass;
        struct MonoGenericContext * context;

        D.31009 = class->generic_class;
        gklass = D.31009->container_class;
        mono_class_setup_events (gklass);
        D.31012 = gklass->exception_type;
        if (D.31012 != 0) goto <D.31013>; else goto <D.31014>;
        <D.31013>:
        D.31015 = monoeg_strdup ("Generic type definition failed to load");
        mono_class_set_failure (class, 7, D.31015);
        mono_loader_unlock ();
        return;
        <D.31014>:
        D.30999 = class->ext;
        D.31016 = gklass->ext;
        D.30999->event = D.31016->event;
        D.30999 = class->ext;
        D.30999 = class->ext;
        D.31017 = D.30999->event.count;
        D.31018 = D.31017 * 56;
        D.31019 = (int) D.31018;
        D.31020 = mono_class_alloc0 (class, D.31019);
        D.30999->events = D.31020;
        D.30999 = class->ext;
        D.31017 = D.30999->event.count;
        if (D.31017 != 0) goto <D.31021>; else goto <D.31022>;
        <D.31021>:
        context = mono_class_get_context (class);
        <D.31022>:
        i = 0;
        goto <D.19424>;
        <D.19423>:
        {
          struct MonoEvent * event;
          struct MonoEvent * gevent;

          D.30999 = class->ext;
          D.31002 = D.30999->events;
          D.31023 = (long unsigned int) i;
          D.31024 = D.31023 * 56;
          event = D.31002 + D.31024;
          D.31016 = gklass->ext;
          D.31025 = D.31016->events;
          D.31023 = (long unsigned int) i;
          D.31024 = D.31023 * 56;
          gevent = D.31025 + D.31024;
          event->parent = class;
          D.31026 = gevent->name;
          event->name = D.31026;
          D.31028 = gevent->add;
          if (D.31028 != 0B) goto <D.31029>; else goto <D.31030>;
          <D.31029>:
          D.31028 = gevent->add;
          iftmp.333 = mono_class_inflate_generic_method_full (D.31028, class, context);
          goto <D.31031>;
          <D.31030>:
          iftmp.333 = 0B;
          <D.31031>:
          event->add = iftmp.333;
          D.31033 = gevent->remove;
          if (D.31033 != 0B) goto <D.31034>; else goto <D.31035>;
          <D.31034>:
          D.31033 = gevent->remove;
          iftmp.334 = mono_class_inflate_generic_method_full (D.31033, class, context);
          goto <D.31036>;
          <D.31035>:
          iftmp.334 = 0B;
          <D.31036>:
          event->remove = iftmp.334;
          D.31038 = gevent->raise;
          if (D.31038 != 0B) goto <D.31039>; else goto <D.31040>;
          <D.31039>:
          D.31038 = gevent->raise;
          iftmp.335 = mono_class_inflate_generic_method_full (D.31038, class, context);
          goto <D.31041>;
          <D.31040>:
          iftmp.335 = 0B;
          <D.31041>:
          event->raise = iftmp.335;
          D.31043 = gevent->other;
          if (D.31043 != 0B) goto <D.31044>; else goto <D.31045>;
          <D.31044>:
          D.31043 = gevent->other;
          iftmp.336 = inflate_method_listz (D.31043, class, context);
          goto <D.31046>;
          <D.31045>:
          iftmp.336 = 0B;
          <D.31046>:
          event->other = iftmp.336;
          D.31047 = gevent->attrs;
          event->attrs = D.31047;
        }
        i = i + 1;
        <D.19424>:
        D.30999 = class->ext;
        D.31017 = D.30999->event.count;
        if (D.31017 > i) goto <D.19423>; else goto <D.19425>;
        <D.19425>:
        mono_loader_unlock ();
        return;
      }
      <D.31011>:
      D.31048 = class->type_token;
      D.31049 = D.31048 & 16777215;
      D.31050 = D.31049 + 4294967295;
      D.30998 = class->image;
      D.31051 = mono_metadata_events_from_typedef (D.30998, D.31050, &last);
      first = (int) D.31051;
      last.337 = last;
      first.338 = (unsigned int) first;
      D.31054 = last.337 - first.338;
      count = (int) D.31054;
      if (count != 0) goto <D.31055>; else goto <D.31056>;
      <D.31055>:
      mono_class_setup_methods (class);
      D.31057 = class->exception_type;
      if (D.31057 != 0) goto <D.31058>; else goto <D.31059>;
      <D.31058>:
      D.31060 = monoeg_strdup ("Generic type definition failed to load");
      mono_class_set_failure (class, 7, D.31060);
      mono_loader_unlock ();
      return;
      <D.31059>:
      <D.31056>:
      D.30999 = class->ext;
      first.338 = (unsigned int) first;
      D.30999->event.first = first.338;
      D.30999 = class->ext;
      count.339 = (unsigned int) count;
      D.30999->event.count = count.339;
      D.30999 = class->ext;
      D.31017 = D.30999->event.count;
      D.31018 = D.31017 * 56;
      D.31019 = (int) D.31018;
      events = mono_class_alloc0 (class, D.31019);
      i = (guint) first;
      goto <D.19442>;
      <D.19441>:
      {
        struct MonoEvent * event;

        first.340 = (unsigned int) first;
        D.31063 = i - first.340;
        D.31064 = (long unsigned int) D.31063;
        D.31065 = D.31064 * 56;
        event = events + D.31065;
        i.341 = (int) i;
        D.30998 = class->image;
        mono_metadata_decode_table_row (D.30998, 20, i.341, &cols, 3);
        event->parent = class;
        D.31067 = cols[0];
        event->attrs = D.31067;
        D.31068 = cols[1];
        D.30998 = class->image;
        D.31069 = mono_metadata_string_heap (D.30998, D.31068);
        event->name = D.31069;
        D.30998 = class->image;
        startm = mono_metadata_methods_from_event (D.30998, i, &endm);
        j = startm;
        goto <D.19439>;
        <D.19438>:
        {
          struct MonoMethod * method;

          j.342 = (int) j;
          mono_metadata_decode_row (msemt, j.342, &cols, 3);
          D.30998 = class->image;
          D.31071 = BIT_FIELD_REF <*D.30998, 8, 224>;
          D.31072 = D.31071 & 32;
          if (D.31072 != 0) goto <D.31073>; else goto <D.31074>;
          <D.31073>:
          D.31068 = cols[1];
          D.31075 = D.31068 | 100663296;
          D.30998 = class->image;
          method = mono_get_method (D.30998, D.31075, class);
          goto <D.31076>;
          <D.31074>:
          D.31077 = class->methods;
          D.31068 = cols[1];
          D.31078 = class->method.first;
          D.31079 = D.31068 - D.31078;
          D.31080 = D.31079 + 4294967295;
          D.31081 = (long unsigned int) D.31080;
          D.31082 = D.31081 * 8;
          D.31083 = D.31077 + D.31082;
          method = *D.31083;
          <D.31076>:
          D.31067 = cols[0];
          switch (D.31067) <default: <D.19437>, case 4: <D.19432>, case 8: <D.19428>, case 16: <D.19430>, case 32: <D.19431>>
          <D.19428>:
          event->add = method;
          goto <D.19429>;
          <D.19430>:
          event->remove = method;
          goto <D.19429>;
          <D.19431>:
          event->raise = method;
          goto <D.19429>;
          <D.19432>:
          {
            int n;

            n = 0;
            D.31084 = event->other;
            if (D.31084 == 0B) goto <D.31085>; else goto <D.31086>;
            <D.31085>:
            D.31087 = monoeg_malloc0 (16);
            event->other = D.31087;
            goto <D.31088>;
            <D.31086>:
            goto <D.19435>;
            <D.19434>:
            n = n + 1;
            <D.19435>:
            D.31084 = event->other;
            D.31089 = (long unsigned int) n;
            D.31090 = D.31089 * 8;
            D.31091 = D.31084 + D.31090;
            D.31092 = *D.31091;
            if (D.31092 != 0B) goto <D.19434>; else goto <D.19436>;
            <D.19436>:
            D.31093 = n + 2;
            D.31094 = (long unsigned int) D.31093;
            D.31095 = D.31094 * 8;
            D.31084 = event->other;
            D.31096 = monoeg_realloc (D.31084, D.31095);
            event->other = D.31096;
            <D.31088>:
            D.31084 = event->other;
            D.31089 = (long unsigned int) n;
            D.31090 = D.31089 * 8;
            D.31091 = D.31084 + D.31090;
            *D.31091 = method;
            D.31084 = event->other;
            D.31097 = (sizetype) n;
            D.31098 = D.31097 + 1;
            D.31099 = D.31098 * 8;
            D.31100 = D.31084 + D.31099;
            *D.31100 = 0B;
            goto <D.19429>;
          }
          <D.19437>:
          goto <D.19429>;
          <D.19429>:
        }
        j = j + 1;
        <D.19439>:
        endm.343 = endm;
        if (j < endm.343) goto <D.19438>; else goto <D.19440>;
        <D.19440>:
      }
      i = i + 1;
      <D.19442>:
      last.337 = last;
      if (i < last.337) goto <D.19441>; else goto <D.19443>;
      <D.19443>:
      mono_memory_barrier ();
      D.30999 = class->ext;
      D.30999->events = events;
      mono_loader_unlock ();
    }
  finally
    {
      endm = {CLOBBER};
      cols = {CLOBBER};
      last = {CLOBBER};
    }
}


inflate_method_listz (struct MonoMethod * * methods, struct MonoClass * class, struct MonoGenericContext * context)
{
  struct MonoMethod * D.31106;
  int D.31107;
  long unsigned int D.31108;
  long unsigned int D.31109;
  long unsigned int D.31110;
  long unsigned int D.31111;
  struct MonoMethod * * D.31112;
  struct MonoMethod * D.31113;
  struct MonoMethod * * D.31114;
  struct MonoMethod * * om;
  struct MonoMethod * * retval;
  int count;

  om = methods;
  count = 0;
  goto <D.19401>;
  <D.19400>:
  om = om + 8;
  count = count + 1;
  <D.19401>:
  D.31106 = *om;
  if (D.31106 != 0B) goto <D.19400>; else goto <D.19402>;
  <D.19402>:
  D.31107 = count + 1;
  D.31108 = (long unsigned int) D.31107;
  D.31109 = D.31108 * 8;
  retval = monoeg_malloc0 (D.31109);
  count = 0;
  om = methods;
  count = 0;
  goto <D.19404>;
  <D.19403>:
  D.31110 = (long unsigned int) count;
  D.31111 = D.31110 * 8;
  D.31112 = retval + D.31111;
  D.31106 = *om;
  D.31113 = mono_class_inflate_generic_method_full (D.31106, class, context);
  *D.31112 = D.31113;
  om = om + 8;
  count = count + 1;
  <D.19404>:
  D.31106 = *om;
  if (D.31106 != 0B) goto <D.19403>; else goto <D.19405>;
  <D.19405>:
  D.31114 = retval;
  return D.31114;
}


mono_class_get_fields (struct MonoClass * klass, void * * iter)
{
  struct MonoClassField * D.31118;
  void * D.31119;
  unsigned char D.31122;
  unsigned int D.31125;
  struct MonoClassField * D.31128;
  long unsigned int D.31129;
  long unsigned int D.31130;
  struct MonoClassField * D.31131;
  struct MonoClassField * field;

  if (iter == 0B) goto <D.31116>; else goto <D.31117>;
  <D.31116>:
  D.31118 = 0B;
  return D.31118;
  <D.31117>:
  D.31119 = *iter;
  if (D.31119 == 0B) goto <D.31120>; else goto <D.31121>;
  <D.31120>:
  mono_class_setup_fields_locking (klass);
  D.31122 = klass->exception_type;
  if (D.31122 != 0) goto <D.31123>; else goto <D.31124>;
  <D.31123>:
  D.31118 = 0B;
  return D.31118;
  <D.31124>:
  D.31125 = klass->field.count;
  if (D.31125 != 0) goto <D.31126>; else goto <D.31127>;
  <D.31126>:
  D.31128 = klass->fields;
  *iter = D.31128;
  D.31118 = *iter;
  return D.31118;
  <D.31127>:
  D.31118 = 0B;
  return D.31118;
  <D.31121>:
  field = *iter;
  field = field + 32;
  D.31128 = klass->fields;
  D.31125 = klass->field.count;
  D.31129 = (long unsigned int) D.31125;
  D.31130 = D.31129 * 32;
  D.31131 = D.31128 + D.31130;
  if (D.31131 > field) goto <D.31132>; else goto <D.31133>;
  <D.31132>:
  *iter = field;
  D.31118 = *iter;
  return D.31118;
  <D.31133>:
  D.31118 = 0B;
  return D.31118;
}


mono_class_get_methods (struct MonoClass * klass, void * * iter)
{
  struct MonoMethod * D.31137;
  void * D.31138;
  struct MonoMethod * * D.31141;
  unsigned int D.31144;
  long unsigned int D.31147;
  long unsigned int D.31148;
  struct MonoMethod * * D.31149;
  struct MonoMethod * * method;

  if (iter == 0B) goto <D.31135>; else goto <D.31136>;
  <D.31135>:
  D.31137 = 0B;
  return D.31137;
  <D.31136>:
  D.31138 = *iter;
  if (D.31138 == 0B) goto <D.31139>; else goto <D.31140>;
  <D.31139>:
  mono_class_setup_methods (klass);
  D.31141 = klass->methods;
  if (D.31141 == 0B) goto <D.31142>; else goto <D.31143>;
  <D.31142>:
  D.31137 = 0B;
  return D.31137;
  <D.31143>:
  D.31144 = klass->method.count;
  if (D.31144 != 0) goto <D.31145>; else goto <D.31146>;
  <D.31145>:
  D.31141 = klass->methods;
  *iter = D.31141;
  D.31141 = klass->methods;
  D.31137 = *D.31141;
  return D.31137;
  <D.31146>:
  D.31137 = 0B;
  return D.31137;
  <D.31140>:
  method = *iter;
  method = method + 8;
  D.31141 = klass->methods;
  D.31144 = klass->method.count;
  D.31147 = (long unsigned int) D.31144;
  D.31148 = D.31147 * 8;
  D.31149 = D.31141 + D.31148;
  if (D.31149 > method) goto <D.31150>; else goto <D.31151>;
  <D.31150>:
  *iter = method;
  D.31137 = *method;
  return D.31137;
  <D.31151>:
  D.31137 = 0B;
  return D.31137;
}


mono_class_get_properties (struct MonoClass * klass, void * * iter)
{
  struct MonoProperty * D.31155;
  void * D.31156;
  struct MonoClassExt * D.31159;
  unsigned int D.31160;
  struct MonoProperty * D.31163;
  long unsigned int D.31164;
  long unsigned int D.31165;
  struct MonoProperty * D.31166;
  struct MonoProperty * property;

  if (iter == 0B) goto <D.31153>; else goto <D.31154>;
  <D.31153>:
  D.31155 = 0B;
  return D.31155;
  <D.31154>:
  D.31156 = *iter;
  if (D.31156 == 0B) goto <D.31157>; else goto <D.31158>;
  <D.31157>:
  mono_class_setup_properties (klass);
  D.31159 = klass->ext;
  D.31160 = D.31159->property.count;
  if (D.31160 != 0) goto <D.31161>; else goto <D.31162>;
  <D.31161>:
  D.31159 = klass->ext;
  D.31163 = D.31159->properties;
  *iter = D.31163;
  D.31155 = *iter;
  return D.31155;
  <D.31162>:
  D.31155 = 0B;
  return D.31155;
  <D.31158>:
  property = *iter;
  property = property + 40;
  D.31159 = klass->ext;
  D.31163 = D.31159->properties;
  D.31159 = klass->ext;
  D.31160 = D.31159->property.count;
  D.31164 = (long unsigned int) D.31160;
  D.31165 = D.31164 * 40;
  D.31166 = D.31163 + D.31165;
  if (D.31166 > property) goto <D.31167>; else goto <D.31168>;
  <D.31167>:
  *iter = property;
  D.31155 = *iter;
  return D.31155;
  <D.31168>:
  D.31155 = 0B;
  return D.31155;
}


mono_class_get_events (struct MonoClass * klass, void * * iter)
{
  struct MonoEvent * D.31172;
  void * D.31173;
  struct MonoClassExt * D.31176;
  unsigned int D.31177;
  struct MonoEvent * D.31180;
  long unsigned int D.31181;
  long unsigned int D.31182;
  struct MonoEvent * D.31183;
  struct MonoEvent * event;

  if (iter == 0B) goto <D.31170>; else goto <D.31171>;
  <D.31170>:
  D.31172 = 0B;
  return D.31172;
  <D.31171>:
  D.31173 = *iter;
  if (D.31173 == 0B) goto <D.31174>; else goto <D.31175>;
  <D.31174>:
  mono_class_setup_events (klass);
  D.31176 = klass->ext;
  D.31177 = D.31176->event.count;
  if (D.31177 != 0) goto <D.31178>; else goto <D.31179>;
  <D.31178>:
  D.31176 = klass->ext;
  D.31180 = D.31176->events;
  *iter = D.31180;
  D.31172 = *iter;
  return D.31172;
  <D.31179>:
  D.31172 = 0B;
  return D.31172;
  <D.31175>:
  event = *iter;
  event = event + 56;
  D.31176 = klass->ext;
  D.31180 = D.31176->events;
  D.31176 = klass->ext;
  D.31177 = D.31176->event.count;
  D.31181 = (long unsigned int) D.31177;
  D.31182 = D.31181 * 56;
  D.31183 = D.31180 + D.31182;
  if (D.31183 > event) goto <D.31184>; else goto <D.31185>;
  <D.31184>:
  *iter = event;
  D.31172 = *iter;
  return D.31172;
  <D.31185>:
  D.31172 = 0B;
  return D.31172;
}


mono_class_get_interfaces (struct MonoClass * klass, void * * iter)
{
  struct MonoClass * D.31189;
  void * D.31190;
  unsigned char D.31193;
  unsigned char D.31194;
  unsigned char D.31197;
  unsigned char D.31198;
  int D.31201;
  short unsigned int D.31204;
  struct MonoClass * * D.31207;
  long unsigned int D.31208;
  long unsigned int D.31209;
  struct MonoClass * * D.31210;
  struct MonoError error;
  struct MonoClass * * iface;

  try
    {
      if (iter == 0B) goto <D.31187>; else goto <D.31188>;
      <D.31187>:
      D.31189 = 0B;
      return D.31189;
      <D.31188>:
      D.31190 = *iter;
      if (D.31190 == 0B) goto <D.31191>; else goto <D.31192>;
      <D.31191>:
      D.31193 = BIT_FIELD_REF <*klass, 8, 256>;
      D.31194 = D.31193 & 1;
      if (D.31194 == 0) goto <D.31195>; else goto <D.31196>;
      <D.31195>:
      mono_class_init (klass);
      <D.31196>:
      D.31197 = BIT_FIELD_REF <*klass, 8, 288>;
      D.31198 = D.31197 & 1;
      if (D.31198 == 0) goto <D.31199>; else goto <D.31200>;
      <D.31199>:
      mono_class_setup_interfaces (klass, &error);
      D.31201 = mono_error_ok (&error);
      if (D.31201 == 0) goto <D.31202>; else goto <D.31203>;
      <D.31202>:
      mono_error_cleanup (&error);
      D.31189 = 0B;
      return D.31189;
      <D.31203>:
      <D.31200>:
      D.31204 = klass->interface_count;
      if (D.31204 != 0) goto <D.31205>; else goto <D.31206>;
      <D.31205>:
      D.31207 = klass->interfaces;
      *iter = D.31207;
      D.31207 = klass->interfaces;
      D.31189 = *D.31207;
      return D.31189;
      <D.31206>:
      D.31189 = 0B;
      return D.31189;
      <D.31192>:
      iface = *iter;
      iface = iface + 8;
      D.31207 = klass->interfaces;
      D.31204 = klass->interface_count;
      D.31208 = (long unsigned int) D.31204;
      D.31209 = D.31208 * 8;
      D.31210 = D.31207 + D.31209;
      if (D.31210 > iface) goto <D.31211>; else goto <D.31212>;
      <D.31211>:
      *iter = iface;
      D.31189 = *iface;
      return D.31189;
      <D.31212>:
      D.31189 = 0B;
      return D.31189;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_get_nested_types (struct MonoClass * klass, void * * iter)
{
  struct MonoClass * D.31217;
  unsigned char D.31218;
  unsigned char D.31219;
  unsigned int D.31222;
  struct MonoImage * D.31227;
  unsigned int D.31228;
  int D.31229;
  struct MonoTableInfo * D.31230;
  unsigned int D.31231;
  unsigned int D.31232;
  int D.31233;
  int D.31236;
  unsigned int D.31237;
  unsigned int D.31238;
  struct MonoClassExt * D.31239;
  struct GList * D.31240;
  struct GList * D.31241;
  unsigned int D.31242;
  void * D.31243;
  struct MonoError error;
  struct GList * item;
  int i;

  try
    {
      if (iter == 0B) goto <D.31215>; else goto <D.31216>;
      <D.31215>:
      D.31217 = 0B;
      return D.31217;
      <D.31216>:
      D.31218 = BIT_FIELD_REF <*klass, 8, 280>;
      D.31219 = D.31218 & 128;
      if (D.31219 == 0) goto <D.31220>; else goto <D.31221>;
      <D.31220>:
      D.31222 = klass->type_token;
      if (D.31222 == 0) goto <D.31223>; else goto <D.31224>;
      <D.31223>:
      klass->nested_classes_inited = 1;
      <D.31224>:
      mono_loader_lock ();
      D.31218 = BIT_FIELD_REF <*klass, 8, 280>;
      D.31219 = D.31218 & 128;
      if (D.31219 == 0) goto <D.31225>; else goto <D.31226>;
      <D.31225>:
      D.31222 = klass->type_token;
      D.31227 = klass->image;
      D.31228 = mono_metadata_nesting_typedef (D.31227, D.31222, 1);
      i = (int) D.31228;
      goto <D.21650>;
      <D.21651>:
      {
        struct MonoClass * nclass;
        guint32 cols[2];

        try
          {
            D.31229 = i + -1;
            D.31227 = klass->image;
            D.31230 = &D.31227->tables[41];
            mono_metadata_decode_row (D.31230, D.31229, &cols, 2);
            D.31231 = cols[0];
            D.31232 = D.31231 | 33554432;
            D.31227 = klass->image;
            nclass = mono_class_create_from_typedef (D.31227, D.31232, &error);
            D.31233 = mono_error_ok (&error);
            if (D.31233 == 0) goto <D.31234>; else goto <D.31235>;
            <D.31234>:
            mono_error_cleanup (&error);
            D.31236 = i + 1;
            D.31237 = (unsigned int) D.31236;
            D.31222 = klass->type_token;
            D.31227 = klass->image;
            D.31238 = mono_metadata_nesting_typedef (D.31227, D.31222, D.31237);
            i = (int) D.31238;
            // predicted unlikely by continue predictor.
            goto <D.21650>;
            <D.31235>:
            mono_class_alloc_ext (klass);
            D.31239 = klass->ext;
            D.31239 = klass->ext;
            D.31240 = D.31239->nested_classes;
            D.31227 = klass->image;
            D.31241 = g_list_prepend_image (D.31227, D.31240, nclass);
            D.31239->nested_classes = D.31241;
            D.31236 = i + 1;
            D.31237 = (unsigned int) D.31236;
            D.31222 = klass->type_token;
            D.31227 = klass->image;
            D.31242 = mono_metadata_nesting_typedef (D.31227, D.31222, D.31237);
            i = (int) D.31242;
          }
        finally
          {
            cols = {CLOBBER};
          }
      }
      <D.21650>:
      if (i != 0) goto <D.21651>; else goto <D.21652>;
      <D.21652>:
      <D.31226>:
      mono_memory_barrier ();
      klass->nested_classes_inited = 1;
      mono_loader_unlock ();
      <D.31221>:
      D.31243 = *iter;
      if (D.31243 == 0B) goto <D.31244>; else goto <D.31245>;
      <D.31244>:
      D.31239 = klass->ext;
      if (D.31239 != 0B) goto <D.31247>; else goto <D.31246>;
      <D.31247>:
      D.31239 = klass->ext;
      D.31240 = D.31239->nested_classes;
      if (D.31240 != 0B) goto <D.31248>; else goto <D.31246>;
      <D.31248>:
      D.31239 = klass->ext;
      D.31240 = D.31239->nested_classes;
      *iter = D.31240;
      D.31239 = klass->ext;
      D.31240 = D.31239->nested_classes;
      D.31217 = D.31240->data;
      return D.31217;
      <D.31246>:
      D.31217 = 0B;
      return D.31217;
      <D.31245>:
      item = *iter;
      item = item->next;
      if (item != 0B) goto <D.31249>; else goto <D.31250>;
      <D.31249>:
      *iter = item;
      D.31217 = item->data;
      return D.31217;
      <D.31250>:
      D.31217 = 0B;
      return D.31217;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_class_is_delegate (struct MonoClass * klass)
{
  mono_bool D.31255;
  <unnamed-unsigned:1> D.31256;

  D.31256 = klass->delegate;
  D.31255 = (mono_bool) D.31256;
  return D.31255;
}


mono_class_implements_interface (struct MonoClass * klass, struct MonoClass * iface)
{
  mono_bool D.31258;

  D.31258 = mono_class_is_assignable_from (iface, klass);
  return D.31258;
}


mono_field_get_name (struct MonoClassField * field)
{
  const char * D.31260;

  D.31260 = field->name;
  return D.31260;
}


mono_field_get_type (struct MonoClassField * field)
{
  int D.31262;
  const char * D.31265;
  struct MonoType * D.31266;
  struct MonoError error;
  struct MonoType * type;

  try
    {
      type = mono_field_get_type_checked (field, &error);
      D.31262 = mono_error_ok (&error);
      if (D.31262 == 0) goto <D.31263>; else goto <D.31264>;
      <D.31263>:
      D.31265 = mono_error_get_message (&error);
      mono_trace (16, 2, "Could not load field\'s type due to %s", D.31265);
      mono_error_cleanup (&error);
      <D.31264>:
      D.31266 = type;
      return D.31266;
    }
  finally
    {
      error = {CLOBBER};
    }
}


mono_field_get_type_checked (struct MonoClassField * field, struct MonoError * error)
{
  struct MonoType * D.31269;
  struct MonoType * D.31272;

  mono_error_init (error);
  D.31269 = field->type;
  if (D.31269 == 0B) goto <D.31270>; else goto <D.31271>;
  <D.31270>:
  mono_field_resolve_type (field, error);
  <D.31271>:
  D.31272 = field->type;
  return D.31272;
}


mono_field_get_parent (struct MonoClassField * field)
{
  struct MonoClass * D.31274;

  D.31274 = field->parent;
  return D.31274;
}


mono_field_get_flags (struct MonoClassField * field)
{
  struct MonoType * D.31276;
  uint32_t D.31279;
  short unsigned int D.31280;

  D.31276 = field->type;
  if (D.31276 == 0B) goto <D.31277>; else goto <D.31278>;
  <D.31277>:
  D.31279 = mono_field_resolve_flags (field);
  return D.31279;
  <D.31278>:
  D.31276 = field->type;
  D.31280 = D.31276->attrs;
  D.31279 = (uint32_t) D.31280;
  return D.31279;
}


mono_field_resolve_flags (struct MonoClassField * field)
{
  struct MonoClass * iftmp.344;
  struct MonoGenericClass * D.31283;
  long int field.345;
  struct MonoClassField * D.31288;
  long int D.31289;
  long int D.31290;
  long int D.31291;
  struct MonoClassField * D.31294;
  long unsigned int D.31295;
  long unsigned int D.31296;
  guint32 D.31297;
  unsigned int D.31298;
  unsigned int field_idx.346;
  unsigned int D.31300;
  unsigned char D.31301;
  unsigned char D.31302;
  _Bool D.31303;
  long int D.31304;
  long int D.31305;
  struct MonoClass * class;
  struct MonoImage * image;
  struct MonoClass * gtd;
  int field_idx;

  class = field->parent;
  image = class->image;
  D.31283 = class->generic_class;
  if (D.31283 != 0B) goto <D.31284>; else goto <D.31285>;
  <D.31284>:
  iftmp.344 = mono_class_get_generic_type_definition (class);
  goto <D.31286>;
  <D.31285>:
  iftmp.344 = 0B;
  <D.31286>:
  gtd = iftmp.344;
  field.345 = (long int) field;
  D.31288 = class->fields;
  D.31289 = (long int) D.31288;
  D.31290 = field.345 - D.31289;
  D.31291 = D.31290 /[ex] 32;
  field_idx = (int) D.31291;
  if (gtd != 0B) goto <D.31292>; else goto <D.31293>;
  <D.31292>:
  {
    struct MonoClassField * gfield;

    D.31294 = gtd->fields;
    D.31295 = (long unsigned int) field_idx;
    D.31296 = D.31295 * 32;
    gfield = D.31294 + D.31296;
    D.31297 = mono_field_get_flags (gfield);
    return D.31297;
  }
  <D.31293>:
  {
    int idx;

    D.31298 = class->field.first;
    field_idx.346 = (unsigned int) field_idx;
    D.31300 = D.31298 + field_idx.346;
    idx = (int) D.31300;
    D.31301 = BIT_FIELD_REF <*image, 8, 224>;
    D.31302 = D.31301 & 8;
    D.31303 = D.31302 != 0;
    D.31304 = (long int) D.31303;
    D.31305 = __builtin_expect (D.31304, 0);
    if (D.31305 != 0) goto <D.31306>; else goto <D.31307>;
    <D.31306>:
    monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 10164, "!image->dynamic");
    <D.31307>:
    D.31297 = mono_metadata_decode_table_row_col (image, 4, idx, 0);
    return D.31297;
  }
}


mono_field_get_offset (struct MonoClassField * field)
{
  uint32_t D.31309;
  int D.31310;

  D.31310 = field->offset;
  D.31309 = (uint32_t) D.31310;
  return D.31309;
}


mono_field_get_data (struct MonoClassField * field)
{
  struct MonoType * D.31312;
  short unsigned int D.31313;
  signed short D.31314;
  const char * D.31317;
  int D.31318;
  int D.31319;

  D.31312 = field->type;
  D.31313 = D.31312->attrs;
  D.31314 = (signed short) D.31313;
  if (D.31314 < 0) goto <D.31315>; else goto <D.31316>;
  <D.31315>:
  {
    MonoTypeEnum def_type;

    try
      {
        D.31317 = mono_class_get_field_default_value (field, &def_type);
        return D.31317;
      }
    finally
      {
        def_type = {CLOBBER};
      }
  }
  <D.31316>:
  D.31312 = field->type;
  D.31313 = D.31312->attrs;
  D.31318 = (int) D.31313;
  D.31319 = D.31318 & 256;
  if (D.31319 != 0) goto <D.31320>; else goto <D.31321>;
  <D.31320>:
  D.31317 = mono_field_get_rva (field);
  return D.31317;
  <D.31321>:
  D.31317 = 0B;
  return D.31317;
}


mono_field_get_rva (struct MonoClassField * field)
{
  struct MonoType * D.31324;
  short unsigned int D.31325;
  int D.31326;
  int D.31327;
  _Bool D.31328;
  long int D.31329;
  long int D.31330;
  struct MonoClassExt * D.31335;
  struct MonoFieldDefaultValue * D.31337;
  unsigned int D.31340;
  unsigned int D.31341;
  int D.31342;
  void * D.31343;
  long unsigned int D.31344;
  long unsigned int D.31345;
  struct MonoFieldDefaultValue * D.31346;
  const char * D.31347;
  struct MonoImage * D.31350;
  unsigned char D.31351;
  unsigned char D.31352;
  unsigned int D.31355;
  unsigned int field_index.347;
  unsigned int D.31357;
  struct MonoClass * D.31358;
  struct MonoImage * D.31359;
  unsigned int rva.348;
  const char * D.31363;
  const char * D.31364;
  char * D.31365;
  const char * D.31366;
  guint32 rva;
  int field_index;
  struct MonoClass * klass;

  try
    {
      klass = field->parent;
      D.31324 = field->type;
      D.31325 = D.31324->attrs;
      D.31326 = (int) D.31325;
      D.31327 = D.31326 & 256;
      D.31328 = D.31327 == 0;
      D.31329 = (long int) D.31328;
      D.31330 = __builtin_expect (D.31329, 0);
      if (D.31330 != 0) goto <D.31331>; else goto <D.31332>;
      <D.31331>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 9062, "field->type->attrs & FIELD_ATTRIBUTE_HAS_FIELD_RVA");
      <D.31332>:
      D.31335 = klass->ext;
      if (D.31335 == 0B) goto <D.31333>; else goto <D.31336>;
      <D.31336>:
      D.31335 = klass->ext;
      D.31337 = D.31335->field_def_values;
      if (D.31337 == 0B) goto <D.31333>; else goto <D.31334>;
      <D.31333>:
      mono_loader_lock ();
      mono_class_alloc_ext (klass);
      D.31335 = klass->ext;
      D.31337 = D.31335->field_def_values;
      if (D.31337 == 0B) goto <D.31338>; else goto <D.31339>;
      <D.31338>:
      D.31335 = klass->ext;
      D.31340 = klass->field.count;
      D.31341 = D.31340 * 16;
      D.31342 = (int) D.31341;
      D.31343 = mono_class_alloc0 (klass, D.31342);
      D.31335->field_def_values = D.31343;
      <D.31339>:
      mono_loader_unlock ();
      <D.31334>:
      field_index = mono_field_get_index (field);
      D.31335 = klass->ext;
      D.31337 = D.31335->field_def_values;
      D.31344 = (long unsigned int) field_index;
      D.31345 = D.31344 * 16;
      D.31346 = D.31337 + D.31345;
      D.31347 = D.31346->data;
      if (D.31347 == 0B) goto <D.31348>; else goto <D.31349>;
      <D.31348>:
      D.31350 = klass->image;
      D.31351 = BIT_FIELD_REF <*D.31350, 8, 224>;
      D.31352 = D.31351 & 8;
      if (D.31352 == 0) goto <D.31353>; else goto <D.31354>;
      <D.31353>:
      D.31355 = klass->field.first;
      field_index.347 = (unsigned int) field_index;
      D.31357 = D.31355 + field_index.347;
      D.31358 = field->parent;
      D.31359 = D.31358->image;
      mono_metadata_field_info (D.31359, D.31357, 0B, &rva, 0B);
      rva.348 = rva;
      if (rva.348 == 0) goto <D.31361>; else goto <D.31362>;
      <D.31361>:
      D.31358 = field->parent;
      D.31363 = D.31358->name;
      D.31364 = mono_field_get_name (field);
      monoeg_g_log (0B, 16, "field %s in %s should have RVA data, but hasn\'t", D.31364, D.31363);
      <D.31362>:
      D.31335 = klass->ext;
      D.31337 = D.31335->field_def_values;
      D.31344 = (long unsigned int) field_index;
      D.31345 = D.31344 * 16;
      D.31346 = D.31337 + D.31345;
      rva.348 = rva;
      D.31358 = field->parent;
      D.31359 = D.31358->image;
      D.31365 = mono_image_rva_map (D.31359, rva.348);
      D.31346->data = D.31365;
      <D.31354>:
      <D.31349>:
      D.31335 = klass->ext;
      D.31337 = D.31335->field_def_values;
      D.31344 = (long unsigned int) field_index;
      D.31345 = D.31344 * 16;
      D.31346 = D.31337 + D.31345;
      D.31366 = D.31346->data;
      return D.31366;
    }
  finally
    {
      rva = {CLOBBER};
    }
}


mono_property_get_name (struct MonoProperty * prop)
{
  const char * D.31369;

  D.31369 = prop->name;
  return D.31369;
}


mono_property_get_set_method (struct MonoProperty * prop)
{
  struct MonoMethod * D.31371;

  D.31371 = prop->set;
  return D.31371;
}


mono_property_get_get_method (struct MonoProperty * prop)
{
  struct MonoMethod * D.31373;

  D.31373 = prop->get;
  return D.31373;
}


mono_property_get_parent (struct MonoProperty * prop)
{
  struct MonoClass * D.31375;

  D.31375 = prop->parent;
  return D.31375;
}


mono_property_get_flags (struct MonoProperty * prop)
{
  uint32_t D.31377;

  D.31377 = prop->attrs;
  return D.31377;
}


mono_event_get_name (struct MonoEvent * event)
{
  const char * D.31379;

  D.31379 = event->name;
  return D.31379;
}


mono_event_get_add_method (struct MonoEvent * event)
{
  struct MonoMethod * D.31381;

  D.31381 = event->add;
  return D.31381;
}


mono_event_get_remove_method (struct MonoEvent * event)
{
  struct MonoMethod * D.31383;

  D.31383 = event->remove;
  return D.31383;
}


mono_event_get_raise_method (struct MonoEvent * event)
{
  struct MonoMethod * D.31385;

  D.31385 = event->raise;
  return D.31385;
}


mono_event_get_parent (struct MonoEvent * event)
{
  struct MonoClass * D.31387;

  D.31387 = event->parent;
  return D.31387;
}


mono_event_get_flags (struct MonoEvent * event)
{
  uint32_t D.31389;

  D.31389 = event->attrs;
  return D.31389;
}


mono_class_get_method_from_name (struct MonoClass * klass, const char * name, int param_count)
{
  struct MonoMethod * D.31391;

  D.31391 = mono_class_get_method_from_name_flags (klass, name, param_count, 0);
  return D.31391;
}


mono_class_get_method_from_name_flags (struct MonoClass * klass, const char * name, int param_count, int flags)
{
  struct MonoGenericClass * D.31393;
  struct MonoMethod * * D.31396;
  struct MonoClass * D.31399;
  struct MonoGenericContext * D.31402;
  struct MonoMethod * D.31403;
  unsigned int D.31408;
  struct MonoImage * D.31410;
  unsigned char D.31411;
  unsigned char D.31412;
  long unsigned int D.31416;
  long unsigned int D.31417;
  struct MonoMethod * * D.31418;
  const char * D.31421;
  char D.31422;
  char D.31423;
  int D.21769;
  struct MonoMethodSignature * D.31429;
  short unsigned int D.31430;
  int D.31431;
  short unsigned int D.31432;
  int D.31433;
  int D.31434;
  unsigned int i.349;
  unsigned int D.31438;
  struct MonoMethod * res;
  int i;

  res = 0B;
  mono_class_init (klass);
  D.31393 = klass->generic_class;
  if (D.31393 != 0B) goto <D.31394>; else goto <D.31395>;
  <D.31394>:
  D.31396 = klass->methods;
  if (D.31396 == 0B) goto <D.31397>; else goto <D.31398>;
  <D.31397>:
  D.31393 = klass->generic_class;
  D.31399 = D.31393->container_class;
  res = mono_class_get_method_from_name_flags (D.31399, name, param_count, flags);
  if (res != 0B) goto <D.31400>; else goto <D.31401>;
  <D.31400>:
  D.31402 = mono_class_get_context (klass);
  res = mono_class_inflate_generic_method_full (res, klass, D.31402);
  <D.31401>:
  D.31403 = res;
  return D.31403;
  <D.31398>:
  <D.31395>:
  D.31396 = klass->methods;
  if (D.31396 != 0B) goto <D.31404>; else goto <D.31407>;
  <D.31407>:
  D.31408 = klass->type_token;
  if (D.31408 == 0) goto <D.31404>; else goto <D.31409>;
  <D.31409>:
  D.31410 = klass->image;
  D.31411 = BIT_FIELD_REF <*D.31410, 8, 224>;
  D.31412 = D.31411 & 8;
  if (D.31412 != 0) goto <D.31404>; else goto <D.31413>;
  <D.31413>:
  D.31393 = klass->generic_class;
  if (D.31393 != 0B) goto <D.31404>; else goto <D.31405>;
  <D.31404>:
  mono_class_setup_methods (klass);
  D.31396 = klass->methods;
  if (D.31396 == 0B) goto <D.31414>; else goto <D.31415>;
  <D.31414>:
  D.31403 = 0B;
  return D.31403;
  <D.31415>:
  i = 0;
  goto <D.21772>;
  <D.21771>:
  {
    struct MonoMethod * method;

    D.31396 = klass->methods;
    D.31416 = (long unsigned int) i;
    D.31417 = D.31416 * 8;
    D.31418 = D.31396 + D.31417;
    method = *D.31418;
    D.31421 = method->name;
    D.31422 = *D.31421;
    D.31423 = *name;
    if (D.31422 == D.31423) goto <D.31424>; else goto <D.31425>;
    <D.31424>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.31421 = method->name;
      D.21769 = __builtin_strcmp (name, D.31421);
    }
    if (D.21769 == 0) goto <D.31426>; else goto <D.31427>;
    <D.31426>:
    if (param_count == -1) goto <D.31419>; else goto <D.31428>;
    <D.31428>:
    D.31429 = mono_method_signature (method);
    D.31430 = D.31429->param_count;
    D.31431 = (int) D.31430;
    if (D.31431 == param_count) goto <D.31419>; else goto <D.31420>;
    <D.31419>:
    D.31432 = method->flags;
    D.31433 = (int) D.31432;
    D.31434 = D.31433 & flags;
    if (D.31434 == flags) goto <D.31435>; else goto <D.31436>;
    <D.31435>:
    res = method;
    goto <D.21770>;
    <D.31436>:
    <D.31420>:
    <D.31427>:
    <D.31425>:
  }
  i = i + 1;
  <D.21772>:
  i.349 = (unsigned int) i;
  D.31438 = klass->method.count;
  if (i.349 < D.31438) goto <D.21771>; else goto <D.21770>;
  <D.21770>:
  goto <D.31406>;
  <D.31405>:
  res = find_method_in_metadata (klass, name, param_count, flags);
  <D.31406>:
  D.31403 = res;
  return D.31403;
}


mono_class_set_failure (struct MonoClass * klass, guint32 ex_type, void * ex_data)
{
  unsigned char D.31440;
  gboolean D.31443;
  unsigned char D.31444;
  struct MonoImage * D.31447;

  D.31440 = klass->exception_type;
  if (D.31440 != 0) goto <D.31441>; else goto <D.31442>;
  <D.31441>:
  D.31443 = 0;
  return D.31443;
  <D.31442>:
  mono_loader_lock ();
  D.31444 = (unsigned char) ex_type;
  klass->exception_type = D.31444;
  if (ex_data != 0B) goto <D.31445>; else goto <D.31446>;
  <D.31445>:
  D.31447 = klass->image;
  mono_image_property_insert (D.31447, klass, 0, ex_data);
  <D.31446>:
  mono_loader_unlock ();
  D.31443 = 1;
  return D.31443;
}


mono_class_get_exception_data (struct MonoClass * klass)
{
  void * D.31449;
  struct MonoImage * D.31450;

  D.31450 = klass->image;
  D.31449 = mono_image_property_lookup (D.31450, klass, 0);
  return D.31449;
}


mono_classes_init ()
{
  mono_counters_register ("Inflated methods size", 2048, &inflated_methods_size);
  mono_counters_register ("Inflated classes", 2048, &inflated_classes);
  mono_counters_register ("Inflated classes size", 2048, &inflated_classes_size);
  mono_counters_register ("MonoClass size", 1024, &classes_size);
  mono_counters_register ("MonoClassExt size", 1024, &class_ext_size);
}


mono_classes_cleanup ()
{
  struct MonoBitSet * global_interface_bitset.350;

  global_interface_bitset.350 = global_interface_bitset;
  if (global_interface_bitset.350 != 0B) goto <D.31453>; else goto <D.31454>;
  <D.31453>:
  global_interface_bitset.350 = global_interface_bitset;
  mono_bitset_free (global_interface_bitset.350);
  <D.31454>:
  global_interface_bitset = 0B;
}


mono_class_get_exception_for_failure (struct MonoClass * klass)
{
  unsigned char D.31455;
  int D.31456;
  guint32 iftmp.351;
  struct MonoImage * D.31461;
  struct MonoAssembly * D.31462;
  struct MonoReflectionAssembly * D.31463;
  struct MonoType * D.31464;
  struct MonoReflectionType * D.31465;
  void * iftmp.352;
  struct MonoMethod * D.31470;
  struct MonoException * D.31471;
  char * iftmp.353;
  struct MonoAssembly * D.31473;
  struct MonoAssemblyName * D.31476;
  struct MonoDomain * D.31478;
  long unsigned int D.31479;
  sizetype D.31480;
  long unsigned int D.31481;
  sizetype D.31482;
  long unsigned int D.31483;
  sizetype D.31484;
  struct MonoDomain * D.31485;
  struct MonoString * D.31486;
  void * exception_data;

  exception_data = mono_class_get_exception_data (klass);
  D.31455 = klass->exception_type;
  D.31456 = (int) D.31455;
  switch (D.31456) <default: <D.21815>, case 2: <D.21791>, case 5: <D.21803>, case 6: <D.21806>, case 7: <D.21798>, case 8: <D.21809>, case 12: <D.21814>>
  <D.21791>:
  {
    struct MonoDomain * domain;
    struct MonoSecurityManager * secman;
    struct MonoMethod * method;
    guint32 error;
    struct MonoObject * exc;
    void * args[4];

    try
      {
        domain = mono_domain_get ();
        secman = mono_security_manager_get_methods ();
        method = exception_data;
        if (method != 0B) goto <D.31458>; else goto <D.31459>;
        <D.31458>:
        iftmp.351 = 2;
        goto <D.31460>;
        <D.31459>:
        iftmp.351 = 1;
        <D.31460>:
        error = iftmp.351;
        exc = 0B;
        args[0] = &error;
        D.31461 = klass->image;
        D.31462 = mono_image_get_assembly (D.31461);
        D.31463 = mono_assembly_get_object (domain, D.31462);
        args[1] = D.31463;
        D.31464 = &klass->byval_arg;
        D.31465 = mono_type_get_object (domain, D.31464);
        args[2] = D.31465;
        if (method != 0B) goto <D.31467>; else goto <D.31468>;
        <D.31467>:
        iftmp.352 = mono_method_get_object (domain, method, 0B);
        goto <D.31469>;
        <D.31468>:
        iftmp.352 = 0B;
        <D.31469>:
        args[3] = iftmp.352;
        D.31470 = secman->inheritsecurityexception;
        mono_runtime_invoke (D.31470, 0B, &args, &exc);
        D.31471 = exc;
        return D.31471;
      }
    finally
      {
        error = {CLOBBER};
        exc = {CLOBBER};
        args = {CLOBBER};
      }
  }
  <D.21798>:
  {
    struct MonoString * name;
    struct MonoException * ex;
    char * str;
    char * astr;

    str = mono_type_get_full_name (klass);
    D.31461 = klass->image;
    D.31473 = D.31461->assembly;
    if (D.31473 != 0B) goto <D.31474>; else goto <D.31475>;
    <D.31474>:
    D.31461 = klass->image;
    D.31473 = D.31461->assembly;
    D.31476 = &D.31473->aname;
    iftmp.353 = mono_stringify_assembly_name (D.31476);
    goto <D.31477>;
    <D.31475>:
    iftmp.353 = 0B;
    <D.31477>:
    astr = iftmp.353;
    D.31478 = mono_domain_get ();
    name = mono_string_new (D.31478, str);
    monoeg_g_free (str);
    ex = mono_get_exception_type_load (name, astr);
    monoeg_g_free (astr);
    D.31471 = ex;
    return D.31471;
  }
  <D.21803>:
  {
    char * class_name;
    char * assembly_name;

    class_name = exception_data;
    D.31479 = strlen (class_name);
    D.31480 = D.31479 + 1;
    assembly_name = class_name + D.31480;
    D.31471 = mono_get_exception_missing_method (class_name, assembly_name);
    return D.31471;
  }
  <D.21806>:
  {
    char * class_name;
    char * member_name;

    class_name = exception_data;
    D.31481 = strlen (class_name);
    D.31482 = D.31481 + 1;
    member_name = class_name + D.31482;
    D.31471 = mono_get_exception_missing_field (class_name, member_name);
    return D.31471;
  }
  <D.21809>:
  {
    char * msg_format;
    char * assembly_name;
    char * msg;
    struct MonoException * ex;

    msg_format = exception_data;
    D.31483 = strlen (msg_format);
    D.31484 = D.31483 + 1;
    assembly_name = msg_format + D.31484;
    msg = monoeg_g_strdup_printf (msg_format, assembly_name);
    D.31485 = mono_domain_get ();
    D.31486 = mono_string_new (D.31485, assembly_name);
    ex = mono_get_exception_file_not_found2 (msg, D.31486);
    monoeg_g_free (msg);
    D.31471 = ex;
    return D.31471;
  }
  <D.21814>:
  D.31471 = mono_get_exception_bad_image_format (exception_data);
  return D.31471;
  <D.21815>:
  {
    struct MonoLoaderError * error;
    struct MonoException * ex;

    error = mono_loader_get_last_error ();
    if (error != 0B) goto <D.31487>; else goto <D.31488>;
    <D.31487>:
    ex = mono_loader_error_prepare_exception (error);
    D.31471 = ex;
    return D.31471;
    <D.31488>:
    D.31471 = 0B;
    return D.31471;
  }
}


mono_class_get_generic_type_definition (struct MonoClass * klass)
{
  struct MonoClass * D.31491;
  struct MonoClass * iftmp.354;
  struct MonoGenericClass * D.31493;

  D.31493 = klass->generic_class;
  if (D.31493 != 0B) goto <D.31494>; else goto <D.31495>;
  <D.31494>:
  D.31493 = klass->generic_class;
  iftmp.354 = D.31493->container_class;
  goto <D.31496>;
  <D.31495>:
  iftmp.354 = klass;
  <D.31496>:
  D.31491 = iftmp.354;
  return D.31491;
}


mono_class_has_parent_and_ignore_generics (struct MonoClass * klass, struct MonoClass * parent)
{
  struct MonoClass * * D.31498;
  long unsigned int D.31499;
  long unsigned int D.31500;
  struct MonoClass * * D.31501;
  struct MonoClass * D.31502;
  struct MonoClass * D.31503;
  gboolean D.31506;
  short unsigned int D.31507;
  int D.31508;
  int i;

  klass = mono_class_get_generic_type_definition (klass);
  parent = mono_class_get_generic_type_definition (parent);
  mono_class_setup_supertypes (klass);
  i = 0;
  goto <D.21833>;
  <D.21832>:
  D.31498 = klass->supertypes;
  D.31499 = (long unsigned int) i;
  D.31500 = D.31499 * 8;
  D.31501 = D.31498 + D.31500;
  D.31502 = *D.31501;
  D.31503 = mono_class_get_generic_type_definition (D.31502);
  if (D.31503 == parent) goto <D.31504>; else goto <D.31505>;
  <D.31504>:
  D.31506 = 1;
  return D.31506;
  <D.31505>:
  i = i + 1;
  <D.21833>:
  D.31507 = klass->idepth;
  D.31508 = (int) D.31507;
  if (D.31508 > i) goto <D.21832>; else goto <D.21834>;
  <D.21834>:
  D.31506 = 0;
  return D.31506;
}


mono_method_can_access_field (struct MonoMethod * method, struct MonoClassField * field)
{
  struct MonoType * D.31510;
  short unsigned int D.31511;
  int D.31512;
  int D.31513;
  struct MonoClass * D.31514;
  struct MonoClass * D.31515;
  struct MonoType * D.31518;
  short unsigned int D.31519;
  int D.31520;
  int D.31521;
  mono_bool D.31524;
  int can;

  D.31510 = mono_field_get_type (field);
  D.31511 = D.31510->attrs;
  D.31512 = (int) D.31511;
  D.31513 = D.31512 & 7;
  D.31514 = field->parent;
  D.31515 = method->klass;
  can = can_access_member (D.31515, D.31514, 0B, D.31513);
  if (can == 0) goto <D.31516>; else goto <D.31517>;
  <D.31516>:
  {
    struct MonoClass * nested;

    D.31515 = method->klass;
    nested = D.31515->nested_in;
    goto <D.21916>;
    <D.21915>:
    D.31518 = mono_field_get_type (field);
    D.31519 = D.31518->attrs;
    D.31520 = (int) D.31519;
    D.31521 = D.31520 & 7;
    D.31514 = field->parent;
    can = can_access_member (nested, D.31514, 0B, D.31521);
    if (can != 0) goto <D.31522>; else goto <D.31523>;
    <D.31522>:
    D.31524 = 1;
    return D.31524;
    <D.31523>:
    nested = nested->nested_in;
    <D.21916>:
    if (nested != 0B) goto <D.21915>; else goto <D.21917>;
    <D.21917>:
  }
  <D.31517>:
  D.31524 = can;
  return D.31524;
}


can_access_member (struct MonoClass * access_klass, struct MonoClass * member_klass, struct MonoClass * context_klass, int access_level)
{
  struct MonoImage * D.31526;
  struct MonoAssembly * D.31527;
  unsigned char D.31530;
  gboolean D.31533;
  struct MonoGenericClass * D.31537;
  struct MonoClass * D.31539;
  struct MonoGenericContainer * D.31540;
  int D.31546;
  struct MonoImage * D.31549;
  _Bool D.31550;
  _Bool D.31551;
  int D.31552;
  struct MonoAssembly * D.31555;
  int D.31556;
  int D.31559;
  int D.31562;
  struct MonoClass * member_generic_def;

  D.31526 = access_klass->image;
  D.31527 = D.31526->assembly;
  if (D.31527 != 0B) goto <D.31528>; else goto <D.31529>;
  <D.31528>:
  D.31526 = access_klass->image;
  D.31527 = D.31526->assembly;
  D.31530 = D.31527->corlib_internal;
  if (D.31530 != 0) goto <D.31531>; else goto <D.31532>;
  <D.31531>:
  D.31533 = 1;
  return D.31533;
  <D.31532>:
  <D.31529>:
  D.31537 = access_klass->generic_class;
  if (D.31537 != 0B) goto <D.31538>; else goto <D.31534>;
  <D.31538>:
  D.31537 = access_klass->generic_class;
  D.31539 = D.31537->container_class;
  if (D.31539 != 0B) goto <D.31535>; else goto <D.31534>;
  <D.31534>:
  D.31540 = access_klass->generic_container;
  if (D.31540 != 0B) goto <D.31535>; else goto <D.31536>;
  <D.31535>:
  member_generic_def = get_generic_definition_class (member_klass);
  if (member_generic_def != 0B) goto <D.31541>; else goto <D.31542>;
  <D.31541>:
  {
    struct MonoClass * access_container;

    D.31540 = access_klass->generic_container;
    if (D.31540 != 0B) goto <D.31543>; else goto <D.31544>;
    <D.31543>:
    access_container = access_klass;
    goto <D.31545>;
    <D.31544>:
    D.31537 = access_klass->generic_class;
    access_container = D.31537->container_class;
    <D.31545>:
    D.31546 = can_access_member (access_container, member_generic_def, context_klass, access_level);
    if (D.31546 != 0) goto <D.31547>; else goto <D.31548>;
    <D.31547>:
    D.31533 = 1;
    return D.31533;
    <D.31548>:
  }
  <D.31542>:
  <D.31536>:
  switch (access_level) <default: <D.31565>, case 0: <D.21902>, case 1: <D.21903>, case 2: <D.21904>, case 3: <D.21905>, case 4: <D.21906>, case 5: <D.21907>, case 6: <D.21908>>
  <D.21902>:
  D.31526 = access_klass->image;
  D.31549 = member_klass->image;
  D.31550 = D.31526 == D.31549;
  D.31533 = (gboolean) D.31550;
  return D.31533;
  <D.21903>:
  D.31551 = access_klass == member_klass;
  D.31533 = (gboolean) D.31551;
  return D.31533;
  <D.21904>:
  D.31552 = is_valid_family_access (access_klass, member_klass, context_klass);
  if (D.31552 != 0) goto <D.31553>; else goto <D.31554>;
  <D.31553>:
  D.31549 = member_klass->image;
  D.31555 = D.31549->assembly;
  D.31526 = access_klass->image;
  D.31527 = D.31526->assembly;
  D.31556 = can_access_internals (D.31527, D.31555);
  if (D.31556 != 0) goto <D.31557>; else goto <D.31558>;
  <D.31557>:
  D.31533 = 1;
  return D.31533;
  <D.31558>:
  <D.31554>:
  D.31533 = 0;
  return D.31533;
  <D.21905>:
  D.31549 = member_klass->image;
  D.31555 = D.31549->assembly;
  D.31526 = access_klass->image;
  D.31527 = D.31526->assembly;
  D.31533 = can_access_internals (D.31527, D.31555);
  return D.31533;
  <D.21906>:
  D.31559 = is_valid_family_access (access_klass, member_klass, context_klass);
  if (D.31559 != 0) goto <D.31560>; else goto <D.31561>;
  <D.31560>:
  D.31533 = 1;
  return D.31533;
  <D.31561>:
  D.31533 = 0;
  return D.31533;
  <D.21907>:
  D.31562 = is_valid_family_access (access_klass, member_klass, context_klass);
  if (D.31562 != 0) goto <D.31563>; else goto <D.31564>;
  <D.31563>:
  D.31533 = 1;
  return D.31533;
  <D.31564>:
  D.31549 = member_klass->image;
  D.31555 = D.31549->assembly;
  D.31526 = access_klass->image;
  D.31527 = D.31526->assembly;
  D.31533 = can_access_internals (D.31527, D.31555);
  return D.31533;
  <D.21908>:
  D.31533 = 1;
  return D.31533;
  <D.31565>:
  D.31533 = 0;
  return D.31533;
}


get_generic_definition_class (struct MonoClass * klass)
{
  struct MonoGenericClass * D.31567;
  struct MonoClass * D.31570;
  struct MonoClass * D.31573;

  goto <D.21863>;
  <D.21862>:
  D.31567 = klass->generic_class;
  if (D.31567 != 0B) goto <D.31568>; else goto <D.31569>;
  <D.31568>:
  D.31567 = klass->generic_class;
  D.31570 = D.31567->container_class;
  if (D.31570 != 0B) goto <D.31571>; else goto <D.31572>;
  <D.31571>:
  D.31567 = klass->generic_class;
  D.31573 = D.31567->container_class;
  return D.31573;
  <D.31572>:
  <D.31569>:
  klass = klass->parent;
  <D.21863>:
  if (klass != 0B) goto <D.21862>; else goto <D.21864>;
  <D.21864>:
  D.31573 = 0B;
  return D.31573;
}


is_valid_family_access (struct MonoClass * access_klass, struct MonoClass * member_klass, struct MonoClass * context_klass)
{
  int D.31575;
  gboolean D.31578;
  int D.31583;

  D.31575 = mono_class_has_parent_and_ignore_generics (access_klass, member_klass);
  if (D.31575 == 0) goto <D.31576>; else goto <D.31577>;
  <D.31576>:
  D.31578 = 0;
  return D.31578;
  <D.31577>:
  if (context_klass == 0B) goto <D.31579>; else goto <D.31580>;
  <D.31579>:
  D.31578 = 1;
  return D.31578;
  <D.31580>:
  if (access_klass != member_klass) goto <D.31581>; else goto <D.31582>;
  <D.31581>:
  D.31583 = mono_class_has_parent_and_ignore_generics (context_klass, access_klass);
  if (D.31583 == 0) goto <D.31584>; else goto <D.31585>;
  <D.31584>:
  D.31578 = 0;
  return D.31578;
  <D.31585>:
  <D.31582>:
  D.31578 = 1;
  return D.31578;
}


can_access_internals (struct MonoAssembly * accessing, struct MonoAssembly * accessed)
{
  gboolean D.31589;
  _Bool D.31590;
  _Bool D.31591;
  _Bool D.31592;
  <unnamed type> D.31595;
  struct MonoImage * D.31598;
  struct MonoImage * D.31599;
  int D.31600;
  const char * D.31603;
  int D.21855;
  const char * D.31606;
  unsigned char D.31609;
  unsigned char D.31612;
  mono_byte[17] * D.31615;
  mono_byte[17] * D.31616;
  int D.31617;
  struct GSList * tmp;

  if (accessing == accessed) goto <D.31587>; else goto <D.31588>;
  <D.31587>:
  D.31589 = 1;
  return D.31589;
  <D.31588>:
  D.31590 = accessed == 0B;
  D.31591 = accessing == 0B;
  D.31592 = D.31590 | D.31591;
  if (D.31592 != 0) goto <D.31593>; else goto <D.31594>;
  <D.31593>:
  D.31589 = 0;
  return D.31589;
  <D.31594>:
  D.31595 = mono_security_get_mode ();
  if (D.31595 == 1) goto <D.31596>; else goto <D.31597>;
  <D.31596>:
  D.31598 = accessed->image;
  D.31599 = accessing->image;
  D.31600 = mono_security_core_clr_can_access_internals (D.31599, D.31598);
  if (D.31600 == 0) goto <D.31601>; else goto <D.31602>;
  <D.31601>:
  D.31589 = 0;
  return D.31589;
  <D.31602>:
  <D.31597>:
  mono_assembly_load_friends (accessed);
  tmp = accessed->friend_assembly_names;
  goto <D.21857>;
  <D.21856>:
  {
    struct MonoAssemblyName * friend;

    friend = tmp->data;
    D.31603 = friend->name;
    if (D.31603 == 0B) goto <D.31604>; else goto <D.31605>;
    <D.31604>:
    // predicted unlikely by continue predictor.
    goto <D.21846>;
    <D.31605>:
    {
      size_t __s1_len;
      size_t __s2_len;

      D.31603 = friend->name;
      D.31606 = accessing->aname.name;
      D.21855 = __builtin_strcmp (D.31606, D.31603);
    }
    if (D.21855 != 0) goto <D.31607>; else goto <D.31608>;
    <D.31607>:
    // predicted unlikely by continue predictor.
    goto <D.21846>;
    <D.31608>:
    D.31609 = friend->public_key_token[0];
    if (D.31609 != 0) goto <D.31610>; else goto <D.31611>;
    <D.31610>:
    D.31612 = accessing->aname.public_key_token[0];
    if (D.31612 == 0) goto <D.31613>; else goto <D.31614>;
    <D.31613>:
    // predicted unlikely by continue predictor.
    goto <D.21846>;
    <D.31614>:
    D.31615 = &accessing->aname.public_key_token;
    D.31616 = &friend->public_key_token;
    D.31617 = mono_public_tokens_are_equal (D.31616, D.31615);
    if (D.31617 == 0) goto <D.31618>; else goto <D.31619>;
    <D.31618>:
    // predicted unlikely by continue predictor.
    goto <D.21846>;
    <D.31619>:
    <D.31611>:
    D.31589 = 1;
    return D.31589;
  }
  <D.21846>:
  tmp = tmp->next;
  <D.21857>:
  if (tmp != 0B) goto <D.21856>; else goto <D.21858>;
  <D.21858>:
  D.31589 = 0;
  return D.31589;
}


mono_method_can_access_method (struct MonoMethod * method, struct MonoMethod * called)
{
  short unsigned int D.31621;
  int D.31622;
  int D.31623;
  struct MonoClass * D.31624;
  struct MonoClass * D.31625;
  mono_bool D.31630;
  unsigned int D.31631;
  unsigned int D.31632;
  int can;

  D.31621 = called->flags;
  D.31622 = (int) D.31621;
  D.31623 = D.31622 & 7;
  D.31624 = called->klass;
  D.31625 = method->klass;
  can = can_access_member (D.31625, D.31624, 0B, D.31623);
  if (can == 0) goto <D.31626>; else goto <D.31627>;
  <D.31626>:
  {
    struct MonoClass * nested;

    D.31625 = method->klass;
    nested = D.31625->nested_in;
    goto <D.21925>;
    <D.21924>:
    D.31621 = called->flags;
    D.31622 = (int) D.31621;
    D.31623 = D.31622 & 7;
    D.31624 = called->klass;
    can = can_access_member (nested, D.31624, 0B, D.31623);
    if (can != 0) goto <D.31628>; else goto <D.31629>;
    <D.31628>:
    D.31630 = 1;
    return D.31630;
    <D.31629>:
    nested = nested->nested_in;
    <D.21925>:
    if (nested != 0B) goto <D.21924>; else goto <D.21926>;
    <D.21926>:
  }
  <D.31627>:
  D.31621 = called->flags;
  D.31631 = (unsigned int) D.31621;
  D.31632 = D.31631 & 96;
  if (D.31632 == 96) goto <D.31633>; else goto <D.31634>;
  <D.31633>:
  D.31630 = 1;
  return D.31630;
  <D.31634>:
  D.31630 = can;
  return D.31630;
}


mono_method_can_access_method_full (struct MonoMethod * method, struct MonoMethod * called, struct MonoClass * context_klass)
{
  short unsigned int D.31636;
  int D.31637;
  int D.31638;
  gboolean D.31644;
  unsigned char D.31650;
  unsigned char D.31651;
  struct MonoGenericInst * D.31654;
  int D.31657;
  struct MonoClass * access_class;
  struct MonoClass * member_class;
  int can;

  access_class = method->klass;
  member_class = called->klass;
  D.31636 = called->flags;
  D.31637 = (int) D.31636;
  D.31638 = D.31637 & 7;
  can = can_access_member (access_class, member_class, context_klass, D.31638);
  if (can == 0) goto <D.31639>; else goto <D.31640>;
  <D.31639>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.21938>;
    <D.21937>:
    D.31636 = called->flags;
    D.31637 = (int) D.31636;
    D.31638 = D.31637 & 7;
    can = can_access_member (nested, member_class, context_klass, D.31638);
    if (can != 0) goto <D.21936>; else goto <D.31641>;
    <D.31641>:
    nested = nested->nested_in;
    <D.21938>:
    if (nested != 0B) goto <D.21937>; else goto <D.21936>;
    <D.21936>:
  }
  <D.31640>:
  if (can == 0) goto <D.31642>; else goto <D.31643>;
  <D.31642>:
  D.31644 = 0;
  return D.31644;
  <D.31643>:
  can = can_access_type (access_class, member_class);
  if (can == 0) goto <D.31645>; else goto <D.31646>;
  <D.31645>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.21942>;
    <D.21941>:
    can = can_access_type (nested, member_class);
    if (can != 0) goto <D.21940>; else goto <D.31647>;
    <D.31647>:
    nested = nested->nested_in;
    <D.21942>:
    if (nested != 0B) goto <D.21941>; else goto <D.21940>;
    <D.21940>:
  }
  <D.31646>:
  if (can == 0) goto <D.31648>; else goto <D.31649>;
  <D.31648>:
  D.31644 = 0;
  return D.31644;
  <D.31649>:
  D.31650 = BIT_FIELD_REF <*called, 8, 264>;
  D.31651 = D.31650 & 16;
  if (D.31651 != 0) goto <D.31652>; else goto <D.31653>;
  <D.31652>:
  {
    struct MonoMethodInflated * infl;

    infl = called;
    D.31654 = infl->context.method_inst;
    if (D.31654 != 0B) goto <D.31655>; else goto <D.31656>;
    <D.31655>:
    D.31654 = infl->context.method_inst;
    D.31657 = can_access_instantiation (access_class, D.31654);
    if (D.31657 == 0) goto <D.31658>; else goto <D.31659>;
    <D.31658>:
    D.31644 = 0;
    return D.31644;
    <D.31659>:
    <D.31656>:
  }
  <D.31653>:
  D.31644 = 1;
  return D.31644;
}


can_access_type (struct MonoClass * access_klass, struct MonoClass * member_klass)
{
  struct MonoImage * D.31661;
  struct MonoAssembly * D.31662;
  unsigned char D.31665;
  gboolean D.31668;
  struct MonoClass * D.31669;
  unsigned char D.31672;
  unsigned char D.31673;
  struct MonoClass * D.31676;
  unsigned char D.31679;
  unsigned char D.31680;
  unsigned int D.31683;
  int D.31684;
  unsigned char D.31685;
  _Bool D.31686;
  _Bool D.31687;
  _Bool D.31688;
  struct MonoGenericClass * D.31691;
  struct MonoGenericInst * D.31694;
  int D.31695;
  int D.31700;
  struct MonoClass * D.31702;
  int D.31704;
  struct MonoClass * D.31705;
  int D.31708;
  unsigned int access_level.355;
  unsigned int D.31712;
  struct MonoImage * D.31717;
  struct MonoAssembly * D.31718;
  int iftmp.356;
  struct MonoImage * D.31722;
  struct MonoAssembly * D.31723;
  int D.31724;
  int D.31726;
  int iftmp.357;
  int D.31732;
  int D.31734;
  int access_level;

  D.31661 = access_klass->image;
  D.31662 = D.31661->assembly;
  if (D.31662 != 0B) goto <D.31663>; else goto <D.31664>;
  <D.31663>:
  D.31661 = access_klass->image;
  D.31662 = D.31661->assembly;
  D.31665 = D.31662->corlib_internal;
  if (D.31665 != 0) goto <D.31666>; else goto <D.31667>;
  <D.31666>:
  D.31668 = 1;
  return D.31668;
  <D.31667>:
  <D.31664>:
  D.31669 = access_klass->element_class;
  if (D.31669 != 0B) goto <D.31670>; else goto <D.31671>;
  <D.31670>:
  D.31672 = BIT_FIELD_REF <*access_klass, 8, 256>;
  D.31673 = D.31672 & 16;
  if (D.31673 == 0) goto <D.31674>; else goto <D.31675>;
  <D.31674>:
  access_klass = access_klass->element_class;
  <D.31675>:
  <D.31671>:
  D.31676 = member_klass->element_class;
  if (D.31676 != 0B) goto <D.31677>; else goto <D.31678>;
  <D.31677>:
  D.31679 = BIT_FIELD_REF <*member_klass, 8, 256>;
  D.31680 = D.31679 & 16;
  if (D.31680 == 0) goto <D.31681>; else goto <D.31682>;
  <D.31681>:
  member_klass = member_klass->element_class;
  <D.31682>:
  <D.31678>:
  D.31683 = member_klass->flags;
  D.31684 = (int) D.31683;
  access_level = D.31684 & 7;
  D.31685 = member_klass->byval_arg.type;
  D.31686 = D.31685 == 19;
  D.31687 = D.31685 == 30;
  D.31688 = D.31686 | D.31687;
  if (D.31688 != 0) goto <D.31689>; else goto <D.31690>;
  <D.31689>:
  D.31668 = 1;
  return D.31668;
  <D.31690>:
  D.31691 = member_klass->generic_class;
  if (D.31691 != 0B) goto <D.31692>; else goto <D.31693>;
  <D.31692>:
  D.31691 = member_klass->generic_class;
  D.31694 = D.31691->context.class_inst;
  D.31695 = can_access_instantiation (access_klass, D.31694);
  if (D.31695 == 0) goto <D.31696>; else goto <D.31697>;
  <D.31696>:
  D.31668 = 0;
  return D.31668;
  <D.31697>:
  <D.31693>:
  D.31700 = is_nesting_type (access_klass, member_klass);
  if (D.31700 != 0) goto <D.31698>; else goto <D.31701>;
  <D.31701>:
  D.31702 = access_klass->nested_in;
  if (D.31702 != 0B) goto <D.31703>; else goto <D.31699>;
  <D.31703>:
  D.31702 = access_klass->nested_in;
  D.31704 = is_nesting_type (D.31702, member_klass);
  if (D.31704 != 0) goto <D.31698>; else goto <D.31699>;
  <D.31698>:
  D.31668 = 1;
  return D.31668;
  <D.31699>:
  D.31705 = member_klass->nested_in;
  if (D.31705 != 0B) goto <D.31706>; else goto <D.31707>;
  <D.31706>:
  D.31705 = member_klass->nested_in;
  D.31708 = can_access_type (access_klass, D.31705);
  if (D.31708 == 0) goto <D.31709>; else goto <D.31710>;
  <D.31709>:
  D.31668 = 0;
  return D.31668;
  <D.31710>:
  <D.31707>:
  access_level.355 = (unsigned int) access_level;
  D.31712 = access_level.355 + 4294967293;
  if (D.31712 <= 4) goto <D.31713>; else goto <D.31714>;
  <D.31713>:
  D.31705 = member_klass->nested_in;
  if (D.31705 == 0B) goto <D.31715>; else goto <D.31716>;
  <D.31715>:
  D.31668 = 0;
  return D.31668;
  <D.31716>:
  <D.31714>:
  switch (access_level) <default: <D.31735>, case 0: <D.21886>, case 1: <D.21887>, case 2: <D.21888>, case 3: <D.21889>, case 4: <D.21890>, case 5: <D.21891>, case 6: <D.21892>, case 7: <D.21893>>
  <D.21886>:
  D.31717 = member_klass->image;
  D.31718 = D.31717->assembly;
  D.31661 = access_klass->image;
  D.31662 = D.31661->assembly;
  D.31668 = can_access_internals (D.31662, D.31718);
  return D.31668;
  <D.21887>:
  D.31668 = 1;
  return D.31668;
  <D.21888>:
  D.31668 = 1;
  return D.31668;
  <D.21889>:
  D.31668 = is_nesting_type (member_klass, access_klass);
  return D.31668;
  <D.21890>:
  D.31705 = member_klass->nested_in;
  D.31668 = mono_class_has_parent_and_ignore_generics (access_klass, D.31705);
  return D.31668;
  <D.21891>:
  D.31717 = member_klass->image;
  D.31718 = D.31717->assembly;
  D.31661 = access_klass->image;
  D.31662 = D.31661->assembly;
  D.31668 = can_access_internals (D.31662, D.31718);
  return D.31668;
  <D.21892>:
  D.31705 = member_klass->nested_in;
  D.31722 = D.31705->image;
  D.31723 = D.31722->assembly;
  D.31661 = access_klass->image;
  D.31662 = D.31661->assembly;
  D.31724 = can_access_internals (D.31662, D.31723);
  if (D.31724 != 0) goto <D.31725>; else goto <D.31720>;
  <D.31725>:
  D.31705 = member_klass->nested_in;
  D.31726 = mono_class_has_parent_and_ignore_generics (access_klass, D.31705);
  if (D.31726 != 0) goto <D.31727>; else goto <D.31720>;
  <D.31727>:
  iftmp.356 = 1;
  goto <D.31721>;
  <D.31720>:
  iftmp.356 = 0;
  <D.31721>:
  D.31668 = iftmp.356;
  return D.31668;
  <D.21893>:
  D.31705 = member_klass->nested_in;
  D.31722 = D.31705->image;
  D.31723 = D.31722->assembly;
  D.31661 = access_klass->image;
  D.31662 = D.31661->assembly;
  D.31732 = can_access_internals (D.31662, D.31723);
  if (D.31732 != 0) goto <D.31729>; else goto <D.31733>;
  <D.31733>:
  D.31705 = member_klass->nested_in;
  D.31734 = mono_class_has_parent_and_ignore_generics (access_klass, D.31705);
  if (D.31734 != 0) goto <D.31729>; else goto <D.31730>;
  <D.31729>:
  iftmp.357 = 1;
  goto <D.31731>;
  <D.31730>:
  iftmp.357 = 0;
  <D.31731>:
  D.31668 = iftmp.357;
  return D.31668;
  <D.31735>:
  D.31668 = 0;
  return D.31668;
}


is_nesting_type (struct MonoClass * outer_klass, struct MonoClass * inner_klass)
{
  gboolean D.31739;

  outer_klass = mono_class_get_generic_type_definition (outer_klass);
  inner_klass = mono_class_get_generic_type_definition (inner_klass);
  <D.21822>:
  if (outer_klass == inner_klass) goto <D.31737>; else goto <D.31738>;
  <D.31737>:
  D.31739 = 1;
  return D.31739;
  <D.31738>:
  inner_klass = inner_klass->nested_in;
  if (inner_klass != 0B) goto <D.21822>; else goto <D.21823>;
  <D.21823>:
  D.31739 = 0;
  return D.31739;
}


can_access_instantiation (struct MonoClass * access_klass, struct MonoGenericInst * ginst)
{
  unsigned char D.31741;
  int D.31742;
  struct MonoClass * D.31743;
  int D.31744;
  gboolean D.31747;
  struct MonoArrayType * D.31748;
  struct MonoClass * D.31749;
  int D.31750;
  struct MonoType * D.31753;
  struct MonoClass * D.31754;
  int D.31755;
  struct MonoClass * D.31758;
  int D.31759;
  <unnamed-unsigned:22> D.31763;
  int D.31764;
  int i;

  i = 0;
  goto <D.21879>;
  <D.21878>:
  {
    struct MonoType * type;

    type = ginst->type_argv[i];
    D.31741 = type->type;
    D.31742 = (int) D.31741;
    switch (D.31742) <default: <D.31762>, case 15: <D.21874>, case 17: <D.21876>, case 18: <D.21875>, case 20: <D.21873>, case 21: <D.21877>, case 29: <D.21871>>
    <D.21871>:
    D.31743 = type->data.klass;
    D.31744 = can_access_type (access_klass, D.31743);
    if (D.31744 == 0) goto <D.31745>; else goto <D.31746>;
    <D.31745>:
    D.31747 = 0;
    return D.31747;
    <D.31746>:
    goto <D.21872>;
    <D.21873>:
    D.31748 = type->data.array;
    D.31749 = D.31748->eklass;
    D.31750 = can_access_type (access_klass, D.31749);
    if (D.31750 == 0) goto <D.31751>; else goto <D.31752>;
    <D.31751>:
    D.31747 = 0;
    return D.31747;
    <D.31752>:
    goto <D.21872>;
    <D.21874>:
    D.31753 = type->data.type;
    D.31754 = mono_class_from_mono_type (D.31753);
    D.31755 = can_access_type (access_klass, D.31754);
    if (D.31755 == 0) goto <D.31756>; else goto <D.31757>;
    <D.31756>:
    D.31747 = 0;
    return D.31747;
    <D.31757>:
    goto <D.21872>;
    <D.21875>:
    <D.21876>:
    <D.21877>:
    D.31758 = mono_class_from_mono_type (type);
    D.31759 = can_access_type (access_klass, D.31758);
    if (D.31759 == 0) goto <D.31760>; else goto <D.31761>;
    <D.31760>:
    D.31747 = 0;
    return D.31747;
    <D.31761>:
    <D.31762>:
    <D.21872>:
  }
  i = i + 1;
  <D.21879>:
  D.31763 = ginst->type_argc;
  D.31764 = (int) D.31763;
  if (D.31764 > i) goto <D.21878>; else goto <D.21880>;
  <D.21880>:
  D.31747 = 1;
  return D.31747;
}


mono_method_can_access_field_full (struct MonoMethod * method, struct MonoClassField * field, struct MonoClass * context_klass)
{
  struct MonoType * D.31766;
  short unsigned int D.31767;
  int D.31768;
  int D.31769;
  gboolean D.31775;
  struct MonoClass * access_class;
  struct MonoClass * member_class;
  int can;

  access_class = method->klass;
  member_class = field->parent;
  D.31766 = field->type;
  D.31767 = D.31766->attrs;
  D.31768 = (int) D.31767;
  D.31769 = D.31768 & 7;
  can = can_access_member (access_class, member_class, context_klass, D.31769);
  if (can == 0) goto <D.31770>; else goto <D.31771>;
  <D.31770>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.21955>;
    <D.21954>:
    D.31766 = field->type;
    D.31767 = D.31766->attrs;
    D.31768 = (int) D.31767;
    D.31769 = D.31768 & 7;
    can = can_access_member (nested, member_class, context_klass, D.31769);
    if (can != 0) goto <D.21953>; else goto <D.31772>;
    <D.31772>:
    nested = nested->nested_in;
    <D.21955>:
    if (nested != 0B) goto <D.21954>; else goto <D.21953>;
    <D.21953>:
  }
  <D.31771>:
  if (can == 0) goto <D.31773>; else goto <D.31774>;
  <D.31773>:
  D.31775 = 0;
  return D.31775;
  <D.31774>:
  can = can_access_type (access_class, member_class);
  if (can == 0) goto <D.31776>; else goto <D.31777>;
  <D.31776>:
  {
    struct MonoClass * nested;

    nested = access_class->nested_in;
    goto <D.21959>;
    <D.21958>:
    can = can_access_type (nested, member_class);
    if (can != 0) goto <D.21957>; else goto <D.31778>;
    <D.31778>:
    nested = nested->nested_in;
    <D.21959>:
    if (nested != 0B) goto <D.21958>; else goto <D.21957>;
    <D.21957>:
  }
  <D.31777>:
  if (can == 0) goto <D.31779>; else goto <D.31780>;
  <D.31779>:
  D.31775 = 0;
  return D.31775;
  <D.31780>:
  D.31775 = 1;
  return D.31775;
}


mono_class_can_access_class (struct MonoClass * source_class, struct MonoClass * target_class)
{
  gboolean D.31782;

  D.31782 = can_access_type (source_class, target_class);
  return D.31782;
}


mono_type_is_valid_enum_basetype (struct MonoType * type)
{
  unsigned char D.31784;
  int D.31785;
  gboolean D.31786;

  D.31784 = type->type;
  D.31785 = (int) D.31784;
  switch (D.31785) <default: <D.31787>, case 2: <D.21969>, case 3: <D.21972>, case 4: <D.21967>, case 5: <D.21968>, case 6: <D.21970>, case 7: <D.21971>, case 8: <D.21973>, case 9: <D.21974>, case 10: <D.21975>, case 11: <D.21976>, case 24: <D.21977>, case 25: <D.21978>>
  <D.21967>:
  <D.21968>:
  <D.21969>:
  <D.21970>:
  <D.21971>:
  <D.21972>:
  <D.21973>:
  <D.21974>:
  <D.21975>:
  <D.21976>:
  <D.21977>:
  <D.21978>:
  D.31786 = 1;
  return D.31786;
  <D.31787>:
  D.31786 = 0;
  return D.31786;
}


mono_class_is_valid_enum (struct MonoClass * klass)
{
  unsigned char D.31789;
  unsigned char D.31790;
  _Bool D.31791;
  long int D.31792;
  long int D.31793;
  struct MonoClass * D.31798;
  int D.21993;
  int iftmp.358;
  int D.21992;
  const char[5] * D.31803;
  unsigned char D.31804;
  int D.31805;
  unsigned char D.31806;
  int D.31807;
  _Bool D.31808;
  _Bool D.31809;
  _Bool D.31810;
  const unsigned char * D.31813;
  unsigned char D.31814;
  int D.31815;
  const unsigned char * D.31816;
  unsigned char D.31817;
  int D.31818;
  _Bool D.31819;
  _Bool D.31820;
  const unsigned char * D.31823;
  unsigned char D.31824;
  int D.31825;
  const unsigned char * D.31826;
  unsigned char D.31827;
  int D.31828;
  _Bool D.31829;
  _Bool D.31830;
  const unsigned char * D.31833;
  unsigned char D.31834;
  int D.31835;
  const unsigned char * D.31836;
  unsigned char D.31837;
  int D.31838;
  const char * D.31840;
  int D.22002;
  int iftmp.359;
  int D.22001;
  const char[7] * D.31845;
  unsigned char D.31846;
  int D.31847;
  unsigned char D.31848;
  int D.31849;
  _Bool D.31850;
  _Bool D.31851;
  _Bool D.31852;
  const unsigned char * D.31855;
  unsigned char D.31856;
  int D.31857;
  const unsigned char * D.31858;
  unsigned char D.31859;
  int D.31860;
  _Bool D.31861;
  _Bool D.31862;
  const unsigned char * D.31865;
  unsigned char D.31866;
  int D.31867;
  const unsigned char * D.31868;
  unsigned char D.31869;
  int D.31870;
  _Bool D.31871;
  _Bool D.31872;
  const unsigned char * D.31875;
  unsigned char D.31876;
  int D.31877;
  const unsigned char * D.31878;
  unsigned char D.31879;
  int D.31880;
  const char * D.31882;
  gboolean D.31883;
  unsigned int D.31884;
  unsigned int D.31885;
  struct MonoType * D.31888;
  short unsigned int D.31889;
  int D.31890;
  int D.31891;
  int D.31896;
  unsigned int D.31901;
  struct MonoClassField * field;
  void * iter;
  gboolean found_base_field;

  try
    {
      iter = 0B;
      found_base_field = 0;
      D.31789 = BIT_FIELD_REF <*klass, 8, 256>;
      D.31790 = D.31789 & 16;
      D.31791 = D.31790 == 0;
      D.31792 = (long int) D.31791;
      D.31793 = __builtin_expect (D.31792, 0);
      if (D.31793 != 0) goto <D.31794>; else goto <D.31795>;
      <D.31794>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "class.c", 9963, "klass->enumtype");
      <D.31795>:
      D.31798 = klass->parent;
      if (D.31798 == 0B) goto <D.31796>; else goto <D.31799>;
      <D.31799>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.31798 = klass->parent;
          __s2 = D.31798->name;
          D.31803 = "Enum";
          D.31804 = MEM[(const unsigned char *)D.31803];
          D.31805 = (int) D.31804;
          D.31806 = *__s2;
          D.31807 = (int) D.31806;
          __result = D.31805 - D.31807;
          {
            D.31808 = __s2_len != 0;
            D.31809 = __result == 0;
            D.31810 = D.31808 & D.31809;
            if (D.31810 != 0) goto <D.31811>; else goto <D.31812>;
            <D.31811>:
            D.31813 = &MEM[(void *)"Enum" + 1B];
            D.31814 = *D.31813;
            D.31815 = (int) D.31814;
            D.31816 = __s2 + 1;
            D.31817 = *D.31816;
            D.31818 = (int) D.31817;
            __result = D.31815 - D.31818;
            D.31819 = __s2_len > 1;
            D.31809 = __result == 0;
            D.31820 = D.31819 & D.31809;
            if (D.31820 != 0) goto <D.31821>; else goto <D.31822>;
            <D.31821>:
            D.31823 = &MEM[(void *)"Enum" + 2B];
            D.31824 = *D.31823;
            D.31825 = (int) D.31824;
            D.31826 = __s2 + 2;
            D.31827 = *D.31826;
            D.31828 = (int) D.31827;
            __result = D.31825 - D.31828;
            D.31829 = __s2_len > 2;
            D.31809 = __result == 0;
            D.31830 = D.31829 & D.31809;
            if (D.31830 != 0) goto <D.31831>; else goto <D.31832>;
            <D.31831>:
            D.31833 = &MEM[(void *)"Enum" + 3B];
            D.31834 = *D.31833;
            D.31835 = (int) D.31834;
            D.31836 = __s2 + 3;
            D.31837 = *D.31836;
            D.31838 = (int) D.31837;
            __result = D.31835 - D.31838;
            <D.31832>:
            <D.31822>:
            <D.31812>:
          }
          D.21992 = __result;
        }
        iftmp.358 = -D.21992;
        goto <D.31839>;
        <D.31802>:
        D.31798 = klass->parent;
        D.31840 = D.31798->name;
        iftmp.358 = __builtin_strcmp (D.31840, "Enum");
        <D.31839>:
        D.21993 = iftmp.358;
      }
      if (D.21993 != 0) goto <D.31796>; else goto <D.31841>;
      <D.31841>:
      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.31798 = klass->parent;
          __s2 = D.31798->name_space;
          D.31845 = "System";
          D.31846 = MEM[(const unsigned char *)D.31845];
          D.31847 = (int) D.31846;
          D.31848 = *__s2;
          D.31849 = (int) D.31848;
          __result = D.31847 - D.31849;
          {
            D.31850 = __s2_len != 0;
            D.31851 = __result == 0;
            D.31852 = D.31850 & D.31851;
            if (D.31852 != 0) goto <D.31853>; else goto <D.31854>;
            <D.31853>:
            D.31855 = &MEM[(void *)"System" + 1B];
            D.31856 = *D.31855;
            D.31857 = (int) D.31856;
            D.31858 = __s2 + 1;
            D.31859 = *D.31858;
            D.31860 = (int) D.31859;
            __result = D.31857 - D.31860;
            D.31861 = __s2_len > 1;
            D.31851 = __result == 0;
            D.31862 = D.31861 & D.31851;
            if (D.31862 != 0) goto <D.31863>; else goto <D.31864>;
            <D.31863>:
            D.31865 = &MEM[(void *)"System" + 2B];
            D.31866 = *D.31865;
            D.31867 = (int) D.31866;
            D.31868 = __s2 + 2;
            D.31869 = *D.31868;
            D.31870 = (int) D.31869;
            __result = D.31867 - D.31870;
            D.31871 = __s2_len > 2;
            D.31851 = __result == 0;
            D.31872 = D.31871 & D.31851;
            if (D.31872 != 0) goto <D.31873>; else goto <D.31874>;
            <D.31873>:
            D.31875 = &MEM[(void *)"System" + 3B];
            D.31876 = *D.31875;
            D.31877 = (int) D.31876;
            D.31878 = __s2 + 3;
            D.31879 = *D.31878;
            D.31880 = (int) D.31879;
            __result = D.31877 - D.31880;
            <D.31874>:
            <D.31864>:
            <D.31854>:
          }
          D.22001 = __result;
        }
        iftmp.359 = -D.22001;
        goto <D.31881>;
        <D.31844>:
        D.31798 = klass->parent;
        D.31882 = D.31798->name_space;
        iftmp.359 = __builtin_strcmp (D.31882, "System");
        <D.31881>:
        D.22002 = iftmp.359;
      }
      if (D.22002 != 0) goto <D.31796>; else goto <D.31797>;
      <D.31796>:
      D.31883 = 0;
      return D.31883;
      <D.31797>:
      D.31884 = klass->flags;
      D.31885 = D.31884 & 24;
      if (D.31885 != 0) goto <D.31886>; else goto <D.31887>;
      <D.31886>:
      D.31883 = 0;
      return D.31883;
      <D.31887>:
      goto <D.22004>;
      <D.22003>:
      D.31888 = field->type;
      D.31889 = D.31888->attrs;
      D.31890 = (int) D.31889;
      D.31891 = D.31890 & 16;
      if (D.31891 == 0) goto <D.31892>; else goto <D.31893>;
      <D.31892>:
      if (found_base_field != 0) goto <D.31894>; else goto <D.31895>;
      <D.31894>:
      D.31883 = 0;
      return D.31883;
      <D.31895>:
      found_base_field = 1;
      D.31888 = field->type;
      D.31896 = mono_type_is_valid_enum_basetype (D.31888);
      if (D.31896 == 0) goto <D.31897>; else goto <D.31898>;
      <D.31897>:
      D.31883 = 0;
      return D.31883;
      <D.31898>:
      <D.31893>:
      <D.22004>:
      field = mono_class_get_fields (klass, &iter);
      if (field != 0B) goto <D.22003>; else goto <D.22005>;
      <D.22005>:
      if (found_base_field == 0) goto <D.31899>; else goto <D.31900>;
      <D.31899>:
      D.31883 = 0;
      return D.31883;
      <D.31900>:
      D.31901 = klass->method.count;
      if (D.31901 != 0) goto <D.31902>; else goto <D.31903>;
      <D.31902>:
      D.31883 = 0;
      return D.31883;
      <D.31903>:
      D.31883 = 1;
      return D.31883;
    }
  finally
    {
      iter = {CLOBBER};
    }
}


mono_generic_class_is_generic_type_definition (struct MonoGenericClass * gklass)
{
  gboolean D.31906;
  struct MonoGenericInst * D.31907;
  struct MonoClass * D.31908;
  struct MonoGenericContainer * D.31909;
  struct MonoGenericInst * D.31910;
  _Bool D.31911;

  D.31907 = gklass->context.class_inst;
  D.31908 = gklass->container_class;
  D.31909 = D.31908->generic_container;
  D.31910 = D.31909->context.class_inst;
  D.31911 = D.31907 == D.31910;
  D.31906 = (gboolean) D.31911;
  return D.31906;
}


mono_class_setup_interface_id (struct MonoClass * class)
{
  unsigned int D.31915;
  unsigned int D.31916;
  unsigned char D.31918;
  short unsigned int D.31920;
  unsigned int D.31923;
  short unsigned int D.31924;

  mono_loader_lock ();
  D.31915 = class->flags;
  D.31916 = D.31915 & 32;
  if (D.31916 != 0) goto <D.31913>; else goto <D.31917>;
  <D.31917>:
  D.31918 = class->byval_arg.type;
  if (D.31918 == 19) goto <D.31913>; else goto <D.31919>;
  <D.31919>:
  D.31918 = class->byval_arg.type;
  if (D.31918 == 30) goto <D.31913>; else goto <D.31914>;
  <D.31913>:
  D.31920 = class->interface_id;
  if (D.31920 == 0) goto <D.31921>; else goto <D.31922>;
  <D.31921>:
  D.31923 = mono_get_unique_iid (class);
  D.31924 = (short unsigned int) D.31923;
  class->interface_id = D.31924;
  <D.31922>:
  <D.31914>:
  mono_loader_unlock ();
}


mono_class_alloc_ext (struct MonoClass * klass)
{
  struct MonoClassExt * D.31925;
  void * D.31928;
  unsigned int class_ext_size.360;
  unsigned int class_ext_size.361;

  D.31925 = klass->ext;
  if (D.31925 == 0B) goto <D.31926>; else goto <D.31927>;
  <D.31926>:
  D.31928 = mono_class_alloc0 (klass, 64);
  klass->ext = D.31928;
  class_ext_size.360 = class_ext_size;
  class_ext_size.361 = class_ext_size.360 + 64;
  class_ext_size = class_ext_size.361;
  <D.31927>:
}


mono_class_setup_interfaces (struct MonoClass * klass, struct MonoError * error)
{
  unsigned char D.31931;
  unsigned char D.31932;
  unsigned char D.31939;
  unsigned char D.31941;
  guint16 iftmp.362;
  struct MonoClass * D.31944;
  short unsigned int D.31948;
  unsigned int D.31949;
  unsigned int D.31950;
  struct MonoImage * D.31951;
  void * D.31952;
  struct MonoClass * D.31953;
  struct MonoType * D.31954;
  struct MonoClass * * D.31955;
  struct MonoClass * D.31956;
  struct MonoClass * D.31957;
  struct MonoClass * * D.31960;
  struct MonoClass * D.31961;
  struct MonoGenericClass * D.31962;
  short unsigned int D.31965;
  unsigned int D.31966;
  unsigned int D.31967;
  int D.31968;
  void * D.31969;
  long unsigned int D.31970;
  long unsigned int D.31971;
  struct MonoClass * * D.31972;
  struct MonoGenericContext * D.31973;
  struct MonoClass * * D.31974;
  struct MonoClass * * D.31975;
  struct MonoClass * D.31976;
  struct MonoClass * D.31977;
  int D.31978;
  gchar * D.31981;
  int D.31982;
  int i;

  mono_error_init (error);
  D.31931 = BIT_FIELD_REF <*klass, 8, 288>;
  D.31932 = D.31931 & 1;
  if (D.31932 != 0) goto <D.31933>; else goto <D.31934>;
  <D.31933>:
  return;
  <D.31934>:
  mono_loader_lock ();
  D.31931 = BIT_FIELD_REF <*klass, 8, 288>;
  D.31932 = D.31931 & 1;
  if (D.31932 != 0) goto <D.31935>; else goto <D.31936>;
  <D.31935>:
  mono_loader_unlock ();
  return;
  <D.31936>:
  D.31939 = klass->rank;
  if (D.31939 == 1) goto <D.31940>; else goto <D.31937>;
  <D.31940>:
  D.31941 = klass->byval_arg.type;
  if (D.31941 != 20) goto <D.31942>; else goto <D.31937>;
  <D.31942>:
  {
    struct MonoType * args[1];

    try
      {
        D.31944 = mono_defaults.generic_ireadonlylist_class;
        if (D.31944 != 0B) goto <D.31945>; else goto <D.31946>;
        <D.31945>:
        iftmp.362 = 2;
        goto <D.31947>;
        <D.31946>:
        iftmp.362 = 1;
        <D.31947>:
        klass->interface_count = iftmp.362;
        D.31948 = klass->interface_count;
        D.31949 = (unsigned int) D.31948;
        D.31950 = D.31949 * 8;
        D.31951 = klass->image;
        D.31952 = mono_image_alloc0 (D.31951, D.31950);
        klass->interfaces = D.31952;
        D.31953 = klass->element_class;
        D.31954 = &D.31953->byval_arg;
        args[0] = D.31954;
        D.31955 = klass->interfaces;
        D.31956 = mono_defaults.generic_ilist_class;
        D.31957 = mono_class_bind_generic_parameters (D.31956, 1, &args, 0);
        *D.31955 = D.31957;
        D.31948 = klass->interface_count;
        if (D.31948 > 1) goto <D.31958>; else goto <D.31959>;
        <D.31958>:
        D.31955 = klass->interfaces;
        D.31960 = D.31955 + 8;
        D.31944 = mono_defaults.generic_ireadonlylist_class;
        D.31961 = mono_class_bind_generic_parameters (D.31944, 1, &args, 0);
        *D.31960 = D.31961;
        <D.31959>:
      }
    finally
      {
        args = {CLOBBER};
      }
  }
  goto <D.31938>;
  <D.31937>:
  D.31962 = klass->generic_class;
  if (D.31962 != 0B) goto <D.31963>; else goto <D.31964>;
  <D.31963>:
  {
    struct MonoClass * gklass;

    D.31962 = klass->generic_class;
    gklass = D.31962->container_class;
    D.31965 = gklass->interface_count;
    klass->interface_count = D.31965;
    D.31948 = klass->interface_count;
    D.31966 = (unsigned int) D.31948;
    D.31967 = D.31966 * 8;
    D.31968 = (int) D.31967;
    D.31969 = mono_class_alloc0 (klass, D.31968);
    klass->interfaces = D.31969;
    i = 0;
    goto <D.22023>;
    <D.22022>:
    D.31955 = klass->interfaces;
    D.31970 = (long unsigned int) i;
    D.31971 = D.31970 * 8;
    D.31972 = D.31955 + D.31971;
    D.31962 = klass->generic_class;
    D.31973 = mono_generic_class_get_context (D.31962);
    D.31974 = gklass->interfaces;
    D.31970 = (long unsigned int) i;
    D.31971 = D.31970 * 8;
    D.31975 = D.31974 + D.31971;
    D.31976 = *D.31975;
    D.31977 = mono_class_inflate_generic_class_checked (D.31976, D.31973, error);
    *D.31972 = D.31977;
    D.31978 = mono_error_ok (error);
    if (D.31978 == 0) goto <D.31979>; else goto <D.31980>;
    <D.31979>:
    D.31981 = monoeg_strdup ("Could not setup the interfaces");
    mono_class_set_failure (klass, 7, D.31981);
    klass->interfaces = 0B;
    return;
    <D.31980>:
    i = i + 1;
    <D.22023>:
    D.31948 = klass->interface_count;
    D.31982 = (int) D.31948;
    if (D.31982 > i) goto <D.22022>; else goto <D.22024>;
    <D.22024>:
  }
  <D.31964>:
  <D.31938>:
  mono_memory_barrier ();
  klass->interfaces_inited = 1;
  mono_loader_unlock ();
}


mono_class_get_fields_lazy (struct MonoClass * klass, void * * iter)
{
  struct MonoClassField * D.31986;
  void * D.31987;
  struct MonoClassField * D.31990;
  unsigned int D.31993;
  long unsigned int D.31996;
  long unsigned int D.31997;
  struct MonoClassField * D.31998;
  struct MonoClassField * field;

  if (iter == 0B) goto <D.31984>; else goto <D.31985>;
  <D.31984>:
  D.31986 = 0B;
  return D.31986;
  <D.31985>:
  D.31987 = *iter;
  if (D.31987 == 0B) goto <D.31988>; else goto <D.31989>;
  <D.31988>:
  mono_class_setup_basic_field_info_locking (klass);
  D.31990 = klass->fields;
  if (D.31990 == 0B) goto <D.31991>; else goto <D.31992>;
  <D.31991>:
  D.31986 = 0B;
  return D.31986;
  <D.31992>:
  D.31993 = klass->field.count;
  if (D.31993 != 0) goto <D.31994>; else goto <D.31995>;
  <D.31994>:
  D.31990 = klass->fields;
  *iter = D.31990;
  D.31986 = *iter;
  return D.31986;
  <D.31995>:
  D.31986 = 0B;
  return D.31986;
  <D.31989>:
  field = *iter;
  field = field + 32;
  D.31990 = klass->fields;
  D.31993 = klass->field.count;
  D.31996 = (long unsigned int) D.31993;
  D.31997 = D.31996 * 32;
  D.31998 = D.31990 + D.31997;
  if (D.31998 > field) goto <D.31999>; else goto <D.32000>;
  <D.31999>:
  *iter = field;
  D.31986 = *iter;
  return D.31986;
  <D.32000>:
  D.31986 = 0B;
  return D.31986;
}


mono_class_setup_basic_field_info_locking (struct MonoClass * class)
{
  mono_loader_lock ();
  mono_class_setup_basic_field_info (class);
  mono_loader_unlock ();
}


mono_class_full_name (struct MonoClass * klass)
{
  char * D.32002;
  struct MonoType * D.32003;

  D.32003 = &klass->byval_arg;
  D.32002 = mono_type_full_name (D.32003);
  return D.32002;
}


