__attribute__((visibility ("hidden")))
mono_verifier_verify_pe_data (struct MonoImage * image, struct GSList * * error_list)
{
  int D.19667;
  gboolean D.19670;
  _Bool D.19671;
  int D.19672;
  int D.19673;
  struct VerifyContext ctx;
  void cleanup = <<< error >>>;

  try
    {
      D.19667 = mono_verifier_is_enabled_for_image (image);
      if (D.19667 == 0) goto <D.19668>; else goto <D.19669>;
      <D.19668>:
      D.19670 = 1;
      return D.19670;
      <D.19669>:
      D.19671 = error_list != 0B;
      D.19672 = (int) D.19671;
      init_verify_context (&ctx, image, D.19672);
      ctx.stage = 0;
      verify_msdos_header (&ctx);
      D.19673 = ctx.valid;
      if (D.19673 == 0) goto cleanup; else goto <D.19674>;
      <D.19674>:
      verify_pe_header (&ctx);
      D.19673 = ctx.valid;
      if (D.19673 == 0) goto cleanup; else goto <D.19675>;
      <D.19675>:
      verify_pe_optional_header (&ctx);
      D.19673 = ctx.valid;
      if (D.19673 == 0) goto cleanup; else goto <D.19676>;
      <D.19676>:
      load_section_table (&ctx);
      D.19673 = ctx.valid;
      if (D.19673 == 0) goto cleanup; else goto <D.19677>;
      <D.19677>:
      load_data_directories (&ctx);
      D.19673 = ctx.valid;
      if (D.19673 == 0) goto cleanup; else goto <D.19678>;
      <D.19678>:
      verify_import_table (&ctx);
      D.19673 = ctx.valid;
      if (D.19673 == 0) goto cleanup; else goto <D.19679>;
      <D.19679>:
      verify_resources_table (&ctx);
      cleanup:
      D.19670 = cleanup_context (&ctx, error_list);
      return D.19670;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


init_verify_context (struct VerifyContext * ctx, struct MonoImage * image, gboolean report_error)
{
  unsigned int D.19682;
  char * D.19683;

  memset (ctx, 0, 296);
  ctx->image = image;
  ctx->report_error = report_error;
  ctx->report_warning = 0;
  ctx->valid = 1;
  D.19682 = image->raw_data_len;
  ctx->size = D.19682;
  D.19683 = image->raw_data;
  ctx->data = D.19683;
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memset (void * __dest, int __ch, size_t __len)
{
  void * D.19684;
  long unsigned int D.19685;

  D.19685 = __builtin_object_size (__dest, 0);
  D.19684 = __builtin___memset_chk (__dest, __ch, __len, D.19685);
  return D.19684;
}


verify_msdos_header (struct VerifyContext * ctx)
{
  unsigned int D.19687;
  int D.19690;
  gchar * D.19693;
  struct GSList * D.19694;
  struct GSList * D.19695;
  const char * D.19698;
  char D.19699;
  const char * D.19701;
  char D.19702;
  gchar * D.19705;
  struct GSList * D.19706;
  unsigned int D.19707;
  gchar * D.19712;
  struct GSList * D.19713;
  guint32 lfanew;

  D.19687 = ctx->size;
  if (D.19687 <= 127) goto <D.19688>; else goto <D.19689>;
  <D.19688>:
  D.19690 = ctx->report_error;
  if (D.19690 != 0) goto <D.19691>; else goto <D.19692>;
  <D.19691>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19693 = monoeg_strdup ("Not enough space for the MS-DOS header");
    vinfo->info.message = D.19693;
    vinfo->exception_type = 3;
    D.19694 = ctx->errors;
    D.19695 = monoeg_g_slist_prepend (D.19694, vinfo);
    ctx->errors = D.19695;
  }
  <D.19692>:
  ctx->valid = 0;
  return;
  <D.19689>:
  D.19698 = ctx->data;
  D.19699 = *D.19698;
  if (D.19699 != 77) goto <D.19696>; else goto <D.19700>;
  <D.19700>:
  D.19698 = ctx->data;
  D.19701 = D.19698 + 1;
  D.19702 = *D.19701;
  if (D.19702 != 90) goto <D.19696>; else goto <D.19697>;
  <D.19696>:
  D.19690 = ctx->report_error;
  if (D.19690 != 0) goto <D.19703>; else goto <D.19704>;
  <D.19703>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19705 = monoeg_strdup ("Invalid MS-DOS watermark");
    vinfo->info.message = D.19705;
    vinfo->exception_type = 3;
    D.19694 = ctx->errors;
    D.19706 = monoeg_g_slist_prepend (D.19694, vinfo);
    ctx->errors = D.19706;
  }
  <D.19704>:
  ctx->valid = 0;
  return;
  <D.19697>:
  lfanew = pe_signature_offset (ctx);
  D.19687 = ctx->size;
  D.19707 = D.19687 + 4294967292;
  if (D.19707 < lfanew) goto <D.19708>; else goto <D.19709>;
  <D.19708>:
  D.19690 = ctx->report_error;
  if (D.19690 != 0) goto <D.19710>; else goto <D.19711>;
  <D.19710>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19712 = monoeg_strdup ("MS-DOS lfanew offset points to outside of the file");
    vinfo->info.message = D.19712;
    vinfo->exception_type = 3;
    D.19694 = ctx->errors;
    D.19713 = monoeg_g_slist_prepend (D.19694, vinfo);
    ctx->errors = D.19713;
  }
  <D.19711>:
  ctx->valid = 0;
  return;
  <D.19709>:
}


pe_signature_offset (struct VerifyContext * ctx)
{
  guint32 D.19715;
  const char * D.19716;
  const char * D.19717;
  unsigned int D.19718;
  unsigned int D.19719;
  unsigned int D.19720;
  unsigned int D.19721;
  unsigned int D.19722;
  unsigned int D.19723;
  unsigned int D.19724;
  unsigned int D.19725;
  unsigned int D.19726;

  D.19716 = ctx->data;
  D.19717 = D.19716 + 60;
  D.19718 = MEM[(const guint32 *)D.19717];
  D.19719 = D.19718 << 24;
  D.19716 = ctx->data;
  D.19717 = D.19716 + 60;
  D.19718 = MEM[(const guint32 *)D.19717];
  D.19720 = D.19718 >> 8;
  D.19721 = D.19720 & 65280;
  D.19722 = D.19719 | D.19721;
  D.19716 = ctx->data;
  D.19717 = D.19716 + 60;
  D.19718 = MEM[(const guint32 *)D.19717];
  D.19723 = D.19718 << 8;
  D.19724 = D.19723 & 16711680;
  D.19725 = D.19722 | D.19724;
  D.19716 = ctx->data;
  D.19717 = D.19716 + 60;
  D.19718 = MEM[(const guint32 *)D.19717];
  D.19726 = D.19718 >> 24;
  D.19715 = D.19725 | D.19726;
  return D.19715;
}


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

  if (str != 0B) goto <D.19728>; else goto <D.19729>;
  <D.19728>:
  D.19730 = __strdup (str);
  return D.19730;
  <D.19729>:
  D.19730 = 0B;
  return D.19730;
}


verify_pe_header (struct VerifyContext * ctx)
{
  const char * D.19732;
  sizetype D.19733;
  char D.19736;
  const char * D.19738;
  char D.19739;
  const char * D.19741;
  char D.19742;
  const char * D.19744;
  char D.19745;
  int D.19746;
  gchar * D.19749;
  struct GSList * D.19750;
  struct GSList * D.19751;
  unsigned int D.19752;
  unsigned int D.19753;
  gchar * D.19758;
  struct GSList * D.19759;
  short unsigned int D.19760;
  short unsigned int D.19761;
  int D.19762;
  int D.19763;
  int D.19764;
  int D.19765;
  int D.19766;
  gchar * D.19771;
  struct GSList * D.19772;
  guint32 offset;
  const char * pe_header;

  offset = pe_signature_offset (ctx);
  D.19732 = ctx->data;
  D.19733 = (sizetype) offset;
  pe_header = D.19732 + D.19733;
  D.19736 = *pe_header;
  if (D.19736 != 80) goto <D.19734>; else goto <D.19737>;
  <D.19737>:
  D.19738 = pe_header + 1;
  D.19739 = *D.19738;
  if (D.19739 != 69) goto <D.19734>; else goto <D.19740>;
  <D.19740>:
  D.19741 = pe_header + 2;
  D.19742 = *D.19741;
  if (D.19742 != 0) goto <D.19734>; else goto <D.19743>;
  <D.19743>:
  D.19744 = pe_header + 3;
  D.19745 = *D.19744;
  if (D.19745 != 0) goto <D.19734>; else goto <D.19735>;
  <D.19734>:
  D.19746 = ctx->report_error;
  if (D.19746 != 0) goto <D.19747>; else goto <D.19748>;
  <D.19747>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19749 = monoeg_strdup ("Invalid PE header watermark");
    vinfo->info.message = D.19749;
    vinfo->exception_type = 3;
    D.19750 = ctx->errors;
    D.19751 = monoeg_g_slist_prepend (D.19750, vinfo);
    ctx->errors = D.19751;
  }
  <D.19748>:
  ctx->valid = 0;
  return;
  <D.19735>:
  pe_header = pe_header + 4;
  offset = offset + 4;
  D.19752 = ctx->size;
  D.19753 = D.19752 + 4294967276;
  if (D.19753 < offset) goto <D.19754>; else goto <D.19755>;
  <D.19754>:
  D.19746 = ctx->report_error;
  if (D.19746 != 0) goto <D.19756>; else goto <D.19757>;
  <D.19756>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19758 = monoeg_strdup ("File with truncated pe header");
    vinfo->info.message = D.19758;
    vinfo->exception_type = 3;
    D.19750 = ctx->errors;
    D.19759 = monoeg_g_slist_prepend (D.19750, vinfo);
    ctx->errors = D.19759;
  }
  <D.19757>:
  ctx->valid = 0;
  return;
  <D.19755>:
  D.19760 = MEM[(const guint16 *)pe_header];
  D.19761 = D.19760 >> 8;
  D.19762 = (int) D.19761;
  D.19760 = MEM[(const guint16 *)pe_header];
  D.19763 = (int) D.19760;
  D.19764 = D.19763 << 8;
  D.19765 = D.19764 & 65535;
  D.19766 = D.19762 | D.19765;
  if (D.19766 != 332) goto <D.19767>; else goto <D.19768>;
  <D.19767>:
  D.19746 = ctx->report_error;
  if (D.19746 != 0) goto <D.19769>; else goto <D.19770>;
  <D.19769>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19771 = monoeg_strdup ("Invalid PE header Machine value");
    vinfo->info.message = D.19771;
    vinfo->exception_type = 3;
    D.19750 = ctx->errors;
    D.19772 = monoeg_g_slist_prepend (D.19750, vinfo);
    ctx->errors = D.19772;
  }
  <D.19770>:
  ctx->valid = 0;
  return;
  <D.19768>:
}


verify_pe_optional_header (struct VerifyContext * ctx)
{
  const char * D.19774;
  sizetype D.19775;
  const char * D.19776;
  short unsigned int D.19777;
  short unsigned int D.19778;
  int D.19779;
  int D.19780;
  int D.19781;
  int D.19782;
  int D.19783;
  int D.19786;
  gchar * D.19789;
  struct GSList * D.19790;
  struct GSList * D.19791;
  unsigned int D.19794;
  unsigned int D.19795;
  gchar * D.19799;
  struct GSList * D.19800;
  short unsigned int D.19801;
  short unsigned int D.19802;
  int D.19803;
  int D.19804;
  int D.19805;
  int D.19806;
  int D.19807;
  gchar * D.19814;
  struct GSList * D.19815;
  const char * D.19816;
  unsigned int D.19817;
  unsigned int D.19818;
  unsigned int D.19819;
  unsigned int D.19820;
  unsigned int D.19821;
  unsigned int D.19822;
  unsigned int D.19823;
  unsigned int D.19824;
  unsigned int D.19825;
  unsigned int D.19826;
  gchar * D.19831;
  struct GSList * D.19832;
  const char * D.19833;
  unsigned int D.19834;
  unsigned int D.19835;
  unsigned int D.19836;
  unsigned int D.19837;
  unsigned int D.19838;
  unsigned int D.19839;
  unsigned int D.19840;
  unsigned int D.19841;
  unsigned int D.19842;
  gchar * D.19849;
  struct GSList * D.19850;
  const char * D.19851;
  unsigned int D.19852;
  unsigned int D.19853;
  unsigned int D.19854;
  unsigned int D.19855;
  unsigned int D.19856;
  unsigned int D.19857;
  unsigned int D.19858;
  unsigned int D.19859;
  unsigned int D.19860;
  unsigned int D.19861;
  gchar * D.19866;
  struct GSList * D.19867;
  gchar * D.19873;
  struct GSList * D.19874;
  gchar * D.19877;
  struct GSList * D.19878;
  guint32 offset;
  guint32 header_size;
  guint32 file_alignment;
  const char * pe_header;
  const char * pe_optional_header;

  offset = pe_header_offset (ctx);
  D.19774 = ctx->data;
  D.19775 = (sizetype) offset;
  pe_header = D.19774 + D.19775;
  pe_optional_header = pe_header + 20;
  D.19776 = pe_header + 16;
  D.19777 = MEM[(const guint16 *)D.19776];
  D.19778 = D.19777 >> 8;
  D.19779 = (int) D.19778;
  D.19776 = pe_header + 16;
  D.19777 = MEM[(const guint16 *)D.19776];
  D.19780 = (int) D.19777;
  D.19781 = D.19780 << 8;
  D.19782 = D.19781 & 65535;
  D.19783 = D.19779 | D.19782;
  header_size = (guint32) D.19783;
  offset = offset + 20;
  if (header_size <= 1) goto <D.19784>; else goto <D.19785>;
  <D.19784>:
  D.19786 = ctx->report_error;
  if (D.19786 != 0) goto <D.19787>; else goto <D.19788>;
  <D.19787>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19789 = monoeg_strdup ("Invalid PE optional header size");
    vinfo->info.message = D.19789;
    vinfo->exception_type = 3;
    D.19790 = ctx->errors;
    D.19791 = monoeg_g_slist_prepend (D.19790, vinfo);
    ctx->errors = D.19791;
  }
  <D.19788>:
  ctx->valid = 0;
  return;
  <D.19785>:
  D.19794 = ctx->size;
  D.19795 = D.19794 - header_size;
  if (D.19795 < offset) goto <D.19792>; else goto <D.19796>;
  <D.19796>:
  D.19794 = ctx->size;
  if (D.19794 < header_size) goto <D.19792>; else goto <D.19793>;
  <D.19792>:
  D.19786 = ctx->report_error;
  if (D.19786 != 0) goto <D.19797>; else goto <D.19798>;
  <D.19797>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19799 = monoeg_strdup ("Invalid PE optional header size");
    vinfo->info.message = D.19799;
    vinfo->exception_type = 3;
    D.19790 = ctx->errors;
    D.19800 = monoeg_g_slist_prepend (D.19790, vinfo);
    ctx->errors = D.19800;
  }
  <D.19798>:
  ctx->valid = 0;
  return;
  <D.19793>:
  D.19801 = MEM[(const guint16 *)pe_optional_header];
  D.19802 = D.19801 >> 8;
  D.19803 = (int) D.19802;
  D.19801 = MEM[(const guint16 *)pe_optional_header];
  D.19804 = (int) D.19801;
  D.19805 = D.19804 << 8;
  D.19806 = D.19805 & 65535;
  D.19807 = D.19803 | D.19806;
  if (D.19807 == 267) goto <D.19808>; else goto <D.19809>;
  <D.19808>:
  if (header_size != 224) goto <D.19810>; else goto <D.19811>;
  <D.19810>:
  D.19786 = ctx->report_error;
  if (D.19786 != 0) goto <D.19812>; else goto <D.19813>;
  <D.19812>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19814 = monoeg_g_strdup_printf ("Invalid optional header size %d", header_size);
    vinfo->info.message = D.19814;
    vinfo->exception_type = 3;
    D.19790 = ctx->errors;
    D.19815 = monoeg_g_slist_prepend (D.19790, vinfo);
    ctx->errors = D.19815;
  }
  <D.19813>:
  ctx->valid = 0;
  return;
  <D.19811>:
  D.19816 = pe_optional_header + 32;
  D.19817 = MEM[(const guint32 *)D.19816];
  D.19818 = D.19817 << 24;
  D.19816 = pe_optional_header + 32;
  D.19817 = MEM[(const guint32 *)D.19816];
  D.19819 = D.19817 >> 8;
  D.19820 = D.19819 & 65280;
  D.19821 = D.19818 | D.19820;
  D.19816 = pe_optional_header + 32;
  D.19817 = MEM[(const guint32 *)D.19816];
  D.19822 = D.19817 << 8;
  D.19823 = D.19822 & 16711680;
  D.19824 = D.19821 | D.19823;
  D.19816 = pe_optional_header + 32;
  D.19817 = MEM[(const guint32 *)D.19816];
  D.19825 = D.19817 >> 24;
  D.19826 = D.19824 | D.19825;
  if (D.19826 != 8192) goto <D.19827>; else goto <D.19828>;
  <D.19827>:
  D.19786 = ctx->report_error;
  if (D.19786 != 0) goto <D.19829>; else goto <D.19830>;
  <D.19829>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19816 = pe_optional_header + 32;
    D.19817 = MEM[(const guint32 *)D.19816];
    D.19818 = D.19817 << 24;
    D.19816 = pe_optional_header + 32;
    D.19817 = MEM[(const guint32 *)D.19816];
    D.19819 = D.19817 >> 8;
    D.19820 = D.19819 & 65280;
    D.19821 = D.19818 | D.19820;
    D.19816 = pe_optional_header + 32;
    D.19817 = MEM[(const guint32 *)D.19816];
    D.19822 = D.19817 << 8;
    D.19823 = D.19822 & 16711680;
    D.19824 = D.19821 | D.19823;
    D.19816 = pe_optional_header + 32;
    D.19817 = MEM[(const guint32 *)D.19816];
    D.19825 = D.19817 >> 24;
    D.19826 = D.19824 | D.19825;
    D.19831 = monoeg_g_strdup_printf ("Invalid Section Aligmnent %x", D.19826);
    vinfo->info.message = D.19831;
    vinfo->exception_type = 3;
    D.19790 = ctx->errors;
    D.19832 = monoeg_g_slist_prepend (D.19790, vinfo);
    ctx->errors = D.19832;
  }
  <D.19830>:
  ctx->valid = 0;
  return;
  <D.19828>:
  D.19833 = pe_optional_header + 36;
  D.19834 = MEM[(const guint32 *)D.19833];
  D.19835 = D.19834 << 24;
  D.19833 = pe_optional_header + 36;
  D.19834 = MEM[(const guint32 *)D.19833];
  D.19836 = D.19834 >> 8;
  D.19837 = D.19836 & 65280;
  D.19838 = D.19835 | D.19837;
  D.19833 = pe_optional_header + 36;
  D.19834 = MEM[(const guint32 *)D.19833];
  D.19839 = D.19834 << 8;
  D.19840 = D.19839 & 16711680;
  D.19841 = D.19838 | D.19840;
  D.19833 = pe_optional_header + 36;
  D.19834 = MEM[(const guint32 *)D.19833];
  D.19842 = D.19834 >> 24;
  file_alignment = D.19841 | D.19842;
  if (file_alignment != 512) goto <D.19843>; else goto <D.19844>;
  <D.19843>:
  if (file_alignment != 4096) goto <D.19845>; else goto <D.19846>;
  <D.19845>:
  D.19786 = ctx->report_error;
  if (D.19786 != 0) goto <D.19847>; else goto <D.19848>;
  <D.19847>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19849 = monoeg_g_strdup_printf ("Invalid file Aligmnent %x", file_alignment);
    vinfo->info.message = D.19849;
    vinfo->exception_type = 3;
    D.19790 = ctx->errors;
    D.19850 = monoeg_g_slist_prepend (D.19790, vinfo);
    ctx->errors = D.19850;
  }
  <D.19848>:
  ctx->valid = 0;
  return;
  <D.19846>:
  <D.19844>:
  D.19851 = pe_optional_header + 92;
  D.19852 = MEM[(const guint32 *)D.19851];
  D.19853 = D.19852 << 24;
  D.19851 = pe_optional_header + 92;
  D.19852 = MEM[(const guint32 *)D.19851];
  D.19854 = D.19852 >> 8;
  D.19855 = D.19854 & 65280;
  D.19856 = D.19853 | D.19855;
  D.19851 = pe_optional_header + 92;
  D.19852 = MEM[(const guint32 *)D.19851];
  D.19857 = D.19852 << 8;
  D.19858 = D.19857 & 16711680;
  D.19859 = D.19856 | D.19858;
  D.19851 = pe_optional_header + 92;
  D.19852 = MEM[(const guint32 *)D.19851];
  D.19860 = D.19852 >> 24;
  D.19861 = D.19859 | D.19860;
  if (D.19861 > 16) goto <D.19862>; else goto <D.19863>;
  <D.19862>:
  D.19786 = ctx->report_error;
  if (D.19786 != 0) goto <D.19864>; else goto <D.19865>;
  <D.19864>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19851 = pe_optional_header + 92;
    D.19852 = MEM[(const guint32 *)D.19851];
    D.19853 = D.19852 << 24;
    D.19851 = pe_optional_header + 92;
    D.19852 = MEM[(const guint32 *)D.19851];
    D.19854 = D.19852 >> 8;
    D.19855 = D.19854 & 65280;
    D.19856 = D.19853 | D.19855;
    D.19851 = pe_optional_header + 92;
    D.19852 = MEM[(const guint32 *)D.19851];
    D.19857 = D.19852 << 8;
    D.19858 = D.19857 & 16711680;
    D.19859 = D.19856 | D.19858;
    D.19851 = pe_optional_header + 92;
    D.19852 = MEM[(const guint32 *)D.19851];
    D.19860 = D.19852 >> 24;
    D.19861 = D.19859 | D.19860;
    D.19866 = monoeg_g_strdup_printf ("Too many data directories %x", D.19861);
    vinfo->info.message = D.19866;
    vinfo->exception_type = 3;
    D.19790 = ctx->errors;
    D.19867 = monoeg_g_slist_prepend (D.19790, vinfo);
    ctx->errors = D.19867;
  }
  <D.19865>:
  ctx->valid = 0;
  return;
  <D.19863>:
  goto <D.19868>;
  <D.19809>:
  D.19801 = MEM[(const guint16 *)pe_optional_header];
  D.19802 = D.19801 >> 8;
  D.19803 = (int) D.19802;
  D.19801 = MEM[(const guint16 *)pe_optional_header];
  D.19804 = (int) D.19801;
  D.19805 = D.19804 << 8;
  D.19806 = D.19805 & 65535;
  D.19807 = D.19803 | D.19806;
  if (D.19807 == 523) goto <D.19869>; else goto <D.19870>;
  <D.19869>:
  D.19786 = ctx->report_error;
  if (D.19786 != 0) goto <D.19871>; else goto <D.19872>;
  <D.19871>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19873 = monoeg_strdup ("Metadata verifier doesn\'t handle PE32+");
    vinfo->info.message = D.19873;
    vinfo->exception_type = 3;
    D.19790 = ctx->errors;
    D.19874 = monoeg_g_slist_prepend (D.19790, vinfo);
    ctx->errors = D.19874;
  }
  <D.19872>:
  ctx->valid = 0;
  return;
  <D.19870>:
  D.19786 = ctx->report_error;
  if (D.19786 != 0) goto <D.19875>; else goto <D.19876>;
  <D.19875>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19801 = MEM[(const guint16 *)pe_optional_header];
    D.19802 = D.19801 >> 8;
    D.19803 = (int) D.19802;
    D.19801 = MEM[(const guint16 *)pe_optional_header];
    D.19804 = (int) D.19801;
    D.19805 = D.19804 << 8;
    D.19806 = D.19805 & 65535;
    D.19807 = D.19803 | D.19806;
    D.19877 = monoeg_g_strdup_printf ("Invalid optional header magic %d", D.19807);
    vinfo->info.message = D.19877;
    vinfo->exception_type = 3;
    D.19790 = ctx->errors;
    D.19878 = monoeg_g_slist_prepend (D.19790, vinfo);
    ctx->errors = D.19878;
  }
  <D.19876>:
  ctx->valid = 0;
  return;
  <D.19868>:
}


pe_header_offset (struct VerifyContext * ctx)
{
  guint32 D.19880;
  const char * D.19881;
  const char * D.19882;
  unsigned int D.19883;
  unsigned int D.19884;
  unsigned int D.19885;
  unsigned int D.19886;
  unsigned int D.19887;
  unsigned int D.19888;
  unsigned int D.19889;
  unsigned int D.19890;
  unsigned int D.19891;
  unsigned int D.19892;

  D.19881 = ctx->data;
  D.19882 = D.19881 + 60;
  D.19883 = MEM[(const guint32 *)D.19882];
  D.19884 = D.19883 << 24;
  D.19881 = ctx->data;
  D.19882 = D.19881 + 60;
  D.19883 = MEM[(const guint32 *)D.19882];
  D.19885 = D.19883 >> 8;
  D.19886 = D.19885 & 65280;
  D.19887 = D.19884 | D.19886;
  D.19881 = ctx->data;
  D.19882 = D.19881 + 60;
  D.19883 = MEM[(const guint32 *)D.19882];
  D.19888 = D.19883 << 8;
  D.19889 = D.19888 & 16711680;
  D.19890 = D.19887 | D.19889;
  D.19881 = ctx->data;
  D.19882 = D.19881 + 60;
  D.19883 = MEM[(const guint32 *)D.19882];
  D.19891 = D.19883 >> 24;
  D.19892 = D.19890 | D.19891;
  D.19880 = D.19892 + 4;
  return D.19880;
}


load_section_table (struct VerifyContext * ctx)
{
  const char * D.19894;
  sizetype D.19895;
  const char * D.19896;
  short unsigned int D.19897;
  short unsigned int D.19898;
  int D.19899;
  int D.19900;
  int D.19901;
  int D.19902;
  int D.19903;
  unsigned int D.19904;
  unsigned int D.19905;
  int D.19906;
  int D.19907;
  unsigned int D.19908;
  unsigned int D.19909;
  unsigned int D.19910;
  int D.19913;
  gchar * D.19916;
  struct GSList * D.19917;
  struct GSList * D.19918;
  long unsigned int D.19919;
  long unsigned int D.19920;
  void * D.19921;
  long unsigned int D.19922;
  long unsigned int D.19923;
  struct SectionHeader * D.19924;
  const char * D.19925;
  unsigned int D.19926;
  unsigned int D.19927;
  unsigned int D.19928;
  unsigned int D.19929;
  unsigned int D.19930;
  unsigned int D.19931;
  unsigned int D.19932;
  unsigned int D.19933;
  unsigned int D.19934;
  unsigned int D.19935;
  const char * D.19936;
  unsigned int D.19937;
  unsigned int D.19938;
  unsigned int D.19939;
  unsigned int D.19940;
  unsigned int D.19941;
  unsigned int D.19942;
  unsigned int D.19943;
  unsigned int D.19944;
  unsigned int D.19945;
  unsigned int D.19946;
  const char * D.19947;
  unsigned int D.19948;
  unsigned int D.19949;
  unsigned int D.19950;
  unsigned int D.19951;
  unsigned int D.19952;
  unsigned int D.19953;
  unsigned int D.19954;
  unsigned int D.19955;
  unsigned int D.19956;
  unsigned int D.19957;
  const char * D.19958;
  unsigned int D.19959;
  unsigned int D.19960;
  unsigned int D.19961;
  unsigned int D.19962;
  unsigned int D.19963;
  unsigned int D.19964;
  unsigned int D.19965;
  unsigned int D.19966;
  unsigned int D.19967;
  unsigned int D.19968;
  const char * D.19969;
  short unsigned int D.19970;
  short unsigned int D.19971;
  signed short D.19972;
  int D.19973;
  int D.19974;
  signed short D.19975;
  signed short D.19976;
  short unsigned int D.19977;
  unsigned int D.19978;
  gchar * D.19983;
  struct GSList * D.19984;
  gchar * D.19989;
  struct GSList * D.19990;
  unsigned int D.19991;
  unsigned int D.19992;
  gchar * D.19997;
  struct GSList * D.19998;
  const char * D.19999;
  unsigned int D.20000;
  unsigned int D.20001;
  unsigned int D.20002;
  unsigned int D.20003;
  unsigned int D.20004;
  unsigned int D.20005;
  unsigned int D.20006;
  unsigned int D.20007;
  unsigned int D.20008;
  gchar * D.20013;
  struct GSList * D.20014;
  gchar * D.20019;
  struct GSList * D.20020;
  unsigned int D.20023;
  short unsigned int D.20025;
  gchar * D.20028;
  struct GSList * D.20029;
  const char * D.20030;
  unsigned int D.20031;
  unsigned int D.20032;
  unsigned int D.20033;
  unsigned int D.20034;
  unsigned int D.20035;
  unsigned int D.20036;
  unsigned int D.20037;
  unsigned int D.20038;
  unsigned int D.20039;
  unsigned int D.20043;
  gchar * D.20046;
  struct GSList * D.20047;
  int i;
  struct SectionHeader * sections;
  guint32 offset;
  const char * ptr;
  guint16 num_sections;

  offset = pe_header_offset (ctx);
  D.19894 = ctx->data;
  D.19895 = (sizetype) offset;
  ptr = D.19894 + D.19895;
  D.19896 = ptr + 2;
  D.19897 = MEM[(const guint16 *)D.19896];
  D.19898 = D.19897 >> 8;
  D.19899 = (int) D.19898;
  D.19896 = ptr + 2;
  D.19897 = MEM[(const guint16 *)D.19896];
  D.19900 = (int) D.19897;
  D.19901 = D.19900 << 8;
  D.19902 = D.19901 & 65535;
  D.19903 = D.19899 | D.19902;
  D.19904 = (unsigned int) D.19903;
  ctx->section_count = D.19904;
  D.19905 = ctx->section_count;
  num_sections = (guint16) D.19905;
  offset = offset + 244;
  ptr = ptr + 244;
  D.19906 = (int) num_sections;
  D.19907 = D.19906 * 40;
  D.19908 = (unsigned int) D.19907;
  D.19909 = ctx->size;
  D.19910 = D.19909 - offset;
  if (D.19908 > D.19910) goto <D.19911>; else goto <D.19912>;
  <D.19911>:
  D.19913 = ctx->report_error;
  if (D.19913 != 0) goto <D.19914>; else goto <D.19915>;
  <D.19914>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.19916 = monoeg_strdup ("Invalid PE optional header size");
    vinfo->info.message = D.19916;
    vinfo->exception_type = 3;
    D.19917 = ctx->errors;
    D.19918 = monoeg_g_slist_prepend (D.19917, vinfo);
    ctx->errors = D.19918;
  }
  <D.19915>:
  ctx->valid = 0;
  return;
  <D.19912>:
  D.19919 = (long unsigned int) num_sections;
  D.19920 = D.19919 * 20;
  D.19921 = monoeg_malloc0 (D.19920);
  ctx->sections = D.19921;
  sections = ctx->sections;
  i = 0;
  goto <D.17964>;
  <D.17963>:
  D.19922 = (long unsigned int) i;
  D.19923 = D.19922 * 20;
  D.19924 = sections + D.19923;
  D.19925 = ptr + 8;
  D.19926 = MEM[(const guint32 *)D.19925];
  D.19927 = D.19926 << 24;
  D.19925 = ptr + 8;
  D.19926 = MEM[(const guint32 *)D.19925];
  D.19928 = D.19926 >> 8;
  D.19929 = D.19928 & 65280;
  D.19930 = D.19927 | D.19929;
  D.19925 = ptr + 8;
  D.19926 = MEM[(const guint32 *)D.19925];
  D.19931 = D.19926 << 8;
  D.19932 = D.19931 & 16711680;
  D.19933 = D.19930 | D.19932;
  D.19925 = ptr + 8;
  D.19926 = MEM[(const guint32 *)D.19925];
  D.19934 = D.19926 >> 24;
  D.19935 = D.19933 | D.19934;
  D.19924->size = D.19935;
  D.19922 = (long unsigned int) i;
  D.19923 = D.19922 * 20;
  D.19924 = sections + D.19923;
  D.19936 = ptr + 12;
  D.19937 = MEM[(const guint32 *)D.19936];
  D.19938 = D.19937 << 24;
  D.19936 = ptr + 12;
  D.19937 = MEM[(const guint32 *)D.19936];
  D.19939 = D.19937 >> 8;
  D.19940 = D.19939 & 65280;
  D.19941 = D.19938 | D.19940;
  D.19936 = ptr + 12;
  D.19937 = MEM[(const guint32 *)D.19936];
  D.19942 = D.19937 << 8;
  D.19943 = D.19942 & 16711680;
  D.19944 = D.19941 | D.19943;
  D.19936 = ptr + 12;
  D.19937 = MEM[(const guint32 *)D.19936];
  D.19945 = D.19937 >> 24;
  D.19946 = D.19944 | D.19945;
  D.19924->baseRVA = D.19946;
  D.19922 = (long unsigned int) i;
  D.19923 = D.19922 * 20;
  D.19924 = sections + D.19923;
  D.19947 = ptr + 20;
  D.19948 = MEM[(const guint32 *)D.19947];
  D.19949 = D.19948 << 24;
  D.19947 = ptr + 20;
  D.19948 = MEM[(const guint32 *)D.19947];
  D.19950 = D.19948 >> 8;
  D.19951 = D.19950 & 65280;
  D.19952 = D.19949 | D.19951;
  D.19947 = ptr + 20;
  D.19948 = MEM[(const guint32 *)D.19947];
  D.19953 = D.19948 << 8;
  D.19954 = D.19953 & 16711680;
  D.19955 = D.19952 | D.19954;
  D.19947 = ptr + 20;
  D.19948 = MEM[(const guint32 *)D.19947];
  D.19956 = D.19948 >> 24;
  D.19957 = D.19955 | D.19956;
  D.19924->baseOffset = D.19957;
  D.19922 = (long unsigned int) i;
  D.19923 = D.19922 * 20;
  D.19924 = sections + D.19923;
  D.19958 = ptr + 24;
  D.19959 = MEM[(const guint32 *)D.19958];
  D.19960 = D.19959 << 24;
  D.19958 = ptr + 24;
  D.19959 = MEM[(const guint32 *)D.19958];
  D.19961 = D.19959 >> 8;
  D.19962 = D.19961 & 65280;
  D.19963 = D.19960 | D.19962;
  D.19958 = ptr + 24;
  D.19959 = MEM[(const guint32 *)D.19958];
  D.19964 = D.19959 << 8;
  D.19965 = D.19964 & 16711680;
  D.19966 = D.19963 | D.19965;
  D.19958 = ptr + 24;
  D.19959 = MEM[(const guint32 *)D.19958];
  D.19967 = D.19959 >> 24;
  D.19968 = D.19966 | D.19967;
  D.19924->rellocationsRVA = D.19968;
  D.19922 = (long unsigned int) i;
  D.19923 = D.19922 * 20;
  D.19924 = sections + D.19923;
  D.19969 = ptr + 32;
  D.19970 = MEM[(const guint16 *)D.19969];
  D.19971 = D.19970 >> 8;
  D.19972 = (signed short) D.19971;
  D.19969 = ptr + 32;
  D.19970 = MEM[(const guint16 *)D.19969];
  D.19973 = (int) D.19970;
  D.19974 = D.19973 << 8;
  D.19975 = (signed short) D.19974;
  D.19976 = D.19972 | D.19975;
  D.19977 = (short unsigned int) D.19976;
  D.19924->numberOfRelocations = D.19977;
  ptr = ptr + 40;
  i = i + 1;
  <D.17964>:
  D.19906 = (int) num_sections;
  if (D.19906 > i) goto <D.17963>; else goto <D.17965>;
  <D.17965>:
  D.19894 = ctx->data;
  D.19895 = (sizetype) offset;
  ptr = D.19894 + D.19895;
  i = 0;
  goto <D.17976>;
  <D.17975>:
  {
    guint32 raw_size;
    guint32 flags;

    D.19922 = (long unsigned int) i;
    D.19923 = D.19922 * 20;
    D.19924 = sections + D.19923;
    D.19978 = D.19924->baseOffset;
    if (D.19978 == 0) goto <D.19979>; else goto <D.19980>;
    <D.19979>:
    D.19913 = ctx->report_error;
    if (D.19913 != 0) goto <D.19981>; else goto <D.19982>;
    <D.19981>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.19983 = monoeg_strdup ("Metadata verifier doesn\'t handle sections with intialized data only");
      vinfo->info.message = D.19983;
      vinfo->exception_type = 3;
      D.19917 = ctx->errors;
      D.19984 = monoeg_g_slist_prepend (D.19917, vinfo);
      ctx->errors = D.19984;
    }
    <D.19982>:
    ctx->valid = 0;
    return;
    <D.19980>:
    D.19922 = (long unsigned int) i;
    D.19923 = D.19922 * 20;
    D.19924 = sections + D.19923;
    D.19978 = D.19924->baseOffset;
    D.19909 = ctx->size;
    if (D.19978 >= D.19909) goto <D.19985>; else goto <D.19986>;
    <D.19985>:
    D.19913 = ctx->report_error;
    if (D.19913 != 0) goto <D.19987>; else goto <D.19988>;
    <D.19987>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.19922 = (long unsigned int) i;
      D.19923 = D.19922 * 20;
      D.19924 = sections + D.19923;
      D.19978 = D.19924->baseOffset;
      D.19989 = monoeg_g_strdup_printf ("Invalid PointerToRawData %x points beyond EOF", D.19978);
      vinfo->info.message = D.19989;
      vinfo->exception_type = 3;
      D.19917 = ctx->errors;
      D.19990 = monoeg_g_slist_prepend (D.19917, vinfo);
      ctx->errors = D.19990;
    }
    <D.19988>:
    ctx->valid = 0;
    return;
    <D.19986>:
    D.19922 = (long unsigned int) i;
    D.19923 = D.19922 * 20;
    D.19924 = sections + D.19923;
    D.19991 = D.19924->size;
    D.19909 = ctx->size;
    D.19922 = (long unsigned int) i;
    D.19923 = D.19922 * 20;
    D.19924 = sections + D.19923;
    D.19978 = D.19924->baseOffset;
    D.19992 = D.19909 - D.19978;
    if (D.19991 > D.19992) goto <D.19993>; else goto <D.19994>;
    <D.19993>:
    D.19913 = ctx->report_error;
    if (D.19913 != 0) goto <D.19995>; else goto <D.19996>;
    <D.19995>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.19997 = monoeg_strdup ("Invalid VirtualSize points beyond EOF");
      vinfo->info.message = D.19997;
      vinfo->exception_type = 3;
      D.19917 = ctx->errors;
      D.19998 = monoeg_g_slist_prepend (D.19917, vinfo);
      ctx->errors = D.19998;
    }
    <D.19996>:
    ctx->valid = 0;
    return;
    <D.19994>:
    D.19999 = ptr + 16;
    D.20000 = MEM[(const guint32 *)D.19999];
    D.20001 = D.20000 << 24;
    D.19999 = ptr + 16;
    D.20000 = MEM[(const guint32 *)D.19999];
    D.20002 = D.20000 >> 8;
    D.20003 = D.20002 & 65280;
    D.20004 = D.20001 | D.20003;
    D.19999 = ptr + 16;
    D.20000 = MEM[(const guint32 *)D.19999];
    D.20005 = D.20000 << 8;
    D.20006 = D.20005 & 16711680;
    D.20007 = D.20004 | D.20006;
    D.19999 = ptr + 16;
    D.20000 = MEM[(const guint32 *)D.19999];
    D.20008 = D.20000 >> 24;
    raw_size = D.20007 | D.20008;
    D.19922 = (long unsigned int) i;
    D.19923 = D.19922 * 20;
    D.19924 = sections + D.19923;
    D.19991 = D.19924->size;
    if (D.19991 > raw_size) goto <D.20009>; else goto <D.20010>;
    <D.20009>:
    D.19913 = ctx->report_error;
    if (D.19913 != 0) goto <D.20011>; else goto <D.20012>;
    <D.20011>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.20013 = monoeg_strdup ("Metadata verifier doesn\'t handle sections with SizeOfRawData < VirtualSize");
      vinfo->info.message = D.20013;
      vinfo->exception_type = 3;
      D.19917 = ctx->errors;
      D.20014 = monoeg_g_slist_prepend (D.19917, vinfo);
      ctx->errors = D.20014;
    }
    <D.20012>:
    ctx->valid = 0;
    return;
    <D.20010>:
    D.19909 = ctx->size;
    D.19922 = (long unsigned int) i;
    D.19923 = D.19922 * 20;
    D.19924 = sections + D.19923;
    D.19978 = D.19924->baseOffset;
    D.19992 = D.19909 - D.19978;
    if (D.19992 < raw_size) goto <D.20015>; else goto <D.20016>;
    <D.20015>:
    D.19913 = ctx->report_error;
    if (D.19913 != 0) goto <D.20017>; else goto <D.20018>;
    <D.20017>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.20019 = monoeg_g_strdup_printf ("Invalid SizeOfRawData %x points beyond EOF", raw_size);
      vinfo->info.message = D.20019;
      vinfo->exception_type = 3;
      D.19917 = ctx->errors;
      D.20020 = monoeg_g_slist_prepend (D.19917, vinfo);
      ctx->errors = D.20020;
    }
    <D.20018>:
    ctx->valid = 0;
    return;
    <D.20016>:
    D.19922 = (long unsigned int) i;
    D.19923 = D.19922 * 20;
    D.19924 = sections + D.19923;
    D.20023 = D.19924->rellocationsRVA;
    if (D.20023 != 0) goto <D.20021>; else goto <D.20024>;
    <D.20024>:
    D.19922 = (long unsigned int) i;
    D.19923 = D.19922 * 20;
    D.19924 = sections + D.19923;
    D.20025 = D.19924->numberOfRelocations;
    if (D.20025 != 0) goto <D.20021>; else goto <D.20022>;
    <D.20021>:
    D.19913 = ctx->report_error;
    if (D.19913 != 0) goto <D.20026>; else goto <D.20027>;
    <D.20026>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.20028 = monoeg_g_strdup_printf ("Metadata verifier doesn\'t handle section relocation");
      vinfo->info.message = D.20028;
      vinfo->exception_type = 3;
      D.19917 = ctx->errors;
      D.20029 = monoeg_g_slist_prepend (D.19917, vinfo);
      ctx->errors = D.20029;
    }
    <D.20027>:
    ctx->valid = 0;
    return;
    <D.20022>:
    D.20030 = ptr + 36;
    D.20031 = MEM[(const guint32 *)D.20030];
    D.20032 = D.20031 << 24;
    D.20030 = ptr + 36;
    D.20031 = MEM[(const guint32 *)D.20030];
    D.20033 = D.20031 >> 8;
    D.20034 = D.20033 & 65280;
    D.20035 = D.20032 | D.20034;
    D.20030 = ptr + 36;
    D.20031 = MEM[(const guint32 *)D.20030];
    D.20036 = D.20031 << 8;
    D.20037 = D.20036 & 16711680;
    D.20038 = D.20035 | D.20037;
    D.20030 = ptr + 36;
    D.20031 = MEM[(const guint32 *)D.20030];
    D.20039 = D.20031 >> 24;
    flags = D.20038 | D.20039;
    if (flags == 0) goto <D.20040>; else goto <D.20042>;
    <D.20042>:
    D.20043 = flags & 33554207;
    if (D.20043 != 0) goto <D.20040>; else goto <D.20041>;
    <D.20040>:
    D.19913 = ctx->report_error;
    if (D.19913 != 0) goto <D.20044>; else goto <D.20045>;
    <D.20044>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.20046 = monoeg_g_strdup_printf ("Invalid section flags %x", flags);
      vinfo->info.message = D.20046;
      vinfo->exception_type = 3;
      D.19917 = ctx->errors;
      D.20047 = monoeg_g_slist_prepend (D.19917, vinfo);
      ctx->errors = D.20047;
    }
    <D.20045>:
    ctx->valid = 0;
    return;
    <D.20041>:
    ptr = ptr + 40;
  }
  i = i + 1;
  <D.17976>:
  D.19906 = (int) num_sections;
  if (D.19906 > i) goto <D.17975>; else goto <D.17977>;
  <D.17977>:
}


load_data_directories (struct VerifyContext * ctx)
{
  unsigned int D.20049;
  const char * D.20050;
  sizetype D.20051;
  unsigned int D.20052;
  unsigned int D.20053;
  unsigned int D.20054;
  unsigned int D.20055;
  unsigned int D.20056;
  unsigned int D.20057;
  unsigned int D.20058;
  unsigned int D.20059;
  unsigned int D.20060;
  const char * D.20061;
  unsigned int D.20062;
  unsigned int D.20063;
  unsigned int D.20064;
  unsigned int D.20065;
  unsigned int D.20066;
  unsigned int D.20067;
  unsigned int D.20068;
  unsigned int D.20069;
  unsigned int D.20070;
  int D.20076;
  int D.20079;
  gchar * D.20082;
  struct GSList * D.20083;
  struct GSList * D.20084;
  int D.20087;
  gchar * D.20092;
  struct GSList * D.20093;
  unsigned int D.20094;
  guint32 offset;
  const char * ptr;
  int i;

  D.20049 = pe_header_offset (ctx);
  offset = D.20049 + 116;
  D.20050 = ctx->data;
  D.20051 = (sizetype) offset;
  ptr = D.20050 + D.20051;
  i = 0;
  goto <D.17993>;
  <D.17992>:
  {
    guint32 rva;
    guint32 size;

    D.20052 = MEM[(const guint32 *)ptr];
    D.20053 = D.20052 << 24;
    D.20052 = MEM[(const guint32 *)ptr];
    D.20054 = D.20052 >> 8;
    D.20055 = D.20054 & 65280;
    D.20056 = D.20053 | D.20055;
    D.20052 = MEM[(const guint32 *)ptr];
    D.20057 = D.20052 << 8;
    D.20058 = D.20057 & 16711680;
    D.20059 = D.20056 | D.20058;
    D.20052 = MEM[(const guint32 *)ptr];
    D.20060 = D.20052 >> 24;
    rva = D.20059 | D.20060;
    D.20061 = ptr + 4;
    D.20062 = MEM[(const guint32 *)D.20061];
    D.20063 = D.20062 << 24;
    D.20061 = ptr + 4;
    D.20062 = MEM[(const guint32 *)D.20061];
    D.20064 = D.20062 >> 8;
    D.20065 = D.20064 & 65280;
    D.20066 = D.20063 | D.20065;
    D.20061 = ptr + 4;
    D.20062 = MEM[(const guint32 *)D.20061];
    D.20067 = D.20062 << 8;
    D.20068 = D.20067 & 16711680;
    D.20069 = D.20066 | D.20068;
    D.20061 = ptr + 4;
    D.20062 = MEM[(const guint32 *)D.20061];
    D.20070 = D.20062 >> 24;
    size = D.20069 | D.20070;
    if (i == 4) goto <D.20071>; else goto <D.20072>;
    <D.20071>:
    ptr = ptr + 8;
    // predicted unlikely by continue predictor.
    goto <D.17989>;
    <D.20072>:
    if (rva != 0) goto <D.20073>; else goto <D.20075>;
    <D.20075>:
    if (size != 0) goto <D.20073>; else goto <D.20074>;
    <D.20073>:
    D.20076 = is_valid_data_directory (i);
    if (D.20076 == 0) goto <D.20077>; else goto <D.20078>;
    <D.20077>:
    D.20079 = ctx->report_error;
    if (D.20079 != 0) goto <D.20080>; else goto <D.20081>;
    <D.20080>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.20082 = monoeg_g_strdup_printf ("Invalid data directory %d", i);
      vinfo->info.message = D.20082;
      vinfo->exception_type = 3;
      D.20083 = ctx->errors;
      D.20084 = monoeg_g_slist_prepend (D.20083, vinfo);
      ctx->errors = D.20084;
    }
    <D.20081>:
    ctx->valid = 0;
    return;
    <D.20078>:
    <D.20074>:
    if (rva != 0) goto <D.20085>; else goto <D.20086>;
    <D.20085>:
    D.20087 = bounds_check_virtual_address (ctx, rva, size);
    if (D.20087 == 0) goto <D.20088>; else goto <D.20089>;
    <D.20088>:
    D.20079 = ctx->report_error;
    if (D.20079 != 0) goto <D.20090>; else goto <D.20091>;
    <D.20090>:
    {
      struct MonoVerifyInfoExtended * vinfo;

      vinfo = monoeg_malloc (24);
      vinfo->info.status = 1;
      D.20092 = monoeg_g_strdup_printf ("Invalid data directory %d rva/size pair %x/%x", i, rva, size);
      vinfo->info.message = D.20092;
      vinfo->exception_type = 3;
      D.20083 = ctx->errors;
      D.20093 = monoeg_g_slist_prepend (D.20083, vinfo);
      ctx->errors = D.20093;
    }
    <D.20091>:
    ctx->valid = 0;
    return;
    <D.20089>:
    <D.20086>:
    ctx->data_directories[i].rva = rva;
    ctx->data_directories[i].size = size;
    D.20094 = translate_rva (ctx, rva);
    ctx->data_directories[i].translated_offset = D.20094;
    ptr = ptr + 8;
  }
  <D.17989>:
  i = i + 1;
  <D.17993>:
  if (i <= 15) goto <D.17992>; else goto <D.17994>;
  <D.17994>:
}


is_valid_data_directory (int i)
{
  gboolean D.20096;
  int iftmp.0;
  unsigned int i.1;
  unsigned int D.20102;

  i.1 = (unsigned int) i;
  D.20102 = i.1 + 4294967295;
  if (D.20102 <= 1) goto <D.20098>; else goto <D.20103>;
  <D.20103>:
  if (i == 5) goto <D.20098>; else goto <D.20104>;
  <D.20104>:
  if (i == 12) goto <D.20098>; else goto <D.20105>;
  <D.20105>:
  if (i == 14) goto <D.20098>; else goto <D.20106>;
  <D.20106>:
  if (i == 4) goto <D.20098>; else goto <D.20107>;
  <D.20107>:
  if (i == 6) goto <D.20098>; else goto <D.20099>;
  <D.20098>:
  iftmp.0 = 1;
  goto <D.20100>;
  <D.20099>:
  iftmp.0 = 0;
  <D.20100>:
  D.20096 = iftmp.0;
  return D.20096;
}


bounds_check_virtual_address (struct VerifyContext * ctx, guint32 rva, guint32 size)
{
  unsigned int D.20109;
  gboolean D.20112;
  int D.20113;
  struct MonoImage * D.20116;
  unsigned int D.20117;
  struct SectionHeader * D.20122;
  long unsigned int D.20125;
  long unsigned int D.20126;
  struct SectionHeader * D.20127;
  unsigned int D.20128;
  unsigned int D.20129;
  unsigned int D.20134;
  unsigned int i.2;
  int i;

  D.20109 = rva + size;
  if (D.20109 < rva) goto <D.20110>; else goto <D.20111>;
  <D.20110>:
  D.20112 = 0;
  return D.20112;
  <D.20111>:
  D.20113 = ctx->stage;
  if (D.20113 > 0) goto <D.20114>; else goto <D.20115>;
  <D.20114>:
  {
    struct MonoCLIImageInfo * iinfo;
    const int top;
    struct MonoSectionTable * tables;
    int i;

    D.20116 = ctx->image;
    iinfo = D.20116->image_info;
    top = iinfo->cli_section_count;
    tables = iinfo->cli_section_tables;
    i = 0;
    goto <D.17895>;
    <D.17894>:
    {
      guint32 base;
      guint32 end;

      base = tables->st_virtual_address;
      D.20117 = tables->st_raw_data_size;
      end = D.20117 + base;
      if (rva >= base) goto <D.20118>; else goto <D.20119>;
      <D.20118>:
      D.20109 = rva + size;
      if (D.20109 <= end) goto <D.20120>; else goto <D.20121>;
      <D.20120>:
      D.20112 = 1;
      return D.20112;
      <D.20121>:
      <D.20119>:
      tables = tables + 40;
    }
    i = i + 1;
    <D.17895>:
    if (i < top) goto <D.17894>; else goto <D.17896>;
    <D.17896>:
    D.20112 = 0;
    return D.20112;
  }
  <D.20115>:
  D.20122 = ctx->sections;
  if (D.20122 == 0B) goto <D.20123>; else goto <D.20124>;
  <D.20123>:
  D.20112 = 0;
  return D.20112;
  <D.20124>:
  i = 0;
  goto <D.17900>;
  <D.17899>:
  {
    guint32 base;
    guint32 end;

    D.20122 = ctx->sections;
    D.20125 = (long unsigned int) i;
    D.20126 = D.20125 * 20;
    D.20127 = D.20122 + D.20126;
    base = D.20127->baseRVA;
    D.20122 = ctx->sections;
    D.20125 = (long unsigned int) i;
    D.20126 = D.20125 * 20;
    D.20127 = D.20122 + D.20126;
    D.20128 = D.20127->baseRVA;
    D.20122 = ctx->sections;
    D.20125 = (long unsigned int) i;
    D.20126 = D.20125 * 20;
    D.20127 = D.20122 + D.20126;
    D.20129 = D.20127->size;
    end = D.20128 + D.20129;
    if (rva >= base) goto <D.20130>; else goto <D.20131>;
    <D.20130>:
    D.20109 = rva + size;
    if (D.20109 <= end) goto <D.20132>; else goto <D.20133>;
    <D.20132>:
    D.20112 = 1;
    return D.20112;
    <D.20133>:
    <D.20131>:
  }
  i = i + 1;
  <D.17900>:
  D.20134 = ctx->section_count;
  i.2 = (unsigned int) i;
  if (D.20134 > i.2) goto <D.17899>; else goto <D.17901>;
  <D.17901>:
  D.20112 = 0;
  return D.20112;
}


translate_rva (struct VerifyContext * ctx, guint32 rva)
{
  int D.20137;
  guint32 D.20140;
  struct MonoImage * D.20141;
  struct SectionHeader * D.20142;
  long unsigned int D.20145;
  long unsigned int D.20146;
  struct SectionHeader * D.20147;
  unsigned int D.20148;
  unsigned int D.20149;
  unsigned int D.20154;
  unsigned int D.20155;
  guint32 iftmp.3;
  unsigned int D.20157;
  unsigned int D.20161;
  unsigned int i.4;
  int i;

  D.20137 = ctx->stage;
  if (D.20137 > 0) goto <D.20138>; else goto <D.20139>;
  <D.20138>:
  D.20141 = ctx->image;
  D.20140 = mono_cli_rva_image_map (D.20141, rva);
  return D.20140;
  <D.20139>:
  D.20142 = ctx->sections;
  if (D.20142 == 0B) goto <D.20143>; else goto <D.20144>;
  <D.20143>:
  D.20140 = 0;
  return D.20140;
  <D.20144>:
  i = 0;
  goto <D.17921>;
  <D.17920>:
  {
    guint32 base;
    guint32 end;

    D.20142 = ctx->sections;
    D.20145 = (long unsigned int) i;
    D.20146 = D.20145 * 20;
    D.20147 = D.20142 + D.20146;
    base = D.20147->baseRVA;
    D.20142 = ctx->sections;
    D.20145 = (long unsigned int) i;
    D.20146 = D.20145 * 20;
    D.20147 = D.20142 + D.20146;
    D.20148 = D.20147->baseRVA;
    D.20142 = ctx->sections;
    D.20145 = (long unsigned int) i;
    D.20146 = D.20145 * 20;
    D.20147 = D.20142 + D.20146;
    D.20149 = D.20147->size;
    end = D.20148 + D.20149;
    if (rva >= base) goto <D.20150>; else goto <D.20151>;
    <D.20150>:
    if (rva <= end) goto <D.20152>; else goto <D.20153>;
    <D.20152>:
    {
      guint32 res;

      D.20154 = rva - base;
      D.20142 = ctx->sections;
      D.20145 = (long unsigned int) i;
      D.20146 = D.20145 * 20;
      D.20147 = D.20142 + D.20146;
      D.20155 = D.20147->baseOffset;
      res = D.20154 + D.20155;
      D.20157 = ctx->size;
      if (D.20157 > res) goto <D.20158>; else goto <D.20159>;
      <D.20158>:
      iftmp.3 = res;
      goto <D.20160>;
      <D.20159>:
      iftmp.3 = 4294967295;
      <D.20160>:
      D.20140 = iftmp.3;
      return D.20140;
    }
    <D.20153>:
    <D.20151>:
  }
  i = i + 1;
  <D.17921>:
  D.20161 = ctx->section_count;
  i.4 = (unsigned int) i;
  if (D.20161 > i.4) goto <D.17920>; else goto <D.17922>;
  <D.17922>:
  D.20140 = 4294967295;
  return D.20140;
}


verify_import_table (struct VerifyContext * ctx)
{
  const char * D.20164;
  sizetype D.20165;
  _Bool D.20166;
  long int D.20167;
  long int D.20168;
  unsigned int D.20171;
  int D.20174;
  gchar * D.20177;
  struct GSList * D.20178;
  struct GSList * D.20179;
  unsigned int D.20180;
  unsigned int D.20181;
  unsigned int D.20182;
  unsigned int D.20183;
  unsigned int D.20184;
  unsigned int D.20185;
  unsigned int D.20186;
  unsigned int D.20187;
  unsigned int D.20188;
  int D.20191;
  gchar * D.20196;
  struct GSList * D.20197;
  const char * D.20198;
  unsigned int D.20199;
  unsigned int D.20200;
  unsigned int D.20201;
  unsigned int D.20202;
  unsigned int D.20203;
  unsigned int D.20204;
  unsigned int D.20205;
  unsigned int D.20206;
  unsigned int D.20207;
  int D.20210;
  gchar * D.20215;
  struct GSList * D.20216;
  const char * D.20217;
  unsigned int D.20218;
  unsigned int D.20219;
  unsigned int D.20220;
  unsigned int D.20221;
  unsigned int D.20222;
  unsigned int D.20223;
  unsigned int D.20224;
  unsigned int D.20225;
  unsigned int D.20226;
  int D.20229;
  gchar * D.20234;
  struct GSList * D.20235;
  unsigned int D.20236;
  unsigned int D.20241;
  gchar * D.20242;
  struct GSList * D.20243;
  _Bool D.20246;
  long int D.20247;
  long int D.20248;
  sizetype D.20251;
  int D.20252;
  gchar * D.20257;
  struct GSList * D.20258;
  int D.20261;
  struct DataDirectory it;
  guint32 offset;
  const char * ptr;
  guint32 name_rva;
  guint32 ilt_rva;
  guint32 iat_rva;

  try
    {
      it = ctx->data_directories[1];
      offset = it.translated_offset;
      D.20164 = ctx->data;
      D.20165 = (sizetype) offset;
      ptr = D.20164 + D.20165;
      D.20166 = offset == 4294967295;
      D.20167 = (long int) D.20166;
      D.20168 = __builtin_expect (D.20167, 0);
      if (D.20168 != 0) goto <D.20169>; else goto <D.20170>;
      <D.20169>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "metadata-verify.c", 612, "offset != INVALID_OFFSET");
      <D.20170>:
      D.20171 = it.size;
      if (D.20171 <= 39) goto <D.20172>; else goto <D.20173>;
      <D.20172>:
      D.20174 = ctx->report_error;
      if (D.20174 != 0) goto <D.20175>; else goto <D.20176>;
      <D.20175>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20171 = it.size;
        D.20177 = monoeg_g_strdup_printf ("Import table size %d is smaller than 40", D.20171);
        vinfo->info.message = D.20177;
        vinfo->exception_type = 3;
        D.20178 = ctx->errors;
        D.20179 = monoeg_g_slist_prepend (D.20178, vinfo);
        ctx->errors = D.20179;
      }
      <D.20176>:
      ctx->valid = 0;
      return;
      <D.20173>:
      D.20180 = MEM[(const guint32 *)ptr];
      D.20181 = D.20180 << 24;
      D.20180 = MEM[(const guint32 *)ptr];
      D.20182 = D.20180 >> 8;
      D.20183 = D.20182 & 65280;
      D.20184 = D.20181 | D.20183;
      D.20180 = MEM[(const guint32 *)ptr];
      D.20185 = D.20180 << 8;
      D.20186 = D.20185 & 16711680;
      D.20187 = D.20184 | D.20186;
      D.20180 = MEM[(const guint32 *)ptr];
      D.20188 = D.20180 >> 24;
      ilt_rva = D.20187 | D.20188;
      if (ilt_rva != 0) goto <D.20189>; else goto <D.20190>;
      <D.20189>:
      D.20191 = bounds_check_virtual_address (ctx, ilt_rva, 8);
      if (D.20191 == 0) goto <D.20192>; else goto <D.20193>;
      <D.20192>:
      D.20174 = ctx->report_error;
      if (D.20174 != 0) goto <D.20194>; else goto <D.20195>;
      <D.20194>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20196 = monoeg_g_strdup_printf ("Invalid Import Lookup Table rva %x", ilt_rva);
        vinfo->info.message = D.20196;
        vinfo->exception_type = 3;
        D.20178 = ctx->errors;
        D.20197 = monoeg_g_slist_prepend (D.20178, vinfo);
        ctx->errors = D.20197;
      }
      <D.20195>:
      ctx->valid = 0;
      return;
      <D.20193>:
      <D.20190>:
      D.20198 = ptr + 12;
      D.20199 = MEM[(const guint32 *)D.20198];
      D.20200 = D.20199 << 24;
      D.20198 = ptr + 12;
      D.20199 = MEM[(const guint32 *)D.20198];
      D.20201 = D.20199 >> 8;
      D.20202 = D.20201 & 65280;
      D.20203 = D.20200 | D.20202;
      D.20198 = ptr + 12;
      D.20199 = MEM[(const guint32 *)D.20198];
      D.20204 = D.20199 << 8;
      D.20205 = D.20204 & 16711680;
      D.20206 = D.20203 | D.20205;
      D.20198 = ptr + 12;
      D.20199 = MEM[(const guint32 *)D.20198];
      D.20207 = D.20199 >> 24;
      name_rva = D.20206 | D.20207;
      if (name_rva != 0) goto <D.20208>; else goto <D.20209>;
      <D.20208>:
      D.20210 = bounds_check_virtual_address (ctx, name_rva, 12);
      if (D.20210 == 0) goto <D.20211>; else goto <D.20212>;
      <D.20211>:
      D.20174 = ctx->report_error;
      if (D.20174 != 0) goto <D.20213>; else goto <D.20214>;
      <D.20213>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20215 = monoeg_g_strdup_printf ("Invalid Import Table Name rva %x", name_rva);
        vinfo->info.message = D.20215;
        vinfo->exception_type = 3;
        D.20178 = ctx->errors;
        D.20216 = monoeg_g_slist_prepend (D.20178, vinfo);
        ctx->errors = D.20216;
      }
      <D.20214>:
      ctx->valid = 0;
      return;
      <D.20212>:
      <D.20209>:
      D.20217 = ptr + 16;
      D.20218 = MEM[(const guint32 *)D.20217];
      D.20219 = D.20218 << 24;
      D.20217 = ptr + 16;
      D.20218 = MEM[(const guint32 *)D.20217];
      D.20220 = D.20218 >> 8;
      D.20221 = D.20220 & 65280;
      D.20222 = D.20219 | D.20221;
      D.20217 = ptr + 16;
      D.20218 = MEM[(const guint32 *)D.20217];
      D.20223 = D.20218 << 8;
      D.20224 = D.20223 & 16711680;
      D.20225 = D.20222 | D.20224;
      D.20217 = ptr + 16;
      D.20218 = MEM[(const guint32 *)D.20217];
      D.20226 = D.20218 >> 24;
      iat_rva = D.20225 | D.20226;
      if (iat_rva != 0) goto <D.20227>; else goto <D.20228>;
      <D.20227>:
      D.20229 = bounds_check_virtual_address (ctx, iat_rva, 8);
      if (D.20229 == 0) goto <D.20230>; else goto <D.20231>;
      <D.20230>:
      D.20174 = ctx->report_error;
      if (D.20174 != 0) goto <D.20232>; else goto <D.20233>;
      <D.20232>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20234 = monoeg_g_strdup_printf ("Invalid Import Address Table rva %x", iat_rva);
        vinfo->info.message = D.20234;
        vinfo->exception_type = 3;
        D.20178 = ctx->errors;
        D.20235 = monoeg_g_slist_prepend (D.20178, vinfo);
        ctx->errors = D.20235;
      }
      <D.20233>:
      ctx->valid = 0;
      return;
      <D.20231>:
      D.20236 = ctx->data_directories[12].rva;
      if (D.20236 != iat_rva) goto <D.20237>; else goto <D.20238>;
      <D.20237>:
      D.20174 = ctx->report_error;
      if (D.20174 != 0) goto <D.20239>; else goto <D.20240>;
      <D.20239>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20217 = ptr + 16;
        D.20218 = MEM[(const guint32 *)D.20217];
        D.20219 = D.20218 << 24;
        D.20217 = ptr + 16;
        D.20218 = MEM[(const guint32 *)D.20217];
        D.20220 = D.20218 >> 8;
        D.20221 = D.20220 & 65280;
        D.20222 = D.20219 | D.20221;
        D.20217 = ptr + 16;
        D.20218 = MEM[(const guint32 *)D.20217];
        D.20223 = D.20218 << 8;
        D.20224 = D.20223 & 16711680;
        D.20225 = D.20222 | D.20224;
        D.20217 = ptr + 16;
        D.20218 = MEM[(const guint32 *)D.20217];
        D.20226 = D.20218 >> 24;
        D.20241 = D.20225 | D.20226;
        D.20236 = ctx->data_directories[12].rva;
        D.20242 = monoeg_g_strdup_printf ("Import Address Table rva %x different from data directory entry %x", D.20241, D.20236);
        vinfo->info.message = D.20242;
        vinfo->exception_type = 3;
        D.20178 = ctx->errors;
        D.20243 = monoeg_g_slist_prepend (D.20178, vinfo);
        ctx->errors = D.20243;
      }
      <D.20240>:
      ctx->valid = 0;
      return;
      <D.20238>:
      <D.20228>:
      if (name_rva != 0) goto <D.20244>; else goto <D.20245>;
      <D.20244>:
      name_rva = translate_rva (ctx, name_rva);
      D.20246 = name_rva == 4294967295;
      D.20247 = (long int) D.20246;
      D.20248 = __builtin_expect (D.20247, 0);
      if (D.20248 != 0) goto <D.20249>; else goto <D.20250>;
      <D.20249>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "metadata-verify.c", 636, "name_rva != INVALID_OFFSET");
      <D.20250>:
      D.20164 = ctx->data;
      D.20251 = (sizetype) name_rva;
      ptr = D.20164 + D.20251;
      D.20252 = memcmp ("mscoree.dll", ptr, 12);
      if (D.20252 != 0) goto <D.20253>; else goto <D.20254>;
      <D.20253>:
      {
        char name[12];

        try
          {
            memcpy (&name, ptr, 12);
            name[11] = 0;
            D.20174 = ctx->report_error;
            if (D.20174 != 0) goto <D.20255>; else goto <D.20256>;
            <D.20255>:
            {
              struct MonoVerifyInfoExtended * vinfo;

              vinfo = monoeg_malloc (24);
              vinfo->info.status = 1;
              D.20257 = monoeg_g_strdup_printf ("Invalid Import Table Name: \'%s\'", &name);
              vinfo->info.message = D.20257;
              vinfo->exception_type = 3;
              D.20178 = ctx->errors;
              D.20258 = monoeg_g_slist_prepend (D.20178, vinfo);
              ctx->errors = D.20258;
            }
            <D.20256>:
            ctx->valid = 0;
            return;
          }
        finally
          {
            name = {CLOBBER};
          }
      }
      <D.20254>:
      <D.20245>:
      if (ilt_rva != 0) goto <D.20259>; else goto <D.20260>;
      <D.20259>:
      verify_hint_name_table (ctx, ilt_rva, "Import Lookup Table");
      D.20261 = ctx->valid;
      if (D.20261 == 0) goto <D.20262>; else goto <D.20263>;
      <D.20262>:
      return;
      <D.20263>:
      <D.20260>:
      if (iat_rva != 0) goto <D.20264>; else goto <D.20265>;
      <D.20264>:
      verify_hint_name_table (ctx, iat_rva, "Import Address Table");
      <D.20265>:
    }
  finally
    {
      it = {CLOBBER};
    }
}


__attribute__((__artificial__, __gnu_inline__, __always_inline__, __nothrow__, __leaf__))
memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.20270;
  long unsigned int D.20271;

  D.20271 = __builtin_object_size (__dest, 0);
  D.20270 = __builtin___memcpy_chk (__dest, __src, __len, D.20271);
  return D.20270;
}


verify_hint_name_table (struct VerifyContext * ctx, guint32 import_rva, const char * table_name)
{
  _Bool D.20273;
  long int D.20274;
  long int D.20275;
  const char * D.20278;
  sizetype D.20279;
  const char * D.20280;
  unsigned int D.20281;
  unsigned int D.20282;
  unsigned int D.20283;
  unsigned int D.20284;
  unsigned int D.20285;
  unsigned int D.20286;
  unsigned int D.20287;
  unsigned int D.20288;
  unsigned int D.20289;
  int D.20290;
  int D.20293;
  gchar * D.20296;
  struct GSList * D.20297;
  struct GSList * D.20298;
  _Bool D.20299;
  long int D.20300;
  long int D.20301;
  sizetype D.20304;
  sizetype D.20305;
  int D.20306;
  int D.20309;
  gchar * D.20314;
  struct GSList * D.20315;
  const char * ptr;
  guint32 hint_table_rva;

  import_rva = translate_rva (ctx, import_rva);
  D.20273 = import_rva == 4294967295;
  D.20274 = (long int) D.20273;
  D.20275 = __builtin_expect (D.20274, 0);
  if (D.20275 != 0) goto <D.20276>; else goto <D.20277>;
  <D.20276>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "metadata-verify.c", 586, "import_rva != INVALID_OFFSET");
  <D.20277>:
  D.20278 = ctx->data;
  D.20279 = (sizetype) import_rva;
  D.20280 = D.20278 + D.20279;
  D.20281 = MEM[(const guint32 *)D.20280];
  D.20282 = D.20281 << 24;
  D.20278 = ctx->data;
  D.20279 = (sizetype) import_rva;
  D.20280 = D.20278 + D.20279;
  D.20281 = MEM[(const guint32 *)D.20280];
  D.20283 = D.20281 >> 8;
  D.20284 = D.20283 & 65280;
  D.20285 = D.20282 | D.20284;
  D.20278 = ctx->data;
  D.20279 = (sizetype) import_rva;
  D.20280 = D.20278 + D.20279;
  D.20281 = MEM[(const guint32 *)D.20280];
  D.20286 = D.20281 << 8;
  D.20287 = D.20286 & 16711680;
  D.20288 = D.20285 | D.20287;
  D.20278 = ctx->data;
  D.20279 = (sizetype) import_rva;
  D.20280 = D.20278 + D.20279;
  D.20281 = MEM[(const guint32 *)D.20280];
  D.20289 = D.20281 >> 24;
  hint_table_rva = D.20288 | D.20289;
  D.20290 = bounds_check_virtual_address (ctx, hint_table_rva, 14);
  if (D.20290 == 0) goto <D.20291>; else goto <D.20292>;
  <D.20291>:
  D.20293 = ctx->report_error;
  if (D.20293 != 0) goto <D.20294>; else goto <D.20295>;
  <D.20294>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.20296 = monoeg_g_strdup_printf ("Invalid Hint/Name rva %d for %s", hint_table_rva, table_name);
    vinfo->info.message = D.20296;
    vinfo->exception_type = 3;
    D.20297 = ctx->errors;
    D.20298 = monoeg_g_slist_prepend (D.20297, vinfo);
    ctx->errors = D.20298;
  }
  <D.20295>:
  ctx->valid = 0;
  return;
  <D.20292>:
  hint_table_rva = translate_rva (ctx, hint_table_rva);
  D.20299 = hint_table_rva == 4294967295;
  D.20300 = (long int) D.20299;
  D.20301 = __builtin_expect (D.20300, 0);
  if (D.20301 != 0) goto <D.20302>; else goto <D.20303>;
  <D.20302>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "metadata-verify.c", 593, "hint_table_rva != INVALID_OFFSET");
  <D.20303>:
  D.20278 = ctx->data;
  D.20304 = (sizetype) hint_table_rva;
  D.20305 = D.20304 + 2;
  ptr = D.20278 + D.20305;
  D.20306 = memcmp ("_CorExeMain", ptr, 12);
  if (D.20306 != 0) goto <D.20307>; else goto <D.20308>;
  <D.20307>:
  D.20309 = memcmp ("_CorDllMain", ptr, 12);
  if (D.20309 != 0) goto <D.20310>; else goto <D.20311>;
  <D.20310>:
  {
    char name[12];

    try
      {
        memcpy (&name, ptr, 12);
        name[11] = 0;
        D.20293 = ctx->report_error;
        if (D.20293 != 0) goto <D.20312>; else goto <D.20313>;
        <D.20312>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20314 = monoeg_g_strdup_printf ("Invalid Hint / Name: \'%s\'", &name);
          vinfo->info.message = D.20314;
          vinfo->exception_type = 3;
          D.20297 = ctx->errors;
          D.20315 = monoeg_g_slist_prepend (D.20297, vinfo);
          ctx->errors = D.20315;
        }
        <D.20313>:
        ctx->valid = 0;
        return;
      }
    finally
      {
        name = {CLOBBER};
      }
  }
  <D.20311>:
  <D.20308>:
}


verify_resources_table (struct VerifyContext * ctx)
{
  unsigned int D.20318;
  unsigned int D.20321;
  int D.20324;
  gchar * D.20327;
  struct GSList * D.20328;
  struct GSList * D.20329;
  const char * D.20330;
  sizetype D.20331;
  sizetype D.20332;
  _Bool D.20333;
  long int D.20334;
  long int D.20335;
  const char * D.20338;
  short unsigned int D.20339;
  short unsigned int D.20340;
  signed short D.20341;
  int D.20342;
  int D.20343;
  signed short D.20344;
  signed short D.20345;
  const char * D.20346;
  short unsigned int D.20347;
  short unsigned int D.20348;
  signed short D.20349;
  int D.20350;
  int D.20351;
  signed short D.20352;
  signed short D.20353;
  int D.20354;
  int D.20355;
  int D.20356;
  int D.20357;
  int D.20358;
  unsigned int D.20359;
  gchar * D.20364;
  struct GSList * D.20365;
  struct DataDirectory it;
  guint32 offset;
  guint16 named_entries;
  guint16 id_entries;
  const char * ptr;
  const char * root;
  const char * end;

  try
    {
      it = ctx->data_directories[2];
      D.20318 = it.rva;
      if (D.20318 == 0) goto <D.20319>; else goto <D.20320>;
      <D.20319>:
      return;
      <D.20320>:
      D.20321 = it.size;
      if (D.20321 <= 15) goto <D.20322>; else goto <D.20323>;
      <D.20322>:
      D.20324 = ctx->report_error;
      if (D.20324 != 0) goto <D.20325>; else goto <D.20326>;
      <D.20325>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20321 = it.size;
        D.20327 = monoeg_g_strdup_printf ("Resource section is too small, must be at least 16 bytes long but it\'s %d long", D.20321);
        vinfo->info.message = D.20327;
        vinfo->exception_type = 3;
        D.20328 = ctx->errors;
        D.20329 = monoeg_g_slist_prepend (D.20328, vinfo);
        ctx->errors = D.20329;
      }
      <D.20326>:
      ctx->valid = 0;
      return;
      <D.20323>:
      offset = it.translated_offset;
      D.20330 = ctx->data;
      D.20331 = (sizetype) offset;
      ptr = D.20330 + D.20331;
      root = ptr;
      D.20321 = it.size;
      D.20332 = (sizetype) D.20321;
      end = root + D.20332;
      D.20333 = offset == 4294967295;
      D.20334 = (long int) D.20333;
      D.20335 = __builtin_expect (D.20334, 0);
      if (D.20335 != 0) goto <D.20336>; else goto <D.20337>;
      <D.20336>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "metadata-verify.c", 674, "offset != INVALID_OFFSET");
      <D.20337>:
      D.20338 = ptr + 12;
      D.20339 = MEM[(const guint16 *)D.20338];
      D.20340 = D.20339 >> 8;
      D.20341 = (signed short) D.20340;
      D.20338 = ptr + 12;
      D.20339 = MEM[(const guint16 *)D.20338];
      D.20342 = (int) D.20339;
      D.20343 = D.20342 << 8;
      D.20344 = (signed short) D.20343;
      D.20345 = D.20341 | D.20344;
      named_entries = (guint16) D.20345;
      D.20346 = ptr + 14;
      D.20347 = MEM[(const guint16 *)D.20346];
      D.20348 = D.20347 >> 8;
      D.20349 = (signed short) D.20348;
      D.20346 = ptr + 14;
      D.20347 = MEM[(const guint16 *)D.20346];
      D.20350 = (int) D.20347;
      D.20351 = D.20350 << 8;
      D.20352 = (signed short) D.20351;
      D.20353 = D.20349 | D.20352;
      id_entries = (guint16) D.20353;
      D.20354 = (int) named_entries;
      D.20355 = (int) id_entries;
      D.20356 = D.20354 + D.20355;
      D.20357 = D.20356 + 2;
      D.20358 = D.20357 * 8;
      D.20359 = (unsigned int) D.20358;
      D.20321 = it.size;
      if (D.20359 > D.20321) goto <D.20360>; else goto <D.20361>;
      <D.20360>:
      D.20324 = ctx->report_error;
      if (D.20324 != 0) goto <D.20362>; else goto <D.20363>;
      <D.20362>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20354 = (int) named_entries;
        D.20355 = (int) id_entries;
        D.20356 = D.20354 + D.20355;
        D.20321 = it.size;
        D.20364 = monoeg_g_strdup_printf ("Resource section is too small, the number of entries (%d) doesn\'t fit on it\'s size %d", D.20356, D.20321);
        vinfo->info.message = D.20364;
        vinfo->exception_type = 3;
        D.20328 = ctx->errors;
        D.20365 = monoeg_g_slist_prepend (D.20328, vinfo);
        ctx->errors = D.20365;
      }
      <D.20363>:
      ctx->valid = 0;
      return;
      <D.20361>:
    }
  finally
    {
      it = {CLOBBER};
    }
}


cleanup_context (struct VerifyContext * ctx, struct GSList * * error_list)
{
  struct SectionHeader * D.20369;
  struct GSList * D.20372;
  gboolean D.20374;

  D.20369 = ctx->sections;
  monoeg_g_free (D.20369);
  if (error_list != 0B) goto <D.20370>; else goto <D.20371>;
  <D.20370>:
  D.20372 = ctx->errors;
  *error_list = D.20372;
  goto <D.20373>;
  <D.20371>:
  D.20372 = ctx->errors;
  mono_free_verify_list (D.20372);
  <D.20373>:
  D.20374 = ctx->valid;
  return D.20374;
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_cli_data (struct MonoImage * image, struct GSList * * error_list)
{
  int D.20376;
  gboolean D.20379;
  _Bool D.20380;
  int D.20381;
  int D.20382;
  struct VerifyContext ctx;
  void cleanup = <<< error >>>;

  try
    {
      D.20376 = mono_verifier_is_enabled_for_image (image);
      if (D.20376 == 0) goto <D.20377>; else goto <D.20378>;
      <D.20377>:
      D.20379 = 1;
      return D.20379;
      <D.20378>:
      D.20380 = error_list != 0B;
      D.20381 = (int) D.20380;
      init_verify_context (&ctx, image, D.20381);
      ctx.stage = 1;
      verify_cli_header (&ctx);
      D.20382 = ctx.valid;
      if (D.20382 == 0) goto cleanup; else goto <D.20383>;
      <D.20383>:
      verify_metadata_header (&ctx);
      D.20382 = ctx.valid;
      if (D.20382 == 0) goto cleanup; else goto <D.20384>;
      <D.20384>:
      verify_tables_schema (&ctx);
      cleanup:
      D.20379 = cleanup_context (&ctx, error_list);
      return D.20379;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


verify_cli_header (struct VerifyContext * ctx)
{
  unsigned int D.20387;
  int D.20390;
  gchar * D.20393;
  struct GSList * D.20394;
  struct GSList * D.20395;
  unsigned int D.20396;
  gchar * D.20401;
  struct GSList * D.20402;
  const char * D.20403;
  sizetype D.20404;
  _Bool D.20405;
  long int D.20406;
  long int D.20407;
  short unsigned int D.20410;
  short unsigned int D.20411;
  int D.20412;
  int D.20413;
  int D.20414;
  int D.20415;
  int D.20416;
  gchar * D.20421;
  struct GSList * D.20422;
  const char * D.20423;
  unsigned int D.20424;
  unsigned int D.20425;
  unsigned int D.20426;
  unsigned int D.20427;
  unsigned int D.20428;
  unsigned int D.20429;
  unsigned int D.20430;
  unsigned int D.20431;
  unsigned int D.20432;
  unsigned int D.20433;
  const char * D.20434;
  unsigned int D.20435;
  unsigned int D.20436;
  unsigned int D.20437;
  unsigned int D.20438;
  unsigned int D.20439;
  unsigned int D.20440;
  unsigned int D.20441;
  unsigned int D.20442;
  unsigned int D.20443;
  unsigned int D.20444;
  int D.20445;
  gchar * D.20450;
  struct GSList * D.20451;
  gchar * D.20457;
  struct GSList * D.20458;
  const char * D.20459;
  unsigned int D.20460;
  unsigned int D.20461;
  unsigned int D.20462;
  unsigned int D.20463;
  unsigned int D.20464;
  unsigned int D.20465;
  unsigned int D.20466;
  unsigned int D.20467;
  unsigned int D.20468;
  unsigned int D.20469;
  unsigned int D.20470;
  gchar * D.20475;
  struct GSList * D.20476;
  unsigned int D.20477;
  unsigned int D.20478;
  unsigned int D.20479;
  unsigned int D.20480;
  unsigned int D.20481;
  unsigned int D.20482;
  unsigned int D.20483;
  unsigned int D.20484;
  unsigned int D.20485;
  const char * D.20486;
  unsigned int D.20487;
  unsigned int D.20488;
  unsigned int D.20489;
  unsigned int D.20490;
  unsigned int D.20491;
  unsigned int D.20492;
  unsigned int D.20493;
  unsigned int D.20494;
  unsigned int D.20495;
  int D.20498;
  gchar * D.20503;
  struct GSList * D.20504;
  gchar * D.20511;
  struct GSList * D.20512;
  struct DataDirectory it;
  guint32 offset;
  const char * ptr;
  int i;

  try
    {
      it = get_data_dir (ctx, 14); [return slot optimization]
      D.20387 = it.rva;
      if (D.20387 == 0) goto <D.20388>; else goto <D.20389>;
      <D.20388>:
      D.20390 = ctx->report_error;
      if (D.20390 != 0) goto <D.20391>; else goto <D.20392>;
      <D.20391>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20393 = monoeg_g_strdup_printf ("CLI header missing");
        vinfo->info.message = D.20393;
        vinfo->exception_type = 3;
        D.20394 = ctx->errors;
        D.20395 = monoeg_g_slist_prepend (D.20394, vinfo);
        ctx->errors = D.20395;
      }
      <D.20392>:
      ctx->valid = 0;
      return;
      <D.20389>:
      D.20396 = it.size;
      if (D.20396 != 72) goto <D.20397>; else goto <D.20398>;
      <D.20397>:
      D.20390 = ctx->report_error;
      if (D.20390 != 0) goto <D.20399>; else goto <D.20400>;
      <D.20399>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20396 = it.size;
        D.20401 = monoeg_g_strdup_printf ("Invalid cli header size in data directory %d must be 72", D.20396);
        vinfo->info.message = D.20401;
        vinfo->exception_type = 3;
        D.20394 = ctx->errors;
        D.20402 = monoeg_g_slist_prepend (D.20394, vinfo);
        ctx->errors = D.20402;
      }
      <D.20400>:
      ctx->valid = 0;
      return;
      <D.20398>:
      offset = it.translated_offset;
      D.20403 = ctx->data;
      D.20404 = (sizetype) offset;
      ptr = D.20403 + D.20404;
      D.20405 = offset == 4294967295;
      D.20406 = (long int) D.20405;
      D.20407 = __builtin_expect (D.20406, 0);
      if (D.20407 != 0) goto <D.20408>; else goto <D.20409>;
      <D.20408>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "metadata-verify.c", 721, "offset != INVALID_OFFSET");
      <D.20409>:
      D.20410 = MEM[(const guint16 *)ptr];
      D.20411 = D.20410 >> 8;
      D.20412 = (int) D.20411;
      D.20410 = MEM[(const guint16 *)ptr];
      D.20413 = (int) D.20410;
      D.20414 = D.20413 << 8;
      D.20415 = D.20414 & 65535;
      D.20416 = D.20412 | D.20415;
      if (D.20416 != 72) goto <D.20417>; else goto <D.20418>;
      <D.20417>:
      D.20390 = ctx->report_error;
      if (D.20390 != 0) goto <D.20419>; else goto <D.20420>;
      <D.20419>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20410 = MEM[(const guint16 *)ptr];
        D.20411 = D.20410 >> 8;
        D.20412 = (int) D.20411;
        D.20410 = MEM[(const guint16 *)ptr];
        D.20413 = (int) D.20410;
        D.20414 = D.20413 << 8;
        D.20415 = D.20414 & 65535;
        D.20416 = D.20412 | D.20415;
        D.20421 = monoeg_g_strdup_printf ("Invalid cli header size %d must be 72", D.20416);
        vinfo->info.message = D.20421;
        vinfo->exception_type = 3;
        D.20394 = ctx->errors;
        D.20422 = monoeg_g_slist_prepend (D.20394, vinfo);
        ctx->errors = D.20422;
      }
      <D.20420>:
      ctx->valid = 0;
      return;
      <D.20418>:
      D.20423 = ptr + 8;
      D.20424 = MEM[(const guint32 *)D.20423];
      D.20425 = D.20424 << 24;
      D.20423 = ptr + 8;
      D.20424 = MEM[(const guint32 *)D.20423];
      D.20426 = D.20424 >> 8;
      D.20427 = D.20426 & 65280;
      D.20428 = D.20425 | D.20427;
      D.20423 = ptr + 8;
      D.20424 = MEM[(const guint32 *)D.20423];
      D.20429 = D.20424 << 8;
      D.20430 = D.20429 & 16711680;
      D.20431 = D.20428 | D.20430;
      D.20423 = ptr + 8;
      D.20424 = MEM[(const guint32 *)D.20423];
      D.20432 = D.20424 >> 24;
      D.20433 = D.20431 | D.20432;
      D.20434 = ptr + 12;
      D.20435 = MEM[(const guint32 *)D.20434];
      D.20436 = D.20435 << 24;
      D.20434 = ptr + 12;
      D.20435 = MEM[(const guint32 *)D.20434];
      D.20437 = D.20435 >> 8;
      D.20438 = D.20437 & 65280;
      D.20439 = D.20436 | D.20438;
      D.20434 = ptr + 12;
      D.20435 = MEM[(const guint32 *)D.20434];
      D.20440 = D.20435 << 8;
      D.20441 = D.20440 & 16711680;
      D.20442 = D.20439 | D.20441;
      D.20434 = ptr + 12;
      D.20435 = MEM[(const guint32 *)D.20434];
      D.20443 = D.20435 >> 24;
      D.20444 = D.20442 | D.20443;
      D.20445 = bounds_check_virtual_address (ctx, D.20433, D.20444);
      if (D.20445 == 0) goto <D.20446>; else goto <D.20447>;
      <D.20446>:
      D.20390 = ctx->report_error;
      if (D.20390 != 0) goto <D.20448>; else goto <D.20449>;
      <D.20448>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20423 = ptr + 8;
        D.20424 = MEM[(const guint32 *)D.20423];
        D.20425 = D.20424 << 24;
        D.20423 = ptr + 8;
        D.20424 = MEM[(const guint32 *)D.20423];
        D.20426 = D.20424 >> 8;
        D.20427 = D.20426 & 65280;
        D.20428 = D.20425 | D.20427;
        D.20423 = ptr + 8;
        D.20424 = MEM[(const guint32 *)D.20423];
        D.20429 = D.20424 << 8;
        D.20430 = D.20429 & 16711680;
        D.20431 = D.20428 | D.20430;
        D.20423 = ptr + 8;
        D.20424 = MEM[(const guint32 *)D.20423];
        D.20432 = D.20424 >> 24;
        D.20433 = D.20431 | D.20432;
        D.20434 = ptr + 12;
        D.20435 = MEM[(const guint32 *)D.20434];
        D.20436 = D.20435 << 24;
        D.20434 = ptr + 12;
        D.20435 = MEM[(const guint32 *)D.20434];
        D.20437 = D.20435 >> 8;
        D.20438 = D.20437 & 65280;
        D.20439 = D.20436 | D.20438;
        D.20434 = ptr + 12;
        D.20435 = MEM[(const guint32 *)D.20434];
        D.20440 = D.20435 << 8;
        D.20441 = D.20440 & 16711680;
        D.20442 = D.20439 | D.20441;
        D.20434 = ptr + 12;
        D.20435 = MEM[(const guint32 *)D.20434];
        D.20443 = D.20435 >> 24;
        D.20444 = D.20442 | D.20443;
        D.20450 = monoeg_g_strdup_printf ("Invalid medatata section rva/size pair %x/%x", D.20433, D.20444);
        vinfo->info.message = D.20450;
        vinfo->exception_type = 3;
        D.20394 = ctx->errors;
        D.20451 = monoeg_g_slist_prepend (D.20394, vinfo);
        ctx->errors = D.20451;
      }
      <D.20449>:
      ctx->valid = 0;
      return;
      <D.20447>:
      D.20423 = ptr + 8;
      D.20424 = MEM[(const guint32 *)D.20423];
      D.20425 = D.20424 << 24;
      D.20423 = ptr + 8;
      D.20424 = MEM[(const guint32 *)D.20423];
      D.20426 = D.20424 >> 8;
      D.20427 = D.20426 & 65280;
      D.20428 = D.20425 | D.20427;
      D.20423 = ptr + 8;
      D.20424 = MEM[(const guint32 *)D.20423];
      D.20429 = D.20424 << 8;
      D.20430 = D.20429 & 16711680;
      D.20431 = D.20428 | D.20430;
      D.20423 = ptr + 8;
      D.20424 = MEM[(const guint32 *)D.20423];
      D.20432 = D.20424 >> 24;
      D.20433 = D.20431 | D.20432;
      if (D.20433 == 0) goto <D.20452>; else goto <D.20454>;
      <D.20454>:
      D.20434 = ptr + 12;
      D.20435 = MEM[(const guint32 *)D.20434];
      D.20436 = D.20435 << 24;
      D.20434 = ptr + 12;
      D.20435 = MEM[(const guint32 *)D.20434];
      D.20437 = D.20435 >> 8;
      D.20438 = D.20437 & 65280;
      D.20439 = D.20436 | D.20438;
      D.20434 = ptr + 12;
      D.20435 = MEM[(const guint32 *)D.20434];
      D.20440 = D.20435 << 8;
      D.20441 = D.20440 & 16711680;
      D.20442 = D.20439 | D.20441;
      D.20434 = ptr + 12;
      D.20435 = MEM[(const guint32 *)D.20434];
      D.20443 = D.20435 >> 24;
      D.20444 = D.20442 | D.20443;
      if (D.20444 == 0) goto <D.20452>; else goto <D.20453>;
      <D.20452>:
      D.20390 = ctx->report_error;
      if (D.20390 != 0) goto <D.20455>; else goto <D.20456>;
      <D.20455>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20457 = monoeg_g_strdup_printf ("Missing medatata section in the CLI header");
        vinfo->info.message = D.20457;
        vinfo->exception_type = 3;
        D.20394 = ctx->errors;
        D.20458 = monoeg_g_slist_prepend (D.20394, vinfo);
        ctx->errors = D.20458;
      }
      <D.20456>:
      ctx->valid = 0;
      return;
      <D.20453>:
      D.20459 = ptr + 16;
      D.20460 = MEM[(const guint32 *)D.20459];
      D.20461 = D.20460 << 24;
      D.20459 = ptr + 16;
      D.20460 = MEM[(const guint32 *)D.20459];
      D.20462 = D.20460 >> 8;
      D.20463 = D.20462 & 65280;
      D.20464 = D.20461 | D.20463;
      D.20459 = ptr + 16;
      D.20460 = MEM[(const guint32 *)D.20459];
      D.20465 = D.20460 << 8;
      D.20466 = D.20465 & 16711680;
      D.20467 = D.20464 | D.20466;
      D.20459 = ptr + 16;
      D.20460 = MEM[(const guint32 *)D.20459];
      D.20468 = D.20460 >> 24;
      D.20469 = D.20467 | D.20468;
      D.20470 = D.20469 & 4294901748;
      if (D.20470 != 0) goto <D.20471>; else goto <D.20472>;
      <D.20471>:
      D.20390 = ctx->report_error;
      if (D.20390 != 0) goto <D.20473>; else goto <D.20474>;
      <D.20473>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20475 = monoeg_g_strdup_printf ("Invalid CLI header flags");
        vinfo->info.message = D.20475;
        vinfo->exception_type = 3;
        D.20394 = ctx->errors;
        D.20476 = monoeg_g_slist_prepend (D.20394, vinfo);
        ctx->errors = D.20476;
      }
      <D.20474>:
      ctx->valid = 0;
      return;
      <D.20472>:
      ptr = ptr + 24;
      i = 0;
      goto <D.18058>;
      <D.18057>:
      {
        guint32 rva;
        guint32 size;

        D.20477 = MEM[(const guint32 *)ptr];
        D.20478 = D.20477 << 24;
        D.20477 = MEM[(const guint32 *)ptr];
        D.20479 = D.20477 >> 8;
        D.20480 = D.20479 & 65280;
        D.20481 = D.20478 | D.20480;
        D.20477 = MEM[(const guint32 *)ptr];
        D.20482 = D.20477 << 8;
        D.20483 = D.20482 & 16711680;
        D.20484 = D.20481 | D.20483;
        D.20477 = MEM[(const guint32 *)ptr];
        D.20485 = D.20477 >> 24;
        rva = D.20484 | D.20485;
        D.20486 = ptr + 4;
        D.20487 = MEM[(const guint32 *)D.20486];
        D.20488 = D.20487 << 24;
        D.20486 = ptr + 4;
        D.20487 = MEM[(const guint32 *)D.20486];
        D.20489 = D.20487 >> 8;
        D.20490 = D.20489 & 65280;
        D.20491 = D.20488 | D.20490;
        D.20486 = ptr + 4;
        D.20487 = MEM[(const guint32 *)D.20486];
        D.20492 = D.20487 << 8;
        D.20493 = D.20492 & 16711680;
        D.20494 = D.20491 | D.20493;
        D.20486 = ptr + 4;
        D.20487 = MEM[(const guint32 *)D.20486];
        D.20495 = D.20487 >> 24;
        size = D.20494 | D.20495;
        if (rva != 0) goto <D.20496>; else goto <D.20497>;
        <D.20496>:
        D.20498 = bounds_check_virtual_address (ctx, rva, size);
        if (D.20498 == 0) goto <D.20499>; else goto <D.20500>;
        <D.20499>:
        D.20390 = ctx->report_error;
        if (D.20390 != 0) goto <D.20501>; else goto <D.20502>;
        <D.20501>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20503 = monoeg_g_strdup_printf ("Invalid cli section %i rva/size pair %x/%x", i, rva, size);
          vinfo->info.message = D.20503;
          vinfo->exception_type = 3;
          D.20394 = ctx->errors;
          D.20504 = monoeg_g_slist_prepend (D.20394, vinfo);
          ctx->errors = D.20504;
        }
        <D.20502>:
        ctx->valid = 0;
        return;
        <D.20500>:
        <D.20497>:
        ptr = ptr + 8;
        if (rva != 0) goto <D.20505>; else goto <D.20506>;
        <D.20505>:
        if (i > 1) goto <D.20507>; else goto <D.20508>;
        <D.20507>:
        D.20390 = ctx->report_error;
        if (D.20390 != 0) goto <D.20509>; else goto <D.20510>;
        <D.20509>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20511 = monoeg_g_strdup_printf ("Metadata verifier doesn\'t support cli header section %d", i);
          vinfo->info.message = D.20511;
          vinfo->exception_type = 3;
          D.20394 = ctx->errors;
          D.20512 = monoeg_g_slist_prepend (D.20394, vinfo);
          ctx->errors = D.20512;
        }
        <D.20510>:
        ctx->valid = 0;
        return;
        <D.20508>:
        <D.20506>:
      }
      i = i + 1;
      <D.18058>:
      if (i <= 5) goto <D.18057>; else goto <D.18059>;
      <D.18059>:
    }
  finally
    {
      it = {CLOBBER};
    }
}


get_data_dir (struct VerifyContext * ctx, int idx)
{
  struct MonoImage * D.20517;
  long unsigned int D.20518;
  long unsigned int D.20519;
  unsigned int D.20520;
  unsigned int D.20521;
  unsigned int D.20522;
  unsigned int D.20523;
  struct MonoCLIImageInfo * iinfo;
  struct MonoPEDirEntry * entry;
  struct DataDirectory res;

  try
    {
      D.20517 = ctx->image;
      iinfo = D.20517->image_info;
      entry = &iinfo->cli_header.datadir.pe_export_table;
      D.20518 = (long unsigned int) idx;
      D.20519 = D.20518 * 8;
      entry = entry + D.20519;
      D.20520 = entry->rva;
      res.rva = D.20520;
      D.20521 = entry->size;
      res.size = D.20521;
      D.20522 = res.rva;
      D.20523 = translate_rva (ctx, D.20522);
      res.translated_offset = D.20523;
      <retval> = res;
      return <retval>;
    }
  finally
    {
      res = {CLOBBER};
    }
}


verify_metadata_header (struct VerifyContext * ctx)
{
  const char * D.20526;
  sizetype D.20527;
  _Bool D.20528;
  long int D.20529;
  long int D.20530;
  unsigned int D.20533;
  unsigned int D.20534;
  unsigned int D.20535;
  unsigned int D.20536;
  unsigned int D.20537;
  unsigned int D.20538;
  unsigned int D.20539;
  unsigned int D.20540;
  unsigned int D.20541;
  unsigned int D.20542;
  unsigned int D.20543;
  unsigned int D.20546;
  int D.20549;
  gchar * D.20552;
  struct GSList * D.20553;
  struct GSList * D.20554;
  gchar * D.20559;
  struct GSList * D.20560;
  const char * D.20561;
  unsigned int D.20562;
  unsigned int D.20563;
  unsigned int D.20564;
  unsigned int D.20565;
  unsigned int D.20566;
  unsigned int D.20567;
  unsigned int D.20568;
  unsigned int D.20569;
  unsigned int D.20570;
  unsigned int D.20571;
  unsigned int D.20572;
  unsigned int D.20573;
  int D.20574;
  unsigned int D.20579;
  unsigned int D.20580;
  unsigned int D.20581;
  gchar * D.20582;
  struct GSList * D.20583;
  const char * D.20584;
  short unsigned int D.20585;
  short unsigned int D.20586;
  int D.20587;
  int D.20588;
  int D.20589;
  int D.20590;
  int D.20591;
  gchar * D.20596;
  struct GSList * D.20597;
  int D.20598;
  unsigned int D.20603;
  gchar * D.20604;
  struct GSList * D.20605;
  const char * D.20606;
  unsigned int D.20607;
  unsigned int D.20608;
  unsigned int D.20609;
  unsigned int D.20610;
  unsigned int D.20611;
  unsigned int D.20612;
  unsigned int D.20613;
  unsigned int D.20614;
  unsigned int D.20615;
  int D.20616;
  gchar * D.20621;
  struct GSList * D.20622;
  unsigned int offset.5;
  int D.20624;
  gchar * D.20629;
  struct GSList * D.20630;
  sizetype D.20631;
  const char * D.20632;
  char D.20633;
  gchar * D.20639;
  struct GSList * D.20640;
  _Bool iftmp.6;
  long unsigned int D.20645;
  int D.20647;
  int D.20648;
  _Bool iftmp.7;
  long unsigned int D.20656;
  int D.20658;
  int D.20659;
  _Bool iftmp.8;
  long unsigned int D.20667;
  int D.20669;
  int D.20670;
  _Bool iftmp.9;
  long unsigned int D.20678;
  int D.20680;
  int D.20681;
  _Bool iftmp.10;
  long unsigned int D.20689;
  int D.20691;
  int D.20692;
  int D.20696;
  gchar * D.20699;
  struct GSList * D.20700;
  unsigned int D.20701;
  gchar * D.20706;
  struct GSList * D.20707;
  unsigned int i.11;
  unsigned int D.20709;
  gchar * D.20714;
  struct GSList * D.20715;
  unsigned int D.20716;
  gchar * D.20721;
  struct GSList * D.20722;
  int i;
  struct DataDirectory it;
  guint32 offset;
  guint32 section_count;
  const char * ptr;

  try
    {
      it = get_data_dir (ctx, 14); [return slot optimization]
      offset = it.translated_offset;
      D.20526 = ctx->data;
      D.20527 = (sizetype) offset;
      ptr = D.20526 + D.20527;
      D.20528 = offset == 4294967295;
      D.20529 = (long int) D.20528;
      D.20530 = __builtin_expect (D.20529, 0);
      if (D.20530 != 0) goto <D.20531>; else goto <D.20532>;
      <D.20531>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "metadata-verify.c", 769, "offset != INVALID_OFFSET");
      <D.20532>:
      ptr = ptr + 8;
      D.20533 = MEM[(const guint32 *)ptr];
      D.20534 = D.20533 << 24;
      D.20533 = MEM[(const guint32 *)ptr];
      D.20535 = D.20533 >> 8;
      D.20536 = D.20535 & 65280;
      D.20537 = D.20534 | D.20536;
      D.20533 = MEM[(const guint32 *)ptr];
      D.20538 = D.20533 << 8;
      D.20539 = D.20538 & 16711680;
      D.20540 = D.20537 | D.20539;
      D.20533 = MEM[(const guint32 *)ptr];
      D.20541 = D.20533 >> 24;
      D.20542 = D.20540 | D.20541;
      it.rva = D.20542;
      ptr = ptr + 4;
      D.20533 = MEM[(const guint32 *)ptr];
      D.20534 = D.20533 << 24;
      D.20533 = MEM[(const guint32 *)ptr];
      D.20535 = D.20533 >> 8;
      D.20536 = D.20535 & 65280;
      D.20537 = D.20534 | D.20536;
      D.20533 = MEM[(const guint32 *)ptr];
      D.20538 = D.20533 << 8;
      D.20539 = D.20538 & 16711680;
      D.20540 = D.20537 | D.20539;
      D.20533 = MEM[(const guint32 *)ptr];
      D.20541 = D.20533 >> 24;
      D.20542 = D.20540 | D.20541;
      it.size = D.20542;
      D.20543 = it.rva;
      offset = translate_rva (ctx, D.20543);
      it.translated_offset = offset;
      D.20526 = ctx->data;
      D.20527 = (sizetype) offset;
      ptr = D.20526 + D.20527;
      D.20528 = offset == 4294967295;
      D.20529 = (long int) D.20528;
      D.20530 = __builtin_expect (D.20529, 0);
      if (D.20530 != 0) goto <D.20544>; else goto <D.20545>;
      <D.20544>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "metadata-verify.c", 779, "offset != INVALID_OFFSET");
      <D.20545>:
      D.20546 = it.size;
      if (D.20546 <= 19) goto <D.20547>; else goto <D.20548>;
      <D.20547>:
      D.20549 = ctx->report_error;
      if (D.20549 != 0) goto <D.20550>; else goto <D.20551>;
      <D.20550>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20546 = it.size;
        D.20552 = monoeg_g_strdup_printf ("Metadata root section is too small %d (at least 20 bytes required for initial decoding)", D.20546);
        vinfo->info.message = D.20552;
        vinfo->exception_type = 3;
        D.20553 = ctx->errors;
        D.20554 = monoeg_g_slist_prepend (D.20553, vinfo);
        ctx->errors = D.20554;
      }
      <D.20551>:
      ctx->valid = 0;
      return;
      <D.20548>:
      D.20533 = MEM[(const guint32 *)ptr];
      D.20534 = D.20533 << 24;
      D.20533 = MEM[(const guint32 *)ptr];
      D.20535 = D.20533 >> 8;
      D.20536 = D.20535 & 65280;
      D.20537 = D.20534 | D.20536;
      D.20533 = MEM[(const guint32 *)ptr];
      D.20538 = D.20533 << 8;
      D.20539 = D.20538 & 16711680;
      D.20540 = D.20537 | D.20539;
      D.20533 = MEM[(const guint32 *)ptr];
      D.20541 = D.20533 >> 24;
      D.20542 = D.20540 | D.20541;
      if (D.20542 != 1112167234) goto <D.20555>; else goto <D.20556>;
      <D.20555>:
      D.20549 = ctx->report_error;
      if (D.20549 != 0) goto <D.20557>; else goto <D.20558>;
      <D.20557>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20533 = MEM[(const guint32 *)ptr];
        D.20534 = D.20533 << 24;
        D.20533 = MEM[(const guint32 *)ptr];
        D.20535 = D.20533 >> 8;
        D.20536 = D.20535 & 65280;
        D.20537 = D.20534 | D.20536;
        D.20533 = MEM[(const guint32 *)ptr];
        D.20538 = D.20533 << 8;
        D.20539 = D.20538 & 16711680;
        D.20540 = D.20537 | D.20539;
        D.20533 = MEM[(const guint32 *)ptr];
        D.20541 = D.20533 >> 24;
        D.20542 = D.20540 | D.20541;
        D.20559 = monoeg_g_strdup_printf ("Invalid metadata signature, expected 0x424A5342 but got %08x", D.20542);
        vinfo->info.message = D.20559;
        vinfo->exception_type = 3;
        D.20553 = ctx->errors;
        D.20560 = monoeg_g_slist_prepend (D.20553, vinfo);
        ctx->errors = D.20560;
      }
      <D.20558>:
      ctx->valid = 0;
      return;
      <D.20556>:
      D.20561 = ptr + 12;
      D.20562 = MEM[(const guint32 *)D.20561];
      D.20563 = D.20562 << 24;
      D.20561 = ptr + 12;
      D.20562 = MEM[(const guint32 *)D.20561];
      D.20564 = D.20562 >> 8;
      D.20565 = D.20564 & 65280;
      D.20566 = D.20563 | D.20565;
      D.20561 = ptr + 12;
      D.20562 = MEM[(const guint32 *)D.20561];
      D.20567 = D.20562 << 8;
      D.20568 = D.20567 & 16711680;
      D.20569 = D.20566 | D.20568;
      D.20561 = ptr + 12;
      D.20562 = MEM[(const guint32 *)D.20561];
      D.20570 = D.20562 >> 24;
      D.20571 = D.20569 | D.20570;
      D.20572 = D.20571 + offset;
      D.20573 = D.20572 + 16;
      offset = pad4 (D.20573);
      D.20574 = bounds_check_datadir (&it, offset, 4);
      if (D.20574 == 0) goto <D.20575>; else goto <D.20576>;
      <D.20575>:
      D.20549 = ctx->report_error;
      if (D.20549 != 0) goto <D.20577>; else goto <D.20578>;
      <D.20577>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20546 = it.size;
        D.20579 = it.translated_offset;
        D.20580 = offset - D.20579;
        D.20581 = D.20580 + 4;
        D.20582 = monoeg_g_strdup_printf ("Metadata root section is too small %d (at least %d bytes required for flags decoding)", D.20546, D.20581);
        vinfo->info.message = D.20582;
        vinfo->exception_type = 3;
        D.20553 = ctx->errors;
        D.20583 = monoeg_g_slist_prepend (D.20553, vinfo);
        ctx->errors = D.20583;
      }
      <D.20578>:
      ctx->valid = 0;
      return;
      <D.20576>:
      D.20526 = ctx->data;
      D.20527 = (sizetype) offset;
      ptr = D.20526 + D.20527;
      D.20584 = ptr + 2;
      D.20585 = MEM[(const guint16 *)D.20584];
      D.20586 = D.20585 >> 8;
      D.20587 = (int) D.20586;
      D.20584 = ptr + 2;
      D.20585 = MEM[(const guint16 *)D.20584];
      D.20588 = (int) D.20585;
      D.20589 = D.20588 << 8;
      D.20590 = D.20589 & 65535;
      D.20591 = D.20587 | D.20590;
      section_count = (guint32) D.20591;
      if (section_count <= 1) goto <D.20592>; else goto <D.20593>;
      <D.20592>:
      D.20549 = ctx->report_error;
      if (D.20549 != 0) goto <D.20594>; else goto <D.20595>;
      <D.20594>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20596 = monoeg_g_strdup_printf ("Metadata root section must have at least 2 streams (#~ and #GUID)");
        vinfo->info.message = D.20596;
        vinfo->exception_type = 3;
        D.20553 = ctx->errors;
        D.20597 = monoeg_g_slist_prepend (D.20553, vinfo);
        ctx->errors = D.20597;
      }
      <D.20595>:
      ctx->valid = 0;
      return;
      <D.20593>:
      ptr = ptr + 4;
      offset = offset + 4;
      i = 0;
      goto <D.18090>;
      <D.18089>:
      {
        guint32 stream_off;
        guint32 stream_size;
        int string_size;
        int stream_idx;

        D.20598 = bounds_check_datadir (&it, offset, 8);
        if (D.20598 == 0) goto <D.20599>; else goto <D.20600>;
        <D.20599>:
        D.20549 = ctx->report_error;
        if (D.20549 != 0) goto <D.20601>; else goto <D.20602>;
        <D.20601>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20579 = it.translated_offset;
          D.20580 = offset - D.20579;
          D.20603 = D.20580 + 9;
          D.20604 = monoeg_g_strdup_printf ("Metadata root section is too small for initial decode of stream header %d, missing %d bytes", i, D.20603);
          vinfo->info.message = D.20604;
          vinfo->exception_type = 3;
          D.20553 = ctx->errors;
          D.20605 = monoeg_g_slist_prepend (D.20553, vinfo);
          ctx->errors = D.20605;
        }
        <D.20602>:
        ctx->valid = 0;
        return;
        <D.20600>:
        D.20579 = it.translated_offset;
        D.20533 = MEM[(const guint32 *)ptr];
        D.20534 = D.20533 << 24;
        D.20533 = MEM[(const guint32 *)ptr];
        D.20535 = D.20533 >> 8;
        D.20536 = D.20535 & 65280;
        D.20537 = D.20534 | D.20536;
        D.20533 = MEM[(const guint32 *)ptr];
        D.20538 = D.20533 << 8;
        D.20539 = D.20538 & 16711680;
        D.20540 = D.20537 | D.20539;
        D.20533 = MEM[(const guint32 *)ptr];
        D.20541 = D.20533 >> 24;
        D.20542 = D.20540 | D.20541;
        stream_off = D.20579 + D.20542;
        D.20606 = ptr + 4;
        D.20607 = MEM[(const guint32 *)D.20606];
        D.20608 = D.20607 << 24;
        D.20606 = ptr + 4;
        D.20607 = MEM[(const guint32 *)D.20606];
        D.20609 = D.20607 >> 8;
        D.20610 = D.20609 & 65280;
        D.20611 = D.20608 | D.20610;
        D.20606 = ptr + 4;
        D.20607 = MEM[(const guint32 *)D.20606];
        D.20612 = D.20607 << 8;
        D.20613 = D.20612 & 16711680;
        D.20614 = D.20611 | D.20613;
        D.20606 = ptr + 4;
        D.20607 = MEM[(const guint32 *)D.20606];
        D.20615 = D.20607 >> 24;
        stream_size = D.20614 | D.20615;
        D.20616 = bounds_check_datadir (&it, stream_off, stream_size);
        if (D.20616 == 0) goto <D.20617>; else goto <D.20618>;
        <D.20617>:
        D.20549 = ctx->report_error;
        if (D.20549 != 0) goto <D.20619>; else goto <D.20620>;
        <D.20619>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20621 = monoeg_g_strdup_printf ("Invalid stream header %d offset/size pair %x/%x", 0, stream_off, stream_size);
          vinfo->info.message = D.20621;
          vinfo->exception_type = 3;
          D.20553 = ctx->errors;
          D.20622 = monoeg_g_slist_prepend (D.20553, vinfo);
          ctx->errors = D.20622;
        }
        <D.20620>:
        ctx->valid = 0;
        return;
        <D.20618>:
        ptr = ptr + 8;
        offset = offset + 8;
        string_size = 0;
        goto <D.18084>;
        <D.18083>:
        offset.5 = offset;
        offset = offset.5 + 1;
        D.20624 = bounds_check_datadir (&it, offset.5, 1);
        if (D.20624 == 0) goto <D.20625>; else goto <D.20626>;
        <D.20625>:
        D.20549 = ctx->report_error;
        if (D.20549 != 0) goto <D.20627>; else goto <D.20628>;
        <D.20627>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20629 = monoeg_g_strdup_printf ("Metadata root section is too small to decode stream header %d name", i);
          vinfo->info.message = D.20629;
          vinfo->exception_type = 3;
          D.20553 = ctx->errors;
          D.20630 = monoeg_g_slist_prepend (D.20553, vinfo);
          ctx->errors = D.20630;
        }
        <D.20628>:
        ctx->valid = 0;
        return;
        <D.20626>:
        D.20631 = (sizetype) string_size;
        D.20632 = ptr + D.20631;
        D.20633 = *D.20632;
        if (D.20633 == 0) goto <D.18082>; else goto <D.20634>;
        <D.20634>:
        string_size = string_size + 1;
        <D.18084>:
        if (string_size <= 31) goto <D.18083>; else goto <D.18082>;
        <D.18082>:
        D.20631 = (sizetype) string_size;
        D.20632 = ptr + D.20631;
        D.20633 = *D.20632;
        if (D.20633 != 0) goto <D.20635>; else goto <D.20636>;
        <D.20635>:
        D.20549 = ctx->report_error;
        if (D.20549 != 0) goto <D.20637>; else goto <D.20638>;
        <D.20637>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20639 = monoeg_g_strdup_printf ("Metadata stream header %d name larger than 32 bytes", i);
          vinfo->info.message = D.20639;
          vinfo->exception_type = 3;
          D.20553 = ctx->errors;
          D.20640 = monoeg_g_slist_prepend (D.20553, vinfo);
          ctx->errors = D.20640;
        }
        <D.20638>:
        ctx->valid = 0;
        return;
        <D.20636>:
        D.20645 = __strlen_g ("#Strings");
        if (D.20645 <= 8) goto <D.20642>; else goto <D.20646>;
        <D.20646>:
        if (0 != 0) goto <D.20642>; else goto <D.20643>;
        <D.20642>:
        D.20647 = strcmp ("#Strings", ptr);
        iftmp.6 = D.20647 == 0;
        goto <D.20644>;
        <D.20643>:
        D.20648 = strncmp ("#Strings", ptr, 9);
        iftmp.6 = D.20648 == 0;
        <D.20644>:
        if (iftmp.6 != 0) goto <D.20649>; else goto <D.20650>;
        <D.20649>:
        stream_idx = 0;
        goto <D.20651>;
        <D.20650>:
        D.20656 = __strlen_g ("#US");
        if (D.20656 <= 3) goto <D.20653>; else goto <D.20657>;
        <D.20657>:
        if (0 != 0) goto <D.20653>; else goto <D.20654>;
        <D.20653>:
        D.20658 = strcmp ("#US", ptr);
        iftmp.7 = D.20658 == 0;
        goto <D.20655>;
        <D.20654>:
        D.20659 = strncmp ("#US", ptr, 4);
        iftmp.7 = D.20659 == 0;
        <D.20655>:
        if (iftmp.7 != 0) goto <D.20660>; else goto <D.20661>;
        <D.20660>:
        stream_idx = 1;
        goto <D.20662>;
        <D.20661>:
        D.20667 = __strlen_g ("#Blob");
        if (D.20667 <= 5) goto <D.20664>; else goto <D.20668>;
        <D.20668>:
        if (0 != 0) goto <D.20664>; else goto <D.20665>;
        <D.20664>:
        D.20669 = strcmp ("#Blob", ptr);
        iftmp.8 = D.20669 == 0;
        goto <D.20666>;
        <D.20665>:
        D.20670 = strncmp ("#Blob", ptr, 6);
        iftmp.8 = D.20670 == 0;
        <D.20666>:
        if (iftmp.8 != 0) goto <D.20671>; else goto <D.20672>;
        <D.20671>:
        stream_idx = 2;
        goto <D.20673>;
        <D.20672>:
        D.20678 = __strlen_g ("#GUID");
        if (D.20678 <= 5) goto <D.20675>; else goto <D.20679>;
        <D.20679>:
        if (0 != 0) goto <D.20675>; else goto <D.20676>;
        <D.20675>:
        D.20680 = strcmp ("#GUID", ptr);
        iftmp.9 = D.20680 == 0;
        goto <D.20677>;
        <D.20676>:
        D.20681 = strncmp ("#GUID", ptr, 6);
        iftmp.9 = D.20681 == 0;
        <D.20677>:
        if (iftmp.9 != 0) goto <D.20682>; else goto <D.20683>;
        <D.20682>:
        stream_idx = 3;
        goto <D.20684>;
        <D.20683>:
        D.20689 = __strlen_g ("#~");
        if (D.20689 <= 2) goto <D.20686>; else goto <D.20690>;
        <D.20690>:
        if (0 != 0) goto <D.20686>; else goto <D.20687>;
        <D.20686>:
        D.20691 = strcmp ("#~", ptr);
        iftmp.10 = D.20691 == 0;
        goto <D.20688>;
        <D.20687>:
        D.20692 = strncmp ("#~", ptr, 3);
        iftmp.10 = D.20692 == 0;
        <D.20688>:
        if (iftmp.10 != 0) goto <D.20693>; else goto <D.20694>;
        <D.20693>:
        stream_idx = 4;
        goto <D.20695>;
        <D.20694>:
        D.20696 = ctx->report_warning;
        if (D.20696 != 0) goto <D.20697>; else goto <D.20698>;
        <D.20697>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 2;
          D.20699 = monoeg_g_strdup_printf ("Metadata stream header %d invalid name %s", i, ptr);
          vinfo->info.message = D.20699;
          vinfo->exception_type = 3;
          D.20553 = ctx->errors;
          D.20700 = monoeg_g_slist_prepend (D.20553, vinfo);
          ctx->errors = D.20700;
        }
        ctx->valid = 0;
        return;
        <D.20698>:
        offset = pad4 (offset);
        D.20526 = ctx->data;
        D.20527 = (sizetype) offset;
        ptr = D.20526 + D.20527;
        // predicted unlikely by continue predictor.
        goto <D.18087>;
        <D.20695>:
        <D.20684>:
        <D.20673>:
        <D.20662>:
        <D.20651>:
        D.20701 = ctx->metadata_streams[stream_idx].offset;
        if (D.20701 != 0) goto <D.20702>; else goto <D.20703>;
        <D.20702>:
        D.20549 = ctx->report_error;
        if (D.20549 != 0) goto <D.20704>; else goto <D.20705>;
        <D.20704>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20706 = monoeg_g_strdup_printf ("Duplicated metadata stream header %s", ptr);
          vinfo->info.message = D.20706;
          vinfo->exception_type = 3;
          D.20553 = ctx->errors;
          D.20707 = monoeg_g_slist_prepend (D.20553, vinfo);
          ctx->errors = D.20707;
        }
        <D.20705>:
        ctx->valid = 0;
        return;
        <D.20703>:
        ctx->metadata_streams[stream_idx].offset = stream_off;
        ctx->metadata_streams[stream_idx].size = stream_size;
        offset = pad4 (offset);
        D.20526 = ctx->data;
        D.20527 = (sizetype) offset;
        ptr = D.20526 + D.20527;
      }
      <D.18087>:
      i = i + 1;
      <D.18090>:
      i.11 = (unsigned int) i;
      if (i.11 < section_count) goto <D.18089>; else goto <D.18091>;
      <D.18091>:
      D.20709 = ctx->metadata_streams[4].size;
      if (D.20709 == 0) goto <D.20710>; else goto <D.20711>;
      <D.20710>:
      D.20549 = ctx->report_error;
      if (D.20549 != 0) goto <D.20712>; else goto <D.20713>;
      <D.20712>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20714 = monoeg_g_strdup_printf ("Metadata #~ stream missing");
        vinfo->info.message = D.20714;
        vinfo->exception_type = 3;
        D.20553 = ctx->errors;
        D.20715 = monoeg_g_slist_prepend (D.20553, vinfo);
        ctx->errors = D.20715;
      }
      <D.20713>:
      ctx->valid = 0;
      return;
      <D.20711>:
      D.20716 = ctx->metadata_streams[3].size;
      if (D.20716 == 0) goto <D.20717>; else goto <D.20718>;
      <D.20717>:
      D.20549 = ctx->report_error;
      if (D.20549 != 0) goto <D.20719>; else goto <D.20720>;
      <D.20719>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20721 = monoeg_g_strdup_printf ("Metadata guid stream missing");
        vinfo->info.message = D.20721;
        vinfo->exception_type = 3;
        D.20553 = ctx->errors;
        D.20722 = monoeg_g_slist_prepend (D.20553, vinfo);
        ctx->errors = D.20722;
      }
      <D.20720>:
      ctx->valid = 0;
      return;
      <D.20718>:
    }
  finally
    {
      it = {CLOBBER};
    }
}


bounds_check_datadir (struct DataDirectory * dir, guint32 offset, guint32 size)
{
  unsigned int D.20726;
  gboolean D.20729;
  unsigned int D.20730;
  unsigned int D.20733;
  unsigned int D.20734;
  _Bool D.20735;

  D.20726 = dir->translated_offset;
  if (D.20726 > offset) goto <D.20727>; else goto <D.20728>;
  <D.20727>:
  D.20729 = 0;
  return D.20729;
  <D.20728>:
  D.20730 = dir->size;
  if (D.20730 < size) goto <D.20731>; else goto <D.20732>;
  <D.20731>:
  D.20729 = 0;
  return D.20729;
  <D.20732>:
  D.20733 = offset + size;
  D.20726 = dir->translated_offset;
  D.20730 = dir->size;
  D.20734 = D.20726 + D.20730;
  D.20735 = D.20733 <= D.20734;
  D.20729 = (gboolean) D.20735;
  return D.20729;
}


__attribute__((__gnu_inline__))
__strlen_g (const char * __str)
{
  size_t D.20737;
  long int __ptr.12;
  long int __str.13;
  long int D.20740;
  char * __ptr;
  char * __tmp;

  __ptr = 0B;
  __tmp = __str;
  __asm__ __volatile__("   la    0,0
0: srst  %0,%1
   jo    0b
" : "=&a" __ptr, "=&a" __tmp : "0" __ptr, "1" __tmp : "0", "memory", "cc");
  __ptr.12 = (long int) __ptr;
  __str.13 = (long int) __str;
  D.20740 = __ptr.12 - __str.13;
  D.20737 = (size_t) D.20740;
  return D.20737;
}


__attribute__((__gnu_inline__, nothrow, leaf, pure))
strcmp (const char * __s1, const char * __s2)
{
  int iftmp.14;
  int iftmp.15;
  int D.20750;
  char * __p1;
  char * __p2;
  int __ret;

  __p1 = __s1;
  __p2 = __s2;
  __asm__ __volatile__("   slr   0,0
0: clst  %1,%2
   jo    0b
   ipm   %0
   srl   %0,28" : "=d" __ret, "=&a" __p1, "=&a" __p2 : "1" __p1, "2" __p2 : "0", "memory", "cc");
  if (__ret != 0) goto <D.20743>; else goto <D.20744>;
  <D.20743>:
  if (__ret == 1) goto <D.20746>; else goto <D.20747>;
  <D.20746>:
  iftmp.15 = -1;
  goto <D.20748>;
  <D.20747>:
  iftmp.15 = 1;
  <D.20748>:
  iftmp.14 = iftmp.15;
  goto <D.20749>;
  <D.20744>:
  iftmp.14 = 0;
  <D.20749>:
  __ret = iftmp.14;
  D.20750 = __ret;
  return D.20750;
}


pad4 (guint32 offset)
{
  unsigned int D.20752;
  unsigned int D.20755;
  guint32 D.20756;

  D.20752 = offset & 3;
  if (D.20752 != 0) goto <D.20753>; else goto <D.20754>;
  <D.20753>:
  D.20755 = offset & 4294967292;
  offset = D.20755 + 4;
  <D.20754>:
  D.20756 = offset;
  return D.20756;
}


verify_tables_schema (struct VerifyContext * ctx)
{
  const char * D.20758;
  sizetype D.20759;
  unsigned int D.20760;
  int D.20763;
  gchar * D.20766;
  struct GSList * D.20767;
  struct GSList * D.20768;
  const char * D.20769;
  char D.20770;
  char D.20771;
  int D.20776;
  gchar * D.20777;
  struct GSList * D.20778;
  const char * D.20779;
  char D.20780;
  int D.20785;
  gchar * D.20786;
  struct GSList * D.20787;
  const char * D.20788;
  char D.20789;
  int D.20790;
  int D.20791;
  unsigned char * D.20796;
  unsigned char D.20797;
  int D.20798;
  gchar * D.20799;
  struct GSList * D.20800;
  const char * D.20801;
  long unsigned int D.20802;
  unsigned int D.20803;
  unsigned int D.20804;
  unsigned int D.20805;
  unsigned int D.20806;
  unsigned int D.20807;
  unsigned int D.20808;
  unsigned int D.20809;
  unsigned int D.20810;
  unsigned int D.20811;
  unsigned int D.20812;
  long unsigned int D.20813;
  long unsigned int D.20814;
  long unsigned int D.20815;
  unsigned int D.20816;
  unsigned int D.20817;
  unsigned int D.20818;
  unsigned int D.20819;
  unsigned int D.20820;
  unsigned int D.20821;
  unsigned int D.20822;
  unsigned int D.20823;
  unsigned int D.20824;
  unsigned int D.20825;
  long unsigned int D.20826;
  long unsigned int D.20827;
  long unsigned int D.20828;
  gchar * D.20839;
  struct GSList * D.20840;
  unsigned int i.16;
  unsigned int D.20844;
  gchar * D.20848;
  struct GSList * D.20849;
  unsigned int D.20850;
  unsigned int D.20851;
  gchar * D.20856;
  struct GSList * D.20857;
  unsigned int D.20860;
  unsigned int D.20861;
  unsigned int D.20862;
  unsigned int D.20863;
  unsigned int D.20864;
  unsigned int D.20865;
  unsigned int D.20866;
  unsigned int D.20867;
  unsigned int D.20868;
  gchar * D.20873;
  struct GSList * D.20874;
  struct OffsetAndSize tables_area;
  unsigned int offset;
  const char * ptr;
  guint64 valid_tables;
  guint32 count;
  int i;

  try
    {
      tables_area = ctx->metadata_streams[4];
      offset = tables_area.offset;
      D.20758 = ctx->data;
      D.20759 = (sizetype) offset;
      ptr = D.20758 + D.20759;
      D.20760 = tables_area.size;
      if (D.20760 <= 23) goto <D.20761>; else goto <D.20762>;
      <D.20761>:
      D.20763 = ctx->report_error;
      if (D.20763 != 0) goto <D.20764>; else goto <D.20765>;
      <D.20764>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20760 = tables_area.size;
        D.20766 = monoeg_g_strdup_printf ("Table schemata size (%d) too small to for initial decoding (requires 24 bytes)", D.20760);
        vinfo->info.message = D.20766;
        vinfo->exception_type = 3;
        D.20767 = ctx->errors;
        D.20768 = monoeg_g_slist_prepend (D.20767, vinfo);
        ctx->errors = D.20768;
      }
      <D.20765>:
      ctx->valid = 0;
      return;
      <D.20762>:
      D.20769 = ptr + 4;
      D.20770 = *D.20769;
      D.20771 = D.20770 + 255;
      if (D.20771 > 1) goto <D.20772>; else goto <D.20773>;
      <D.20772>:
      D.20763 = ctx->report_error;
      if (D.20763 != 0) goto <D.20774>; else goto <D.20775>;
      <D.20774>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20769 = ptr + 4;
        D.20770 = *D.20769;
        D.20776 = (int) D.20770;
        D.20777 = monoeg_g_strdup_printf ("Invalid table schemata major version %d, expected 2", D.20776);
        vinfo->info.message = D.20777;
        vinfo->exception_type = 3;
        D.20767 = ctx->errors;
        D.20778 = monoeg_g_slist_prepend (D.20767, vinfo);
        ctx->errors = D.20778;
      }
      <D.20775>:
      ctx->valid = 0;
      return;
      <D.20773>:
      D.20779 = ptr + 5;
      D.20780 = *D.20779;
      if (D.20780 != 0) goto <D.20781>; else goto <D.20782>;
      <D.20781>:
      D.20763 = ctx->report_error;
      if (D.20763 != 0) goto <D.20783>; else goto <D.20784>;
      <D.20783>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20779 = ptr + 5;
        D.20780 = *D.20779;
        D.20785 = (int) D.20780;
        D.20786 = monoeg_g_strdup_printf ("Invalid table schemata minor version %d, expected 0", D.20785);
        vinfo->info.message = D.20786;
        vinfo->exception_type = 3;
        D.20767 = ctx->errors;
        D.20787 = monoeg_g_slist_prepend (D.20767, vinfo);
        ctx->errors = D.20787;
      }
      <D.20784>:
      ctx->valid = 0;
      return;
      <D.20782>:
      D.20788 = ptr + 6;
      D.20789 = *D.20788;
      D.20790 = (int) D.20789;
      D.20791 = D.20790 & -8;
      if (D.20791 != 0) goto <D.20792>; else goto <D.20793>;
      <D.20792>:
      D.20763 = ctx->report_error;
      if (D.20763 != 0) goto <D.20794>; else goto <D.20795>;
      <D.20794>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20796 = ptr + 6;
        D.20797 = *D.20796;
        D.20798 = (int) D.20797;
        D.20799 = monoeg_g_strdup_printf ("Invalid table schemata heap sizes 0x%02x, only bits 0, 1 and 2 can be set", D.20798);
        vinfo->info.message = D.20799;
        vinfo->exception_type = 3;
        D.20767 = ctx->errors;
        D.20800 = monoeg_g_slist_prepend (D.20767, vinfo);
        ctx->errors = D.20800;
      }
      <D.20795>:
      ctx->valid = 0;
      return;
      <D.20793>:
      D.20801 = ptr + 8;
      D.20802 = MEM[(const guint64 *)D.20801];
      D.20803 = (unsigned int) D.20802;
      D.20804 = D.20803 << 24;
      D.20801 = ptr + 8;
      D.20802 = MEM[(const guint64 *)D.20801];
      D.20803 = (unsigned int) D.20802;
      D.20805 = D.20803 >> 8;
      D.20806 = D.20805 & 65280;
      D.20807 = D.20804 | D.20806;
      D.20801 = ptr + 8;
      D.20802 = MEM[(const guint64 *)D.20801];
      D.20803 = (unsigned int) D.20802;
      D.20808 = D.20803 << 8;
      D.20809 = D.20808 & 16711680;
      D.20810 = D.20807 | D.20809;
      D.20801 = ptr + 8;
      D.20802 = MEM[(const guint64 *)D.20801];
      D.20803 = (unsigned int) D.20802;
      D.20811 = D.20803 >> 24;
      D.20812 = D.20810 | D.20811;
      D.20813 = (long unsigned int) D.20812;
      D.20814 = D.20813 << 32;
      D.20801 = ptr + 8;
      D.20802 = MEM[(const guint64 *)D.20801];
      D.20815 = D.20802 >> 32;
      D.20816 = (unsigned int) D.20815;
      D.20817 = D.20816 << 24;
      D.20801 = ptr + 8;
      D.20802 = MEM[(const guint64 *)D.20801];
      D.20815 = D.20802 >> 32;
      D.20816 = (unsigned int) D.20815;
      D.20818 = D.20816 >> 8;
      D.20819 = D.20818 & 65280;
      D.20820 = D.20817 | D.20819;
      D.20801 = ptr + 8;
      D.20802 = MEM[(const guint64 *)D.20801];
      D.20815 = D.20802 >> 32;
      D.20816 = (unsigned int) D.20815;
      D.20821 = D.20816 << 8;
      D.20822 = D.20821 & 16711680;
      D.20823 = D.20820 | D.20822;
      D.20801 = ptr + 8;
      D.20802 = MEM[(const guint64 *)D.20801];
      D.20815 = D.20802 >> 32;
      D.20816 = (unsigned int) D.20815;
      D.20824 = D.20816 >> 24;
      D.20825 = D.20823 | D.20824;
      D.20826 = (long unsigned int) D.20825;
      valid_tables = D.20814 | D.20826;
      count = 0;
      i = 0;
      goto <D.18111>;
      <D.18110>:
      D.20827 = valid_tables >> i;
      D.20828 = D.20827 & 1;
      if (D.20828 == 0) goto <D.20829>; else goto <D.20830>;
      <D.20829>:
      // predicted unlikely by continue predictor.
      goto <D.18107>;
      <D.20830>:
      if (i == 3) goto <D.20831>; else goto <D.20833>;
      <D.20833>:
      if (i == 5) goto <D.20831>; else goto <D.20834>;
      <D.20834>:
      if (i == 7) goto <D.20831>; else goto <D.20835>;
      <D.20835>:
      if (i == 19) goto <D.20831>; else goto <D.20836>;
      <D.20836>:
      if (i == 22) goto <D.20831>; else goto <D.20832>;
      <D.20831>:
      D.20763 = ctx->report_error;
      if (D.20763 != 0) goto <D.20837>; else goto <D.20838>;
      <D.20837>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20839 = monoeg_g_strdup_printf ("The metadata verifier doesn\'t support MS specific table %x", i);
        vinfo->info.message = D.20839;
        vinfo->exception_type = 3;
        D.20767 = ctx->errors;
        D.20840 = monoeg_g_slist_prepend (D.20767, vinfo);
        ctx->errors = D.20840;
      }
      <D.20838>:
      ctx->valid = 0;
      return;
      <D.20832>:
      i.16 = (unsigned int) i;
      D.20844 = i.16 + 4294967266;
      if (D.20844 <= 1) goto <D.20841>; else goto <D.20845>;
      <D.20845>:
      if (i > 44) goto <D.20841>; else goto <D.20842>;
      <D.20841>:
      D.20763 = ctx->report_error;
      if (D.20763 != 0) goto <D.20846>; else goto <D.20847>;
      <D.20846>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20848 = monoeg_g_strdup_printf ("Invalid table %x", i);
        vinfo->info.message = D.20848;
        vinfo->exception_type = 3;
        D.20767 = ctx->errors;
        D.20849 = monoeg_g_slist_prepend (D.20767, vinfo);
        ctx->errors = D.20849;
      }
      <D.20847>:
      ctx->valid = 0;
      return;
      <D.20842>:
      count = count + 1;
      <D.18107>:
      i = i + 1;
      <D.18111>:
      if (i <= 63) goto <D.18110>; else goto <D.18112>;
      <D.18112>:
      D.20760 = tables_area.size;
      D.20850 = count + 6;
      D.20851 = D.20850 * 4;
      if (D.20760 < D.20851) goto <D.20852>; else goto <D.20853>;
      <D.20852>:
      D.20763 = ctx->report_error;
      if (D.20763 != 0) goto <D.20854>; else goto <D.20855>;
      <D.20854>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20760 = tables_area.size;
        D.20850 = count + 6;
        D.20851 = D.20850 * 4;
        D.20856 = monoeg_g_strdup_printf ("Table schemata size (%d) too small to for decoding row counts (requires %d bytes)", D.20760, D.20851);
        vinfo->info.message = D.20856;
        vinfo->exception_type = 3;
        D.20767 = ctx->errors;
        D.20857 = monoeg_g_slist_prepend (D.20767, vinfo);
        ctx->errors = D.20857;
      }
      <D.20855>:
      ctx->valid = 0;
      return;
      <D.20853>:
      ptr = ptr + 24;
      i = 0;
      goto <D.18117>;
      <D.18116>:
      D.20827 = valid_tables >> i;
      D.20828 = D.20827 & 1;
      if (D.20828 != 0) goto <D.20858>; else goto <D.20859>;
      <D.20858>:
      {
        guint32 row_count;

        D.20860 = MEM[(const guint32 *)ptr];
        D.20861 = D.20860 << 24;
        D.20860 = MEM[(const guint32 *)ptr];
        D.20862 = D.20860 >> 8;
        D.20863 = D.20862 & 65280;
        D.20864 = D.20861 | D.20863;
        D.20860 = MEM[(const guint32 *)ptr];
        D.20865 = D.20860 << 8;
        D.20866 = D.20865 & 16711680;
        D.20867 = D.20864 | D.20866;
        D.20860 = MEM[(const guint32 *)ptr];
        D.20868 = D.20860 >> 24;
        row_count = D.20867 | D.20868;
        if (row_count > 16777215) goto <D.20869>; else goto <D.20870>;
        <D.20869>:
        D.20763 = ctx->report_error;
        if (D.20763 != 0) goto <D.20871>; else goto <D.20872>;
        <D.20871>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.20873 = monoeg_g_strdup_printf ("Invalid Table %d row count: %d. Mono only supports 16777215 rows", i, row_count);
          vinfo->info.message = D.20873;
          vinfo->exception_type = 3;
          D.20767 = ctx->errors;
          D.20874 = monoeg_g_slist_prepend (D.20767, vinfo);
          ctx->errors = D.20874;
        }
        <D.20872>:
        ctx->valid = 0;
        return;
        <D.20870>:
        ptr = ptr + 4;
      }
      <D.20859>:
      i = i + 1;
      <D.18117>:
      if (i <= 63) goto <D.18116>; else goto <D.18118>;
      <D.18118>:
    }
  finally
    {
      tables_area = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_table_data (struct MonoImage * image, struct GSList * * error_list)
{
  int D.20878;
  gboolean D.20881;
  _Bool D.20882;
  int D.20883;
  struct VerifyContext ctx;

  try
    {
      D.20878 = mono_verifier_is_enabled_for_image (image);
      if (D.20878 == 0) goto <D.20879>; else goto <D.20880>;
      <D.20879>:
      D.20881 = 1;
      return D.20881;
      <D.20880>:
      D.20882 = error_list != 0B;
      D.20883 = (int) D.20882;
      init_verify_context (&ctx, image, D.20883);
      ctx.stage = 2;
      verify_tables_data (&ctx);
      D.20881 = cleanup_context (&ctx, error_list);
      return D.20881;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


verify_tables_data (struct VerifyContext * ctx)
{
  struct MonoImage * D.20886;
  struct MonoStreamHeader * D.20887;
  unsigned char D.20888;
  unsigned int D.20889;
  <unnamed-unsigned:24> D.20890;
  unsigned int D.20891;
  unsigned int D.20892;
  int D.20897;
  gchar * D.20900;
  struct GSList * D.20901;
  struct GSList * D.20902;
  const char * D.20903;
  long int D.20904;
  const char * D.20905;
  long int D.20906;
  long int D.20907;
  int D.20908;
  unsigned int D.20913;
  unsigned int D.20914;
  unsigned int D.20915;
  unsigned int D.20916;
  gchar * D.20917;
  struct GSList * D.20918;
  int D.20919;
  struct OffsetAndSize tables_area;
  guint32 size;
  guint32 tables_offset;
  int i;

  try
    {
      D.20886 = ctx->image;
      D.20887 = &D.20886->heap_tables;
      tables_area = get_metadata_stream (ctx, D.20887); [return slot optimization]
      size = 0;
      i = 0;
      goto <D.19520>;
      <D.19519>:
      {
        struct MonoTableInfo * table;
        guint32 tmp_size;

        D.20886 = ctx->image;
        table = &D.20886->tables[i];
        D.20888 = table->row_size;
        D.20889 = (unsigned int) D.20888;
        D.20890 = table->rows;
        D.20891 = (unsigned int) D.20890;
        D.20892 = D.20889 * D.20891;
        tmp_size = D.20892 + size;
        if (tmp_size < size) goto <D.20893>; else goto <D.20894>;
        <D.20893>:
        size = 0;
        goto <D.19518>;
        <D.20894>:
        size = tmp_size;
      }
      i = i + 1;
      <D.19520>:
      if (i <= 44) goto <D.19519>; else goto <D.19518>;
      <D.19518>:
      if (size == 0) goto <D.20895>; else goto <D.20896>;
      <D.20895>:
      D.20897 = ctx->report_error;
      if (D.20897 != 0) goto <D.20898>; else goto <D.20899>;
      <D.20898>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20900 = monoeg_g_strdup_printf ("table space is either empty or overflowed");
        vinfo->info.message = D.20900;
        vinfo->exception_type = 3;
        D.20901 = ctx->errors;
        D.20902 = monoeg_g_slist_prepend (D.20901, vinfo);
        ctx->errors = D.20902;
      }
      <D.20899>:
      ctx->valid = 0;
      return;
      <D.20896>:
      D.20886 = ctx->image;
      D.20903 = D.20886->tables_base;
      D.20904 = (long int) D.20903;
      D.20905 = ctx->data;
      D.20906 = (long int) D.20905;
      D.20907 = D.20904 - D.20906;
      tables_offset = (guint32) D.20907;
      D.20908 = bounds_check_offset (&tables_area, tables_offset, size);
      if (D.20908 == 0) goto <D.20909>; else goto <D.20910>;
      <D.20909>:
      D.20897 = ctx->report_error;
      if (D.20897 != 0) goto <D.20911>; else goto <D.20912>;
      <D.20911>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.20913 = tables_area.size;
        D.20914 = tables_area.offset;
        D.20915 = D.20914 - tables_offset;
        D.20916 = D.20913 + D.20915;
        D.20917 = monoeg_g_strdup_printf ("Tables data require %d bytes but the only %d are available in the #~ stream", size, D.20916);
        vinfo->info.message = D.20917;
        vinfo->exception_type = 3;
        D.20901 = ctx->errors;
        D.20918 = monoeg_g_slist_prepend (D.20901, vinfo);
        ctx->errors = D.20918;
      }
      <D.20912>:
      ctx->valid = 0;
      return;
      <D.20910>:
      verify_module_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20920>; else goto <D.20921>;
      <D.20920>:
      return;
      <D.20921>:
      verify_typedef_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20922>; else goto <D.20923>;
      <D.20922>:
      return;
      <D.20923>:
      verify_field_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20924>; else goto <D.20925>;
      <D.20924>:
      return;
      <D.20925>:
      verify_method_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20926>; else goto <D.20927>;
      <D.20926>:
      return;
      <D.20927>:
      verify_param_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20928>; else goto <D.20929>;
      <D.20928>:
      return;
      <D.20929>:
      verify_interfaceimpl_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20930>; else goto <D.20931>;
      <D.20930>:
      return;
      <D.20931>:
      verify_memberref_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20932>; else goto <D.20933>;
      <D.20932>:
      return;
      <D.20933>:
      verify_constant_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20934>; else goto <D.20935>;
      <D.20934>:
      return;
      <D.20935>:
      verify_cattr_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20936>; else goto <D.20937>;
      <D.20936>:
      return;
      <D.20937>:
      verify_field_marshal_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20938>; else goto <D.20939>;
      <D.20938>:
      return;
      <D.20939>:
      verify_decl_security_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20940>; else goto <D.20941>;
      <D.20940>:
      return;
      <D.20941>:
      verify_class_layout_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20942>; else goto <D.20943>;
      <D.20942>:
      return;
      <D.20943>:
      verify_field_layout_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20944>; else goto <D.20945>;
      <D.20944>:
      return;
      <D.20945>:
      verify_standalonesig_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20946>; else goto <D.20947>;
      <D.20946>:
      return;
      <D.20947>:
      verify_eventmap_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20948>; else goto <D.20949>;
      <D.20948>:
      return;
      <D.20949>:
      verify_event_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20950>; else goto <D.20951>;
      <D.20950>:
      return;
      <D.20951>:
      verify_propertymap_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20952>; else goto <D.20953>;
      <D.20952>:
      return;
      <D.20953>:
      verify_property_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20954>; else goto <D.20955>;
      <D.20954>:
      return;
      <D.20955>:
      verify_methodimpl_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20956>; else goto <D.20957>;
      <D.20956>:
      return;
      <D.20957>:
      verify_moduleref_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20958>; else goto <D.20959>;
      <D.20958>:
      return;
      <D.20959>:
      verify_typespec_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20960>; else goto <D.20961>;
      <D.20960>:
      return;
      <D.20961>:
      verify_implmap_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20962>; else goto <D.20963>;
      <D.20962>:
      return;
      <D.20963>:
      verify_fieldrva_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20964>; else goto <D.20965>;
      <D.20964>:
      return;
      <D.20965>:
      verify_assembly_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20966>; else goto <D.20967>;
      <D.20966>:
      return;
      <D.20967>:
      verify_assemblyref_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20968>; else goto <D.20969>;
      <D.20968>:
      return;
      <D.20969>:
      verify_file_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20970>; else goto <D.20971>;
      <D.20970>:
      return;
      <D.20971>:
      verify_exportedtype_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20972>; else goto <D.20973>;
      <D.20972>:
      return;
      <D.20973>:
      verify_manifest_resource_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20974>; else goto <D.20975>;
      <D.20974>:
      return;
      <D.20975>:
      verify_nested_class_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20976>; else goto <D.20977>;
      <D.20976>:
      return;
      <D.20977>:
      verify_generic_param_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20978>; else goto <D.20979>;
      <D.20978>:
      return;
      <D.20979>:
      verify_method_spec_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20980>; else goto <D.20981>;
      <D.20980>:
      return;
      <D.20981>:
      verify_generic_param_constraint_table (ctx);
      D.20919 = ctx->valid;
      if (D.20919 == 0) goto <D.20982>; else goto <D.20983>;
      <D.20982>:
      return;
      <D.20983>:
      verify_tables_data_global_constraints (ctx);
    }
  finally
    {
      tables_area = {CLOBBER};
    }
}


get_metadata_stream (struct VerifyContext * ctx, struct MonoStreamHeader * header)
{
  const char * D.20988;
  long int D.20989;
  const char * D.20990;
  long int D.20991;
  long int D.20992;
  unsigned int D.20993;
  unsigned int D.20994;
  struct OffsetAndSize res;

  try
    {
      D.20988 = header->data;
      D.20989 = (long int) D.20988;
      D.20990 = ctx->data;
      D.20991 = (long int) D.20990;
      D.20992 = D.20989 - D.20991;
      D.20993 = (unsigned int) D.20992;
      res.offset = D.20993;
      D.20994 = header->size;
      res.size = D.20994;
      <retval> = res;
      return <retval>;
    }
  finally
    {
      res = {CLOBBER};
    }
}


bounds_check_offset (struct OffsetAndSize * off, guint32 offset, guint32 size)
{
  unsigned int D.20997;
  gboolean D.21000;
  unsigned int D.21001;
  unsigned int D.21004;
  unsigned int D.21005;
  _Bool D.21006;

  D.20997 = off->offset;
  if (D.20997 > offset) goto <D.20998>; else goto <D.20999>;
  <D.20998>:
  D.21000 = 0;
  return D.21000;
  <D.20999>:
  D.21001 = off->size;
  if (D.21001 < size) goto <D.21002>; else goto <D.21003>;
  <D.21002>:
  D.21000 = 0;
  return D.21000;
  <D.21003>:
  D.21004 = offset + size;
  D.20997 = off->offset;
  D.21001 = off->size;
  D.21005 = D.20997 + D.21001;
  D.21006 = D.21004 <= D.21005;
  D.21000 = (gboolean) D.21006;
  return D.21000;
}


verify_module_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.21008;
  long unsigned int D.21009;
  long unsigned int D.21010;
  int D.21013;
  <unnamed-unsigned:24> D.21016;
  int D.21017;
  gchar * D.21018;
  struct GSList * D.21019;
  struct GSList * D.21020;
  unsigned int D.21021;
  int D.21022;
  gchar * D.21027;
  struct GSList * D.21028;
  unsigned int D.21029;
  int D.21030;
  gchar * D.21035;
  struct GSList * D.21036;
  unsigned int D.21037;
  gchar * D.21042;
  struct GSList * D.21043;
  unsigned int D.21044;
  gchar * D.21049;
  struct GSList * D.21050;
  struct MonoTableInfo * table;
  guint32 data[5];

  try
    {
      D.21008 = ctx->image;
      table = &D.21008->tables[0];
      D.21009 = BIT_FIELD_REF <*table, 64, 64>;
      D.21010 = D.21009 & 18446742974197923840;
      if (D.21010 != 1099511627776) goto <D.21011>; else goto <D.21012>;
      <D.21011>:
      D.21013 = ctx->report_error;
      if (D.21013 != 0) goto <D.21014>; else goto <D.21015>;
      <D.21014>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21016 = table->rows;
        D.21017 = (int) D.21016;
        D.21018 = monoeg_g_strdup_printf ("Module table must have exactly one row, but have %d", D.21017);
        vinfo->info.message = D.21018;
        vinfo->exception_type = 3;
        D.21019 = ctx->errors;
        D.21020 = monoeg_g_slist_prepend (D.21019, vinfo);
        ctx->errors = D.21020;
      }
      <D.21015>:
      ctx->valid = 0;
      return;
      <D.21012>:
      mono_metadata_decode_row (table, 0, &data, 5);
      D.21021 = data[1];
      D.21022 = is_valid_non_empty_string (ctx, D.21021);
      if (D.21022 == 0) goto <D.21023>; else goto <D.21024>;
      <D.21023>:
      D.21013 = ctx->report_error;
      if (D.21013 != 0) goto <D.21025>; else goto <D.21026>;
      <D.21025>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21021 = data[1];
        D.21027 = monoeg_g_strdup_printf ("Module has an invalid name, string index 0x%08x", D.21021);
        vinfo->info.message = D.21027;
        vinfo->exception_type = 3;
        D.21019 = ctx->errors;
        D.21028 = monoeg_g_slist_prepend (D.21019, vinfo);
        ctx->errors = D.21028;
      }
      <D.21026>:
      ctx->valid = 0;
      return;
      <D.21024>:
      D.21029 = data[2];
      D.21030 = is_valid_guid (ctx, D.21029);
      if (D.21030 == 0) goto <D.21031>; else goto <D.21032>;
      <D.21031>:
      D.21013 = ctx->report_error;
      if (D.21013 != 0) goto <D.21033>; else goto <D.21034>;
      <D.21033>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21029 = data[2];
        D.21035 = monoeg_g_strdup_printf ("Module has an invalid Mvid, guid index %x", D.21029);
        vinfo->info.message = D.21035;
        vinfo->exception_type = 3;
        D.21019 = ctx->errors;
        D.21036 = monoeg_g_slist_prepend (D.21019, vinfo);
        ctx->errors = D.21036;
      }
      <D.21034>:
      ctx->valid = 0;
      return;
      <D.21032>:
      D.21037 = data[3];
      if (D.21037 != 0) goto <D.21038>; else goto <D.21039>;
      <D.21038>:
      D.21013 = ctx->report_error;
      if (D.21013 != 0) goto <D.21040>; else goto <D.21041>;
      <D.21040>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21037 = data[3];
        D.21042 = monoeg_g_strdup_printf ("Module has a non zero Enc field %x", D.21037);
        vinfo->info.message = D.21042;
        vinfo->exception_type = 3;
        D.21019 = ctx->errors;
        D.21043 = monoeg_g_slist_prepend (D.21019, vinfo);
        ctx->errors = D.21043;
      }
      <D.21041>:
      ctx->valid = 0;
      return;
      <D.21039>:
      D.21044 = data[4];
      if (D.21044 != 0) goto <D.21045>; else goto <D.21046>;
      <D.21045>:
      D.21013 = ctx->report_error;
      if (D.21013 != 0) goto <D.21047>; else goto <D.21048>;
      <D.21047>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21044 = data[4];
        D.21049 = monoeg_g_strdup_printf ("Module has a non zero EncBase field %x", D.21044);
        vinfo->info.message = D.21049;
        vinfo->exception_type = 3;
        D.21019 = ctx->errors;
        D.21050 = monoeg_g_slist_prepend (D.21019, vinfo);
        ctx->errors = D.21050;
      }
      <D.21048>:
      ctx->valid = 0;
      return;
      <D.21046>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


is_valid_non_empty_string (struct VerifyContext * ctx, guint32 offset)
{
  gboolean D.21054;

  D.21054 = is_valid_string_full (ctx, offset, 0);
  return D.21054;
}


is_valid_string_full (struct VerifyContext * ctx, guint32 offset, gboolean allow_empty)
{
  gboolean D.21056;
  struct MonoImage * D.21057;

  D.21057 = ctx->image;
  D.21056 = is_valid_string_full_with_image (D.21057, offset, allow_empty);
  return D.21056;
}


is_valid_string_full_with_image (struct MonoImage * image, guint32 offset, gboolean allow_empty)
{
  const char * D.21059;
  long int D.21060;
  char * D.21061;
  long int D.21062;
  long int D.21063;
  sizetype D.21064;
  gboolean D.21067;
  long unsigned int D.21068;
  long unsigned int D.21069;
  long unsigned int data.17;
  sizetype D.21073;
  const char * D.21074;
  unsigned int D.21075;
  long int D.21076;
  int D.21077;
  int iftmp.18;
  long int length.19;
  guint32 heap_offset;
  guint32 heap_size;
  glong length;
  const char * data;

  try
    {
      D.21059 = image->heap_strings.data;
      D.21060 = (long int) D.21059;
      D.21061 = image->raw_data;
      D.21062 = (long int) D.21061;
      D.21063 = D.21060 - D.21062;
      heap_offset = (guint32) D.21063;
      heap_size = image->heap_strings.size;
      D.21061 = image->raw_data;
      D.21064 = (sizetype) heap_offset;
      data = D.21061 + D.21064;
      if (offset >= heap_size) goto <D.21065>; else goto <D.21066>;
      <D.21065>:
      D.21067 = 0;
      return D.21067;
      <D.21066>:
      D.21068 = (long unsigned int) offset;
      D.21069 = ~D.21068;
      data.17 = (long unsigned int) data;
      if (D.21069 < data.17) goto <D.21071>; else goto <D.21072>;
      <D.21071>:
      D.21067 = 0;
      return D.21067;
      <D.21072>:
      D.21073 = (sizetype) offset;
      D.21074 = data + D.21073;
      D.21075 = heap_size - offset;
      D.21076 = (long int) D.21075;
      D.21077 = mono_utf8_validate_and_len_with_bounds (D.21074, D.21076, &length, 0B);
      if (D.21077 == 0) goto <D.21078>; else goto <D.21079>;
      <D.21078>:
      D.21067 = 0;
      return D.21067;
      <D.21079>:
      if (allow_empty != 0) goto <D.21081>; else goto <D.21084>;
      <D.21084>:
      length.19 = length;
      if (length.19 > 0) goto <D.21081>; else goto <D.21082>;
      <D.21081>:
      iftmp.18 = 1;
      goto <D.21083>;
      <D.21082>:
      iftmp.18 = 0;
      <D.21083>:
      D.21067 = iftmp.18;
      return D.21067;
    }
  finally
    {
      length = {CLOBBER};
    }
}


is_valid_guid (struct VerifyContext * ctx, guint32 offset)
{
  struct MonoImage * D.21088;
  struct MonoStreamHeader * D.21089;
  gboolean D.21090;
  int iftmp.20;
  unsigned int D.21094;
  unsigned int D.21096;
  struct OffsetAndSize guids;

  try
    {
      D.21088 = ctx->image;
      D.21089 = &D.21088->heap_guid;
      guids = get_metadata_stream (ctx, D.21089); [return slot optimization]
      D.21094 = guids.size;
      if (D.21094 > 7) goto <D.21095>; else goto <D.21092>;
      <D.21095>:
      D.21094 = guids.size;
      D.21096 = D.21094 + 4294967288;
      if (D.21096 >= offset) goto <D.21097>; else goto <D.21092>;
      <D.21097>:
      iftmp.20 = 1;
      goto <D.21093>;
      <D.21092>:
      iftmp.20 = 0;
      <D.21093>:
      D.21090 = iftmp.20;
      return D.21090;
    }
  finally
    {
      guids = {CLOBBER};
    }
}


verify_typedef_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.21100;
  long unsigned int D.21101;
  long unsigned int D.21102;
  int D.21105;
  gchar * D.21108;
  struct GSList * D.21109;
  struct GSList * D.21110;
  unsigned int D.21111;
  unsigned int D.21112;
  gchar * D.21117;
  struct GSList * D.21118;
  unsigned int D.21119;
  gchar * D.21124;
  struct GSList * D.21125;
  unsigned int D.21126;
  gchar * D.21131;
  struct GSList * D.21132;
  unsigned int D.21133;
  gchar * D.21138;
  struct GSList * D.21139;
  unsigned int D.21140;
  unsigned int D.21141;
  gchar * D.21146;
  struct GSList * D.21147;
  unsigned int D.21150;
  int D.21152;
  gchar * D.21155;
  struct GSList * D.21156;
  unsigned int D.21157;
  int D.21160;
  gchar * D.21165;
  struct GSList * D.21166;
  unsigned int D.21167;
  int D.21170;
  gchar * D.21175;
  struct GSList * D.21176;
  unsigned int D.21179;
  gchar * D.21184;
  struct GSList * D.21185;
  unsigned int D.21186;
  int D.21189;
  unsigned int D.21190;
  int D.21191;
  gchar * D.21196;
  struct GSList * D.21197;
  unsigned int D.21198;
  gchar * D.21203;
  struct GSList * D.21204;
  <unnamed-unsigned:24> D.21205;
  int D.21206;
  int D.21207;
  unsigned int D.21208;
  gchar * D.21213;
  struct GSList * D.21214;
  gchar * D.21219;
  struct GSList * D.21220;
  unsigned int D.21221;
  gchar * D.21226;
  struct GSList * D.21227;
  <unnamed-unsigned:24> D.21228;
  int D.21229;
  int D.21230;
  unsigned int D.21231;
  gchar * D.21236;
  struct GSList * D.21237;
  gchar * D.21242;
  struct GSList * D.21243;
  <unnamed-unsigned:24> D.21244;
  int D.21245;
  struct MonoTableInfo * table;
  guint32 data[6];
  guint32 fieldlist;
  guint32 methodlist;
  guint32 visibility;
  int i;

  try
    {
      D.21100 = ctx->image;
      table = &D.21100->tables[2];
      fieldlist = 1;
      methodlist = 1;
      D.21101 = BIT_FIELD_REF <*table, 64, 64>;
      D.21102 = D.21101 & 18446742974197923840;
      if (D.21102 == 0) goto <D.21103>; else goto <D.21104>;
      <D.21103>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21106>; else goto <D.21107>;
      <D.21106>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21108 = monoeg_g_strdup_printf ("Typedef table must have exactly at least one row");
        vinfo->info.message = D.21108;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21110 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21110;
      }
      <D.21107>:
      ctx->valid = 0;
      return;
      <D.21104>:
      i = 0;
      goto <D.18843>;
      <D.18842>:
      mono_metadata_decode_row (table, i, &data, 6);
      D.21111 = data[0];
      D.21112 = D.21111 & 4280861248;
      if (D.21112 != 0) goto <D.21113>; else goto <D.21114>;
      <D.21113>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21115>; else goto <D.21116>;
      <D.21115>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21111 = data[0];
        D.21117 = monoeg_g_strdup_printf ("Invalid typedef row %d invalid flags field 0x%08x", i, D.21111);
        vinfo->info.message = D.21117;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21118 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21118;
      }
      <D.21116>:
      ctx->valid = 0;
      return;
      <D.21114>:
      D.21111 = data[0];
      D.21119 = D.21111 & 24;
      if (D.21119 == 24) goto <D.21120>; else goto <D.21121>;
      <D.21120>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21122>; else goto <D.21123>;
      <D.21122>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21124 = monoeg_g_strdup_printf ("Invalid typedef row %d invalid class layout 0x18", i);
        vinfo->info.message = D.21124;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21125 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21125;
      }
      <D.21123>:
      ctx->valid = 0;
      return;
      <D.21121>:
      D.21111 = data[0];
      D.21126 = D.21111 & 196608;
      if (D.21126 == 196608) goto <D.21127>; else goto <D.21128>;
      <D.21127>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21129>; else goto <D.21130>;
      <D.21129>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21131 = monoeg_g_strdup_printf ("Invalid typedef row %d mono doesn\'t support custom string format", i);
        vinfo->info.message = D.21131;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21132 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21132;
      }
      <D.21130>:
      ctx->valid = 0;
      return;
      <D.21128>:
      D.21111 = data[0];
      D.21133 = D.21111 & 12582912;
      if (D.21133 != 0) goto <D.21134>; else goto <D.21135>;
      <D.21134>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21136>; else goto <D.21137>;
      <D.21136>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21138 = monoeg_g_strdup_printf ("Invalid typedef row %d mono doesn\'t support custom string format", i);
        vinfo->info.message = D.21138;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21139 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21139;
      }
      <D.21137>:
      ctx->valid = 0;
      return;
      <D.21135>:
      D.21140 = BIT_FIELD_REF <data, 32, 0>;
      D.21141 = D.21140 & 160;
      if (D.21141 == 32) goto <D.21142>; else goto <D.21143>;
      <D.21142>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21144>; else goto <D.21145>;
      <D.21144>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21146 = monoeg_g_strdup_printf ("Invalid typedef row %d for interface type must be abstract", i);
        vinfo->info.message = D.21146;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21147 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21147;
      }
      <D.21145>:
      ctx->valid = 0;
      return;
      <D.21143>:
      D.21150 = data[1];
      if (D.21150 == 0) goto <D.21148>; else goto <D.21151>;
      <D.21151>:
      D.21150 = data[1];
      D.21152 = is_valid_non_empty_string (ctx, D.21150);
      if (D.21152 == 0) goto <D.21148>; else goto <D.21149>;
      <D.21148>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21153>; else goto <D.21154>;
      <D.21153>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21150 = data[1];
        D.21155 = monoeg_g_strdup_printf ("Invalid typedef row %d invalid name token %08x", i, D.21150);
        vinfo->info.message = D.21155;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21156 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21156;
      }
      <D.21154>:
      ctx->valid = 0;
      return;
      <D.21149>:
      D.21157 = data[2];
      if (D.21157 != 0) goto <D.21158>; else goto <D.21159>;
      <D.21158>:
      D.21157 = data[2];
      D.21160 = is_valid_non_empty_string (ctx, D.21157);
      if (D.21160 == 0) goto <D.21161>; else goto <D.21162>;
      <D.21161>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21163>; else goto <D.21164>;
      <D.21163>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21157 = data[2];
        D.21165 = monoeg_g_strdup_printf ("Invalid typedef row %d invalid namespace token %08x", i, D.21157);
        vinfo->info.message = D.21165;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21166 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21166;
      }
      <D.21164>:
      ctx->valid = 0;
      return;
      <D.21162>:
      <D.21159>:
      D.21167 = data[3];
      if (D.21167 != 0) goto <D.21168>; else goto <D.21169>;
      <D.21168>:
      D.21167 = data[3];
      D.21170 = is_valid_coded_index (ctx, 0, D.21167);
      if (D.21170 == 0) goto <D.21171>; else goto <D.21172>;
      <D.21171>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21173>; else goto <D.21174>;
      <D.21173>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21167 = data[3];
        D.21175 = monoeg_g_strdup_printf ("Invalid typedef row %d extend field coded index 0x%08x", i, D.21167);
        vinfo->info.message = D.21175;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21176 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21176;
      }
      <D.21174>:
      ctx->valid = 0;
      return;
      <D.21172>:
      <D.21169>:
      D.21167 = data[3];
      if (D.21167 != 0) goto <D.21177>; else goto <D.21178>;
      <D.21177>:
      D.21167 = data[3];
      D.21179 = get_coded_index_token (0, D.21167);
      if (D.21179 == 0) goto <D.21180>; else goto <D.21181>;
      <D.21180>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21182>; else goto <D.21183>;
      <D.21182>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21167 = data[3];
        D.21184 = monoeg_g_strdup_printf ("Invalid typedef row %d zero coded extend field coded index 0x%08x", i, D.21167);
        vinfo->info.message = D.21184;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21185 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21185;
      }
      <D.21183>:
      ctx->valid = 0;
      return;
      <D.21181>:
      <D.21178>:
      D.21111 = data[0];
      visibility = D.21111 & 7;
      D.21186 = visibility + 4294967294;
      if (D.21186 <= 5) goto <D.21187>; else goto <D.21188>;
      <D.21187>:
      D.21189 = i + 1;
      D.21190 = (unsigned int) D.21189;
      D.21191 = search_sorted_table (ctx, 41, 0, D.21190);
      if (D.21191 == -1) goto <D.21192>; else goto <D.21193>;
      <D.21192>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21194>; else goto <D.21195>;
      <D.21194>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21196 = monoeg_g_strdup_printf ("Invalid typedef row %d has nested visibility but no rows in the NestedClass table", i);
        vinfo->info.message = D.21196;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21197 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21197;
      }
      <D.21195>:
      ctx->valid = 0;
      return;
      <D.21193>:
      <D.21188>:
      D.21198 = data[4];
      if (D.21198 == 0) goto <D.21199>; else goto <D.21200>;
      <D.21199>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21201>; else goto <D.21202>;
      <D.21201>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21203 = monoeg_g_strdup_printf ("Invalid typedef row %d FieldList be be >= 1", i);
        vinfo->info.message = D.21203;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21204 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21204;
      }
      <D.21202>:
      ctx->valid = 0;
      return;
      <D.21200>:
      D.21198 = data[4];
      D.21100 = ctx->image;
      D.21205 = D.21100->tables[4].rows;
      D.21206 = (int) D.21205;
      D.21207 = D.21206 + 1;
      D.21208 = (unsigned int) D.21207;
      if (D.21198 > D.21208) goto <D.21209>; else goto <D.21210>;
      <D.21209>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21211>; else goto <D.21212>;
      <D.21211>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21198 = data[4];
        D.21213 = monoeg_g_strdup_printf ("Invalid typedef row %d FieldList rowid 0x%08x is out of range", i, D.21198);
        vinfo->info.message = D.21213;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21214 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21214;
      }
      <D.21212>:
      ctx->valid = 0;
      return;
      <D.21210>:
      D.21198 = data[4];
      if (D.21198 < fieldlist) goto <D.21215>; else goto <D.21216>;
      <D.21215>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21217>; else goto <D.21218>;
      <D.21217>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21198 = data[4];
        D.21219 = monoeg_g_strdup_printf ("Invalid typedef row %d FieldList rowid 0x%08x can\'t be smaller than of previous row 0x%08x", i, D.21198, fieldlist);
        vinfo->info.message = D.21219;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21220 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21220;
      }
      <D.21218>:
      ctx->valid = 0;
      return;
      <D.21216>:
      D.21221 = data[5];
      if (D.21221 == 0) goto <D.21222>; else goto <D.21223>;
      <D.21222>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21224>; else goto <D.21225>;
      <D.21224>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21226 = monoeg_g_strdup_printf ("Invalid typedef row %d MethodList be be >= 1", i);
        vinfo->info.message = D.21226;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21227 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21227;
      }
      <D.21225>:
      ctx->valid = 0;
      return;
      <D.21223>:
      D.21221 = data[5];
      D.21100 = ctx->image;
      D.21228 = D.21100->tables[6].rows;
      D.21229 = (int) D.21228;
      D.21230 = D.21229 + 1;
      D.21231 = (unsigned int) D.21230;
      if (D.21221 > D.21231) goto <D.21232>; else goto <D.21233>;
      <D.21232>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21234>; else goto <D.21235>;
      <D.21234>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21221 = data[5];
        D.21236 = monoeg_g_strdup_printf ("Invalid typedef row %d MethodList rowid 0x%08x is out of range", i, D.21221);
        vinfo->info.message = D.21236;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21237 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21237;
      }
      <D.21235>:
      ctx->valid = 0;
      return;
      <D.21233>:
      D.21221 = data[5];
      if (D.21221 < methodlist) goto <D.21238>; else goto <D.21239>;
      <D.21238>:
      D.21105 = ctx->report_error;
      if (D.21105 != 0) goto <D.21240>; else goto <D.21241>;
      <D.21240>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21221 = data[5];
        D.21242 = monoeg_g_strdup_printf ("Invalid typedef row %d MethodList rowid 0x%08x can\'t be smaller than of previous row 0x%08x", i, D.21221, methodlist);
        vinfo->info.message = D.21242;
        vinfo->exception_type = 3;
        D.21109 = ctx->errors;
        D.21243 = monoeg_g_slist_prepend (D.21109, vinfo);
        ctx->errors = D.21243;
      }
      <D.21241>:
      ctx->valid = 0;
      return;
      <D.21239>:
      fieldlist = data[4];
      methodlist = data[5];
      i = i + 1;
      <D.18843>:
      D.21244 = table->rows;
      D.21245 = (int) D.21244;
      if (D.21245 > i) goto <D.18842>; else goto <D.18844>;
      <D.18844>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


is_valid_coded_index (struct VerifyContext * ctx, int token_kind, guint32 coded_token)
{
  gboolean D.21249;
  struct MonoImage * D.21250;

  D.21250 = ctx->image;
  D.21249 = is_valid_coded_index_with_image (D.21250, token_kind, coded_token);
  return D.21249;
}


is_valid_coded_index_with_image (struct MonoImage * image, int token_kind, guint32 coded_token)
{
  int token_kind.21;
  unsigned char D.21253;
  int token_kind.22;
  unsigned char D.21255;
  int D.21256;
  int D.21257;
  unsigned int D.21258;
  gboolean D.21261;
  unsigned int token_kind.23;
  unsigned int D.21263;
  unsigned char D.21264;
  <unnamed-unsigned:24> D.21267;
  unsigned int D.21268;
  _Bool D.21269;
  guint32 bits;
  guint32 table_count;
  guint32 table;
  guint32 token;

  token_kind.21 = token_kind;
  token_kind = token_kind.21 + 1;
  D.21253 = coded_index_desc[token_kind.21];
  bits = (guint32) D.21253;
  token_kind.22 = token_kind;
  token_kind = token_kind.22 + 1;
  D.21255 = coded_index_desc[token_kind.22];
  table_count = (guint32) D.21255;
  D.21256 = 1 << bits;
  D.21257 = D.21256 + -1;
  D.21258 = (unsigned int) D.21257;
  table = D.21258 & coded_token;
  token = coded_token >> bits;
  if (table >= table_count) goto <D.21259>; else goto <D.21260>;
  <D.21259>:
  D.21261 = 0;
  return D.21261;
  <D.21260>:
  token_kind.23 = (unsigned int) token_kind;
  D.21263 = token_kind.23 + table;
  D.21264 = coded_index_desc[D.21263];
  table = (guint32) D.21264;
  if (table == 255) goto <D.21265>; else goto <D.21266>;
  <D.21265>:
  D.21261 = 0;
  return D.21261;
  <D.21266>:
  D.21267 = image->tables[table].rows;
  D.21268 = (unsigned int) D.21267;
  D.21269 = D.21268 >= token;
  D.21261 = (gboolean) D.21269;
  return D.21261;
}


get_coded_index_token (int token_kind, guint32 coded_token)
{
  unsigned char D.21271;
  guint32 D.21272;
  guint32 bits;

  D.21271 = coded_index_desc[token_kind];
  bits = (guint32) D.21271;
  D.21272 = coded_token >> bits;
  return D.21272;
}


search_sorted_table (struct VerifyContext * ctx, int table, int column, guint32 coded_token)
{
  struct MonoImage * D.21274;
  unsigned int D.21275;
  unsigned int D.21276;
  <unnamed-unsigned:24> D.21277;
  long unsigned int D.21278;
  unsigned char D.21279;
  long unsigned int D.21280;
  int D.21283;
  long int res.24;
  long int base.25;
  long int D.21286;
  long int D.21287;
  long int D.21288;
  struct MonoTableInfo * tinfo;
  struct RowLocator locator;
  const char * res;
  const char * base;

  try
    {
      D.21274 = ctx->image;
      tinfo = &D.21274->tables[table];
      locator.token = coded_token;
      D.21275 = get_col_offset (ctx, table, column);
      locator.col_offset = D.21275;
      D.21276 = get_col_size (ctx, table, column);
      locator.col_size = D.21276;
      locator.table = tinfo;
      base = tinfo->base;
      D.21277 = tinfo->rows;
      D.21278 = (long unsigned int) D.21277;
      D.21279 = tinfo->row_size;
      D.21280 = (long unsigned int) D.21279;
      res = mono_binary_search (&locator, base, D.21278, D.21280, token_locator);
      if (res == 0B) goto <D.21281>; else goto <D.21282>;
      <D.21281>:
      D.21283 = -1;
      return D.21283;
      <D.21282>:
      res.24 = (long int) res;
      base.25 = (long int) base;
      D.21286 = res.24 - base.25;
      D.21279 = tinfo->row_size;
      D.21287 = (long int) D.21279;
      D.21288 = D.21286 / D.21287;
      D.21283 = (int) D.21288;
      return D.21283;
    }
  finally
    {
      locator = {CLOBBER};
    }
}


token_locator (const void * a, const void * b)
{
  unsigned int iftmp.26;
  unsigned int D.21292;
  unsigned int D.21295;
  sizetype D.21296;
  const unsigned char * D.21297;
  short unsigned int D.21298;
  short unsigned int D.21299;
  int D.21300;
  int D.21301;
  int D.21302;
  int D.21303;
  int D.21304;
  unsigned int D.21306;
  unsigned int D.21307;
  unsigned int D.21308;
  unsigned int D.21309;
  unsigned int D.21310;
  unsigned int D.21311;
  unsigned int D.21312;
  unsigned int D.21313;
  unsigned int D.21314;
  int D.21315;
  unsigned int D.21316;
  int D.21317;
  int token.27;
  struct RowLocator * loc;
  const unsigned char * row;
  guint32 token;

  loc = a;
  row = b;
  D.21292 = loc->col_size;
  if (D.21292 == 2) goto <D.21293>; else goto <D.21294>;
  <D.21293>:
  D.21295 = loc->col_offset;
  D.21296 = (sizetype) D.21295;
  D.21297 = row + D.21296;
  D.21298 = MEM[(const guint16 *)D.21297];
  D.21299 = D.21298 >> 8;
  D.21300 = (int) D.21299;
  D.21295 = loc->col_offset;
  D.21296 = (sizetype) D.21295;
  D.21297 = row + D.21296;
  D.21298 = MEM[(const guint16 *)D.21297];
  D.21301 = (int) D.21298;
  D.21302 = D.21301 << 8;
  D.21303 = D.21302 & 65535;
  D.21304 = D.21300 | D.21303;
  iftmp.26 = (unsigned int) D.21304;
  goto <D.21305>;
  <D.21294>:
  D.21295 = loc->col_offset;
  D.21296 = (sizetype) D.21295;
  D.21297 = row + D.21296;
  D.21306 = MEM[(const guint32 *)D.21297];
  D.21307 = D.21306 << 24;
  D.21295 = loc->col_offset;
  D.21296 = (sizetype) D.21295;
  D.21297 = row + D.21296;
  D.21306 = MEM[(const guint32 *)D.21297];
  D.21308 = D.21306 >> 8;
  D.21309 = D.21308 & 65280;
  D.21310 = D.21307 | D.21309;
  D.21295 = loc->col_offset;
  D.21296 = (sizetype) D.21295;
  D.21297 = row + D.21296;
  D.21306 = MEM[(const guint32 *)D.21297];
  D.21311 = D.21306 << 8;
  D.21312 = D.21311 & 16711680;
  D.21313 = D.21310 | D.21312;
  D.21295 = loc->col_offset;
  D.21296 = (sizetype) D.21295;
  D.21297 = row + D.21296;
  D.21306 = MEM[(const guint32 *)D.21297];
  D.21314 = D.21306 >> 24;
  iftmp.26 = D.21313 | D.21314;
  <D.21305>:
  token = iftmp.26;
  D.21316 = loc->token;
  D.21317 = (int) D.21316;
  token.27 = (int) token;
  D.21315 = D.21317 - token.27;
  return D.21315;
}


get_col_offset (struct VerifyContext * ctx, int table, int column)
{
  struct MonoImage * D.21320;
  int D.21321;
  unsigned int D.21322;
  unsigned int D.21323;
  unsigned int D.21324;
  int column.28;
  guint32 D.21326;
  guint32 bitfield;
  guint32 offset;

  D.21320 = ctx->image;
  bitfield = D.21320->tables[table].size_bitfield;
  offset = 0;
  goto <D.18127>;
  <D.18126>:
  D.21321 = column * 2;
  D.21322 = bitfield >> D.21321;
  D.21323 = D.21322 & 3;
  D.21324 = D.21323 + offset;
  offset = D.21324 + 1;
  <D.18127>:
  column.28 = column;
  column = column.28 + -1;
  if (column.28 > 0) goto <D.18126>; else goto <D.18128>;
  <D.18128>:
  D.21326 = offset;
  return D.21326;
}


get_col_size (struct VerifyContext * ctx, int table, int column)
{
  guint32 D.21328;
  struct MonoImage * D.21329;
  unsigned int D.21330;
  int D.21331;
  unsigned int D.21332;
  unsigned int D.21333;

  D.21329 = ctx->image;
  D.21330 = D.21329->tables[table].size_bitfield;
  D.21331 = column * 2;
  D.21332 = D.21330 >> D.21331;
  D.21333 = D.21332 & 3;
  D.21328 = D.21333 + 1;
  return D.21328;
}


verify_field_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.21335;
  <unnamed-unsigned:24> D.21336;
  int D.21337;
  unsigned int D.21340;
  int D.21343;
  gchar * D.21346;
  struct GSList * D.21347;
  struct GSList * D.21348;
  unsigned int D.21349;
  gchar * D.21354;
  struct GSList * D.21355;
  unsigned int D.21356;
  gchar * D.21361;
  struct GSList * D.21362;
  unsigned int D.21363;
  gchar * D.21368;
  struct GSList * D.21369;
  unsigned int D.21370;
  gchar * D.21375;
  struct GSList * D.21376;
  unsigned int D.21377;
  unsigned int i.29;
  unsigned int D.21381;
  int D.21382;
  gchar * D.21387;
  struct GSList * D.21388;
  unsigned int D.21389;
  unsigned int D.21392;
  int D.21393;
  gchar * D.21398;
  struct GSList * D.21399;
  unsigned int D.21400;
  unsigned int D.21403;
  int D.21404;
  gchar * D.21409;
  struct GSList * D.21410;
  unsigned int D.21411;
  int D.21414;
  unsigned int D.21415;
  int D.21416;
  gchar * D.21421;
  struct GSList * D.21422;
  unsigned int D.21425;
  int D.21427;
  gchar * D.21430;
  struct GSList * D.21431;
  unsigned int D.21432;
  int D.21435;
  gchar * D.21440;
  struct GSList * D.21441;
  unsigned int D.21444;
  gchar * D.21449;
  struct GSList * D.21450;
  gchar * D.21457;
  struct GSList * D.21458;
  <unnamed-unsigned:24> D.21459;
  int D.21460;
  struct MonoTableInfo * table;
  guint32 data[3];
  guint32 flags;
  guint32 module_field_list;
  int i;

  try
    {
      D.21335 = ctx->image;
      table = &D.21335->tables[4];
      module_field_list = 4294967295;
      D.21335 = ctx->image;
      D.21336 = D.21335->tables[2].rows;
      D.21337 = (int) D.21336;
      if (D.21337 > 1) goto <D.21338>; else goto <D.21339>;
      <D.21338>:
      {
        struct MonoTableInfo * type;

        D.21335 = ctx->image;
        type = &D.21335->tables[2];
        module_field_list = mono_metadata_decode_row_col (type, 1, 4);
      }
      <D.21339>:
      i = 0;
      goto <D.18885>;
      <D.18884>:
      mono_metadata_decode_row (table, i, &data, 3);
      flags = data[0];
      D.21340 = flags & 18440;
      if (D.21340 != 0) goto <D.21341>; else goto <D.21342>;
      <D.21341>:
      D.21343 = ctx->report_error;
      if (D.21343 != 0) goto <D.21344>; else goto <D.21345>;
      <D.21344>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21346 = monoeg_g_strdup_printf ("Invalid field row %d invalid flags field 0x%08x", i, flags);
        vinfo->info.message = D.21346;
        vinfo->exception_type = 3;
        D.21347 = ctx->errors;
        D.21348 = monoeg_g_slist_prepend (D.21347, vinfo);
        ctx->errors = D.21348;
      }
      <D.21345>:
      ctx->valid = 0;
      return;
      <D.21342>:
      D.21349 = flags & 7;
      if (D.21349 == 7) goto <D.21350>; else goto <D.21351>;
      <D.21350>:
      D.21343 = ctx->report_error;
      if (D.21343 != 0) goto <D.21352>; else goto <D.21353>;
      <D.21352>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21354 = monoeg_g_strdup_printf ("Invalid field row %d invalid field visibility 0x7", i);
        vinfo->info.message = D.21354;
        vinfo->exception_type = 3;
        D.21347 = ctx->errors;
        D.21355 = monoeg_g_slist_prepend (D.21347, vinfo);
        ctx->errors = D.21355;
      }
      <D.21353>:
      ctx->valid = 0;
      return;
      <D.21351>:
      D.21356 = flags & 96;
      if (D.21356 == 96) goto <D.21357>; else goto <D.21358>;
      <D.21357>:
      D.21343 = ctx->report_error;
      if (D.21343 != 0) goto <D.21359>; else goto <D.21360>;
      <D.21359>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21361 = monoeg_g_strdup_printf ("Invalid field row %d cannot be InitOnly and Literal at the same time", i);
        vinfo->info.message = D.21361;
        vinfo->exception_type = 3;
        D.21347 = ctx->errors;
        D.21362 = monoeg_g_slist_prepend (D.21347, vinfo);
        ctx->errors = D.21362;
      }
      <D.21360>:
      ctx->valid = 0;
      return;
      <D.21358>:
      D.21363 = flags & 1536;
      if (D.21363 == 1024) goto <D.21364>; else goto <D.21365>;
      <D.21364>:
      D.21343 = ctx->report_error;
      if (D.21343 != 0) goto <D.21366>; else goto <D.21367>;
      <D.21366>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21368 = monoeg_g_strdup_printf ("Invalid field row %d is RTSpecialName but not SpecialName", i);
        vinfo->info.message = D.21368;
        vinfo->exception_type = 3;
        D.21347 = ctx->errors;
        D.21369 = monoeg_g_slist_prepend (D.21347, vinfo);
        ctx->errors = D.21369;
      }
      <D.21367>:
      ctx->valid = 0;
      return;
      <D.21365>:
      D.21370 = flags & 80;
      if (D.21370 == 64) goto <D.21371>; else goto <D.21372>;
      <D.21371>:
      D.21343 = ctx->report_error;
      if (D.21343 != 0) goto <D.21373>; else goto <D.21374>;
      <D.21373>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21375 = monoeg_g_strdup_printf ("Invalid field row %d is Literal but not Static", i);
        vinfo->info.message = D.21375;
        vinfo->exception_type = 3;
        D.21347 = ctx->errors;
        D.21376 = monoeg_g_slist_prepend (D.21347, vinfo);
        ctx->errors = D.21376;
      }
      <D.21374>:
      ctx->valid = 0;
      return;
      <D.21372>:
      D.21377 = flags & 4096;
      if (D.21377 != 0) goto <D.21378>; else goto <D.21379>;
      <D.21378>:
      i.29 = (unsigned int) i;
      D.21381 = make_coded_token (32, 4, i.29);
      D.21382 = search_sorted_table (ctx, 13, 0, D.21381);
      if (D.21382 == -1) goto <D.21383>; else goto <D.21384>;
      <D.21383>:
      D.21343 = ctx->report_error;
      if (D.21343 != 0) goto <D.21385>; else goto <D.21386>;
      <D.21385>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21387 = monoeg_g_strdup_printf ("Invalid field row %d has FieldMarshal but there is no corresponding row in the FieldMarshal table", i);
        vinfo->info.message = D.21387;
        vinfo->exception_type = 3;
        D.21347 = ctx->errors;
        D.21388 = monoeg_g_slist_prepend (D.21347, vinfo);
        ctx->errors = D.21388;
      }
      <D.21386>:
      ctx->valid = 0;
      return;
      <D.21384>:
      <D.21379>:
      D.21389 = flags & 32768;
      if (D.21389 != 0) goto <D.21390>; else goto <D.21391>;
      <D.21390>:
      i.29 = (unsigned int) i;
      D.21392 = make_coded_token (5, 4, i.29);
      D.21393 = search_sorted_table (ctx, 11, 2, D.21392);
      if (D.21393 == -1) goto <D.21394>; else goto <D.21395>;
      <D.21394>:
      D.21343 = ctx->report_error;
      if (D.21343 != 0) goto <D.21396>; else goto <D.21397>;
      <D.21396>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21398 = monoeg_g_strdup_printf ("Invalid field row %d has Default but there is no corresponding row in the Constant table", i);
        vinfo->info.message = D.21398;
        vinfo->exception_type = 3;
        D.21347 = ctx->errors;
        D.21399 = monoeg_g_slist_prepend (D.21347, vinfo);
        ctx->errors = D.21399;
      }
      <D.21397>:
      ctx->valid = 0;
      return;
      <D.21395>:
      <D.21391>:
      D.21400 = flags & 64;
      if (D.21400 != 0) goto <D.21401>; else goto <D.21402>;
      <D.21401>:
      i.29 = (unsigned int) i;
      D.21403 = make_coded_token (5, 4, i.29);
      D.21404 = search_sorted_table (ctx, 11, 2, D.21403);
      if (D.21404 == -1) goto <D.21405>; else goto <D.21406>;
      <D.21405>:
      D.21343 = ctx->report_error;
      if (D.21343 != 0) goto <D.21407>; else goto <D.21408>;
      <D.21407>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21409 = monoeg_g_strdup_printf ("Invalid field row %d is Literal but there is no corresponding row in the Constant table", i);
        vinfo->info.message = D.21409;
        vinfo->exception_type = 3;
        D.21347 = ctx->errors;
        D.21410 = monoeg_g_slist_prepend (D.21347, vinfo);
        ctx->errors = D.21410;
      }
      <D.21408>:
      ctx->valid = 0;
      return;
      <D.21406>:
      <D.21402>:
      D.21411 = flags & 256;
      if (D.21411 != 0) goto <D.21412>; else goto <D.21413>;
      <D.21412>:
      D.21414 = i + 1;
      D.21415 = (unsigned int) D.21414;
      D.21416 = search_sorted_table (ctx, 29, 1, D.21415);
      if (D.21416 == -1) goto <D.21417>; else goto <D.21418>;
      <D.21417>:
      D.21343 = ctx->report_error;
      if (D.21343 != 0) goto <D.21419>; else goto <D.21420>;
      <D.21419>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21421 = monoeg_g_strdup_printf ("Invalid field row %d has Default but there is no corresponding row in the Constant table", i);
        vinfo->info.message = D.21421;
        vinfo->exception_type = 3;
        D.21347 = ctx->errors;
        D.21422 = monoeg_g_slist_prepend (D.21347, vinfo);
        ctx->errors = D.21422;
      }
      <D.21420>:
      ctx->valid = 0;
      return;
      <D.21418>:
      <D.21413>:
      D.21425 = data[1];
      if (D.21425 == 0) goto <D.21423>; else goto <D.21426>;
      <D.21426>:
      D.21425 = data[1];
      D.21427 = is_valid_non_empty_string (ctx, D.21425);
      if (D.21427 == 0) goto <D.21423>; else goto <D.21424>;
      <D.21423>:
      D.21343 = ctx->report_error;
      if (D.21343 != 0) goto <D.21428>; else goto <D.21429>;
      <D.21428>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21425 = data[1];
        D.21430 = monoeg_g_strdup_printf ("Invalid field row %d invalid name token %08x", i, D.21425);
        vinfo->info.message = D.21430;
        vinfo->exception_type = 3;
        D.21347 = ctx->errors;
        D.21431 = monoeg_g_slist_prepend (D.21347, vinfo);
        ctx->errors = D.21431;
      }
      <D.21429>:
      ctx->valid = 0;
      return;
      <D.21424>:
      D.21432 = data[2];
      if (D.21432 != 0) goto <D.21433>; else goto <D.21434>;
      <D.21433>:
      D.21432 = data[2];
      D.21435 = is_valid_blob_object (ctx, D.21432, 1);
      if (D.21435 == 0) goto <D.21436>; else goto <D.21437>;
      <D.21436>:
      D.21343 = ctx->report_error;
      if (D.21343 != 0) goto <D.21438>; else goto <D.21439>;
      <D.21438>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21432 = data[2];
        D.21440 = monoeg_g_strdup_printf ("Invalid field row %d invalid signature blob token 0x%x", i, D.21432);
        vinfo->info.message = D.21440;
        vinfo->exception_type = 3;
        D.21347 = ctx->errors;
        D.21441 = monoeg_g_slist_prepend (D.21347, vinfo);
        ctx->errors = D.21441;
      }
      <D.21439>:
      ctx->valid = 0;
      return;
      <D.21437>:
      <D.21434>:
      D.21414 = i + 1;
      D.21415 = (unsigned int) D.21414;
      if (D.21415 < module_field_list) goto <D.21442>; else goto <D.21443>;
      <D.21442>:
      {
        guint32 access;

        access = flags & 7;
        D.21444 = flags & 16;
        if (D.21444 == 0) goto <D.21445>; else goto <D.21446>;
        <D.21445>:
        D.21343 = ctx->report_error;
        if (D.21343 != 0) goto <D.21447>; else goto <D.21448>;
        <D.21447>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21449 = monoeg_g_strdup_printf ("Invalid field row %d is a global variable but is not static", i);
          vinfo->info.message = D.21449;
          vinfo->exception_type = 3;
          D.21347 = ctx->errors;
          D.21450 = monoeg_g_slist_prepend (D.21347, vinfo);
          ctx->errors = D.21450;
        }
        <D.21448>:
        ctx->valid = 0;
        return;
        <D.21446>:
        if (access > 1) goto <D.21451>; else goto <D.21452>;
        <D.21451>:
        if (access != 6) goto <D.21453>; else goto <D.21454>;
        <D.21453>:
        D.21343 = ctx->report_error;
        if (D.21343 != 0) goto <D.21455>; else goto <D.21456>;
        <D.21455>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.21457 = monoeg_g_strdup_printf ("Invalid field row %d is a global variable but have wrong visibility %x", i, access);
          vinfo->info.message = D.21457;
          vinfo->exception_type = 3;
          D.21347 = ctx->errors;
          D.21458 = monoeg_g_slist_prepend (D.21347, vinfo);
          ctx->errors = D.21458;
        }
        <D.21456>:
        ctx->valid = 0;
        return;
        <D.21454>:
        <D.21452>:
      }
      <D.21443>:
      i = i + 1;
      <D.18885>:
      D.21459 = table->rows;
      D.21460 = (int) D.21459;
      if (D.21460 > i) goto <D.18884>; else goto <D.18886>;
      <D.18886>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


make_coded_token (int kind, guint32 table, guint32 table_idx)
{
  int kind.30;
  unsigned char D.21465;
  int kind.31;
  unsigned char D.21467;
  int kind.32;
  unsigned char D.21469;
  unsigned int D.21470;
  guint32 D.21473;
  unsigned int D.21474;
  unsigned int D.21475;
  guint32 bits;
  guint32 tables;
  guint32 i;

  kind.30 = kind;
  kind = kind.30 + 1;
  D.21465 = coded_index_desc[kind.30];
  bits = (guint32) D.21465;
  kind.31 = kind;
  kind = kind.31 + 1;
  D.21467 = coded_index_desc[kind.31];
  tables = (guint32) D.21467;
  i = 0;
  goto <D.18186>;
  <D.18185>:
  kind.32 = kind;
  kind = kind.32 + 1;
  D.21469 = coded_index_desc[kind.32];
  D.21470 = (unsigned int) D.21469;
  if (D.21470 == table) goto <D.21471>; else goto <D.21472>;
  <D.21471>:
  D.21474 = table_idx + 1;
  D.21475 = D.21474 << bits;
  D.21473 = D.21475 | i;
  return D.21473;
  <D.21472>:
  i = i + 1;
  <D.18186>:
  if (i < tables) goto <D.18185>; else goto <D.18187>;
  <D.18187>:
  monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "metadata-verify.c", 1012);
  D.21473 = 4294967295;
  return D.21473;
}


is_valid_blob_object (struct VerifyContext * ctx, guint32 offset, guint32 minsize)
{
  struct MonoImage * D.21477;
  struct MonoStreamHeader * D.21478;
  unsigned int D.21479;
  gboolean D.21482;
  const char * D.21483;
  sizetype D.21484;
  unsigned int D.21485;
  sizetype D.21486;
  sizetype D.21487;
  const char * D.21488;
  unsigned int D.21489;
  int D.21490;
  unsigned int entry_size.33;
  unsigned int bytes.34;
  unsigned int D.21497;
  unsigned int entry_size.35;
  int iftmp.36;
  unsigned int D.21504;
  unsigned int D.21506;
  struct OffsetAndSize blob;
  guint32 entry_size;
  guint32 bytes;

  try
    {
      D.21477 = ctx->image;
      D.21478 = &D.21477->heap_blob;
      blob = get_metadata_stream (ctx, D.21478); [return slot optimization]
      D.21479 = blob.size;
      if (D.21479 < offset) goto <D.21480>; else goto <D.21481>;
      <D.21480>:
      D.21482 = 0;
      return D.21482;
      <D.21481>:
      D.21483 = ctx->data;
      D.21484 = (sizetype) offset;
      D.21485 = blob.offset;
      D.21486 = (sizetype) D.21485;
      D.21487 = D.21484 + D.21486;
      D.21488 = D.21483 + D.21487;
      D.21479 = blob.size;
      D.21485 = blob.offset;
      D.21489 = D.21479 - D.21485;
      D.21490 = decode_value (D.21488, D.21489, &entry_size, &bytes);
      if (D.21490 == 0) goto <D.21491>; else goto <D.21492>;
      <D.21491>:
      D.21482 = 0;
      return D.21482;
      <D.21492>:
      entry_size.33 = entry_size;
      if (entry_size.33 < minsize) goto <D.21494>; else goto <D.21495>;
      <D.21494>:
      D.21482 = 0;
      return D.21482;
      <D.21495>:
      bytes.34 = bytes;
      D.21497 = ~bytes.34;
      entry_size.33 = entry_size;
      if (D.21497 < entry_size.33) goto <D.21498>; else goto <D.21499>;
      <D.21498>:
      D.21482 = 0;
      return D.21482;
      <D.21499>:
      entry_size.33 = entry_size;
      bytes.34 = bytes;
      entry_size.35 = entry_size.33 + bytes.34;
      entry_size = entry_size.35;
      entry_size.33 = entry_size;
      D.21504 = offset + entry_size.33;
      D.21479 = blob.size;
      if (D.21504 <= D.21479) goto <D.21505>; else goto <D.21502>;
      <D.21505>:
      entry_size.33 = entry_size;
      D.21506 = ~entry_size.33;
      if (D.21506 >= offset) goto <D.21507>; else goto <D.21502>;
      <D.21507>:
      iftmp.36 = 1;
      goto <D.21503>;
      <D.21502>:
      iftmp.36 = 0;
      <D.21503>:
      D.21482 = iftmp.36;
      return D.21482;
    }
  finally
    {
      blob = {CLOBBER};
      entry_size = {CLOBBER};
      bytes = {CLOBBER};
    }
}


decode_value (const char * _ptr, unsigned int available, unsigned int * value, unsigned int * size)
{
  gboolean D.21512;
  unsigned int D.21513;
  signed char b.37;
  unsigned int D.21517;
  int D.21519;
  int D.21520;
  int D.21525;
  int D.21526;
  const unsigned char * D.21527;
  unsigned char D.21528;
  int D.21529;
  int D.21530;
  unsigned int D.21531;
  int D.21535;
  int D.21536;
  int D.21537;
  int D.21538;
  const unsigned char * D.21539;
  unsigned char D.21540;
  int D.21541;
  int D.21542;
  int D.21543;
  const unsigned char * D.21544;
  unsigned char D.21545;
  int D.21546;
  int D.21547;
  unsigned int D.21548;
  unsigned char b;
  const unsigned char * ptr;

  ptr = _ptr;
  if (available == 0) goto <D.21510>; else goto <D.21511>;
  <D.21510>:
  D.21512 = 0;
  return D.21512;
  <D.21511>:
  b = *ptr;
  *size = 0;
  D.21513 = *size;
  *value = D.21513;
  b.37 = (signed char) b;
  if (b.37 >= 0) goto <D.21515>; else goto <D.21516>;
  <D.21515>:
  *size = 1;
  D.21517 = (unsigned int) b;
  *value = D.21517;
  goto <D.21518>;
  <D.21516>:
  D.21519 = (int) b;
  D.21520 = D.21519 & 64;
  if (D.21520 == 0) goto <D.21521>; else goto <D.21522>;
  <D.21521>:
  if (available <= 1) goto <D.21523>; else goto <D.21524>;
  <D.21523>:
  D.21512 = 0;
  return D.21512;
  <D.21524>:
  *size = 2;
  D.21519 = (int) b;
  D.21525 = D.21519 << 8;
  D.21526 = D.21525 & 16128;
  D.21527 = ptr + 1;
  D.21528 = *D.21527;
  D.21529 = (int) D.21528;
  D.21530 = D.21526 | D.21529;
  D.21531 = (unsigned int) D.21530;
  *value = D.21531;
  goto <D.21532>;
  <D.21522>:
  if (available <= 3) goto <D.21533>; else goto <D.21534>;
  <D.21533>:
  D.21512 = 0;
  return D.21512;
  <D.21534>:
  *size = 4;
  D.21519 = (int) b;
  D.21535 = D.21519 << 24;
  D.21536 = D.21535 & 520093696;
  D.21527 = ptr + 1;
  D.21528 = *D.21527;
  D.21529 = (int) D.21528;
  D.21537 = D.21529 << 16;
  D.21538 = D.21536 | D.21537;
  D.21539 = ptr + 2;
  D.21540 = *D.21539;
  D.21541 = (int) D.21540;
  D.21542 = D.21541 << 8;
  D.21543 = D.21538 | D.21542;
  D.21544 = ptr + 3;
  D.21545 = *D.21544;
  D.21546 = (int) D.21545;
  D.21547 = D.21543 | D.21546;
  D.21548 = (unsigned int) D.21547;
  *value = D.21548;
  <D.21532>:
  <D.21518>:
  D.21512 = 1;
  return D.21512;
}


verify_method_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.21550;
  <unnamed-unsigned:24> D.21551;
  int D.21552;
  unsigned int D.21555;
  int D.21558;
  gchar * D.21561;
  struct GSList * D.21562;
  struct GSList * D.21563;
  gchar * D.21568;
  struct GSList * D.21569;
  unsigned int D.21572;
  int D.21574;
  gchar * D.21577;
  struct GSList * D.21578;
  int D.21579;
  _Bool D.21580;
  int D.21581;
  _Bool D.21582;
  unsigned int i.38;
  unsigned int D.21587;
  int D.21588;
  gchar * D.21593;
  struct GSList * D.21594;
  unsigned int D.21595;
  unsigned int D.21598;
  gchar * D.21603;
  struct GSList * D.21604;
  unsigned int D.21605;
  unsigned int D.21608;
  gchar * D.21613;
  struct GSList * D.21614;
  unsigned int D.21615;
  gchar * D.21620;
  struct GSList * D.21621;
  unsigned int D.21622;
  gchar * D.21627;
  struct GSList * D.21628;
  unsigned int D.21631;
  int D.21634;
  gchar * D.21637;
  struct GSList * D.21638;
  unsigned int D.21639;
  gchar * D.21644;
  struct GSList * D.21645;
  int D.21646;
  unsigned int D.21647;
  gchar * D.21654;
  struct GSList * D.21655;
  unsigned int D.21656;
  gchar * D.21661;
  struct GSList * D.21662;
  gchar * D.21669;
  struct GSList * D.21670;
  unsigned int D.21671;
  gchar * D.21678;
  struct GSList * D.21679;
  gchar * D.21686;
  struct GSList * D.21687;
  gchar * D.21692;
  struct GSList * D.21693;
  unsigned int D.21700;
  gchar * D.21707;
  struct GSList * D.21708;
  gchar * D.21717;
  struct GSList * D.21718;
  unsigned int D.21723;
  gchar * D.21727;
  struct GSList * D.21728;
  gchar * D.21733;
  struct GSList * D.21734;
  gchar * D.21744;
  struct GSList * D.21745;
  gchar * D.21752;
  struct GSList * D.21753;
  unsigned int D.21754;
  int D.21755;
  gchar * D.21760;
  struct GSList * D.21761;
  unsigned int D.21762;
  gchar * D.21771;
  struct GSList * D.21772;
  gchar * D.21780;
  struct GSList * D.21781;
  unsigned int D.21782;
  int D.21785;
  gchar * D.21790;
  struct GSList * D.21791;
  unsigned int D.21792;
  gchar * D.21797;
  struct GSList * D.21798;
  gchar * D.21803;
  struct GSList * D.21804;
  <unnamed-unsigned:24> D.21805;
  int D.21806;
  int D.21807;
  unsigned int D.21808;
  gchar * D.21813;
  struct GSList * D.21814;
  <unnamed-unsigned:24> D.21815;
  int D.21816;
  struct MonoTableInfo * table;
  guint32 data[6];
  guint32 flags;
  guint32 implflags;
  guint32 rva;
  guint32 module_method_list;
  guint32 access;
  guint32 code_type;
  guint32 paramlist;
  gboolean is_ctor;
  gboolean is_cctor;
  const char * name;
  int i;

  try
    {
      D.21550 = ctx->image;
      table = &D.21550->tables[6];
      paramlist = 1;
      module_method_list = 4294967295;
      D.21550 = ctx->image;
      D.21551 = D.21550->tables[2].rows;
      D.21552 = (int) D.21551;
      if (D.21552 > 1) goto <D.21553>; else goto <D.21554>;
      <D.21553>:
      {
        struct MonoTableInfo * type;

        D.21550 = ctx->image;
        type = &D.21550->tables[2];
        module_method_list = mono_metadata_decode_row_col (type, 1, 5);
      }
      <D.21554>:
      i = 0;
      goto <D.18944>;
      <D.18943>:
      mono_metadata_decode_row (table, i, &data, 6);
      rva = data[0];
      implflags = data[1];
      flags = data[2];
      access = flags & 7;
      code_type = implflags & 3;
      D.21555 = implflags & 60928;
      if (D.21555 != 0) goto <D.21556>; else goto <D.21557>;
      <D.21556>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21559>; else goto <D.21560>;
      <D.21559>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21561 = monoeg_g_strdup_printf ("Invalid method row %d invalid implflags field 0x%08x", i, implflags);
        vinfo->info.message = D.21561;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21563 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21563;
      }
      <D.21560>:
      ctx->valid = 0;
      return;
      <D.21557>:
      if (access == 7) goto <D.21564>; else goto <D.21565>;
      <D.21564>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21566>; else goto <D.21567>;
      <D.21566>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21568 = monoeg_g_strdup_printf ("Invalid method row %d invalid MemberAccessMask 0x7", i);
        vinfo->info.message = D.21568;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21569 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21569;
      }
      <D.21567>:
      ctx->valid = 0;
      return;
      <D.21565>:
      D.21572 = data[3];
      if (D.21572 == 0) goto <D.21570>; else goto <D.21573>;
      <D.21573>:
      D.21572 = data[3];
      D.21574 = is_valid_non_empty_string (ctx, D.21572);
      if (D.21574 == 0) goto <D.21570>; else goto <D.21571>;
      <D.21570>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21575>; else goto <D.21576>;
      <D.21575>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21572 = data[3];
        D.21577 = monoeg_g_strdup_printf ("Invalid method row %d invalid name field 0x%08x", i, D.21572);
        vinfo->info.message = D.21577;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21578 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21578;
      }
      <D.21576>:
      ctx->valid = 0;
      return;
      <D.21571>:
      D.21572 = data[3];
      name = get_string_ptr (ctx, D.21572);
      D.21579 = strcmp (".ctor", name);
      D.21580 = D.21579 == 0;
      is_ctor = (gboolean) D.21580;
      D.21581 = strcmp (".cctor", name);
      D.21582 = D.21581 == 0;
      is_cctor = (gboolean) D.21582;
      if (is_ctor != 0) goto <D.21583>; else goto <D.21585>;
      <D.21585>:
      if (is_cctor != 0) goto <D.21583>; else goto <D.21584>;
      <D.21583>:
      i.38 = (unsigned int) i;
      D.21587 = make_coded_token (78, 6, i.38);
      D.21588 = search_sorted_table (ctx, 42, 2, D.21587);
      if (D.21588 != -1) goto <D.21589>; else goto <D.21590>;
      <D.21589>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21591>; else goto <D.21592>;
      <D.21591>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21593 = monoeg_g_strdup_printf ("Invalid method row %d .ctor or .cctor has generic param", i);
        vinfo->info.message = D.21593;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21594 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21594;
      }
      <D.21592>:
      ctx->valid = 0;
      return;
      <D.21590>:
      <D.21584>:
      D.21595 = flags & 16;
      if (D.21595 != 0) goto <D.21596>; else goto <D.21597>;
      <D.21596>:
      D.21598 = flags & 352;
      if (D.21598 != 0) goto <D.21599>; else goto <D.21600>;
      <D.21599>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21601>; else goto <D.21602>;
      <D.21601>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21603 = monoeg_g_strdup_printf ("Invalid method row %d is static and (final, virtual or new slot)", i);
        vinfo->info.message = D.21603;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21604 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21604;
      }
      <D.21602>:
      ctx->valid = 0;
      return;
      <D.21600>:
      <D.21597>:
      D.21605 = flags & 1024;
      if (D.21605 != 0) goto <D.21606>; else goto <D.21607>;
      <D.21606>:
      D.21608 = flags & 8192;
      if (D.21608 != 0) goto <D.21609>; else goto <D.21610>;
      <D.21609>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21611>; else goto <D.21612>;
      <D.21611>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21613 = monoeg_g_strdup_printf ("Invalid method row %d is Abstract and PinvokeImpl", i);
        vinfo->info.message = D.21613;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21614 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21614;
      }
      <D.21612>:
      ctx->valid = 0;
      return;
      <D.21610>:
      D.21615 = flags & 32;
      if (D.21615 != 0) goto <D.21616>; else goto <D.21617>;
      <D.21616>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21618>; else goto <D.21619>;
      <D.21618>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21620 = monoeg_g_strdup_printf ("Invalid method row %d is Abstract and Final", i);
        vinfo->info.message = D.21620;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21621 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21621;
      }
      <D.21619>:
      ctx->valid = 0;
      return;
      <D.21617>:
      D.21622 = flags & 64;
      if (D.21622 == 0) goto <D.21623>; else goto <D.21624>;
      <D.21623>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21625>; else goto <D.21626>;
      <D.21625>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21627 = monoeg_g_strdup_printf ("Invalid method row %d is Abstract but not Virtual", i);
        vinfo->info.message = D.21627;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21628 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21628;
      }
      <D.21626>:
      ctx->valid = 0;
      return;
      <D.21624>:
      <D.21607>:
      if (access == 0) goto <D.21629>; else goto <D.21630>;
      <D.21629>:
      D.21631 = flags & 6144;
      if (D.21631 != 0) goto <D.21632>; else goto <D.21633>;
      <D.21632>:
      D.21634 = ctx->report_warning;
      if (D.21634 != 0) goto <D.21635>; else goto <D.21636>;
      <D.21635>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 2;
        D.21637 = monoeg_g_strdup_printf ("Invalid method row %d is CompileControlled and SpecialName or RtSpecialName", i);
        vinfo->info.message = D.21637;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21638 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21638;
      }
      ctx->valid = 0;
      return;
      <D.21636>:
      <D.21633>:
      <D.21630>:
      D.21639 = flags & 6144;
      if (D.21639 == 4096) goto <D.21640>; else goto <D.21641>;
      <D.21640>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21642>; else goto <D.21643>;
      <D.21642>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21644 = monoeg_g_strdup_printf ("Invalid method row %d is RTSpecialName but not SpecialName", i);
        vinfo->info.message = D.21644;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21645 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21645;
      }
      <D.21643>:
      ctx->valid = 0;
      return;
      <D.21641>:
      D.21646 = i + 1;
      D.21647 = (unsigned int) D.21646;
      if (D.21647 < module_method_list) goto <D.21648>; else goto <D.21649>;
      <D.21648>:
      D.21595 = flags & 16;
      if (D.21595 == 0) goto <D.21650>; else goto <D.21651>;
      <D.21650>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21652>; else goto <D.21653>;
      <D.21652>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21654 = monoeg_g_strdup_printf ("Invalid method row %d is a global method but not Static", i);
        vinfo->info.message = D.21654;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21655 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21655;
      }
      <D.21653>:
      ctx->valid = 0;
      return;
      <D.21651>:
      D.21656 = flags & 1088;
      if (D.21656 != 0) goto <D.21657>; else goto <D.21658>;
      <D.21657>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21659>; else goto <D.21660>;
      <D.21659>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21661 = monoeg_g_strdup_printf ("Invalid method row %d is a global method but is Abstract or Virtual", i);
        vinfo->info.message = D.21661;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21662 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21662;
      }
      <D.21660>:
      ctx->valid = 0;
      return;
      <D.21658>:
      if (access == 4) goto <D.21663>; else goto <D.21665>;
      <D.21665>:
      if (access == 2) goto <D.21663>; else goto <D.21666>;
      <D.21666>:
      if (access == 5) goto <D.21663>; else goto <D.21664>;
      <D.21663>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21667>; else goto <D.21668>;
      <D.21667>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21669 = monoeg_g_strdup_printf ("Invalid method row %d is a global method but not CompilerControled, Public, Private or Assembly", i);
        vinfo->info.message = D.21669;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21670 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21670;
      }
      <D.21668>:
      ctx->valid = 0;
      return;
      <D.21664>:
      <D.21649>:
      D.21671 = flags & 800;
      if (D.21671 != 0) goto <D.21672>; else goto <D.21673>;
      <D.21672>:
      D.21622 = flags & 64;
      if (D.21622 == 0) goto <D.21674>; else goto <D.21675>;
      <D.21674>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21676>; else goto <D.21677>;
      <D.21676>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21678 = monoeg_g_strdup_printf ("Invalid method row %d is (Final, NewSlot or Strict) but not Virtual", i);
        vinfo->info.message = D.21678;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21679 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21679;
      }
      <D.21677>:
      ctx->valid = 0;
      return;
      <D.21675>:
      <D.21673>:
      D.21608 = flags & 8192;
      if (D.21608 != 0) goto <D.21680>; else goto <D.21681>;
      <D.21680>:
      D.21622 = flags & 64;
      if (D.21622 != 0) goto <D.21682>; else goto <D.21683>;
      <D.21682>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21684>; else goto <D.21685>;
      <D.21684>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21686 = monoeg_g_strdup_printf ("Invalid method row %d is PinvokeImpl and Virtual", i);
        vinfo->info.message = D.21686;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21687 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21687;
      }
      <D.21685>:
      ctx->valid = 0;
      return;
      <D.21683>:
      D.21595 = flags & 16;
      if (D.21595 == 0) goto <D.21688>; else goto <D.21689>;
      <D.21688>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21690>; else goto <D.21691>;
      <D.21690>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21692 = monoeg_g_strdup_printf ("Invalid method row %d is PinvokeImpl but not Static", i);
        vinfo->info.message = D.21692;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21693 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21693;
      }
      <D.21691>:
      ctx->valid = 0;
      return;
      <D.21689>:
      <D.21681>:
      D.21605 = flags & 1024;
      if (D.21605 == 0) goto <D.21694>; else goto <D.21695>;
      <D.21694>:
      if (rva == 0) goto <D.21696>; else goto <D.21697>;
      <D.21696>:
      D.21608 = flags & 8192;
      if (D.21608 == 0) goto <D.21698>; else goto <D.21699>;
      <D.21698>:
      D.21700 = implflags & 4096;
      if (D.21700 == 0) goto <D.21701>; else goto <D.21702>;
      <D.21701>:
      if (code_type != 3) goto <D.21703>; else goto <D.21704>;
      <D.21703>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21705>; else goto <D.21706>;
      <D.21705>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21707 = monoeg_g_strdup_printf ("Invalid method row %d is not Abstract and neither PinvokeImpl, Runtime, InternalCall or with RVA != 0", i);
        vinfo->info.message = D.21707;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21708 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21708;
      }
      <D.21706>:
      ctx->valid = 0;
      return;
      <D.21704>:
      <D.21702>:
      <D.21699>:
      <D.21697>:
      <D.21695>:
      if (access == 0) goto <D.21709>; else goto <D.21710>;
      <D.21709>:
      if (rva == 0) goto <D.21711>; else goto <D.21712>;
      <D.21711>:
      D.21608 = flags & 8192;
      if (D.21608 == 0) goto <D.21713>; else goto <D.21714>;
      <D.21713>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21715>; else goto <D.21716>;
      <D.21715>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21717 = monoeg_g_strdup_printf ("Invalid method row %d is CompilerControlled but neither RVA != 0 or PinvokeImpl", i);
        vinfo->info.message = D.21717;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21718 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21718;
      }
      <D.21716>:
      ctx->valid = 0;
      return;
      <D.21714>:
      <D.21712>:
      <D.21710>:
      if (rva != 0) goto <D.21719>; else goto <D.21720>;
      <D.21719>:
      D.21723 = flags & 9216;
      if (D.21723 != 0) goto <D.21721>; else goto <D.21724>;
      <D.21724>:
      D.21700 = implflags & 4096;
      if (D.21700 != 0) goto <D.21721>; else goto <D.21722>;
      <D.21721>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21725>; else goto <D.21726>;
      <D.21725>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21727 = monoeg_g_strdup_printf ("Invalid method row %d has RVA != 0 but is either Abstract, InternalCall or PinvokeImpl", i);
        vinfo->info.message = D.21727;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21728 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21728;
      }
      <D.21726>:
      ctx->valid = 0;
      return;
      <D.21722>:
      if (code_type == 2) goto <D.21729>; else goto <D.21730>;
      <D.21729>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21731>; else goto <D.21732>;
      <D.21731>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21733 = monoeg_g_strdup_printf ("Invalid method row %d has RVA != 0 but is CodeTypeMask is neither Native, CIL or Runtime", i);
        vinfo->info.message = D.21733;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21734 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21734;
      }
      <D.21732>:
      ctx->valid = 0;
      return;
      <D.21730>:
      goto <D.21735>;
      <D.21720>:
      D.21723 = flags & 9216;
      if (D.21723 == 0) goto <D.21736>; else goto <D.21737>;
      <D.21736>:
      D.21700 = implflags & 4096;
      if (D.21700 == 0) goto <D.21738>; else goto <D.21739>;
      <D.21738>:
      if (code_type != 3) goto <D.21740>; else goto <D.21741>;
      <D.21740>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21742>; else goto <D.21743>;
      <D.21742>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21744 = monoeg_g_strdup_printf ("Invalid method row %d has RVA = 0 but neither Abstract, InternalCall, Runtime or PinvokeImpl", i);
        vinfo->info.message = D.21744;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21745 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21745;
      }
      <D.21743>:
      ctx->valid = 0;
      return;
      <D.21741>:
      <D.21739>:
      <D.21737>:
      <D.21735>:
      D.21608 = flags & 8192;
      if (D.21608 != 0) goto <D.21746>; else goto <D.21747>;
      <D.21746>:
      if (rva != 0) goto <D.21748>; else goto <D.21749>;
      <D.21748>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21750>; else goto <D.21751>;
      <D.21750>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21752 = monoeg_g_strdup_printf ("Invalid method row %d is PinvokeImpl but has RVA != 0", i);
        vinfo->info.message = D.21752;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21753 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21753;
      }
      <D.21751>:
      ctx->valid = 0;
      return;
      <D.21749>:
      i.38 = (unsigned int) i;
      D.21754 = make_coded_token (56, 6, i.38);
      D.21755 = search_sorted_table (ctx, 28, 1, D.21754);
      if (D.21755 == -1) goto <D.21756>; else goto <D.21757>;
      <D.21756>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21758>; else goto <D.21759>;
      <D.21758>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21760 = monoeg_g_strdup_printf ("Invalid method row %d is PinvokeImpl but has no row in the ImplMap table", i);
        vinfo->info.message = D.21760;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21761 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21761;
      }
      <D.21759>:
      ctx->valid = 0;
      return;
      <D.21757>:
      <D.21747>:
      D.21762 = flags & 4096;
      if (D.21762 != 0) goto <D.21763>; else goto <D.21764>;
      <D.21763>:
      if (is_ctor == 0) goto <D.21765>; else goto <D.21766>;
      <D.21765>:
      if (is_cctor == 0) goto <D.21767>; else goto <D.21768>;
      <D.21767>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21769>; else goto <D.21770>;
      <D.21769>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21771 = monoeg_g_strdup_printf ("Invalid method row %d is RtSpecialName but not named .ctor or .cctor", i);
        vinfo->info.message = D.21771;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21772 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21772;
      }
      <D.21770>:
      ctx->valid = 0;
      return;
      <D.21768>:
      <D.21766>:
      <D.21764>:
      if (is_ctor != 0) goto <D.21773>; else goto <D.21775>;
      <D.21775>:
      if (is_cctor != 0) goto <D.21773>; else goto <D.21774>;
      <D.21773>:
      D.21762 = flags & 4096;
      if (D.21762 == 0) goto <D.21776>; else goto <D.21777>;
      <D.21776>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21778>; else goto <D.21779>;
      <D.21778>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21780 = monoeg_g_strdup_printf ("Invalid method row %d is named .ctor or .cctor but is not RtSpecialName", i);
        vinfo->info.message = D.21780;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21781 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21781;
      }
      <D.21779>:
      ctx->valid = 0;
      return;
      <D.21777>:
      <D.21774>:
      D.21782 = data[4];
      if (D.21782 != 0) goto <D.21783>; else goto <D.21784>;
      <D.21783>:
      D.21782 = data[4];
      D.21785 = is_valid_blob_object (ctx, D.21782, 1);
      if (D.21785 == 0) goto <D.21786>; else goto <D.21787>;
      <D.21786>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21788>; else goto <D.21789>;
      <D.21788>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21782 = data[4];
        D.21790 = monoeg_g_strdup_printf ("Invalid method row %d invalid signature blob token 0x%x", i, D.21782);
        vinfo->info.message = D.21790;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21791 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21791;
      }
      <D.21789>:
      ctx->valid = 0;
      return;
      <D.21787>:
      <D.21784>:
      D.21792 = data[5];
      if (D.21792 == 0) goto <D.21793>; else goto <D.21794>;
      <D.21793>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21795>; else goto <D.21796>;
      <D.21795>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21797 = monoeg_g_strdup_printf ("Invalid method row %d ParamList be be >= 1", i);
        vinfo->info.message = D.21797;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21798 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21798;
      }
      <D.21796>:
      ctx->valid = 0;
      return;
      <D.21794>:
      D.21792 = data[5];
      if (D.21792 < paramlist) goto <D.21799>; else goto <D.21800>;
      <D.21799>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21801>; else goto <D.21802>;
      <D.21801>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21792 = data[5];
        D.21803 = monoeg_g_strdup_printf ("Invalid method row %d ParamList rowid 0x%08x can\'t be smaller than of previous row 0x%08x", i, D.21792, paramlist);
        vinfo->info.message = D.21803;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21804 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21804;
      }
      <D.21802>:
      ctx->valid = 0;
      return;
      <D.21800>:
      D.21792 = data[5];
      D.21550 = ctx->image;
      D.21805 = D.21550->tables[8].rows;
      D.21806 = (int) D.21805;
      D.21807 = D.21806 + 1;
      D.21808 = (unsigned int) D.21807;
      if (D.21792 > D.21808) goto <D.21809>; else goto <D.21810>;
      <D.21809>:
      D.21558 = ctx->report_error;
      if (D.21558 != 0) goto <D.21811>; else goto <D.21812>;
      <D.21811>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21792 = data[5];
        D.21813 = monoeg_g_strdup_printf ("Invalid method row %d ParamList rowid 0x%08x is out of range", i, D.21792);
        vinfo->info.message = D.21813;
        vinfo->exception_type = 3;
        D.21562 = ctx->errors;
        D.21814 = monoeg_g_slist_prepend (D.21562, vinfo);
        ctx->errors = D.21814;
      }
      <D.21812>:
      ctx->valid = 0;
      return;
      <D.21810>:
      paramlist = data[5];
      i = i + 1;
      <D.18944>:
      D.21815 = table->rows;
      D.21816 = (int) D.21815;
      if (D.21816 > i) goto <D.18943>; else goto <D.18945>;
      <D.18945>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


get_string_ptr (struct VerifyContext * ctx, guint offset)
{
  const char * D.21820;
  struct MonoImage * D.21821;
  const char * D.21822;
  sizetype D.21823;

  D.21821 = ctx->image;
  D.21822 = D.21821->heap_strings.data;
  D.21823 = (sizetype) offset;
  D.21820 = D.21822 + D.21823;
  return D.21820;
}


verify_param_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.21825;
  long unsigned int D.21826;
  long unsigned int D.21827;
  <unnamed-unsigned:24> D.21830;
  int D.21831;
  int D.21834;
  gchar * D.21837;
  struct GSList * D.21838;
  struct GSList * D.21839;
  unsigned int D.21840;
  gchar * D.21845;
  struct GSList * D.21846;
  unsigned int i.39;
  unsigned int D.21848;
  int D.21849;
  unsigned int D.21852;
  gchar * D.21857;
  struct GSList * D.21858;
  gchar * D.21864;
  struct GSList * D.21865;
  unsigned int D.21866;
  unsigned int D.21869;
  int D.21870;
  gchar * D.21875;
  struct GSList * D.21876;
  unsigned int D.21877;
  int D.21878;
  gchar * D.21883;
  struct GSList * D.21884;
  unsigned int D.21887;
  gchar * D.21892;
  struct GSList * D.21893;
  struct MonoTableInfo * table;
  guint32 data[3];
  guint32 flags;
  guint32 sequence;
  guint32 remaining_params;
  guint32 current_method;
  gboolean first_param;
  int i;

  try
    {
      D.21825 = ctx->image;
      table = &D.21825->tables[8];
      sequence = 0;
      current_method = 0;
      first_param = 1;
      D.21825 = ctx->image;
      D.21826 = BIT_FIELD_REF <*D.21825, 64, 2368>;
      D.21827 = D.21826 & 18446742974197923840;
      if (D.21827 == 0) goto <D.21828>; else goto <D.21829>;
      <D.21828>:
      D.21830 = table->rows;
      D.21831 = (int) D.21830;
      if (D.21831 > 0) goto <D.21832>; else goto <D.21833>;
      <D.21832>:
      D.21834 = ctx->report_error;
      if (D.21834 != 0) goto <D.21835>; else goto <D.21836>;
      <D.21835>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21837 = monoeg_strdup ("Param table has rows while the method table has zero");
        vinfo->info.message = D.21837;
        vinfo->exception_type = 3;
        D.21838 = ctx->errors;
        D.21839 = monoeg_g_slist_prepend (D.21838, vinfo);
        ctx->errors = D.21839;
      }
      <D.21836>:
      ctx->valid = 0;
      return;
      <D.21833>:
      return;
      <D.21829>:
      remaining_params = get_next_param_count (ctx, &current_method);
      i = 0;
      goto <D.18989>;
      <D.18988>:
      mono_metadata_decode_row (table, i, &data, 3);
      flags = data[0];
      D.21840 = flags & 53228;
      if (D.21840 != 0) goto <D.21841>; else goto <D.21842>;
      <D.21841>:
      D.21834 = ctx->report_error;
      if (D.21834 != 0) goto <D.21843>; else goto <D.21844>;
      <D.21843>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21845 = monoeg_g_strdup_printf ("Invalid param row %d bad Flags value 0x%08x", i, flags);
        vinfo->info.message = D.21845;
        vinfo->exception_type = 3;
        D.21838 = ctx->errors;
        D.21846 = monoeg_g_slist_prepend (D.21838, vinfo);
        ctx->errors = D.21846;
      }
      <D.21844>:
      ctx->valid = 0;
      return;
      <D.21842>:
      i.39 = (unsigned int) i;
      D.21848 = make_coded_token (5, 8, i.39);
      D.21849 = search_sorted_table (ctx, 11, 2, D.21848);
      if (D.21849 == -1) goto <D.21850>; else goto <D.21851>;
      <D.21850>:
      D.21852 = flags & 4096;
      if (D.21852 != 0) goto <D.21853>; else goto <D.21854>;
      <D.21853>:
      D.21834 = ctx->report_error;
      if (D.21834 != 0) goto <D.21855>; else goto <D.21856>;
      <D.21855>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21857 = monoeg_g_strdup_printf ("Invalid param row %d HasDefault = 1 but no owned row in Contant table", i);
        vinfo->info.message = D.21857;
        vinfo->exception_type = 3;
        D.21838 = ctx->errors;
        D.21858 = monoeg_g_slist_prepend (D.21838, vinfo);
        ctx->errors = D.21858;
      }
      <D.21856>:
      ctx->valid = 0;
      return;
      <D.21854>:
      goto <D.21859>;
      <D.21851>:
      D.21852 = flags & 4096;
      if (D.21852 == 0) goto <D.21860>; else goto <D.21861>;
      <D.21860>:
      D.21834 = ctx->report_error;
      if (D.21834 != 0) goto <D.21862>; else goto <D.21863>;
      <D.21862>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21864 = monoeg_g_strdup_printf ("Invalid param row %d HasDefault = 0 but has owned row in Contant table", i);
        vinfo->info.message = D.21864;
        vinfo->exception_type = 3;
        D.21838 = ctx->errors;
        D.21865 = monoeg_g_slist_prepend (D.21838, vinfo);
        ctx->errors = D.21865;
      }
      <D.21863>:
      ctx->valid = 0;
      return;
      <D.21861>:
      <D.21859>:
      D.21866 = flags & 8192;
      if (D.21866 != 0) goto <D.21867>; else goto <D.21868>;
      <D.21867>:
      i.39 = (unsigned int) i;
      D.21869 = make_coded_token (32, 8, i.39);
      D.21870 = search_sorted_table (ctx, 13, 0, D.21869);
      if (D.21870 == -1) goto <D.21871>; else goto <D.21872>;
      <D.21871>:
      D.21834 = ctx->report_error;
      if (D.21834 != 0) goto <D.21873>; else goto <D.21874>;
      <D.21873>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21875 = monoeg_g_strdup_printf ("Invalid param row %d HasFieldMarshal = 1 but no owned row in FieldMarshal table", i);
        vinfo->info.message = D.21875;
        vinfo->exception_type = 3;
        D.21838 = ctx->errors;
        D.21876 = monoeg_g_slist_prepend (D.21838, vinfo);
        ctx->errors = D.21876;
      }
      <D.21874>:
      ctx->valid = 0;
      return;
      <D.21872>:
      <D.21868>:
      D.21877 = data[2];
      D.21878 = is_valid_string (ctx, D.21877);
      if (D.21878 == 0) goto <D.21879>; else goto <D.21880>;
      <D.21879>:
      D.21834 = ctx->report_error;
      if (D.21834 != 0) goto <D.21881>; else goto <D.21882>;
      <D.21881>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21877 = data[2];
        D.21883 = monoeg_g_strdup_printf ("Invalid param row %d Name = 1 bad token 0x%08x", i, D.21877);
        vinfo->info.message = D.21883;
        vinfo->exception_type = 3;
        D.21838 = ctx->errors;
        D.21884 = monoeg_g_slist_prepend (D.21838, vinfo);
        ctx->errors = D.21884;
      }
      <D.21882>:
      ctx->valid = 0;
      return;
      <D.21880>:
      if (first_param == 0) goto <D.21885>; else goto <D.21886>;
      <D.21885>:
      D.21887 = data[1];
      if (D.21887 <= sequence) goto <D.21888>; else goto <D.21889>;
      <D.21888>:
      D.21834 = ctx->report_error;
      if (D.21834 != 0) goto <D.21890>; else goto <D.21891>;
      <D.21890>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21887 = data[1];
        D.21892 = monoeg_g_strdup_printf ("Invalid param row %d sequece = %d previus param has %d", i, D.21887, sequence);
        vinfo->info.message = D.21892;
        vinfo->exception_type = 3;
        D.21838 = ctx->errors;
        D.21893 = monoeg_g_slist_prepend (D.21838, vinfo);
        ctx->errors = D.21893;
      }
      <D.21891>:
      ctx->valid = 0;
      return;
      <D.21889>:
      <D.21886>:
      first_param = 0;
      sequence = data[1];
      remaining_params = remaining_params + 4294967295;
      if (remaining_params == 0) goto <D.21894>; else goto <D.21895>;
      <D.21894>:
      remaining_params = get_next_param_count (ctx, &current_method);
      first_param = 1;
      <D.21895>:
      i = i + 1;
      <D.18989>:
      D.21830 = table->rows;
      D.21831 = (int) D.21830;
      if (D.21831 > i) goto <D.18988>; else goto <D.18990>;
      <D.18990>:
    }
  finally
    {
      data = {CLOBBER};
      current_method = {CLOBBER};
    }
}


is_valid_string (struct VerifyContext * ctx, guint32 offset)
{
  gboolean D.21899;

  D.21899 = is_valid_string_full (ctx, offset, 1);
  return D.21899;
}


get_next_param_count (struct VerifyContext * ctx, guint32 * current_method)
{
  struct MonoImage * D.21901;
  unsigned int row.40;
  int row.41;
  int row.42;
  guint32 D.21907;
  <unnamed-unsigned:24> D.21908;
  unsigned int D.21909;
  struct MonoTableInfo * table;
  guint32 row;
  guint32 paramlist;
  guint32 tmp;

  D.21901 = ctx->image;
  table = &D.21901->tables[6];
  row = *current_method;
  row.40 = row;
  row = row.40 + 1;
  row.41 = (int) row.40;
  paramlist = mono_metadata_decode_row_col (table, row.41, 5);
  goto <D.18968>;
  <D.18967>:
  row.42 = (int) row;
  tmp = mono_metadata_decode_row_col (table, row.42, 5);
  if (tmp > paramlist) goto <D.21905>; else goto <D.21906>;
  <D.21905>:
  *current_method = row;
  D.21907 = tmp - paramlist;
  return D.21907;
  <D.21906>:
  row = row + 1;
  <D.18968>:
  D.21908 = table->rows;
  D.21909 = (unsigned int) D.21908;
  if (D.21909 > row) goto <D.18967>; else goto <D.18969>;
  <D.18969>:
  D.21908 = table->rows;
  D.21909 = (unsigned int) D.21908;
  *current_method = D.21909;
  D.21907 = 4294967295;
  return D.21907;
}


verify_interfaceimpl_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.21911;
  unsigned int D.21912;
  <unnamed-unsigned:24> D.21915;
  unsigned int D.21916;
  int D.21919;
  gchar * D.21922;
  struct GSList * D.21923;
  struct GSList * D.21924;
  unsigned int D.21925;
  int D.21926;
  gchar * D.21931;
  struct GSList * D.21932;
  unsigned int D.21933;
  gchar * D.21938;
  struct GSList * D.21939;
  <unnamed-unsigned:24> D.21940;
  int D.21941;
  struct MonoTableInfo * table;
  guint32 data[2];
  int i;

  try
    {
      D.21911 = ctx->image;
      table = &D.21911->tables[9];
      i = 0;
      goto <D.19001>;
      <D.19000>:
      mono_metadata_decode_row (table, i, &data, 2);
      D.21912 = data[0];
      if (D.21912 != 0) goto <D.21913>; else goto <D.21914>;
      <D.21913>:
      D.21912 = data[0];
      D.21911 = ctx->image;
      D.21915 = D.21911->tables[2].rows;
      D.21916 = (unsigned int) D.21915;
      if (D.21912 > D.21916) goto <D.21917>; else goto <D.21918>;
      <D.21917>:
      D.21919 = ctx->report_error;
      if (D.21919 != 0) goto <D.21920>; else goto <D.21921>;
      <D.21920>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21912 = data[0];
        D.21922 = monoeg_g_strdup_printf ("Invalid InterfaceImpl row %d Class field 0x%08x", i, D.21912);
        vinfo->info.message = D.21922;
        vinfo->exception_type = 3;
        D.21923 = ctx->errors;
        D.21924 = monoeg_g_slist_prepend (D.21923, vinfo);
        ctx->errors = D.21924;
      }
      <D.21921>:
      ctx->valid = 0;
      return;
      <D.21918>:
      <D.21914>:
      D.21925 = data[1];
      D.21926 = is_valid_coded_index (ctx, 0, D.21925);
      if (D.21926 == 0) goto <D.21927>; else goto <D.21928>;
      <D.21927>:
      D.21919 = ctx->report_error;
      if (D.21919 != 0) goto <D.21929>; else goto <D.21930>;
      <D.21929>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21925 = data[1];
        D.21931 = monoeg_g_strdup_printf ("Invalid InterfaceImpl row %d Inteface field coded index 0x%08x", i, D.21925);
        vinfo->info.message = D.21931;
        vinfo->exception_type = 3;
        D.21923 = ctx->errors;
        D.21932 = monoeg_g_slist_prepend (D.21923, vinfo);
        ctx->errors = D.21932;
      }
      <D.21930>:
      ctx->valid = 0;
      return;
      <D.21928>:
      D.21925 = data[1];
      D.21933 = get_coded_index_token (0, D.21925);
      if (D.21933 == 0) goto <D.21934>; else goto <D.21935>;
      <D.21934>:
      D.21919 = ctx->report_error;
      if (D.21919 != 0) goto <D.21936>; else goto <D.21937>;
      <D.21936>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21938 = monoeg_g_strdup_printf ("Invalid InterfaceImpl row %d Inteface field is null", i);
        vinfo->info.message = D.21938;
        vinfo->exception_type = 3;
        D.21923 = ctx->errors;
        D.21939 = monoeg_g_slist_prepend (D.21923, vinfo);
        ctx->errors = D.21939;
      }
      <D.21937>:
      ctx->valid = 0;
      return;
      <D.21935>:
      i = i + 1;
      <D.19001>:
      D.21940 = table->rows;
      D.21941 = (int) D.21940;
      if (D.21941 > i) goto <D.19000>; else goto <D.19002>;
      <D.19002>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_memberref_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.21945;
  unsigned int D.21946;
  int D.21947;
  int D.21950;
  gchar * D.21953;
  struct GSList * D.21954;
  struct GSList * D.21955;
  unsigned int D.21956;
  gchar * D.21961;
  struct GSList * D.21962;
  unsigned int D.21963;
  int D.21964;
  gchar * D.21969;
  struct GSList * D.21970;
  unsigned int D.21971;
  int D.21974;
  gchar * D.21979;
  struct GSList * D.21980;
  <unnamed-unsigned:24> D.21981;
  int D.21982;
  struct MonoTableInfo * table;
  guint32 data[3];
  int i;

  try
    {
      D.21945 = ctx->image;
      table = &D.21945->tables[10];
      i = 0;
      goto <D.19014>;
      <D.19013>:
      mono_metadata_decode_row (table, i, &data, 3);
      D.21946 = data[0];
      D.21947 = is_valid_coded_index (ctx, 41, D.21946);
      if (D.21947 == 0) goto <D.21948>; else goto <D.21949>;
      <D.21948>:
      D.21950 = ctx->report_error;
      if (D.21950 != 0) goto <D.21951>; else goto <D.21952>;
      <D.21951>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21946 = data[0];
        D.21953 = monoeg_g_strdup_printf ("Invalid MemberRef row %d Class field coded index 0x%08x", i, D.21946);
        vinfo->info.message = D.21953;
        vinfo->exception_type = 3;
        D.21954 = ctx->errors;
        D.21955 = monoeg_g_slist_prepend (D.21954, vinfo);
        ctx->errors = D.21955;
      }
      <D.21952>:
      ctx->valid = 0;
      return;
      <D.21949>:
      D.21946 = data[0];
      D.21956 = get_coded_index_token (41, D.21946);
      if (D.21956 == 0) goto <D.21957>; else goto <D.21958>;
      <D.21957>:
      D.21950 = ctx->report_error;
      if (D.21950 != 0) goto <D.21959>; else goto <D.21960>;
      <D.21959>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21961 = monoeg_g_strdup_printf ("Invalid MemberRef row %d Class field coded is null", i);
        vinfo->info.message = D.21961;
        vinfo->exception_type = 3;
        D.21954 = ctx->errors;
        D.21962 = monoeg_g_slist_prepend (D.21954, vinfo);
        ctx->errors = D.21962;
      }
      <D.21960>:
      ctx->valid = 0;
      return;
      <D.21958>:
      D.21963 = data[1];
      D.21964 = is_valid_non_empty_string (ctx, D.21963);
      if (D.21964 == 0) goto <D.21965>; else goto <D.21966>;
      <D.21965>:
      D.21950 = ctx->report_error;
      if (D.21950 != 0) goto <D.21967>; else goto <D.21968>;
      <D.21967>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21963 = data[1];
        D.21969 = monoeg_g_strdup_printf ("Invalid MemberRef row %d Name field coded is invalid or empty 0x%08x", i, D.21963);
        vinfo->info.message = D.21969;
        vinfo->exception_type = 3;
        D.21954 = ctx->errors;
        D.21970 = monoeg_g_slist_prepend (D.21954, vinfo);
        ctx->errors = D.21970;
      }
      <D.21968>:
      ctx->valid = 0;
      return;
      <D.21966>:
      D.21971 = data[2];
      if (D.21971 != 0) goto <D.21972>; else goto <D.21973>;
      <D.21972>:
      D.21971 = data[2];
      D.21974 = is_valid_blob_object (ctx, D.21971, 1);
      if (D.21974 == 0) goto <D.21975>; else goto <D.21976>;
      <D.21975>:
      D.21950 = ctx->report_error;
      if (D.21950 != 0) goto <D.21977>; else goto <D.21978>;
      <D.21977>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21971 = data[2];
        D.21979 = monoeg_g_strdup_printf ("Invalid MemberRef row %d invalid signature blob token 0x%x", i, D.21971);
        vinfo->info.message = D.21979;
        vinfo->exception_type = 3;
        D.21954 = ctx->errors;
        D.21980 = monoeg_g_slist_prepend (D.21954, vinfo);
        ctx->errors = D.21980;
      }
      <D.21978>:
      ctx->valid = 0;
      return;
      <D.21976>:
      <D.21973>:
      i = i + 1;
      <D.19014>:
      D.21981 = table->rows;
      D.21982 = (int) D.21981;
      if (D.21982 > i) goto <D.19013>; else goto <D.19015>;
      <D.19015>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_constant_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.21986;
  unsigned int D.21987;
  int D.21992;
  gchar * D.21995;
  struct GSList * D.21996;
  struct GSList * D.21997;
  unsigned int D.21998;
  int D.21999;
  gchar * D.22004;
  struct GSList * D.22005;
  unsigned int D.22006;
  gchar * D.22011;
  struct GSList * D.22012;
  unsigned int D.22013;
  int D.22014;
  gchar * D.22019;
  struct GSList * D.22020;
  <unnamed-unsigned:24> D.22021;
  int D.22022;
  struct MonoTableInfo * table;
  guint32 data[4];
  guint32 type;
  int i;

  try
    {
      D.21986 = ctx->image;
      table = &D.21986->tables[11];
      i = 0;
      goto <D.19038>;
      <D.19037>:
      mono_metadata_decode_row (table, i, &data, 4);
      type = data[0];
      D.21987 = type + 4294967294;
      if (D.21987 > 12) goto <D.21988>; else goto <D.21989>;
      <D.21988>:
      if (type != 18) goto <D.21990>; else goto <D.21991>;
      <D.21990>:
      D.21992 = ctx->report_error;
      if (D.21992 != 0) goto <D.21993>; else goto <D.21994>;
      <D.21993>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21995 = monoeg_g_strdup_printf ("Invalid Constant row %d Type field 0x%08x", i, type);
        vinfo->info.message = D.21995;
        vinfo->exception_type = 3;
        D.21996 = ctx->errors;
        D.21997 = monoeg_g_slist_prepend (D.21996, vinfo);
        ctx->errors = D.21997;
      }
      <D.21994>:
      ctx->valid = 0;
      return;
      <D.21991>:
      <D.21989>:
      D.21998 = data[2];
      D.21999 = is_valid_coded_index (ctx, 5, D.21998);
      if (D.21999 == 0) goto <D.22000>; else goto <D.22001>;
      <D.22000>:
      D.21992 = ctx->report_error;
      if (D.21992 != 0) goto <D.22002>; else goto <D.22003>;
      <D.22002>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.21998 = data[2];
        D.22004 = monoeg_g_strdup_printf ("Invalid Constant row %d Parent field coded index 0x%08x", i, D.21998);
        vinfo->info.message = D.22004;
        vinfo->exception_type = 3;
        D.21996 = ctx->errors;
        D.22005 = monoeg_g_slist_prepend (D.21996, vinfo);
        ctx->errors = D.22005;
      }
      <D.22003>:
      ctx->valid = 0;
      return;
      <D.22001>:
      D.21998 = data[2];
      D.22006 = get_coded_index_token (5, D.21998);
      if (D.22006 == 0) goto <D.22007>; else goto <D.22008>;
      <D.22007>:
      D.21992 = ctx->report_error;
      if (D.21992 != 0) goto <D.22009>; else goto <D.22010>;
      <D.22009>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22011 = monoeg_g_strdup_printf ("Invalid Constant row %d Parent field coded is null", i);
        vinfo->info.message = D.22011;
        vinfo->exception_type = 3;
        D.21996 = ctx->errors;
        D.22012 = monoeg_g_slist_prepend (D.21996, vinfo);
        ctx->errors = D.22012;
      }
      <D.22010>:
      ctx->valid = 0;
      return;
      <D.22008>:
      D.22013 = data[3];
      D.22014 = is_valid_constant (ctx, type, D.22013);
      if (D.22014 == 0) goto <D.22015>; else goto <D.22016>;
      <D.22015>:
      D.21992 = ctx->report_error;
      if (D.21992 != 0) goto <D.22017>; else goto <D.22018>;
      <D.22017>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22013 = data[3];
        D.22019 = monoeg_g_strdup_printf ("Invalid Constant row %d Value field 0x%08x", i, D.22013);
        vinfo->info.message = D.22019;
        vinfo->exception_type = 3;
        D.21996 = ctx->errors;
        D.22020 = monoeg_g_slist_prepend (D.21996, vinfo);
        ctx->errors = D.22020;
      }
      <D.22018>:
      ctx->valid = 0;
      return;
      <D.22016>:
      i = i + 1;
      <D.19038>:
      D.22021 = table->rows;
      D.22022 = (int) D.22021;
      if (D.22022 > i) goto <D.19037>; else goto <D.19039>;
      <D.19039>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


is_valid_constant (struct VerifyContext * ctx, guint32 type, guint32 offset)
{
  struct MonoImage * D.22026;
  struct MonoStreamHeader * D.22027;
  unsigned int D.22028;
  int D.22031;
  gchar * D.22034;
  struct GSList * D.22035;
  struct GSList * D.22036;
  gboolean D.22037;
  const char * D.22038;
  sizetype D.22039;
  unsigned int D.22040;
  sizetype D.22041;
  sizetype D.22042;
  const char * D.22043;
  unsigned int D.22044;
  int D.22045;
  gchar * D.22050;
  struct GSList * D.22051;
  unsigned int bytes.43;
  unsigned int entry_size.44;
  unsigned int D.22058;
  unsigned int D.22060;
  unsigned int D.22063;
  unsigned int D.22064;
  gchar * D.22065;
  struct GSList * D.22066;
  gchar * D.22071;
  struct GSList * D.22072;
  unsigned int D.22075;
  unsigned int D.22077;
  gchar * D.22080;
  struct GSList * D.22081;
  unsigned int D.22084;
  unsigned int D.22085;
  unsigned int D.22086;
  unsigned int D.22087;
  unsigned int D.22088;
  unsigned int D.22089;
  unsigned int D.22090;
  unsigned int D.22091;
  unsigned int D.22092;
  unsigned int D.22093;
  gchar * D.22098;
  struct GSList * D.22099;
  struct OffsetAndSize blob;
  guint32 size;
  guint32 entry_size;
  guint32 bytes;

  try
    {
      D.22026 = ctx->image;
      D.22027 = &D.22026->heap_blob;
      blob = get_metadata_stream (ctx, D.22027); [return slot optimization]
      D.22028 = blob.size;
      if (D.22028 < offset) goto <D.22029>; else goto <D.22030>;
      <D.22029>:
      D.22031 = ctx->report_error;
      if (D.22031 != 0) goto <D.22032>; else goto <D.22033>;
      <D.22032>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22034 = monoeg_strdup ("ContantValue: invalid offset");
        vinfo->info.message = D.22034;
        vinfo->exception_type = 3;
        D.22035 = ctx->errors;
        D.22036 = monoeg_g_slist_prepend (D.22035, vinfo);
        ctx->errors = D.22036;
      }
      <D.22033>:
      ctx->valid = 0;
      D.22037 = 0;
      return D.22037;
      <D.22030>:
      D.22038 = ctx->data;
      D.22039 = (sizetype) offset;
      D.22040 = blob.offset;
      D.22041 = (sizetype) D.22040;
      D.22042 = D.22039 + D.22041;
      D.22043 = D.22038 + D.22042;
      D.22028 = blob.size;
      D.22040 = blob.offset;
      D.22044 = D.22028 - D.22040;
      D.22045 = decode_value (D.22043, D.22044, &entry_size, &bytes);
      if (D.22045 == 0) goto <D.22046>; else goto <D.22047>;
      <D.22046>:
      D.22031 = ctx->report_error;
      if (D.22031 != 0) goto <D.22048>; else goto <D.22049>;
      <D.22048>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22050 = monoeg_strdup ("ContantValue: not enough space to decode size");
        vinfo->info.message = D.22050;
        vinfo->exception_type = 3;
        D.22035 = ctx->errors;
        D.22051 = monoeg_g_slist_prepend (D.22035, vinfo);
        ctx->errors = D.22051;
      }
      <D.22049>:
      ctx->valid = 0;
      D.22037 = 0;
      return D.22037;
      <D.22047>:
      if (type == 14) goto <D.22052>; else goto <D.22053>;
      <D.22052>:
      bytes.43 = bytes;
      offset = offset + bytes.43;
      entry_size.44 = entry_size;
      D.22058 = offset + entry_size.44;
      D.22028 = blob.size;
      if (D.22058 > D.22028) goto <D.22055>; else goto <D.22059>;
      <D.22059>:
      entry_size.44 = entry_size;
      D.22060 = ~entry_size.44;
      if (D.22060 < offset) goto <D.22055>; else goto <D.22056>;
      <D.22055>:
      D.22031 = ctx->report_error;
      if (D.22031 != 0) goto <D.22061>; else goto <D.22062>;
      <D.22061>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        entry_size.44 = entry_size;
        D.22063 = entry_size.44 * 2;
        D.22028 = blob.size;
        D.22064 = D.22028 - offset;
        D.22065 = monoeg_g_strdup_printf ("ContantValue: not enough space for string, required %d but got %d", D.22063, D.22064);
        vinfo->info.message = D.22065;
        vinfo->exception_type = 3;
        D.22035 = ctx->errors;
        D.22066 = monoeg_g_slist_prepend (D.22035, vinfo);
        ctx->errors = D.22066;
      }
      <D.22062>:
      ctx->valid = 0;
      D.22037 = 0;
      return D.22037;
      <D.22056>:
      D.22037 = 1;
      return D.22037;
      <D.22053>:
      switch (type) <default: <D.18741>, case 2: <D.18727>, case 3: <D.18731>, case 4: <D.18728>, case 5: <D.18729>, case 6: <D.18732>, case 7: <D.18733>, case 8: <D.18734>, case 9: <D.18735>, case 10: <D.18738>, case 11: <D.18739>, case 12: <D.18736>, case 13: <D.18740>, case 18: <D.18737>>
      <D.18727>:
      <D.18728>:
      <D.18729>:
      size = 1;
      goto <D.18730>;
      <D.18731>:
      <D.18732>:
      <D.18733>:
      size = 2;
      goto <D.18730>;
      <D.18734>:
      <D.18735>:
      <D.18736>:
      <D.18737>:
      size = 4;
      goto <D.18730>;
      <D.18738>:
      <D.18739>:
      <D.18740>:
      size = 8;
      goto <D.18730>;
      <D.18741>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "metadata-verify.c", 2221);
      <D.18730>:
      entry_size.44 = entry_size;
      if (size != entry_size.44) goto <D.22067>; else goto <D.22068>;
      <D.22067>:
      D.22031 = ctx->report_error;
      if (D.22031 != 0) goto <D.22069>; else goto <D.22070>;
      <D.22069>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        entry_size.44 = entry_size;
        D.22071 = monoeg_g_strdup_printf ("ContantValue: Expected size %d but got %d", size, entry_size.44);
        vinfo->info.message = D.22071;
        vinfo->exception_type = 3;
        D.22035 = ctx->errors;
        D.22072 = monoeg_g_slist_prepend (D.22035, vinfo);
        ctx->errors = D.22072;
      }
      <D.22070>:
      ctx->valid = 0;
      D.22037 = 0;
      return D.22037;
      <D.22068>:
      bytes.43 = bytes;
      offset = offset + bytes.43;
      D.22075 = offset + size;
      D.22028 = blob.size;
      if (D.22075 > D.22028) goto <D.22073>; else goto <D.22076>;
      <D.22076>:
      D.22077 = ~size;
      if (D.22077 < offset) goto <D.22073>; else goto <D.22074>;
      <D.22073>:
      D.22031 = ctx->report_error;
      if (D.22031 != 0) goto <D.22078>; else goto <D.22079>;
      <D.22078>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22028 = blob.size;
        D.22064 = D.22028 - offset;
        D.22080 = monoeg_g_strdup_printf ("ContantValue: Not enough room for constant, required %d but have %d", size, D.22064);
        vinfo->info.message = D.22080;
        vinfo->exception_type = 3;
        D.22035 = ctx->errors;
        D.22081 = monoeg_g_slist_prepend (D.22035, vinfo);
        ctx->errors = D.22081;
      }
      <D.22079>:
      ctx->valid = 0;
      D.22037 = 0;
      return D.22037;
      <D.22074>:
      if (type == 18) goto <D.22082>; else goto <D.22083>;
      <D.22082>:
      D.22038 = ctx->data;
      D.22040 = blob.offset;
      D.22041 = (sizetype) D.22040;
      D.22039 = (sizetype) offset;
      D.22042 = D.22041 + D.22039;
      D.22043 = D.22038 + D.22042;
      D.22084 = MEM[(const guint32 *)D.22043];
      D.22085 = D.22084 << 24;
      D.22038 = ctx->data;
      D.22040 = blob.offset;
      D.22041 = (sizetype) D.22040;
      D.22039 = (sizetype) offset;
      D.22042 = D.22041 + D.22039;
      D.22043 = D.22038 + D.22042;
      D.22084 = MEM[(const guint32 *)D.22043];
      D.22086 = D.22084 >> 8;
      D.22087 = D.22086 & 65280;
      D.22088 = D.22085 | D.22087;
      D.22038 = ctx->data;
      D.22040 = blob.offset;
      D.22041 = (sizetype) D.22040;
      D.22039 = (sizetype) offset;
      D.22042 = D.22041 + D.22039;
      D.22043 = D.22038 + D.22042;
      D.22084 = MEM[(const guint32 *)D.22043];
      D.22089 = D.22084 << 8;
      D.22090 = D.22089 & 16711680;
      D.22091 = D.22088 | D.22090;
      D.22038 = ctx->data;
      D.22040 = blob.offset;
      D.22041 = (sizetype) D.22040;
      D.22039 = (sizetype) offset;
      D.22042 = D.22041 + D.22039;
      D.22043 = D.22038 + D.22042;
      D.22084 = MEM[(const guint32 *)D.22043];
      D.22092 = D.22084 >> 24;
      D.22093 = D.22091 | D.22092;
      if (D.22093 != 0) goto <D.22094>; else goto <D.22095>;
      <D.22094>:
      D.22031 = ctx->report_error;
      if (D.22031 != 0) goto <D.22096>; else goto <D.22097>;
      <D.22096>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22098 = monoeg_g_strdup_printf ("ContantValue: Type is class but value is not null");
        vinfo->info.message = D.22098;
        vinfo->exception_type = 3;
        D.22035 = ctx->errors;
        D.22099 = monoeg_g_slist_prepend (D.22035, vinfo);
        ctx->errors = D.22099;
      }
      <D.22097>:
      ctx->valid = 0;
      D.22037 = 0;
      return D.22037;
      <D.22095>:
      <D.22083>:
      D.22037 = 1;
      return D.22037;
    }
  finally
    {
      blob = {CLOBBER};
      entry_size = {CLOBBER};
      bytes = {CLOBBER};
    }
}


verify_cattr_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.22102;
  unsigned int D.22103;
  int D.22104;
  int D.22107;
  gchar * D.22110;
  struct GSList * D.22111;
  struct GSList * D.22112;
  unsigned int D.22115;
  int D.22116;
  unsigned int D.22118;
  gchar * D.22121;
  struct GSList * D.22122;
  unsigned int D.22123;
  int D.22126;
  gchar * D.22131;
  struct GSList * D.22132;
  <unnamed-unsigned:24> D.22133;
  int D.22134;
  struct MonoTableInfo * table;
  guint32 data[3];
  int i;

  try
    {
      D.22102 = ctx->image;
      table = &D.22102->tables[12];
      i = 0;
      goto <D.19050>;
      <D.19049>:
      mono_metadata_decode_row (table, i, &data, 3);
      D.22103 = data[0];
      D.22104 = is_valid_coded_index (ctx, 10, D.22103);
      if (D.22104 == 0) goto <D.22105>; else goto <D.22106>;
      <D.22105>:
      D.22107 = ctx->report_error;
      if (D.22107 != 0) goto <D.22108>; else goto <D.22109>;
      <D.22108>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22103 = data[0];
        D.22110 = monoeg_g_strdup_printf ("Invalid CustomAttribute row %d Parent field 0x%08x", i, D.22103);
        vinfo->info.message = D.22110;
        vinfo->exception_type = 3;
        D.22111 = ctx->errors;
        D.22112 = monoeg_g_slist_prepend (D.22111, vinfo);
        ctx->errors = D.22112;
      }
      <D.22109>:
      ctx->valid = 0;
      return;
      <D.22106>:
      D.22115 = data[1];
      D.22116 = is_valid_coded_index (ctx, 65, D.22115);
      if (D.22116 == 0) goto <D.22113>; else goto <D.22117>;
      <D.22117>:
      D.22115 = data[1];
      D.22118 = get_coded_index_token (65, D.22115);
      if (D.22118 == 0) goto <D.22113>; else goto <D.22114>;
      <D.22113>:
      D.22107 = ctx->report_error;
      if (D.22107 != 0) goto <D.22119>; else goto <D.22120>;
      <D.22119>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22115 = data[1];
        D.22121 = monoeg_g_strdup_printf ("Invalid CustomAttribute row %d Type field 0x%08x", i, D.22115);
        vinfo->info.message = D.22121;
        vinfo->exception_type = 3;
        D.22111 = ctx->errors;
        D.22122 = monoeg_g_slist_prepend (D.22111, vinfo);
        ctx->errors = D.22122;
      }
      <D.22120>:
      ctx->valid = 0;
      return;
      <D.22114>:
      D.22123 = data[2];
      if (D.22123 != 0) goto <D.22124>; else goto <D.22125>;
      <D.22124>:
      D.22123 = data[2];
      D.22126 = is_valid_blob_object (ctx, D.22123, 0);
      if (D.22126 == 0) goto <D.22127>; else goto <D.22128>;
      <D.22127>:
      D.22107 = ctx->report_error;
      if (D.22107 != 0) goto <D.22129>; else goto <D.22130>;
      <D.22129>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22123 = data[2];
        D.22131 = monoeg_g_strdup_printf ("Invalid CustomAttribute row %d invalid value blob 0x%x", i, D.22123);
        vinfo->info.message = D.22131;
        vinfo->exception_type = 3;
        D.22111 = ctx->errors;
        D.22132 = monoeg_g_slist_prepend (D.22111, vinfo);
        ctx->errors = D.22132;
      }
      <D.22130>:
      ctx->valid = 0;
      return;
      <D.22128>:
      <D.22125>:
      i = i + 1;
      <D.19050>:
      D.22133 = table->rows;
      D.22134 = (int) D.22133;
      if (D.22134 > i) goto <D.19049>; else goto <D.19051>;
      <D.19051>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_field_marshal_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.22138;
  unsigned int D.22139;
  int D.22140;
  int D.22143;
  gchar * D.22146;
  struct GSList * D.22147;
  struct GSList * D.22148;
  unsigned int D.22149;
  gchar * D.22154;
  struct GSList * D.22155;
  unsigned int D.22156;
  gchar * D.22161;
  struct GSList * D.22162;
  int D.22163;
  gchar * D.22168;
  struct GSList * D.22169;
  <unnamed-unsigned:24> D.22170;
  int D.22171;
  struct MonoTableInfo * table;
  guint32 data[2];
  int i;

  try
    {
      D.22138 = ctx->image;
      table = &D.22138->tables[13];
      i = 0;
      goto <D.19083>;
      <D.19082>:
      mono_metadata_decode_row (table, i, &data, 2);
      D.22139 = data[0];
      D.22140 = is_valid_coded_index (ctx, 32, D.22139);
      if (D.22140 == 0) goto <D.22141>; else goto <D.22142>;
      <D.22141>:
      D.22143 = ctx->report_error;
      if (D.22143 != 0) goto <D.22144>; else goto <D.22145>;
      <D.22144>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22139 = data[0];
        D.22146 = monoeg_g_strdup_printf ("Invalid FieldMarshal row %d Parent field 0x%08x", i, D.22139);
        vinfo->info.message = D.22146;
        vinfo->exception_type = 3;
        D.22147 = ctx->errors;
        D.22148 = monoeg_g_slist_prepend (D.22147, vinfo);
        ctx->errors = D.22148;
      }
      <D.22145>:
      ctx->valid = 0;
      return;
      <D.22142>:
      D.22139 = data[0];
      D.22149 = get_coded_index_token (32, D.22139);
      if (D.22149 == 0) goto <D.22150>; else goto <D.22151>;
      <D.22150>:
      D.22143 = ctx->report_error;
      if (D.22143 != 0) goto <D.22152>; else goto <D.22153>;
      <D.22152>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22154 = monoeg_g_strdup_printf ("Invalid FieldMarshal row %d Parent field is null", i);
        vinfo->info.message = D.22154;
        vinfo->exception_type = 3;
        D.22147 = ctx->errors;
        D.22155 = monoeg_g_slist_prepend (D.22147, vinfo);
        ctx->errors = D.22155;
      }
      <D.22153>:
      ctx->valid = 0;
      return;
      <D.22151>:
      D.22156 = data[1];
      if (D.22156 == 0) goto <D.22157>; else goto <D.22158>;
      <D.22157>:
      D.22143 = ctx->report_error;
      if (D.22143 != 0) goto <D.22159>; else goto <D.22160>;
      <D.22159>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22161 = monoeg_g_strdup_printf ("Invalid FieldMarshal row %d NativeType field is null", i);
        vinfo->info.message = D.22161;
        vinfo->exception_type = 3;
        D.22147 = ctx->errors;
        D.22162 = monoeg_g_slist_prepend (D.22147, vinfo);
        ctx->errors = D.22162;
      }
      <D.22160>:
      ctx->valid = 0;
      return;
      <D.22158>:
      D.22156 = data[1];
      D.22163 = is_valid_blob_object (ctx, D.22156, 1);
      if (D.22163 == 0) goto <D.22164>; else goto <D.22165>;
      <D.22164>:
      D.22143 = ctx->report_error;
      if (D.22143 != 0) goto <D.22166>; else goto <D.22167>;
      <D.22166>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22156 = data[1];
        D.22168 = monoeg_g_strdup_printf ("Invalid FieldMarshal row %d invalid NativeType blob 0x%x", i, D.22156);
        vinfo->info.message = D.22168;
        vinfo->exception_type = 3;
        D.22147 = ctx->errors;
        D.22169 = monoeg_g_slist_prepend (D.22147, vinfo);
        ctx->errors = D.22169;
      }
      <D.22167>:
      ctx->valid = 0;
      return;
      <D.22165>:
      i = i + 1;
      <D.19083>:
      D.22170 = table->rows;
      D.22171 = (int) D.22170;
      if (D.22171 > i) goto <D.19082>; else goto <D.19084>;
      <D.19084>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_decl_security_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.22175;
  unsigned int D.22176;
  int D.22177;
  int D.22180;
  gchar * D.22183;
  struct GSList * D.22184;
  struct GSList * D.22185;
  unsigned int D.22186;
  gchar * D.22191;
  struct GSList * D.22192;
  unsigned int D.22193;
  gchar * D.22198;
  struct GSList * D.22199;
  <unnamed-unsigned:24> D.22200;
  int D.22201;
  struct MonoTableInfo * table;
  guint32 data[3];
  int i;

  try
    {
      D.22175 = ctx->image;
      table = &D.22175->tables[14];
      i = 0;
      goto <D.19105>;
      <D.19104>:
      mono_metadata_decode_row (table, i, &data, 3);
      D.22176 = data[1];
      D.22177 = is_valid_coded_index (ctx, 36, D.22176);
      if (D.22177 == 0) goto <D.22178>; else goto <D.22179>;
      <D.22178>:
      D.22180 = ctx->report_error;
      if (D.22180 != 0) goto <D.22181>; else goto <D.22182>;
      <D.22181>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22176 = data[1];
        D.22183 = monoeg_g_strdup_printf ("Invalid DeclSecurity row %d Parent field 0x%08x", i, D.22176);
        vinfo->info.message = D.22183;
        vinfo->exception_type = 3;
        D.22184 = ctx->errors;
        D.22185 = monoeg_g_slist_prepend (D.22184, vinfo);
        ctx->errors = D.22185;
      }
      <D.22182>:
      ctx->valid = 0;
      return;
      <D.22179>:
      D.22176 = data[1];
      D.22186 = get_coded_index_token (36, D.22176);
      if (D.22186 == 0) goto <D.22187>; else goto <D.22188>;
      <D.22187>:
      D.22180 = ctx->report_error;
      if (D.22180 != 0) goto <D.22189>; else goto <D.22190>;
      <D.22189>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22191 = monoeg_g_strdup_printf ("Invalid DeclSecurity row %d Parent field is null", i);
        vinfo->info.message = D.22191;
        vinfo->exception_type = 3;
        D.22184 = ctx->errors;
        D.22192 = monoeg_g_slist_prepend (D.22184, vinfo);
        ctx->errors = D.22192;
      }
      <D.22190>:
      ctx->valid = 0;
      return;
      <D.22188>:
      D.22193 = data[2];
      if (D.22193 == 0) goto <D.22194>; else goto <D.22195>;
      <D.22194>:
      D.22180 = ctx->report_error;
      if (D.22180 != 0) goto <D.22196>; else goto <D.22197>;
      <D.22196>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22198 = monoeg_g_strdup_printf ("Invalid DeclSecurity row %d PermissionSet field is null", i);
        vinfo->info.message = D.22198;
        vinfo->exception_type = 3;
        D.22184 = ctx->errors;
        D.22199 = monoeg_g_slist_prepend (D.22184, vinfo);
        ctx->errors = D.22199;
      }
      <D.22197>:
      ctx->valid = 0;
      return;
      <D.22195>:
      i = i + 1;
      <D.19105>:
      D.22200 = table->rows;
      D.22201 = (int) D.22200;
      if (D.22201 > i) goto <D.19104>; else goto <D.19106>;
      <D.19106>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_class_layout_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.22205;
  unsigned int D.22208;
  <unnamed-unsigned:24> D.22210;
  int D.22211;
  int D.22212;
  unsigned int D.22213;
  int D.22214;
  gchar * D.22217;
  struct GSList * D.22218;
  struct GSList * D.22219;
  unsigned int D.22220;
  gchar * D.22223;
  struct GSList * D.22224;
  <unnamed-unsigned:24> D.22225;
  int D.22226;
  struct MonoTableInfo * table;
  guint32 data[3];
  int i;

  try
    {
      D.22205 = ctx->image;
      table = &D.22205->tables[15];
      i = 0;
      goto <D.19137>;
      <D.19136>:
      mono_metadata_decode_row (table, i, &data, 3);
      D.22208 = data[2];
      if (D.22208 == 0) goto <D.22206>; else goto <D.22209>;
      <D.22209>:
      D.22208 = data[2];
      D.22205 = ctx->image;
      D.22210 = D.22205->tables[2].rows;
      D.22211 = (int) D.22210;
      D.22212 = D.22211 + 1;
      D.22213 = (unsigned int) D.22212;
      if (D.22208 > D.22213) goto <D.22206>; else goto <D.22207>;
      <D.22206>:
      D.22214 = ctx->report_error;
      if (D.22214 != 0) goto <D.22215>; else goto <D.22216>;
      <D.22215>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22208 = data[2];
        D.22217 = monoeg_g_strdup_printf ("Invalid ClassLayout row %d Parent field 0x%08x", i, D.22208);
        vinfo->info.message = D.22217;
        vinfo->exception_type = 3;
        D.22218 = ctx->errors;
        D.22219 = monoeg_g_slist_prepend (D.22218, vinfo);
        ctx->errors = D.22219;
      }
      <D.22216>:
      ctx->valid = 0;
      return;
      <D.22207>:
      D.22220 = data[0];
      switch (D.22220) <default: <D.19134>, case 0: <D.19124>, case 1: <D.19125>, case 2: <D.19126>, case 4: <D.19127>, case 8: <D.19128>, case 16: <D.19129>, case 32: <D.19130>, case 64: <D.19131>, case 128: <D.19132>>
      <D.19124>:
      <D.19125>:
      <D.19126>:
      <D.19127>:
      <D.19128>:
      <D.19129>:
      <D.19130>:
      <D.19131>:
      <D.19132>:
      goto <D.19133>;
      <D.19134>:
      D.22214 = ctx->report_error;
      if (D.22214 != 0) goto <D.22221>; else goto <D.22222>;
      <D.22221>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22220 = data[0];
        D.22223 = monoeg_g_strdup_printf ("Invalid ClassLayout row %d Packing field %d", i, D.22220);
        vinfo->info.message = D.22223;
        vinfo->exception_type = 3;
        D.22218 = ctx->errors;
        D.22224 = monoeg_g_slist_prepend (D.22218, vinfo);
        ctx->errors = D.22224;
      }
      <D.22222>:
      ctx->valid = 0;
      return;
      <D.19133>:
      i = i + 1;
      <D.19137>:
      D.22225 = table->rows;
      D.22226 = (int) D.22225;
      if (D.22226 > i) goto <D.19136>; else goto <D.19138>;
      <D.19138>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_field_layout_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.22231;
  unsigned int D.22234;
  <unnamed-unsigned:24> D.22236;
  int D.22237;
  int D.22238;
  unsigned int D.22239;
  int D.22240;
  gchar * D.22243;
  struct GSList * D.22244;
  struct GSList * D.22245;
  <unnamed-unsigned:24> D.22246;
  int D.22247;
  struct MonoTableInfo * table;
  guint32 data[2];
  int i;

  try
    {
      D.22231 = ctx->image;
      table = &D.22231->tables[16];
      i = 0;
      goto <D.19147>;
      <D.19146>:
      mono_metadata_decode_row (table, i, &data, 2);
      D.22234 = data[1];
      if (D.22234 == 0) goto <D.22232>; else goto <D.22235>;
      <D.22235>:
      D.22234 = data[1];
      D.22231 = ctx->image;
      D.22236 = D.22231->tables[4].rows;
      D.22237 = (int) D.22236;
      D.22238 = D.22237 + 1;
      D.22239 = (unsigned int) D.22238;
      if (D.22234 > D.22239) goto <D.22232>; else goto <D.22233>;
      <D.22232>:
      D.22240 = ctx->report_error;
      if (D.22240 != 0) goto <D.22241>; else goto <D.22242>;
      <D.22241>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22234 = data[1];
        D.22243 = monoeg_g_strdup_printf ("Invalid FieldLayout row %d Field field 0x%08x", i, D.22234);
        vinfo->info.message = D.22243;
        vinfo->exception_type = 3;
        D.22244 = ctx->errors;
        D.22245 = monoeg_g_slist_prepend (D.22244, vinfo);
        ctx->errors = D.22245;
      }
      <D.22242>:
      ctx->valid = 0;
      return;
      <D.22233>:
      i = i + 1;
      <D.19147>:
      D.22246 = table->rows;
      D.22247 = (int) D.22246;
      if (D.22247 > i) goto <D.19146>; else goto <D.19148>;
      <D.19148>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_standalonesig_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.22251;
  unsigned int D.22252;
  int D.22255;
  int D.22258;
  gchar * D.22261;
  struct GSList * D.22262;
  struct GSList * D.22263;
  <unnamed-unsigned:24> D.22264;
  int D.22265;
  struct MonoTableInfo * table;
  guint32 data[1];
  int i;

  try
    {
      D.22251 = ctx->image;
      table = &D.22251->tables[17];
      i = 0;
      goto <D.19157>;
      <D.19156>:
      mono_metadata_decode_row (table, i, &data, 1);
      D.22252 = data[0];
      if (D.22252 != 0) goto <D.22253>; else goto <D.22254>;
      <D.22253>:
      D.22252 = data[0];
      D.22255 = is_valid_blob_object (ctx, D.22252, 1);
      if (D.22255 == 0) goto <D.22256>; else goto <D.22257>;
      <D.22256>:
      D.22258 = ctx->report_error;
      if (D.22258 != 0) goto <D.22259>; else goto <D.22260>;
      <D.22259>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22252 = data[0];
        D.22261 = monoeg_g_strdup_printf ("Invalid StandAloneSig row %d invalid signature 0x%x", i, D.22252);
        vinfo->info.message = D.22261;
        vinfo->exception_type = 3;
        D.22262 = ctx->errors;
        D.22263 = monoeg_g_slist_prepend (D.22262, vinfo);
        ctx->errors = D.22263;
      }
      <D.22260>:
      ctx->valid = 0;
      return;
      <D.22257>:
      <D.22254>:
      i = i + 1;
      <D.19157>:
      D.22264 = table->rows;
      D.22265 = (int) D.22264;
      if (D.22265 > i) goto <D.19156>; else goto <D.19158>;
      <D.19158>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_eventmap_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.22269;
  unsigned int D.22272;
  <unnamed-unsigned:24> D.22274;
  int D.22275;
  int D.22276;
  unsigned int D.22277;
  int D.22278;
  gchar * D.22281;
  struct GSList * D.22282;
  struct GSList * D.22283;
  unsigned int D.22286;
  gchar * D.22290;
  struct GSList * D.22291;
  <unnamed-unsigned:24> D.22292;
  int D.22293;
  struct MonoTableInfo * table;
  guint32 data[2];
  guint32 eventlist;
  int i;

  try
    {
      D.22269 = ctx->image;
      table = &D.22269->tables[18];
      eventlist = 0;
      i = 0;
      goto <D.19179>;
      <D.19178>:
      mono_metadata_decode_row (table, i, &data, 2);
      D.22272 = data[0];
      if (D.22272 == 0) goto <D.22270>; else goto <D.22273>;
      <D.22273>:
      D.22272 = data[0];
      D.22269 = ctx->image;
      D.22274 = D.22269->tables[2].rows;
      D.22275 = (int) D.22274;
      D.22276 = D.22275 + 1;
      D.22277 = (unsigned int) D.22276;
      if (D.22272 > D.22277) goto <D.22270>; else goto <D.22271>;
      <D.22270>:
      D.22278 = ctx->report_error;
      if (D.22278 != 0) goto <D.22279>; else goto <D.22280>;
      <D.22279>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22272 = data[0];
        D.22281 = monoeg_g_strdup_printf ("Invalid EventMap row %d Parent field 0x%08x", i, D.22272);
        vinfo->info.message = D.22281;
        vinfo->exception_type = 3;
        D.22282 = ctx->errors;
        D.22283 = monoeg_g_slist_prepend (D.22282, vinfo);
        ctx->errors = D.22283;
      }
      <D.22280>:
      ctx->valid = 0;
      return;
      <D.22271>:
      D.22286 = data[1];
      if (D.22286 == 0) goto <D.22284>; else goto <D.22287>;
      <D.22287>:
      D.22286 = data[1];
      if (D.22286 <= eventlist) goto <D.22284>; else goto <D.22285>;
      <D.22284>:
      D.22278 = ctx->report_error;
      if (D.22278 != 0) goto <D.22288>; else goto <D.22289>;
      <D.22288>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22286 = data[1];
        D.22290 = monoeg_g_strdup_printf ("Invalid EventMap row %d EventList field %d", i, D.22286);
        vinfo->info.message = D.22290;
        vinfo->exception_type = 3;
        D.22282 = ctx->errors;
        D.22291 = monoeg_g_slist_prepend (D.22282, vinfo);
        ctx->errors = D.22291;
      }
      <D.22289>:
      ctx->valid = 0;
      return;
      <D.22285>:
      eventlist = data[1];
      i = i + 1;
      <D.19179>:
      D.22292 = table->rows;
      D.22293 = (int) D.22292;
      if (D.22293 > i) goto <D.19178>; else goto <D.19180>;
      <D.19180>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_event_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.22297;
  unsigned int D.22298;
  unsigned int D.22299;
  int D.22302;
  gchar * D.22305;
  struct GSList * D.22306;
  struct GSList * D.22307;
  unsigned int D.22308;
  int D.22309;
  gchar * D.22314;
  struct GSList * D.22315;
  unsigned int D.22316;
  int D.22317;
  gchar * D.22322;
  struct GSList * D.22323;
  <unnamed-unsigned:24> D.22324;
  int D.22325;
  struct MonoTableInfo * table;
  guint32 data[3];
  int i;

  try
    {
      D.22297 = ctx->image;
      table = &D.22297->tables[20];
      i = 0;
      goto <D.19191>;
      <D.19190>:
      mono_metadata_decode_row (table, i, &data, 3);
      D.22298 = data[0];
      D.22299 = D.22298 & 4294965759;
      if (D.22299 != 0) goto <D.22300>; else goto <D.22301>;
      <D.22300>:
      D.22302 = ctx->report_error;
      if (D.22302 != 0) goto <D.22303>; else goto <D.22304>;
      <D.22303>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22298 = data[0];
        D.22305 = monoeg_g_strdup_printf ("Invalid Event row %d EventFlags field %08x", i, D.22298);
        vinfo->info.message = D.22305;
        vinfo->exception_type = 3;
        D.22306 = ctx->errors;
        D.22307 = monoeg_g_slist_prepend (D.22306, vinfo);
        ctx->errors = D.22307;
      }
      <D.22304>:
      ctx->valid = 0;
      return;
      <D.22301>:
      D.22308 = data[1];
      D.22309 = is_valid_non_empty_string (ctx, D.22308);
      if (D.22309 == 0) goto <D.22310>; else goto <D.22311>;
      <D.22310>:
      D.22302 = ctx->report_error;
      if (D.22302 != 0) goto <D.22312>; else goto <D.22313>;
      <D.22312>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22308 = data[1];
        D.22314 = monoeg_g_strdup_printf ("Invalid Event row %d Name field %08x", i, D.22308);
        vinfo->info.message = D.22314;
        vinfo->exception_type = 3;
        D.22306 = ctx->errors;
        D.22315 = monoeg_g_slist_prepend (D.22306, vinfo);
        ctx->errors = D.22315;
      }
      <D.22313>:
      ctx->valid = 0;
      return;
      <D.22311>:
      D.22316 = data[2];
      D.22317 = is_valid_coded_index (ctx, 0, D.22316);
      if (D.22317 == 0) goto <D.22318>; else goto <D.22319>;
      <D.22318>:
      D.22302 = ctx->report_error;
      if (D.22302 != 0) goto <D.22320>; else goto <D.22321>;
      <D.22320>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22316 = data[2];
        D.22322 = monoeg_g_strdup_printf ("Invalid Event row %d EventType field %08x", i, D.22316);
        vinfo->info.message = D.22322;
        vinfo->exception_type = 3;
        D.22306 = ctx->errors;
        D.22323 = monoeg_g_slist_prepend (D.22306, vinfo);
        ctx->errors = D.22323;
      }
      <D.22321>:
      ctx->valid = 0;
      return;
      <D.22319>:
      i = i + 1;
      <D.19191>:
      D.22324 = table->rows;
      D.22325 = (int) D.22324;
      if (D.22325 > i) goto <D.19190>; else goto <D.19192>;
      <D.19192>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_propertymap_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.22329;
  unsigned int D.22332;
  <unnamed-unsigned:24> D.22334;
  int D.22335;
  int D.22336;
  unsigned int D.22337;
  int D.22338;
  gchar * D.22341;
  struct GSList * D.22342;
  struct GSList * D.22343;
  unsigned int D.22346;
  gchar * D.22350;
  struct GSList * D.22351;
  <unnamed-unsigned:24> D.22352;
  int D.22353;
  struct MonoTableInfo * table;
  guint32 data[2];
  guint32 propertylist;
  int i;

  try
    {
      D.22329 = ctx->image;
      table = &D.22329->tables[21];
      propertylist = 0;
      i = 0;
      goto <D.19227>;
      <D.19226>:
      mono_metadata_decode_row (table, i, &data, 2);
      D.22332 = data[0];
      if (D.22332 == 0) goto <D.22330>; else goto <D.22333>;
      <D.22333>:
      D.22332 = data[0];
      D.22329 = ctx->image;
      D.22334 = D.22329->tables[2].rows;
      D.22335 = (int) D.22334;
      D.22336 = D.22335 + 1;
      D.22337 = (unsigned int) D.22336;
      if (D.22332 > D.22337) goto <D.22330>; else goto <D.22331>;
      <D.22330>:
      D.22338 = ctx->report_error;
      if (D.22338 != 0) goto <D.22339>; else goto <D.22340>;
      <D.22339>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22332 = data[0];
        D.22341 = monoeg_g_strdup_printf ("Invalid PropertyMap row %d Parent field 0x%08x", i, D.22332);
        vinfo->info.message = D.22341;
        vinfo->exception_type = 3;
        D.22342 = ctx->errors;
        D.22343 = monoeg_g_slist_prepend (D.22342, vinfo);
        ctx->errors = D.22343;
      }
      <D.22340>:
      ctx->valid = 0;
      return;
      <D.22331>:
      D.22346 = data[1];
      if (D.22346 == 0) goto <D.22344>; else goto <D.22347>;
      <D.22347>:
      D.22346 = data[1];
      if (D.22346 <= propertylist) goto <D.22344>; else goto <D.22345>;
      <D.22344>:
      D.22338 = ctx->report_error;
      if (D.22338 != 0) goto <D.22348>; else goto <D.22349>;
      <D.22348>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22346 = data[1];
        D.22350 = monoeg_g_strdup_printf ("Invalid PropertyMap row %d PropertyList field %d", i, D.22346);
        vinfo->info.message = D.22350;
        vinfo->exception_type = 3;
        D.22342 = ctx->errors;
        D.22351 = monoeg_g_slist_prepend (D.22342, vinfo);
        ctx->errors = D.22351;
      }
      <D.22349>:
      ctx->valid = 0;
      return;
      <D.22345>:
      propertylist = data[1];
      i = i + 1;
      <D.19227>:
      D.22352 = table->rows;
      D.22353 = (int) D.22352;
      if (D.22353 > i) goto <D.19226>; else goto <D.19228>;
      <D.19228>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_property_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.22357;
  unsigned int D.22358;
  unsigned int D.22359;
  int D.22362;
  gchar * D.22365;
  struct GSList * D.22366;
  struct GSList * D.22367;
  unsigned int D.22368;
  int D.22369;
  gchar * D.22374;
  struct GSList * D.22375;
  unsigned int D.22376;
  int D.22377;
  gchar * D.22382;
  struct GSList * D.22383;
  unsigned int D.22384;
  unsigned int i.45;
  unsigned int D.22388;
  int D.22389;
  gchar * D.22394;
  struct GSList * D.22395;
  <unnamed-unsigned:24> D.22396;
  int D.22397;
  struct MonoTableInfo * table;
  guint32 data[3];
  int i;

  try
    {
      D.22357 = ctx->image;
      table = &D.22357->tables[23];
      i = 0;
      goto <D.19240>;
      <D.19239>:
      mono_metadata_decode_row (table, i, &data, 3);
      D.22358 = data[0];
      D.22359 = D.22358 & 4294961663;
      if (D.22359 != 0) goto <D.22360>; else goto <D.22361>;
      <D.22360>:
      D.22362 = ctx->report_error;
      if (D.22362 != 0) goto <D.22363>; else goto <D.22364>;
      <D.22363>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22358 = data[0];
        D.22365 = monoeg_g_strdup_printf ("Invalid Property row %d PropertyFlags field %08x", i, D.22358);
        vinfo->info.message = D.22365;
        vinfo->exception_type = 3;
        D.22366 = ctx->errors;
        D.22367 = monoeg_g_slist_prepend (D.22366, vinfo);
        ctx->errors = D.22367;
      }
      <D.22364>:
      ctx->valid = 0;
      return;
      <D.22361>:
      D.22368 = data[1];
      D.22369 = is_valid_non_empty_string (ctx, D.22368);
      if (D.22369 == 0) goto <D.22370>; else goto <D.22371>;
      <D.22370>:
      D.22362 = ctx->report_error;
      if (D.22362 != 0) goto <D.22372>; else goto <D.22373>;
      <D.22372>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22368 = data[1];
        D.22374 = monoeg_g_strdup_printf ("Invalid Property row %d Name field %08x", i, D.22368);
        vinfo->info.message = D.22374;
        vinfo->exception_type = 3;
        D.22366 = ctx->errors;
        D.22375 = monoeg_g_slist_prepend (D.22366, vinfo);
        ctx->errors = D.22375;
      }
      <D.22373>:
      ctx->valid = 0;
      return;
      <D.22371>:
      D.22376 = data[2];
      D.22377 = is_valid_property_sig_blob (ctx, D.22376);
      if (D.22377 == 0) goto <D.22378>; else goto <D.22379>;
      <D.22378>:
      D.22362 = ctx->report_error;
      if (D.22362 != 0) goto <D.22380>; else goto <D.22381>;
      <D.22380>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22376 = data[2];
        D.22382 = monoeg_g_strdup_printf ("Invalid Property row %d Type field %08x", i, D.22376);
        vinfo->info.message = D.22382;
        vinfo->exception_type = 3;
        D.22366 = ctx->errors;
        D.22383 = monoeg_g_slist_prepend (D.22366, vinfo);
        ctx->errors = D.22383;
      }
      <D.22381>:
      ctx->valid = 0;
      return;
      <D.22379>:
      D.22358 = data[0];
      D.22384 = D.22358 & 4096;
      if (D.22384 != 0) goto <D.22385>; else goto <D.22386>;
      <D.22385>:
      i.45 = (unsigned int) i;
      D.22388 = make_coded_token (5, 23, i.45);
      D.22389 = search_sorted_table (ctx, 11, 2, D.22388);
      if (D.22389 == -1) goto <D.22390>; else goto <D.22391>;
      <D.22390>:
      D.22362 = ctx->report_error;
      if (D.22362 != 0) goto <D.22392>; else goto <D.22393>;
      <D.22392>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22394 = monoeg_g_strdup_printf ("Invalid Property row %d has HasDefault but there is no corresponding row in the Constant table", i);
        vinfo->info.message = D.22394;
        vinfo->exception_type = 3;
        D.22366 = ctx->errors;
        D.22395 = monoeg_g_slist_prepend (D.22366, vinfo);
        ctx->errors = D.22395;
      }
      <D.22393>:
      ctx->valid = 0;
      return;
      <D.22391>:
      <D.22386>:
      i = i + 1;
      <D.19240>:
      D.22396 = table->rows;
      D.22397 = (int) D.22396;
      if (D.22397 > i) goto <D.19239>; else goto <D.19241>;
      <D.19241>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


is_valid_property_sig_blob (struct VerifyContext * ctx, guint32 offset)
{
  int D.22401;
  int D.22404;
  gchar * D.22407;
  struct GSList * D.22408;
  struct GSList * D.22409;
  gboolean D.22410;
  const char * ptr.46;
  unsigned int size.47;
  sizetype D.22413;
  guint32 size;
  const char * ptr;
  const char * end;

  try
    {
      size = 0;
      ptr = 0B;
      D.22401 = decode_signature_header (ctx, offset, &size, &ptr);
      if (D.22401 == 0) goto <D.22402>; else goto <D.22403>;
      <D.22402>:
      D.22404 = ctx->report_error;
      if (D.22404 != 0) goto <D.22405>; else goto <D.22406>;
      <D.22405>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22407 = monoeg_strdup ("PropertySig: Could not decode signature header");
        vinfo->info.message = D.22407;
        vinfo->exception_type = 3;
        D.22408 = ctx->errors;
        D.22409 = monoeg_g_slist_prepend (D.22408, vinfo);
        ctx->errors = D.22409;
      }
      <D.22406>:
      ctx->valid = 0;
      D.22410 = 0;
      return D.22410;
      <D.22403>:
      ptr.46 = ptr;
      size.47 = size;
      D.22413 = (sizetype) size.47;
      end = ptr.46 + D.22413;
      D.22410 = parse_property_signature (ctx, &ptr, end);
      return D.22410;
    }
  finally
    {
      size = {CLOBBER};
      ptr = {CLOBBER};
    }
}


decode_signature_header (struct VerifyContext * ctx, guint32 offset, guint32 * size, const char * * first_byte)
{
  struct MonoImage * D.22416;
  unsigned int D.22417;
  gboolean D.22420;
  const char * D.22421;
  sizetype D.22422;
  const char * D.22423;
  unsigned int D.22424;
  int D.22425;
  unsigned int enc_size.48;
  unsigned int D.22429;
  unsigned int value.49;
  unsigned int D.22435;
  unsigned int D.22437;
  struct MonoStreamHeader blob;
  guint32 value;
  guint32 enc_size;

  try
    {
      D.22416 = ctx->image;
      blob = D.22416->heap_blob;
      D.22417 = blob.size;
      if (D.22417 <= offset) goto <D.22418>; else goto <D.22419>;
      <D.22418>:
      D.22420 = 0;
      return D.22420;
      <D.22419>:
      D.22421 = blob.data;
      D.22422 = (sizetype) offset;
      D.22423 = D.22421 + D.22422;
      D.22417 = blob.size;
      D.22424 = D.22417 - offset;
      D.22425 = decode_value (D.22423, D.22424, &value, &enc_size);
      if (D.22425 == 0) goto <D.22426>; else goto <D.22427>;
      <D.22426>:
      D.22420 = 0;
      return D.22420;
      <D.22427>:
      enc_size.48 = enc_size;
      D.22429 = ~enc_size.48;
      if (D.22429 < offset) goto <D.22430>; else goto <D.22431>;
      <D.22430>:
      D.22420 = 0;
      return D.22420;
      <D.22431>:
      enc_size.48 = enc_size;
      offset = offset + enc_size.48;
      value.49 = value;
      D.22435 = offset + value.49;
      D.22417 = blob.size;
      if (D.22435 > D.22417) goto <D.22432>; else goto <D.22436>;
      <D.22436>:
      value.49 = value;
      D.22437 = ~value.49;
      if (D.22437 < offset) goto <D.22432>; else goto <D.22433>;
      <D.22432>:
      D.22420 = 0;
      return D.22420;
      <D.22433>:
      value.49 = value;
      *size = value.49;
      D.22421 = blob.data;
      D.22422 = (sizetype) offset;
      D.22423 = D.22421 + D.22422;
      *first_byte = D.22423;
      D.22420 = 1;
      return D.22420;
    }
  finally
    {
      blob = {CLOBBER};
      value = {CLOBBER};
      enc_size = {CLOBBER};
    }
}


parse_property_signature (struct VerifyContext * ctx, const char * * _ptr, const char * end)
{
  const char * ptr.50;
  int D.22441;
  int D.22444;
  gchar * D.22447;
  struct GSList * D.22448;
  struct GSList * D.22449;
  gboolean D.22450;
  unsigned int sig.51;
  gchar * D.22458;
  struct GSList * D.22459;
  int D.22460;
  gchar * D.22465;
  struct GSList * D.22466;
  int D.22467;
  int D.22470;
  gchar * D.22475;
  struct GSList * D.22476;
  int D.22477;
  gchar * D.22482;
  struct GSList * D.22483;
  int D.22484;
  gchar * D.22489;
  struct GSList * D.22490;
  unsigned int param_count.52;
  const char * ptr.53;
  unsigned int sig;
  unsigned int param_count;
  unsigned int i;
  const char * ptr;

  try
    {
      sig = 0;
      param_count = 0;
      ptr.50 = *_ptr;
      ptr = ptr.50;
      D.22441 = safe_read (&ptr, end, &sig, 1);
      if (D.22441 == 0) goto <D.22442>; else goto <D.22443>;
      <D.22442>:
      D.22444 = ctx->report_error;
      if (D.22444 != 0) goto <D.22445>; else goto <D.22446>;
      <D.22445>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22447 = monoeg_strdup ("PropertySig: Not enough room for signature");
        vinfo->info.message = D.22447;
        vinfo->exception_type = 3;
        D.22448 = ctx->errors;
        D.22449 = monoeg_g_slist_prepend (D.22448, vinfo);
        ctx->errors = D.22449;
      }
      <D.22446>:
      ctx->valid = 0;
      D.22450 = 0;
      return D.22450;
      <D.22443>:
      sig.51 = sig;
      if (sig.51 != 8) goto <D.22452>; else goto <D.22453>;
      <D.22452>:
      sig.51 = sig;
      if (sig.51 != 40) goto <D.22454>; else goto <D.22455>;
      <D.22454>:
      D.22444 = ctx->report_error;
      if (D.22444 != 0) goto <D.22456>; else goto <D.22457>;
      <D.22456>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        sig.51 = sig;
        D.22458 = monoeg_g_strdup_printf ("PropertySig: Signature is not 0x28 or 0x08: %x", sig.51);
        vinfo->info.message = D.22458;
        vinfo->exception_type = 3;
        D.22448 = ctx->errors;
        D.22459 = monoeg_g_slist_prepend (D.22448, vinfo);
        ctx->errors = D.22459;
      }
      <D.22457>:
      ctx->valid = 0;
      D.22450 = 0;
      return D.22450;
      <D.22455>:
      <D.22453>:
      D.22460 = safe_read_compressed_int (&ptr, end, &param_count);
      if (D.22460 == 0) goto <D.22461>; else goto <D.22462>;
      <D.22461>:
      D.22444 = ctx->report_error;
      if (D.22444 != 0) goto <D.22463>; else goto <D.22464>;
      <D.22463>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22465 = monoeg_strdup ("PropertySig: Not enough room for the param count");
        vinfo->info.message = D.22465;
        vinfo->exception_type = 3;
        D.22448 = ctx->errors;
        D.22466 = monoeg_g_slist_prepend (D.22448, vinfo);
        ctx->errors = D.22466;
      }
      <D.22464>:
      ctx->valid = 0;
      D.22450 = 0;
      return D.22450;
      <D.22462>:
      D.22467 = parse_custom_mods (ctx, &ptr, end);
      if (D.22467 == 0) goto <D.22468>; else goto <D.22469>;
      <D.22468>:
      D.22450 = 0;
      return D.22450;
      <D.22469>:
      D.22470 = parse_type (ctx, &ptr, end);
      if (D.22470 == 0) goto <D.22471>; else goto <D.22472>;
      <D.22471>:
      D.22444 = ctx->report_error;
      if (D.22444 != 0) goto <D.22473>; else goto <D.22474>;
      <D.22473>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22475 = monoeg_strdup ("PropertySig: Could not parse property type");
        vinfo->info.message = D.22475;
        vinfo->exception_type = 3;
        D.22448 = ctx->errors;
        D.22476 = monoeg_g_slist_prepend (D.22448, vinfo);
        ctx->errors = D.22476;
      }
      <D.22474>:
      ctx->valid = 0;
      D.22450 = 0;
      return D.22450;
      <D.22472>:
      i = 0;
      goto <D.18441>;
      <D.18440>:
      D.22477 = parse_custom_mods (ctx, &ptr, end);
      if (D.22477 == 0) goto <D.22478>; else goto <D.22479>;
      <D.22478>:
      D.22444 = ctx->report_error;
      if (D.22444 != 0) goto <D.22480>; else goto <D.22481>;
      <D.22480>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22482 = monoeg_strdup ("Type: Failed to parse pointer custom attr");
        vinfo->info.message = D.22482;
        vinfo->exception_type = 3;
        D.22448 = ctx->errors;
        D.22483 = monoeg_g_slist_prepend (D.22448, vinfo);
        ctx->errors = D.22483;
      }
      <D.22481>:
      ctx->valid = 0;
      D.22450 = 0;
      return D.22450;
      <D.22479>:
      D.22484 = parse_type (ctx, &ptr, end);
      if (D.22484 == 0) goto <D.22485>; else goto <D.22486>;
      <D.22485>:
      D.22444 = ctx->report_error;
      if (D.22444 != 0) goto <D.22487>; else goto <D.22488>;
      <D.22487>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22489 = monoeg_g_strdup_printf ("PropertySig: Error parsing arg %d", i);
        vinfo->info.message = D.22489;
        vinfo->exception_type = 3;
        D.22448 = ctx->errors;
        D.22490 = monoeg_g_slist_prepend (D.22448, vinfo);
        ctx->errors = D.22490;
      }
      <D.22488>:
      ctx->valid = 0;
      D.22450 = 0;
      return D.22450;
      <D.22486>:
      i = i + 1;
      <D.18441>:
      param_count.52 = param_count;
      if (i < param_count.52) goto <D.18440>; else goto <D.18442>;
      <D.18442>:
      ptr.53 = ptr;
      *_ptr = ptr.53;
      D.22450 = 1;
      return D.22450;
    }
  finally
    {
      sig = {CLOBBER};
      param_count = {CLOBBER};
      ptr = {CLOBBER};
    }
}


safe_read (const char * * _ptr, const char * limit, unsigned int * dest, int size)
{
  sizetype D.22495;
  const char * D.22496;
  gboolean D.22499;
  unsigned char D.22500;
  unsigned int D.22501;
  short unsigned int D.22502;
  short unsigned int D.22503;
  int D.22504;
  int D.22505;
  int D.22506;
  int D.22507;
  int D.22508;
  unsigned int D.22509;
  unsigned int D.22510;
  unsigned int D.22511;
  unsigned int D.22512;
  unsigned int D.22513;
  unsigned int D.22514;
  unsigned int D.22515;
  unsigned int D.22516;
  unsigned int D.22517;
  unsigned int D.22518;
  unsigned int D.22519;
  const char * ptr;

  ptr = *_ptr;
  D.22495 = (sizetype) size;
  D.22496 = ptr + D.22495;
  if (D.22496 > limit) goto <D.22497>; else goto <D.22498>;
  <D.22497>:
  D.22499 = 0;
  return D.22499;
  <D.22498>:
  switch (size) <default: <D.22520>, case 1: <D.18266>, case 2: <D.18268>, case 4: <D.18269>>
  <D.18266>:
  D.22500 = MEM[(guint8 *)ptr];
  D.22501 = (unsigned int) D.22500;
  *dest = D.22501;
  ptr = ptr + 1;
  goto <D.18267>;
  <D.18268>:
  D.22502 = MEM[(const guint16 *)ptr];
  D.22503 = D.22502 >> 8;
  D.22504 = (int) D.22503;
  D.22502 = MEM[(const guint16 *)ptr];
  D.22505 = (int) D.22502;
  D.22506 = D.22505 << 8;
  D.22507 = D.22506 & 65535;
  D.22508 = D.22504 | D.22507;
  D.22509 = (unsigned int) D.22508;
  *dest = D.22509;
  ptr = ptr + 2;
  goto <D.18267>;
  <D.18269>:
  D.22510 = MEM[(const guint32 *)ptr];
  D.22511 = D.22510 << 24;
  D.22510 = MEM[(const guint32 *)ptr];
  D.22512 = D.22510 >> 8;
  D.22513 = D.22512 & 65280;
  D.22514 = D.22511 | D.22513;
  D.22510 = MEM[(const guint32 *)ptr];
  D.22515 = D.22510 << 8;
  D.22516 = D.22515 & 16711680;
  D.22517 = D.22514 | D.22516;
  D.22510 = MEM[(const guint32 *)ptr];
  D.22518 = D.22510 >> 24;
  D.22519 = D.22517 | D.22518;
  *dest = D.22519;
  ptr = ptr + 4;
  goto <D.18267>;
  <D.22520>:
  <D.18267>:
  *_ptr = ptr;
  D.22499 = 1;
  return D.22499;
}


safe_read_compressed_int (const char * * _ptr, const char * limit, unsigned int * dest)
{
  long int limit.54;
  long int ptr.55;
  long int D.22524;
  unsigned int D.22525;
  unsigned int size.56;
  sizetype D.22527;
  const char * D.22528;
  gboolean D.22529;
  unsigned int size;
  const char * ptr;
  gboolean res;

  try
    {
      size = 0;
      ptr = *_ptr;
      limit.54 = (long int) limit;
      ptr.55 = (long int) ptr;
      D.22524 = limit.54 - ptr.55;
      D.22525 = (unsigned int) D.22524;
      res = decode_value (ptr, D.22525, dest, &size);
      size.56 = size;
      D.22527 = (sizetype) size.56;
      D.22528 = ptr + D.22527;
      *_ptr = D.22528;
      D.22529 = res;
      return D.22529;
    }
  finally
    {
      size = {CLOBBER};
    }
}


parse_custom_mods (struct VerifyContext * ctx, const char * * _ptr, const char * end)
{
  const char * ptr.57;
  int D.22533;
  int D.22536;
  gchar * D.22539;
  struct GSList * D.22540;
  struct GSList * D.22541;
  gboolean D.22542;
  unsigned int type.58;
  unsigned int D.22544;
  const char * ptr.59;
  const char * ptr.60;
  int D.22549;
  gchar * D.22554;
  struct GSList * D.22555;
  unsigned int token.61;
  int D.22559;
  unsigned int D.22561;
  gchar * D.22564;
  struct GSList * D.22565;
  const char * ptr;
  unsigned int type;
  unsigned int token;

  try
    {
      ptr.57 = *_ptr;
      ptr = ptr.57;
      type = 0;
      token = 0;
      <D.18300>:
      D.22533 = safe_read (&ptr, end, &type, 1);
      if (D.22533 == 0) goto <D.22534>; else goto <D.22535>;
      <D.22534>:
      D.22536 = ctx->report_error;
      if (D.22536 != 0) goto <D.22537>; else goto <D.22538>;
      <D.22537>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22539 = monoeg_strdup ("CustomMod: Not enough room for the type");
        vinfo->info.message = D.22539;
        vinfo->exception_type = 3;
        D.22540 = ctx->errors;
        D.22541 = monoeg_g_slist_prepend (D.22540, vinfo);
        ctx->errors = D.22541;
      }
      <D.22538>:
      ctx->valid = 0;
      D.22542 = 0;
      return D.22542;
      <D.22535>:
      type.58 = type;
      D.22544 = type.58 + 4294967265;
      if (D.22544 > 1) goto <D.22545>; else goto <D.22546>;
      <D.22545>:
      ptr.59 = ptr;
      ptr.60 = ptr.59 + 18446744073709551615;
      ptr = ptr.60;
      goto <D.18297>;
      <D.22546>:
      D.22549 = safe_read_compressed_int (&ptr, end, &token);
      if (D.22549 == 0) goto <D.22550>; else goto <D.22551>;
      <D.22550>:
      D.22536 = ctx->report_error;
      if (D.22536 != 0) goto <D.22552>; else goto <D.22553>;
      <D.22552>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22554 = monoeg_strdup ("CustomMod: Not enough room for the token");
        vinfo->info.message = D.22554;
        vinfo->exception_type = 3;
        D.22540 = ctx->errors;
        D.22555 = monoeg_g_slist_prepend (D.22540, vinfo);
        ctx->errors = D.22555;
      }
      <D.22553>:
      ctx->valid = 0;
      D.22542 = 0;
      return D.22542;
      <D.22551>:
      token.61 = token;
      D.22559 = is_valid_coded_index (ctx, 0, token.61);
      if (D.22559 == 0) goto <D.22556>; else goto <D.22560>;
      <D.22560>:
      token.61 = token;
      D.22561 = get_coded_index_token (0, token.61);
      if (D.22561 == 0) goto <D.22556>; else goto <D.22557>;
      <D.22556>:
      D.22536 = ctx->report_error;
      if (D.22536 != 0) goto <D.22562>; else goto <D.22563>;
      <D.22562>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        token.61 = token;
        D.22564 = monoeg_g_strdup_printf ("CustomMod: invalid TypeDefOrRef token %x", token.61);
        vinfo->info.message = D.22564;
        vinfo->exception_type = 3;
        D.22540 = ctx->errors;
        D.22565 = monoeg_g_slist_prepend (D.22540, vinfo);
        ctx->errors = D.22565;
      }
      <D.22563>:
      ctx->valid = 0;
      D.22542 = 0;
      return D.22542;
      <D.22557>:
      goto <D.18300>;
      <D.18297>:
      ptr.59 = ptr;
      *_ptr = ptr.59;
      D.22542 = 1;
      return D.22542;
    }
  finally
    {
      ptr = {CLOBBER};
      type = {CLOBBER};
      token = {CLOBBER};
    }
}


parse_type (struct VerifyContext * ctx, const char * * _ptr, const char * end)
{
  const char * ptr.62;
  int D.22569;
  int D.22572;
  gchar * D.22575;
  struct GSList * D.22576;
  struct GSList * D.22577;
  gboolean D.22578;
  unsigned int type.63;
  unsigned int D.22580;
  unsigned int D.22583;
  unsigned int D.22586;
  unsigned int D.22589;
  gchar * D.22594;
  struct GSList * D.22595;
  int D.22596;
  gchar * D.22601;
  struct GSList * D.22602;
  int D.22603;
  gchar * D.22608;
  struct GSList * D.22609;
  const char * ptr.64;
  const char * ptr.65;
  int D.22614;
  gchar * D.22619;
  struct GSList * D.22620;
  int D.22621;
  gchar * D.22626;
  struct GSList * D.22627;
  unsigned int token.66;
  int D.22631;
  unsigned int D.22633;
  gchar * D.22636;
  struct GSList * D.22637;
  unsigned int D.22638;
  gchar * D.22643;
  struct GSList * D.22644;
  unsigned int D.22645;
  unsigned int D.22648;
  unsigned int D.22649;
  unsigned int D.22652;
  unsigned int D.22653;
  gchar * D.22658;
  struct GSList * D.22659;
  int D.22660;
  gchar * D.22665;
  struct GSList * D.22666;
  int D.22667;
  gchar * D.22672;
  struct GSList * D.22673;
  int D.22674;
  gchar * D.22679;
  struct GSList * D.22680;
  int D.22681;
  gchar * D.22686;
  struct GSList * D.22687;
  int D.22688;
  gchar * D.22693;
  struct GSList * D.22694;
  int D.22695;
  gchar * D.22700;
  struct GSList * D.22701;
  int D.22702;
  gchar * D.22707;
  struct GSList * D.22708;
  const char * ptr;
  unsigned int type;
  unsigned int token;

  try
    {
      ptr.62 = *_ptr;
      ptr = ptr.62;
      token = 0;
      D.22569 = safe_read (&ptr, end, &type, 1);
      if (D.22569 == 0) goto <D.22570>; else goto <D.22571>;
      <D.22570>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22573>; else goto <D.22574>;
      <D.22573>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22575 = monoeg_strdup ("Type: Not enough room for the type");
        vinfo->info.message = D.22575;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22577 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22577;
      }
      <D.22574>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22571>:
      type.63 = type;
      D.22580 = type.63 + 4294967294;
      if (D.22580 > 13) goto <D.22581>; else goto <D.22582>;
      <D.22581>:
      type.63 = type;
      D.22583 = type.63 + 4294967279;
      if (D.22583 > 4) goto <D.22584>; else goto <D.22585>;
      <D.22584>:
      type.63 = type;
      D.22586 = type.63 + 4294967272;
      if (D.22586 > 1) goto <D.22587>; else goto <D.22588>;
      <D.22587>:
      type.63 = type;
      D.22589 = type.63 + 4294967269;
      if (D.22589 > 3) goto <D.22590>; else goto <D.22591>;
      <D.22590>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22592>; else goto <D.22593>;
      <D.22592>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        type.63 = type;
        D.22594 = monoeg_g_strdup_printf ("Type: Invalid type kind %x\n", type.63);
        vinfo->info.message = D.22594;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22595 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22595;
      }
      <D.22593>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22591>:
      <D.22588>:
      <D.22585>:
      <D.22582>:
      type.63 = type;
      switch (type.63) <default: <D.22709>, case 15: <D.18355>, case 17: <D.18360>, case 18: <D.18361>, case 19: <D.18366>, case 20: <D.18369>, case 21: <D.18372>, case 27: <D.18374>, case 29: <D.18376>, case 30: <D.18367>>
      <D.18355>:
      D.22596 = parse_custom_mods (ctx, &ptr, end);
      if (D.22596 == 0) goto <D.22597>; else goto <D.22598>;
      <D.22597>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22599>; else goto <D.22600>;
      <D.22599>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22601 = monoeg_strdup ("Type: Failed to parse pointer custom attr");
        vinfo->info.message = D.22601;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22602 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22602;
      }
      <D.22600>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22598>:
      D.22603 = safe_read (&ptr, end, &type, 1);
      if (D.22603 == 0) goto <D.22604>; else goto <D.22605>;
      <D.22604>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22606>; else goto <D.22607>;
      <D.22606>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22608 = monoeg_strdup ("Type: Not enough room to parse the pointer type");
        vinfo->info.message = D.22608;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22609 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22609;
      }
      <D.22607>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22605>:
      type.63 = type;
      if (type.63 != 1) goto <D.22610>; else goto <D.22611>;
      <D.22610>:
      ptr.64 = ptr;
      ptr.65 = ptr.64 + 18446744073709551615;
      ptr = ptr.65;
      D.22614 = parse_type (ctx, &ptr, end);
      if (D.22614 == 0) goto <D.22615>; else goto <D.22616>;
      <D.22615>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22617>; else goto <D.22618>;
      <D.22617>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22619 = monoeg_strdup ("Type: Could not parse pointer type");
        vinfo->info.message = D.22619;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22620 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22620;
      }
      <D.22618>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22616>:
      <D.22611>:
      goto <D.18359>;
      <D.18360>:
      <D.18361>:
      D.22621 = safe_read_compressed_int (&ptr, end, &token);
      if (D.22621 == 0) goto <D.22622>; else goto <D.22623>;
      <D.22622>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22624>; else goto <D.22625>;
      <D.22624>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22626 = monoeg_strdup ("Type: Not enough room for the type token");
        vinfo->info.message = D.22626;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22627 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22627;
      }
      <D.22625>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22623>:
      token.66 = token;
      D.22631 = is_valid_coded_index (ctx, 0, token.66);
      if (D.22631 == 0) goto <D.22628>; else goto <D.22632>;
      <D.22632>:
      token.66 = token;
      D.22633 = get_coded_index_token (0, token.66);
      if (D.22633 == 0) goto <D.22628>; else goto <D.22629>;
      <D.22628>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22634>; else goto <D.22635>;
      <D.22634>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        token.66 = token;
        D.22636 = monoeg_g_strdup_printf ("Type: invalid TypeDefOrRef token %x", token.66);
        vinfo->info.message = D.22636;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22637 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22637;
      }
      <D.22635>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22629>:
      token.66 = token;
      D.22638 = get_coded_index_token (0, token.66);
      if (D.22638 == 0) goto <D.22639>; else goto <D.22640>;
      <D.22639>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22641>; else goto <D.22642>;
      <D.22641>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        token.66 = token;
        D.22643 = monoeg_g_strdup_printf ("Type: zero TypeDefOrRef token %x", token.66);
        vinfo->info.message = D.22643;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22644 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22644;
      }
      <D.22642>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22640>:
      D.22645 = ctx->token;
      if (D.22645 != 0) goto <D.22646>; else goto <D.22647>;
      <D.22646>:
      D.22645 = ctx->token;
      D.22648 = D.22645 & 16777215;
      token.66 = token;
      D.22649 = get_coded_index_token (0, token.66);
      if (D.22648 == D.22649) goto <D.22650>; else goto <D.22651>;
      <D.22650>:
      D.22645 = ctx->token;
      D.22652 = D.22645 >> 24;
      token.66 = token;
      D.22653 = get_coded_index_table (0, token.66);
      if (D.22652 == D.22653) goto <D.22654>; else goto <D.22655>;
      <D.22654>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22656>; else goto <D.22657>;
      <D.22656>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22645 = ctx->token;
        D.22658 = monoeg_g_strdup_printf ("Type: Recursive type specification (%x). A type signature can\'t reference itself", D.22645);
        vinfo->info.message = D.22658;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22659 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22659;
      }
      <D.22657>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22655>:
      <D.22651>:
      <D.22647>:
      goto <D.18359>;
      <D.18366>:
      <D.18367>:
      D.22660 = safe_read_compressed_int (&ptr, end, &token);
      if (D.22660 == 0) goto <D.22661>; else goto <D.22662>;
      <D.22661>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22663>; else goto <D.22664>;
      <D.22663>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22665 = monoeg_strdup ("Type: Not enough room for to decode generic argument number");
        vinfo->info.message = D.22665;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22666 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22666;
      }
      <D.22664>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22662>:
      goto <D.18359>;
      <D.18369>:
      D.22667 = parse_type (ctx, &ptr, end);
      if (D.22667 == 0) goto <D.22668>; else goto <D.22669>;
      <D.22668>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22670>; else goto <D.22671>;
      <D.22670>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22672 = monoeg_strdup ("Type: Could not parse array type");
        vinfo->info.message = D.22672;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22673 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22673;
      }
      <D.22671>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22669>:
      D.22674 = parse_array_shape (ctx, &ptr, end);
      if (D.22674 == 0) goto <D.22675>; else goto <D.22676>;
      <D.22675>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22677>; else goto <D.22678>;
      <D.22677>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22679 = monoeg_strdup ("Type: Could not parse array shape");
        vinfo->info.message = D.22679;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22680 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22680;
      }
      <D.22678>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22676>:
      goto <D.18359>;
      <D.18372>:
      D.22681 = parse_generic_inst (ctx, &ptr, end);
      if (D.22681 == 0) goto <D.22682>; else goto <D.22683>;
      <D.22682>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22684>; else goto <D.22685>;
      <D.22684>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22686 = monoeg_strdup ("Type: Could not parse generic inst");
        vinfo->info.message = D.22686;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22687 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22687;
      }
      <D.22685>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22683>:
      goto <D.18359>;
      <D.18374>:
      D.22688 = parse_method_signature (ctx, &ptr, end, 1, 1);
      if (D.22688 == 0) goto <D.22689>; else goto <D.22690>;
      <D.22689>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22691>; else goto <D.22692>;
      <D.22691>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22693 = monoeg_strdup ("Type: Could not parse method pointer signature");
        vinfo->info.message = D.22693;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22694 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22694;
      }
      <D.22692>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22690>:
      goto <D.18359>;
      <D.18376>:
      D.22695 = parse_custom_mods (ctx, &ptr, end);
      if (D.22695 == 0) goto <D.22696>; else goto <D.22697>;
      <D.22696>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22698>; else goto <D.22699>;
      <D.22698>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22700 = monoeg_strdup ("Type: Failed to parse array element custom attr");
        vinfo->info.message = D.22700;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22701 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22701;
      }
      <D.22699>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22697>:
      D.22702 = parse_type (ctx, &ptr, end);
      if (D.22702 == 0) goto <D.22703>; else goto <D.22704>;
      <D.22703>:
      D.22572 = ctx->report_error;
      if (D.22572 != 0) goto <D.22705>; else goto <D.22706>;
      <D.22705>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22707 = monoeg_strdup ("Type: Could not parse array type");
        vinfo->info.message = D.22707;
        vinfo->exception_type = 3;
        D.22576 = ctx->errors;
        D.22708 = monoeg_g_slist_prepend (D.22576, vinfo);
        ctx->errors = D.22708;
      }
      <D.22706>:
      ctx->valid = 0;
      D.22578 = 0;
      return D.22578;
      <D.22704>:
      goto <D.18359>;
      <D.22709>:
      <D.18359>:
      ptr.64 = ptr;
      *_ptr = ptr.64;
      D.22578 = 1;
      return D.22578;
    }
  finally
    {
      ptr = {CLOBBER};
      type = {CLOBBER};
      token = {CLOBBER};
    }
}


get_coded_index_table (int kind, guint32 coded_token)
{
  unsigned char D.22712;
  int D.22713;
  int D.22714;
  unsigned int D.22715;
  guint32 D.22716;
  unsigned int kind.67;
  unsigned int D.22718;
  unsigned char D.22719;
  guint32 idx;
  guint32 bits;

  D.22712 = coded_index_desc[kind];
  bits = (guint32) D.22712;
  kind = kind + 2;
  D.22713 = 1 << bits;
  D.22714 = D.22713 + -1;
  D.22715 = (unsigned int) D.22714;
  idx = D.22715 & coded_token;
  kind.67 = (unsigned int) kind;
  D.22718 = kind.67 + idx;
  D.22719 = coded_index_desc[D.22718];
  D.22716 = (guint32) D.22719;
  return D.22716;
}


parse_array_shape (struct VerifyContext * ctx, const char * * _ptr, const char * end)
{
  const char * ptr.68;
  int D.22722;
  int D.22725;
  gchar * D.22728;
  struct GSList * D.22729;
  struct GSList * D.22730;
  gboolean D.22731;
  unsigned int val.69;
  gchar * D.22737;
  struct GSList * D.22738;
  int D.22739;
  gchar * D.22744;
  struct GSList * D.22745;
  int D.22746;
  unsigned int D.22751;
  gchar * D.22752;
  struct GSList * D.22753;
  unsigned int size.70;
  int D.22755;
  gchar * D.22760;
  struct GSList * D.22761;
  int D.22762;
  gchar * D.22767;
  struct GSList * D.22768;
  const char * ptr.71;
  const char * ptr;
  unsigned int val;
  unsigned int size;
  unsigned int num;
  unsigned int i;

  try
    {
      ptr.68 = *_ptr;
      ptr = ptr.68;
      val = 0;
      D.22722 = safe_read (&ptr, end, &val, 1);
      if (D.22722 == 0) goto <D.22723>; else goto <D.22724>;
      <D.22723>:
      D.22725 = ctx->report_error;
      if (D.22725 != 0) goto <D.22726>; else goto <D.22727>;
      <D.22726>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22728 = monoeg_strdup ("ArrayShape: Not enough room for Rank");
        vinfo->info.message = D.22728;
        vinfo->exception_type = 3;
        D.22729 = ctx->errors;
        D.22730 = monoeg_g_slist_prepend (D.22729, vinfo);
        ctx->errors = D.22730;
      }
      <D.22727>:
      ctx->valid = 0;
      D.22731 = 0;
      return D.22731;
      <D.22724>:
      val.69 = val;
      if (val.69 == 0) goto <D.22733>; else goto <D.22734>;
      <D.22733>:
      D.22725 = ctx->report_error;
      if (D.22725 != 0) goto <D.22735>; else goto <D.22736>;
      <D.22735>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22737 = monoeg_strdup ("ArrayShape: Invalid shape with zero Rank");
        vinfo->info.message = D.22737;
        vinfo->exception_type = 3;
        D.22729 = ctx->errors;
        D.22738 = monoeg_g_slist_prepend (D.22729, vinfo);
        ctx->errors = D.22738;
      }
      <D.22736>:
      ctx->valid = 0;
      D.22731 = 0;
      return D.22731;
      <D.22734>:
      D.22739 = safe_read_compressed_int (&ptr, end, &size);
      if (D.22739 == 0) goto <D.22740>; else goto <D.22741>;
      <D.22740>:
      D.22725 = ctx->report_error;
      if (D.22725 != 0) goto <D.22742>; else goto <D.22743>;
      <D.22742>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22744 = monoeg_strdup ("ArrayShape: Not enough room for NumSizes");
        vinfo->info.message = D.22744;
        vinfo->exception_type = 3;
        D.22729 = ctx->errors;
        D.22745 = monoeg_g_slist_prepend (D.22729, vinfo);
        ctx->errors = D.22745;
      }
      <D.22743>:
      ctx->valid = 0;
      D.22731 = 0;
      return D.22731;
      <D.22741>:
      i = 0;
      goto <D.18316>;
      <D.18315>:
      D.22746 = safe_read_compressed_int (&ptr, end, &num);
      if (D.22746 == 0) goto <D.22747>; else goto <D.22748>;
      <D.22747>:
      D.22725 = ctx->report_error;
      if (D.22725 != 0) goto <D.22749>; else goto <D.22750>;
      <D.22749>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22751 = i + 1;
        D.22752 = monoeg_g_strdup_printf ("ArrayShape: Not enough room for Size of rank %d", D.22751);
        vinfo->info.message = D.22752;
        vinfo->exception_type = 3;
        D.22729 = ctx->errors;
        D.22753 = monoeg_g_slist_prepend (D.22729, vinfo);
        ctx->errors = D.22753;
      }
      <D.22750>:
      ctx->valid = 0;
      D.22731 = 0;
      return D.22731;
      <D.22748>:
      i = i + 1;
      <D.18316>:
      size.70 = size;
      if (i < size.70) goto <D.18315>; else goto <D.18317>;
      <D.18317>:
      D.22755 = safe_read_compressed_int (&ptr, end, &size);
      if (D.22755 == 0) goto <D.22756>; else goto <D.22757>;
      <D.22756>:
      D.22725 = ctx->report_error;
      if (D.22725 != 0) goto <D.22758>; else goto <D.22759>;
      <D.22758>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22760 = monoeg_strdup ("ArrayShape: Not enough room for NumLoBounds");
        vinfo->info.message = D.22760;
        vinfo->exception_type = 3;
        D.22729 = ctx->errors;
        D.22761 = monoeg_g_slist_prepend (D.22729, vinfo);
        ctx->errors = D.22761;
      }
      <D.22759>:
      ctx->valid = 0;
      D.22731 = 0;
      return D.22731;
      <D.22757>:
      i = 0;
      goto <D.18321>;
      <D.18320>:
      D.22762 = safe_read_compressed_int (&ptr, end, &num);
      if (D.22762 == 0) goto <D.22763>; else goto <D.22764>;
      <D.22763>:
      D.22725 = ctx->report_error;
      if (D.22725 != 0) goto <D.22765>; else goto <D.22766>;
      <D.22765>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22751 = i + 1;
        D.22767 = monoeg_g_strdup_printf ("ArrayShape: Not enough room for LoBound of rank %d", D.22751);
        vinfo->info.message = D.22767;
        vinfo->exception_type = 3;
        D.22729 = ctx->errors;
        D.22768 = monoeg_g_slist_prepend (D.22729, vinfo);
        ctx->errors = D.22768;
      }
      <D.22766>:
      ctx->valid = 0;
      D.22731 = 0;
      return D.22731;
      <D.22764>:
      i = i + 1;
      <D.18321>:
      size.70 = size;
      if (i < size.70) goto <D.18320>; else goto <D.18322>;
      <D.18322>:
      ptr.71 = ptr;
      *_ptr = ptr.71;
      D.22731 = 1;
      return D.22731;
    }
  finally
    {
      ptr = {CLOBBER};
      val = {CLOBBER};
      size = {CLOBBER};
      num = {CLOBBER};
    }
}


parse_generic_inst (struct VerifyContext * ctx, const char * * _ptr, const char * end)
{
  const char * ptr.72;
  int D.22773;
  int D.22776;
  gchar * D.22779;
  struct GSList * D.22780;
  struct GSList * D.22781;
  gboolean D.22782;
  unsigned int type.73;
  unsigned int D.22784;
  gchar * D.22789;
  struct GSList * D.22790;
  int D.22791;
  gchar * D.22796;
  struct GSList * D.22797;
  unsigned int token.74;
  int D.22801;
  unsigned int D.22803;
  gchar * D.22806;
  struct GSList * D.22807;
  unsigned int D.22808;
  unsigned int D.22811;
  unsigned int D.22812;
  unsigned int D.22815;
  unsigned int D.22816;
  gchar * D.22821;
  struct GSList * D.22822;
  int D.22823;
  gchar * D.22828;
  struct GSList * D.22829;
  unsigned int count.75;
  gchar * D.22835;
  struct GSList * D.22836;
  int D.22837;
  gchar * D.22842;
  struct GSList * D.22843;
  int D.22844;
  unsigned int D.22849;
  gchar * D.22850;
  struct GSList * D.22851;
  const char * ptr.76;
  const char * ptr;
  unsigned int type;
  unsigned int count;
  unsigned int token;
  unsigned int i;

  try
    {
      ptr.72 = *_ptr;
      ptr = ptr.72;
      D.22773 = safe_read (&ptr, end, &type, 1);
      if (D.22773 == 0) goto <D.22774>; else goto <D.22775>;
      <D.22774>:
      D.22776 = ctx->report_error;
      if (D.22776 != 0) goto <D.22777>; else goto <D.22778>;
      <D.22777>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22779 = monoeg_strdup ("GenericInst: Not enough room for kind");
        vinfo->info.message = D.22779;
        vinfo->exception_type = 3;
        D.22780 = ctx->errors;
        D.22781 = monoeg_g_slist_prepend (D.22780, vinfo);
        ctx->errors = D.22781;
      }
      <D.22778>:
      ctx->valid = 0;
      D.22782 = 0;
      return D.22782;
      <D.22775>:
      type.73 = type;
      D.22784 = type.73 + 4294967279;
      if (D.22784 > 1) goto <D.22785>; else goto <D.22786>;
      <D.22785>:
      D.22776 = ctx->report_error;
      if (D.22776 != 0) goto <D.22787>; else goto <D.22788>;
      <D.22787>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        type.73 = type;
        D.22789 = monoeg_g_strdup_printf ("GenericInst: Invalid GenericInst kind %x\n", type.73);
        vinfo->info.message = D.22789;
        vinfo->exception_type = 3;
        D.22780 = ctx->errors;
        D.22790 = monoeg_g_slist_prepend (D.22780, vinfo);
        ctx->errors = D.22790;
      }
      <D.22788>:
      ctx->valid = 0;
      D.22782 = 0;
      return D.22782;
      <D.22786>:
      D.22791 = safe_read_compressed_int (&ptr, end, &token);
      if (D.22791 == 0) goto <D.22792>; else goto <D.22793>;
      <D.22792>:
      D.22776 = ctx->report_error;
      if (D.22776 != 0) goto <D.22794>; else goto <D.22795>;
      <D.22794>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22796 = monoeg_strdup ("GenericInst: Not enough room for type token");
        vinfo->info.message = D.22796;
        vinfo->exception_type = 3;
        D.22780 = ctx->errors;
        D.22797 = monoeg_g_slist_prepend (D.22780, vinfo);
        ctx->errors = D.22797;
      }
      <D.22795>:
      ctx->valid = 0;
      D.22782 = 0;
      return D.22782;
      <D.22793>:
      token.74 = token;
      D.22801 = is_valid_coded_index (ctx, 0, token.74);
      if (D.22801 == 0) goto <D.22798>; else goto <D.22802>;
      <D.22802>:
      token.74 = token;
      D.22803 = get_coded_index_token (0, token.74);
      if (D.22803 == 0) goto <D.22798>; else goto <D.22799>;
      <D.22798>:
      D.22776 = ctx->report_error;
      if (D.22776 != 0) goto <D.22804>; else goto <D.22805>;
      <D.22804>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        token.74 = token;
        D.22806 = monoeg_g_strdup_printf ("GenericInst: invalid TypeDefOrRef token %x", token.74);
        vinfo->info.message = D.22806;
        vinfo->exception_type = 3;
        D.22780 = ctx->errors;
        D.22807 = monoeg_g_slist_prepend (D.22780, vinfo);
        ctx->errors = D.22807;
      }
      <D.22805>:
      ctx->valid = 0;
      D.22782 = 0;
      return D.22782;
      <D.22799>:
      D.22808 = ctx->token;
      if (D.22808 != 0) goto <D.22809>; else goto <D.22810>;
      <D.22809>:
      D.22808 = ctx->token;
      D.22811 = D.22808 & 16777215;
      token.74 = token;
      D.22812 = get_coded_index_token (0, token.74);
      if (D.22811 == D.22812) goto <D.22813>; else goto <D.22814>;
      <D.22813>:
      D.22808 = ctx->token;
      D.22815 = D.22808 >> 24;
      token.74 = token;
      D.22816 = get_coded_index_table (0, token.74);
      if (D.22815 == D.22816) goto <D.22817>; else goto <D.22818>;
      <D.22817>:
      D.22776 = ctx->report_error;
      if (D.22776 != 0) goto <D.22819>; else goto <D.22820>;
      <D.22819>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22808 = ctx->token;
        D.22821 = monoeg_g_strdup_printf ("Type: Recurside generic instance specification (%x). A type signature can\'t reference itself", D.22808);
        vinfo->info.message = D.22821;
        vinfo->exception_type = 3;
        D.22780 = ctx->errors;
        D.22822 = monoeg_g_slist_prepend (D.22780, vinfo);
        ctx->errors = D.22822;
      }
      <D.22820>:
      ctx->valid = 0;
      D.22782 = 0;
      return D.22782;
      <D.22818>:
      <D.22814>:
      <D.22810>:
      D.22823 = safe_read_compressed_int (&ptr, end, &count);
      if (D.22823 == 0) goto <D.22824>; else goto <D.22825>;
      <D.22824>:
      D.22776 = ctx->report_error;
      if (D.22776 != 0) goto <D.22826>; else goto <D.22827>;
      <D.22826>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22828 = monoeg_strdup ("GenericInst: Not enough room for argument count");
        vinfo->info.message = D.22828;
        vinfo->exception_type = 3;
        D.22780 = ctx->errors;
        D.22829 = monoeg_g_slist_prepend (D.22780, vinfo);
        ctx->errors = D.22829;
      }
      <D.22827>:
      ctx->valid = 0;
      D.22782 = 0;
      return D.22782;
      <D.22825>:
      count.75 = count;
      if (count.75 == 0) goto <D.22831>; else goto <D.22832>;
      <D.22831>:
      D.22776 = ctx->report_error;
      if (D.22776 != 0) goto <D.22833>; else goto <D.22834>;
      <D.22833>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22835 = monoeg_strdup ("GenericInst: Zero arguments generic instance");
        vinfo->info.message = D.22835;
        vinfo->exception_type = 3;
        D.22780 = ctx->errors;
        D.22836 = monoeg_g_slist_prepend (D.22780, vinfo);
        ctx->errors = D.22836;
      }
      <D.22834>:
      ctx->valid = 0;
      D.22782 = 0;
      return D.22782;
      <D.22832>:
      i = 0;
      goto <D.18343>;
      <D.18342>:
      D.22837 = parse_custom_mods (ctx, &ptr, end);
      if (D.22837 == 0) goto <D.22838>; else goto <D.22839>;
      <D.22838>:
      D.22776 = ctx->report_error;
      if (D.22776 != 0) goto <D.22840>; else goto <D.22841>;
      <D.22840>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22842 = monoeg_strdup ("Type: Failed to parse pointer custom attr");
        vinfo->info.message = D.22842;
        vinfo->exception_type = 3;
        D.22780 = ctx->errors;
        D.22843 = monoeg_g_slist_prepend (D.22780, vinfo);
        ctx->errors = D.22843;
      }
      <D.22841>:
      ctx->valid = 0;
      D.22782 = 0;
      return D.22782;
      <D.22839>:
      D.22844 = parse_type (ctx, &ptr, end);
      if (D.22844 == 0) goto <D.22845>; else goto <D.22846>;
      <D.22845>:
      D.22776 = ctx->report_error;
      if (D.22776 != 0) goto <D.22847>; else goto <D.22848>;
      <D.22847>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22849 = i + 1;
        D.22850 = monoeg_g_strdup_printf ("GenericInst: invalid generic argument %d", D.22849);
        vinfo->info.message = D.22850;
        vinfo->exception_type = 3;
        D.22780 = ctx->errors;
        D.22851 = monoeg_g_slist_prepend (D.22780, vinfo);
        ctx->errors = D.22851;
      }
      <D.22848>:
      ctx->valid = 0;
      D.22782 = 0;
      return D.22782;
      <D.22846>:
      i = i + 1;
      <D.18343>:
      count.75 = count;
      if (i < count.75) goto <D.18342>; else goto <D.18344>;
      <D.18344>:
      ptr.76 = ptr;
      *_ptr = ptr.76;
      D.22782 = 1;
      return D.22782;
    }
  finally
    {
      ptr = {CLOBBER};
      type = {CLOBBER};
      count = {CLOBBER};
      token = {CLOBBER};
    }
}


parse_method_signature (struct VerifyContext * ctx, const char * * _ptr, const char * end, gboolean allow_sentinel, gboolean allow_unmanaged)
{
  const char * ptr.77;
  int D.22856;
  int D.22859;
  gchar * D.22862;
  struct GSList * D.22863;
  struct GSList * D.22864;
  gboolean D.22865;
  unsigned int cconv.78;
  unsigned int D.22867;
  gchar * D.22872;
  struct GSList * D.22873;
  unsigned int D.22876;
  gchar * D.22881;
  struct GSList * D.22882;
  gchar * D.22890;
  struct GSList * D.22891;
  unsigned int D.22892;
  int D.22895;
  gchar * D.22900;
  struct GSList * D.22901;
  unsigned int gparam_count.79;
  gchar * D.22909;
  struct GSList * D.22910;
  gchar * D.22917;
  struct GSList * D.22918;
  int D.22919;
  gchar * D.22924;
  struct GSList * D.22925;
  int D.22926;
  gchar * D.22931;
  struct GSList * D.22932;
  int D.22935;
  gchar * D.22940;
  struct GSList * D.22941;
  unsigned int type.80;
  gchar * D.22949;
  struct GSList * D.22950;
  gchar * D.22955;
  struct GSList * D.22956;
  const char * ptr.81;
  const char * ptr.82;
  int D.22960;
  gchar * D.22965;
  struct GSList * D.22966;
  unsigned int param_count.83;
  unsigned int cconv;
  unsigned int param_count;
  unsigned int gparam_count;
  unsigned int type;
  unsigned int i;
  const char * ptr;
  gboolean saw_sentinel;

  try
    {
      cconv = 0;
      param_count = 0;
      gparam_count = 0;
      type = 0;
      ptr.77 = *_ptr;
      ptr = ptr.77;
      saw_sentinel = 0;
      D.22856 = safe_read (&ptr, end, &cconv, 1);
      if (D.22856 == 0) goto <D.22857>; else goto <D.22858>;
      <D.22857>:
      D.22859 = ctx->report_error;
      if (D.22859 != 0) goto <D.22860>; else goto <D.22861>;
      <D.22860>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22862 = monoeg_strdup ("MethodSig: Not enough room for the call conv");
        vinfo->info.message = D.22862;
        vinfo->exception_type = 3;
        D.22863 = ctx->errors;
        D.22864 = monoeg_g_slist_prepend (D.22863, vinfo);
        ctx->errors = D.22864;
      }
      <D.22861>:
      ctx->valid = 0;
      D.22865 = 0;
      return D.22865;
      <D.22858>:
      cconv.78 = cconv;
      D.22867 = cconv.78 & 128;
      if (D.22867 != 0) goto <D.22868>; else goto <D.22869>;
      <D.22868>:
      D.22859 = ctx->report_error;
      if (D.22859 != 0) goto <D.22870>; else goto <D.22871>;
      <D.22870>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22872 = monoeg_strdup ("MethodSig: CallConv has 0x80 set");
        vinfo->info.message = D.22872;
        vinfo->exception_type = 3;
        D.22863 = ctx->errors;
        D.22873 = monoeg_g_slist_prepend (D.22863, vinfo);
        ctx->errors = D.22873;
      }
      <D.22871>:
      ctx->valid = 0;
      D.22865 = 0;
      return D.22865;
      <D.22869>:
      if (allow_unmanaged != 0) goto <D.22874>; else goto <D.22875>;
      <D.22874>:
      cconv.78 = cconv;
      D.22876 = cconv.78 & 15;
      if (D.22876 > 5) goto <D.22877>; else goto <D.22878>;
      <D.22877>:
      D.22859 = ctx->report_error;
      if (D.22859 != 0) goto <D.22879>; else goto <D.22880>;
      <D.22879>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        cconv.78 = cconv;
        D.22876 = cconv.78 & 15;
        D.22881 = monoeg_g_strdup_printf ("MethodSig: CallConv is not valid, it\'s %x", D.22876);
        vinfo->info.message = D.22881;
        vinfo->exception_type = 3;
        D.22863 = ctx->errors;
        D.22882 = monoeg_g_slist_prepend (D.22863, vinfo);
        ctx->errors = D.22882;
      }
      <D.22880>:
      ctx->valid = 0;
      D.22865 = 0;
      return D.22865;
      <D.22878>:
      goto <D.22883>;
      <D.22875>:
      cconv.78 = cconv;
      D.22876 = cconv.78 & 15;
      if (D.22876 != 0) goto <D.22884>; else goto <D.22885>;
      <D.22884>:
      cconv.78 = cconv;
      D.22876 = cconv.78 & 15;
      if (D.22876 != 5) goto <D.22886>; else goto <D.22887>;
      <D.22886>:
      D.22859 = ctx->report_error;
      if (D.22859 != 0) goto <D.22888>; else goto <D.22889>;
      <D.22888>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        cconv.78 = cconv;
        D.22876 = cconv.78 & 15;
        D.22890 = monoeg_g_strdup_printf ("MethodSig: CallConv is not Default or Vararg, it\'s %x", D.22876);
        vinfo->info.message = D.22890;
        vinfo->exception_type = 3;
        D.22863 = ctx->errors;
        D.22891 = monoeg_g_slist_prepend (D.22863, vinfo);
        ctx->errors = D.22891;
      }
      <D.22889>:
      ctx->valid = 0;
      D.22865 = 0;
      return D.22865;
      <D.22887>:
      <D.22885>:
      <D.22883>:
      cconv.78 = cconv;
      D.22892 = cconv.78 & 16;
      if (D.22892 != 0) goto <D.22893>; else goto <D.22894>;
      <D.22893>:
      D.22895 = safe_read_compressed_int (&ptr, end, &gparam_count);
      if (D.22895 == 0) goto <D.22896>; else goto <D.22897>;
      <D.22896>:
      D.22859 = ctx->report_error;
      if (D.22859 != 0) goto <D.22898>; else goto <D.22899>;
      <D.22898>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22900 = monoeg_strdup ("MethodSig: Not enough room for the generic param count");
        vinfo->info.message = D.22900;
        vinfo->exception_type = 3;
        D.22863 = ctx->errors;
        D.22901 = monoeg_g_slist_prepend (D.22863, vinfo);
        ctx->errors = D.22901;
      }
      <D.22899>:
      ctx->valid = 0;
      D.22865 = 0;
      return D.22865;
      <D.22897>:
      <D.22894>:
      cconv.78 = cconv;
      D.22892 = cconv.78 & 16;
      if (D.22892 != 0) goto <D.22902>; else goto <D.22903>;
      <D.22902>:
      gparam_count.79 = gparam_count;
      if (gparam_count.79 == 0) goto <D.22905>; else goto <D.22906>;
      <D.22905>:
      D.22859 = ctx->report_error;
      if (D.22859 != 0) goto <D.22907>; else goto <D.22908>;
      <D.22907>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22909 = monoeg_strdup ("MethodSig: Signature with generics but zero arity");
        vinfo->info.message = D.22909;
        vinfo->exception_type = 3;
        D.22863 = ctx->errors;
        D.22910 = monoeg_g_slist_prepend (D.22863, vinfo);
        ctx->errors = D.22910;
      }
      <D.22908>:
      ctx->valid = 0;
      D.22865 = 0;
      return D.22865;
      <D.22906>:
      <D.22903>:
      if (allow_unmanaged != 0) goto <D.22911>; else goto <D.22912>;
      <D.22911>:
      cconv.78 = cconv;
      D.22892 = cconv.78 & 16;
      if (D.22892 != 0) goto <D.22913>; else goto <D.22914>;
      <D.22913>:
      D.22859 = ctx->report_error;
      if (D.22859 != 0) goto <D.22915>; else goto <D.22916>;
      <D.22915>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22917 = monoeg_strdup ("MethodSig: Standalone signature with generic params");
        vinfo->info.message = D.22917;
        vinfo->exception_type = 3;
        D.22863 = ctx->errors;
        D.22918 = monoeg_g_slist_prepend (D.22863, vinfo);
        ctx->errors = D.22918;
      }
      <D.22916>:
      ctx->valid = 0;
      D.22865 = 0;
      return D.22865;
      <D.22914>:
      <D.22912>:
      D.22919 = safe_read_compressed_int (&ptr, end, &param_count);
      if (D.22919 == 0) goto <D.22920>; else goto <D.22921>;
      <D.22920>:
      D.22859 = ctx->report_error;
      if (D.22859 != 0) goto <D.22922>; else goto <D.22923>;
      <D.22922>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22924 = monoeg_strdup ("MethodSig: Not enough room for the param count");
        vinfo->info.message = D.22924;
        vinfo->exception_type = 3;
        D.22863 = ctx->errors;
        D.22925 = monoeg_g_slist_prepend (D.22863, vinfo);
        ctx->errors = D.22925;
      }
      <D.22923>:
      ctx->valid = 0;
      D.22865 = 0;
      return D.22865;
      <D.22921>:
      D.22926 = parse_return_type (ctx, &ptr, end);
      if (D.22926 == 0) goto <D.22927>; else goto <D.22928>;
      <D.22927>:
      D.22859 = ctx->report_error;
      if (D.22859 != 0) goto <D.22929>; else goto <D.22930>;
      <D.22929>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22931 = monoeg_strdup ("MethodSig: Error parsing return type");
        vinfo->info.message = D.22931;
        vinfo->exception_type = 3;
        D.22863 = ctx->errors;
        D.22932 = monoeg_g_slist_prepend (D.22863, vinfo);
        ctx->errors = D.22932;
      }
      <D.22930>:
      ctx->valid = 0;
      D.22865 = 0;
      return D.22865;
      <D.22928>:
      i = 0;
      goto <D.18423>;
      <D.18422>:
      if (allow_sentinel != 0) goto <D.22933>; else goto <D.22934>;
      <D.22933>:
      D.22935 = safe_read (&ptr, end, &type, 1);
      if (D.22935 == 0) goto <D.22936>; else goto <D.22937>;
      <D.22936>:
      D.22859 = ctx->report_error;
      if (D.22859 != 0) goto <D.22938>; else goto <D.22939>;
      <D.22938>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22940 = monoeg_g_strdup_printf ("MethodSig: Not enough room for param %d type", i);
        vinfo->info.message = D.22940;
        vinfo->exception_type = 3;
        D.22863 = ctx->errors;
        D.22941 = monoeg_g_slist_prepend (D.22863, vinfo);
        ctx->errors = D.22941;
      }
      <D.22939>:
      ctx->valid = 0;
      D.22865 = 0;
      return D.22865;
      <D.22937>:
      type.80 = type;
      if (type.80 == 65) goto <D.22943>; else goto <D.22944>;
      <D.22943>:
      cconv.78 = cconv;
      D.22876 = cconv.78 & 15;
      if (D.22876 != 5) goto <D.22945>; else goto <D.22946>;
      <D.22945>:
      D.22859 = ctx->report_error;
      if (D.22859 != 0) goto <D.22947>; else goto <D.22948>;
      <D.22947>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22949 = monoeg_strdup ("MethodSig: Found sentinel but signature is not vararg");
        vinfo->info.message = D.22949;
        vinfo->exception_type = 3;
        D.22863 = ctx->errors;
        D.22950 = monoeg_g_slist_prepend (D.22863, vinfo);
        ctx->errors = D.22950;
      }
      <D.22948>:
      ctx->valid = 0;
      D.22865 = 0;
      return D.22865;
      <D.22946>:
      if (saw_sentinel != 0) goto <D.22951>; else goto <D.22952>;
      <D.22951>:
      D.22859 = ctx->report_error;
      if (D.22859 != 0) goto <D.22953>; else goto <D.22954>;
      <D.22953>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22955 = monoeg_strdup ("MethodSig: More than one sentinel type");
        vinfo->info.message = D.22955;
        vinfo->exception_type = 3;
        D.22863 = ctx->errors;
        D.22956 = monoeg_g_slist_prepend (D.22863, vinfo);
        ctx->errors = D.22956;
      }
      <D.22954>:
      ctx->valid = 0;
      D.22865 = 0;
      return D.22865;
      <D.22952>:
      saw_sentinel = 1;
      goto <D.22957>;
      <D.22944>:
      ptr.81 = ptr;
      ptr.82 = ptr.81 + 18446744073709551615;
      ptr = ptr.82;
      <D.22957>:
      <D.22934>:
      D.22960 = parse_param (ctx, &ptr, end);
      if (D.22960 == 0) goto <D.22961>; else goto <D.22962>;
      <D.22961>:
      D.22859 = ctx->report_error;
      if (D.22859 != 0) goto <D.22963>; else goto <D.22964>;
      <D.22963>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22965 = monoeg_g_strdup_printf ("MethodSig: Error parsing arg %d", i);
        vinfo->info.message = D.22965;
        vinfo->exception_type = 3;
        D.22863 = ctx->errors;
        D.22966 = monoeg_g_slist_prepend (D.22863, vinfo);
        ctx->errors = D.22966;
      }
      <D.22964>:
      ctx->valid = 0;
      D.22865 = 0;
      return D.22865;
      <D.22962>:
      i = i + 1;
      <D.18423>:
      param_count.83 = param_count;
      if (i < param_count.83) goto <D.18422>; else goto <D.18424>;
      <D.18424>:
      ptr.81 = ptr;
      *_ptr = ptr.81;
      D.22865 = 1;
      return D.22865;
    }
  finally
    {
      cconv = {CLOBBER};
      param_count = {CLOBBER};
      gparam_count = {CLOBBER};
      type = {CLOBBER};
      ptr = {CLOBBER};
    }
}


parse_return_type (struct VerifyContext * ctx, const char * * _ptr, const char * end)
{
  int D.22970;
  gboolean D.22973;
  const char * ptr.84;
  int D.22975;
  int D.22978;
  gchar * D.22981;
  struct GSList * D.22982;
  struct GSList * D.22983;
  unsigned int type.85;
  const char * ptr.86;
  const char * ptr;
  unsigned int type;

  try
    {
      type = 0;
      D.22970 = parse_custom_mods (ctx, _ptr, end);
      if (D.22970 == 0) goto <D.22971>; else goto <D.22972>;
      <D.22971>:
      D.22973 = 0;
      return D.22973;
      <D.22972>:
      ptr.84 = *_ptr;
      ptr = ptr.84;
      D.22975 = safe_read (&ptr, end, &type, 1);
      if (D.22975 == 0) goto <D.22976>; else goto <D.22977>;
      <D.22976>:
      D.22978 = ctx->report_error;
      if (D.22978 != 0) goto <D.22979>; else goto <D.22980>;
      <D.22979>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.22981 = monoeg_strdup ("ReturnType: Not enough room for the type");
        vinfo->info.message = D.22981;
        vinfo->exception_type = 3;
        D.22982 = ctx->errors;
        D.22983 = monoeg_g_slist_prepend (D.22982, vinfo);
        ctx->errors = D.22983;
      }
      <D.22980>:
      ctx->valid = 0;
      D.22973 = 0;
      return D.22973;
      <D.22977>:
      type.85 = type;
      if (type.85 == 1) goto <D.22984>; else goto <D.22987>;
      <D.22987>:
      type.85 = type;
      if (type.85 == 22) goto <D.22984>; else goto <D.22985>;
      <D.22984>:
      ptr.86 = ptr;
      *_ptr = ptr.86;
      D.22973 = 1;
      return D.22973;
      <D.22985>:
      type.85 = type;
      if (type.85 == 16) goto <D.22989>; else goto <D.22990>;
      <D.22989>:
      ptr.86 = ptr;
      *_ptr = ptr.86;
      <D.22990>:
      D.22973 = parse_type (ctx, _ptr, end);
      return D.22973;
    }
  finally
    {
      ptr = {CLOBBER};
      type = {CLOBBER};
    }
}


parse_param (struct VerifyContext * ctx, const char * * _ptr, const char * end)
{
  int D.22993;
  gboolean D.22996;
  const char * ptr.87;
  int D.22998;
  int D.23001;
  gchar * D.23004;
  struct GSList * D.23005;
  struct GSList * D.23006;
  unsigned int type.88;
  const char * ptr.89;
  int D.23013;
  const char * ptr;
  unsigned int type;

  try
    {
      type = 0;
      D.22993 = parse_custom_mods (ctx, _ptr, end);
      if (D.22993 == 0) goto <D.22994>; else goto <D.22995>;
      <D.22994>:
      D.22996 = 0;
      return D.22996;
      <D.22995>:
      ptr.87 = *_ptr;
      ptr = ptr.87;
      D.22998 = safe_read (&ptr, end, &type, 1);
      if (D.22998 == 0) goto <D.22999>; else goto <D.23000>;
      <D.22999>:
      D.23001 = ctx->report_error;
      if (D.23001 != 0) goto <D.23002>; else goto <D.23003>;
      <D.23002>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23004 = monoeg_strdup ("Param: Not enough room for the type");
        vinfo->info.message = D.23004;
        vinfo->exception_type = 3;
        D.23005 = ctx->errors;
        D.23006 = monoeg_g_slist_prepend (D.23005, vinfo);
        ctx->errors = D.23006;
      }
      <D.23003>:
      ctx->valid = 0;
      D.22996 = 0;
      return D.22996;
      <D.23000>:
      type.88 = type;
      if (type.88 == 22) goto <D.23008>; else goto <D.23009>;
      <D.23008>:
      ptr.89 = ptr;
      *_ptr = ptr.89;
      D.22996 = 1;
      return D.22996;
      <D.23009>:
      type.88 = type;
      if (type.88 == 16) goto <D.23011>; else goto <D.23012>;
      <D.23011>:
      ptr.89 = ptr;
      *_ptr = ptr.89;
      D.23013 = parse_custom_mods (ctx, _ptr, end);
      if (D.23013 == 0) goto <D.23014>; else goto <D.23015>;
      <D.23014>:
      D.22996 = 0;
      return D.22996;
      <D.23015>:
      <D.23012>:
      D.22996 = parse_type (ctx, _ptr, end);
      return D.22996;
    }
  finally
    {
      ptr = {CLOBBER};
      type = {CLOBBER};
    }
}


verify_methodimpl_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23018;
  unsigned int D.23021;
  <unnamed-unsigned:24> D.23023;
  int D.23024;
  int D.23025;
  unsigned int D.23026;
  int D.23027;
  unsigned int D.23030;
  gchar * D.23031;
  struct GSList * D.23032;
  struct GSList * D.23033;
  unsigned int D.23034;
  unsigned int D.23035;
  gchar * D.23040;
  struct GSList * D.23041;
  int D.23042;
  gchar * D.23047;
  struct GSList * D.23048;
  unsigned int D.23049;
  gchar * D.23054;
  struct GSList * D.23055;
  int D.23056;
  gchar * D.23061;
  struct GSList * D.23062;
  <unnamed-unsigned:24> D.23063;
  int D.23064;
  struct MonoTableInfo * table;
  guint32 data[3];
  int i;

  try
    {
      D.23018 = ctx->image;
      table = &D.23018->tables[25];
      i = 0;
      goto <D.19254>;
      <D.19253>:
      mono_metadata_decode_row (table, i, &data, 3);
      D.23021 = data[0];
      if (D.23021 == 0) goto <D.23019>; else goto <D.23022>;
      <D.23022>:
      D.23021 = data[0];
      D.23018 = ctx->image;
      D.23023 = D.23018->tables[2].rows;
      D.23024 = (int) D.23023;
      D.23025 = D.23024 + 1;
      D.23026 = (unsigned int) D.23025;
      if (D.23021 > D.23026) goto <D.23019>; else goto <D.23020>;
      <D.23019>:
      D.23027 = ctx->report_error;
      if (D.23027 != 0) goto <D.23028>; else goto <D.23029>;
      <D.23028>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23030 = data[2];
        D.23031 = monoeg_g_strdup_printf ("Invalid MethodImpl row %d Class field %08x", i, D.23030);
        vinfo->info.message = D.23031;
        vinfo->exception_type = 3;
        D.23032 = ctx->errors;
        D.23033 = monoeg_g_slist_prepend (D.23032, vinfo);
        ctx->errors = D.23033;
      }
      <D.23029>:
      ctx->valid = 0;
      return;
      <D.23020>:
      D.23034 = data[1];
      D.23035 = get_coded_index_token (52, D.23034);
      if (D.23035 == 0) goto <D.23036>; else goto <D.23037>;
      <D.23036>:
      D.23027 = ctx->report_error;
      if (D.23027 != 0) goto <D.23038>; else goto <D.23039>;
      <D.23038>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23034 = data[1];
        D.23040 = monoeg_g_strdup_printf ("Invalid MethodImpl row %d MethodBody field %08x", i, D.23034);
        vinfo->info.message = D.23040;
        vinfo->exception_type = 3;
        D.23032 = ctx->errors;
        D.23041 = monoeg_g_slist_prepend (D.23032, vinfo);
        ctx->errors = D.23041;
      }
      <D.23039>:
      ctx->valid = 0;
      return;
      <D.23037>:
      D.23034 = data[1];
      D.23042 = is_valid_coded_index (ctx, 52, D.23034);
      if (D.23042 == 0) goto <D.23043>; else goto <D.23044>;
      <D.23043>:
      D.23027 = ctx->report_error;
      if (D.23027 != 0) goto <D.23045>; else goto <D.23046>;
      <D.23045>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23034 = data[1];
        D.23047 = monoeg_g_strdup_printf ("Invalid MethodImpl row %d MethodBody field %08x", i, D.23034);
        vinfo->info.message = D.23047;
        vinfo->exception_type = 3;
        D.23032 = ctx->errors;
        D.23048 = monoeg_g_slist_prepend (D.23032, vinfo);
        ctx->errors = D.23048;
      }
      <D.23046>:
      ctx->valid = 0;
      return;
      <D.23044>:
      D.23030 = data[2];
      D.23049 = get_coded_index_token (52, D.23030);
      if (D.23049 == 0) goto <D.23050>; else goto <D.23051>;
      <D.23050>:
      D.23027 = ctx->report_error;
      if (D.23027 != 0) goto <D.23052>; else goto <D.23053>;
      <D.23052>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23030 = data[2];
        D.23054 = monoeg_g_strdup_printf ("Invalid MethodImpl row %d MethodDeclaration field %08x", i, D.23030);
        vinfo->info.message = D.23054;
        vinfo->exception_type = 3;
        D.23032 = ctx->errors;
        D.23055 = monoeg_g_slist_prepend (D.23032, vinfo);
        ctx->errors = D.23055;
      }
      <D.23053>:
      ctx->valid = 0;
      return;
      <D.23051>:
      D.23030 = data[2];
      D.23056 = is_valid_coded_index (ctx, 52, D.23030);
      if (D.23056 == 0) goto <D.23057>; else goto <D.23058>;
      <D.23057>:
      D.23027 = ctx->report_error;
      if (D.23027 != 0) goto <D.23059>; else goto <D.23060>;
      <D.23059>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23030 = data[2];
        D.23061 = monoeg_g_strdup_printf ("Invalid MethodImpl row %d MethodDeclaration field %08x", i, D.23030);
        vinfo->info.message = D.23061;
        vinfo->exception_type = 3;
        D.23032 = ctx->errors;
        D.23062 = monoeg_g_slist_prepend (D.23032, vinfo);
        ctx->errors = D.23062;
      }
      <D.23060>:
      ctx->valid = 0;
      return;
      <D.23058>:
      i = i + 1;
      <D.19254>:
      D.23063 = table->rows;
      D.23064 = (int) D.23063;
      if (D.23064 > i) goto <D.19253>; else goto <D.19255>;
      <D.19255>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_moduleref_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23068;
  unsigned int D.23069;
  int D.23070;
  int D.23073;
  gchar * D.23076;
  struct GSList * D.23077;
  struct GSList * D.23078;
  <unnamed-unsigned:24> D.23079;
  int D.23080;
  struct MonoTableInfo * table;
  guint32 data[1];
  int i;

  try
    {
      D.23068 = ctx->image;
      table = &D.23068->tables[26];
      i = 0;
      goto <D.19264>;
      <D.19263>:
      mono_metadata_decode_row (table, i, &data, 1);
      D.23069 = data[0];
      D.23070 = is_valid_non_empty_string (ctx, D.23069);
      if (D.23070 == 0) goto <D.23071>; else goto <D.23072>;
      <D.23071>:
      D.23073 = ctx->report_error;
      if (D.23073 != 0) goto <D.23074>; else goto <D.23075>;
      <D.23074>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23069 = data[0];
        D.23076 = monoeg_g_strdup_printf ("Invalid ModuleRef row %d name field %08x", i, D.23069);
        vinfo->info.message = D.23076;
        vinfo->exception_type = 3;
        D.23077 = ctx->errors;
        D.23078 = monoeg_g_slist_prepend (D.23077, vinfo);
        ctx->errors = D.23078;
      }
      <D.23075>:
      ctx->valid = 0;
      return;
      <D.23072>:
      i = i + 1;
      <D.19264>:
      D.23079 = table->rows;
      D.23080 = (int) D.23079;
      if (D.23080 > i) goto <D.19263>; else goto <D.19265>;
      <D.19265>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_typespec_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23084;
  unsigned int D.23085;
  int D.23088;
  int D.23091;
  gchar * D.23094;
  struct GSList * D.23095;
  struct GSList * D.23096;
  <unnamed-unsigned:24> D.23097;
  int D.23098;
  struct MonoTableInfo * table;
  guint32 data[1];
  int i;

  try
    {
      D.23084 = ctx->image;
      table = &D.23084->tables[27];
      i = 0;
      goto <D.19274>;
      <D.19273>:
      mono_metadata_decode_row (table, i, &data, 1);
      D.23085 = data[0];
      if (D.23085 != 0) goto <D.23086>; else goto <D.23087>;
      <D.23086>:
      D.23085 = data[0];
      D.23088 = is_valid_blob_object (ctx, D.23085, 1);
      if (D.23088 == 0) goto <D.23089>; else goto <D.23090>;
      <D.23089>:
      D.23091 = ctx->report_error;
      if (D.23091 != 0) goto <D.23092>; else goto <D.23093>;
      <D.23092>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23085 = data[0];
        D.23094 = monoeg_g_strdup_printf ("Invalid TypeSpec row %d Signature field %08x", i, D.23085);
        vinfo->info.message = D.23094;
        vinfo->exception_type = 3;
        D.23095 = ctx->errors;
        D.23096 = monoeg_g_slist_prepend (D.23095, vinfo);
        ctx->errors = D.23096;
      }
      <D.23093>:
      ctx->valid = 0;
      return;
      <D.23090>:
      <D.23087>:
      i = i + 1;
      <D.19274>:
      D.23097 = table->rows;
      D.23098 = (int) D.23097;
      if (D.23098 > i) goto <D.19273>; else goto <D.19275>;
      <D.19275>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_implmap_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23102;
  unsigned int D.23103;
  unsigned int D.23104;
  int D.23107;
  gchar * D.23110;
  struct GSList * D.23111;
  struct GSList * D.23112;
  gchar * D.23119;
  struct GSList * D.23120;
  unsigned int D.23121;
  int D.23122;
  gchar * D.23127;
  struct GSList * D.23128;
  unsigned int D.23129;
  gchar * D.23134;
  struct GSList * D.23135;
  unsigned int D.23136;
  gchar * D.23141;
  struct GSList * D.23142;
  unsigned int D.23143;
  int D.23144;
  gchar * D.23149;
  struct GSList * D.23150;
  unsigned int D.23153;
  <unnamed-unsigned:24> D.23155;
  unsigned int D.23156;
  gchar * D.23159;
  struct GSList * D.23160;
  <unnamed-unsigned:24> D.23161;
  int D.23162;
  struct MonoTableInfo * table;
  guint32 data[4];
  guint32 cconv;
  int i;

  try
    {
      D.23102 = ctx->image;
      table = &D.23102->tables[28];
      i = 0;
      goto <D.19301>;
      <D.19300>:
      mono_metadata_decode_row (table, i, &data, 4);
      D.23103 = data[0];
      D.23104 = D.23103 & 4294953096;
      if (D.23104 != 0) goto <D.23105>; else goto <D.23106>;
      <D.23105>:
      D.23107 = ctx->report_error;
      if (D.23107 != 0) goto <D.23108>; else goto <D.23109>;
      <D.23108>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23103 = data[0];
        D.23110 = monoeg_g_strdup_printf ("Invalid ImplMap row %d Flags field %08x", i, D.23103);
        vinfo->info.message = D.23110;
        vinfo->exception_type = 3;
        D.23111 = ctx->errors;
        D.23112 = monoeg_g_slist_prepend (D.23111, vinfo);
        ctx->errors = D.23112;
      }
      <D.23109>:
      ctx->valid = 0;
      return;
      <D.23106>:
      D.23103 = data[0];
      cconv = D.23103 & 1792;
      if (cconv == 0) goto <D.23113>; else goto <D.23115>;
      <D.23115>:
      if (cconv == 1536) goto <D.23113>; else goto <D.23116>;
      <D.23116>:
      if (cconv == 1792) goto <D.23113>; else goto <D.23114>;
      <D.23113>:
      D.23107 = ctx->report_error;
      if (D.23107 != 0) goto <D.23117>; else goto <D.23118>;
      <D.23117>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23119 = monoeg_g_strdup_printf ("Invalid ImplMap row %d Invalid call conv field %x", i, cconv);
        vinfo->info.message = D.23119;
        vinfo->exception_type = 3;
        D.23111 = ctx->errors;
        D.23120 = monoeg_g_slist_prepend (D.23111, vinfo);
        ctx->errors = D.23120;
      }
      <D.23118>:
      ctx->valid = 0;
      return;
      <D.23114>:
      D.23121 = data[1];
      D.23122 = is_valid_coded_index (ctx, 56, D.23121);
      if (D.23122 == 0) goto <D.23123>; else goto <D.23124>;
      <D.23123>:
      D.23107 = ctx->report_error;
      if (D.23107 != 0) goto <D.23125>; else goto <D.23126>;
      <D.23125>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23121 = data[1];
        D.23127 = monoeg_g_strdup_printf ("Invalid ImplMap row %d Invalid MemberForward token %x", i, D.23121);
        vinfo->info.message = D.23127;
        vinfo->exception_type = 3;
        D.23111 = ctx->errors;
        D.23128 = monoeg_g_slist_prepend (D.23111, vinfo);
        ctx->errors = D.23128;
      }
      <D.23126>:
      ctx->valid = 0;
      return;
      <D.23124>:
      D.23121 = data[1];
      D.23129 = get_coded_index_table (56, D.23121);
      if (D.23129 != 6) goto <D.23130>; else goto <D.23131>;
      <D.23130>:
      D.23107 = ctx->report_error;
      if (D.23107 != 0) goto <D.23132>; else goto <D.23133>;
      <D.23132>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23121 = data[1];
        D.23134 = monoeg_g_strdup_printf ("Invalid ImplMap row %d only methods are supported token %x", i, D.23121);
        vinfo->info.message = D.23134;
        vinfo->exception_type = 3;
        D.23111 = ctx->errors;
        D.23135 = monoeg_g_slist_prepend (D.23111, vinfo);
        ctx->errors = D.23135;
      }
      <D.23133>:
      ctx->valid = 0;
      return;
      <D.23131>:
      D.23121 = data[1];
      D.23136 = get_coded_index_token (56, D.23121);
      if (D.23136 == 0) goto <D.23137>; else goto <D.23138>;
      <D.23137>:
      D.23107 = ctx->report_error;
      if (D.23107 != 0) goto <D.23139>; else goto <D.23140>;
      <D.23139>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23141 = monoeg_g_strdup_printf ("Invalid ImplMap row %d null token", i);
        vinfo->info.message = D.23141;
        vinfo->exception_type = 3;
        D.23111 = ctx->errors;
        D.23142 = monoeg_g_slist_prepend (D.23111, vinfo);
        ctx->errors = D.23142;
      }
      <D.23140>:
      ctx->valid = 0;
      return;
      <D.23138>:
      D.23143 = data[2];
      D.23144 = is_valid_non_empty_string (ctx, D.23143);
      if (D.23144 == 0) goto <D.23145>; else goto <D.23146>;
      <D.23145>:
      D.23107 = ctx->report_error;
      if (D.23107 != 0) goto <D.23147>; else goto <D.23148>;
      <D.23147>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23143 = data[2];
        D.23149 = monoeg_g_strdup_printf ("Invalid ImplMap row %d ImportName Token %x", i, D.23143);
        vinfo->info.message = D.23149;
        vinfo->exception_type = 3;
        D.23111 = ctx->errors;
        D.23150 = monoeg_g_slist_prepend (D.23111, vinfo);
        ctx->errors = D.23150;
      }
      <D.23148>:
      ctx->valid = 0;
      return;
      <D.23146>:
      D.23153 = data[3];
      if (D.23153 == 0) goto <D.23151>; else goto <D.23154>;
      <D.23154>:
      D.23153 = data[3];
      D.23102 = ctx->image;
      D.23155 = D.23102->tables[26].rows;
      D.23156 = (unsigned int) D.23155;
      if (D.23153 > D.23156) goto <D.23151>; else goto <D.23152>;
      <D.23151>:
      D.23107 = ctx->report_error;
      if (D.23107 != 0) goto <D.23157>; else goto <D.23158>;
      <D.23157>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23153 = data[3];
        D.23159 = monoeg_g_strdup_printf ("Invalid ImplMap row %d Invalid ImportScope token %x", i, D.23153);
        vinfo->info.message = D.23159;
        vinfo->exception_type = 3;
        D.23111 = ctx->errors;
        D.23160 = monoeg_g_slist_prepend (D.23111, vinfo);
        ctx->errors = D.23160;
      }
      <D.23158>:
      ctx->valid = 0;
      return;
      <D.23152>:
      i = i + 1;
      <D.19301>:
      D.23161 = table->rows;
      D.23162 = (int) D.23161;
      if (D.23162 > i) goto <D.19300>; else goto <D.19302>;
      <D.19302>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_fieldrva_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23166;
  unsigned int D.23169;
  unsigned int D.23171;
  int D.23172;
  gchar * D.23175;
  struct GSList * D.23176;
  struct GSList * D.23177;
  unsigned int D.23180;
  <unnamed-unsigned:24> D.23182;
  int D.23183;
  int D.23184;
  unsigned int D.23185;
  gchar * D.23188;
  struct GSList * D.23189;
  <unnamed-unsigned:24> D.23190;
  int D.23191;
  struct MonoTableInfo * table;
  guint32 data[2];
  int i;

  try
    {
      D.23166 = ctx->image;
      table = &D.23166->tables[29];
      i = 0;
      goto <D.19312>;
      <D.19311>:
      mono_metadata_decode_row (table, i, &data, 2);
      D.23169 = data[0];
      if (D.23169 == 0) goto <D.23167>; else goto <D.23170>;
      <D.23170>:
      D.23166 = ctx->image;
      D.23169 = data[0];
      D.23171 = mono_cli_rva_image_map (D.23166, D.23169);
      if (D.23171 == 4294967295) goto <D.23167>; else goto <D.23168>;
      <D.23167>:
      D.23172 = ctx->report_error;
      if (D.23172 != 0) goto <D.23173>; else goto <D.23174>;
      <D.23173>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23169 = data[0];
        D.23175 = monoeg_g_strdup_printf ("Invalid FieldRVA row %d RVA %08x", i, D.23169);
        vinfo->info.message = D.23175;
        vinfo->exception_type = 3;
        D.23176 = ctx->errors;
        D.23177 = monoeg_g_slist_prepend (D.23176, vinfo);
        ctx->errors = D.23177;
      }
      <D.23174>:
      ctx->valid = 0;
      return;
      <D.23168>:
      D.23180 = data[1];
      if (D.23180 == 0) goto <D.23178>; else goto <D.23181>;
      <D.23181>:
      D.23180 = data[1];
      D.23166 = ctx->image;
      D.23182 = D.23166->tables[4].rows;
      D.23183 = (int) D.23182;
      D.23184 = D.23183 + 1;
      D.23185 = (unsigned int) D.23184;
      if (D.23180 > D.23185) goto <D.23178>; else goto <D.23179>;
      <D.23178>:
      D.23172 = ctx->report_error;
      if (D.23172 != 0) goto <D.23186>; else goto <D.23187>;
      <D.23186>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23180 = data[1];
        D.23188 = monoeg_g_strdup_printf ("Invalid FieldRVA row %d Field %08x", i, D.23180);
        vinfo->info.message = D.23188;
        vinfo->exception_type = 3;
        D.23176 = ctx->errors;
        D.23189 = monoeg_g_slist_prepend (D.23176, vinfo);
        ctx->errors = D.23189;
      }
      <D.23187>:
      ctx->valid = 0;
      return;
      <D.23179>:
      i = i + 1;
      <D.19312>:
      D.23190 = table->rows;
      D.23191 = (int) D.23190;
      if (D.23191 > i) goto <D.19311>; else goto <D.19313>;
      <D.19313>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_assembly_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23195;
  <unnamed-unsigned:24> D.23196;
  int D.23197;
  int D.23200;
  gchar * D.23203;
  struct GSList * D.23204;
  struct GSList * D.23205;
  gchar * D.23214;
  struct GSList * D.23215;
  unsigned int D.23216;
  unsigned int D.23217;
  gchar * D.23222;
  struct GSList * D.23223;
  unsigned int D.23224;
  int D.23227;
  gchar * D.23232;
  struct GSList * D.23233;
  unsigned int D.23234;
  int D.23235;
  gchar * D.23240;
  struct GSList * D.23241;
  unsigned int D.23242;
  int D.23245;
  gchar * D.23250;
  struct GSList * D.23251;
  struct MonoTableInfo * table;
  guint32 data[9];
  guint32 hash;
  int i;

  try
    {
      D.23195 = ctx->image;
      table = &D.23195->tables[32];
      D.23196 = table->rows;
      D.23197 = (int) D.23196;
      if (D.23197 > 1) goto <D.23198>; else goto <D.23199>;
      <D.23198>:
      D.23200 = ctx->report_error;
      if (D.23200 != 0) goto <D.23201>; else goto <D.23202>;
      <D.23201>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23196 = table->rows;
        D.23197 = (int) D.23196;
        D.23203 = monoeg_g_strdup_printf ("Assembly table can have zero or one rows, but now %d", D.23197);
        vinfo->info.message = D.23203;
        vinfo->exception_type = 3;
        D.23204 = ctx->errors;
        D.23205 = monoeg_g_slist_prepend (D.23204, vinfo);
        ctx->errors = D.23205;
      }
      <D.23202>:
      ctx->valid = 0;
      return;
      <D.23199>:
      i = 0;
      goto <D.19328>;
      <D.19327>:
      mono_metadata_decode_row (table, i, &data, 9);
      hash = data[0];
      if (hash != 0) goto <D.23206>; else goto <D.23207>;
      <D.23206>:
      if (hash != 32771) goto <D.23208>; else goto <D.23209>;
      <D.23208>:
      if (hash != 32772) goto <D.23210>; else goto <D.23211>;
      <D.23210>:
      D.23200 = ctx->report_error;
      if (D.23200 != 0) goto <D.23212>; else goto <D.23213>;
      <D.23212>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23214 = monoeg_g_strdup_printf ("Assembly table row %d has invalid HashAlgId %x", i, hash);
        vinfo->info.message = D.23214;
        vinfo->exception_type = 3;
        D.23204 = ctx->errors;
        D.23215 = monoeg_g_slist_prepend (D.23204, vinfo);
        ctx->errors = D.23215;
      }
      <D.23213>:
      ctx->valid = 0;
      return;
      <D.23211>:
      <D.23209>:
      <D.23207>:
      D.23216 = data[5];
      D.23217 = D.23216 & 4294917646;
      if (D.23217 != 0) goto <D.23218>; else goto <D.23219>;
      <D.23218>:
      D.23200 = ctx->report_error;
      if (D.23200 != 0) goto <D.23220>; else goto <D.23221>;
      <D.23220>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23216 = data[5];
        D.23222 = monoeg_g_strdup_printf ("Assembly table row %d has invalid Flags %08x", i, D.23216);
        vinfo->info.message = D.23222;
        vinfo->exception_type = 3;
        D.23204 = ctx->errors;
        D.23223 = monoeg_g_slist_prepend (D.23204, vinfo);
        ctx->errors = D.23223;
      }
      <D.23221>:
      ctx->valid = 0;
      return;
      <D.23219>:
      D.23224 = data[6];
      if (D.23224 != 0) goto <D.23225>; else goto <D.23226>;
      <D.23225>:
      D.23224 = data[6];
      D.23227 = is_valid_blob_object (ctx, D.23224, 1);
      if (D.23227 == 0) goto <D.23228>; else goto <D.23229>;
      <D.23228>:
      D.23200 = ctx->report_error;
      if (D.23200 != 0) goto <D.23230>; else goto <D.23231>;
      <D.23230>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23216 = data[5];
        D.23232 = monoeg_g_strdup_printf ("Assembly table row %d has invalid PublicKey %08x", i, D.23216);
        vinfo->info.message = D.23232;
        vinfo->exception_type = 3;
        D.23204 = ctx->errors;
        D.23233 = monoeg_g_slist_prepend (D.23204, vinfo);
        ctx->errors = D.23233;
      }
      <D.23231>:
      ctx->valid = 0;
      return;
      <D.23229>:
      <D.23226>:
      D.23234 = data[7];
      D.23235 = is_valid_non_empty_string (ctx, D.23234);
      if (D.23235 == 0) goto <D.23236>; else goto <D.23237>;
      <D.23236>:
      D.23200 = ctx->report_error;
      if (D.23200 != 0) goto <D.23238>; else goto <D.23239>;
      <D.23238>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23234 = data[7];
        D.23240 = monoeg_g_strdup_printf ("Assembly table row %d has invalid Name %08x", i, D.23234);
        vinfo->info.message = D.23240;
        vinfo->exception_type = 3;
        D.23204 = ctx->errors;
        D.23241 = monoeg_g_slist_prepend (D.23204, vinfo);
        ctx->errors = D.23241;
      }
      <D.23239>:
      ctx->valid = 0;
      return;
      <D.23237>:
      D.23242 = data[8];
      if (D.23242 != 0) goto <D.23243>; else goto <D.23244>;
      <D.23243>:
      D.23242 = data[8];
      D.23245 = is_valid_string (ctx, D.23242);
      if (D.23245 == 0) goto <D.23246>; else goto <D.23247>;
      <D.23246>:
      D.23200 = ctx->report_error;
      if (D.23200 != 0) goto <D.23248>; else goto <D.23249>;
      <D.23248>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23242 = data[8];
        D.23250 = monoeg_g_strdup_printf ("Assembly table row %d has invalid Culture %08x", i, D.23242);
        vinfo->info.message = D.23250;
        vinfo->exception_type = 3;
        D.23204 = ctx->errors;
        D.23251 = monoeg_g_slist_prepend (D.23204, vinfo);
        ctx->errors = D.23251;
      }
      <D.23249>:
      ctx->valid = 0;
      return;
      <D.23247>:
      <D.23244>:
      i = i + 1;
      <D.19328>:
      D.23196 = table->rows;
      D.23197 = (int) D.23196;
      if (D.23197 > i) goto <D.19327>; else goto <D.19329>;
      <D.19329>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_assemblyref_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23255;
  unsigned int D.23256;
  unsigned int D.23257;
  int D.23260;
  gchar * D.23263;
  struct GSList * D.23264;
  struct GSList * D.23265;
  unsigned int D.23266;
  int D.23269;
  gchar * D.23274;
  struct GSList * D.23275;
  unsigned int D.23276;
  int D.23277;
  gchar * D.23282;
  struct GSList * D.23283;
  unsigned int D.23284;
  int D.23287;
  gchar * D.23292;
  struct GSList * D.23293;
  unsigned int D.23294;
  int D.23297;
  gchar * D.23302;
  struct GSList * D.23303;
  <unnamed-unsigned:24> D.23304;
  int D.23305;
  struct MonoTableInfo * table;
  guint32 data[9];
  int i;

  try
    {
      D.23255 = ctx->image;
      table = &D.23255->tables[35];
      i = 0;
      goto <D.19342>;
      <D.19341>:
      mono_metadata_decode_row (table, i, &data, 9);
      D.23256 = data[4];
      D.23257 = D.23256 & 4294917886;
      if (D.23257 != 0) goto <D.23258>; else goto <D.23259>;
      <D.23258>:
      D.23260 = ctx->report_error;
      if (D.23260 != 0) goto <D.23261>; else goto <D.23262>;
      <D.23261>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23256 = data[4];
        D.23263 = monoeg_g_strdup_printf ("AssemblyRef table row %d has invalid Flags %08x", i, D.23256);
        vinfo->info.message = D.23263;
        vinfo->exception_type = 3;
        D.23264 = ctx->errors;
        D.23265 = monoeg_g_slist_prepend (D.23264, vinfo);
        ctx->errors = D.23265;
      }
      <D.23262>:
      ctx->valid = 0;
      return;
      <D.23259>:
      D.23266 = data[5];
      if (D.23266 != 0) goto <D.23267>; else goto <D.23268>;
      <D.23267>:
      D.23266 = data[5];
      D.23269 = is_valid_blob_object (ctx, D.23266, 1);
      if (D.23269 == 0) goto <D.23270>; else goto <D.23271>;
      <D.23270>:
      D.23260 = ctx->report_error;
      if (D.23260 != 0) goto <D.23272>; else goto <D.23273>;
      <D.23272>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23266 = data[5];
        D.23274 = monoeg_g_strdup_printf ("AssemblyRef table row %d has invalid PublicKeyOrToken %08x", i, D.23266);
        vinfo->info.message = D.23274;
        vinfo->exception_type = 3;
        D.23264 = ctx->errors;
        D.23275 = monoeg_g_slist_prepend (D.23264, vinfo);
        ctx->errors = D.23275;
      }
      <D.23273>:
      ctx->valid = 0;
      return;
      <D.23271>:
      <D.23268>:
      D.23276 = data[6];
      D.23277 = is_valid_non_empty_string (ctx, D.23276);
      if (D.23277 == 0) goto <D.23278>; else goto <D.23279>;
      <D.23278>:
      D.23260 = ctx->report_error;
      if (D.23260 != 0) goto <D.23280>; else goto <D.23281>;
      <D.23280>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23276 = data[6];
        D.23282 = monoeg_g_strdup_printf ("AssemblyRef table row %d has invalid Name %08x", i, D.23276);
        vinfo->info.message = D.23282;
        vinfo->exception_type = 3;
        D.23264 = ctx->errors;
        D.23283 = monoeg_g_slist_prepend (D.23264, vinfo);
        ctx->errors = D.23283;
      }
      <D.23281>:
      ctx->valid = 0;
      return;
      <D.23279>:
      D.23284 = data[7];
      if (D.23284 != 0) goto <D.23285>; else goto <D.23286>;
      <D.23285>:
      D.23284 = data[7];
      D.23287 = is_valid_string (ctx, D.23284);
      if (D.23287 == 0) goto <D.23288>; else goto <D.23289>;
      <D.23288>:
      D.23260 = ctx->report_error;
      if (D.23260 != 0) goto <D.23290>; else goto <D.23291>;
      <D.23290>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23284 = data[7];
        D.23292 = monoeg_g_strdup_printf ("AssemblyRef table row %d has invalid Culture %08x", i, D.23284);
        vinfo->info.message = D.23292;
        vinfo->exception_type = 3;
        D.23264 = ctx->errors;
        D.23293 = monoeg_g_slist_prepend (D.23264, vinfo);
        ctx->errors = D.23293;
      }
      <D.23291>:
      ctx->valid = 0;
      return;
      <D.23289>:
      <D.23286>:
      D.23294 = data[8];
      if (D.23294 != 0) goto <D.23295>; else goto <D.23296>;
      <D.23295>:
      D.23294 = data[8];
      D.23297 = is_valid_blob_object (ctx, D.23294, 1);
      if (D.23297 == 0) goto <D.23298>; else goto <D.23299>;
      <D.23298>:
      D.23260 = ctx->report_error;
      if (D.23260 != 0) goto <D.23300>; else goto <D.23301>;
      <D.23300>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23294 = data[8];
        D.23302 = monoeg_g_strdup_printf ("AssemblyRef table row %d has invalid HashValue %08x", i, D.23294);
        vinfo->info.message = D.23302;
        vinfo->exception_type = 3;
        D.23264 = ctx->errors;
        D.23303 = monoeg_g_slist_prepend (D.23264, vinfo);
        ctx->errors = D.23303;
      }
      <D.23301>:
      ctx->valid = 0;
      return;
      <D.23299>:
      <D.23296>:
      i = i + 1;
      <D.19342>:
      D.23304 = table->rows;
      D.23305 = (int) D.23304;
      if (D.23305 > i) goto <D.19341>; else goto <D.19343>;
      <D.19343>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_file_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23309;
  unsigned int D.23310;
  unsigned int D.23311;
  int D.23314;
  gchar * D.23317;
  struct GSList * D.23318;
  struct GSList * D.23319;
  unsigned int D.23320;
  int D.23321;
  gchar * D.23326;
  struct GSList * D.23327;
  unsigned int D.23330;
  int D.23332;
  gchar * D.23335;
  struct GSList * D.23336;
  <unnamed-unsigned:24> D.23337;
  int D.23338;
  struct MonoTableInfo * table;
  guint32 data[3];
  int i;

  try
    {
      D.23309 = ctx->image;
      table = &D.23309->tables[38];
      i = 0;
      goto <D.19354>;
      <D.19353>:
      mono_metadata_decode_row (table, i, &data, 3);
      D.23310 = data[0];
      D.23311 = D.23310 & 4294967294;
      if (D.23311 != 0) goto <D.23312>; else goto <D.23313>;
      <D.23312>:
      D.23314 = ctx->report_error;
      if (D.23314 != 0) goto <D.23315>; else goto <D.23316>;
      <D.23315>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23310 = data[0];
        D.23317 = monoeg_g_strdup_printf ("File table row %d has invalid Flags %08x", i, D.23310);
        vinfo->info.message = D.23317;
        vinfo->exception_type = 3;
        D.23318 = ctx->errors;
        D.23319 = monoeg_g_slist_prepend (D.23318, vinfo);
        ctx->errors = D.23319;
      }
      <D.23316>:
      ctx->valid = 0;
      return;
      <D.23313>:
      D.23320 = data[1];
      D.23321 = is_valid_non_empty_string (ctx, D.23320);
      if (D.23321 == 0) goto <D.23322>; else goto <D.23323>;
      <D.23322>:
      D.23314 = ctx->report_error;
      if (D.23314 != 0) goto <D.23324>; else goto <D.23325>;
      <D.23324>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23320 = data[1];
        D.23326 = monoeg_g_strdup_printf ("File table row %d has invalid Name %08x", i, D.23320);
        vinfo->info.message = D.23326;
        vinfo->exception_type = 3;
        D.23318 = ctx->errors;
        D.23327 = monoeg_g_slist_prepend (D.23318, vinfo);
        ctx->errors = D.23327;
      }
      <D.23325>:
      ctx->valid = 0;
      return;
      <D.23323>:
      D.23330 = data[2];
      if (D.23330 == 0) goto <D.23328>; else goto <D.23331>;
      <D.23331>:
      D.23330 = data[2];
      D.23332 = is_valid_blob_object (ctx, D.23330, 1);
      if (D.23332 == 0) goto <D.23328>; else goto <D.23329>;
      <D.23328>:
      D.23314 = ctx->report_error;
      if (D.23314 != 0) goto <D.23333>; else goto <D.23334>;
      <D.23333>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23330 = data[2];
        D.23335 = monoeg_g_strdup_printf ("File table row %d has invalid HashValue %08x", i, D.23330);
        vinfo->info.message = D.23335;
        vinfo->exception_type = 3;
        D.23318 = ctx->errors;
        D.23336 = monoeg_g_slist_prepend (D.23318, vinfo);
        ctx->errors = D.23336;
      }
      <D.23334>:
      ctx->valid = 0;
      return;
      <D.23329>:
      i = i + 1;
      <D.19354>:
      D.23337 = table->rows;
      D.23338 = (int) D.23337;
      if (D.23338 > i) goto <D.19353>; else goto <D.19355>;
      <D.19355>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_exportedtype_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23342;
  unsigned int D.23343;
  unsigned int D.23344;
  int D.23347;
  gchar * D.23350;
  struct GSList * D.23351;
  struct GSList * D.23352;
  unsigned int D.23353;
  int D.23354;
  unsigned int D.23359;
  gchar * D.23360;
  struct GSList * D.23361;
  unsigned int D.23362;
  int D.23365;
  gchar * D.23370;
  struct GSList * D.23371;
  unsigned int D.23372;
  int D.23373;
  gchar * D.23378;
  struct GSList * D.23379;
  unsigned int D.23380;
  gchar * D.23385;
  struct GSList * D.23386;
  unsigned int D.23387;
  gchar * D.23394;
  struct GSList * D.23395;
  <unnamed-unsigned:24> D.23396;
  int D.23397;
  struct MonoTableInfo * table;
  guint32 data[5];
  int i;

  try
    {
      D.23342 = ctx->image;
      table = &D.23342->tables[39];
      i = 0;
      goto <D.19369>;
      <D.19368>:
      mono_metadata_decode_row (table, i, &data, 5);
      D.23343 = data[0];
      D.23344 = D.23343 & 4278764096;
      if (D.23344 != 0) goto <D.23345>; else goto <D.23346>;
      <D.23345>:
      D.23347 = ctx->report_error;
      if (D.23347 != 0) goto <D.23348>; else goto <D.23349>;
      <D.23348>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23343 = data[0];
        D.23350 = monoeg_g_strdup_printf ("ExportedType table row %d has invalid Flags %08x", i, D.23343);
        vinfo->info.message = D.23350;
        vinfo->exception_type = 3;
        D.23351 = ctx->errors;
        D.23352 = monoeg_g_slist_prepend (D.23351, vinfo);
        ctx->errors = D.23352;
      }
      <D.23349>:
      ctx->valid = 0;
      return;
      <D.23346>:
      D.23353 = data[2];
      D.23354 = is_valid_non_empty_string (ctx, D.23353);
      if (D.23354 == 0) goto <D.23355>; else goto <D.23356>;
      <D.23355>:
      D.23347 = ctx->report_error;
      if (D.23347 != 0) goto <D.23357>; else goto <D.23358>;
      <D.23357>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23359 = data[1];
        D.23360 = monoeg_g_strdup_printf ("ExportedType table row %d has invalid TypeName %08x", i, D.23359);
        vinfo->info.message = D.23360;
        vinfo->exception_type = 3;
        D.23351 = ctx->errors;
        D.23361 = monoeg_g_slist_prepend (D.23351, vinfo);
        ctx->errors = D.23361;
      }
      <D.23358>:
      ctx->valid = 0;
      return;
      <D.23356>:
      D.23362 = data[3];
      if (D.23362 != 0) goto <D.23363>; else goto <D.23364>;
      <D.23363>:
      D.23362 = data[3];
      D.23365 = is_valid_string (ctx, D.23362);
      if (D.23365 == 0) goto <D.23366>; else goto <D.23367>;
      <D.23366>:
      D.23347 = ctx->report_error;
      if (D.23347 != 0) goto <D.23368>; else goto <D.23369>;
      <D.23368>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23362 = data[3];
        D.23370 = monoeg_g_strdup_printf ("ExportedType table row %d has invalid TypeNamespace %08x", i, D.23362);
        vinfo->info.message = D.23370;
        vinfo->exception_type = 3;
        D.23351 = ctx->errors;
        D.23371 = monoeg_g_slist_prepend (D.23351, vinfo);
        ctx->errors = D.23371;
      }
      <D.23369>:
      ctx->valid = 0;
      return;
      <D.23367>:
      <D.23364>:
      D.23372 = data[4];
      D.23373 = is_valid_coded_index (ctx, 60, D.23372);
      if (D.23373 == 0) goto <D.23374>; else goto <D.23375>;
      <D.23374>:
      D.23347 = ctx->report_error;
      if (D.23347 != 0) goto <D.23376>; else goto <D.23377>;
      <D.23376>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23372 = data[4];
        D.23378 = monoeg_g_strdup_printf ("ExportedType table row %d has invalid Implementation token %08x", i, D.23372);
        vinfo->info.message = D.23378;
        vinfo->exception_type = 3;
        D.23351 = ctx->errors;
        D.23379 = monoeg_g_slist_prepend (D.23351, vinfo);
        ctx->errors = D.23379;
      }
      <D.23377>:
      ctx->valid = 0;
      return;
      <D.23375>:
      D.23372 = data[4];
      D.23380 = get_coded_index_token (60, D.23372);
      if (D.23380 == 0) goto <D.23381>; else goto <D.23382>;
      <D.23381>:
      D.23347 = ctx->report_error;
      if (D.23347 != 0) goto <D.23383>; else goto <D.23384>;
      <D.23383>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23385 = monoeg_g_strdup_printf ("ExportedType table row %d has null Implementation token", i);
        vinfo->info.message = D.23385;
        vinfo->exception_type = 3;
        D.23351 = ctx->errors;
        D.23386 = monoeg_g_slist_prepend (D.23351, vinfo);
        ctx->errors = D.23386;
      }
      <D.23384>:
      ctx->valid = 0;
      return;
      <D.23382>:
      D.23372 = data[4];
      D.23387 = get_coded_index_table (60, D.23372);
      if (D.23387 == 39) goto <D.23388>; else goto <D.23389>;
      <D.23388>:
      D.23362 = data[3];
      if (D.23362 != 0) goto <D.23390>; else goto <D.23391>;
      <D.23390>:
      D.23347 = ctx->report_error;
      if (D.23347 != 0) goto <D.23392>; else goto <D.23393>;
      <D.23392>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23394 = monoeg_g_strdup_printf ("ExportedType table row %d has denotes a nested type but has a non null TypeNamespace", i);
        vinfo->info.message = D.23394;
        vinfo->exception_type = 3;
        D.23351 = ctx->errors;
        D.23395 = monoeg_g_slist_prepend (D.23351, vinfo);
        ctx->errors = D.23395;
      }
      <D.23393>:
      ctx->valid = 0;
      return;
      <D.23391>:
      <D.23389>:
      i = i + 1;
      <D.19369>:
      D.23396 = table->rows;
      D.23397 = (int) D.23396;
      if (D.23397 > i) goto <D.19368>; else goto <D.19370>;
      <D.19370>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_manifest_resource_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23401;
  unsigned int D.23402;
  unsigned int D.23403;
  int D.23406;
  gchar * D.23409;
  struct GSList * D.23410;
  struct GSList * D.23411;
  unsigned int D.23412;
  gchar * D.23417;
  struct GSList * D.23418;
  unsigned int D.23419;
  int D.23420;
  gchar * D.23425;
  struct GSList * D.23426;
  unsigned int D.23427;
  int D.23428;
  gchar * D.23433;
  struct GSList * D.23434;
  unsigned int D.23439;
  gchar * D.23440;
  struct GSList * D.23441;
  unsigned int D.23446;
  gchar * D.23451;
  struct GSList * D.23452;
  gchar * D.23459;
  struct GSList * D.23460;
  <unnamed-unsigned:24> D.23461;
  int D.23462;
  struct MonoCLIImageInfo * iinfo;
  struct MonoCLIHeader * ch;
  struct MonoTableInfo * table;
  guint32 data[4];
  guint32 impl_table;
  guint32 token;
  guint32 resources_size;
  int i;

  try
    {
      D.23401 = ctx->image;
      iinfo = D.23401->image_info;
      ch = &iinfo->cli_cli_header;
      D.23401 = ctx->image;
      table = &D.23401->tables[40];
      resources_size = ch->ch_resources.size;
      i = 0;
      goto <D.19390>;
      <D.19389>:
      mono_metadata_decode_row (table, i, &data, 4);
      D.23402 = data[1];
      D.23403 = D.23402 & 4294967288;
      if (D.23403 != 0) goto <D.23404>; else goto <D.23405>;
      <D.23404>:
      D.23406 = ctx->report_error;
      if (D.23406 != 0) goto <D.23407>; else goto <D.23408>;
      <D.23407>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23402 = data[1];
        D.23409 = monoeg_g_strdup_printf ("ManifestResource table row %d has invalid Flags %08x", i, D.23402);
        vinfo->info.message = D.23409;
        vinfo->exception_type = 3;
        D.23410 = ctx->errors;
        D.23411 = monoeg_g_slist_prepend (D.23410, vinfo);
        ctx->errors = D.23411;
      }
      <D.23408>:
      ctx->valid = 0;
      return;
      <D.23405>:
      D.23402 = data[1];
      D.23412 = D.23402 + 4294967295;
      if (D.23412 > 1) goto <D.23413>; else goto <D.23414>;
      <D.23413>:
      D.23406 = ctx->report_error;
      if (D.23406 != 0) goto <D.23415>; else goto <D.23416>;
      <D.23415>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23402 = data[1];
        D.23417 = monoeg_g_strdup_printf ("ManifestResource table row %d has invalid Flags VisibilityMask %08x", i, D.23402);
        vinfo->info.message = D.23417;
        vinfo->exception_type = 3;
        D.23410 = ctx->errors;
        D.23418 = monoeg_g_slist_prepend (D.23410, vinfo);
        ctx->errors = D.23418;
      }
      <D.23416>:
      ctx->valid = 0;
      return;
      <D.23414>:
      D.23419 = data[2];
      D.23420 = is_valid_non_empty_string (ctx, D.23419);
      if (D.23420 == 0) goto <D.23421>; else goto <D.23422>;
      <D.23421>:
      D.23406 = ctx->report_error;
      if (D.23406 != 0) goto <D.23423>; else goto <D.23424>;
      <D.23423>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23419 = data[2];
        D.23425 = monoeg_g_strdup_printf ("ManifestResource table row %d has invalid Name %08x", i, D.23419);
        vinfo->info.message = D.23425;
        vinfo->exception_type = 3;
        D.23410 = ctx->errors;
        D.23426 = monoeg_g_slist_prepend (D.23410, vinfo);
        ctx->errors = D.23426;
      }
      <D.23424>:
      ctx->valid = 0;
      return;
      <D.23422>:
      D.23427 = data[3];
      D.23428 = is_valid_coded_index (ctx, 60, D.23427);
      if (D.23428 == 0) goto <D.23429>; else goto <D.23430>;
      <D.23429>:
      D.23406 = ctx->report_error;
      if (D.23406 != 0) goto <D.23431>; else goto <D.23432>;
      <D.23431>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23427 = data[3];
        D.23433 = monoeg_g_strdup_printf ("ManifestResource table row %d has invalid Implementation token %08x", i, D.23427);
        vinfo->info.message = D.23433;
        vinfo->exception_type = 3;
        D.23410 = ctx->errors;
        D.23434 = monoeg_g_slist_prepend (D.23410, vinfo);
        ctx->errors = D.23434;
      }
      <D.23432>:
      ctx->valid = 0;
      return;
      <D.23430>:
      D.23427 = data[3];
      impl_table = get_coded_index_table (60, D.23427);
      D.23427 = data[3];
      token = get_coded_index_token (60, D.23427);
      if (impl_table == 39) goto <D.23435>; else goto <D.23436>;
      <D.23435>:
      D.23406 = ctx->report_error;
      if (D.23406 != 0) goto <D.23437>; else goto <D.23438>;
      <D.23437>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23427 = data[3];
        D.23439 = get_coded_index_table (60, D.23427);
        D.23440 = monoeg_g_strdup_printf ("ManifestResource table row %d has invalid Implementation token table %08x", i, D.23439);
        vinfo->info.message = D.23440;
        vinfo->exception_type = 3;
        D.23410 = ctx->errors;
        D.23441 = monoeg_g_slist_prepend (D.23410, vinfo);
        ctx->errors = D.23441;
      }
      <D.23438>:
      ctx->valid = 0;
      return;
      <D.23436>:
      if (impl_table == 38) goto <D.23442>; else goto <D.23443>;
      <D.23442>:
      if (token != 0) goto <D.23444>; else goto <D.23445>;
      <D.23444>:
      D.23446 = data[0];
      if (D.23446 != 0) goto <D.23447>; else goto <D.23448>;
      <D.23447>:
      D.23406 = ctx->report_error;
      if (D.23406 != 0) goto <D.23449>; else goto <D.23450>;
      <D.23449>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23451 = monoeg_g_strdup_printf ("ManifestResource table row %d points to a file but has non-zero offset", i);
        vinfo->info.message = D.23451;
        vinfo->exception_type = 3;
        D.23410 = ctx->errors;
        D.23452 = monoeg_g_slist_prepend (D.23410, vinfo);
        ctx->errors = D.23452;
      }
      <D.23450>:
      ctx->valid = 0;
      return;
      <D.23448>:
      <D.23445>:
      <D.23443>:
      if (token == 0) goto <D.23453>; else goto <D.23454>;
      <D.23453>:
      D.23446 = data[0];
      if (D.23446 >= resources_size) goto <D.23455>; else goto <D.23456>;
      <D.23455>:
      D.23406 = ctx->report_error;
      if (D.23406 != 0) goto <D.23457>; else goto <D.23458>;
      <D.23457>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23446 = data[0];
        D.23459 = monoeg_g_strdup_printf ("ManifestResource table row %d invalid Offset field %08x ", i, D.23446);
        vinfo->info.message = D.23459;
        vinfo->exception_type = 3;
        D.23410 = ctx->errors;
        D.23460 = monoeg_g_slist_prepend (D.23410, vinfo);
        ctx->errors = D.23460;
      }
      <D.23458>:
      ctx->valid = 0;
      return;
      <D.23456>:
      <D.23454>:
      i = i + 1;
      <D.19390>:
      D.23461 = table->rows;
      D.23462 = (int) D.23461;
      if (D.23462 > i) goto <D.19389>; else goto <D.19391>;
      <D.19391>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_nested_class_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23466;
  unsigned int D.23469;
  <unnamed-unsigned:24> D.23471;
  unsigned int D.23472;
  int D.23473;
  gchar * D.23476;
  struct GSList * D.23477;
  struct GSList * D.23478;
  unsigned int D.23481;
  gchar * D.23485;
  struct GSList * D.23486;
  gchar * D.23491;
  struct GSList * D.23492;
  <unnamed-unsigned:24> D.23493;
  int D.23494;
  struct MonoTableInfo * table;
  guint32 data[2];
  int i;

  try
    {
      D.23466 = ctx->image;
      table = &D.23466->tables[41];
      i = 0;
      goto <D.19402>;
      <D.19401>:
      mono_metadata_decode_row (table, i, &data, 2);
      D.23469 = data[0];
      if (D.23469 == 0) goto <D.23467>; else goto <D.23470>;
      <D.23470>:
      D.23469 = data[0];
      D.23466 = ctx->image;
      D.23471 = D.23466->tables[2].rows;
      D.23472 = (unsigned int) D.23471;
      if (D.23469 > D.23472) goto <D.23467>; else goto <D.23468>;
      <D.23467>:
      D.23473 = ctx->report_error;
      if (D.23473 != 0) goto <D.23474>; else goto <D.23475>;
      <D.23474>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23469 = data[0];
        D.23476 = monoeg_g_strdup_printf ("NestedClass table row %d has invalid NestedClass token %08x", i, D.23469);
        vinfo->info.message = D.23476;
        vinfo->exception_type = 3;
        D.23477 = ctx->errors;
        D.23478 = monoeg_g_slist_prepend (D.23477, vinfo);
        ctx->errors = D.23478;
      }
      <D.23475>:
      ctx->valid = 0;
      return;
      <D.23468>:
      D.23481 = data[1];
      if (D.23481 == 0) goto <D.23479>; else goto <D.23482>;
      <D.23482>:
      D.23481 = data[1];
      D.23466 = ctx->image;
      D.23471 = D.23466->tables[2].rows;
      D.23472 = (unsigned int) D.23471;
      if (D.23481 > D.23472) goto <D.23479>; else goto <D.23480>;
      <D.23479>:
      D.23473 = ctx->report_error;
      if (D.23473 != 0) goto <D.23483>; else goto <D.23484>;
      <D.23483>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23481 = data[1];
        D.23485 = monoeg_g_strdup_printf ("NestedClass table row %d has invalid EnclosingClass token %08x", i, D.23481);
        vinfo->info.message = D.23485;
        vinfo->exception_type = 3;
        D.23477 = ctx->errors;
        D.23486 = monoeg_g_slist_prepend (D.23477, vinfo);
        ctx->errors = D.23486;
      }
      <D.23484>:
      ctx->valid = 0;
      return;
      <D.23480>:
      D.23481 = data[1];
      D.23469 = data[0];
      if (D.23481 == D.23469) goto <D.23487>; else goto <D.23488>;
      <D.23487>:
      D.23473 = ctx->report_error;
      if (D.23473 != 0) goto <D.23489>; else goto <D.23490>;
      <D.23489>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23481 = data[1];
        D.23491 = monoeg_g_strdup_printf ("NestedClass table row %d has same token for NestedClass  and EnclosingClass %08x", i, D.23481);
        vinfo->info.message = D.23491;
        vinfo->exception_type = 3;
        D.23477 = ctx->errors;
        D.23492 = monoeg_g_slist_prepend (D.23477, vinfo);
        ctx->errors = D.23492;
      }
      <D.23490>:
      ctx->valid = 0;
      return;
      <D.23488>:
      i = i + 1;
      <D.19402>:
      D.23493 = table->rows;
      D.23494 = (int) D.23493;
      if (D.23494 > i) goto <D.19401>; else goto <D.19403>;
      <D.19403>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_generic_param_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23498;
  unsigned int D.23499;
  unsigned int D.23500;
  int D.23503;
  gchar * D.23506;
  struct GSList * D.23507;
  struct GSList * D.23508;
  unsigned int D.23509;
  gchar * D.23514;
  struct GSList * D.23515;
  unsigned int D.23516;
  int D.23517;
  gchar * D.23522;
  struct GSList * D.23523;
  int D.23524;
  gchar * D.23529;
  struct GSList * D.23530;
  unsigned int D.23531;
  gchar * D.23536;
  struct GSList * D.23537;
  unsigned int D.23540;
  unsigned int param_number.90;
  gchar * D.23546;
  struct GSList * D.23547;
  <unnamed-unsigned:24> D.23548;
  int D.23549;
  struct MonoTableInfo * table;
  guint32 data[4];
  guint32 token;
  guint32 last_token;
  int i;
  int param_number;

  try
    {
      D.23498 = ctx->image;
      table = &D.23498->tables[42];
      last_token = 0;
      param_number = 0;
      i = 0;
      goto <D.19420>;
      <D.19419>:
      mono_metadata_decode_row (table, i, &data, 4);
      D.23499 = data[1];
      D.23500 = D.23499 & 4294967264;
      if (D.23500 != 0) goto <D.23501>; else goto <D.23502>;
      <D.23501>:
      D.23503 = ctx->report_error;
      if (D.23503 != 0) goto <D.23504>; else goto <D.23505>;
      <D.23504>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23499 = data[1];
        D.23506 = monoeg_g_strdup_printf ("GenericParam table row %d has invalid Flags token %08x", i, D.23499);
        vinfo->info.message = D.23506;
        vinfo->exception_type = 3;
        D.23507 = ctx->errors;
        D.23508 = monoeg_g_slist_prepend (D.23507, vinfo);
        ctx->errors = D.23508;
      }
      <D.23505>:
      ctx->valid = 0;
      return;
      <D.23502>:
      D.23499 = data[1];
      D.23509 = D.23499 & 3;
      if (D.23509 == 3) goto <D.23510>; else goto <D.23511>;
      <D.23510>:
      D.23503 = ctx->report_error;
      if (D.23503 != 0) goto <D.23512>; else goto <D.23513>;
      <D.23512>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23514 = monoeg_g_strdup_printf ("GenericParam table row %d has invalid VarianceMask 0x3", i);
        vinfo->info.message = D.23514;
        vinfo->exception_type = 3;
        D.23507 = ctx->errors;
        D.23515 = monoeg_g_slist_prepend (D.23507, vinfo);
        ctx->errors = D.23515;
      }
      <D.23513>:
      ctx->valid = 0;
      return;
      <D.23511>:
      D.23516 = data[3];
      D.23517 = is_valid_non_empty_string (ctx, D.23516);
      if (D.23517 == 0) goto <D.23518>; else goto <D.23519>;
      <D.23518>:
      D.23503 = ctx->report_error;
      if (D.23503 != 0) goto <D.23520>; else goto <D.23521>;
      <D.23520>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23516 = data[3];
        D.23522 = monoeg_g_strdup_printf ("GenericParam table row %d has invalid Name token %08x", i, D.23516);
        vinfo->info.message = D.23522;
        vinfo->exception_type = 3;
        D.23507 = ctx->errors;
        D.23523 = monoeg_g_slist_prepend (D.23507, vinfo);
        ctx->errors = D.23523;
      }
      <D.23521>:
      ctx->valid = 0;
      return;
      <D.23519>:
      token = data[2];
      D.23524 = is_valid_coded_index (ctx, 78, token);
      if (D.23524 == 0) goto <D.23525>; else goto <D.23526>;
      <D.23525>:
      D.23503 = ctx->report_error;
      if (D.23503 != 0) goto <D.23527>; else goto <D.23528>;
      <D.23527>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23529 = monoeg_g_strdup_printf ("GenericParam table row %d has invalid Owner token %08x", i, token);
        vinfo->info.message = D.23529;
        vinfo->exception_type = 3;
        D.23507 = ctx->errors;
        D.23530 = monoeg_g_slist_prepend (D.23507, vinfo);
        ctx->errors = D.23530;
      }
      <D.23528>:
      ctx->valid = 0;
      return;
      <D.23526>:
      D.23531 = get_coded_index_token (78, token);
      if (D.23531 == 0) goto <D.23532>; else goto <D.23533>;
      <D.23532>:
      D.23503 = ctx->report_error;
      if (D.23503 != 0) goto <D.23534>; else goto <D.23535>;
      <D.23534>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23536 = monoeg_g_strdup_printf ("GenericParam table row %d has null Owner token", i);
        vinfo->info.message = D.23536;
        vinfo->exception_type = 3;
        D.23507 = ctx->errors;
        D.23537 = monoeg_g_slist_prepend (D.23507, vinfo);
        ctx->errors = D.23537;
      }
      <D.23535>:
      ctx->valid = 0;
      return;
      <D.23533>:
      if (token != last_token) goto <D.23538>; else goto <D.23539>;
      <D.23538>:
      param_number = 0;
      last_token = token;
      <D.23539>:
      D.23540 = data[0];
      param_number.90 = (unsigned int) param_number;
      if (D.23540 != param_number.90) goto <D.23542>; else goto <D.23543>;
      <D.23542>:
      D.23503 = ctx->report_error;
      if (D.23503 != 0) goto <D.23544>; else goto <D.23545>;
      <D.23544>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23540 = data[0];
        D.23546 = monoeg_g_strdup_printf ("GenericParam table row %d Number is out of order %d expected %d", i, D.23540, param_number);
        vinfo->info.message = D.23546;
        vinfo->exception_type = 3;
        D.23507 = ctx->errors;
        D.23547 = monoeg_g_slist_prepend (D.23507, vinfo);
        ctx->errors = D.23547;
      }
      <D.23545>:
      ctx->valid = 0;
      return;
      <D.23543>:
      param_number = param_number + 1;
      i = i + 1;
      <D.19420>:
      D.23548 = table->rows;
      D.23549 = (int) D.23548;
      if (D.23549 > i) goto <D.19419>; else goto <D.19421>;
      <D.19421>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_method_spec_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23553;
  unsigned int D.23554;
  int D.23555;
  int D.23558;
  gchar * D.23561;
  struct GSList * D.23562;
  struct GSList * D.23563;
  unsigned int D.23564;
  gchar * D.23569;
  struct GSList * D.23570;
  unsigned int D.23571;
  int D.23574;
  gchar * D.23579;
  struct GSList * D.23580;
  <unnamed-unsigned:24> D.23581;
  int D.23582;
  struct MonoTableInfo * table;
  guint32 data[2];
  int i;

  try
    {
      D.23553 = ctx->image;
      table = &D.23553->tables[43];
      i = 0;
      goto <D.19432>;
      <D.19431>:
      mono_metadata_decode_row (table, i, &data, 2);
      D.23554 = data[0];
      D.23555 = is_valid_coded_index (ctx, 52, D.23554);
      if (D.23555 == 0) goto <D.23556>; else goto <D.23557>;
      <D.23556>:
      D.23558 = ctx->report_error;
      if (D.23558 != 0) goto <D.23559>; else goto <D.23560>;
      <D.23559>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23554 = data[0];
        D.23561 = monoeg_g_strdup_printf ("MethodSpec table row %d has invalid Method token %08x", i, D.23554);
        vinfo->info.message = D.23561;
        vinfo->exception_type = 3;
        D.23562 = ctx->errors;
        D.23563 = monoeg_g_slist_prepend (D.23562, vinfo);
        ctx->errors = D.23563;
      }
      <D.23560>:
      ctx->valid = 0;
      return;
      <D.23557>:
      D.23554 = data[0];
      D.23564 = get_coded_index_token (52, D.23554);
      if (D.23564 == 0) goto <D.23565>; else goto <D.23566>;
      <D.23565>:
      D.23558 = ctx->report_error;
      if (D.23558 != 0) goto <D.23567>; else goto <D.23568>;
      <D.23567>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23569 = monoeg_g_strdup_printf ("MethodSpec table row %d has null Method token", i);
        vinfo->info.message = D.23569;
        vinfo->exception_type = 3;
        D.23562 = ctx->errors;
        D.23570 = monoeg_g_slist_prepend (D.23562, vinfo);
        ctx->errors = D.23570;
      }
      <D.23568>:
      ctx->valid = 0;
      return;
      <D.23566>:
      D.23571 = data[1];
      if (D.23571 != 0) goto <D.23572>; else goto <D.23573>;
      <D.23572>:
      D.23571 = data[1];
      D.23574 = is_valid_blob_object (ctx, D.23571, 1);
      if (D.23574 == 0) goto <D.23575>; else goto <D.23576>;
      <D.23575>:
      D.23558 = ctx->report_error;
      if (D.23558 != 0) goto <D.23577>; else goto <D.23578>;
      <D.23577>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23571 = data[1];
        D.23579 = monoeg_g_strdup_printf ("MethodSpec table row %d has invalid signature token %08x", i, D.23571);
        vinfo->info.message = D.23579;
        vinfo->exception_type = 3;
        D.23562 = ctx->errors;
        D.23580 = monoeg_g_slist_prepend (D.23562, vinfo);
        ctx->errors = D.23580;
      }
      <D.23578>:
      ctx->valid = 0;
      return;
      <D.23576>:
      <D.23573>:
      i = i + 1;
      <D.19432>:
      D.23581 = table->rows;
      D.23582 = (int) D.23581;
      if (D.23582 > i) goto <D.19431>; else goto <D.19433>;
      <D.19433>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_generic_param_constraint_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.23586;
  unsigned int D.23589;
  <unnamed-unsigned:24> D.23591;
  unsigned int D.23592;
  int D.23593;
  gchar * D.23596;
  struct GSList * D.23597;
  struct GSList * D.23598;
  unsigned int D.23599;
  int D.23600;
  gchar * D.23605;
  struct GSList * D.23606;
  unsigned int D.23607;
  gchar * D.23612;
  struct GSList * D.23613;
  gchar * D.23618;
  struct GSList * D.23619;
  gchar * D.23626;
  struct GSList * D.23627;
  <unnamed-unsigned:24> D.23629;
  int D.23630;
  struct MonoTableInfo * table;
  guint32 data[2];
  int i;
  guint32 last_owner;
  guint32 last_constraint;

  try
    {
      D.23586 = ctx->image;
      table = &D.23586->tables[44];
      last_owner = 0;
      last_constraint = 0;
      i = 0;
      goto <D.19458>;
      <D.19457>:
      mono_metadata_decode_row (table, i, &data, 2);
      D.23589 = data[0];
      if (D.23589 == 0) goto <D.23587>; else goto <D.23590>;
      <D.23590>:
      D.23589 = data[0];
      D.23586 = ctx->image;
      D.23591 = D.23586->tables[42].rows;
      D.23592 = (unsigned int) D.23591;
      if (D.23589 > D.23592) goto <D.23587>; else goto <D.23588>;
      <D.23587>:
      D.23593 = ctx->report_error;
      if (D.23593 != 0) goto <D.23594>; else goto <D.23595>;
      <D.23594>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23589 = data[0];
        D.23596 = monoeg_g_strdup_printf ("GenericParamConstraint table row %d has invalid Owner token %08x", i, D.23589);
        vinfo->info.message = D.23596;
        vinfo->exception_type = 3;
        D.23597 = ctx->errors;
        D.23598 = monoeg_g_slist_prepend (D.23597, vinfo);
        ctx->errors = D.23598;
      }
      <D.23595>:
      ctx->valid = 0;
      return;
      <D.23588>:
      D.23599 = data[1];
      D.23600 = is_valid_coded_index (ctx, 0, D.23599);
      if (D.23600 == 0) goto <D.23601>; else goto <D.23602>;
      <D.23601>:
      D.23593 = ctx->report_error;
      if (D.23593 != 0) goto <D.23603>; else goto <D.23604>;
      <D.23603>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23599 = data[1];
        D.23605 = monoeg_g_strdup_printf ("GenericParamConstraint table row %d has invalid Constraint token %08x", i, D.23599);
        vinfo->info.message = D.23605;
        vinfo->exception_type = 3;
        D.23597 = ctx->errors;
        D.23606 = monoeg_g_slist_prepend (D.23597, vinfo);
        ctx->errors = D.23606;
      }
      <D.23604>:
      ctx->valid = 0;
      return;
      <D.23602>:
      D.23599 = data[1];
      D.23607 = get_coded_index_token (0, D.23599);
      if (D.23607 == 0) goto <D.23608>; else goto <D.23609>;
      <D.23608>:
      D.23593 = ctx->report_error;
      if (D.23593 != 0) goto <D.23610>; else goto <D.23611>;
      <D.23610>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23612 = monoeg_g_strdup_printf ("GenericParamConstraint table row %d has null Constraint token", i);
        vinfo->info.message = D.23612;
        vinfo->exception_type = 3;
        D.23597 = ctx->errors;
        D.23613 = monoeg_g_slist_prepend (D.23597, vinfo);
        ctx->errors = D.23613;
      }
      <D.23611>:
      ctx->valid = 0;
      return;
      <D.23609>:
      D.23589 = data[0];
      if (D.23589 < last_owner) goto <D.23614>; else goto <D.23615>;
      <D.23614>:
      D.23593 = ctx->report_error;
      if (D.23593 != 0) goto <D.23616>; else goto <D.23617>;
      <D.23616>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23589 = data[0];
        D.23618 = monoeg_g_strdup_printf ("GenericParamConstraint table row %d is not properly sorted. Previous value of the owner column is 0x%08x current value is 0x%08x", i, last_owner, D.23589);
        vinfo->info.message = D.23618;
        vinfo->exception_type = 3;
        D.23597 = ctx->errors;
        D.23619 = monoeg_g_slist_prepend (D.23597, vinfo);
        ctx->errors = D.23619;
      }
      <D.23617>:
      ctx->valid = 0;
      return;
      <D.23615>:
      D.23589 = data[0];
      if (D.23589 == last_owner) goto <D.23620>; else goto <D.23621>;
      <D.23620>:
      D.23599 = data[1];
      if (D.23599 == last_constraint) goto <D.23622>; else goto <D.23623>;
      <D.23622>:
      D.23593 = ctx->report_error;
      if (D.23593 != 0) goto <D.23624>; else goto <D.23625>;
      <D.23624>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23626 = monoeg_g_strdup_printf ("GenericParamConstraint table row %d has duplicate constraint 0x%08x", i, last_constraint);
        vinfo->info.message = D.23626;
        vinfo->exception_type = 3;
        D.23597 = ctx->errors;
        D.23627 = monoeg_g_slist_prepend (D.23597, vinfo);
        ctx->errors = D.23627;
      }
      <D.23625>:
      ctx->valid = 0;
      return;
      <D.23623>:
      goto <D.23628>;
      <D.23621>:
      last_owner = data[0];
      <D.23628>:
      last_constraint = data[1];
      i = i + 1;
      <D.19458>:
      D.23629 = table->rows;
      D.23630 = (int) D.23629;
      if (D.23630 > i) goto <D.19457>; else goto <D.19459>;
      <D.19459>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


verify_tables_data_global_constraints (struct VerifyContext * ctx)
{
  verify_typedef_table_global_constraints (ctx);
}


verify_typedef_table_global_constraints (struct VerifyContext * ctx)
{
  struct MonoImage * D.23634;
  unsigned int D.23635;
  const char * D.23636;
  unsigned int D.23637;
  const char * D.23638;
  unsigned int D.23639;
  unsigned int D.23640;
  int D.23643;
  unsigned int D.23644;
  _Bool D.23645;
  long int D.23646;
  long int D.23647;
  unsigned int D.23650;
  void * D.23651;
  int D.23654;
  const char * D.23657;
  const char * D.23658;
  unsigned int D.23659;
  gchar * D.23660;
  struct GSList * D.23661;
  struct GSList * D.23662;
  <unnamed-unsigned:24> D.23663;
  int D.23664;
  int i;
  guint32 data[6];
  guint32 nested_data[2];
  struct MonoTableInfo * table;
  struct MonoTableInfo * nested_table;
  struct GHashTable * unique_types;

  try
    {
      D.23634 = ctx->image;
      table = &D.23634->tables[2];
      D.23634 = ctx->image;
      nested_table = &D.23634->tables[41];
      unique_types = monoeg_g_hash_table_new_full (typedef_hash, typedef_equals, monoeg_g_free, 0B);
      i = 0;
      goto <D.19489>;
      <D.19488>:
      {
        guint visibility;
        struct TypeDefUniqueId * type;

        type = monoeg_malloc (24);
        mono_metadata_decode_row (table, i, &data, 6);
        D.23634 = ctx->image;
        D.23635 = data[1];
        D.23636 = mono_metadata_string_heap (D.23634, D.23635);
        type->name = D.23636;
        D.23634 = ctx->image;
        D.23637 = data[2];
        D.23638 = mono_metadata_string_heap (D.23634, D.23637);
        type->name_space = D.23638;
        type->resolution_scope = 0;
        D.23639 = data[0];
        visibility = D.23639 & 7;
        D.23640 = visibility + 4294967294;
        if (D.23640 <= 5) goto <D.23641>; else goto <D.23642>;
        <D.23641>:
        {
          int res;

          D.23643 = i + 1;
          D.23644 = (unsigned int) D.23643;
          res = search_sorted_table (ctx, 41, 0, D.23644);
          D.23645 = res < 0;
          D.23646 = (long int) D.23645;
          D.23647 = __builtin_expect (D.23646, 0);
          if (D.23647 != 0) goto <D.23648>; else goto <D.23649>;
          <D.23648>:
          monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "metadata-verify.c", 3700, "res >= 0");
          <D.23649>:
          mono_metadata_decode_row (nested_table, res, &nested_data, 2);
          D.23650 = nested_data[1];
          type->resolution_scope = D.23650;
        }
        <D.23642>:
        D.23651 = monoeg_g_hash_table_lookup (unique_types, type);
        if (D.23651 != 0B) goto <D.23652>; else goto <D.23653>;
        <D.23652>:
        D.23654 = ctx->report_error;
        if (D.23654 != 0) goto <D.23655>; else goto <D.23656>;
        <D.23655>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.23657 = type->name;
          D.23658 = type->name_space;
          D.23659 = type->resolution_scope;
          D.23660 = monoeg_g_strdup_printf ("TypeDef table row %d has duplicate for tuple (%s,%s,%x)", i, D.23657, D.23658, D.23659);
          vinfo->info.message = D.23660;
          vinfo->exception_type = 3;
          D.23661 = ctx->errors;
          D.23662 = monoeg_g_slist_prepend (D.23661, vinfo);
          ctx->errors = D.23662;
        }
        <D.23656>:
        ctx->valid = 0;
        monoeg_g_hash_table_destroy (unique_types);
        monoeg_g_free (type);
        return;
        <D.23653>:
        monoeg_g_hash_table_insert_replace (unique_types, type, 1B, 0);
      }
      i = i + 1;
      <D.19489>:
      D.23663 = table->rows;
      D.23664 = (int) D.23663;
      if (D.23664 > i) goto <D.19488>; else goto <D.19490>;
      <D.19490>:
      monoeg_g_hash_table_destroy (unique_types);
    }
  finally
    {
      data = {CLOBBER};
      nested_data = {CLOBBER};
    }
}


typedef_equals (const void * _a, const void * _b)
{
  gboolean D.23668;
  int iftmp.91;
  const char * D.23672;
  const char * D.23673;
  int D.23674;
  const char * D.23676;
  const char * D.23677;
  int D.23678;
  unsigned int D.23680;
  unsigned int D.23681;
  const struct TypeDefUniqueId * a;
  const struct TypeDefUniqueId * b;

  a = _a;
  b = _b;
  D.23672 = a->name;
  D.23673 = b->name;
  D.23674 = strcmp (D.23672, D.23673);
  if (D.23674 == 0) goto <D.23675>; else goto <D.23670>;
  <D.23675>:
  D.23676 = a->name_space;
  D.23677 = b->name_space;
  D.23678 = strcmp (D.23676, D.23677);
  if (D.23678 == 0) goto <D.23679>; else goto <D.23670>;
  <D.23679>:
  D.23680 = a->resolution_scope;
  D.23681 = b->resolution_scope;
  if (D.23680 == D.23681) goto <D.23682>; else goto <D.23670>;
  <D.23682>:
  iftmp.91 = 1;
  goto <D.23671>;
  <D.23670>:
  iftmp.91 = 0;
  <D.23671>:
  D.23668 = iftmp.91;
  return D.23668;
}


typedef_hash (const void * _key)
{
  guint D.23684;
  const char * D.23685;
  unsigned int D.23686;
  const char * D.23687;
  unsigned int D.23688;
  unsigned int D.23689;
  unsigned int D.23690;
  const struct TypeDefUniqueId * key;

  key = _key;
  D.23685 = key->name;
  D.23686 = monoeg_g_str_hash (D.23685);
  D.23687 = key->name_space;
  D.23688 = monoeg_g_str_hash (D.23687);
  D.23689 = D.23686 ^ D.23688;
  D.23690 = key->resolution_scope;
  D.23684 = D.23689 ^ D.23690;
  return D.23684;
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_full_table_data (struct MonoImage * image, struct GSList * * error_list)
{
  int D.23692;
  gboolean D.23695;
  _Bool D.23696;
  int D.23697;
  int D.23698;
  struct VerifyContext ctx;
  void cleanup = <<< error >>>;

  try
    {
      D.23692 = mono_verifier_is_enabled_for_image (image);
      if (D.23692 == 0) goto <D.23693>; else goto <D.23694>;
      <D.23693>:
      D.23695 = 1;
      return D.23695;
      <D.23694>:
      D.23696 = error_list != 0B;
      D.23697 = (int) D.23696;
      init_verify_context (&ctx, image, D.23697);
      ctx.stage = 2;
      verify_typedef_table_full (&ctx);
      D.23698 = ctx.valid;
      if (D.23698 == 0) goto cleanup; else goto <D.23699>;
      <D.23699>:
      verify_field_table_full (&ctx);
      D.23698 = ctx.valid;
      if (D.23698 == 0) goto cleanup; else goto <D.23700>;
      <D.23700>:
      verify_method_table_full (&ctx);
      D.23698 = ctx.valid;
      if (D.23698 == 0) goto cleanup; else goto <D.23701>;
      <D.23701>:
      verify_memberref_table_full (&ctx);
      D.23698 = ctx.valid;
      if (D.23698 == 0) goto cleanup; else goto <D.23702>;
      <D.23702>:
      verify_cattr_table_full (&ctx);
      D.23698 = ctx.valid;
      if (D.23698 == 0) goto cleanup; else goto <D.23703>;
      <D.23703>:
      verify_field_marshal_table_full (&ctx);
      D.23698 = ctx.valid;
      if (D.23698 == 0) goto cleanup; else goto <D.23704>;
      <D.23704>:
      verify_decl_security_table_full (&ctx);
      D.23698 = ctx.valid;
      if (D.23698 == 0) goto cleanup; else goto <D.23705>;
      <D.23705>:
      verify_standalonesig_table_full (&ctx);
      D.23698 = ctx.valid;
      if (D.23698 == 0) goto cleanup; else goto <D.23706>;
      <D.23706>:
      verify_event_table_full (&ctx);
      D.23698 = ctx.valid;
      if (D.23698 == 0) goto cleanup; else goto <D.23707>;
      <D.23707>:
      verify_typespec_table_full (&ctx);
      D.23698 = ctx.valid;
      if (D.23698 == 0) goto cleanup; else goto <D.23708>;
      <D.23708>:
      verify_method_spec_table_full (&ctx);
      D.23698 = ctx.valid;
      if (D.23698 == 0) goto cleanup; else goto <D.23709>;
      <D.23709>:
      verify_tables_data_global_constraints_full (&ctx);
      cleanup:
      D.23695 = cleanup_context (&ctx, error_list);
      return D.23695;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


verify_typedef_table_full (struct VerifyContext * ctx)
{
  struct MonoImage * D.23712;
  long unsigned int D.23713;
  long unsigned int D.23714;
  int D.23717;
  gchar * D.23720;
  struct GSList * D.23721;
  struct GSList * D.23722;
  unsigned int D.23725;
  unsigned int D.23726;
  unsigned int D.23729;
  gchar * D.23734;
  struct GSList * D.23735;
  unsigned int D.23737;
  _Bool D.23738;
  gchar * D.23745;
  struct GSList * D.23746;
  gchar * D.23752;
  struct GSList * D.23753;
  <unnamed-unsigned:24> D.23754;
  int D.23755;
  struct MonoTableInfo * table;
  guint32 data[6];
  int i;

  try
    {
      D.23712 = ctx->image;
      table = &D.23712->tables[2];
      D.23713 = BIT_FIELD_REF <*table, 64, 64>;
      D.23714 = D.23713 & 18446742974197923840;
      if (D.23714 == 0) goto <D.23715>; else goto <D.23716>;
      <D.23715>:
      D.23717 = ctx->report_error;
      if (D.23717 != 0) goto <D.23718>; else goto <D.23719>;
      <D.23718>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23720 = monoeg_g_strdup_printf ("Typedef table must have exactly at least one row");
        vinfo->info.message = D.23720;
        vinfo->exception_type = 3;
        D.23721 = ctx->errors;
        D.23722 = monoeg_g_slist_prepend (D.23721, vinfo);
        ctx->errors = D.23722;
      }
      <D.23719>:
      ctx->valid = 0;
      return;
      <D.23716>:
      i = 0;
      goto <D.18859>;
      <D.18858>:
      mono_metadata_decode_row (table, i, &data, 6);
      if (i == 0) goto <D.23723>; else goto <D.23724>;
      <D.23723>:
      // predicted unlikely by continue predictor.
      goto <D.18852>;
      <D.23724>:
      D.23725 = data[0];
      D.23726 = D.23725 & 32;
      if (D.23726 != 0) goto <D.23727>; else goto <D.23728>;
      <D.23727>:
      D.23729 = data[3];
      if (D.23729 != 0) goto <D.23730>; else goto <D.23731>;
      <D.23730>:
      D.23717 = ctx->report_error;
      if (D.23717 != 0) goto <D.23732>; else goto <D.23733>;
      <D.23732>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23734 = monoeg_g_strdup_printf ("Invalid typedef row %d for interface type must have a null extend field", i);
        vinfo->info.message = D.23734;
        vinfo->exception_type = 3;
        D.23721 = ctx->errors;
        D.23735 = monoeg_g_slist_prepend (D.23721, vinfo);
        ctx->errors = D.23735;
      }
      <D.23733>:
      ctx->valid = 0;
      return;
      <D.23731>:
      goto <D.23736>;
      <D.23728>:
      {
        gboolean is_sys_obj;
        gboolean has_parent;

        is_sys_obj = typedef_is_system_object (ctx, &data);
        D.23729 = data[3];
        D.23737 = get_coded_index_token (0, D.23729);
        D.23738 = D.23737 != 0;
        has_parent = (gboolean) D.23738;
        if (is_sys_obj != 0) goto <D.23739>; else goto <D.23740>;
        <D.23739>:
        if (has_parent != 0) goto <D.23741>; else goto <D.23742>;
        <D.23741>:
        D.23717 = ctx->report_error;
        if (D.23717 != 0) goto <D.23743>; else goto <D.23744>;
        <D.23743>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.23745 = monoeg_g_strdup_printf ("Invalid typedef row %d for System.Object must have a null extend field", i);
          vinfo->info.message = D.23745;
          vinfo->exception_type = 3;
          D.23721 = ctx->errors;
          D.23746 = monoeg_g_slist_prepend (D.23721, vinfo);
          ctx->errors = D.23746;
        }
        <D.23744>:
        ctx->valid = 0;
        return;
        <D.23742>:
        goto <D.23747>;
        <D.23740>:
        if (has_parent == 0) goto <D.23748>; else goto <D.23749>;
        <D.23748>:
        D.23717 = ctx->report_error;
        if (D.23717 != 0) goto <D.23750>; else goto <D.23751>;
        <D.23750>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.23752 = monoeg_g_strdup_printf ("Invalid typedef row %d for non-interface type must have a non-null extend field", i);
          vinfo->info.message = D.23752;
          vinfo->exception_type = 3;
          D.23721 = ctx->errors;
          D.23753 = monoeg_g_slist_prepend (D.23721, vinfo);
          ctx->errors = D.23753;
        }
        <D.23751>:
        ctx->valid = 0;
        return;
        <D.23749>:
        <D.23747>:
      }
      <D.23736>:
      <D.18852>:
      i = i + 1;
      <D.18859>:
      D.23754 = table->rows;
      D.23755 = (int) D.23754;
      if (D.23755 > i) goto <D.18858>; else goto <D.18860>;
      <D.18860>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


typedef_is_system_object (struct VerifyContext * ctx, guint32 * data)
{
  gboolean D.23759;
  int iftmp.92;
  struct MonoImage * D.23763;
  int D.23764;
  guint32 * D.23766;
  unsigned int D.23767;
  int D.23768;
  guint32 * D.23770;
  unsigned int D.23771;
  int D.23772;

  D.23763 = ctx->image;
  D.23764 = mono_verifier_is_corlib (D.23763);
  if (D.23764 != 0) goto <D.23765>; else goto <D.23761>;
  <D.23765>:
  D.23766 = data + 8;
  D.23767 = *D.23766;
  D.23768 = string_cmp (ctx, "System", D.23767);
  if (D.23768 == 0) goto <D.23769>; else goto <D.23761>;
  <D.23769>:
  D.23770 = data + 4;
  D.23771 = *D.23770;
  D.23772 = string_cmp (ctx, "Object", D.23771);
  if (D.23772 == 0) goto <D.23773>; else goto <D.23761>;
  <D.23773>:
  iftmp.92 = 1;
  goto <D.23762>;
  <D.23761>:
  iftmp.92 = 0;
  <D.23762>:
  D.23759 = iftmp.92;
  return D.23759;
}


mono_verifier_is_corlib (struct MonoImage * image)
{
  int iftmp.93;
  <unnamed type> D.23776;
  gboolean D.23780;
  int iftmp.94;
  const char * D.23785;
  int D.23787;
  gboolean trusted_location;

  D.23776 = mono_security_get_mode ();
  if (D.23776 == 1) goto <D.23777>; else goto <D.23778>;
  <D.23777>:
  iftmp.93 = mono_security_core_clr_is_platform_image (image);
  goto <D.23779>;
  <D.23778>:
  iftmp.93 = 1;
  <D.23779>:
  trusted_location = iftmp.93;
  if (trusted_location != 0) goto <D.23784>; else goto <D.23782>;
  <D.23784>:
  D.23785 = image->module_name;
  if (D.23785 != 0B) goto <D.23786>; else goto <D.23782>;
  <D.23786>:
  D.23785 = image->module_name;
  D.23787 = strcmp ("mscorlib.dll", D.23785);
  if (D.23787 == 0) goto <D.23788>; else goto <D.23782>;
  <D.23788>:
  iftmp.94 = 1;
  goto <D.23783>;
  <D.23782>:
  iftmp.94 = 0;
  <D.23783>:
  D.23780 = iftmp.94;
  return D.23780;
}


string_cmp (struct VerifyContext * ctx, const char * str, guint offset)
{
  int D.23792;
  unsigned char D.23793;
  const char * D.23794;

  if (offset == 0) goto <D.23790>; else goto <D.23791>;
  <D.23790>:
  D.23793 = MEM[(const unsigned char * {ref-all})str];
  D.23792 = (int) D.23793;
  return D.23792;
  <D.23791>:
  D.23794 = get_string_ptr (ctx, offset);
  D.23792 = strcmp (str, D.23794);
  return D.23792;
}


verify_field_table_full (struct VerifyContext * ctx)
{
  struct MonoImage * D.23796;
  unsigned int D.23799;
  int D.23801;
  int D.23802;
  gchar * D.23805;
  struct GSList * D.23806;
  struct GSList * D.23807;
  <unnamed-unsigned:24> D.23808;
  int D.23809;
  struct MonoTableInfo * table;
  guint32 data[3];
  int i;

  try
    {
      D.23796 = ctx->image;
      table = &D.23796->tables[4];
      i = 0;
      goto <D.18895>;
      <D.18894>:
      mono_metadata_decode_row (table, i, &data, 3);
      D.23799 = data[2];
      if (D.23799 == 0) goto <D.23797>; else goto <D.23800>;
      <D.23800>:
      D.23799 = data[2];
      D.23801 = is_valid_field_signature (ctx, D.23799);
      if (D.23801 == 0) goto <D.23797>; else goto <D.23798>;
      <D.23797>:
      D.23802 = ctx->report_error;
      if (D.23802 != 0) goto <D.23803>; else goto <D.23804>;
      <D.23803>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23799 = data[2];
        D.23805 = monoeg_g_strdup_printf ("Invalid field row %d invalid signature token %08x", i, D.23799);
        vinfo->info.message = D.23805;
        vinfo->exception_type = 3;
        D.23806 = ctx->errors;
        D.23807 = monoeg_g_slist_prepend (D.23806, vinfo);
        ctx->errors = D.23807;
      }
      <D.23804>:
      ctx->valid = 0;
      return;
      <D.23798>:
      i = i + 1;
      <D.18895>:
      D.23808 = table->rows;
      D.23809 = (int) D.23808;
      if (D.23809 > i) goto <D.18894>; else goto <D.18896>;
      <D.18896>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


is_valid_field_signature (struct VerifyContext * ctx, guint32 offset)
{
  int D.23813;
  int D.23816;
  gchar * D.23819;
  struct GSList * D.23820;
  struct GSList * D.23821;
  gboolean D.23822;
  const char * ptr.95;
  unsigned int size.96;
  sizetype D.23825;
  int D.23826;
  gchar * D.23831;
  struct GSList * D.23832;
  unsigned int signature.97;
  gchar * D.23838;
  struct GSList * D.23839;
  const char * ptr.98;
  guint32 size;
  unsigned int signature;
  const char * ptr;
  const char * end;

  try
    {
      size = 0;
      signature = 0;
      ptr = 0B;
      D.23813 = decode_signature_header (ctx, offset, &size, &ptr);
      if (D.23813 == 0) goto <D.23814>; else goto <D.23815>;
      <D.23814>:
      D.23816 = ctx->report_error;
      if (D.23816 != 0) goto <D.23817>; else goto <D.23818>;
      <D.23817>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23819 = monoeg_strdup ("FieldSig: Could not decode signature header");
        vinfo->info.message = D.23819;
        vinfo->exception_type = 3;
        D.23820 = ctx->errors;
        D.23821 = monoeg_g_slist_prepend (D.23820, vinfo);
        ctx->errors = D.23821;
      }
      <D.23818>:
      ctx->valid = 0;
      D.23822 = 0;
      return D.23822;
      <D.23815>:
      ptr.95 = ptr;
      size.96 = size;
      D.23825 = (sizetype) size.96;
      end = ptr.95 + D.23825;
      D.23826 = safe_read (&ptr, end, &signature, 1);
      if (D.23826 == 0) goto <D.23827>; else goto <D.23828>;
      <D.23827>:
      D.23816 = ctx->report_error;
      if (D.23816 != 0) goto <D.23829>; else goto <D.23830>;
      <D.23829>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23831 = monoeg_strdup ("FieldSig: Not enough room for the signature");
        vinfo->info.message = D.23831;
        vinfo->exception_type = 3;
        D.23820 = ctx->errors;
        D.23832 = monoeg_g_slist_prepend (D.23820, vinfo);
        ctx->errors = D.23832;
      }
      <D.23830>:
      ctx->valid = 0;
      D.23822 = 0;
      return D.23822;
      <D.23828>:
      signature.97 = signature;
      if (signature.97 != 6) goto <D.23834>; else goto <D.23835>;
      <D.23834>:
      D.23816 = ctx->report_error;
      if (D.23816 != 0) goto <D.23836>; else goto <D.23837>;
      <D.23836>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        signature.97 = signature;
        D.23838 = monoeg_g_strdup_printf ("FieldSig: Invalid signature %x", signature.97);
        vinfo->info.message = D.23838;
        vinfo->exception_type = 3;
        D.23820 = ctx->errors;
        D.23839 = monoeg_g_slist_prepend (D.23820, vinfo);
        ctx->errors = D.23839;
      }
      <D.23837>:
      ctx->valid = 0;
      D.23822 = 0;
      return D.23822;
      <D.23835>:
      ptr.95 = ptr;
      ptr.98 = ptr.95 + 18446744073709551615;
      ptr = ptr.98;
      D.23822 = parse_field (ctx, &ptr, end);
      return D.23822;
    }
  finally
    {
      size = {CLOBBER};
      signature = {CLOBBER};
      ptr = {CLOBBER};
    }
}


parse_field (struct VerifyContext * ctx, const char * * _ptr, const char * end)
{
  const char * ptr.99;
  int D.23844;
  int D.23847;
  gchar * D.23850;
  struct GSList * D.23851;
  struct GSList * D.23852;
  gboolean D.23853;
  unsigned int signature.100;
  gchar * D.23859;
  struct GSList * D.23860;
  int D.23861;
  int D.23864;
  const char * ptr.101;
  const char * ptr.102;
  const char * ptr;
  unsigned int signature;

  try
    {
      ptr.99 = *_ptr;
      ptr = ptr.99;
      signature = 0;
      D.23844 = safe_read (&ptr, end, &signature, 1);
      if (D.23844 == 0) goto <D.23845>; else goto <D.23846>;
      <D.23845>:
      D.23847 = ctx->report_error;
      if (D.23847 != 0) goto <D.23848>; else goto <D.23849>;
      <D.23848>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23850 = monoeg_strdup ("Field: Not enough room for field signature");
        vinfo->info.message = D.23850;
        vinfo->exception_type = 3;
        D.23851 = ctx->errors;
        D.23852 = monoeg_g_slist_prepend (D.23851, vinfo);
        ctx->errors = D.23852;
      }
      <D.23849>:
      ctx->valid = 0;
      D.23853 = 0;
      return D.23853;
      <D.23846>:
      signature.100 = signature;
      if (signature.100 != 6) goto <D.23855>; else goto <D.23856>;
      <D.23855>:
      D.23847 = ctx->report_error;
      if (D.23847 != 0) goto <D.23857>; else goto <D.23858>;
      <D.23857>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        signature.100 = signature;
        D.23859 = monoeg_g_strdup_printf ("Field: Invalid signature 0x%x, must be 6", signature.100);
        vinfo->info.message = D.23859;
        vinfo->exception_type = 3;
        D.23851 = ctx->errors;
        D.23860 = monoeg_g_slist_prepend (D.23851, vinfo);
        ctx->errors = D.23860;
      }
      <D.23858>:
      ctx->valid = 0;
      D.23853 = 0;
      return D.23853;
      <D.23856>:
      D.23861 = parse_custom_mods (ctx, &ptr, end);
      if (D.23861 == 0) goto <D.23862>; else goto <D.23863>;
      <D.23862>:
      D.23853 = 0;
      return D.23853;
      <D.23863>:
      D.23864 = safe_read (&ptr, end, &signature, 1);
      if (D.23864 != 0) goto <D.23865>; else goto <D.23866>;
      <D.23865>:
      signature.100 = signature;
      if (signature.100 != 16) goto <D.23867>; else goto <D.23868>;
      <D.23867>:
      ptr.101 = ptr;
      ptr.102 = ptr.101 + 18446744073709551615;
      ptr = ptr.102;
      <D.23868>:
      <D.23866>:
      ptr.101 = ptr;
      *_ptr = ptr.101;
      D.23853 = parse_type (ctx, _ptr, end);
      return D.23853;
    }
  finally
    {
      ptr = {CLOBBER};
      signature = {CLOBBER};
    }
}


verify_method_table_full (struct VerifyContext * ctx)
{
  struct MonoImage * D.23873;
  unsigned int D.23876;
  int D.23878;
  int D.23879;
  gchar * D.23882;
  struct GSList * D.23883;
  struct GSList * D.23884;
  int D.23887;
  gchar * D.23892;
  struct GSList * D.23893;
  <unnamed-unsigned:24> D.23894;
  int D.23895;
  struct MonoTableInfo * table;
  guint32 data[6];
  guint32 rva;
  guint32 locals_token;
  int i;

  try
    {
      D.23873 = ctx->image;
      table = &D.23873->tables[6];
      i = 0;
      goto <D.18957>;
      <D.18956>:
      mono_metadata_decode_row (table, i, &data, 6);
      rva = data[0];
      D.23876 = data[4];
      if (D.23876 == 0) goto <D.23874>; else goto <D.23877>;
      <D.23877>:
      D.23876 = data[4];
      D.23878 = is_valid_method_signature (ctx, D.23876);
      if (D.23878 == 0) goto <D.23874>; else goto <D.23875>;
      <D.23874>:
      D.23879 = ctx->report_error;
      if (D.23879 != 0) goto <D.23880>; else goto <D.23881>;
      <D.23880>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23876 = data[4];
        D.23882 = monoeg_g_strdup_printf ("Invalid method row %d invalid signature token 0x%08x", i, D.23876);
        vinfo->info.message = D.23882;
        vinfo->exception_type = 3;
        D.23883 = ctx->errors;
        D.23884 = monoeg_g_slist_prepend (D.23883, vinfo);
        ctx->errors = D.23884;
      }
      <D.23881>:
      ctx->valid = 0;
      return;
      <D.23875>:
      if (rva != 0) goto <D.23885>; else goto <D.23886>;
      <D.23885>:
      D.23887 = is_valid_method_header (ctx, rva, &locals_token);
      if (D.23887 == 0) goto <D.23888>; else goto <D.23889>;
      <D.23888>:
      D.23879 = ctx->report_error;
      if (D.23879 != 0) goto <D.23890>; else goto <D.23891>;
      <D.23890>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23892 = monoeg_g_strdup_printf ("Invalid method row %d RVA points to an invalid method header", i);
        vinfo->info.message = D.23892;
        vinfo->exception_type = 3;
        D.23883 = ctx->errors;
        D.23893 = monoeg_g_slist_prepend (D.23883, vinfo);
        ctx->errors = D.23893;
      }
      <D.23891>:
      ctx->valid = 0;
      return;
      <D.23889>:
      <D.23886>:
      i = i + 1;
      <D.18957>:
      D.23894 = table->rows;
      D.23895 = (int) D.23894;
      if (D.23895 > i) goto <D.18956>; else goto <D.18958>;
      <D.18958>:
    }
  finally
    {
      data = {CLOBBER};
      locals_token = {CLOBBER};
    }
}


is_valid_method_signature (struct VerifyContext * ctx, guint32 offset)
{
  int D.23899;
  int D.23902;
  gchar * D.23905;
  struct GSList * D.23906;
  struct GSList * D.23907;
  gboolean D.23908;
  const char * ptr.103;
  unsigned int size.104;
  sizetype D.23911;
  guint32 size;
  const char * ptr;
  const char * end;

  try
    {
      size = 0;
      ptr = 0B;
      D.23899 = decode_signature_header (ctx, offset, &size, &ptr);
      if (D.23899 == 0) goto <D.23900>; else goto <D.23901>;
      <D.23900>:
      D.23902 = ctx->report_error;
      if (D.23902 != 0) goto <D.23903>; else goto <D.23904>;
      <D.23903>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23905 = monoeg_strdup ("MethodSig: Could not decode signature header");
        vinfo->info.message = D.23905;
        vinfo->exception_type = 3;
        D.23906 = ctx->errors;
        D.23907 = monoeg_g_slist_prepend (D.23906, vinfo);
        ctx->errors = D.23907;
      }
      <D.23904>:
      ctx->valid = 0;
      D.23908 = 0;
      return D.23908;
      <D.23901>:
      ptr.103 = ptr;
      size.104 = size;
      D.23911 = (sizetype) size.104;
      end = ptr.103 + D.23911;
      D.23908 = parse_method_signature (ctx, &ptr, end, 0, 0);
      return D.23908;
    }
  finally
    {
      size = {CLOBBER};
      ptr = {CLOBBER};
    }
}


is_valid_method_header (struct VerifyContext * ctx, guint32 rva, guint32 * locals_token)
{
  struct MonoImage * D.23914;
  int D.23917;
  gchar * D.23920;
  struct GSList * D.23921;
  struct GSList * D.23922;
  gboolean D.23923;
  const char * D.23924;
  sizetype D.23925;
  const char * ptr.105;
  unsigned int D.23927;
  sizetype D.23928;
  int D.23929;
  gchar * D.23934;
  struct GSList * D.23935;
  unsigned int header.106;
  unsigned int D.23937;
  gchar * D.23940;
  struct GSList * D.23941;
  unsigned int header.107;
  const char * ptr.108;
  sizetype D.23946;
  const char * D.23947;
  long unsigned int D.23949;
  long unsigned int D.23950;
  long unsigned int ptr.109;
  long int end.110;
  long int ptr.111;
  long int D.23956;
  int D.23957;
  gchar * D.23958;
  struct GSList * D.23959;
  const char * ptr.112;
  int D.23962;
  gchar * D.23967;
  struct GSList * D.23968;
  unsigned int fat_header.113;
  unsigned int D.23970;
  gchar * D.23975;
  struct GSList * D.23976;
  int D.23977;
  gchar * D.23982;
  struct GSList * D.23983;
  int D.23984;
  gchar * D.23989;
  struct GSList * D.23990;
  int D.23991;
  gchar * D.23996;
  struct GSList * D.23997;
  unsigned int local_vars_tok.114;
  unsigned int D.24001;
  gchar * D.24006;
  struct GSList * D.24007;
  unsigned int D.24008;
  <unnamed-unsigned:24> D.24009;
  unsigned int D.24010;
  gchar * D.24015;
  struct GSList * D.24016;
  gchar * D.24021;
  struct GSList * D.24022;
  unsigned int D.24023;
  gchar * D.24028;
  struct GSList * D.24029;
  unsigned int code_size.115;
  sizetype D.24033;
  const char * ptr.116;
  long unsigned int D.24036;
  long unsigned int D.24037;
  gchar * D.24040;
  struct GSList * D.24041;
  unsigned int D.24042;
  const char * ptr.117;
  int D.24046;
  gchar * D.24051;
  struct GSList * D.24052;
  unsigned int section_header.118;
  unsigned int D.24054;
  gchar * D.24059;
  struct GSList * D.24060;
  unsigned int D.24061;
  _Bool D.24062;
  unsigned int D.24063;
  unsigned int iftmp.119;
  gchar * D.24072;
  struct GSList * D.24073;
  unsigned int D.24076;
  sizetype D.24077;
  const char * D.24078;
  long unsigned int D.24080;
  long unsigned int D.24081;
  gchar * D.24084;
  struct GSList * D.24085;
  unsigned int D.24086;
  unsigned int iftmp.120;
  guint32 iftmp.121;
  unsigned int D.24097;
  guint32 iftmp.122;
  unsigned int D.24104;
  unsigned int D.24105;
  guint32 iftmp.123;
  unsigned int D.24114;
  gchar * D.24115;
  struct GSList * D.24116;
  unsigned char D.24117;
  sizetype iftmp.124;
  const char * ptr.125;
  int D.24123;
  gchar * D.24128;
  struct GSList * D.24129;
  unsigned int class_token.126;
  unsigned int D.24135;
  gchar * D.24142;
  struct GSList * D.24143;
  unsigned int D.24144;
  <unnamed-unsigned:24> D.24145;
  unsigned int D.24146;
  gchar * D.24151;
  struct GSList * D.24152;
  unsigned int D.24153;
  unsigned int local_vars_tok;
  unsigned int code_size;
  unsigned int offset;
  unsigned int header;
  unsigned int fat_header;
  unsigned int size;
  unsigned int max_stack;
  const char * ptr;
  const char * end;

  try
    {
      D.23914 = ctx->image;
      offset = mono_cli_rva_image_map (D.23914, rva);
      header = 0;
      fat_header = 0;
      size = 0;
      ptr = 0B;
      *locals_token = 0;
      if (offset == 4294967295) goto <D.23915>; else goto <D.23916>;
      <D.23915>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.23918>; else goto <D.23919>;
      <D.23918>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23920 = monoeg_strdup ("MethodHeader: Invalid RVA");
        vinfo->info.message = D.23920;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.23922 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.23922;
      }
      <D.23919>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.23916>:
      D.23924 = ctx->data;
      D.23925 = (sizetype) offset;
      ptr.105 = D.23924 + D.23925;
      ptr = ptr.105;
      D.23924 = ctx->data;
      D.23927 = ctx->size;
      D.23928 = (sizetype) D.23927;
      end = D.23924 + D.23928;
      D.23929 = safe_read (&ptr, end, &header, 1);
      if (D.23929 == 0) goto <D.23930>; else goto <D.23931>;
      <D.23930>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.23932>; else goto <D.23933>;
      <D.23932>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23934 = monoeg_strdup ("MethodHeader: Not enough room for header");
        vinfo->info.message = D.23934;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.23935 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.23935;
      }
      <D.23933>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.23931>:
      header.106 = header;
      D.23937 = header.106 & 3;
      switch (D.23937) <default: <D.23960>, case 0: <D.18761>, case 1: <D.18762>, case 2: <D.18764>>
      <D.18761>:
      <D.18762>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.23938>; else goto <D.23939>;
      <D.23938>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        header.106 = header;
        D.23937 = header.106 & 3;
        D.23940 = monoeg_g_strdup_printf ("MethodHeader: Invalid header type 0x%x", D.23937);
        vinfo->info.message = D.23940;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.23941 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.23941;
      }
      <D.23939>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.18764>:
      header.106 = header;
      header.107 = header.106 >> 2;
      header = header.107;
      ptr.108 = ptr;
      header.106 = header;
      D.23946 = (sizetype) header.106;
      D.23947 = ptr.108 + D.23946;
      if (D.23947 > end) goto <D.23943>; else goto <D.23948>;
      <D.23948>:
      header.106 = header;
      D.23949 = (long unsigned int) header.106;
      D.23950 = ~D.23949;
      ptr.108 = ptr;
      ptr.109 = (long unsigned int) ptr.108;
      if (D.23950 < ptr.109) goto <D.23943>; else goto <D.23944>;
      <D.23943>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.23952>; else goto <D.23953>;
      <D.23952>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        header.106 = header;
        end.110 = (long int) end;
        ptr.108 = ptr;
        ptr.111 = (long int) ptr.108;
        D.23956 = end.110 - ptr.111;
        D.23957 = (int) D.23956;
        D.23958 = monoeg_g_strdup_printf ("MethodHeader: Not enough room for method body. Required %d, but only %d is available", header.106, D.23957);
        vinfo->info.message = D.23958;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.23959 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.23959;
      }
      <D.23953>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.23944>:
      D.23923 = 1;
      return D.23923;
      <D.23960>:
      ptr.108 = ptr;
      ptr.112 = ptr.108 + 18446744073709551615;
      ptr = ptr.112;
      D.23962 = safe_read (&ptr, end, &fat_header, 2);
      if (D.23962 == 0) goto <D.23963>; else goto <D.23964>;
      <D.23963>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.23965>; else goto <D.23966>;
      <D.23965>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23967 = monoeg_strdup ("MethodHeader: Not enough room for fat header");
        vinfo->info.message = D.23967;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.23968 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.23968;
      }
      <D.23966>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.23964>:
      fat_header.113 = fat_header;
      D.23970 = fat_header.113 >> 12;
      size = D.23970 & 15;
      if (size != 3) goto <D.23971>; else goto <D.23972>;
      <D.23971>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.23973>; else goto <D.23974>;
      <D.23973>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23975 = monoeg_strdup ("MethodHeader: header size must be 3");
        vinfo->info.message = D.23975;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.23976 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.23976;
      }
      <D.23974>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.23972>:
      D.23977 = safe_read (&ptr, end, &max_stack, 2);
      if (D.23977 == 0) goto <D.23978>; else goto <D.23979>;
      <D.23978>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.23980>; else goto <D.23981>;
      <D.23980>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23982 = monoeg_strdup ("MethodHeader: Not enough room for max stack");
        vinfo->info.message = D.23982;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.23983 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.23983;
      }
      <D.23981>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.23979>:
      D.23984 = safe_read (&ptr, end, &code_size, 4);
      if (D.23984 == 0) goto <D.23985>; else goto <D.23986>;
      <D.23985>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.23987>; else goto <D.23988>;
      <D.23987>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23989 = monoeg_strdup ("MethodHeader: Not enough room for code size");
        vinfo->info.message = D.23989;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.23990 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.23990;
      }
      <D.23988>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.23986>:
      D.23991 = safe_read (&ptr, end, &local_vars_tok, 4);
      if (D.23991 == 0) goto <D.23992>; else goto <D.23993>;
      <D.23992>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.23994>; else goto <D.23995>;
      <D.23994>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.23996 = monoeg_strdup ("MethodHeader: Not enough room for local vars tok");
        vinfo->info.message = D.23996;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.23997 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.23997;
      }
      <D.23995>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.23993>:
      local_vars_tok.114 = local_vars_tok;
      if (local_vars_tok.114 != 0) goto <D.23999>; else goto <D.24000>;
      <D.23999>:
      local_vars_tok.114 = local_vars_tok;
      D.24001 = local_vars_tok.114 >> 24;
      if (D.24001 != 17) goto <D.24002>; else goto <D.24003>;
      <D.24002>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.24004>; else goto <D.24005>;
      <D.24004>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        local_vars_tok.114 = local_vars_tok;
        D.24001 = local_vars_tok.114 >> 24;
        D.24006 = monoeg_g_strdup_printf ("MethodHeader: Invalid local vars signature table 0x%x", D.24001);
        vinfo->info.message = D.24006;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.24007 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.24007;
      }
      <D.24005>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.24003>:
      local_vars_tok.114 = local_vars_tok;
      D.24008 = local_vars_tok.114 & 16777215;
      D.23914 = ctx->image;
      D.24009 = D.23914->tables[17].rows;
      D.24010 = (unsigned int) D.24009;
      if (D.24008 > D.24010) goto <D.24011>; else goto <D.24012>;
      <D.24011>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.24013>; else goto <D.24014>;
      <D.24013>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        local_vars_tok.114 = local_vars_tok;
        D.24008 = local_vars_tok.114 & 16777215;
        D.24015 = monoeg_g_strdup_printf ("MethodHeader: Invalid local vars signature points to invalid row 0x%x", D.24008);
        vinfo->info.message = D.24015;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.24016 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.24016;
      }
      <D.24014>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.24012>:
      local_vars_tok.114 = local_vars_tok;
      D.24008 = local_vars_tok.114 & 16777215;
      if (D.24008 == 0) goto <D.24017>; else goto <D.24018>;
      <D.24017>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.24019>; else goto <D.24020>;
      <D.24019>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24021 = monoeg_g_strdup_printf ("MethodHeader: Invalid local vars signature with zero index");
        vinfo->info.message = D.24021;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.24022 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.24022;
      }
      <D.24020>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.24018>:
      local_vars_tok.114 = local_vars_tok;
      D.24008 = local_vars_tok.114 & 16777215;
      *locals_token = D.24008;
      <D.24000>:
      fat_header.113 = fat_header;
      D.24023 = fat_header.113 & 4294905828;
      if (D.24023 != 0) goto <D.24024>; else goto <D.24025>;
      <D.24024>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.24026>; else goto <D.24027>;
      <D.24026>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        fat_header.113 = fat_header;
        D.24023 = fat_header.113 & 4294905828;
        D.24028 = monoeg_g_strdup_printf ("MethodHeader: Invalid fat signature flags %x", D.24023);
        vinfo->info.message = D.24028;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.24029 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.24029;
      }
      <D.24027>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.24025>:
      ptr.108 = ptr;
      code_size.115 = code_size;
      D.24033 = (sizetype) code_size.115;
      ptr.116 = ptr.108 + D.24033;
      if (ptr.116 > end) goto <D.24030>; else goto <D.24035>;
      <D.24035>:
      code_size.115 = code_size;
      D.24036 = (long unsigned int) code_size.115;
      D.24037 = ~D.24036;
      ptr.108 = ptr;
      ptr.109 = (long unsigned int) ptr.108;
      if (D.24037 < ptr.109) goto <D.24030>; else goto <D.24031>;
      <D.24030>:
      D.23917 = ctx->report_error;
      if (D.23917 != 0) goto <D.24038>; else goto <D.24039>;
      <D.24038>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        code_size.115 = code_size;
        D.24040 = monoeg_g_strdup_printf ("MethodHeader: Not enough room for code %d", code_size.115);
        vinfo->info.message = D.24040;
        vinfo->exception_type = 3;
        D.23921 = ctx->errors;
        D.24041 = monoeg_g_slist_prepend (D.23921, vinfo);
        ctx->errors = D.24041;
      }
      <D.24039>:
      ctx->valid = 0;
      D.23923 = 0;
      return D.23923;
      <D.24031>:
      fat_header.113 = fat_header;
      D.24042 = fat_header.113 & 8;
      if (D.24042 == 0) goto <D.24043>; else goto <D.24044>;
      <D.24043>:
      D.23923 = 1;
      return D.23923;
      <D.24044>:
      ptr.108 = ptr;
      code_size.115 = code_size;
      D.24033 = (sizetype) code_size.115;
      ptr.116 = ptr.108 + D.24033;
      ptr = ptr.116;
      <D.18796>:
      {
        unsigned int section_header;
        unsigned int section_size;
        gboolean is_fat;

        try
          {
            section_header = 0;
            section_size = 0;
            ptr.108 = ptr;
            ptr.117 = dword_align (ptr.108);
            ptr = ptr.117;
            D.24046 = safe_read (&ptr, end, &section_header, 4);
            if (D.24046 == 0) goto <D.24047>; else goto <D.24048>;
            <D.24047>:
            D.23917 = ctx->report_error;
            if (D.23917 != 0) goto <D.24049>; else goto <D.24050>;
            <D.24049>:
            {
              struct MonoVerifyInfoExtended * vinfo;

              vinfo = monoeg_malloc (24);
              vinfo->info.status = 1;
              D.24051 = monoeg_strdup ("MethodHeader: Not enough room for data section header");
              vinfo->info.message = D.24051;
              vinfo->exception_type = 3;
              D.23921 = ctx->errors;
              D.24052 = monoeg_g_slist_prepend (D.23921, vinfo);
              ctx->errors = D.24052;
            }
            <D.24050>:
            ctx->valid = 0;
            D.23923 = 0;
            return D.23923;
            <D.24048>:
            section_header.118 = section_header;
            D.24054 = section_header.118 & 62;
            if (D.24054 != 0) goto <D.24055>; else goto <D.24056>;
            <D.24055>:
            D.23917 = ctx->report_error;
            if (D.23917 != 0) goto <D.24057>; else goto <D.24058>;
            <D.24057>:
            {
              struct MonoVerifyInfoExtended * vinfo;

              vinfo = monoeg_malloc (24);
              vinfo->info.status = 1;
              section_header.118 = section_header;
              D.24054 = section_header.118 & 62;
              D.24059 = monoeg_g_strdup_printf ("MethodHeader: Invalid section header flags 0x%x", D.24054);
              vinfo->info.message = D.24059;
              vinfo->exception_type = 3;
              D.23921 = ctx->errors;
              D.24060 = monoeg_g_slist_prepend (D.23921, vinfo);
              ctx->errors = D.24060;
            }
            <D.24058>:
            ctx->valid = 0;
            D.23923 = 0;
            return D.23923;
            <D.24056>:
            section_header.118 = section_header;
            D.24061 = section_header.118 & 64;
            D.24062 = D.24061 != 0;
            is_fat = (gboolean) D.24062;
            section_header.118 = section_header;
            D.24063 = section_header.118 >> 8;
            if (is_fat != 0) goto <D.24065>; else goto <D.24066>;
            <D.24065>:
            iftmp.119 = 16777215;
            goto <D.24067>;
            <D.24066>:
            iftmp.119 = 255;
            <D.24067>:
            section_size = D.24063 & iftmp.119;
            if (section_size <= 3) goto <D.24068>; else goto <D.24069>;
            <D.24068>:
            D.23917 = ctx->report_error;
            if (D.23917 != 0) goto <D.24070>; else goto <D.24071>;
            <D.24070>:
            {
              struct MonoVerifyInfoExtended * vinfo;

              vinfo = monoeg_malloc (24);
              vinfo->info.status = 1;
              D.24072 = monoeg_g_strdup_printf ("MethodHeader: Section size too small");
              vinfo->info.message = D.24072;
              vinfo->exception_type = 3;
              D.23921 = ctx->errors;
              D.24073 = monoeg_g_slist_prepend (D.23921, vinfo);
              ctx->errors = D.24073;
            }
            <D.24071>:
            ctx->valid = 0;
            D.23923 = 0;
            return D.23923;
            <D.24069>:
            ptr.108 = ptr;
            D.24076 = section_size + 4294967292;
            D.24077 = (sizetype) D.24076;
            D.24078 = ptr.108 + D.24077;
            if (D.24078 > end) goto <D.24074>; else goto <D.24079>;
            <D.24079>:
            D.24076 = section_size + 4294967292;
            D.24080 = (long unsigned int) D.24076;
            D.24081 = ~D.24080;
            ptr.108 = ptr;
            ptr.109 = (long unsigned int) ptr.108;
            if (D.24081 < ptr.109) goto <D.24074>; else goto <D.24075>;
            <D.24074>:
            D.23917 = ctx->report_error;
            if (D.23917 != 0) goto <D.24082>; else goto <D.24083>;
            <D.24082>:
            {
              struct MonoVerifyInfoExtended * vinfo;

              vinfo = monoeg_malloc (24);
              vinfo->info.status = 1;
              D.24084 = monoeg_g_strdup_printf ("MethodHeader: Not enough room for section content %d", section_size);
              vinfo->info.message = D.24084;
              vinfo->exception_type = 3;
              D.23921 = ctx->errors;
              D.24085 = monoeg_g_slist_prepend (D.23921, vinfo);
              ctx->errors = D.24085;
            }
            <D.24083>:
            ctx->valid = 0;
            D.23923 = 0;
            return D.23923;
            <D.24075>:
            section_header.118 = section_header;
            D.24086 = section_header.118 & 1;
            if (D.24086 != 0) goto <D.24087>; else goto <D.24088>;
            <D.24087>:
            {
              guint32 i;
              guint32 clauses;

              if (is_fat != 0) goto <D.24090>; else goto <D.24091>;
              <D.24090>:
              iftmp.120 = 24;
              goto <D.24092>;
              <D.24091>:
              iftmp.120 = 12;
              <D.24092>:
              clauses = section_size / iftmp.120;
              if (is_fat != 0) goto <D.24094>; else goto <D.24095>;
              <D.24094>:
              iftmp.121 = 24;
              goto <D.24096>;
              <D.24095>:
              iftmp.121 = 12;
              <D.24096>:
              D.24097 = iftmp.121 * clauses;
              if (D.24097 != section_size) goto <D.24098>; else goto <D.24099>;
              <D.24098>:
              if (is_fat != 0) goto <D.24101>; else goto <D.24102>;
              <D.24101>:
              iftmp.122 = 24;
              goto <D.24103>;
              <D.24102>:
              iftmp.122 = 12;
              <D.24103>:
              D.24104 = iftmp.122 * clauses;
              D.24105 = D.24104 + 4;
              if (D.24105 != section_size) goto <D.24106>; else goto <D.24107>;
              <D.24106>:
              D.23917 = ctx->report_error;
              if (D.23917 != 0) goto <D.24108>; else goto <D.24109>;
              <D.24108>:
              {
                struct MonoVerifyInfoExtended * vinfo;

                vinfo = monoeg_malloc (24);
                vinfo->info.status = 1;
                if (is_fat != 0) goto <D.24111>; else goto <D.24112>;
                <D.24111>:
                iftmp.123 = 24;
                goto <D.24113>;
                <D.24112>:
                iftmp.123 = 12;
                <D.24113>:
                D.24114 = iftmp.123 * clauses;
                D.24115 = monoeg_g_strdup_printf ("MethodHeader: Invalid EH section size %d, it\'s not of the expected size %d", section_size, D.24114);
                vinfo->info.message = D.24115;
                vinfo->exception_type = 3;
                D.23921 = ctx->errors;
                D.24116 = monoeg_g_slist_prepend (D.23921, vinfo);
                ctx->errors = D.24116;
              }
              <D.24109>:
              ctx->valid = 0;
              D.23923 = 0;
              return D.23923;
              <D.24107>:
              <D.24099>:
              i = 0;
              goto <D.18793>;
              <D.18792>:
              {
                unsigned int flags;
                unsigned int class_token;

                try
                  {
                    ptr.108 = ptr;
                    D.24117 = MEM[(unsigned char *)ptr.108];
                    flags = (unsigned int) D.24117;
                    class_token = 0;
                    ptr.108 = ptr;
                    if (is_fat != 0) goto <D.24119>; else goto <D.24120>;
                    <D.24119>:
                    iftmp.124 = 20;
                    goto <D.24121>;
                    <D.24120>:
                    iftmp.124 = 8;
                    <D.24121>:
                    ptr.125 = ptr.108 + iftmp.124;
                    ptr = ptr.125;
                    D.24123 = safe_read (&ptr, end, &class_token, 4);
                    if (D.24123 == 0) goto <D.24124>; else goto <D.24125>;
                    <D.24124>:
                    D.23917 = ctx->report_error;
                    if (D.23917 != 0) goto <D.24126>; else goto <D.24127>;
                    <D.24126>:
                    {
                      struct MonoVerifyInfoExtended * vinfo;

                      vinfo = monoeg_malloc (24);
                      vinfo->info.status = 1;
                      D.24128 = monoeg_g_strdup_printf ("MethodHeader: Not enough room for section %d", i);
                      vinfo->info.message = D.24128;
                      vinfo->exception_type = 3;
                      D.23921 = ctx->errors;
                      D.24129 = monoeg_g_slist_prepend (D.23921, vinfo);
                      ctx->errors = D.24129;
                    }
                    <D.24127>:
                    ctx->valid = 0;
                    D.23923 = 0;
                    return D.23923;
                    <D.24125>:
                    if (flags == 0) goto <D.24130>; else goto <D.24131>;
                    <D.24130>:
                    class_token.126 = class_token;
                    if (class_token.126 != 0) goto <D.24133>; else goto <D.24134>;
                    <D.24133>:
                    {
                      guint table;

                      class_token.126 = class_token;
                      table = class_token.126 >> 24;
                      D.24135 = table + 4294967295;
                      if (D.24135 > 1) goto <D.24136>; else goto <D.24137>;
                      <D.24136>:
                      if (table != 27) goto <D.24138>; else goto <D.24139>;
                      <D.24138>:
                      D.23917 = ctx->report_error;
                      if (D.23917 != 0) goto <D.24140>; else goto <D.24141>;
                      <D.24140>:
                      {
                        struct MonoVerifyInfoExtended * vinfo;

                        vinfo = monoeg_malloc (24);
                        vinfo->info.status = 1;
                        D.24142 = monoeg_g_strdup_printf ("MethodHeader: Invalid section %d class token table %x", i, table);
                        vinfo->info.message = D.24142;
                        vinfo->exception_type = 3;
                        D.23921 = ctx->errors;
                        D.24143 = monoeg_g_slist_prepend (D.23921, vinfo);
                        ctx->errors = D.24143;
                      }
                      <D.24141>:
                      ctx->valid = 0;
                      D.23923 = 0;
                      return D.23923;
                      <D.24139>:
                      <D.24137>:
                      class_token.126 = class_token;
                      D.24144 = class_token.126 & 16777215;
                      D.23914 = ctx->image;
                      D.24145 = D.23914->tables[table].rows;
                      D.24146 = (unsigned int) D.24145;
                      if (D.24144 > D.24146) goto <D.24147>; else goto <D.24148>;
                      <D.24147>:
                      D.23917 = ctx->report_error;
                      if (D.23917 != 0) goto <D.24149>; else goto <D.24150>;
                      <D.24149>:
                      {
                        struct MonoVerifyInfoExtended * vinfo;

                        vinfo = monoeg_malloc (24);
                        vinfo->info.status = 1;
                        class_token.126 = class_token;
                        D.24144 = class_token.126 & 16777215;
                        D.24151 = monoeg_g_strdup_printf ("MethodHeader: Invalid section %d class token index %x", i, D.24144);
                        vinfo->info.message = D.24151;
                        vinfo->exception_type = 3;
                        D.23921 = ctx->errors;
                        D.24152 = monoeg_g_slist_prepend (D.23921, vinfo);
                        ctx->errors = D.24152;
                      }
                      <D.24150>:
                      ctx->valid = 0;
                      D.23923 = 0;
                      return D.23923;
                      <D.24148>:
                    }
                    <D.24134>:
                    <D.24131>:
                  }
                finally
                  {
                    class_token = {CLOBBER};
                  }
              }
              i = i + 1;
              <D.18793>:
              if (i < clauses) goto <D.18792>; else goto <D.18794>;
              <D.18794>:
            }
            <D.24088>:
            section_header.118 = section_header;
            D.24153 = section_header.118 & 128;
            if (D.24153 == 0) goto <D.18795>; else goto <D.24154>;
            <D.24154>:
          }
        finally
          {
            section_header = {CLOBBER};
          }
      }
      goto <D.18796>;
      <D.18795>:
      D.23923 = 1;
      return D.23923;
    }
  finally
    {
      local_vars_tok = {CLOBBER};
      code_size = {CLOBBER};
      header = {CLOBBER};
      fat_header = {CLOBBER};
      max_stack = {CLOBBER};
      ptr = {CLOBBER};
    }
}


dword_align (const char * ptr)
{
  const char * D.24162;
  const char * D.24163;
  long unsigned int D.24164;
  long unsigned int D.24165;

  D.24163 = ptr + 3;
  D.24164 = (long unsigned int) D.24163;
  D.24165 = D.24164 & 18446744073709551612;
  D.24162 = (const char *) D.24165;
  return D.24162;
}


verify_memberref_table_full (struct VerifyContext * ctx)
{
  struct MonoImage * D.24167;
  unsigned int D.24168;
  int D.24169;
  int D.24172;
  gchar * D.24175;
  struct GSList * D.24176;
  struct GSList * D.24177;
  <unnamed-unsigned:24> D.24178;
  int D.24179;
  struct MonoTableInfo * table;
  guint32 data[3];
  int i;

  try
    {
      D.24167 = ctx->image;
      table = &D.24167->tables[10];
      i = 0;
      goto <D.19024>;
      <D.19023>:
      mono_metadata_decode_row (table, i, &data, 3);
      D.24168 = data[2];
      D.24169 = is_valid_method_or_field_signature (ctx, D.24168);
      if (D.24169 == 0) goto <D.24170>; else goto <D.24171>;
      <D.24170>:
      D.24172 = ctx->report_error;
      if (D.24172 != 0) goto <D.24173>; else goto <D.24174>;
      <D.24173>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24168 = data[2];
        D.24175 = monoeg_g_strdup_printf ("Invalid MemberRef row %d Signature field  0x%08x", i, D.24168);
        vinfo->info.message = D.24175;
        vinfo->exception_type = 3;
        D.24176 = ctx->errors;
        D.24177 = monoeg_g_slist_prepend (D.24176, vinfo);
        ctx->errors = D.24177;
      }
      <D.24174>:
      ctx->valid = 0;
      return;
      <D.24171>:
      i = i + 1;
      <D.19024>:
      D.24178 = table->rows;
      D.24179 = (int) D.24178;
      if (D.24179 > i) goto <D.19023>; else goto <D.19025>;
      <D.19025>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


is_valid_method_or_field_signature (struct VerifyContext * ctx, guint32 offset)
{
  int D.24183;
  int D.24186;
  gchar * D.24189;
  struct GSList * D.24190;
  struct GSList * D.24191;
  gboolean D.24192;
  const char * ptr.127;
  unsigned int size.128;
  sizetype D.24195;
  int D.24196;
  gchar * D.24201;
  struct GSList * D.24202;
  const char * ptr.129;
  unsigned int signature.130;
  guint32 size;
  unsigned int signature;
  const char * ptr;
  const char * end;

  try
    {
      size = 0;
      signature = 0;
      ptr = 0B;
      D.24183 = decode_signature_header (ctx, offset, &size, &ptr);
      if (D.24183 == 0) goto <D.24184>; else goto <D.24185>;
      <D.24184>:
      D.24186 = ctx->report_error;
      if (D.24186 != 0) goto <D.24187>; else goto <D.24188>;
      <D.24187>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24189 = monoeg_strdup ("MemberRefSig: Could not decode signature header");
        vinfo->info.message = D.24189;
        vinfo->exception_type = 3;
        D.24190 = ctx->errors;
        D.24191 = monoeg_g_slist_prepend (D.24190, vinfo);
        ctx->errors = D.24191;
      }
      <D.24188>:
      ctx->valid = 0;
      D.24192 = 0;
      return D.24192;
      <D.24185>:
      ptr.127 = ptr;
      size.128 = size;
      D.24195 = (sizetype) size.128;
      end = ptr.127 + D.24195;
      D.24196 = safe_read (&ptr, end, &signature, 1);
      if (D.24196 == 0) goto <D.24197>; else goto <D.24198>;
      <D.24197>:
      D.24186 = ctx->report_error;
      if (D.24186 != 0) goto <D.24199>; else goto <D.24200>;
      <D.24199>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24201 = monoeg_strdup ("MemberRefSig: Not enough room for the call conv");
        vinfo->info.message = D.24201;
        vinfo->exception_type = 3;
        D.24190 = ctx->errors;
        D.24202 = monoeg_g_slist_prepend (D.24190, vinfo);
        ctx->errors = D.24202;
      }
      <D.24200>:
      ctx->valid = 0;
      D.24192 = 0;
      return D.24192;
      <D.24198>:
      ptr.127 = ptr;
      ptr.129 = ptr.127 + 18446744073709551615;
      ptr = ptr.129;
      signature.130 = signature;
      if (signature.130 == 6) goto <D.24205>; else goto <D.24206>;
      <D.24205>:
      D.24192 = parse_field (ctx, &ptr, end);
      return D.24192;
      <D.24206>:
      D.24192 = parse_method_signature (ctx, &ptr, end, 1, 0);
      return D.24192;
    }
  finally
    {
      size = {CLOBBER};
      signature = {CLOBBER};
      ptr = {CLOBBER};
    }
}


verify_cattr_table_full (struct VerifyContext * ctx)
{
  struct MonoImage * D.24209;
  unsigned int D.24210;
  int D.24211;
  int D.24214;
  gchar * D.24217;
  struct GSList * D.24218;
  struct GSList * D.24219;
  unsigned int D.24220;
  unsigned int D.24221;
  gchar * D.24224;
  struct GSList * D.24225;
  int D.24226;
  _Bool D.24227;
  long int D.24228;
  long int D.24229;
  const char * ptr.131;
  unsigned int size.132;
  int D.24234;
  gchar * D.24239;
  struct GSList * D.24240;
  <unnamed-unsigned:24> D.24241;
  int D.24242;
  struct MonoTableInfo * table;
  struct MonoMethod * ctor;
  const char * ptr;
  guint32 data[3];
  guint32 mtoken;
  guint32 size;
  int i;

  try
    {
      D.24209 = ctx->image;
      table = &D.24209->tables[12];
      i = 0;
      goto <D.19070>;
      <D.19069>:
      mono_metadata_decode_row (table, i, &data, 3);
      D.24210 = data[2];
      D.24211 = is_valid_cattr_blob (ctx, D.24210);
      if (D.24211 == 0) goto <D.24212>; else goto <D.24213>;
      <D.24212>:
      D.24214 = ctx->report_error;
      if (D.24214 != 0) goto <D.24215>; else goto <D.24216>;
      <D.24215>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24210 = data[2];
        D.24217 = monoeg_g_strdup_printf ("Invalid CustomAttribute row %d Value field 0x%08x", i, D.24210);
        vinfo->info.message = D.24217;
        vinfo->exception_type = 3;
        D.24218 = ctx->errors;
        D.24219 = monoeg_g_slist_prepend (D.24218, vinfo);
        ctx->errors = D.24219;
      }
      <D.24216>:
      ctx->valid = 0;
      return;
      <D.24213>:
      D.24220 = data[1];
      mtoken = D.24220 >> 3;
      D.24220 = data[1];
      D.24221 = D.24220 & 7;
      switch (D.24221) <default: <D.19066>, case 2: <D.19063>, case 3: <D.19065>>
      <D.19063>:
      mtoken = mtoken | 100663296;
      goto <D.19064>;
      <D.19065>:
      mtoken = mtoken | 167772160;
      goto <D.19064>;
      <D.19066>:
      D.24214 = ctx->report_error;
      if (D.24214 != 0) goto <D.24222>; else goto <D.24223>;
      <D.24222>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24220 = data[1];
        D.24224 = monoeg_g_strdup_printf ("Invalid CustomAttribute constructor row %d Token 0x%08x", i, D.24220);
        vinfo->info.message = D.24224;
        vinfo->exception_type = 3;
        D.24218 = ctx->errors;
        D.24225 = monoeg_g_slist_prepend (D.24218, vinfo);
        ctx->errors = D.24225;
      }
      <D.24223>:
      ctx->valid = 0;
      return;
      <D.19064>:
      D.24209 = ctx->image;
      ctor = mono_get_method (D.24209, mtoken, 0B);
      D.24210 = data[2];
      D.24226 = decode_signature_header (ctx, D.24210, &size, &ptr);
      D.24227 = D.24226 == 0;
      D.24228 = (long int) D.24227;
      D.24229 = __builtin_expect (D.24228, 0);
      if (D.24229 != 0) goto <D.24230>; else goto <D.24231>;
      <D.24230>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "metadata-verify.c", 2956, "decode_signature_header (ctx, data [MONO_CUSTOM_ATTR_VALUE], &size, &ptr)");
      <D.24231>:
      ptr.131 = ptr;
      size.132 = size;
      D.24234 = is_valid_cattr_content (ctx, ctor, ptr.131, size.132);
      if (D.24234 == 0) goto <D.24235>; else goto <D.24236>;
      <D.24235>:
      D.24214 = ctx->report_error;
      if (D.24214 != 0) goto <D.24237>; else goto <D.24238>;
      <D.24237>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24210 = data[2];
        D.24239 = monoeg_g_strdup_printf ("Invalid CustomAttribute content row %d Value field 0x%08x", i, D.24210);
        vinfo->info.message = D.24239;
        vinfo->exception_type = 3;
        D.24218 = ctx->errors;
        D.24240 = monoeg_g_slist_prepend (D.24218, vinfo);
        ctx->errors = D.24240;
      }
      <D.24238>:
      ctx->valid = 0;
      return;
      <D.24236>:
      i = i + 1;
      <D.19070>:
      D.24241 = table->rows;
      D.24242 = (int) D.24241;
      if (D.24242 > i) goto <D.19069>; else goto <D.19071>;
      <D.19071>:
    }
  finally
    {
      ptr = {CLOBBER};
      data = {CLOBBER};
      size = {CLOBBER};
    }
}


is_valid_cattr_blob (struct VerifyContext * ctx, guint32 offset)
{
  gboolean D.24248;
  int D.24249;
  int D.24252;
  gchar * D.24255;
  struct GSList * D.24256;
  struct GSList * D.24257;
  const char * ptr.133;
  unsigned int size.134;
  sizetype D.24260;
  int D.24261;
  gchar * D.24266;
  struct GSList * D.24267;
  unsigned int prolog.135;
  gchar * D.24273;
  struct GSList * D.24274;
  guint32 size;
  unsigned int prolog;
  const char * ptr;
  const char * end;

  try
    {
      size = 0;
      prolog = 0;
      ptr = 0B;
      if (offset == 0) goto <D.24246>; else goto <D.24247>;
      <D.24246>:
      D.24248 = 1;
      return D.24248;
      <D.24247>:
      D.24249 = decode_signature_header (ctx, offset, &size, &ptr);
      if (D.24249 == 0) goto <D.24250>; else goto <D.24251>;
      <D.24250>:
      D.24252 = ctx->report_error;
      if (D.24252 != 0) goto <D.24253>; else goto <D.24254>;
      <D.24253>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24255 = monoeg_strdup ("CustomAttribute: Could not decode signature header");
        vinfo->info.message = D.24255;
        vinfo->exception_type = 3;
        D.24256 = ctx->errors;
        D.24257 = monoeg_g_slist_prepend (D.24256, vinfo);
        ctx->errors = D.24257;
      }
      <D.24254>:
      ctx->valid = 0;
      D.24248 = 0;
      return D.24248;
      <D.24251>:
      ptr.133 = ptr;
      size.134 = size;
      D.24260 = (sizetype) size.134;
      end = ptr.133 + D.24260;
      D.24261 = safe_read (&ptr, end, &prolog, 2);
      if (D.24261 == 0) goto <D.24262>; else goto <D.24263>;
      <D.24262>:
      D.24252 = ctx->report_error;
      if (D.24252 != 0) goto <D.24264>; else goto <D.24265>;
      <D.24264>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24266 = monoeg_strdup ("CustomAttribute: Not enough room for prolog");
        vinfo->info.message = D.24266;
        vinfo->exception_type = 3;
        D.24256 = ctx->errors;
        D.24267 = monoeg_g_slist_prepend (D.24256, vinfo);
        ctx->errors = D.24267;
      }
      <D.24265>:
      ctx->valid = 0;
      D.24248 = 0;
      return D.24248;
      <D.24263>:
      prolog.135 = prolog;
      if (prolog.135 != 1) goto <D.24269>; else goto <D.24270>;
      <D.24269>:
      D.24252 = ctx->report_error;
      if (D.24252 != 0) goto <D.24271>; else goto <D.24272>;
      <D.24271>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        prolog.135 = prolog;
        D.24273 = monoeg_g_strdup_printf ("CustomAttribute: Prolog is 0x%x, expected 0x1", prolog.135);
        vinfo->info.message = D.24273;
        vinfo->exception_type = 3;
        D.24256 = ctx->errors;
        D.24274 = monoeg_g_slist_prepend (D.24256, vinfo);
        ctx->errors = D.24274;
      }
      <D.24272>:
      ctx->valid = 0;
      D.24248 = 0;
      return D.24248;
      <D.24270>:
      D.24248 = 1;
      return D.24248;
    }
  finally
    {
      size = {CLOBBER};
      prolog = {CLOBBER};
      ptr = {CLOBBER};
    }
}


is_valid_cattr_content (struct VerifyContext * ctx, struct MonoMethod * ctor, const char * ptr, guint32 size)
{
  int D.24279;
  gchar * D.24282;
  struct GSList * D.24283;
  struct GSList * D.24284;
  gboolean D.24285;
  int D.24286;
  const char * D.24291;
  gchar * D.24292;
  struct GSList * D.24293;
  short int D.24296;
  long unsigned int D.24298;
  long unsigned int D.24299;
  gchar * D.24302;
  struct GSList * D.24303;
  const char * ptr.136;
  sizetype D.24305;
  int D.24306;
  gchar * D.24311;
  struct GSList * D.24312;
  unsigned int prolog.137;
  gchar * D.24318;
  struct GSList * D.24319;
  short unsigned int D.24320;
  int D.24321;
  int D.24324;
  gchar * D.24329;
  struct GSList * D.24330;
  int D.24331;
  gchar * D.24336;
  struct GSList * D.24337;
  unsigned int kind.138;
  unsigned int D.24339;
  gchar * D.24344;
  struct GSList * D.24345;
  int D.24346;
  gchar * D.24351;
  struct GSList * D.24352;
  unsigned int D.24353;
  unsigned char D.24356;
  struct MonoClass * D.24365;
  struct MonoClass * D.24369;
  int D.24373;
  gchar * D.24378;
  struct GSList * D.24379;
  unsigned int etype.139;
  unsigned int D.24393;
  unsigned char iftmp.140;
  gchar * D.24401;
  struct GSList * D.24402;
  struct MonoClass * D.24403;
  gchar * D.24407;
  struct GSList * D.24408;
  int D.24409;
  int D.24412;
  unsigned int i.141;
  unsigned int num_named.142;
  struct MonoError error;
  unsigned int prolog;
  const char * end;
  struct MonoMethodSignature * sig;
  int args;
  int i;
  unsigned int num_named;

  try
    {
      prolog = 0;
      if (ctor == 0B) goto <D.24277>; else goto <D.24278>;
      <D.24277>:
      D.24279 = ctx->report_error;
      if (D.24279 != 0) goto <D.24280>; else goto <D.24281>;
      <D.24280>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24282 = monoeg_strdup ("CustomAttribute: Invalid constructor");
        vinfo->info.message = D.24282;
        vinfo->exception_type = 3;
        D.24283 = ctx->errors;
        D.24284 = monoeg_g_slist_prepend (D.24283, vinfo);
        ctx->errors = D.24284;
      }
      <D.24281>:
      ctx->valid = 0;
      D.24285 = 0;
      return D.24285;
      <D.24278>:
      sig = mono_method_signature_checked (ctor, &error);
      D.24286 = mono_error_ok (&error);
      if (D.24286 == 0) goto <D.24287>; else goto <D.24288>;
      <D.24287>:
      D.24279 = ctx->report_error;
      if (D.24279 != 0) goto <D.24289>; else goto <D.24290>;
      <D.24289>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24291 = mono_error_get_message (&error);
        D.24292 = monoeg_g_strdup_printf ("CustomAttribute: Invalid constructor signature %s", D.24291);
        vinfo->info.message = D.24292;
        vinfo->exception_type = 3;
        D.24283 = ctx->errors;
        D.24293 = monoeg_g_slist_prepend (D.24283, vinfo);
        ctx->errors = D.24293;
      }
      <D.24290>:
      ctx->valid = 0;
      mono_error_cleanup (&error);
      D.24285 = 0;
      return D.24285;
      <D.24288>:
      D.24296 = sig->sentinelpos;
      if (D.24296 != -1) goto <D.24294>; else goto <D.24297>;
      <D.24297>:
      D.24298 = BIT_FIELD_REF <*sig, 64, 64>;
      D.24299 = D.24298 & 64512;
      if (D.24299 == 5120) goto <D.24294>; else goto <D.24295>;
      <D.24294>:
      D.24279 = ctx->report_error;
      if (D.24279 != 0) goto <D.24300>; else goto <D.24301>;
      <D.24300>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24302 = monoeg_strdup ("CustomAttribute: Constructor cannot have VARAG signature");
        vinfo->info.message = D.24302;
        vinfo->exception_type = 3;
        D.24283 = ctx->errors;
        D.24303 = monoeg_g_slist_prepend (D.24283, vinfo);
        ctx->errors = D.24303;
      }
      <D.24301>:
      ctx->valid = 0;
      D.24285 = 0;
      return D.24285;
      <D.24295>:
      ptr.136 = ptr;
      D.24305 = (sizetype) size;
      end = ptr.136 + D.24305;
      D.24306 = safe_read (&ptr, end, &prolog, 2);
      if (D.24306 == 0) goto <D.24307>; else goto <D.24308>;
      <D.24307>:
      D.24279 = ctx->report_error;
      if (D.24279 != 0) goto <D.24309>; else goto <D.24310>;
      <D.24309>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24311 = monoeg_strdup ("CustomAttribute: Not enough room for prolog");
        vinfo->info.message = D.24311;
        vinfo->exception_type = 3;
        D.24283 = ctx->errors;
        D.24312 = monoeg_g_slist_prepend (D.24283, vinfo);
        ctx->errors = D.24312;
      }
      <D.24310>:
      ctx->valid = 0;
      D.24285 = 0;
      return D.24285;
      <D.24308>:
      prolog.137 = prolog;
      if (prolog.137 != 1) goto <D.24314>; else goto <D.24315>;
      <D.24314>:
      D.24279 = ctx->report_error;
      if (D.24279 != 0) goto <D.24316>; else goto <D.24317>;
      <D.24316>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        prolog.137 = prolog;
        D.24318 = monoeg_g_strdup_printf ("CustomAttribute: Prolog is 0x%x, expected 0x1", prolog.137);
        vinfo->info.message = D.24318;
        vinfo->exception_type = 3;
        D.24283 = ctx->errors;
        D.24319 = monoeg_g_slist_prepend (D.24283, vinfo);
        ctx->errors = D.24319;
      }
      <D.24317>:
      ctx->valid = 0;
      D.24285 = 0;
      return D.24285;
      <D.24315>:
      D.24320 = sig->param_count;
      args = (int) D.24320;
      i = 0;
      goto <D.18630>;
      <D.18629>:
      {
        struct MonoType * arg_type;

        arg_type = sig->params[i];
        D.24321 = is_valid_fixed_param (ctx, arg_type, &ptr, end);
        if (D.24321 == 0) goto <D.24322>; else goto <D.24323>;
        <D.24322>:
        D.24285 = 0;
        return D.24285;
        <D.24323>:
      }
      i = i + 1;
      <D.18630>:
      if (i < args) goto <D.18629>; else goto <D.18631>;
      <D.18631>:
      D.24324 = safe_read (&ptr, end, &num_named, 2);
      if (D.24324 == 0) goto <D.24325>; else goto <D.24326>;
      <D.24325>:
      D.24279 = ctx->report_error;
      if (D.24279 != 0) goto <D.24327>; else goto <D.24328>;
      <D.24327>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24329 = monoeg_strdup ("CustomAttribute: Not enough space for num_named field");
        vinfo->info.message = D.24329;
        vinfo->exception_type = 3;
        D.24283 = ctx->errors;
        D.24330 = monoeg_g_slist_prepend (D.24283, vinfo);
        ctx->errors = D.24330;
      }
      <D.24328>:
      ctx->valid = 0;
      D.24285 = 0;
      return D.24285;
      <D.24326>:
      i = 0;
      goto <D.18646>;
      <D.18645>:
      {
        struct MonoType * type;
        struct MonoType simple_type;
        unsigned int kind;

        try
          {
            simple_type = {};
            D.24331 = safe_read (&ptr, end, &kind, 1);
            if (D.24331 == 0) goto <D.24332>; else goto <D.24333>;
            <D.24332>:
            D.24279 = ctx->report_error;
            if (D.24279 != 0) goto <D.24334>; else goto <D.24335>;
            <D.24334>:
            {
              struct MonoVerifyInfoExtended * vinfo;

              vinfo = monoeg_malloc (24);
              vinfo->info.status = 1;
              D.24336 = monoeg_g_strdup_printf ("CustomAttribute: Not enough space for named parameter %d kind", i);
              vinfo->info.message = D.24336;
              vinfo->exception_type = 3;
              D.24283 = ctx->errors;
              D.24337 = monoeg_g_slist_prepend (D.24283, vinfo);
              ctx->errors = D.24337;
            }
            <D.24335>:
            ctx->valid = 0;
            D.24285 = 0;
            return D.24285;
            <D.24333>:
            kind.138 = kind;
            D.24339 = kind.138 + 4294967213;
            if (D.24339 > 1) goto <D.24340>; else goto <D.24341>;
            <D.24340>:
            D.24279 = ctx->report_error;
            if (D.24279 != 0) goto <D.24342>; else goto <D.24343>;
            <D.24342>:
            {
              struct MonoVerifyInfoExtended * vinfo;

              vinfo = monoeg_malloc (24);
              vinfo->info.status = 1;
              kind.138 = kind;
              D.24344 = monoeg_g_strdup_printf ("CustomAttribute: Invalid named parameter %d kind %x", i, kind.138);
              vinfo->info.message = D.24344;
              vinfo->exception_type = 3;
              D.24283 = ctx->errors;
              D.24345 = monoeg_g_slist_prepend (D.24283, vinfo);
              ctx->errors = D.24345;
            }
            <D.24343>:
            ctx->valid = 0;
            D.24285 = 0;
            return D.24285;
            <D.24341>:
            D.24346 = safe_read (&ptr, end, &kind, 1);
            if (D.24346 == 0) goto <D.24347>; else goto <D.24348>;
            <D.24347>:
            D.24279 = ctx->report_error;
            if (D.24279 != 0) goto <D.24349>; else goto <D.24350>;
            <D.24349>:
            {
              struct MonoVerifyInfoExtended * vinfo;

              vinfo = monoeg_malloc (24);
              vinfo->info.status = 1;
              D.24351 = monoeg_g_strdup_printf ("CustomAttribute: Not enough space for named parameter %d type", i);
              vinfo->info.message = D.24351;
              vinfo->exception_type = 3;
              D.24283 = ctx->errors;
              D.24352 = monoeg_g_slist_prepend (D.24283, vinfo);
              ctx->errors = D.24352;
            }
            <D.24350>:
            ctx->valid = 0;
            D.24285 = 0;
            return D.24285;
            <D.24348>:
            kind.138 = kind;
            D.24353 = kind.138 + 4294967294;
            if (D.24353 <= 12) goto <D.24354>; else goto <D.24355>;
            <D.24354>:
            kind.138 = kind;
            D.24356 = (unsigned char) kind.138;
            simple_type.type = D.24356;
            type = &simple_type;
            goto <D.24357>;
            <D.24355>:
            kind.138 = kind;
            if (kind.138 == 85) goto <D.24358>; else goto <D.24359>;
            <D.24358>:
            {
              struct MonoClass * klass;

              klass = get_enum_by_encoded_name (ctx, &ptr, end);
              if (klass == 0B) goto <D.24360>; else goto <D.24361>;
              <D.24360>:
              D.24285 = 0;
              return D.24285;
              <D.24361>:
              type = &klass->byval_arg;
            }
            goto <D.24362>;
            <D.24359>:
            kind.138 = kind;
            if (kind.138 == 80) goto <D.24363>; else goto <D.24364>;
            <D.24363>:
            D.24365 = mono_defaults.systemtype_class;
            type = &D.24365->byval_arg;
            goto <D.24366>;
            <D.24364>:
            kind.138 = kind;
            if (kind.138 == 81) goto <D.24367>; else goto <D.24368>;
            <D.24367>:
            D.24369 = mono_defaults.object_class;
            type = &D.24369->byval_arg;
            goto <D.24370>;
            <D.24368>:
            kind.138 = kind;
            if (kind.138 == 29) goto <D.24371>; else goto <D.24372>;
            <D.24371>:
            {
              struct MonoClass * klass;
              unsigned int etype;

              try
                {
                  etype = 0;
                  D.24373 = safe_read (&ptr, end, &etype, 1);
                  if (D.24373 == 0) goto <D.24374>; else goto <D.24375>;
                  <D.24374>:
                  D.24279 = ctx->report_error;
                  if (D.24279 != 0) goto <D.24376>; else goto <D.24377>;
                  <D.24376>:
                  {
                    struct MonoVerifyInfoExtended * vinfo;

                    vinfo = monoeg_malloc (24);
                    vinfo->info.status = 1;
                    D.24378 = monoeg_strdup ("CustomAttribute: Not enough room for array element type");
                    vinfo->info.message = D.24378;
                    vinfo->exception_type = 3;
                    D.24283 = ctx->errors;
                    D.24379 = monoeg_g_slist_prepend (D.24283, vinfo);
                    ctx->errors = D.24379;
                  }
                  <D.24377>:
                  ctx->valid = 0;
                  D.24285 = 0;
                  return D.24285;
                  <D.24375>:
                  etype.139 = etype;
                  if (etype.139 == 85) goto <D.24381>; else goto <D.24382>;
                  <D.24381>:
                  klass = get_enum_by_encoded_name (ctx, &ptr, end);
                  if (klass == 0B) goto <D.24383>; else goto <D.24384>;
                  <D.24383>:
                  D.24285 = 0;
                  return D.24285;
                  <D.24384>:
                  goto <D.24385>;
                  <D.24382>:
                  etype.139 = etype;
                  if (etype.139 == 80) goto <D.24386>; else goto <D.24389>;
                  <D.24389>:
                  etype.139 = etype;
                  if (etype.139 == 18) goto <D.24386>; else goto <D.24387>;
                  <D.24386>:
                  klass = mono_defaults.systemtype_class;
                  goto <D.24388>;
                  <D.24387>:
                  etype.139 = etype;
                  D.24393 = etype.139 + 4294967294;
                  if (D.24393 <= 12) goto <D.24390>; else goto <D.24394>;
                  <D.24394>:
                  etype.139 = etype;
                  if (etype.139 == 81) goto <D.24390>; else goto <D.24391>;
                  <D.24390>:
                  etype.139 = etype;
                  if (etype.139 != 81) goto <D.24396>; else goto <D.24397>;
                  <D.24396>:
                  etype.139 = etype;
                  iftmp.140 = (unsigned char) etype.139;
                  goto <D.24398>;
                  <D.24397>:
                  iftmp.140 = 28;
                  <D.24398>:
                  simple_type.type = iftmp.140;
                  klass = mono_class_from_mono_type (&simple_type);
                  goto <D.24392>;
                  <D.24391>:
                  D.24279 = ctx->report_error;
                  if (D.24279 != 0) goto <D.24399>; else goto <D.24400>;
                  <D.24399>:
                  {
                    struct MonoVerifyInfoExtended * vinfo;

                    vinfo = monoeg_malloc (24);
                    vinfo->info.status = 1;
                    etype.139 = etype;
                    D.24401 = monoeg_g_strdup_printf ("CustomAttribute: Invalid array element type %x", etype.139);
                    vinfo->info.message = D.24401;
                    vinfo->exception_type = 3;
                    D.24283 = ctx->errors;
                    D.24402 = monoeg_g_slist_prepend (D.24283, vinfo);
                    ctx->errors = D.24402;
                  }
                  <D.24400>:
                  ctx->valid = 0;
                  D.24285 = 0;
                  return D.24285;
                  <D.24392>:
                  <D.24388>:
                  <D.24385>:
                  D.24403 = mono_array_class_get (klass, 1);
                  type = &D.24403->byval_arg;
                }
              finally
                {
                  etype = {CLOBBER};
                }
            }
            goto <D.24404>;
            <D.24372>:
            D.24279 = ctx->report_error;
            if (D.24279 != 0) goto <D.24405>; else goto <D.24406>;
            <D.24405>:
            {
              struct MonoVerifyInfoExtended * vinfo;

              vinfo = monoeg_malloc (24);
              vinfo->info.status = 1;
              kind.138 = kind;
              D.24407 = monoeg_g_strdup_printf ("CustomAttribute: Invalid named parameter type %x", kind.138);
              vinfo->info.message = D.24407;
              vinfo->exception_type = 3;
              D.24283 = ctx->errors;
              D.24408 = monoeg_g_slist_prepend (D.24283, vinfo);
              ctx->errors = D.24408;
            }
            <D.24406>:
            ctx->valid = 0;
            D.24285 = 0;
            return D.24285;
            <D.24404>:
            <D.24370>:
            <D.24366>:
            <D.24362>:
            <D.24357>:
            D.24409 = is_valid_ser_string (ctx, &ptr, end);
            if (D.24409 == 0) goto <D.24410>; else goto <D.24411>;
            <D.24410>:
            D.24285 = 0;
            return D.24285;
            <D.24411>:
            D.24412 = is_valid_fixed_param (ctx, type, &ptr, end);
            if (D.24412 == 0) goto <D.24413>; else goto <D.24414>;
            <D.24413>:
            D.24285 = 0;
            return D.24285;
            <D.24414>:
          }
        finally
          {
            simple_type = {CLOBBER};
            kind = {CLOBBER};
          }
      }
      i = i + 1;
      <D.18646>:
      i.141 = (unsigned int) i;
      num_named.142 = num_named;
      if (i.141 < num_named.142) goto <D.18645>; else goto <D.18647>;
      <D.18647>:
      D.24285 = 1;
      return D.24285;
    }
  finally
    {
      error = {CLOBBER};
      prolog = {CLOBBER};
      num_named = {CLOBBER};
    }
}


get_enum_by_encoded_name (struct VerifyContext * ctx, const char * * _ptr, const char * end)
{
  const char * ptr.143;
  int D.24424;
  struct MonoClass * D.24427;
  const char * str_start.144;
  unsigned int str_len.145;
  int D.24433;
  gchar * D.24436;
  struct GSList * D.24437;
  struct GSList * D.24438;
  unsigned int D.24439;
  sizetype D.24440;
  char * D.24441;
  struct MonoImage * D.24442;
  gchar * D.24447;
  struct GSList * D.24448;
  long unsigned int D.24452;
  long unsigned int D.24453;
  const char * D.24456;
  const char * D.24457;
  gchar * D.24458;
  struct GSList * D.24459;
  const char * ptr.146;
  struct MonoType * type;
  struct MonoClass * klass;
  const char * str_start;
  const char * ptr;
  char * enum_name;
  guint32 str_len;

  try
    {
      str_start = 0B;
      ptr.143 = *_ptr;
      ptr = ptr.143;
      str_len = 0;
      D.24424 = is_valid_ser_string_full (ctx, &str_start, &str_len, &ptr, end);
      if (D.24424 == 0) goto <D.24425>; else goto <D.24426>;
      <D.24425>:
      D.24427 = 0B;
      return D.24427;
      <D.24426>:
      str_start.144 = str_start;
      if (str_start.144 == 0B) goto <D.24428>; else goto <D.24431>;
      <D.24431>:
      str_len.145 = str_len;
      if (str_len.145 == 0) goto <D.24428>; else goto <D.24429>;
      <D.24428>:
      D.24433 = ctx->report_error;
      if (D.24433 != 0) goto <D.24434>; else goto <D.24435>;
      <D.24434>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24436 = monoeg_strdup ("CustomAttribute: Null or empty enum name");
        vinfo->info.message = D.24436;
        vinfo->exception_type = 3;
        D.24437 = ctx->errors;
        D.24438 = monoeg_g_slist_prepend (D.24437, vinfo);
        ctx->errors = D.24438;
      }
      <D.24435>:
      ctx->valid = 0;
      D.24427 = 0B;
      return D.24427;
      <D.24429>:
      str_start.144 = str_start;
      str_len.145 = str_len;
      D.24439 = str_len.145 + 1;
      enum_name = monoeg_g_memdup (str_start.144, D.24439);
      str_len.145 = str_len;
      D.24440 = (sizetype) str_len.145;
      D.24441 = enum_name + D.24440;
      *D.24441 = 0;
      D.24442 = ctx->image;
      type = mono_reflection_type_from_name (enum_name, D.24442);
      if (type == 0B) goto <D.24443>; else goto <D.24444>;
      <D.24443>:
      D.24433 = ctx->report_error;
      if (D.24433 != 0) goto <D.24445>; else goto <D.24446>;
      <D.24445>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24447 = monoeg_g_strdup_printf ("CustomAttribute: Invalid enum class %s", enum_name);
        vinfo->info.message = D.24447;
        vinfo->exception_type = 3;
        D.24437 = ctx->errors;
        D.24448 = monoeg_g_slist_prepend (D.24437, vinfo);
        ctx->errors = D.24448;
      }
      <D.24446>:
      ctx->valid = 0;
      monoeg_g_free (enum_name);
      D.24427 = 0B;
      return D.24427;
      <D.24444>:
      monoeg_g_free (enum_name);
      klass = mono_class_from_mono_type (type);
      if (klass == 0B) goto <D.24449>; else goto <D.24451>;
      <D.24451>:
      D.24452 = BIT_FIELD_REF <*klass, 64, 256>;
      D.24453 = D.24452 & 576460752303423488;
      if (D.24453 == 0) goto <D.24449>; else goto <D.24450>;
      <D.24449>:
      D.24433 = ctx->report_error;
      if (D.24433 != 0) goto <D.24454>; else goto <D.24455>;
      <D.24454>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24456 = klass->name_space;
        D.24457 = klass->name;
        D.24458 = monoeg_g_strdup_printf ("CustomAttribute:Class %s::%s is not an enum", D.24456, D.24457);
        vinfo->info.message = D.24458;
        vinfo->exception_type = 3;
        D.24437 = ctx->errors;
        D.24459 = monoeg_g_slist_prepend (D.24437, vinfo);
        ctx->errors = D.24459;
      }
      <D.24455>:
      ctx->valid = 0;
      D.24427 = 0B;
      return D.24427;
      <D.24450>:
      ptr.146 = ptr;
      *_ptr = ptr.146;
      D.24427 = klass;
      return D.24427;
    }
  finally
    {
      str_start = {CLOBBER};
      ptr = {CLOBBER};
      str_len = {CLOBBER};
    }
}


is_valid_ser_string_full (struct VerifyContext * ctx, const char * * str_start, guint32 * str_len, const char * * _ptr, const char * end)
{
  const char * ptr.147;
  const char * ptr.148;
  int D.24467;
  gchar * D.24470;
  struct GSList * D.24471;
  struct GSList * D.24472;
  gboolean D.24473;
  char D.24474;
  const char * D.24477;
  int D.24478;
  gchar * D.24483;
  struct GSList * D.24484;
  unsigned int size.149;
  sizetype D.24488;
  const char * D.24489;
  long unsigned int D.24491;
  long unsigned int D.24492;
  long unsigned int ptr.150;
  gchar * D.24496;
  struct GSList * D.24497;
  guint32 size;
  const char * ptr;

  try
    {
      size = 0;
      ptr.147 = *_ptr;
      ptr = ptr.147;
      *str_start = 0B;
      *str_len = 0;
      ptr.148 = ptr;
      if (ptr.148 >= end) goto <D.24465>; else goto <D.24466>;
      <D.24465>:
      D.24467 = ctx->report_error;
      if (D.24467 != 0) goto <D.24468>; else goto <D.24469>;
      <D.24468>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24470 = monoeg_strdup ("CustomAttribute: Not enough room for string size");
        vinfo->info.message = D.24470;
        vinfo->exception_type = 3;
        D.24471 = ctx->errors;
        D.24472 = monoeg_g_slist_prepend (D.24471, vinfo);
        ctx->errors = D.24472;
      }
      <D.24469>:
      ctx->valid = 0;
      D.24473 = 0;
      return D.24473;
      <D.24466>:
      ptr.148 = ptr;
      D.24474 = *ptr.148;
      if (D.24474 == 255) goto <D.24475>; else goto <D.24476>;
      <D.24475>:
      ptr.148 = ptr;
      D.24477 = ptr.148 + 1;
      *_ptr = D.24477;
      D.24473 = 1;
      return D.24473;
      <D.24476>:
      D.24478 = safe_read_compressed_int (&ptr, end, &size);
      if (D.24478 == 0) goto <D.24479>; else goto <D.24480>;
      <D.24479>:
      D.24467 = ctx->report_error;
      if (D.24467 != 0) goto <D.24481>; else goto <D.24482>;
      <D.24481>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24483 = monoeg_strdup ("CustomAttribute: Not enough room for string size");
        vinfo->info.message = D.24483;
        vinfo->exception_type = 3;
        D.24471 = ctx->errors;
        D.24484 = monoeg_g_slist_prepend (D.24471, vinfo);
        ctx->errors = D.24484;
      }
      <D.24482>:
      ctx->valid = 0;
      D.24473 = 0;
      return D.24473;
      <D.24480>:
      ptr.148 = ptr;
      size.149 = size;
      D.24488 = (sizetype) size.149;
      D.24489 = ptr.148 + D.24488;
      if (D.24489 > end) goto <D.24485>; else goto <D.24490>;
      <D.24490>:
      size.149 = size;
      D.24491 = (long unsigned int) size.149;
      D.24492 = ~D.24491;
      ptr.148 = ptr;
      ptr.150 = (long unsigned int) ptr.148;
      if (D.24492 < ptr.150) goto <D.24485>; else goto <D.24486>;
      <D.24485>:
      D.24467 = ctx->report_error;
      if (D.24467 != 0) goto <D.24494>; else goto <D.24495>;
      <D.24494>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24496 = monoeg_strdup ("CustomAttribute: Not enough room for string");
        vinfo->info.message = D.24496;
        vinfo->exception_type = 3;
        D.24471 = ctx->errors;
        D.24497 = monoeg_g_slist_prepend (D.24471, vinfo);
        ctx->errors = D.24497;
      }
      <D.24495>:
      ctx->valid = 0;
      D.24473 = 0;
      return D.24473;
      <D.24486>:
      ptr.148 = ptr;
      *str_start = ptr.148;
      size.149 = size;
      *str_len = size.149;
      ptr.148 = ptr;
      size.149 = size;
      D.24488 = (sizetype) size.149;
      D.24489 = ptr.148 + D.24488;
      *_ptr = D.24489;
      D.24473 = 1;
      return D.24473;
    }
  finally
    {
      size = {CLOBBER};
      ptr = {CLOBBER};
    }
}


is_valid_ser_string (struct VerifyContext * ctx, const char * * _ptr, const char * end)
{
  gboolean D.24500;
  const char * dummy_str;
  guint32 dummy_int;

  try
    {
      D.24500 = is_valid_ser_string_full (ctx, &dummy_str, &dummy_int, _ptr, end);
      return D.24500;
    }
  finally
    {
      dummy_str = {CLOBBER};
      dummy_int = {CLOBBER};
    }
}


is_valid_fixed_param (struct VerifyContext * ctx, struct MonoType * mono_type, const char * * _ptr, const char * end)
{
  const char * ptr.151;
  unsigned char D.24504;
  const char * ptr.152;
  gboolean D.24506;
  int D.24507;
  int D.24510;
  gchar * D.24513;
  struct GSList * D.24514;
  struct GSList * D.24515;
  unsigned int sub_type.153;
  unsigned int D.24517;
  unsigned char D.24524;
  int D.24529;
  gchar * D.24534;
  struct GSList * D.24535;
  unsigned int etype.154;
  unsigned int D.24549;
  unsigned char iftmp.155;
  gchar * D.24557;
  struct GSList * D.24558;
  gchar * D.24561;
  struct GSList * D.24562;
  struct MonoClass * D.24563;
  const char * D.24568;
  const char * D.24569;
  gchar * D.24570;
  struct GSList * D.24571;
  long unsigned int D.24575;
  long unsigned int D.24576;
  gchar * D.24579;
  struct GSList * D.24580;
  int D.24581;
  gchar * D.24586;
  struct GSList * D.24587;
  int D.24588;
  gchar * D.24593;
  struct GSList * D.24594;
  unsigned int element_count.156;
  int D.24598;
  gchar * D.24603;
  struct GSList * D.24604;
  sizetype D.24607;
  const char * D.24608;
  long unsigned int D.24610;
  long unsigned int D.24611;
  long unsigned int ptr.157;
  gchar * D.24615;
  struct GSList * D.24616;
  struct MonoClass * klass;
  const char * ptr;
  int elem_size;
  guint32 element_count;
  guint32 i;
  int type;
  void handle_enum = <<< error >>>;

  try
    {
      ptr.151 = *_ptr;
      ptr = ptr.151;
      elem_size = 0;
      klass = mono_type->data.klass;
      D.24504 = mono_type->type;
      type = (int) D.24504;
      handle_enum:
      switch (type) <default: <D.18607>, case 2: <D.18575>, case 3: <D.18581>, case 4: <D.18576>, case 5: <D.18577>, case 6: <D.18579>, case 7: <D.18580>, case 8: <D.18582>, case 9: <D.18583>, case 10: <D.18585>, case 11: <D.18586>, case 12: <D.18584>, case 13: <D.18587>, case 14: <D.18588>, case 17: <D.18599>, case 18: <D.18597>, case 28: <D.18589>, case 29: <D.18601>>
      <D.18575>:
      <D.18576>:
      <D.18577>:
      elem_size = 1;
      goto <D.18578>;
      <D.18579>:
      <D.18580>:
      <D.18581>:
      elem_size = 2;
      goto <D.18578>;
      <D.18582>:
      <D.18583>:
      <D.18584>:
      elem_size = 4;
      goto <D.18578>;
      <D.18585>:
      <D.18586>:
      <D.18587>:
      elem_size = 8;
      goto <D.18578>;
      <D.18588>:
      ptr.152 = ptr;
      *_ptr = ptr.152;
      D.24506 = is_valid_ser_string (ctx, _ptr, end);
      return D.24506;
      <D.18589>:
      {
        unsigned int sub_type;

        try
          {
            sub_type = 0;
            D.24507 = safe_read (&ptr, end, &sub_type, 1);
            if (D.24507 == 0) goto <D.24508>; else goto <D.24509>;
            <D.24508>:
            D.24510 = ctx->report_error;
            if (D.24510 != 0) goto <D.24511>; else goto <D.24512>;
            <D.24511>:
            {
              struct MonoVerifyInfoExtended * vinfo;

              vinfo = monoeg_malloc (24);
              vinfo->info.status = 1;
              D.24513 = monoeg_strdup ("CustomAttribute: Not enough room for array type");
              vinfo->info.message = D.24513;
              vinfo->exception_type = 3;
              D.24514 = ctx->errors;
              D.24515 = monoeg_g_slist_prepend (D.24514, vinfo);
              ctx->errors = D.24515;
            }
            <D.24512>:
            ctx->valid = 0;
            D.24506 = 0;
            return D.24506;
            <D.24509>:
            sub_type.153 = sub_type;
            D.24517 = sub_type.153 + 4294967294;
            if (D.24517 <= 12) goto <D.24518>; else goto <D.24519>;
            <D.24518>:
            sub_type.153 = sub_type;
            type = (int) sub_type.153;
            goto handle_enum;
            <D.24519>:
            sub_type.153 = sub_type;
            if (sub_type.153 == 85) goto <D.24520>; else goto <D.24521>;
            <D.24520>:
            klass = get_enum_by_encoded_name (ctx, &ptr, end);
            if (klass == 0B) goto <D.24522>; else goto <D.24523>;
            <D.24522>:
            D.24506 = 0;
            return D.24506;
            <D.24523>:
            klass = klass->element_class;
            D.24524 = klass->byval_arg.type;
            type = (int) D.24524;
            goto handle_enum;
            <D.24521>:
            sub_type.153 = sub_type;
            if (sub_type.153 == 80) goto <D.24525>; else goto <D.24526>;
            <D.24525>:
            ptr.152 = ptr;
            *_ptr = ptr.152;
            D.24506 = is_valid_ser_string (ctx, _ptr, end);
            return D.24506;
            <D.24526>:
            sub_type.153 = sub_type;
            if (sub_type.153 == 29) goto <D.24527>; else goto <D.24528>;
            <D.24527>:
            {
              struct MonoType simple_type;
              unsigned int etype;

              try
                {
                  simple_type = {};
                  etype = 0;
                  D.24529 = safe_read (&ptr, end, &etype, 1);
                  if (D.24529 == 0) goto <D.24530>; else goto <D.24531>;
                  <D.24530>:
                  D.24510 = ctx->report_error;
                  if (D.24510 != 0) goto <D.24532>; else goto <D.24533>;
                  <D.24532>:
                  {
                    struct MonoVerifyInfoExtended * vinfo;

                    vinfo = monoeg_malloc (24);
                    vinfo->info.status = 1;
                    D.24534 = monoeg_strdup ("CustomAttribute: Not enough room for array element type");
                    vinfo->info.message = D.24534;
                    vinfo->exception_type = 3;
                    D.24514 = ctx->errors;
                    D.24535 = monoeg_g_slist_prepend (D.24514, vinfo);
                    ctx->errors = D.24535;
                  }
                  <D.24533>:
                  ctx->valid = 0;
                  D.24506 = 0;
                  return D.24506;
                  <D.24531>:
                  etype.154 = etype;
                  if (etype.154 == 85) goto <D.24537>; else goto <D.24538>;
                  <D.24537>:
                  klass = get_enum_by_encoded_name (ctx, &ptr, end);
                  if (klass == 0B) goto <D.24539>; else goto <D.24540>;
                  <D.24539>:
                  D.24506 = 0;
                  return D.24506;
                  <D.24540>:
                  goto <D.24541>;
                  <D.24538>:
                  etype.154 = etype;
                  if (etype.154 == 80) goto <D.24542>; else goto <D.24545>;
                  <D.24545>:
                  etype.154 = etype;
                  if (etype.154 == 18) goto <D.24542>; else goto <D.24543>;
                  <D.24542>:
                  klass = mono_defaults.systemtype_class;
                  goto <D.24544>;
                  <D.24543>:
                  etype.154 = etype;
                  D.24549 = etype.154 + 4294967294;
                  if (D.24549 <= 12) goto <D.24546>; else goto <D.24550>;
                  <D.24550>:
                  etype.154 = etype;
                  if (etype.154 == 81) goto <D.24546>; else goto <D.24547>;
                  <D.24546>:
                  etype.154 = etype;
                  if (etype.154 != 81) goto <D.24552>; else goto <D.24553>;
                  <D.24552>:
                  etype.154 = etype;
                  iftmp.155 = (unsigned char) etype.154;
                  goto <D.24554>;
                  <D.24553>:
                  iftmp.155 = 28;
                  <D.24554>:
                  simple_type.type = iftmp.155;
                  klass = mono_class_from_mono_type (&simple_type);
                  goto <D.24548>;
                  <D.24547>:
                  D.24510 = ctx->report_error;
                  if (D.24510 != 0) goto <D.24555>; else goto <D.24556>;
                  <D.24555>:
                  {
                    struct MonoVerifyInfoExtended * vinfo;

                    vinfo = monoeg_malloc (24);
                    vinfo->info.status = 1;
                    etype.154 = etype;
                    D.24557 = monoeg_g_strdup_printf ("CustomAttribute: Invalid array element type %x", etype.154);
                    vinfo->info.message = D.24557;
                    vinfo->exception_type = 3;
                    D.24514 = ctx->errors;
                    D.24558 = monoeg_g_slist_prepend (D.24514, vinfo);
                    ctx->errors = D.24558;
                  }
                  <D.24556>:
                  ctx->valid = 0;
                  D.24506 = 0;
                  return D.24506;
                  <D.24548>:
                  <D.24544>:
                  <D.24541>:
                  type = 29;
                  goto handle_enum;
                }
              finally
                {
                  simple_type = {CLOBBER};
                  etype = {CLOBBER};
                }
            }
            <D.24528>:
            D.24510 = ctx->report_error;
            if (D.24510 != 0) goto <D.24559>; else goto <D.24560>;
            <D.24559>:
            {
              struct MonoVerifyInfoExtended * vinfo;

              vinfo = monoeg_malloc (24);
              vinfo->info.status = 1;
              sub_type.153 = sub_type;
              D.24561 = monoeg_g_strdup_printf ("CustomAttribute: Invalid boxed object type %x", sub_type.153);
              vinfo->info.message = D.24561;
              vinfo->exception_type = 3;
              D.24514 = ctx->errors;
              D.24562 = monoeg_g_slist_prepend (D.24514, vinfo);
              ctx->errors = D.24562;
            }
            <D.24560>:
            ctx->valid = 0;
            D.24506 = 0;
            return D.24506;
          }
        finally
          {
            sub_type = {CLOBBER};
          }
      }
      <D.18597>:
      D.24563 = mono_defaults.systemtype_class;
      if (D.24563 != klass) goto <D.24564>; else goto <D.24565>;
      <D.24564>:
      D.24510 = ctx->report_error;
      if (D.24510 != 0) goto <D.24566>; else goto <D.24567>;
      <D.24566>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24568 = klass->name_space;
        D.24569 = klass->name;
        D.24570 = monoeg_g_strdup_printf ("CustomAttribute: Invalid class parameter type %s:%s ", D.24568, D.24569);
        vinfo->info.message = D.24570;
        vinfo->exception_type = 3;
        D.24514 = ctx->errors;
        D.24571 = monoeg_g_slist_prepend (D.24514, vinfo);
        ctx->errors = D.24571;
      }
      <D.24567>:
      ctx->valid = 0;
      D.24506 = 0;
      return D.24506;
      <D.24565>:
      ptr.152 = ptr;
      *_ptr = ptr.152;
      D.24506 = is_valid_ser_string (ctx, _ptr, end);
      return D.24506;
      <D.18599>:
      if (klass == 0B) goto <D.24572>; else goto <D.24574>;
      <D.24574>:
      D.24575 = BIT_FIELD_REF <*klass, 64, 256>;
      D.24576 = D.24575 & 576460752303423488;
      if (D.24576 == 0) goto <D.24572>; else goto <D.24573>;
      <D.24572>:
      D.24510 = ctx->report_error;
      if (D.24510 != 0) goto <D.24577>; else goto <D.24578>;
      <D.24577>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24568 = klass->name_space;
        D.24569 = klass->name;
        D.24579 = monoeg_g_strdup_printf ("CustomAttribute: Invalid valuetype parameter expected enum %s:%s ", D.24568, D.24569);
        vinfo->info.message = D.24579;
        vinfo->exception_type = 3;
        D.24514 = ctx->errors;
        D.24580 = monoeg_g_slist_prepend (D.24514, vinfo);
        ctx->errors = D.24580;
      }
      <D.24578>:
      ctx->valid = 0;
      D.24506 = 0;
      return D.24506;
      <D.24573>:
      klass = klass->element_class;
      D.24524 = klass->byval_arg.type;
      type = (int) D.24524;
      goto handle_enum;
      <D.18601>:
      mono_type = &klass->byval_arg;
      D.24581 = is_valid_cattr_type (mono_type);
      if (D.24581 == 0) goto <D.24582>; else goto <D.24583>;
      <D.24582>:
      D.24510 = ctx->report_error;
      if (D.24510 != 0) goto <D.24584>; else goto <D.24585>;
      <D.24584>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24568 = klass->name_space;
        D.24569 = klass->name;
        D.24586 = monoeg_g_strdup_printf ("CustomAttribute: Invalid array element type %s:%s ", D.24568, D.24569);
        vinfo->info.message = D.24586;
        vinfo->exception_type = 3;
        D.24514 = ctx->errors;
        D.24587 = monoeg_g_slist_prepend (D.24514, vinfo);
        ctx->errors = D.24587;
      }
      <D.24585>:
      ctx->valid = 0;
      D.24506 = 0;
      return D.24506;
      <D.24583>:
      D.24588 = safe_read (&ptr, end, &element_count, 4);
      if (D.24588 == 0) goto <D.24589>; else goto <D.24590>;
      <D.24589>:
      D.24510 = ctx->report_error;
      if (D.24510 != 0) goto <D.24591>; else goto <D.24592>;
      <D.24591>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24568 = klass->name_space;
        D.24569 = klass->name;
        D.24593 = monoeg_g_strdup_printf ("CustomAttribute: Invalid class parameter type %s:%s ", D.24568, D.24569);
        vinfo->info.message = D.24593;
        vinfo->exception_type = 3;
        D.24514 = ctx->errors;
        D.24594 = monoeg_g_slist_prepend (D.24514, vinfo);
        ctx->errors = D.24594;
      }
      <D.24592>:
      ctx->valid = 0;
      D.24506 = 0;
      return D.24506;
      <D.24590>:
      element_count.156 = element_count;
      if (element_count.156 == 4294967295) goto <D.24596>; else goto <D.24597>;
      <D.24596>:
      ptr.152 = ptr;
      *_ptr = ptr.152;
      D.24506 = 1;
      return D.24506;
      <D.24597>:
      i = 0;
      goto <D.18605>;
      <D.18604>:
      D.24598 = is_valid_fixed_param (ctx, mono_type, &ptr, end);
      if (D.24598 == 0) goto <D.24599>; else goto <D.24600>;
      <D.24599>:
      D.24506 = 0;
      return D.24506;
      <D.24600>:
      i = i + 1;
      <D.18605>:
      element_count.156 = element_count;
      if (i < element_count.156) goto <D.18604>; else goto <D.18606>;
      <D.18606>:
      ptr.152 = ptr;
      *_ptr = ptr.152;
      D.24506 = 1;
      return D.24506;
      <D.18607>:
      D.24510 = ctx->report_error;
      if (D.24510 != 0) goto <D.24601>; else goto <D.24602>;
      <D.24601>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24603 = monoeg_g_strdup_printf ("CustomAttribute: Invalid parameter type %x ", type);
        vinfo->info.message = D.24603;
        vinfo->exception_type = 3;
        D.24514 = ctx->errors;
        D.24604 = monoeg_g_slist_prepend (D.24514, vinfo);
        ctx->errors = D.24604;
      }
      <D.24602>:
      ctx->valid = 0;
      D.24506 = 0;
      return D.24506;
      <D.18578>:
      ptr.152 = ptr;
      D.24607 = (sizetype) elem_size;
      D.24608 = ptr.152 + D.24607;
      if (D.24608 > end) goto <D.24605>; else goto <D.24609>;
      <D.24609>:
      D.24610 = (long unsigned int) elem_size;
      D.24611 = ~D.24610;
      ptr.152 = ptr;
      ptr.157 = (long unsigned int) ptr.152;
      if (D.24611 < ptr.157) goto <D.24605>; else goto <D.24606>;
      <D.24605>:
      D.24510 = ctx->report_error;
      if (D.24510 != 0) goto <D.24613>; else goto <D.24614>;
      <D.24613>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24615 = monoeg_strdup ("CustomAttribute: Not enough space for element");
        vinfo->info.message = D.24615;
        vinfo->exception_type = 3;
        D.24514 = ctx->errors;
        D.24616 = monoeg_g_slist_prepend (D.24514, vinfo);
        ctx->errors = D.24616;
      }
      <D.24614>:
      ctx->valid = 0;
      D.24506 = 0;
      return D.24506;
      <D.24606>:
      ptr.152 = ptr;
      D.24607 = (sizetype) elem_size;
      D.24608 = ptr.152 + D.24607;
      *_ptr = D.24608;
      D.24506 = 1;
      return D.24506;
    }
  finally
    {
      ptr = {CLOBBER};
      element_count = {CLOBBER};
    }
}


is_valid_cattr_type (struct MonoType * type)
{
  unsigned char D.24625;
  unsigned char D.24627;
  gboolean D.24628;
  int iftmp.158;
  long unsigned int D.24635;
  long unsigned int D.24636;
  struct MonoClass * D.24640;
  struct MonoClass * D.24641;
  _Bool D.24642;
  struct MonoClass * klass;

  D.24625 = type->type;
  if (D.24625 == 28) goto <D.24623>; else goto <D.24626>;
  <D.24626>:
  D.24625 = type->type;
  D.24627 = D.24625 + 254;
  if (D.24627 <= 12) goto <D.24623>; else goto <D.24624>;
  <D.24623>:
  D.24628 = 1;
  return D.24628;
  <D.24624>:
  D.24625 = type->type;
  if (D.24625 == 17) goto <D.24629>; else goto <D.24630>;
  <D.24629>:
  klass = mono_class_from_mono_type (type);
  if (klass != 0B) goto <D.24634>; else goto <D.24632>;
  <D.24634>:
  D.24635 = BIT_FIELD_REF <*klass, 64, 256>;
  D.24636 = D.24635 & 576460752303423488;
  if (D.24636 != 0) goto <D.24637>; else goto <D.24632>;
  <D.24637>:
  iftmp.158 = 1;
  goto <D.24633>;
  <D.24632>:
  iftmp.158 = 0;
  <D.24633>:
  D.24628 = iftmp.158;
  return D.24628;
  <D.24630>:
  D.24625 = type->type;
  if (D.24625 == 18) goto <D.24638>; else goto <D.24639>;
  <D.24638>:
  D.24640 = mono_class_from_mono_type (type);
  D.24641 = mono_defaults.systemtype_class;
  D.24642 = D.24640 == D.24641;
  D.24628 = (gboolean) D.24642;
  return D.24628;
  <D.24639>:
  D.24628 = 0;
  return D.24628;
}


verify_field_marshal_table_full (struct VerifyContext * ctx)
{
  struct MonoImage * D.24644;
  unsigned int D.24645;
  int D.24646;
  int D.24649;
  gchar * D.24652;
  struct GSList * D.24653;
  struct GSList * D.24654;
  <unnamed-unsigned:24> D.24655;
  int D.24656;
  struct MonoTableInfo * table;
  guint32 data[2];
  int i;

  try
    {
      D.24644 = ctx->image;
      table = &D.24644->tables[13];
      i = 0;
      goto <D.19093>;
      <D.19092>:
      mono_metadata_decode_row (table, i, &data, 2);
      D.24645 = data[1];
      D.24646 = is_valid_marshal_spec (ctx, D.24645);
      if (D.24646 == 0) goto <D.24647>; else goto <D.24648>;
      <D.24647>:
      D.24649 = ctx->report_error;
      if (D.24649 != 0) goto <D.24650>; else goto <D.24651>;
      <D.24650>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24645 = data[1];
        D.24652 = monoeg_g_strdup_printf ("Invalid FieldMarshal row %d NativeType field 0x%08x", i, D.24645);
        vinfo->info.message = D.24652;
        vinfo->exception_type = 3;
        D.24653 = ctx->errors;
        D.24654 = monoeg_g_slist_prepend (D.24653, vinfo);
        ctx->errors = D.24654;
      }
      <D.24651>:
      ctx->valid = 0;
      return;
      <D.24648>:
      i = i + 1;
      <D.19093>:
      D.24655 = table->rows;
      D.24656 = (int) D.24655;
      if (D.24656 > i) goto <D.19092>; else goto <D.19094>;
      <D.19094>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


is_valid_marshal_spec (struct VerifyContext * ctx, guint32 offset)
{
  struct MonoImage * D.24660;
  struct MonoStreamHeader * D.24661;
  gboolean D.24662;
  int iftmp.159;
  unsigned int D.24666;
  unsigned int D.24668;
  struct OffsetAndSize blob;

  try
    {
      D.24660 = ctx->image;
      D.24661 = &D.24660->heap_blob;
      blob = get_metadata_stream (ctx, D.24661); [return slot optimization]
      D.24666 = blob.size;
      if (D.24666 != 0) goto <D.24667>; else goto <D.24664>;
      <D.24667>:
      D.24666 = blob.size;
      D.24668 = D.24666 + 4294967295;
      if (D.24668 >= offset) goto <D.24669>; else goto <D.24664>;
      <D.24669>:
      iftmp.159 = 1;
      goto <D.24665>;
      <D.24664>:
      iftmp.159 = 0;
      <D.24665>:
      D.24662 = iftmp.159;
      return D.24662;
    }
  finally
    {
      blob = {CLOBBER};
    }
}


verify_decl_security_table_full (struct VerifyContext * ctx)
{
  struct MonoImage * D.24672;
  unsigned int D.24673;
  int D.24674;
  int D.24677;
  gchar * D.24680;
  struct GSList * D.24681;
  struct GSList * D.24682;
  <unnamed-unsigned:24> D.24683;
  int D.24684;
  struct MonoTableInfo * table;
  guint32 data[3];
  int i;

  try
    {
      D.24672 = ctx->image;
      table = &D.24672->tables[14];
      i = 0;
      goto <D.19115>;
      <D.19114>:
      mono_metadata_decode_row (table, i, &data, 3);
      D.24673 = data[2];
      D.24674 = is_valid_permission_set (ctx, D.24673);
      if (D.24674 == 0) goto <D.24675>; else goto <D.24676>;
      <D.24675>:
      D.24677 = ctx->report_error;
      if (D.24677 != 0) goto <D.24678>; else goto <D.24679>;
      <D.24678>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24673 = data[2];
        D.24680 = monoeg_g_strdup_printf ("Invalid DeclSecurity row %d PermissionSet field 0x%08x", i, D.24673);
        vinfo->info.message = D.24680;
        vinfo->exception_type = 3;
        D.24681 = ctx->errors;
        D.24682 = monoeg_g_slist_prepend (D.24681, vinfo);
        ctx->errors = D.24682;
      }
      <D.24679>:
      ctx->valid = 0;
      return;
      <D.24676>:
      i = i + 1;
      <D.19115>:
      D.24683 = table->rows;
      D.24684 = (int) D.24683;
      if (D.24684 > i) goto <D.19114>; else goto <D.19116>;
      <D.19116>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


is_valid_permission_set (struct VerifyContext * ctx, guint32 offset)
{
  struct MonoImage * D.24688;
  struct MonoStreamHeader * D.24689;
  gboolean D.24690;
  int iftmp.160;
  unsigned int D.24694;
  unsigned int D.24696;
  struct OffsetAndSize blob;

  try
    {
      D.24688 = ctx->image;
      D.24689 = &D.24688->heap_blob;
      blob = get_metadata_stream (ctx, D.24689); [return slot optimization]
      D.24694 = blob.size;
      if (D.24694 != 0) goto <D.24695>; else goto <D.24692>;
      <D.24695>:
      D.24694 = blob.size;
      D.24696 = D.24694 + 4294967295;
      if (D.24696 >= offset) goto <D.24697>; else goto <D.24692>;
      <D.24697>:
      iftmp.160 = 1;
      goto <D.24693>;
      <D.24692>:
      iftmp.160 = 0;
      <D.24693>:
      D.24690 = iftmp.160;
      return D.24690;
    }
  finally
    {
      blob = {CLOBBER};
    }
}


verify_standalonesig_table_full (struct VerifyContext * ctx)
{
  struct MonoImage * D.24700;
  unsigned int D.24701;
  int D.24702;
  int D.24705;
  gchar * D.24708;
  struct GSList * D.24709;
  struct GSList * D.24710;
  <unnamed-unsigned:24> D.24711;
  int D.24712;
  struct MonoTableInfo * table;
  guint32 data[1];
  int i;

  try
    {
      D.24700 = ctx->image;
      table = &D.24700->tables[17];
      i = 0;
      goto <D.19167>;
      <D.19166>:
      mono_metadata_decode_row (table, i, &data, 1);
      D.24701 = data[0];
      D.24702 = is_valid_standalonesig_blob (ctx, D.24701);
      if (D.24702 == 0) goto <D.24703>; else goto <D.24704>;
      <D.24703>:
      D.24705 = ctx->report_error;
      if (D.24705 != 0) goto <D.24706>; else goto <D.24707>;
      <D.24706>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24701 = data[0];
        D.24708 = monoeg_g_strdup_printf ("Invalid StandAloneSig row %d Signature field 0x%08x", i, D.24701);
        vinfo->info.message = D.24708;
        vinfo->exception_type = 3;
        D.24709 = ctx->errors;
        D.24710 = monoeg_g_slist_prepend (D.24709, vinfo);
        ctx->errors = D.24710;
      }
      <D.24707>:
      ctx->valid = 0;
      return;
      <D.24704>:
      i = i + 1;
      <D.19167>:
      D.24711 = table->rows;
      D.24712 = (int) D.24711;
      if (D.24712 > i) goto <D.19166>; else goto <D.19168>;
      <D.19168>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


is_valid_standalonesig_blob (struct VerifyContext * ctx, guint32 offset)
{
  int D.24716;
  int D.24719;
  gchar * D.24722;
  struct GSList * D.24723;
  struct GSList * D.24724;
  gboolean D.24725;
  const char * ptr.161;
  unsigned int size.162;
  sizetype D.24728;
  int D.24729;
  gchar * D.24734;
  struct GSList * D.24735;
  const char * ptr.163;
  unsigned int signature.164;
  guint32 size;
  unsigned int signature;
  const char * ptr;
  const char * end;

  try
    {
      size = 0;
      signature = 0;
      ptr = 0B;
      D.24716 = decode_signature_header (ctx, offset, &size, &ptr);
      if (D.24716 == 0) goto <D.24717>; else goto <D.24718>;
      <D.24717>:
      D.24719 = ctx->report_error;
      if (D.24719 != 0) goto <D.24720>; else goto <D.24721>;
      <D.24720>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24722 = monoeg_strdup ("StandAloneSig: Could not decode signature header");
        vinfo->info.message = D.24722;
        vinfo->exception_type = 3;
        D.24723 = ctx->errors;
        D.24724 = monoeg_g_slist_prepend (D.24723, vinfo);
        ctx->errors = D.24724;
      }
      <D.24721>:
      ctx->valid = 0;
      D.24725 = 0;
      return D.24725;
      <D.24718>:
      ptr.161 = ptr;
      size.162 = size;
      D.24728 = (sizetype) size.162;
      end = ptr.161 + D.24728;
      D.24729 = safe_read (&ptr, end, &signature, 1);
      if (D.24729 == 0) goto <D.24730>; else goto <D.24731>;
      <D.24730>:
      D.24719 = ctx->report_error;
      if (D.24719 != 0) goto <D.24732>; else goto <D.24733>;
      <D.24732>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24734 = monoeg_strdup ("StandAloneSig: Not enough room for the call conv");
        vinfo->info.message = D.24734;
        vinfo->exception_type = 3;
        D.24723 = ctx->errors;
        D.24735 = monoeg_g_slist_prepend (D.24723, vinfo);
        ctx->errors = D.24735;
      }
      <D.24733>:
      ctx->valid = 0;
      D.24725 = 0;
      return D.24725;
      <D.24731>:
      ptr.161 = ptr;
      ptr.163 = ptr.161 + 18446744073709551615;
      ptr = ptr.163;
      signature.164 = signature;
      if (signature.164 == 7) goto <D.24738>; else goto <D.24739>;
      <D.24738>:
      D.24725 = parse_locals_signature (ctx, &ptr, end);
      return D.24725;
      <D.24739>:
      signature.164 = signature;
      if (signature.164 == 6) goto <D.24740>; else goto <D.24741>;
      <D.24740>:
      D.24725 = parse_field (ctx, &ptr, end);
      return D.24725;
      <D.24741>:
      D.24725 = parse_method_signature (ctx, &ptr, end, 1, 1);
      return D.24725;
    }
  finally
    {
      size = {CLOBBER};
      signature = {CLOBBER};
      ptr = {CLOBBER};
    }
}


parse_locals_signature (struct VerifyContext * ctx, const char * * _ptr, const char * end)
{
  const char * ptr.165;
  int D.24745;
  int D.24748;
  gchar * D.24751;
  struct GSList * D.24752;
  struct GSList * D.24753;
  gboolean D.24754;
  unsigned int sig.166;
  gchar * D.24760;
  struct GSList * D.24761;
  int D.24762;
  gchar * D.24767;
  struct GSList * D.24768;
  int D.24769;
  gchar * D.24774;
  struct GSList * D.24775;
  int D.24778;
  gchar * D.24783;
  struct GSList * D.24784;
  int D.24785;
  gchar * D.24790;
  struct GSList * D.24791;
  unsigned int D.24792;
  int D.24796;
  gchar * D.24801;
  struct GSList * D.24802;
  gchar * D.24807;
  struct GSList * D.24808;
  const char * ptr.167;
  const char * ptr.168;
  int D.24813;
  gchar * D.24818;
  struct GSList * D.24819;
  unsigned int locals_count.169;
  unsigned int sig;
  unsigned int locals_count;
  unsigned int i;
  const char * ptr;

  try
    {
      sig = 0;
      locals_count = 0;
      ptr.165 = *_ptr;
      ptr = ptr.165;
      D.24745 = safe_read (&ptr, end, &sig, 1);
      if (D.24745 == 0) goto <D.24746>; else goto <D.24747>;
      <D.24746>:
      D.24748 = ctx->report_error;
      if (D.24748 != 0) goto <D.24749>; else goto <D.24750>;
      <D.24749>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24751 = monoeg_strdup ("LocalsSig: Not enough room for signature");
        vinfo->info.message = D.24751;
        vinfo->exception_type = 3;
        D.24752 = ctx->errors;
        D.24753 = monoeg_g_slist_prepend (D.24752, vinfo);
        ctx->errors = D.24753;
      }
      <D.24750>:
      ctx->valid = 0;
      D.24754 = 0;
      return D.24754;
      <D.24747>:
      sig.166 = sig;
      if (sig.166 != 7) goto <D.24756>; else goto <D.24757>;
      <D.24756>:
      D.24748 = ctx->report_error;
      if (D.24748 != 0) goto <D.24758>; else goto <D.24759>;
      <D.24758>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        sig.166 = sig;
        D.24760 = monoeg_g_strdup_printf ("LocalsSig: Signature is not 0x28 or 0x08: %x", sig.166);
        vinfo->info.message = D.24760;
        vinfo->exception_type = 3;
        D.24752 = ctx->errors;
        D.24761 = monoeg_g_slist_prepend (D.24752, vinfo);
        ctx->errors = D.24761;
      }
      <D.24759>:
      ctx->valid = 0;
      D.24754 = 0;
      return D.24754;
      <D.24757>:
      D.24762 = safe_read_compressed_int (&ptr, end, &locals_count);
      if (D.24762 == 0) goto <D.24763>; else goto <D.24764>;
      <D.24763>:
      D.24748 = ctx->report_error;
      if (D.24748 != 0) goto <D.24765>; else goto <D.24766>;
      <D.24765>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24767 = monoeg_strdup ("LocalsSig: Not enough room for the param count");
        vinfo->info.message = D.24767;
        vinfo->exception_type = 3;
        D.24752 = ctx->errors;
        D.24768 = monoeg_g_slist_prepend (D.24752, vinfo);
        ctx->errors = D.24768;
      }
      <D.24766>:
      ctx->valid = 0;
      D.24754 = 0;
      return D.24754;
      <D.24764>:
      i = 0;
      goto <D.18475>;
      <D.18474>:
      D.24769 = safe_read (&ptr, end, &sig, 1);
      if (D.24769 == 0) goto <D.24770>; else goto <D.24771>;
      <D.24770>:
      D.24748 = ctx->report_error;
      if (D.24748 != 0) goto <D.24772>; else goto <D.24773>;
      <D.24772>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24774 = monoeg_strdup ("LocalsSig: Not enough room for type");
        vinfo->info.message = D.24774;
        vinfo->exception_type = 3;
        D.24752 = ctx->errors;
        D.24775 = monoeg_g_slist_prepend (D.24752, vinfo);
        ctx->errors = D.24775;
      }
      <D.24773>:
      ctx->valid = 0;
      D.24754 = 0;
      return D.24754;
      <D.24771>:
      goto <D.18468>;
      <D.18467>:
      sig.166 = sig;
      if (sig.166 != 69) goto <D.24776>; else goto <D.24777>;
      <D.24776>:
      D.24778 = parse_custom_mods (ctx, &ptr, end);
      if (D.24778 == 0) goto <D.24779>; else goto <D.24780>;
      <D.24779>:
      D.24748 = ctx->report_error;
      if (D.24748 != 0) goto <D.24781>; else goto <D.24782>;
      <D.24781>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24783 = monoeg_g_strdup_printf ("LocalsSig: Error parsing local %d", i);
        vinfo->info.message = D.24783;
        vinfo->exception_type = 3;
        D.24752 = ctx->errors;
        D.24784 = monoeg_g_slist_prepend (D.24752, vinfo);
        ctx->errors = D.24784;
      }
      <D.24782>:
      ctx->valid = 0;
      D.24754 = 0;
      return D.24754;
      <D.24780>:
      <D.24777>:
      D.24785 = safe_read (&ptr, end, &sig, 1);
      if (D.24785 == 0) goto <D.24786>; else goto <D.24787>;
      <D.24786>:
      D.24748 = ctx->report_error;
      if (D.24748 != 0) goto <D.24788>; else goto <D.24789>;
      <D.24788>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24790 = monoeg_strdup ("LocalsSig: Not enough room for type");
        vinfo->info.message = D.24790;
        vinfo->exception_type = 3;
        D.24752 = ctx->errors;
        D.24791 = monoeg_g_slist_prepend (D.24752, vinfo);
        ctx->errors = D.24791;
      }
      <D.24789>:
      ctx->valid = 0;
      D.24754 = 0;
      return D.24754;
      <D.24787>:
      <D.18468>:
      sig.166 = sig;
      D.24792 = sig.166 + 4294967265;
      if (D.24792 <= 1) goto <D.18467>; else goto <D.24793>;
      <D.24793>:
      sig.166 = sig;
      if (sig.166 == 69) goto <D.18467>; else goto <D.18469>;
      <D.18469>:
      sig.166 = sig;
      if (sig.166 == 16) goto <D.24794>; else goto <D.24795>;
      <D.24794>:
      D.24796 = safe_read (&ptr, end, &sig, 1);
      if (D.24796 == 0) goto <D.24797>; else goto <D.24798>;
      <D.24797>:
      D.24748 = ctx->report_error;
      if (D.24748 != 0) goto <D.24799>; else goto <D.24800>;
      <D.24799>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24801 = monoeg_g_strdup_printf ("Type: Not enough room for byref type for local %d", i);
        vinfo->info.message = D.24801;
        vinfo->exception_type = 3;
        D.24752 = ctx->errors;
        D.24802 = monoeg_g_slist_prepend (D.24752, vinfo);
        ctx->errors = D.24802;
      }
      <D.24800>:
      ctx->valid = 0;
      D.24754 = 0;
      return D.24754;
      <D.24798>:
      sig.166 = sig;
      if (sig.166 == 22) goto <D.24803>; else goto <D.24804>;
      <D.24803>:
      D.24748 = ctx->report_error;
      if (D.24748 != 0) goto <D.24805>; else goto <D.24806>;
      <D.24805>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24807 = monoeg_g_strdup_printf ("Type: Invalid type typedref& for local %d", i);
        vinfo->info.message = D.24807;
        vinfo->exception_type = 3;
        D.24752 = ctx->errors;
        D.24808 = monoeg_g_slist_prepend (D.24752, vinfo);
        ctx->errors = D.24808;
      }
      <D.24806>:
      ctx->valid = 0;
      D.24754 = 0;
      return D.24754;
      <D.24804>:
      <D.24795>:
      sig.166 = sig;
      if (sig.166 == 22) goto <D.24809>; else goto <D.24810>;
      <D.24809>:
      // predicted unlikely by continue predictor.
      goto <D.18472>;
      <D.24810>:
      ptr.167 = ptr;
      ptr.168 = ptr.167 + 18446744073709551615;
      ptr = ptr.168;
      D.24813 = parse_type (ctx, &ptr, end);
      if (D.24813 == 0) goto <D.24814>; else goto <D.24815>;
      <D.24814>:
      D.24748 = ctx->report_error;
      if (D.24748 != 0) goto <D.24816>; else goto <D.24817>;
      <D.24816>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24818 = monoeg_g_strdup_printf ("LocalsSig: Error parsing local %d", i);
        vinfo->info.message = D.24818;
        vinfo->exception_type = 3;
        D.24752 = ctx->errors;
        D.24819 = monoeg_g_slist_prepend (D.24752, vinfo);
        ctx->errors = D.24819;
      }
      <D.24817>:
      ctx->valid = 0;
      D.24754 = 0;
      return D.24754;
      <D.24815>:
      <D.18472>:
      i = i + 1;
      <D.18475>:
      locals_count.169 = locals_count;
      if (i < locals_count.169) goto <D.18474>; else goto <D.18476>;
      <D.18476>:
      ptr.167 = ptr;
      *_ptr = ptr.167;
      D.24754 = 1;
      return D.24754;
    }
  finally
    {
      sig = {CLOBBER};
      locals_count = {CLOBBER};
      ptr = {CLOBBER};
    }
}


verify_event_table_full (struct VerifyContext * ctx)
{
  struct MonoImage * D.24823;
  unsigned int i.170;
  int D.24827;
  gchar * D.24830;
  struct GSList * D.24831;
  struct GSList * D.24832;
  int D.24833;
  unsigned int D.24834;
  unsigned int D.24836;
  unsigned int D.24838;
  unsigned int D.24839;
  unsigned int D.24842;
  <unnamed-unsigned:24> D.24848;
  int D.24849;
  gchar * D.24854;
  struct GSList * D.24855;
  gchar * D.24860;
  struct GSList * D.24861;
  <unnamed-unsigned:24> D.24862;
  int D.24863;
  struct MonoTableInfo * table;
  struct MonoTableInfo * sema_table;
  guint32 data[3];
  guint32 sema_data[3];
  guint32 token;
  gboolean found_add;
  gboolean found_remove;
  int i;
  int idx;

  try
    {
      D.24823 = ctx->image;
      table = &D.24823->tables[20];
      D.24823 = ctx->image;
      sema_table = &D.24823->tables[24];
      i = 0;
      goto <D.19215>;
      <D.19214>:
      mono_metadata_decode_row (table, i, &data, 3);
      i.170 = (unsigned int) i;
      token = make_coded_token (48, 20, i.170);
      idx = search_sorted_table (ctx, 24, 2, token);
      if (idx == -1) goto <D.24825>; else goto <D.24826>;
      <D.24825>:
      D.24827 = ctx->report_error;
      if (D.24827 != 0) goto <D.24828>; else goto <D.24829>;
      <D.24828>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24830 = monoeg_g_strdup_printf ("Invalid Event row %d has no AddOn or RemoveOn associated methods", i);
        vinfo->info.message = D.24830;
        vinfo->exception_type = 3;
        D.24831 = ctx->errors;
        D.24832 = monoeg_g_slist_prepend (D.24831, vinfo);
        ctx->errors = D.24832;
      }
      <D.24829>:
      ctx->valid = 0;
      return;
      <D.24826>:
      goto <D.19208>;
      <D.19207>:
      D.24833 = idx + -1;
      D.24834 = mono_metadata_decode_row_col (sema_table, D.24833, 2);
      if (D.24834 != token) goto <D.19206>; else goto <D.24835>;
      <D.24835>:
      idx = idx + -1;
      <D.19208>:
      if (idx > 0) goto <D.19207>; else goto <D.19206>;
      <D.19206>:
      found_remove = 0;
      found_add = found_remove;
      goto <D.19211>;
      <D.19210>:
      mono_metadata_decode_row (sema_table, idx, &sema_data, 3);
      D.24836 = sema_data[2];
      if (D.24836 != token) goto <D.19209>; else goto <D.24837>;
      <D.24837>:
      D.24838 = sema_data[0];
      D.24839 = D.24838 & 8;
      if (D.24839 != 0) goto <D.24840>; else goto <D.24841>;
      <D.24840>:
      found_add = 1;
      <D.24841>:
      D.24838 = sema_data[0];
      D.24842 = D.24838 & 16;
      if (D.24842 != 0) goto <D.24843>; else goto <D.24844>;
      <D.24843>:
      found_remove = 1;
      <D.24844>:
      if (found_add != 0) goto <D.24845>; else goto <D.24846>;
      <D.24845>:
      if (found_remove != 0) goto <D.19209>; else goto <D.24847>;
      <D.24847>:
      <D.24846>:
      idx = idx + 1;
      <D.19211>:
      D.24848 = sema_table->rows;
      D.24849 = (int) D.24848;
      if (D.24849 > idx) goto <D.19210>; else goto <D.19209>;
      <D.19209>:
      if (found_add == 0) goto <D.24850>; else goto <D.24851>;
      <D.24850>:
      D.24827 = ctx->report_error;
      if (D.24827 != 0) goto <D.24852>; else goto <D.24853>;
      <D.24852>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24854 = monoeg_g_strdup_printf ("Invalid Event row %d has no AddOn associated method", i);
        vinfo->info.message = D.24854;
        vinfo->exception_type = 3;
        D.24831 = ctx->errors;
        D.24855 = monoeg_g_slist_prepend (D.24831, vinfo);
        ctx->errors = D.24855;
      }
      <D.24853>:
      ctx->valid = 0;
      return;
      <D.24851>:
      if (found_remove == 0) goto <D.24856>; else goto <D.24857>;
      <D.24856>:
      D.24827 = ctx->report_error;
      if (D.24827 != 0) goto <D.24858>; else goto <D.24859>;
      <D.24858>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24860 = monoeg_g_strdup_printf ("Invalid Event row %d has no RemoveOn associated method", i);
        vinfo->info.message = D.24860;
        vinfo->exception_type = 3;
        D.24831 = ctx->errors;
        D.24861 = monoeg_g_slist_prepend (D.24831, vinfo);
        ctx->errors = D.24861;
      }
      <D.24859>:
      ctx->valid = 0;
      return;
      <D.24857>:
      i = i + 1;
      <D.19215>:
      D.24862 = table->rows;
      D.24863 = (int) D.24862;
      if (D.24863 > i) goto <D.19214>; else goto <D.19216>;
      <D.19216>:
    }
  finally
    {
      data = {CLOBBER};
      sema_data = {CLOBBER};
    }
}


verify_typespec_table_full (struct VerifyContext * ctx)
{
  struct MonoImage * D.24867;
  int D.24868;
  int D.24869;
  unsigned int D.24870;
  unsigned int D.24871;
  int D.24872;
  int D.24875;
  gchar * D.24878;
  struct GSList * D.24879;
  struct GSList * D.24880;
  <unnamed-unsigned:24> D.24881;
  int D.24882;
  struct MonoTableInfo * table;
  guint32 data[1];
  int i;

  try
    {
      D.24867 = ctx->image;
      table = &D.24867->tables[27];
      i = 0;
      goto <D.19284>;
      <D.19283>:
      mono_metadata_decode_row (table, i, &data, 1);
      D.24868 = i + 1;
      D.24869 = D.24868 | 452984832;
      D.24870 = (unsigned int) D.24869;
      ctx->token = D.24870;
      D.24871 = data[0];
      D.24872 = is_valid_typespec_blob (ctx, D.24871);
      if (D.24872 == 0) goto <D.24873>; else goto <D.24874>;
      <D.24873>:
      D.24875 = ctx->report_error;
      if (D.24875 != 0) goto <D.24876>; else goto <D.24877>;
      <D.24876>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24871 = data[0];
        D.24878 = monoeg_g_strdup_printf ("Invalid TypeSpec row %d Signature field %08x", i, D.24871);
        vinfo->info.message = D.24878;
        vinfo->exception_type = 3;
        D.24879 = ctx->errors;
        D.24880 = monoeg_g_slist_prepend (D.24879, vinfo);
        ctx->errors = D.24880;
      }
      <D.24877>:
      ctx->valid = 0;
      return;
      <D.24874>:
      i = i + 1;
      <D.19284>:
      D.24881 = table->rows;
      D.24882 = (int) D.24881;
      if (D.24882 > i) goto <D.19283>; else goto <D.19285>;
      <D.19285>:
      ctx->token = 0;
    }
  finally
    {
      data = {CLOBBER};
    }
}


is_valid_typespec_blob (struct VerifyContext * ctx, guint32 offset)
{
  int D.24886;
  int D.24889;
  gchar * D.24892;
  struct GSList * D.24893;
  struct GSList * D.24894;
  gboolean D.24895;
  const char * ptr.171;
  unsigned int size.172;
  sizetype D.24898;
  int D.24899;
  int D.24902;
  gchar * D.24907;
  struct GSList * D.24908;
  unsigned int type.173;
  int D.24912;
  gchar * D.24917;
  struct GSList * D.24918;
  gchar * D.24923;
  struct GSList * D.24924;
  const char * ptr.174;
  guint32 size;
  const char * ptr;
  const char * end;
  unsigned int type;

  try
    {
      size = 0;
      ptr = 0B;
      type = 0;
      D.24886 = decode_signature_header (ctx, offset, &size, &ptr);
      if (D.24886 == 0) goto <D.24887>; else goto <D.24888>;
      <D.24887>:
      D.24889 = ctx->report_error;
      if (D.24889 != 0) goto <D.24890>; else goto <D.24891>;
      <D.24890>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24892 = monoeg_strdup ("TypeSpec: Could not decode signature header");
        vinfo->info.message = D.24892;
        vinfo->exception_type = 3;
        D.24893 = ctx->errors;
        D.24894 = monoeg_g_slist_prepend (D.24893, vinfo);
        ctx->errors = D.24894;
      }
      <D.24891>:
      ctx->valid = 0;
      D.24895 = 0;
      return D.24895;
      <D.24888>:
      ptr.171 = ptr;
      size.172 = size;
      D.24898 = (sizetype) size.172;
      end = ptr.171 + D.24898;
      D.24899 = parse_custom_mods (ctx, &ptr, end);
      if (D.24899 == 0) goto <D.24900>; else goto <D.24901>;
      <D.24900>:
      D.24895 = 0;
      return D.24895;
      <D.24901>:
      D.24902 = safe_read (&ptr, end, &type, 1);
      if (D.24902 == 0) goto <D.24903>; else goto <D.24904>;
      <D.24903>:
      D.24889 = ctx->report_error;
      if (D.24889 != 0) goto <D.24905>; else goto <D.24906>;
      <D.24905>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24907 = monoeg_strdup ("TypeSpec: Not enough room for type");
        vinfo->info.message = D.24907;
        vinfo->exception_type = 3;
        D.24893 = ctx->errors;
        D.24908 = monoeg_g_slist_prepend (D.24893, vinfo);
        ctx->errors = D.24908;
      }
      <D.24906>:
      ctx->valid = 0;
      D.24895 = 0;
      return D.24895;
      <D.24904>:
      type.173 = type;
      if (type.173 == 16) goto <D.24910>; else goto <D.24911>;
      <D.24910>:
      D.24912 = safe_read (&ptr, end, &type, 1);
      if (D.24912 == 0) goto <D.24913>; else goto <D.24914>;
      <D.24913>:
      D.24889 = ctx->report_error;
      if (D.24889 != 0) goto <D.24915>; else goto <D.24916>;
      <D.24915>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24917 = monoeg_strdup ("TypeSpec: Not enough room for byref type");
        vinfo->info.message = D.24917;
        vinfo->exception_type = 3;
        D.24893 = ctx->errors;
        D.24918 = monoeg_g_slist_prepend (D.24893, vinfo);
        ctx->errors = D.24918;
      }
      <D.24916>:
      ctx->valid = 0;
      D.24895 = 0;
      return D.24895;
      <D.24914>:
      type.173 = type;
      if (type.173 == 22) goto <D.24919>; else goto <D.24920>;
      <D.24919>:
      D.24889 = ctx->report_error;
      if (D.24889 != 0) goto <D.24921>; else goto <D.24922>;
      <D.24921>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24923 = monoeg_strdup ("TypeSpec: Invalid type typedref&");
        vinfo->info.message = D.24923;
        vinfo->exception_type = 3;
        D.24893 = ctx->errors;
        D.24924 = monoeg_g_slist_prepend (D.24893, vinfo);
        ctx->errors = D.24924;
      }
      <D.24922>:
      ctx->valid = 0;
      D.24895 = 0;
      return D.24895;
      <D.24920>:
      <D.24911>:
      type.173 = type;
      if (type.173 == 22) goto <D.24925>; else goto <D.24926>;
      <D.24925>:
      D.24895 = 1;
      return D.24895;
      <D.24926>:
      ptr.171 = ptr;
      ptr.174 = ptr.171 + 18446744073709551615;
      ptr = ptr.174;
      D.24895 = parse_type (ctx, &ptr, end);
      return D.24895;
    }
  finally
    {
      size = {CLOBBER};
      ptr = {CLOBBER};
      type = {CLOBBER};
    }
}


verify_method_spec_table_full (struct VerifyContext * ctx)
{
  struct MonoImage * D.24930;
  unsigned int D.24931;
  int D.24932;
  int D.24935;
  gchar * D.24938;
  struct GSList * D.24939;
  struct GSList * D.24940;
  <unnamed-unsigned:24> D.24941;
  int D.24942;
  struct MonoTableInfo * table;
  guint32 data[2];
  int i;

  try
    {
      D.24930 = ctx->image;
      table = &D.24930->tables[43];
      i = 0;
      goto <D.19442>;
      <D.19441>:
      mono_metadata_decode_row (table, i, &data, 2);
      D.24931 = data[1];
      D.24932 = is_valid_methodspec_blob (ctx, D.24931);
      if (D.24932 == 0) goto <D.24933>; else goto <D.24934>;
      <D.24933>:
      D.24935 = ctx->report_error;
      if (D.24935 != 0) goto <D.24936>; else goto <D.24937>;
      <D.24936>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24931 = data[1];
        D.24938 = monoeg_g_strdup_printf ("MethodSpec table row %d has invalid Instantiation token %08x", i, D.24931);
        vinfo->info.message = D.24938;
        vinfo->exception_type = 3;
        D.24939 = ctx->errors;
        D.24940 = monoeg_g_slist_prepend (D.24939, vinfo);
        ctx->errors = D.24940;
      }
      <D.24937>:
      ctx->valid = 0;
      return;
      <D.24934>:
      i = i + 1;
      <D.19442>:
      D.24941 = table->rows;
      D.24942 = (int) D.24941;
      if (D.24942 > i) goto <D.19441>; else goto <D.19443>;
      <D.19443>:
    }
  finally
    {
      data = {CLOBBER};
    }
}


is_valid_methodspec_blob (struct VerifyContext * ctx, guint32 offset)
{
  int D.24946;
  int D.24949;
  gchar * D.24952;
  struct GSList * D.24953;
  struct GSList * D.24954;
  gboolean D.24955;
  const char * ptr.175;
  unsigned int size.176;
  sizetype D.24958;
  int D.24959;
  gchar * D.24964;
  struct GSList * D.24965;
  unsigned int type.177;
  gchar * D.24971;
  struct GSList * D.24972;
  int D.24973;
  gchar * D.24978;
  struct GSList * D.24979;
  unsigned int count.178;
  gchar * D.24985;
  struct GSList * D.24986;
  int D.24987;
  int D.24990;
  unsigned int D.24995;
  gchar * D.24996;
  struct GSList * D.24997;
  guint32 size;
  const char * ptr;
  const char * end;
  unsigned int type;
  unsigned int count;
  unsigned int i;

  try
    {
      size = 0;
      ptr = 0B;
      type = 0;
      count = 0;
      D.24946 = decode_signature_header (ctx, offset, &size, &ptr);
      if (D.24946 == 0) goto <D.24947>; else goto <D.24948>;
      <D.24947>:
      D.24949 = ctx->report_error;
      if (D.24949 != 0) goto <D.24950>; else goto <D.24951>;
      <D.24950>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24952 = monoeg_strdup ("MethodSpec: Could not decode signature header");
        vinfo->info.message = D.24952;
        vinfo->exception_type = 3;
        D.24953 = ctx->errors;
        D.24954 = monoeg_g_slist_prepend (D.24953, vinfo);
        ctx->errors = D.24954;
      }
      <D.24951>:
      ctx->valid = 0;
      D.24955 = 0;
      return D.24955;
      <D.24948>:
      ptr.175 = ptr;
      size.176 = size;
      D.24958 = (sizetype) size.176;
      end = ptr.175 + D.24958;
      D.24959 = safe_read (&ptr, end, &type, 1);
      if (D.24959 == 0) goto <D.24960>; else goto <D.24961>;
      <D.24960>:
      D.24949 = ctx->report_error;
      if (D.24949 != 0) goto <D.24962>; else goto <D.24963>;
      <D.24962>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24964 = monoeg_strdup ("MethodSpec: Not enough room for call convention");
        vinfo->info.message = D.24964;
        vinfo->exception_type = 3;
        D.24953 = ctx->errors;
        D.24965 = monoeg_g_slist_prepend (D.24953, vinfo);
        ctx->errors = D.24965;
      }
      <D.24963>:
      ctx->valid = 0;
      D.24955 = 0;
      return D.24955;
      <D.24961>:
      type.177 = type;
      if (type.177 != 10) goto <D.24967>; else goto <D.24968>;
      <D.24967>:
      D.24949 = ctx->report_error;
      if (D.24949 != 0) goto <D.24969>; else goto <D.24970>;
      <D.24969>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        type.177 = type;
        D.24971 = monoeg_g_strdup_printf ("MethodSpec: Invalid call convention 0x%x, expected 0x0A", type.177);
        vinfo->info.message = D.24971;
        vinfo->exception_type = 3;
        D.24953 = ctx->errors;
        D.24972 = monoeg_g_slist_prepend (D.24953, vinfo);
        ctx->errors = D.24972;
      }
      <D.24970>:
      ctx->valid = 0;
      D.24955 = 0;
      return D.24955;
      <D.24968>:
      D.24973 = safe_read_compressed_int (&ptr, end, &count);
      if (D.24973 == 0) goto <D.24974>; else goto <D.24975>;
      <D.24974>:
      D.24949 = ctx->report_error;
      if (D.24949 != 0) goto <D.24976>; else goto <D.24977>;
      <D.24976>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24978 = monoeg_strdup ("MethodSpec: Not enough room for parameter count");
        vinfo->info.message = D.24978;
        vinfo->exception_type = 3;
        D.24953 = ctx->errors;
        D.24979 = monoeg_g_slist_prepend (D.24953, vinfo);
        ctx->errors = D.24979;
      }
      <D.24977>:
      ctx->valid = 0;
      D.24955 = 0;
      return D.24955;
      <D.24975>:
      count.178 = count;
      if (count.178 == 0) goto <D.24981>; else goto <D.24982>;
      <D.24981>:
      D.24949 = ctx->report_error;
      if (D.24949 != 0) goto <D.24983>; else goto <D.24984>;
      <D.24983>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24985 = monoeg_strdup ("MethodSpec: Zero generic argument count");
        vinfo->info.message = D.24985;
        vinfo->exception_type = 3;
        D.24953 = ctx->errors;
        D.24986 = monoeg_g_slist_prepend (D.24953, vinfo);
        ctx->errors = D.24986;
      }
      <D.24984>:
      ctx->valid = 0;
      D.24955 = 0;
      return D.24955;
      <D.24982>:
      i = 0;
      goto <D.18705>;
      <D.18704>:
      D.24987 = parse_custom_mods (ctx, &ptr, end);
      if (D.24987 == 0) goto <D.24988>; else goto <D.24989>;
      <D.24988>:
      D.24955 = 0;
      return D.24955;
      <D.24989>:
      D.24990 = parse_type (ctx, &ptr, end);
      if (D.24990 == 0) goto <D.24991>; else goto <D.24992>;
      <D.24991>:
      D.24949 = ctx->report_error;
      if (D.24949 != 0) goto <D.24993>; else goto <D.24994>;
      <D.24993>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.24995 = i + 1;
        D.24996 = monoeg_g_strdup_printf ("MethodSpec: Could not parse parameter %d", D.24995);
        vinfo->info.message = D.24996;
        vinfo->exception_type = 3;
        D.24953 = ctx->errors;
        D.24997 = monoeg_g_slist_prepend (D.24953, vinfo);
        ctx->errors = D.24997;
      }
      <D.24994>:
      ctx->valid = 0;
      D.24955 = 0;
      return D.24955;
      <D.24992>:
      i = i + 1;
      <D.18705>:
      count.178 = count;
      if (i < count.178) goto <D.18704>; else goto <D.18706>;
      <D.18706>:
      D.24955 = 1;
      return D.24955;
    }
  finally
    {
      size = {CLOBBER};
      ptr = {CLOBBER};
      type = {CLOBBER};
      count = {CLOBBER};
    }
}


verify_tables_data_global_constraints_full (struct VerifyContext * ctx)
{
  verify_typeref_table (ctx);
  verify_typeref_table_global_constraints (ctx);
}


verify_typeref_table (struct VerifyContext * ctx)
{
  struct MonoImage * D.25000;
  <unnamed-unsigned:24> D.25001;
  unsigned int D.25002;
  struct MonoTableInfo * table;
  struct MonoError error;
  guint32 i;

  try
    {
      D.25000 = ctx->image;
      table = &D.25000->tables[1];
      i = 0;
      goto <D.18814>;
      <D.18813>:
      D.25000 = ctx->image;
      mono_verifier_verify_typeref_row (D.25000, i, &error);
      add_from_mono_error (ctx, &error);
      i = i + 1;
      <D.18814>:
      D.25001 = table->rows;
      D.25002 = (unsigned int) D.25001;
      if (D.25002 > i) goto <D.18813>; else goto <D.18815>;
      <D.18815>:
    }
  finally
    {
      error = {CLOBBER};
    }
}


add_from_mono_error (struct VerifyContext * ctx, struct MonoError * error)
{
  int D.25003;
  int D.25006;
  const char * D.25009;
  gchar * D.25010;
  struct GSList * D.25011;
  struct GSList * D.25012;

  D.25003 = mono_error_ok (error);
  if (D.25003 != 0) goto <D.25004>; else goto <D.25005>;
  <D.25004>:
  return;
  <D.25005>:
  D.25006 = ctx->report_error;
  if (D.25006 != 0) goto <D.25007>; else goto <D.25008>;
  <D.25007>:
  {
    struct MonoVerifyInfoExtended * vinfo;

    vinfo = monoeg_malloc (24);
    vinfo->info.status = 1;
    D.25009 = mono_error_get_message (error);
    D.25010 = monoeg_strdup (D.25009);
    vinfo->info.message = D.25010;
    vinfo->exception_type = 3;
    D.25011 = ctx->errors;
    D.25012 = monoeg_g_slist_prepend (D.25011, vinfo);
    ctx->errors = D.25012;
  }
  <D.25008>:
  ctx->valid = 0;
  return;
  mono_error_cleanup (error);
}


verify_typeref_table_global_constraints (struct VerifyContext * ctx)
{
  struct MonoImage * D.25014;
  unsigned int D.25015;
  unsigned int D.25016;
  const char * D.25017;
  unsigned int D.25018;
  const char * D.25019;
  void * D.25020;
  int D.25023;
  const char * D.25026;
  const char * D.25027;
  unsigned int D.25028;
  gchar * D.25029;
  struct GSList * D.25030;
  struct GSList * D.25031;
  <unnamed-unsigned:24> D.25032;
  int D.25033;
  int i;
  guint32 data[3];
  struct MonoTableInfo * table;
  struct GHashTable * unique_types;

  try
    {
      D.25014 = ctx->image;
      table = &D.25014->tables[1];
      unique_types = monoeg_g_hash_table_new_full (typedef_hash, typedef_equals, monoeg_g_free, 0B);
      i = 0;
      goto <D.19501>;
      <D.19500>:
      {
        struct TypeDefUniqueId * type;

        type = monoeg_malloc (24);
        mono_metadata_decode_row (table, i, &data, 3);
        D.25015 = data[0];
        type->resolution_scope = D.25015;
        D.25014 = ctx->image;
        D.25016 = data[1];
        D.25017 = mono_metadata_string_heap (D.25014, D.25016);
        type->name = D.25017;
        D.25014 = ctx->image;
        D.25018 = data[2];
        D.25019 = mono_metadata_string_heap (D.25014, D.25018);
        type->name_space = D.25019;
        D.25020 = monoeg_g_hash_table_lookup (unique_types, type);
        if (D.25020 != 0B) goto <D.25021>; else goto <D.25022>;
        <D.25021>:
        D.25023 = ctx->report_error;
        if (D.25023 != 0) goto <D.25024>; else goto <D.25025>;
        <D.25024>:
        {
          struct MonoVerifyInfoExtended * vinfo;

          vinfo = monoeg_malloc (24);
          vinfo->info.status = 1;
          D.25026 = type->name;
          D.25027 = type->name_space;
          D.25028 = type->resolution_scope;
          D.25029 = monoeg_g_strdup_printf ("TypeRef table row %d has duplicate for tuple (%s,%s,%x)", i, D.25026, D.25027, D.25028);
          vinfo->info.message = D.25029;
          vinfo->exception_type = 3;
          D.25030 = ctx->errors;
          D.25031 = monoeg_g_slist_prepend (D.25030, vinfo);
          ctx->errors = D.25031;
        }
        <D.25025>:
        ctx->valid = 0;
        monoeg_g_hash_table_destroy (unique_types);
        monoeg_g_free (type);
        return;
        <D.25022>:
        monoeg_g_hash_table_insert_replace (unique_types, type, 1B, 0);
      }
      i = i + 1;
      <D.19501>:
      D.25032 = table->rows;
      D.25033 = (int) D.25032;
      if (D.25033 > i) goto <D.19500>; else goto <D.19502>;
      <D.19502>:
      monoeg_g_hash_table_destroy (unique_types);
    }
  finally
    {
      data = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_field_signature (struct MonoImage * image, guint32 offset, struct GSList * * error_list)
{
  int D.25037;
  gboolean D.25040;
  _Bool D.25041;
  int D.25042;
  struct VerifyContext ctx;

  try
    {
      D.25037 = mono_verifier_is_enabled_for_image (image);
      if (D.25037 == 0) goto <D.25038>; else goto <D.25039>;
      <D.25038>:
      D.25040 = 1;
      return D.25040;
      <D.25039>:
      D.25041 = error_list != 0B;
      D.25042 = (int) D.25041;
      init_verify_context (&ctx, image, D.25042);
      ctx.stage = 2;
      is_valid_field_signature (&ctx, offset);
      D.25040 = cleanup_context (&ctx, error_list);
      return D.25040;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_method_header (struct MonoImage * image, guint32 offset, struct GSList * * error_list)
{
  int D.25045;
  gboolean D.25048;
  _Bool D.25049;
  int D.25050;
  unsigned int locals_token.179;
  struct MonoTableInfo * D.25054;
  unsigned int D.25055;
  int D.25056;
  struct VerifyContext ctx;
  guint32 locals_token;

  try
    {
      D.25045 = mono_verifier_is_enabled_for_image (image);
      if (D.25045 == 0) goto <D.25046>; else goto <D.25047>;
      <D.25046>:
      D.25048 = 1;
      return D.25048;
      <D.25047>:
      D.25049 = error_list != 0B;
      D.25050 = (int) D.25049;
      init_verify_context (&ctx, image, D.25050);
      ctx.stage = 2;
      is_valid_method_header (&ctx, offset, &locals_token);
      locals_token.179 = locals_token;
      if (locals_token.179 != 0) goto <D.25052>; else goto <D.25053>;
      <D.25052>:
      {
        guint32 sig_offset;

        D.25054 = &image->tables[17];
        locals_token.179 = locals_token;
        D.25055 = locals_token.179 + 4294967295;
        D.25056 = (int) D.25055;
        sig_offset = mono_metadata_decode_row_col (D.25054, D.25056, 0);
        is_valid_standalonesig_blob (&ctx, sig_offset);
      }
      <D.25053>:
      D.25048 = cleanup_context (&ctx, error_list);
      return D.25048;
    }
  finally
    {
      ctx = {CLOBBER};
      locals_token = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_method_signature (struct MonoImage * image, guint32 offset, struct MonoError * error)
{
  int D.25059;
  gboolean D.25062;
  struct VerifyContext ctx;

  try
    {
      mono_error_init (error);
      D.25059 = mono_verifier_is_enabled_for_image (image);
      if (D.25059 == 0) goto <D.25060>; else goto <D.25061>;
      <D.25060>:
      D.25062 = 1;
      return D.25062;
      <D.25061>:
      init_verify_context (&ctx, image, 1);
      ctx.stage = 2;
      is_valid_method_signature (&ctx, offset);
      D.25062 = cleanup_context_checked (&ctx, error);
      return D.25062;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


cleanup_context_checked (struct VerifyContext * ctx, struct MonoError * error)
{
  struct SectionHeader * D.25065;
  struct GSList * D.25066;
  struct MonoImage * D.25069;
  char * D.25070;
  gboolean D.25071;

  D.25065 = ctx->sections;
  monoeg_g_free (D.25065);
  D.25066 = ctx->errors;
  if (D.25066 != 0B) goto <D.25067>; else goto <D.25068>;
  <D.25067>:
  {
    struct MonoVerifyInfo * info;

    D.25066 = ctx->errors;
    info = D.25066->data;
    D.25069 = ctx->image;
    D.25070 = info->message;
    mono_error_set_bad_image (error, D.25069, "%s", D.25070);
    D.25066 = ctx->errors;
    mono_free_verify_list (D.25066);
  }
  <D.25068>:
  D.25071 = ctx->valid;
  return D.25071;
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_memberref_method_signature (struct MonoImage * image, guint32 offset, struct GSList * * error_list)
{
  int D.25073;
  gboolean D.25076;
  _Bool D.25077;
  int D.25078;
  struct VerifyContext ctx;

  try
    {
      D.25073 = mono_verifier_is_enabled_for_image (image);
      if (D.25073 == 0) goto <D.25074>; else goto <D.25075>;
      <D.25074>:
      D.25076 = 1;
      return D.25076;
      <D.25075>:
      D.25077 = error_list != 0B;
      D.25078 = (int) D.25077;
      init_verify_context (&ctx, image, D.25078);
      ctx.stage = 2;
      is_valid_memberref_method_signature (&ctx, offset);
      D.25076 = cleanup_context (&ctx, error_list);
      return D.25076;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


is_valid_memberref_method_signature (struct VerifyContext * ctx, guint32 offset)
{
  int D.25081;
  int D.25084;
  gchar * D.25087;
  struct GSList * D.25088;
  struct GSList * D.25089;
  gboolean D.25090;
  const char * ptr.180;
  unsigned int size.181;
  sizetype D.25093;
  guint32 size;
  const char * ptr;
  const char * end;

  try
    {
      size = 0;
      ptr = 0B;
      D.25081 = decode_signature_header (ctx, offset, &size, &ptr);
      if (D.25081 == 0) goto <D.25082>; else goto <D.25083>;
      <D.25082>:
      D.25084 = ctx->report_error;
      if (D.25084 != 0) goto <D.25085>; else goto <D.25086>;
      <D.25085>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25087 = monoeg_strdup ("MemberRefSig: Could not decode signature header");
        vinfo->info.message = D.25087;
        vinfo->exception_type = 3;
        D.25088 = ctx->errors;
        D.25089 = monoeg_g_slist_prepend (D.25088, vinfo);
        ctx->errors = D.25089;
      }
      <D.25086>:
      ctx->valid = 0;
      D.25090 = 0;
      return D.25090;
      <D.25083>:
      ptr.180 = ptr;
      size.181 = size;
      D.25093 = (sizetype) size.181;
      end = ptr.180 + D.25093;
      D.25090 = parse_method_signature (ctx, &ptr, end, 1, 0);
      return D.25090;
    }
  finally
    {
      size = {CLOBBER};
      ptr = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_memberref_field_signature (struct MonoImage * image, guint32 offset, struct GSList * * error_list)
{
  int D.25096;
  gboolean D.25099;
  _Bool D.25100;
  int D.25101;
  struct VerifyContext ctx;

  try
    {
      D.25096 = mono_verifier_is_enabled_for_image (image);
      if (D.25096 == 0) goto <D.25097>; else goto <D.25098>;
      <D.25097>:
      D.25099 = 1;
      return D.25099;
      <D.25098>:
      D.25100 = error_list != 0B;
      D.25101 = (int) D.25100;
      init_verify_context (&ctx, image, D.25101);
      ctx.stage = 2;
      is_valid_field_signature (&ctx, offset);
      D.25099 = cleanup_context (&ctx, error_list);
      return D.25099;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_standalone_signature (struct MonoImage * image, guint32 offset, struct GSList * * error_list)
{
  int D.25104;
  gboolean D.25107;
  _Bool D.25108;
  int D.25109;
  struct VerifyContext ctx;

  try
    {
      D.25104 = mono_verifier_is_enabled_for_image (image);
      if (D.25104 == 0) goto <D.25105>; else goto <D.25106>;
      <D.25105>:
      D.25107 = 1;
      return D.25107;
      <D.25106>:
      D.25108 = error_list != 0B;
      D.25109 = (int) D.25108;
      init_verify_context (&ctx, image, D.25109);
      ctx.stage = 2;
      is_valid_standalonesig_blob (&ctx, offset);
      D.25107 = cleanup_context (&ctx, error_list);
      return D.25107;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_typespec_signature (struct MonoImage * image, guint32 offset, guint32 token, struct GSList * * error_list)
{
  int D.25112;
  gboolean D.25115;
  _Bool D.25116;
  int D.25117;
  struct VerifyContext ctx;

  try
    {
      D.25112 = mono_verifier_is_enabled_for_image (image);
      if (D.25112 == 0) goto <D.25113>; else goto <D.25114>;
      <D.25113>:
      D.25115 = 1;
      return D.25115;
      <D.25114>:
      D.25116 = error_list != 0B;
      D.25117 = (int) D.25116;
      init_verify_context (&ctx, image, D.25117);
      ctx.stage = 2;
      ctx.token = token;
      is_valid_typespec_blob (&ctx, offset);
      D.25115 = cleanup_context (&ctx, error_list);
      return D.25115;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_methodspec_signature (struct MonoImage * image, guint32 offset, struct GSList * * error_list)
{
  int D.25120;
  gboolean D.25123;
  _Bool D.25124;
  int D.25125;
  struct VerifyContext ctx;

  try
    {
      D.25120 = mono_verifier_is_enabled_for_image (image);
      if (D.25120 == 0) goto <D.25121>; else goto <D.25122>;
      <D.25121>:
      D.25123 = 1;
      return D.25123;
      <D.25122>:
      D.25124 = error_list != 0B;
      D.25125 = (int) D.25124;
      init_verify_context (&ctx, image, D.25125);
      ctx.stage = 2;
      is_valid_methodspec_blob (&ctx, offset);
      D.25123 = cleanup_context (&ctx, error_list);
      return D.25123;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_string_signature (struct MonoImage * image, guint32 offset, struct GSList * * error_list)
{
  int D.25128;
  gboolean D.25131;
  _Bool D.25132;
  int D.25133;
  struct VerifyContext ctx;

  try
    {
      D.25128 = mono_verifier_is_enabled_for_image (image);
      if (D.25128 == 0) goto <D.25129>; else goto <D.25130>;
      <D.25129>:
      D.25131 = 1;
      return D.25131;
      <D.25130>:
      D.25132 = error_list != 0B;
      D.25133 = (int) D.25132;
      init_verify_context (&ctx, image, D.25133);
      ctx.stage = 2;
      verify_user_string (&ctx, offset);
      D.25131 = cleanup_context (&ctx, error_list);
      return D.25131;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


verify_user_string (struct VerifyContext * ctx, guint32 offset)
{
  struct MonoImage * D.25136;
  struct MonoStreamHeader * D.25137;
  unsigned int D.25138;
  int D.25141;
  gchar * D.25144;
  struct GSList * D.25145;
  struct GSList * D.25146;
  const char * D.25147;
  sizetype D.25148;
  unsigned int D.25149;
  sizetype D.25150;
  sizetype D.25151;
  const char * D.25152;
  unsigned int D.25153;
  int D.25154;
  gchar * D.25159;
  struct GSList * D.25160;
  unsigned int bytes.182;
  unsigned int D.25162;
  unsigned int entry_size.183;
  gchar * D.25168;
  struct GSList * D.25169;
  unsigned int entry_size.184;
  unsigned int D.25173;
  unsigned int D.25175;
  gchar * D.25178;
  struct GSList * D.25179;
  struct OffsetAndSize heap_us;
  guint32 entry_size;
  guint32 bytes;

  try
    {
      D.25136 = ctx->image;
      D.25137 = &D.25136->heap_us;
      heap_us = get_metadata_stream (ctx, D.25137); [return slot optimization]
      D.25138 = heap_us.size;
      if (D.25138 < offset) goto <D.25139>; else goto <D.25140>;
      <D.25139>:
      D.25141 = ctx->report_error;
      if (D.25141 != 0) goto <D.25142>; else goto <D.25143>;
      <D.25142>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25144 = monoeg_strdup ("User string offset beyond heap_us size");
        vinfo->info.message = D.25144;
        vinfo->exception_type = 3;
        D.25145 = ctx->errors;
        D.25146 = monoeg_g_slist_prepend (D.25145, vinfo);
        ctx->errors = D.25146;
      }
      <D.25143>:
      ctx->valid = 0;
      return;
      <D.25140>:
      D.25147 = ctx->data;
      D.25148 = (sizetype) offset;
      D.25149 = heap_us.offset;
      D.25150 = (sizetype) D.25149;
      D.25151 = D.25148 + D.25150;
      D.25152 = D.25147 + D.25151;
      D.25138 = heap_us.size;
      D.25149 = heap_us.offset;
      D.25153 = D.25138 - D.25149;
      D.25154 = decode_value (D.25152, D.25153, &entry_size, &bytes);
      if (D.25154 == 0) goto <D.25155>; else goto <D.25156>;
      <D.25155>:
      D.25141 = ctx->report_error;
      if (D.25141 != 0) goto <D.25157>; else goto <D.25158>;
      <D.25157>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25159 = monoeg_strdup ("Could not decode user string blob size");
        vinfo->info.message = D.25159;
        vinfo->exception_type = 3;
        D.25145 = ctx->errors;
        D.25160 = monoeg_g_slist_prepend (D.25145, vinfo);
        ctx->errors = D.25160;
      }
      <D.25158>:
      ctx->valid = 0;
      return;
      <D.25156>:
      bytes.182 = bytes;
      D.25162 = ~bytes.182;
      entry_size.183 = entry_size;
      if (D.25162 < entry_size.183) goto <D.25164>; else goto <D.25165>;
      <D.25164>:
      D.25141 = ctx->report_error;
      if (D.25141 != 0) goto <D.25166>; else goto <D.25167>;
      <D.25166>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25168 = monoeg_strdup ("User string size overflow");
        vinfo->info.message = D.25168;
        vinfo->exception_type = 3;
        D.25145 = ctx->errors;
        D.25169 = monoeg_g_slist_prepend (D.25145, vinfo);
        ctx->errors = D.25169;
      }
      <D.25167>:
      ctx->valid = 0;
      return;
      <D.25165>:
      entry_size.183 = entry_size;
      bytes.182 = bytes;
      entry_size.184 = entry_size.183 + bytes.182;
      entry_size = entry_size.184;
      entry_size.183 = entry_size;
      D.25173 = offset + entry_size.183;
      D.25138 = heap_us.size;
      if (D.25173 > D.25138) goto <D.25171>; else goto <D.25174>;
      <D.25174>:
      entry_size.183 = entry_size;
      D.25175 = ~entry_size.183;
      if (D.25175 < offset) goto <D.25171>; else goto <D.25172>;
      <D.25171>:
      D.25141 = ctx->report_error;
      if (D.25141 != 0) goto <D.25176>; else goto <D.25177>;
      <D.25176>:
      {
        struct MonoVerifyInfoExtended * vinfo;

        vinfo = monoeg_malloc (24);
        vinfo->info.status = 1;
        D.25178 = monoeg_strdup ("User string oveflow heap_us");
        vinfo->info.message = D.25178;
        vinfo->exception_type = 3;
        D.25145 = ctx->errors;
        D.25179 = monoeg_g_slist_prepend (D.25145, vinfo);
        ctx->errors = D.25179;
      }
      <D.25177>:
      ctx->valid = 0;
      return;
      <D.25172>:
    }
  finally
    {
      heap_us = {CLOBBER};
      entry_size = {CLOBBER};
      bytes = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_cattr_blob (struct MonoImage * image, guint32 offset, struct GSList * * error_list)
{
  int D.25183;
  gboolean D.25186;
  _Bool D.25187;
  int D.25188;
  struct VerifyContext ctx;

  try
    {
      D.25183 = mono_verifier_is_enabled_for_image (image);
      if (D.25183 == 0) goto <D.25184>; else goto <D.25185>;
      <D.25184>:
      D.25186 = 1;
      return D.25186;
      <D.25185>:
      D.25187 = error_list != 0B;
      D.25188 = (int) D.25187;
      init_verify_context (&ctx, image, D.25188);
      ctx.stage = 2;
      is_valid_cattr_blob (&ctx, offset);
      D.25186 = cleanup_context (&ctx, error_list);
      return D.25186;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_cattr_content (struct MonoImage * image, struct MonoMethod * ctor, const guchar * data, guint32 size, struct GSList * * error_list)
{
  int D.25191;
  gboolean D.25194;
  _Bool D.25195;
  int D.25196;
  struct VerifyContext ctx;

  try
    {
      D.25191 = mono_verifier_is_enabled_for_image (image);
      if (D.25191 == 0) goto <D.25192>; else goto <D.25193>;
      <D.25192>:
      D.25194 = 1;
      return D.25194;
      <D.25193>:
      D.25195 = error_list != 0B;
      D.25196 = (int) D.25195;
      init_verify_context (&ctx, image, D.25196);
      ctx.stage = 2;
      is_valid_cattr_content (&ctx, ctor, data, size);
      D.25194 = cleanup_context (&ctx, error_list);
      return D.25194;
    }
  finally
    {
      ctx = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_verifier_is_sig_compatible (struct MonoImage * image, struct MonoMethod * method, struct MonoMethodSignature * signature)
{
  int D.25199;
  gboolean D.25202;
  long unsigned int D.25203;
  long unsigned int D.25204;
  long unsigned int D.25207;
  long unsigned int D.25208;
  long unsigned int D.25209;
  long unsigned int D.25212;
  long unsigned int D.25215;
  long unsigned int D.25220;
  short int D.25223;
  short int D.25224;
  int D.25228;
  struct MonoMethodSignature * original_sig;

  D.25199 = mono_verifier_is_enabled_for_image (image);
  if (D.25199 == 0) goto <D.25200>; else goto <D.25201>;
  <D.25200>:
  D.25202 = 1;
  return D.25202;
  <D.25201>:
  original_sig = mono_method_signature (method);
  D.25203 = BIT_FIELD_REF <*original_sig, 64, 64>;
  D.25204 = D.25203 & 64512;
  if (D.25204 == 5120) goto <D.25205>; else goto <D.25206>;
  <D.25205>:
  D.25203 = BIT_FIELD_REF <*original_sig, 64, 64>;
  D.25207 = BIT_FIELD_REF <*signature, 64, 64>;
  D.25208 = D.25203 ^ D.25207;
  D.25209 = D.25208 & 512;
  if (D.25209 != 0) goto <D.25210>; else goto <D.25211>;
  <D.25210>:
  D.25202 = 0;
  return D.25202;
  <D.25211>:
  D.25203 = BIT_FIELD_REF <*original_sig, 64, 64>;
  D.25207 = BIT_FIELD_REF <*signature, 64, 64>;
  D.25208 = D.25203 ^ D.25207;
  D.25212 = D.25208 & 64512;
  if (D.25212 != 0) goto <D.25213>; else goto <D.25214>;
  <D.25213>:
  D.25202 = 0;
  return D.25202;
  <D.25214>:
  D.25203 = BIT_FIELD_REF <*original_sig, 64, 64>;
  D.25207 = BIT_FIELD_REF <*signature, 64, 64>;
  D.25208 = D.25203 ^ D.25207;
  D.25215 = D.25208 & 256;
  if (D.25215 != 0) goto <D.25216>; else goto <D.25217>;
  <D.25216>:
  D.25202 = 0;
  return D.25202;
  <D.25217>:
  D.25203 = BIT_FIELD_REF <*original_sig, 64, 64>;
  D.25207 = BIT_FIELD_REF <*signature, 64, 64>;
  D.25208 = D.25203 ^ D.25207;
  D.25212 = D.25208 & 64512;
  if (D.25212 != 0) goto <D.25218>; else goto <D.25219>;
  <D.25218>:
  D.25202 = 0;
  return D.25202;
  <D.25219>:
  D.25203 = BIT_FIELD_REF <*original_sig, 64, 64>;
  D.25207 = BIT_FIELD_REF <*signature, 64, 64>;
  D.25208 = D.25203 ^ D.25207;
  D.25220 = D.25208 & 128;
  if (D.25220 != 0) goto <D.25221>; else goto <D.25222>;
  <D.25221>:
  D.25202 = 0;
  return D.25202;
  <D.25222>:
  D.25223 = original_sig->sentinelpos;
  D.25224 = signature->sentinelpos;
  if (D.25223 != D.25224) goto <D.25225>; else goto <D.25226>;
  <D.25225>:
  D.25202 = 0;
  return D.25202;
  <D.25226>:
  goto <D.25227>;
  <D.25206>:
  D.25228 = mono_metadata_signature_equal (signature, original_sig);
  if (D.25228 == 0) goto <D.25229>; else goto <D.25230>;
  <D.25229>:
  D.25202 = 0;
  return D.25202;
  <D.25230>:
  <D.25227>:
  D.25202 = 1;
  return D.25202;
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_typeref_row (struct MonoImage * image, guint32 row, struct MonoError * error)
{
  int D.25232;
  gboolean D.25235;
  <unnamed-unsigned:24> D.25236;
  unsigned int D.25237;
  int D.25240;
  int row.185;
  unsigned int D.25242;
  int D.25243;
  unsigned int D.25246;
  unsigned int D.25251;
  int D.25253;
  unsigned int D.25254;
  int D.25257;
  struct MonoTableInfo * table;
  guint32 data[3];

  try
    {
      table = &image->tables[1];
      mono_error_init (error);
      D.25232 = mono_verifier_is_enabled_for_image (image);
      if (D.25232 == 0) goto <D.25233>; else goto <D.25234>;
      <D.25233>:
      D.25235 = 1;
      return D.25235;
      <D.25234>:
      D.25236 = table->rows;
      D.25237 = (unsigned int) D.25236;
      if (D.25237 <= row) goto <D.25238>; else goto <D.25239>;
      <D.25238>:
      D.25236 = table->rows;
      D.25240 = (int) D.25236;
      mono_error_set_bad_image (error, image, "Invalid typeref row %d - table has %d rows", row, D.25240);
      D.25235 = 0;
      return D.25235;
      <D.25239>:
      row.185 = (int) row;
      mono_metadata_decode_row (table, row.185, &data, 3);
      D.25242 = data[0];
      D.25243 = is_valid_coded_index_with_image (image, 72, D.25242);
      if (D.25243 == 0) goto <D.25244>; else goto <D.25245>;
      <D.25244>:
      D.25242 = data[0];
      mono_error_set_bad_image (error, image, "Invalid typeref row %d coded index 0x%08x", row, D.25242);
      D.25235 = 0;
      return D.25235;
      <D.25245>:
      D.25242 = data[0];
      D.25246 = get_coded_index_token (72, D.25242);
      if (D.25246 == 0) goto <D.25247>; else goto <D.25248>;
      <D.25247>:
      mono_error_set_bad_image (error, image, "The metadata verifier doesn\'t support null ResolutionScope tokens for typeref row %d", row);
      D.25235 = 0;
      return D.25235;
      <D.25248>:
      D.25251 = data[1];
      if (D.25251 == 0) goto <D.25249>; else goto <D.25252>;
      <D.25252>:
      D.25251 = data[1];
      D.25253 = is_valid_string_full_with_image (image, D.25251, 0);
      if (D.25253 == 0) goto <D.25249>; else goto <D.25250>;
      <D.25249>:
      D.25251 = data[1];
      mono_error_set_bad_image (error, image, "Invalid typeref row %d name token 0x%08x", row, D.25251);
      D.25235 = 0;
      return D.25235;
      <D.25250>:
      D.25254 = data[2];
      if (D.25254 != 0) goto <D.25255>; else goto <D.25256>;
      <D.25255>:
      D.25254 = data[2];
      D.25257 = is_valid_string_full_with_image (image, D.25254, 0);
      if (D.25257 == 0) goto <D.25258>; else goto <D.25259>;
      <D.25258>:
      D.25254 = data[2];
      mono_error_set_bad_image (error, image, "Invalid typeref row %d namespace token 0x%08x", row, D.25254);
      D.25235 = 0;
      return D.25235;
      <D.25259>:
      <D.25256>:
      D.25235 = 1;
      return D.25235;
    }
  finally
    {
      data = {CLOBBER};
    }
}


__attribute__((visibility ("hidden")))
mono_verifier_verify_methodimpl_row (struct MonoImage * image, guint32 row, struct MonoError * error)
{
  int D.25262;
  gboolean D.25265;
  <unnamed-unsigned:24> D.25266;
  unsigned int D.25267;
  int D.25270;
  int row.186;
  unsigned int D.25272;
  struct MonoLoaderError * D.25276;
  unsigned int D.25277;
  struct MonoLoaderError * D.25281;
  int D.25286;
  struct MonoMethod * declaration;
  struct MonoMethod * body;
  struct MonoMethodSignature * body_sig;
  struct MonoMethodSignature * decl_sig;
  struct MonoTableInfo * table;
  guint32 data[3];

  try
    {
      table = &image->tables[25];
      mono_error_init (error);
      D.25262 = mono_verifier_is_enabled_for_image (image);
      if (D.25262 == 0) goto <D.25263>; else goto <D.25264>;
      <D.25263>:
      D.25265 = 1;
      return D.25265;
      <D.25264>:
      D.25266 = table->rows;
      D.25267 = (unsigned int) D.25266;
      if (D.25267 <= row) goto <D.25268>; else goto <D.25269>;
      <D.25268>:
      D.25266 = table->rows;
      D.25270 = (int) D.25266;
      mono_error_set_bad_image (error, image, "Invalid methodimpl row %d - table has %d rows", row, D.25270);
      D.25265 = 0;
      return D.25265;
      <D.25269>:
      row.186 = (int) row;
      mono_metadata_decode_row (table, row.186, &data, 3);
      D.25272 = data[1];
      body = method_from_method_def_or_ref (image, D.25272, 0B);
      if (body == 0B) goto <D.25273>; else goto <D.25275>;
      <D.25275>:
      D.25276 = mono_loader_get_last_error ();
      if (D.25276 != 0B) goto <D.25273>; else goto <D.25274>;
      <D.25273>:
      mono_loader_clear_error ();
      mono_error_set_bad_image (error, image, "Invalid methodimpl body for row %x", row);
      D.25265 = 0;
      return D.25265;
      <D.25274>:
      D.25277 = data[2];
      declaration = method_from_method_def_or_ref (image, D.25277, 0B);
      if (declaration == 0B) goto <D.25278>; else goto <D.25280>;
      <D.25280>:
      D.25281 = mono_loader_get_last_error ();
      if (D.25281 != 0B) goto <D.25278>; else goto <D.25279>;
      <D.25278>:
      mono_loader_clear_error ();
      mono_error_set_bad_image (error, image, "Invalid methodimpl declaration for row %x", row);
      D.25265 = 0;
      return D.25265;
      <D.25279>:
      body_sig = mono_method_signature_checked (body, error);
      if (body_sig == 0B) goto <D.25282>; else goto <D.25283>;
      <D.25282>:
      D.25265 = 0;
      return D.25265;
      <D.25283>:
      decl_sig = mono_method_signature_checked (declaration, error);
      if (decl_sig == 0B) goto <D.25284>; else goto <D.25285>;
      <D.25284>:
      D.25265 = 0;
      return D.25265;
      <D.25285>:
      D.25286 = mono_verifier_is_signature_compatible (decl_sig, body_sig);
      if (D.25286 == 0) goto <D.25287>; else goto <D.25288>;
      <D.25287>:
      mono_error_set_bad_image (error, image, "Invalid methodimpl body signature not compatible with declaration row %x", row);
      D.25265 = 0;
      return D.25265;
      <D.25288>:
      D.25265 = 1;
      return D.25265;
    }
  finally
    {
      data = {CLOBBER};
    }
}


