main (int argc, char * * argv)
{
  struct _IO_FILE * stdout.0;
  long unsigned int D.15019;
  long unsigned int D.15020;
  char * * D.15021;
  char * D.15022;
  char D.15023;
  int D.14850;
  int iftmp.1;
  int D.14849;
  const char[7] * D.15031;
  unsigned char D.15032;
  int D.15033;
  unsigned char D.15034;
  int D.15035;
  _Bool D.15036;
  _Bool D.15037;
  _Bool D.15038;
  const unsigned char * D.15041;
  unsigned char D.15042;
  int D.15043;
  const unsigned char * D.15044;
  unsigned char D.15045;
  int D.15046;
  _Bool D.15047;
  _Bool D.15048;
  const unsigned char * D.15051;
  unsigned char D.15052;
  int D.15053;
  const unsigned char * D.15054;
  unsigned char D.15055;
  int D.15056;
  _Bool D.15057;
  _Bool D.15058;
  const unsigned char * D.15061;
  unsigned char D.15062;
  int D.15063;
  const unsigned char * D.15064;
  unsigned char D.15065;
  int D.15066;
  int D.14859;
  int iftmp.2;
  int D.14858;
  const char[3] * D.15072;
  unsigned char D.15073;
  int D.15074;
  unsigned char D.15075;
  int D.15076;
  _Bool D.15077;
  _Bool D.15078;
  _Bool D.15079;
  const unsigned char * D.15082;
  unsigned char D.15083;
  int D.15084;
  const unsigned char * D.15085;
  unsigned char D.15086;
  int D.15087;
  _Bool D.15088;
  _Bool D.15089;
  const unsigned char * D.15092;
  unsigned char D.15093;
  int D.15094;
  const unsigned char * D.15095;
  unsigned char D.15096;
  int D.15097;
  _Bool D.15098;
  _Bool D.15099;
  const unsigned char * D.15102;
  unsigned char D.15103;
  int D.15104;
  const unsigned char * D.15105;
  unsigned char D.15106;
  int D.15107;
  int D.14868;
  int iftmp.3;
  int D.14867;
  const char[15] * D.15115;
  unsigned char D.15116;
  int D.15117;
  unsigned char D.15118;
  int D.15119;
  _Bool D.15120;
  _Bool D.15121;
  _Bool D.15122;
  const unsigned char * D.15125;
  unsigned char D.15126;
  int D.15127;
  const unsigned char * D.15128;
  unsigned char D.15129;
  int D.15130;
  _Bool D.15131;
  _Bool D.15132;
  const unsigned char * D.15135;
  unsigned char D.15136;
  int D.15137;
  const unsigned char * D.15138;
  unsigned char D.15139;
  int D.15140;
  _Bool D.15141;
  _Bool D.15142;
  const unsigned char * D.15145;
  unsigned char D.15146;
  int D.15147;
  const unsigned char * D.15148;
  unsigned char D.15149;
  int D.15150;
  int D.14877;
  int iftmp.4;
  int D.14876;
  const char[3] * D.15156;
  unsigned char D.15157;
  int D.15158;
  unsigned char D.15159;
  int D.15160;
  _Bool D.15161;
  _Bool D.15162;
  _Bool D.15163;
  const unsigned char * D.15166;
  unsigned char D.15167;
  int D.15168;
  const unsigned char * D.15169;
  unsigned char D.15170;
  int D.15171;
  _Bool D.15172;
  _Bool D.15173;
  const unsigned char * D.15176;
  unsigned char D.15177;
  int D.15178;
  const unsigned char * D.15179;
  unsigned char D.15180;
  int D.15181;
  _Bool D.15182;
  _Bool D.15183;
  const unsigned char * D.15186;
  unsigned char D.15187;
  int D.15188;
  const unsigned char * D.15189;
  unsigned char D.15190;
  int D.15191;
  int D.14886;
  int iftmp.5;
  int D.14885;
  const char[12] * D.15199;
  unsigned char D.15200;
  int D.15201;
  unsigned char D.15202;
  int D.15203;
  _Bool D.15204;
  _Bool D.15205;
  _Bool D.15206;
  const unsigned char * D.15209;
  unsigned char D.15210;
  int D.15211;
  const unsigned char * D.15212;
  unsigned char D.15213;
  int D.15214;
  _Bool D.15215;
  _Bool D.15216;
  const unsigned char * D.15219;
  unsigned char D.15220;
  int D.15221;
  const unsigned char * D.15222;
  unsigned char D.15223;
  int D.15224;
  _Bool D.15225;
  _Bool D.15226;
  const unsigned char * D.15229;
  unsigned char D.15230;
  int D.15231;
  const unsigned char * D.15232;
  unsigned char D.15233;
  int D.15234;
  int D.14895;
  int iftmp.6;
  int D.14894;
  const char[3] * D.15240;
  unsigned char D.15241;
  int D.15242;
  unsigned char D.15243;
  int D.15244;
  _Bool D.15245;
  _Bool D.15246;
  _Bool D.15247;
  const unsigned char * D.15250;
  unsigned char D.15251;
  int D.15252;
  const unsigned char * D.15253;
  unsigned char D.15254;
  int D.15255;
  _Bool D.15256;
  _Bool D.15257;
  const unsigned char * D.15260;
  unsigned char D.15261;
  int D.15262;
  const unsigned char * D.15263;
  unsigned char D.15264;
  int D.15265;
  _Bool D.15266;
  _Bool D.15267;
  const unsigned char * D.15270;
  unsigned char D.15271;
  int D.15272;
  const unsigned char * D.15273;
  unsigned char D.15274;
  int D.15275;
  int D.14904;
  int iftmp.7;
  int D.14903;
  const char[8] * D.15280;
  unsigned char D.15281;
  int D.15282;
  unsigned char D.15283;
  int D.15284;
  _Bool D.15285;
  _Bool D.15286;
  _Bool D.15287;
  const unsigned char * D.15290;
  unsigned char D.15291;
  int D.15292;
  const unsigned char * D.15293;
  unsigned char D.15294;
  int D.15295;
  _Bool D.15296;
  _Bool D.15297;
  const unsigned char * D.15300;
  unsigned char D.15301;
  int D.15302;
  const unsigned char * D.15303;
  unsigned char D.15304;
  int D.15305;
  _Bool D.15306;
  _Bool D.15307;
  const unsigned char * D.15310;
  unsigned char D.15311;
  int D.15312;
  const unsigned char * D.15313;
  unsigned char D.15314;
  int D.15315;
  int D.14913;
  int iftmp.8;
  int D.14912;
  const char[7] * D.15323;
  unsigned char D.15324;
  int D.15325;
  unsigned char D.15326;
  int D.15327;
  _Bool D.15328;
  _Bool D.15329;
  _Bool D.15330;
  const unsigned char * D.15333;
  unsigned char D.15334;
  int D.15335;
  const unsigned char * D.15336;
  unsigned char D.15337;
  int D.15338;
  _Bool D.15339;
  _Bool D.15340;
  const unsigned char * D.15343;
  unsigned char D.15344;
  int D.15345;
  const unsigned char * D.15346;
  unsigned char D.15347;
  int D.15348;
  _Bool D.15349;
  _Bool D.15350;
  const unsigned char * D.15353;
  unsigned char D.15354;
  int D.15355;
  const unsigned char * D.15356;
  unsigned char D.15357;
  int D.15358;
  int D.14922;
  int iftmp.9;
  int D.14921;
  const char[11] * D.15369;
  unsigned char D.15370;
  int D.15371;
  unsigned char D.15372;
  int D.15373;
  _Bool D.15374;
  _Bool D.15375;
  _Bool D.15376;
  const unsigned char * D.15379;
  unsigned char D.15380;
  int D.15381;
  const unsigned char * D.15382;
  unsigned char D.15383;
  int D.15384;
  _Bool D.15385;
  _Bool D.15386;
  const unsigned char * D.15389;
  unsigned char D.15390;
  int D.15391;
  const unsigned char * D.15392;
  unsigned char D.15393;
  int D.15394;
  _Bool D.15395;
  _Bool D.15396;
  const unsigned char * D.15399;
  unsigned char D.15400;
  int D.15401;
  const unsigned char * D.15402;
  unsigned char D.15403;
  int D.15404;
  int D.14931;
  int iftmp.10;
  int D.14930;
  const char[3] * D.15410;
  unsigned char D.15411;
  int D.15412;
  unsigned char D.15413;
  int D.15414;
  _Bool D.15415;
  _Bool D.15416;
  _Bool D.15417;
  const unsigned char * D.15420;
  unsigned char D.15421;
  int D.15422;
  const unsigned char * D.15423;
  unsigned char D.15424;
  int D.15425;
  _Bool D.15426;
  _Bool D.15427;
  const unsigned char * D.15430;
  unsigned char D.15431;
  int D.15432;
  const unsigned char * D.15433;
  unsigned char D.15434;
  int D.15435;
  _Bool D.15436;
  _Bool D.15437;
  const unsigned char * D.15440;
  unsigned char D.15441;
  int D.15442;
  const unsigned char * D.15443;
  unsigned char D.15444;
  int D.15445;
  int D.14940;
  int iftmp.11;
  int D.14939;
  const char[8] * D.15453;
  unsigned char D.15454;
  int D.15455;
  unsigned char D.15456;
  int D.15457;
  _Bool D.15458;
  _Bool D.15459;
  _Bool D.15460;
  const unsigned char * D.15463;
  unsigned char D.15464;
  int D.15465;
  const unsigned char * D.15466;
  unsigned char D.15467;
  int D.15468;
  _Bool D.15469;
  _Bool D.15470;
  const unsigned char * D.15473;
  unsigned char D.15474;
  int D.15475;
  const unsigned char * D.15476;
  unsigned char D.15477;
  int D.15478;
  _Bool D.15479;
  _Bool D.15480;
  const unsigned char * D.15483;
  unsigned char D.15484;
  int D.15485;
  const unsigned char * D.15486;
  unsigned char D.15487;
  int D.15488;
  int D.14949;
  int iftmp.12;
  int D.14948;
  const char[3] * D.15494;
  unsigned char D.15495;
  int D.15496;
  unsigned char D.15497;
  int D.15498;
  _Bool D.15499;
  _Bool D.15500;
  _Bool D.15501;
  const unsigned char * D.15504;
  unsigned char D.15505;
  int D.15506;
  const unsigned char * D.15507;
  unsigned char D.15508;
  int D.15509;
  _Bool D.15510;
  _Bool D.15511;
  const unsigned char * D.15514;
  unsigned char D.15515;
  int D.15516;
  const unsigned char * D.15517;
  unsigned char D.15518;
  int D.15519;
  _Bool D.15520;
  _Bool D.15521;
  const unsigned char * D.15524;
  unsigned char D.15525;
  int D.15526;
  const unsigned char * D.15527;
  unsigned char D.15528;
  int D.15529;
  int D.14958;
  int iftmp.13;
  int D.14957;
  const char[10] * D.15537;
  unsigned char D.15538;
  int D.15539;
  unsigned char D.15540;
  int D.15541;
  _Bool D.15542;
  _Bool D.15543;
  _Bool D.15544;
  const unsigned char * D.15547;
  unsigned char D.15548;
  int D.15549;
  const unsigned char * D.15550;
  unsigned char D.15551;
  int D.15552;
  _Bool D.15553;
  _Bool D.15554;
  const unsigned char * D.15557;
  unsigned char D.15558;
  int D.15559;
  const unsigned char * D.15560;
  unsigned char D.15561;
  int D.15562;
  _Bool D.15563;
  _Bool D.15564;
  const unsigned char * D.15567;
  unsigned char D.15568;
  int D.15569;
  const unsigned char * D.15570;
  unsigned char D.15571;
  int D.15572;
  int D.14967;
  int iftmp.14;
  int D.14966;
  const char[3] * D.15578;
  unsigned char D.15579;
  int D.15580;
  unsigned char D.15581;
  int D.15582;
  _Bool D.15583;
  _Bool D.15584;
  _Bool D.15585;
  const unsigned char * D.15588;
  unsigned char D.15589;
  int D.15590;
  const unsigned char * D.15591;
  unsigned char D.15592;
  int D.15593;
  _Bool D.15594;
  _Bool D.15595;
  const unsigned char * D.15598;
  unsigned char D.15599;
  int D.15600;
  const unsigned char * D.15601;
  unsigned char D.15602;
  int D.15603;
  _Bool D.15604;
  _Bool D.15605;
  const unsigned char * D.15608;
  unsigned char D.15609;
  int D.15610;
  const unsigned char * D.15611;
  unsigned char D.15612;
  int D.15613;
  int verbose.15;
  int verbose.16;
  int D.14976;
  int iftmp.17;
  int D.14975;
  const char[9] * D.15623;
  unsigned char D.15624;
  int D.15625;
  unsigned char D.15626;
  int D.15627;
  _Bool D.15628;
  _Bool D.15629;
  _Bool D.15630;
  const unsigned char * D.15633;
  unsigned char D.15634;
  int D.15635;
  const unsigned char * D.15636;
  unsigned char D.15637;
  int D.15638;
  _Bool D.15639;
  _Bool D.15640;
  const unsigned char * D.15643;
  unsigned char D.15644;
  int D.15645;
  const unsigned char * D.15646;
  unsigned char D.15647;
  int D.15648;
  _Bool D.15649;
  _Bool D.15650;
  const unsigned char * D.15653;
  unsigned char D.15654;
  int D.15655;
  const unsigned char * D.15656;
  unsigned char D.15657;
  int D.15658;
  int D.14985;
  int iftmp.18;
  int D.14984;
  const char[3] * D.15664;
  unsigned char D.15665;
  int D.15666;
  unsigned char D.15667;
  int D.15668;
  _Bool D.15669;
  _Bool D.15670;
  _Bool D.15671;
  const unsigned char * D.15674;
  unsigned char D.15675;
  int D.15676;
  const unsigned char * D.15677;
  unsigned char D.15678;
  int D.15679;
  _Bool D.15680;
  _Bool D.15681;
  const unsigned char * D.15684;
  unsigned char D.15685;
  int D.15686;
  const unsigned char * D.15687;
  unsigned char D.15688;
  int D.15689;
  _Bool D.15690;
  _Bool D.15691;
  const unsigned char * D.15694;
  unsigned char D.15695;
  int D.15696;
  const unsigned char * D.15697;
  unsigned char D.15698;
  int D.15699;
  int D.15701;
  int D.14994;
  int iftmp.19;
  int D.14993;
  const char[8] * D.15710;
  unsigned char D.15711;
  int D.15712;
  unsigned char D.15713;
  int D.15714;
  _Bool D.15715;
  _Bool D.15716;
  _Bool D.15717;
  const unsigned char * D.15720;
  unsigned char D.15721;
  int D.15722;
  const unsigned char * D.15723;
  unsigned char D.15724;
  int D.15725;
  _Bool D.15726;
  _Bool D.15727;
  const unsigned char * D.15730;
  unsigned char D.15731;
  int D.15732;
  const unsigned char * D.15733;
  unsigned char D.15734;
  int D.15735;
  _Bool D.15736;
  _Bool D.15737;
  const unsigned char * D.15740;
  unsigned char D.15741;
  int D.15742;
  const unsigned char * D.15743;
  unsigned char D.15744;
  int D.15745;
  int D.15003;
  int iftmp.20;
  int D.15002;
  const char[3] * D.15751;
  unsigned char D.15752;
  int D.15753;
  unsigned char D.15754;
  int D.15755;
  _Bool D.15756;
  _Bool D.15757;
  _Bool D.15758;
  const unsigned char * D.15761;
  unsigned char D.15762;
  int D.15763;
  const unsigned char * D.15764;
  unsigned char D.15765;
  int D.15766;
  _Bool D.15767;
  _Bool D.15768;
  const unsigned char * D.15771;
  unsigned char D.15772;
  int D.15773;
  const unsigned char * D.15774;
  unsigned char D.15775;
  int D.15776;
  _Bool D.15777;
  _Bool D.15778;
  const unsigned char * D.15781;
  unsigned char D.15782;
  int D.15783;
  const unsigned char * D.15784;
  unsigned char D.15785;
  int D.15786;
  int max_depth.21;
  sizetype D.15795;
  sizetype D.15796;
  sizetype D.15797;
  char * * D.15798;
  char * D.15801;
  struct MonoImage * D.15803;
  _Bool D.15804;
  _Bool D.15805;
  _Bool D.15806;
  char * D.15817;
  char * D.15818;
  struct FILE * output.22;
  struct FILE * output.23;
  struct FILE * output.24;
  char * D.15831;
  int D.15843;
  struct MonoAssembly * assembly;
  struct MonoImage * image;
  const char * cname;
  const char * aname;
  char * outputfile;
  int graphtype;
  int callneato;
  int i;

  cname = 0B;
  aname = 0B;
  outputfile = 0B;
  graphtype = 0;
  callneato = 0;
  stdout.0 = stdout;
  output = stdout.0;
  i = 1;
  goto <D.15005>;
  <D.15004>:
  D.15019 = (long unsigned int) i;
  D.15020 = D.15019 * 8;
  D.15021 = argv + D.15020;
  D.15022 = *D.15021;
  D.15023 = *D.15022;
  if (D.15023 != 45) goto <D.14841>; else goto <D.15024>;
  <D.15024>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15031 = "--call";
      D.15032 = MEM[(const unsigned char *)D.15031];
      D.15033 = (int) D.15032;
      D.15034 = *__s2;
      D.15035 = (int) D.15034;
      __result = D.15033 - D.15035;
      {
        D.15036 = __s2_len != 0;
        D.15037 = __result == 0;
        D.15038 = D.15036 & D.15037;
        if (D.15038 != 0) goto <D.15039>; else goto <D.15040>;
        <D.15039>:
        D.15041 = &MEM[(void *)"--call" + 1B];
        D.15042 = *D.15041;
        D.15043 = (int) D.15042;
        D.15044 = __s2 + 1;
        D.15045 = *D.15044;
        D.15046 = (int) D.15045;
        __result = D.15043 - D.15046;
        D.15047 = __s2_len > 1;
        D.15037 = __result == 0;
        D.15048 = D.15047 & D.15037;
        if (D.15048 != 0) goto <D.15049>; else goto <D.15050>;
        <D.15049>:
        D.15051 = &MEM[(void *)"--call" + 2B];
        D.15052 = *D.15051;
        D.15053 = (int) D.15052;
        D.15054 = __s2 + 2;
        D.15055 = *D.15054;
        D.15056 = (int) D.15055;
        __result = D.15053 - D.15056;
        D.15057 = __s2_len > 2;
        D.15037 = __result == 0;
        D.15058 = D.15057 & D.15037;
        if (D.15058 != 0) goto <D.15059>; else goto <D.15060>;
        <D.15059>:
        D.15061 = &MEM[(void *)"--call" + 3B];
        D.15062 = *D.15061;
        D.15063 = (int) D.15062;
        D.15064 = __s2 + 3;
        D.15065 = *D.15064;
        D.15066 = (int) D.15065;
        __result = D.15063 - D.15066;
        <D.15060>:
        <D.15050>:
        <D.15040>:
      }
      D.14849 = __result;
    }
    iftmp.1 = -D.14849;
    goto <D.15067>;
    <D.15030>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.1 = __builtin_strcmp (D.15022, "--call");
    <D.15067>:
    D.14850 = iftmp.1;
  }
  if (D.14850 == 0) goto <D.15025>; else goto <D.15068>;
  <D.15068>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15072 = "-c";
      D.15073 = MEM[(const unsigned char *)D.15072];
      D.15074 = (int) D.15073;
      D.15075 = *__s2;
      D.15076 = (int) D.15075;
      __result = D.15074 - D.15076;
      {
        D.15077 = __s2_len != 0;
        D.15078 = __result == 0;
        D.15079 = D.15077 & D.15078;
        if (D.15079 != 0) goto <D.15080>; else goto <D.15081>;
        <D.15080>:
        D.15082 = &MEM[(void *)"-c" + 1B];
        D.15083 = *D.15082;
        D.15084 = (int) D.15083;
        D.15085 = __s2 + 1;
        D.15086 = *D.15085;
        D.15087 = (int) D.15086;
        __result = D.15084 - D.15087;
        D.15088 = __s2_len > 1;
        D.15078 = __result == 0;
        D.15089 = D.15088 & D.15078;
        if (D.15089 != 0) goto <D.15090>; else goto <D.15091>;
        <D.15090>:
        D.15092 = &MEM[(void *)"-c" + 2B];
        D.15093 = *D.15092;
        D.15094 = (int) D.15093;
        D.15095 = __s2 + 2;
        D.15096 = *D.15095;
        D.15097 = (int) D.15096;
        __result = D.15094 - D.15097;
        D.15098 = __s2_len > 2;
        D.15078 = __result == 0;
        D.15099 = D.15098 & D.15078;
        if (D.15099 != 0) goto <D.15100>; else goto <D.15101>;
        <D.15100>:
        D.15102 = &MEM[(void *)"-c" + 3B];
        D.15103 = *D.15102;
        D.15104 = (int) D.15103;
        D.15105 = __s2 + 3;
        D.15106 = *D.15105;
        D.15107 = (int) D.15106;
        __result = D.15104 - D.15107;
        <D.15101>:
        <D.15091>:
        <D.15081>:
      }
      D.14858 = __result;
    }
    iftmp.2 = -D.14858;
    goto <D.15108>;
    <D.15071>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.2 = __builtin_strcmp (D.15022, "-c");
    <D.15108>:
    D.14859 = iftmp.2;
  }
  if (D.14859 == 0) goto <D.15025>; else goto <D.15026>;
  <D.15025>:
  graphtype = 1;
  goto <D.15027>;
  <D.15026>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15115 = "--control-flow";
      D.15116 = MEM[(const unsigned char *)D.15115];
      D.15117 = (int) D.15116;
      D.15118 = *__s2;
      D.15119 = (int) D.15118;
      __result = D.15117 - D.15119;
      {
        D.15120 = __s2_len != 0;
        D.15121 = __result == 0;
        D.15122 = D.15120 & D.15121;
        if (D.15122 != 0) goto <D.15123>; else goto <D.15124>;
        <D.15123>:
        D.15125 = &MEM[(void *)"--control-flow" + 1B];
        D.15126 = *D.15125;
        D.15127 = (int) D.15126;
        D.15128 = __s2 + 1;
        D.15129 = *D.15128;
        D.15130 = (int) D.15129;
        __result = D.15127 - D.15130;
        D.15131 = __s2_len > 1;
        D.15121 = __result == 0;
        D.15132 = D.15131 & D.15121;
        if (D.15132 != 0) goto <D.15133>; else goto <D.15134>;
        <D.15133>:
        D.15135 = &MEM[(void *)"--control-flow" + 2B];
        D.15136 = *D.15135;
        D.15137 = (int) D.15136;
        D.15138 = __s2 + 2;
        D.15139 = *D.15138;
        D.15140 = (int) D.15139;
        __result = D.15137 - D.15140;
        D.15141 = __s2_len > 2;
        D.15121 = __result == 0;
        D.15142 = D.15141 & D.15121;
        if (D.15142 != 0) goto <D.15143>; else goto <D.15144>;
        <D.15143>:
        D.15145 = &MEM[(void *)"--control-flow" + 3B];
        D.15146 = *D.15145;
        D.15147 = (int) D.15146;
        D.15148 = __s2 + 3;
        D.15149 = *D.15148;
        D.15150 = (int) D.15149;
        __result = D.15147 - D.15150;
        <D.15144>:
        <D.15134>:
        <D.15124>:
      }
      D.14867 = __result;
    }
    iftmp.3 = -D.14867;
    goto <D.15151>;
    <D.15114>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.3 = __builtin_strcmp (D.15022, "--control-flow");
    <D.15151>:
    D.14868 = iftmp.3;
  }
  if (D.14868 == 0) goto <D.15109>; else goto <D.15152>;
  <D.15152>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15156 = "-C";
      D.15157 = MEM[(const unsigned char *)D.15156];
      D.15158 = (int) D.15157;
      D.15159 = *__s2;
      D.15160 = (int) D.15159;
      __result = D.15158 - D.15160;
      {
        D.15161 = __s2_len != 0;
        D.15162 = __result == 0;
        D.15163 = D.15161 & D.15162;
        if (D.15163 != 0) goto <D.15164>; else goto <D.15165>;
        <D.15164>:
        D.15166 = &MEM[(void *)"-C" + 1B];
        D.15167 = *D.15166;
        D.15168 = (int) D.15167;
        D.15169 = __s2 + 1;
        D.15170 = *D.15169;
        D.15171 = (int) D.15170;
        __result = D.15168 - D.15171;
        D.15172 = __s2_len > 1;
        D.15162 = __result == 0;
        D.15173 = D.15172 & D.15162;
        if (D.15173 != 0) goto <D.15174>; else goto <D.15175>;
        <D.15174>:
        D.15176 = &MEM[(void *)"-C" + 2B];
        D.15177 = *D.15176;
        D.15178 = (int) D.15177;
        D.15179 = __s2 + 2;
        D.15180 = *D.15179;
        D.15181 = (int) D.15180;
        __result = D.15178 - D.15181;
        D.15182 = __s2_len > 2;
        D.15162 = __result == 0;
        D.15183 = D.15182 & D.15162;
        if (D.15183 != 0) goto <D.15184>; else goto <D.15185>;
        <D.15184>:
        D.15186 = &MEM[(void *)"-C" + 3B];
        D.15187 = *D.15186;
        D.15188 = (int) D.15187;
        D.15189 = __s2 + 3;
        D.15190 = *D.15189;
        D.15191 = (int) D.15190;
        __result = D.15188 - D.15191;
        <D.15185>:
        <D.15175>:
        <D.15165>:
      }
      D.14876 = __result;
    }
    iftmp.4 = -D.14876;
    goto <D.15192>;
    <D.15155>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.4 = __builtin_strcmp (D.15022, "-C");
    <D.15192>:
    D.14877 = iftmp.4;
  }
  if (D.14877 == 0) goto <D.15109>; else goto <D.15110>;
  <D.15109>:
  graphtype = 3;
  goto <D.15111>;
  <D.15110>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15199 = "--interface";
      D.15200 = MEM[(const unsigned char *)D.15199];
      D.15201 = (int) D.15200;
      D.15202 = *__s2;
      D.15203 = (int) D.15202;
      __result = D.15201 - D.15203;
      {
        D.15204 = __s2_len != 0;
        D.15205 = __result == 0;
        D.15206 = D.15204 & D.15205;
        if (D.15206 != 0) goto <D.15207>; else goto <D.15208>;
        <D.15207>:
        D.15209 = &MEM[(void *)"--interface" + 1B];
        D.15210 = *D.15209;
        D.15211 = (int) D.15210;
        D.15212 = __s2 + 1;
        D.15213 = *D.15212;
        D.15214 = (int) D.15213;
        __result = D.15211 - D.15214;
        D.15215 = __s2_len > 1;
        D.15205 = __result == 0;
        D.15216 = D.15215 & D.15205;
        if (D.15216 != 0) goto <D.15217>; else goto <D.15218>;
        <D.15217>:
        D.15219 = &MEM[(void *)"--interface" + 2B];
        D.15220 = *D.15219;
        D.15221 = (int) D.15220;
        D.15222 = __s2 + 2;
        D.15223 = *D.15222;
        D.15224 = (int) D.15223;
        __result = D.15221 - D.15224;
        D.15225 = __s2_len > 2;
        D.15205 = __result == 0;
        D.15226 = D.15225 & D.15205;
        if (D.15226 != 0) goto <D.15227>; else goto <D.15228>;
        <D.15227>:
        D.15229 = &MEM[(void *)"--interface" + 3B];
        D.15230 = *D.15229;
        D.15231 = (int) D.15230;
        D.15232 = __s2 + 3;
        D.15233 = *D.15232;
        D.15234 = (int) D.15233;
        __result = D.15231 - D.15234;
        <D.15228>:
        <D.15218>:
        <D.15208>:
      }
      D.14885 = __result;
    }
    iftmp.5 = -D.14885;
    goto <D.15235>;
    <D.15198>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.5 = __builtin_strcmp (D.15022, "--interface");
    <D.15235>:
    D.14886 = iftmp.5;
  }
  if (D.14886 == 0) goto <D.15193>; else goto <D.15236>;
  <D.15236>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15240 = "-i";
      D.15241 = MEM[(const unsigned char *)D.15240];
      D.15242 = (int) D.15241;
      D.15243 = *__s2;
      D.15244 = (int) D.15243;
      __result = D.15242 - D.15244;
      {
        D.15245 = __s2_len != 0;
        D.15246 = __result == 0;
        D.15247 = D.15245 & D.15246;
        if (D.15247 != 0) goto <D.15248>; else goto <D.15249>;
        <D.15248>:
        D.15250 = &MEM[(void *)"-i" + 1B];
        D.15251 = *D.15250;
        D.15252 = (int) D.15251;
        D.15253 = __s2 + 1;
        D.15254 = *D.15253;
        D.15255 = (int) D.15254;
        __result = D.15252 - D.15255;
        D.15256 = __s2_len > 1;
        D.15246 = __result == 0;
        D.15257 = D.15256 & D.15246;
        if (D.15257 != 0) goto <D.15258>; else goto <D.15259>;
        <D.15258>:
        D.15260 = &MEM[(void *)"-i" + 2B];
        D.15261 = *D.15260;
        D.15262 = (int) D.15261;
        D.15263 = __s2 + 2;
        D.15264 = *D.15263;
        D.15265 = (int) D.15264;
        __result = D.15262 - D.15265;
        D.15266 = __s2_len > 2;
        D.15246 = __result == 0;
        D.15267 = D.15266 & D.15246;
        if (D.15267 != 0) goto <D.15268>; else goto <D.15269>;
        <D.15268>:
        D.15270 = &MEM[(void *)"-i" + 3B];
        D.15271 = *D.15270;
        D.15272 = (int) D.15271;
        D.15273 = __s2 + 3;
        D.15274 = *D.15273;
        D.15275 = (int) D.15274;
        __result = D.15272 - D.15275;
        <D.15269>:
        <D.15259>:
        <D.15249>:
      }
      D.14894 = __result;
    }
    iftmp.6 = -D.14894;
    goto <D.15276>;
    <D.15239>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.6 = __builtin_strcmp (D.15022, "-i");
    <D.15276>:
    D.14895 = iftmp.6;
  }
  if (D.14895 == 0) goto <D.15193>; else goto <D.15194>;
  <D.15193>:
  graphtype = 2;
  goto <D.15195>;
  <D.15194>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15280 = "--stats";
      D.15281 = MEM[(const unsigned char *)D.15280];
      D.15282 = (int) D.15281;
      D.15283 = *__s2;
      D.15284 = (int) D.15283;
      __result = D.15282 - D.15284;
      {
        D.15285 = __s2_len != 0;
        D.15286 = __result == 0;
        D.15287 = D.15285 & D.15286;
        if (D.15287 != 0) goto <D.15288>; else goto <D.15289>;
        <D.15288>:
        D.15290 = &MEM[(void *)"--stats" + 1B];
        D.15291 = *D.15290;
        D.15292 = (int) D.15291;
        D.15293 = __s2 + 1;
        D.15294 = *D.15293;
        D.15295 = (int) D.15294;
        __result = D.15292 - D.15295;
        D.15296 = __s2_len > 1;
        D.15286 = __result == 0;
        D.15297 = D.15296 & D.15286;
        if (D.15297 != 0) goto <D.15298>; else goto <D.15299>;
        <D.15298>:
        D.15300 = &MEM[(void *)"--stats" + 2B];
        D.15301 = *D.15300;
        D.15302 = (int) D.15301;
        D.15303 = __s2 + 2;
        D.15304 = *D.15303;
        D.15305 = (int) D.15304;
        __result = D.15302 - D.15305;
        D.15306 = __s2_len > 2;
        D.15286 = __result == 0;
        D.15307 = D.15306 & D.15286;
        if (D.15307 != 0) goto <D.15308>; else goto <D.15309>;
        <D.15308>:
        D.15310 = &MEM[(void *)"--stats" + 3B];
        D.15311 = *D.15310;
        D.15312 = (int) D.15311;
        D.15313 = __s2 + 3;
        D.15314 = *D.15313;
        D.15315 = (int) D.15314;
        __result = D.15312 - D.15315;
        <D.15309>:
        <D.15299>:
        <D.15289>:
      }
      D.14903 = __result;
    }
    iftmp.7 = -D.14903;
    goto <D.15316>;
    <D.15279>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.7 = __builtin_strcmp (D.15022, "--stats");
    <D.15316>:
    D.14904 = iftmp.7;
  }
  if (D.14904 == 0) goto <D.15317>; else goto <D.15318>;
  <D.15317>:
  graphtype = 5;
  goto <D.15319>;
  <D.15318>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15323 = "--size";
      D.15324 = MEM[(const unsigned char *)D.15323];
      D.15325 = (int) D.15324;
      D.15326 = *__s2;
      D.15327 = (int) D.15326;
      __result = D.15325 - D.15327;
      {
        D.15328 = __s2_len != 0;
        D.15329 = __result == 0;
        D.15330 = D.15328 & D.15329;
        if (D.15330 != 0) goto <D.15331>; else goto <D.15332>;
        <D.15331>:
        D.15333 = &MEM[(void *)"--size" + 1B];
        D.15334 = *D.15333;
        D.15335 = (int) D.15334;
        D.15336 = __s2 + 1;
        D.15337 = *D.15336;
        D.15338 = (int) D.15337;
        __result = D.15335 - D.15338;
        D.15339 = __s2_len > 1;
        D.15329 = __result == 0;
        D.15340 = D.15339 & D.15329;
        if (D.15340 != 0) goto <D.15341>; else goto <D.15342>;
        <D.15341>:
        D.15343 = &MEM[(void *)"--size" + 2B];
        D.15344 = *D.15343;
        D.15345 = (int) D.15344;
        D.15346 = __s2 + 2;
        D.15347 = *D.15346;
        D.15348 = (int) D.15347;
        __result = D.15345 - D.15348;
        D.15349 = __s2_len > 2;
        D.15329 = __result == 0;
        D.15350 = D.15349 & D.15329;
        if (D.15350 != 0) goto <D.15351>; else goto <D.15352>;
        <D.15351>:
        D.15353 = &MEM[(void *)"--size" + 3B];
        D.15354 = *D.15353;
        D.15355 = (int) D.15354;
        D.15356 = __s2 + 3;
        D.15357 = *D.15356;
        D.15358 = (int) D.15357;
        __result = D.15355 - D.15358;
        <D.15352>:
        <D.15342>:
        <D.15332>:
      }
      D.14912 = __result;
    }
    iftmp.8 = -D.14912;
    goto <D.15359>;
    <D.15322>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.8 = __builtin_strcmp (D.15022, "--size");
    <D.15359>:
    D.14913 = iftmp.8;
  }
  if (D.14913 == 0) goto <D.15360>; else goto <D.15361>;
  <D.15360>:
  graphtype = 4;
  goto <D.15362>;
  <D.15361>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15369 = "--fullname";
      D.15370 = MEM[(const unsigned char *)D.15369];
      D.15371 = (int) D.15370;
      D.15372 = *__s2;
      D.15373 = (int) D.15372;
      __result = D.15371 - D.15373;
      {
        D.15374 = __s2_len != 0;
        D.15375 = __result == 0;
        D.15376 = D.15374 & D.15375;
        if (D.15376 != 0) goto <D.15377>; else goto <D.15378>;
        <D.15377>:
        D.15379 = &MEM[(void *)"--fullname" + 1B];
        D.15380 = *D.15379;
        D.15381 = (int) D.15380;
        D.15382 = __s2 + 1;
        D.15383 = *D.15382;
        D.15384 = (int) D.15383;
        __result = D.15381 - D.15384;
        D.15385 = __s2_len > 1;
        D.15375 = __result == 0;
        D.15386 = D.15385 & D.15375;
        if (D.15386 != 0) goto <D.15387>; else goto <D.15388>;
        <D.15387>:
        D.15389 = &MEM[(void *)"--fullname" + 2B];
        D.15390 = *D.15389;
        D.15391 = (int) D.15390;
        D.15392 = __s2 + 2;
        D.15393 = *D.15392;
        D.15394 = (int) D.15393;
        __result = D.15391 - D.15394;
        D.15395 = __s2_len > 2;
        D.15375 = __result == 0;
        D.15396 = D.15395 & D.15375;
        if (D.15396 != 0) goto <D.15397>; else goto <D.15398>;
        <D.15397>:
        D.15399 = &MEM[(void *)"--fullname" + 3B];
        D.15400 = *D.15399;
        D.15401 = (int) D.15400;
        D.15402 = __s2 + 3;
        D.15403 = *D.15402;
        D.15404 = (int) D.15403;
        __result = D.15401 - D.15404;
        <D.15398>:
        <D.15388>:
        <D.15378>:
      }
      D.14921 = __result;
    }
    iftmp.9 = -D.14921;
    goto <D.15405>;
    <D.15368>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.9 = __builtin_strcmp (D.15022, "--fullname");
    <D.15405>:
    D.14922 = iftmp.9;
  }
  if (D.14922 == 0) goto <D.15363>; else goto <D.15406>;
  <D.15406>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15410 = "-f";
      D.15411 = MEM[(const unsigned char *)D.15410];
      D.15412 = (int) D.15411;
      D.15413 = *__s2;
      D.15414 = (int) D.15413;
      __result = D.15412 - D.15414;
      {
        D.15415 = __s2_len != 0;
        D.15416 = __result == 0;
        D.15417 = D.15415 & D.15416;
        if (D.15417 != 0) goto <D.15418>; else goto <D.15419>;
        <D.15418>:
        D.15420 = &MEM[(void *)"-f" + 1B];
        D.15421 = *D.15420;
        D.15422 = (int) D.15421;
        D.15423 = __s2 + 1;
        D.15424 = *D.15423;
        D.15425 = (int) D.15424;
        __result = D.15422 - D.15425;
        D.15426 = __s2_len > 1;
        D.15416 = __result == 0;
        D.15427 = D.15426 & D.15416;
        if (D.15427 != 0) goto <D.15428>; else goto <D.15429>;
        <D.15428>:
        D.15430 = &MEM[(void *)"-f" + 2B];
        D.15431 = *D.15430;
        D.15432 = (int) D.15431;
        D.15433 = __s2 + 2;
        D.15434 = *D.15433;
        D.15435 = (int) D.15434;
        __result = D.15432 - D.15435;
        D.15436 = __s2_len > 2;
        D.15416 = __result == 0;
        D.15437 = D.15436 & D.15416;
        if (D.15437 != 0) goto <D.15438>; else goto <D.15439>;
        <D.15438>:
        D.15440 = &MEM[(void *)"-f" + 3B];
        D.15441 = *D.15440;
        D.15442 = (int) D.15441;
        D.15443 = __s2 + 3;
        D.15444 = *D.15443;
        D.15445 = (int) D.15444;
        __result = D.15442 - D.15445;
        <D.15439>:
        <D.15429>:
        <D.15419>:
      }
      D.14930 = __result;
    }
    iftmp.10 = -D.14930;
    goto <D.15446>;
    <D.15409>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.10 = __builtin_strcmp (D.15022, "-f");
    <D.15446>:
    D.14931 = iftmp.10;
  }
  if (D.14931 == 0) goto <D.15363>; else goto <D.15364>;
  <D.15363>:
  include_namespace = 1;
  goto <D.15365>;
  <D.15364>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15453 = "--neato";
      D.15454 = MEM[(const unsigned char *)D.15453];
      D.15455 = (int) D.15454;
      D.15456 = *__s2;
      D.15457 = (int) D.15456;
      __result = D.15455 - D.15457;
      {
        D.15458 = __s2_len != 0;
        D.15459 = __result == 0;
        D.15460 = D.15458 & D.15459;
        if (D.15460 != 0) goto <D.15461>; else goto <D.15462>;
        <D.15461>:
        D.15463 = &MEM[(void *)"--neato" + 1B];
        D.15464 = *D.15463;
        D.15465 = (int) D.15464;
        D.15466 = __s2 + 1;
        D.15467 = *D.15466;
        D.15468 = (int) D.15467;
        __result = D.15465 - D.15468;
        D.15469 = __s2_len > 1;
        D.15459 = __result == 0;
        D.15470 = D.15469 & D.15459;
        if (D.15470 != 0) goto <D.15471>; else goto <D.15472>;
        <D.15471>:
        D.15473 = &MEM[(void *)"--neato" + 2B];
        D.15474 = *D.15473;
        D.15475 = (int) D.15474;
        D.15476 = __s2 + 2;
        D.15477 = *D.15476;
        D.15478 = (int) D.15477;
        __result = D.15475 - D.15478;
        D.15479 = __s2_len > 2;
        D.15459 = __result == 0;
        D.15480 = D.15479 & D.15459;
        if (D.15480 != 0) goto <D.15481>; else goto <D.15482>;
        <D.15481>:
        D.15483 = &MEM[(void *)"--neato" + 3B];
        D.15484 = *D.15483;
        D.15485 = (int) D.15484;
        D.15486 = __s2 + 3;
        D.15487 = *D.15486;
        D.15488 = (int) D.15487;
        __result = D.15485 - D.15488;
        <D.15482>:
        <D.15472>:
        <D.15462>:
      }
      D.14939 = __result;
    }
    iftmp.11 = -D.14939;
    goto <D.15489>;
    <D.15452>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.11 = __builtin_strcmp (D.15022, "--neato");
    <D.15489>:
    D.14940 = iftmp.11;
  }
  if (D.14940 == 0) goto <D.15447>; else goto <D.15490>;
  <D.15490>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15494 = "-n";
      D.15495 = MEM[(const unsigned char *)D.15494];
      D.15496 = (int) D.15495;
      D.15497 = *__s2;
      D.15498 = (int) D.15497;
      __result = D.15496 - D.15498;
      {
        D.15499 = __s2_len != 0;
        D.15500 = __result == 0;
        D.15501 = D.15499 & D.15500;
        if (D.15501 != 0) goto <D.15502>; else goto <D.15503>;
        <D.15502>:
        D.15504 = &MEM[(void *)"-n" + 1B];
        D.15505 = *D.15504;
        D.15506 = (int) D.15505;
        D.15507 = __s2 + 1;
        D.15508 = *D.15507;
        D.15509 = (int) D.15508;
        __result = D.15506 - D.15509;
        D.15510 = __s2_len > 1;
        D.15500 = __result == 0;
        D.15511 = D.15510 & D.15500;
        if (D.15511 != 0) goto <D.15512>; else goto <D.15513>;
        <D.15512>:
        D.15514 = &MEM[(void *)"-n" + 2B];
        D.15515 = *D.15514;
        D.15516 = (int) D.15515;
        D.15517 = __s2 + 2;
        D.15518 = *D.15517;
        D.15519 = (int) D.15518;
        __result = D.15516 - D.15519;
        D.15520 = __s2_len > 2;
        D.15500 = __result == 0;
        D.15521 = D.15520 & D.15500;
        if (D.15521 != 0) goto <D.15522>; else goto <D.15523>;
        <D.15522>:
        D.15524 = &MEM[(void *)"-n" + 3B];
        D.15525 = *D.15524;
        D.15526 = (int) D.15525;
        D.15527 = __s2 + 3;
        D.15528 = *D.15527;
        D.15529 = (int) D.15528;
        __result = D.15526 - D.15529;
        <D.15523>:
        <D.15513>:
        <D.15503>:
      }
      D.14948 = __result;
    }
    iftmp.12 = -D.14948;
    goto <D.15530>;
    <D.15493>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.12 = __builtin_strcmp (D.15022, "-n");
    <D.15530>:
    D.14949 = iftmp.12;
  }
  if (D.14949 == 0) goto <D.15447>; else goto <D.15448>;
  <D.15447>:
  callneato = 1;
  goto <D.15449>;
  <D.15448>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15537 = "--verbose";
      D.15538 = MEM[(const unsigned char *)D.15537];
      D.15539 = (int) D.15538;
      D.15540 = *__s2;
      D.15541 = (int) D.15540;
      __result = D.15539 - D.15541;
      {
        D.15542 = __s2_len != 0;
        D.15543 = __result == 0;
        D.15544 = D.15542 & D.15543;
        if (D.15544 != 0) goto <D.15545>; else goto <D.15546>;
        <D.15545>:
        D.15547 = &MEM[(void *)"--verbose" + 1B];
        D.15548 = *D.15547;
        D.15549 = (int) D.15548;
        D.15550 = __s2 + 1;
        D.15551 = *D.15550;
        D.15552 = (int) D.15551;
        __result = D.15549 - D.15552;
        D.15553 = __s2_len > 1;
        D.15543 = __result == 0;
        D.15554 = D.15553 & D.15543;
        if (D.15554 != 0) goto <D.15555>; else goto <D.15556>;
        <D.15555>:
        D.15557 = &MEM[(void *)"--verbose" + 2B];
        D.15558 = *D.15557;
        D.15559 = (int) D.15558;
        D.15560 = __s2 + 2;
        D.15561 = *D.15560;
        D.15562 = (int) D.15561;
        __result = D.15559 - D.15562;
        D.15563 = __s2_len > 2;
        D.15543 = __result == 0;
        D.15564 = D.15563 & D.15543;
        if (D.15564 != 0) goto <D.15565>; else goto <D.15566>;
        <D.15565>:
        D.15567 = &MEM[(void *)"--verbose" + 3B];
        D.15568 = *D.15567;
        D.15569 = (int) D.15568;
        D.15570 = __s2 + 3;
        D.15571 = *D.15570;
        D.15572 = (int) D.15571;
        __result = D.15569 - D.15572;
        <D.15566>:
        <D.15556>:
        <D.15546>:
      }
      D.14957 = __result;
    }
    iftmp.13 = -D.14957;
    goto <D.15573>;
    <D.15536>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.13 = __builtin_strcmp (D.15022, "--verbose");
    <D.15573>:
    D.14958 = iftmp.13;
  }
  if (D.14958 == 0) goto <D.15531>; else goto <D.15574>;
  <D.15574>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15578 = "-v";
      D.15579 = MEM[(const unsigned char *)D.15578];
      D.15580 = (int) D.15579;
      D.15581 = *__s2;
      D.15582 = (int) D.15581;
      __result = D.15580 - D.15582;
      {
        D.15583 = __s2_len != 0;
        D.15584 = __result == 0;
        D.15585 = D.15583 & D.15584;
        if (D.15585 != 0) goto <D.15586>; else goto <D.15587>;
        <D.15586>:
        D.15588 = &MEM[(void *)"-v" + 1B];
        D.15589 = *D.15588;
        D.15590 = (int) D.15589;
        D.15591 = __s2 + 1;
        D.15592 = *D.15591;
        D.15593 = (int) D.15592;
        __result = D.15590 - D.15593;
        D.15594 = __s2_len > 1;
        D.15584 = __result == 0;
        D.15595 = D.15594 & D.15584;
        if (D.15595 != 0) goto <D.15596>; else goto <D.15597>;
        <D.15596>:
        D.15598 = &MEM[(void *)"-v" + 2B];
        D.15599 = *D.15598;
        D.15600 = (int) D.15599;
        D.15601 = __s2 + 2;
        D.15602 = *D.15601;
        D.15603 = (int) D.15602;
        __result = D.15600 - D.15603;
        D.15604 = __s2_len > 2;
        D.15584 = __result == 0;
        D.15605 = D.15604 & D.15584;
        if (D.15605 != 0) goto <D.15606>; else goto <D.15607>;
        <D.15606>:
        D.15608 = &MEM[(void *)"-v" + 3B];
        D.15609 = *D.15608;
        D.15610 = (int) D.15609;
        D.15611 = __s2 + 3;
        D.15612 = *D.15611;
        D.15613 = (int) D.15612;
        __result = D.15610 - D.15613;
        <D.15607>:
        <D.15597>:
        <D.15587>:
      }
      D.14966 = __result;
    }
    iftmp.14 = -D.14966;
    goto <D.15614>;
    <D.15577>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.14 = __builtin_strcmp (D.15022, "-v");
    <D.15614>:
    D.14967 = iftmp.14;
  }
  if (D.14967 == 0) goto <D.15531>; else goto <D.15532>;
  <D.15531>:
  verbose.15 = verbose;
  verbose.16 = verbose.15 + 1;
  verbose = verbose.16;
  goto <D.15533>;
  <D.15532>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15623 = "--output";
      D.15624 = MEM[(const unsigned char *)D.15623];
      D.15625 = (int) D.15624;
      D.15626 = *__s2;
      D.15627 = (int) D.15626;
      __result = D.15625 - D.15627;
      {
        D.15628 = __s2_len != 0;
        D.15629 = __result == 0;
        D.15630 = D.15628 & D.15629;
        if (D.15630 != 0) goto <D.15631>; else goto <D.15632>;
        <D.15631>:
        D.15633 = &MEM[(void *)"--output" + 1B];
        D.15634 = *D.15633;
        D.15635 = (int) D.15634;
        D.15636 = __s2 + 1;
        D.15637 = *D.15636;
        D.15638 = (int) D.15637;
        __result = D.15635 - D.15638;
        D.15639 = __s2_len > 1;
        D.15629 = __result == 0;
        D.15640 = D.15639 & D.15629;
        if (D.15640 != 0) goto <D.15641>; else goto <D.15642>;
        <D.15641>:
        D.15643 = &MEM[(void *)"--output" + 2B];
        D.15644 = *D.15643;
        D.15645 = (int) D.15644;
        D.15646 = __s2 + 2;
        D.15647 = *D.15646;
        D.15648 = (int) D.15647;
        __result = D.15645 - D.15648;
        D.15649 = __s2_len > 2;
        D.15629 = __result == 0;
        D.15650 = D.15649 & D.15629;
        if (D.15650 != 0) goto <D.15651>; else goto <D.15652>;
        <D.15651>:
        D.15653 = &MEM[(void *)"--output" + 3B];
        D.15654 = *D.15653;
        D.15655 = (int) D.15654;
        D.15656 = __s2 + 3;
        D.15657 = *D.15656;
        D.15658 = (int) D.15657;
        __result = D.15655 - D.15658;
        <D.15652>:
        <D.15642>:
        <D.15632>:
      }
      D.14975 = __result;
    }
    iftmp.17 = -D.14975;
    goto <D.15659>;
    <D.15622>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.17 = __builtin_strcmp (D.15022, "--output");
    <D.15659>:
    D.14976 = iftmp.17;
  }
  if (D.14976 == 0) goto <D.15617>; else goto <D.15660>;
  <D.15660>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15664 = "-o";
      D.15665 = MEM[(const unsigned char *)D.15664];
      D.15666 = (int) D.15665;
      D.15667 = *__s2;
      D.15668 = (int) D.15667;
      __result = D.15666 - D.15668;
      {
        D.15669 = __s2_len != 0;
        D.15670 = __result == 0;
        D.15671 = D.15669 & D.15670;
        if (D.15671 != 0) goto <D.15672>; else goto <D.15673>;
        <D.15672>:
        D.15674 = &MEM[(void *)"-o" + 1B];
        D.15675 = *D.15674;
        D.15676 = (int) D.15675;
        D.15677 = __s2 + 1;
        D.15678 = *D.15677;
        D.15679 = (int) D.15678;
        __result = D.15676 - D.15679;
        D.15680 = __s2_len > 1;
        D.15670 = __result == 0;
        D.15681 = D.15680 & D.15670;
        if (D.15681 != 0) goto <D.15682>; else goto <D.15683>;
        <D.15682>:
        D.15684 = &MEM[(void *)"-o" + 2B];
        D.15685 = *D.15684;
        D.15686 = (int) D.15685;
        D.15687 = __s2 + 2;
        D.15688 = *D.15687;
        D.15689 = (int) D.15688;
        __result = D.15686 - D.15689;
        D.15690 = __s2_len > 2;
        D.15670 = __result == 0;
        D.15691 = D.15690 & D.15670;
        if (D.15691 != 0) goto <D.15692>; else goto <D.15693>;
        <D.15692>:
        D.15694 = &MEM[(void *)"-o" + 3B];
        D.15695 = *D.15694;
        D.15696 = (int) D.15695;
        D.15697 = __s2 + 3;
        D.15698 = *D.15697;
        D.15699 = (int) D.15698;
        __result = D.15696 - D.15699;
        <D.15693>:
        <D.15683>:
        <D.15673>:
      }
      D.14984 = __result;
    }
    iftmp.18 = -D.14984;
    goto <D.15700>;
    <D.15663>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.18 = __builtin_strcmp (D.15022, "-o");
    <D.15700>:
    D.14985 = iftmp.18;
  }
  if (D.14985 == 0) goto <D.15617>; else goto <D.15618>;
  <D.15617>:
  D.15701 = i + 1;
  if (D.15701 >= argc) goto <D.15702>; else goto <D.15703>;
  <D.15702>:
  usage ();
  <D.15703>:
  i = i + 1;
  D.15019 = (long unsigned int) i;
  D.15020 = D.15019 * 8;
  D.15021 = argv + D.15020;
  outputfile = *D.15021;
  goto <D.15619>;
  <D.15618>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15710 = "--depth";
      D.15711 = MEM[(const unsigned char *)D.15710];
      D.15712 = (int) D.15711;
      D.15713 = *__s2;
      D.15714 = (int) D.15713;
      __result = D.15712 - D.15714;
      {
        D.15715 = __s2_len != 0;
        D.15716 = __result == 0;
        D.15717 = D.15715 & D.15716;
        if (D.15717 != 0) goto <D.15718>; else goto <D.15719>;
        <D.15718>:
        D.15720 = &MEM[(void *)"--depth" + 1B];
        D.15721 = *D.15720;
        D.15722 = (int) D.15721;
        D.15723 = __s2 + 1;
        D.15724 = *D.15723;
        D.15725 = (int) D.15724;
        __result = D.15722 - D.15725;
        D.15726 = __s2_len > 1;
        D.15716 = __result == 0;
        D.15727 = D.15726 & D.15716;
        if (D.15727 != 0) goto <D.15728>; else goto <D.15729>;
        <D.15728>:
        D.15730 = &MEM[(void *)"--depth" + 2B];
        D.15731 = *D.15730;
        D.15732 = (int) D.15731;
        D.15733 = __s2 + 2;
        D.15734 = *D.15733;
        D.15735 = (int) D.15734;
        __result = D.15732 - D.15735;
        D.15736 = __s2_len > 2;
        D.15716 = __result == 0;
        D.15737 = D.15736 & D.15716;
        if (D.15737 != 0) goto <D.15738>; else goto <D.15739>;
        <D.15738>:
        D.15740 = &MEM[(void *)"--depth" + 3B];
        D.15741 = *D.15740;
        D.15742 = (int) D.15741;
        D.15743 = __s2 + 3;
        D.15744 = *D.15743;
        D.15745 = (int) D.15744;
        __result = D.15742 - D.15745;
        <D.15739>:
        <D.15729>:
        <D.15719>:
      }
      D.14993 = __result;
    }
    iftmp.19 = -D.14993;
    goto <D.15746>;
    <D.15709>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.19 = __builtin_strcmp (D.15022, "--depth");
    <D.15746>:
    D.14994 = iftmp.19;
  }
  if (D.14994 == 0) goto <D.15704>; else goto <D.15747>;
  <D.15747>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.15019 = (long unsigned int) i;
      D.15020 = D.15019 * 8;
      D.15021 = argv + D.15020;
      __s2 = *D.15021;
      D.15751 = "-d";
      D.15752 = MEM[(const unsigned char *)D.15751];
      D.15753 = (int) D.15752;
      D.15754 = *__s2;
      D.15755 = (int) D.15754;
      __result = D.15753 - D.15755;
      {
        D.15756 = __s2_len != 0;
        D.15757 = __result == 0;
        D.15758 = D.15756 & D.15757;
        if (D.15758 != 0) goto <D.15759>; else goto <D.15760>;
        <D.15759>:
        D.15761 = &MEM[(void *)"-d" + 1B];
        D.15762 = *D.15761;
        D.15763 = (int) D.15762;
        D.15764 = __s2 + 1;
        D.15765 = *D.15764;
        D.15766 = (int) D.15765;
        __result = D.15763 - D.15766;
        D.15767 = __s2_len > 1;
        D.15757 = __result == 0;
        D.15768 = D.15767 & D.15757;
        if (D.15768 != 0) goto <D.15769>; else goto <D.15770>;
        <D.15769>:
        D.15771 = &MEM[(void *)"-d" + 2B];
        D.15772 = *D.15771;
        D.15773 = (int) D.15772;
        D.15774 = __s2 + 2;
        D.15775 = *D.15774;
        D.15776 = (int) D.15775;
        __result = D.15773 - D.15776;
        D.15777 = __s2_len > 2;
        D.15757 = __result == 0;
        D.15778 = D.15777 & D.15757;
        if (D.15778 != 0) goto <D.15779>; else goto <D.15780>;
        <D.15779>:
        D.15781 = &MEM[(void *)"-d" + 3B];
        D.15782 = *D.15781;
        D.15783 = (int) D.15782;
        D.15784 = __s2 + 3;
        D.15785 = *D.15784;
        D.15786 = (int) D.15785;
        __result = D.15783 - D.15786;
        <D.15780>:
        <D.15770>:
        <D.15760>:
      }
      D.15002 = __result;
    }
    iftmp.20 = -D.15002;
    goto <D.15787>;
    <D.15750>:
    D.15019 = (long unsigned int) i;
    D.15020 = D.15019 * 8;
    D.15021 = argv + D.15020;
    D.15022 = *D.15021;
    iftmp.20 = __builtin_strcmp (D.15022, "-d");
    <D.15787>:
    D.15003 = iftmp.20;
  }
  if (D.15003 == 0) goto <D.15704>; else goto <D.15705>;
  <D.15704>:
  D.15701 = i + 1;
  if (D.15701 >= argc) goto <D.15788>; else goto <D.15789>;
  <D.15788>:
  usage ();
  <D.15789>:
  i = i + 1;
  D.15019 = (long unsigned int) i;
  D.15020 = D.15019 * 8;
  D.15021 = argv + D.15020;
  D.15022 = *D.15021;
  max_depth.21 = atoi (D.15022);
  max_depth = max_depth.21;
  goto <D.15706>;
  <D.15705>:
  usage ();
  <D.15706>:
  <D.15619>:
  <D.15533>:
  <D.15449>:
  <D.15365>:
  <D.15362>:
  <D.15319>:
  <D.15195>:
  <D.15111>:
  <D.15027>:
  i = i + 1;
  <D.15005>:
  if (i < argc) goto <D.15004>; else goto <D.14841>;
  <D.14841>:
  if (argc > i) goto <D.15791>; else goto <D.15792>;
  <D.15791>:
  D.15019 = (long unsigned int) i;
  D.15020 = D.15019 * 8;
  D.15021 = argv + D.15020;
  aname = *D.15021;
  <D.15792>:
  D.15701 = i + 1;
  if (D.15701 < argc) goto <D.15793>; else goto <D.15794>;
  <D.15793>:
  D.15795 = (sizetype) i;
  D.15796 = D.15795 + 1;
  D.15797 = D.15796 * 8;
  D.15798 = argv + D.15797;
  cname = *D.15798;
  <D.15794>:
  if (aname != 0B) goto <D.15799>; else goto <D.15800>;
  <D.15799>:
  D.15801 = *argv;
  mono_init_from_assembly (D.15801, aname);
  assembly = mono_assembly_open (aname, 0B);
  goto <D.15802>;
  <D.15800>:
  D.15801 = *argv;
  mono_init (D.15801);
  D.15803 = mono_get_corlib ();
  assembly = mono_image_get_assembly (D.15803);
  <D.15802>:
  D.15804 = cname == 0B;
  D.15805 = graphtype == 0;
  D.15806 = D.15804 & D.15805;
  if (D.15806 != 0) goto <D.15807>; else goto <D.15808>;
  <D.15807>:
  cname = "System.Object";
  <D.15808>:
  if (assembly == 0B) goto <D.15809>; else goto <D.15810>;
  <D.15809>:
  monoeg_g_print ("cannot open assembly %s\n", aname);
  exit (1);
  <D.15810>:
  if (callneato != 0) goto <D.15811>; else goto <D.15812>;
  <D.15811>:
  {
    struct GString * command;
    char * type;

    command = monoeg_g_string_new ("neato");
    type = 0B;
    if (outputfile != 0B) goto <D.15813>; else goto <D.15814>;
    <D.15813>:
    type = strrchr (outputfile, 46);
    monoeg_g_string_append_printf (command, " -o %s", outputfile);
    <D.15814>:
    if (type != 0B) goto <D.15815>; else goto <D.15816>;
    <D.15815>:
    D.15817 = type + 1;
    monoeg_g_string_append_printf (command, " -T%s", D.15817);
    <D.15816>:
    D.15818 = command->str;
    output.22 = popen (D.15818, "w");
    output = output.22;
    output.23 = output;
    if (output.23 == 0B) goto <D.15821>; else goto <D.15822>;
    <D.15821>:
    monoeg_g_print ("Cannot run neato: you may need to install the graphviz package.\n");
    exit (1);
    <D.15822>:
  }
  goto <D.15823>;
  <D.15812>:
  if (outputfile != 0B) goto <D.15824>; else goto <D.15825>;
  <D.15824>:
  output.24 = fopen (outputfile, "w");
  output = output.24;
  output.23 = output;
  if (output.23 == 0B) goto <D.15827>; else goto <D.15828>;
  <D.15827>:
  monoeg_g_print ("Cannot open file: %s\n", outputfile);
  exit (1);
  <D.15828>:
  <D.15825>:
  <D.15823>:
  if (cname != 0B) goto <D.15829>; else goto <D.15830>;
  <D.15829>:
  D.15831 = __builtin_strchr (cname, 58);
  if (D.15831 != 0B) goto <D.15832>; else goto <D.15833>;
  <D.15832>:
  if (graphtype == 0) goto <D.15834>; else goto <D.15835>;
  <D.15834>:
  graphtype = 1;
  <D.15835>:
  <D.15833>:
  <D.15830>:
  image = mono_assembly_get_image (assembly);
  switch (graphtype) <default: <D.15015>, case 0: <D.15008>, case 1: <D.15010>, case 2: <D.15011>, case 3: <D.15012>, case 4: <D.15014>, case 5: <D.15013>>
  <D.15008>:
  type_graph (image, cname);
  goto <D.15009>;
  <D.15010>:
  method_graph (image, cname);
  goto <D.15009>;
  <D.15011>:
  interface_graph (image, cname);
  goto <D.15009>;
  <D.15012>:
  method_cfg (image, cname);
  goto <D.15009>;
  <D.15013>:
  stats (image, cname);
  goto <D.15009>;
  <D.15014>:
  size_stats (image, cname);
  goto <D.15009>;
  <D.15015>:
  monoeg_g_log (0B, 4, "wrong graph type");
  <D.15016>:
  goto <D.15016>;
  <D.15009>:
  if (callneato != 0) goto <D.15836>; else goto <D.15837>;
  <D.15836>:
  verbose.15 = verbose;
  if (verbose.15 != 0) goto <D.15838>; else goto <D.15839>;
  <D.15838>:
  monoeg_g_print ("waiting for neato.\n");
  <D.15839>:
  output.23 = output;
  pclose (output.23);
  goto <D.15840>;
  <D.15837>:
  if (outputfile != 0B) goto <D.15841>; else goto <D.15842>;
  <D.15841>:
  output.23 = output;
  fclose (output.23);
  <D.15842>:
  <D.15840>:
  D.15843 = 0;
  return D.15843;
}


atoi (const char * __nptr)
{
  int D.15845;
  long int D.15846;

  D.15846 = strtol (__nptr, 0B, 10);
  D.15845 = (int) D.15846;
  return D.15845;
}


usage ()
{
  printf ("monograph 0.2 Copyright (c) 2002 Ximian, Inc\n");
  printf ("Create call graph or type hierarchy information from CIL assemblies.\n");
  printf ("Usage: monograph [options] [assembly [typename|methodname]]\n\n");
  printf ("Valid options are:\n");
  printf ("\t-c|--call             output call graph instead of type hierarchy\n");
  printf ("\t-C|--control-flow     output control flow of methodname\n");
  printf ("\t--stats               output some statistics about the assembly\n");
  printf ("\t--size                output some size statistics about the assembly\n");
  printf ("\t-d|--depth num        max depth recursion (default: 6)\n");
  printf ("\t-o|--output filename  write graph to file filename (default: stdout)\n");
  printf ("\t-f|--fullname         include namespace in type and method names\n");
  printf ("\t-n|--neato            invoke neato directly\n");
  printf ("\t-v|--verbose          verbose operation\n\n");
  printf ("The default assembly is mscorlib.dll. The default method for\n");
  printf ("the --call and --control-flow options is the entrypoint.\n\n");
  printf ("When the --neato option is used the output type info is taken\n");
  printf ("from the output filename extension. You need the graphviz package\n");
  printf ("installed to be able to use this option and build bitmap files.\n");
  printf ("Without --neato, monograph will create .dot files, a description\n");
  printf ("file for a graph.\n\n");
  printf ("Sample runs:\n");
  printf ("\tmonograph -n -o vt.png mscorlib.dll System.ValueType\n");
  printf ("\tmonograph -n -o expr.png mcs.exe Mono.CSharp.Expression\n");
  printf ("\tmonograph -n -o cfg.png -C mcs.exe Driver:Main\n");
  printf ("\tmonograph -d 3 -n -o callgraph.png -c mis.exe\n");
  exit (1);
}


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

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


type_graph (struct MonoImage * image, const char * cname)
{
  char * p.25;
  struct FILE * output.26;
  const char * graph_properties.27;
  struct MonoClass * class;
  struct MonoClass * parent;
  struct MonoClass * child;
  const char * name_space;
  char * p;
  int depth;

  depth = 0;
  cname = monoeg_strdup (cname);
  p = strrchr (cname, 46);
  if (p != 0B) goto <D.15850>; else goto <D.15851>;
  <D.15850>:
  name_space = cname;
  p.25 = p;
  p = p.25 + 1;
  *p.25 = 0;
  cname = p;
  goto <D.15853>;
  <D.15851>:
  name_space = "";
  <D.15853>:
  class = mono_class_from_name (image, name_space, cname);
  if (class == 0B) goto <D.15854>; else goto <D.15855>;
  <D.15854>:
  monoeg_g_print ("class %s.%s not found\n", name_space, cname);
  exit (1);
  <D.15855>:
  output.26 = output;
  fprintf (output.26, "digraph blah {\n");
  graph_properties.27 = graph_properties;
  output.26 = output;
  fprintf (output.26, "%s", graph_properties.27);
  child = class;
  parent = class->parent;
  goto <D.14466>;
  <D.14465>:
  output_type_edge (parent, child);
  child = parent;
  parent = parent->parent;
  <D.14466>:
  if (parent != 0B) goto <D.14465>; else goto <D.14467>;
  <D.14467>:
  print_subtypes (image, class, depth);
  output.26 = output;
  fprintf (output.26, "}\n");
}


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

  if (str != 0B) goto <D.15858>; else goto <D.15859>;
  <D.15858>:
  D.15860 = __strdup (str);
  return D.15860;
  <D.15859>:
  D.15860 = 0B;
  return D.15860;
}


output_type_edge (struct MonoClass * first, struct MonoClass * second)
{
  int include_namespace.28;
  const char * D.15865;
  const char * D.15866;
  const char * D.15867;
  const char * D.15868;
  struct FILE * output.29;

  include_namespace.28 = include_namespace;
  if (include_namespace.28 != 0) goto <D.15863>; else goto <D.15864>;
  <D.15863>:
  D.15865 = second->name;
  D.15866 = second->name_space;
  D.15867 = first->name;
  D.15868 = first->name_space;
  output.29 = output;
  fprintf (output.29, "\t\"%s.%s\" -> \"%s.%s\"\n", D.15868, D.15867, D.15866, D.15865);
  goto <D.15870>;
  <D.15864>:
  D.15865 = second->name;
  D.15867 = first->name;
  output.29 = output;
  fprintf (output.29, "\t\"%s\" -> \"%s\"\n", D.15867, D.15865);
  <D.15870>:
}


print_subtypes (struct MonoImage * image, struct MonoClass * class, int depth)
{
  int depth.30;
  int max_depth.31;
  unsigned int D.15875;
  int D.15876;
  unsigned int token.32;
  unsigned int D.15878;
  int D.15881;
  int D.15882;
  unsigned int D.15883;
  int D.15884;
  int i;
  int token;
  const struct MonoTableInfo * t;
  struct MonoClass * child;

  depth.30 = depth;
  depth = depth.30 + 1;
  max_depth.31 = max_depth;
  if (depth.30 > max_depth.31) goto <D.15873>; else goto <D.15874>;
  <D.15873>:
  return;
  <D.15874>:
  t = mono_image_get_table_info (image, 2);
  D.15875 = class->type_token;
  D.15876 = (int) D.15875;
  token = D.15876 & 16777215;
  token = token << 2;
  token = token;
  i = 0;
  goto <D.14453>;
  <D.14452>:
  token.32 = (unsigned int) token;
  D.15878 = mono_metadata_decode_row_col (t, i, 3);
  if (token.32 == D.15878) goto <D.15879>; else goto <D.15880>;
  <D.15879>:
  D.15881 = i + 1;
  D.15882 = D.15881 | 33554432;
  D.15883 = (unsigned int) D.15882;
  child = mono_class_get (image, D.15883);
  output_type_edge (class, child);
  print_subtypes (image, child, depth);
  <D.15880>:
  i = i + 1;
  <D.14453>:
  D.15884 = mono_table_info_get_rows (t);
  if (D.15884 > i) goto <D.14452>; else goto <D.14454>;
  <D.14454>:
}


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

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


method_graph (struct MonoImage * image, const char * name)
{
  const char * D.15893;
  int include_namespace.33;
  struct FILE * output.34;
  const char * graph_properties.35;
  int depth;
  struct MonoMethod * method;

  depth = 0;
  method = 0B;
  if (name == 0B) goto <D.15888>; else goto <D.15889>;
  <D.15888>:
  {
    guint32 token;

    token = mono_image_get_entry_point (image);
    if (token == 0) goto <D.15890>; else goto <D.15892>;
    <D.15892>:
    method = mono_get_method (image, token, 0B);
    if (method == 0B) goto <D.15890>; else goto <D.15891>;
    <D.15890>:
    D.15893 = mono_image_get_filename (image);
    monoeg_g_print ("Cannot find entry point in %s: specify an explict method name.\n", D.15893);
    exit (1);
    <D.15891>:
  }
  goto <D.15894>;
  <D.15889>:
  {
    struct MonoMethodDesc * desc;

    include_namespace.33 = include_namespace;
    desc = mono_method_desc_new (name, include_namespace.33);
    if (desc == 0B) goto <D.15896>; else goto <D.15897>;
    <D.15896>:
    monoeg_g_print ("Invalid method name %s\n", name);
    exit (1);
    <D.15897>:
    method = mono_method_desc_search_in_image (desc, image);
    if (method == 0B) goto <D.15898>; else goto <D.15899>;
    <D.15898>:
    monoeg_g_print ("Cannot find method %s\n", name);
    exit (1);
    <D.15899>:
  }
  <D.15894>:
  output.34 = output;
  fprintf (output.34, "digraph blah {\n");
  graph_properties.35 = graph_properties;
  output.34 = output;
  fprintf (output.34, "%s", graph_properties.35);
  print_method (method, depth);
  output.34 = output;
  fprintf (output.34, "}\n");
}


print_method (struct MonoMethod * method, int depth)
{
  int depth.36;
  int max_depth.37;
  struct GHashTable * visited.38;
  struct GHashTable * visited.39;
  void * D.15910;
  short unsigned int D.15913;
  int D.15914;
  int D.15915;
  short unsigned int D.15918;
  int D.15919;
  int D.15920;
  unsigned int i.40;
  sizetype D.15924;
  unsigned char D.15925;
  int D.15928;
  int D.15929;
  unsigned int i.41;
  unsigned int i.42;
  unsigned char D.15933;
  int D.15934;
  unsigned int D.15935;
  int D.15936;
  sizetype D.15937;
  struct MonoClass * D.15938;
  struct MonoImage * D.15939;
  void * D.15941;
  const struct MonoOpcode * opcode;
  struct MonoMethodHeader * header;
  struct GHashTable * hash;
  static struct GHashTable * visited = 0B;
  const unsigned char * ip;
  const unsigned char * il_code_end;
  guint32 i;

  try
    {
      depth.36 = depth;
      depth = depth.36 + 1;
      max_depth.37 = max_depth;
      if (depth.36 > max_depth.37) goto <D.15904>; else goto <D.15905>;
      <D.15904>:
      return;
      <D.15905>:
      visited.38 = visited;
      if (visited.38 == 0B) goto <D.15907>; else goto <D.15908>;
      <D.15907>:
      visited.39 = monoeg_g_hash_table_new (0B, 0B);
      visited = visited.39;
      <D.15908>:
      visited.38 = visited;
      D.15910 = monoeg_g_hash_table_lookup (visited.38, method);
      if (D.15910 != 0B) goto <D.15911>; else goto <D.15912>;
      <D.15911>:
      return;
      <D.15912>:
      visited.38 = visited;
      monoeg_g_hash_table_insert_replace (visited.38, method, method, 0);
      D.15913 = method->iflags;
      D.15914 = (int) D.15913;
      D.15915 = D.15914 & 4099;
      if (D.15915 != 0) goto <D.15916>; else goto <D.15917>;
      <D.15916>:
      return;
      <D.15917>:
      D.15918 = method->flags;
      D.15919 = (int) D.15918;
      D.15920 = D.15919 & 9216;
      if (D.15920 != 0) goto <D.15921>; else goto <D.15922>;
      <D.15921>:
      return;
      <D.15922>:
      header = mono_method_get_header (method);
      ip = mono_method_header_get_code (header, &i, 0B);
      i.40 = i;
      D.15924 = (sizetype) i.40;
      il_code_end = ip + D.15924;
      hash = monoeg_g_hash_table_new (monoeg_g_direct_hash, monoeg_g_direct_equal);
      goto <D.14685>;
      <D.14684>:
      D.15925 = *ip;
      if (D.15925 == 254) goto <D.15926>; else goto <D.15927>;
      <D.15926>:
      ip = ip + 1;
      D.15925 = *ip;
      D.15928 = (int) D.15925;
      D.15929 = D.15928 + 256;
      i.41 = (unsigned int) D.15929;
      i = i.41;
      goto <D.15931>;
      <D.15927>:
      D.15925 = *ip;
      i.42 = (unsigned int) D.15925;
      i = i.42;
      <D.15931>:
      i.40 = i;
      opcode = &mono_opcodes[i.40];
      D.15933 = opcode->argument;
      D.15934 = (int) D.15933;
      switch (D.15934) <default: <D.14683>, case 0: <D.14662>, case 1: <D.14664>, case 2: <D.14665>, case 3: <D.14680>, case 4: <D.14666>, case 5: <D.14667>, case 6: <D.14668>, case 7: <D.14672>, case 8: <D.14673>, case 9: <D.14671>, case 10: <D.14675>, case 11: <D.14676>, case 12: <D.14678>, case 13: <D.14669>, case 14: <D.14670>, case 15: <D.14674>, case 16: <D.14679>>
      <D.14662>:
      ip = ip + 1;
      goto <D.14663>;
      <D.14664>:
      <D.14665>:
      <D.14666>:
      <D.14667>:
      <D.14668>:
      <D.14669>:
      <D.14670>:
      <D.14671>:
      ip = ip + 5;
      goto <D.14663>;
      <D.14672>:
      ip = ip + 3;
      goto <D.14663>;
      <D.14673>:
      <D.14674>:
      <D.14675>:
      ip = ip + 2;
      goto <D.14663>;
      <D.14676>:
      {
        gint32 n;

        ip = ip + 1;
        D.15935 = MEM[(const guint32 *)ip];
        n = (gint32) D.15935;
        ip = ip + 4;
        D.15936 = n * 4;
        D.15937 = (sizetype) D.15936;
        ip = ip + D.15937;
        goto <D.14663>;
      }
      <D.14678>:
      <D.14679>:
      ip = ip + 9;
      goto <D.14663>;
      <D.14680>:
      {
        guint32 token;
        struct MonoMethod * called;

        ip = ip + 1;
        token = MEM[(const guint32 *)ip];
        ip = ip + 4;
        D.15938 = method->klass;
        D.15939 = D.15938->image;
        called = mono_get_method (D.15939, token, 0B);
        if (called == 0B) goto <D.14663>; else goto <D.15940>;
        <D.15940>:
        D.15941 = monoeg_g_hash_table_lookup (hash, called);
        if (D.15941 != 0B) goto <D.14663>; else goto <D.15942>;
        <D.15942>:
        monoeg_g_hash_table_insert_replace (hash, called, called, 0);
        output_method_edge (method, called);
        print_method (called, depth);
        goto <D.14663>;
      }
      <D.14683>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "monograph.c", 680);
      <D.14663>:
      <D.14685>:
      if (ip < il_code_end) goto <D.14684>; else goto <D.14686>;
      <D.14686>:
      monoeg_g_hash_table_destroy (hash);
    }
  finally
    {
      i = {CLOBBER};
    }
}


output_method_edge (struct MonoMethod * first, struct MonoMethod * second)
{
  struct FILE * output.43;
  char * f;
  char * s;

  f = get_signature (first);
  s = get_signature (second);
  output.43 = output;
  fprintf (output.43, "\t\"%s\" -> \"%s\"\n", f, s);
}


get_signature (struct MonoMethod * method)
{
  struct GHashTable * hash.44;
  struct GHashTable * hash.45;
  char * D.15953;
  int include_namespace.46;
  struct MonoClass * D.15957;
  const char * D.15958;
  char D.15959;
  struct MonoMethodSignature * D.15962;
  const char * D.15963;
  const char * D.15964;
  char * D.15965;
  struct GString * res;
  static struct GHashTable * hash = 0B;
  char * result;

  hash.44 = hash;
  if (hash.44 == 0B) goto <D.15948>; else goto <D.15949>;
  <D.15948>:
  hash.45 = monoeg_g_hash_table_new (monoeg_g_direct_hash, monoeg_g_direct_equal);
  hash = hash.45;
  <D.15949>:
  hash.44 = hash;
  result = monoeg_g_hash_table_lookup (hash.44, method);
  if (result != 0B) goto <D.15951>; else goto <D.15952>;
  <D.15951>:
  D.15953 = result;
  return D.15953;
  <D.15952>:
  res = monoeg_g_string_new ("");
  include_namespace.46 = include_namespace;
  if (include_namespace.46 != 0) goto <D.15955>; else goto <D.15956>;
  <D.15955>:
  D.15957 = method->klass;
  D.15958 = D.15957->name_space;
  D.15959 = *D.15958;
  if (D.15959 != 0) goto <D.15960>; else goto <D.15961>;
  <D.15960>:
  D.15957 = method->klass;
  D.15958 = D.15957->name_space;
  monoeg_g_string_append_printf (res, "%s.", D.15958);
  <D.15961>:
  <D.15956>:
  include_namespace.46 = include_namespace;
  D.15962 = mono_method_signature (method);
  result = mono_signature_get_desc (D.15962, include_namespace.46);
  D.15963 = method->name;
  D.15957 = method->klass;
  D.15964 = D.15957->name;
  monoeg_g_string_append_printf (res, "%s:%s(%s)", D.15964, D.15963, result);
  monoeg_g_free (result);
  D.15965 = res->str;
  hash.44 = hash;
  monoeg_g_hash_table_insert_replace (hash.44, method, D.15965, 0);
  result = res->str;
  monoeg_g_string_free (res, 0);
  D.15953 = result;
  return D.15953;
}


interface_graph (struct MonoImage * image, const char * cname)
{
  char * p.47;
  struct FILE * output.48;
  const char * graph_properties.49;
  unsigned int D.15975;
  int i.50;
  unsigned int D.15977;
  unsigned int D.15980;
  unsigned int D.15981;
  int D.15982;
  unsigned int D.15983;
  int verbose.51;
  const char * D.15989;
  const char * D.15990;
  struct MonoClass * class;
  struct MonoClass * child;
  const char * name_space;
  char * p;
  guint32 cols[2];
  guint32 token;
  guint32 i;
  guint32 count;
  const struct MonoTableInfo * intf;

  try
    {
      count = 0;
      intf = mono_image_get_table_info (image, 9);
      cname = monoeg_strdup (cname);
      p = strrchr (cname, 46);
      if (p != 0B) goto <D.15967>; else goto <D.15968>;
      <D.15967>:
      name_space = cname;
      p.47 = p;
      p = p.47 + 1;
      *p.47 = 0;
      cname = p;
      goto <D.15970>;
      <D.15968>:
      name_space = "";
      <D.15970>:
      class = mono_class_from_name (image, name_space, cname);
      if (class == 0B) goto <D.15971>; else goto <D.15972>;
      <D.15971>:
      monoeg_g_print ("interface %s.%s not found\n", name_space, cname);
      exit (1);
      <D.15972>:
      output.48 = output;
      fprintf (output.48, "digraph interface {\n");
      graph_properties.49 = graph_properties;
      output.48 = output;
      fprintf (output.48, "%s", graph_properties.49);
      D.15975 = class->type_token;
      token = D.15975 & 16777215;
      token = token << 2;
      token = token;
      i = 0;
      goto <D.14482>;
      <D.14481>:
      i.50 = (int) i;
      mono_metadata_decode_row (intf, i.50, &cols, 2);
      D.15977 = cols[1];
      if (D.15977 == token) goto <D.15978>; else goto <D.15979>;
      <D.15978>:
      D.15980 = cols[0];
      D.15981 = D.15980 | 33554432;
      child = mono_class_get (image, D.15981);
      output_type_edge (class, child);
      count = count + 1;
      <D.15979>:
      i = i + 1;
      <D.14482>:
      D.15982 = mono_table_info_get_rows (intf);
      D.15983 = (unsigned int) D.15982;
      if (D.15983 > i) goto <D.14481>; else goto <D.14483>;
      <D.14483>:
      output.48 = output;
      fprintf (output.48, "}\n");
      verbose.51 = verbose;
      if (verbose.51 != 0) goto <D.15985>; else goto <D.15986>;
      <D.15985>:
      if (count == 0) goto <D.15987>; else goto <D.15988>;
      <D.15987>:
      D.15989 = class->name;
      D.15990 = class->name_space;
      monoeg_g_print ("No class implements %s.%s\n", D.15990, D.15989);
      <D.15988>:
      <D.15986>:
    }
  finally
    {
      cols = {CLOBBER};
    }
}


method_cfg (struct MonoImage * image, const char * name)
{
  const char * D.15996;
  int include_namespace.52;
  struct FILE * output.53;
  const char * cfg_graph_properties.54;
  struct MonoMethod * method;
  static const char * cfg_graph_properties = (const char *) "\tnode [fontsize=8.0]\n\tedge [len=1.5,color=red]\n";

  method = 0B;
  if (name == 0B) goto <D.15991>; else goto <D.15992>;
  <D.15991>:
  {
    guint32 token;

    token = mono_image_get_entry_point (image);
    if (token == 0) goto <D.15993>; else goto <D.15995>;
    <D.15995>:
    method = mono_get_method (image, token, 0B);
    if (method == 0B) goto <D.15993>; else goto <D.15994>;
    <D.15993>:
    D.15996 = mono_image_get_filename (image);
    monoeg_g_print ("Cannot find entry point in %s: specify an explict method name.\n", D.15996);
    exit (1);
    <D.15994>:
  }
  goto <D.15997>;
  <D.15992>:
  {
    struct MonoMethodDesc * desc;

    include_namespace.52 = include_namespace;
    desc = mono_method_desc_new (name, include_namespace.52);
    if (desc == 0B) goto <D.15999>; else goto <D.16000>;
    <D.15999>:
    monoeg_g_print ("Invalid method name %s\n", name);
    exit (1);
    <D.16000>:
    method = mono_method_desc_search_in_image (desc, image);
    if (method == 0B) goto <D.16001>; else goto <D.16002>;
    <D.16001>:
    monoeg_g_print ("Cannot find method %s\n", name);
    exit (1);
    <D.16002>:
  }
  <D.15997>:
  output.53 = output;
  fprintf (output.53, "digraph blah {\n");
  cfg_graph_properties.54 = cfg_graph_properties;
  output.53 = output;
  fprintf (output.53, "%s", cfg_graph_properties.54);
  print_method_cfg (method);
  output.53 = output;
  fprintf (output.53, "}\n");
}


print_method_cfg (struct MonoMethod * method)
{
  void * * D.16005;
  long unsigned int D.16006;
  long unsigned int D.16007;
  void * * D.16008;
  struct FILE * output.55;
  const unsigned char * D.16016;
  int D.16017;
  sizetype D.16018;
  const mono_byte * D.16019;
  long int D.16020;
  long int il_code.56;
  long int D.16022;
  unsigned int D.16023;
  unsigned int i.57;
  unsigned int D.16025;
  struct GPtrArray * bblocks;
  struct GList * tmp;
  struct MonoBasicBlock * bb;
  struct MonoBasicBlock * target;
  struct MonoMethodHeader * header;
  int i;
  int dfn;
  char * code;
  const unsigned char * il_code;

  try
    {
      header = mono_method_get_header (method);
      il_code = mono_method_header_get_code (header, 0B, 0B);
      bblocks = mono_method_find_bblocks (header);
      i = 0;
      goto <D.14797>;
      <D.14796>:
      D.16005 = bblocks->pdata;
      D.16006 = (long unsigned int) i;
      D.16007 = D.16006 * 8;
      D.16008 = D.16005 + D.16007;
      bb = *D.16008;
      if (i == 0) goto <D.16009>; else goto <D.16010>;
      <D.16009>:
      output.55 = output;
      fprintf (output.55, "\tB%p [shape=record,label=\"entry\"]\n", bb);
      goto <D.16012>;
      <D.16010>:
      if (i == 1) goto <D.16013>; else goto <D.16014>;
      <D.16013>:
      output.55 = output;
      fprintf (output.55, "\tB%p [shape=record,label=\"end\"]\n", bb);
      goto <D.16015>;
      <D.16014>:
      D.16016 = bb->cil_code;
      D.16017 = bb->cil_length;
      D.16018 = (sizetype) D.16017;
      D.16019 = D.16016 + D.16018;
      D.16016 = bb->cil_code;
      code = mono_disasm_code (&graph_dh, method, D.16016, D.16019);
      D.16016 = bb->cil_code;
      D.16020 = (long int) D.16016;
      il_code.56 = (long int) il_code;
      D.16022 = D.16020 - il_code.56;
      D.16023 = (unsigned int) D.16022;
      output.55 = output;
      fprintf (output.55, "\tB%p [shape=record,label=\"IL_%04x\\n%s\"]\n", bb, D.16023, code);
      monoeg_g_free (code);
      <D.16015>:
      <D.16012>:
      i = i + 1;
      <D.14797>:
      i.57 = (unsigned int) i;
      D.16025 = bblocks->len;
      if (i.57 < D.16025) goto <D.14796>; else goto <D.14798>;
      <D.14798>:
      i = 0;
      goto <D.14803>;
      <D.14802>:
      D.16005 = bblocks->pdata;
      D.16006 = (long unsigned int) i;
      D.16007 = D.16006 * 8;
      D.16008 = D.16005 + D.16007;
      bb = *D.16008;
      tmp = bb->out_bb;
      goto <D.14800>;
      <D.14799>:
      target = tmp->data;
      output.55 = output;
      fprintf (output.55, "\tB%p -> B%p\n", bb, target);
      tmp = tmp->next;
      <D.14800>:
      if (tmp != 0B) goto <D.14799>; else goto <D.14801>;
      <D.14801>:
      i = i + 1;
      <D.14803>:
      i.57 = (unsigned int) i;
      D.16025 = bblocks->len;
      if (i.57 < D.16025) goto <D.14802>; else goto <D.14804>;
      <D.14804>:
      i = 0;
      goto <D.14806>;
      <D.14805>:
      D.16005 = bblocks->pdata;
      D.16006 = (long unsigned int) i;
      D.16007 = D.16006 * 8;
      D.16008 = D.16005 + D.16007;
      bb = *D.16008;
      bb->dfn = 0;
      i = i + 1;
      <D.14806>:
      i.57 = (unsigned int) i;
      D.16025 = bblocks->len;
      if (i.57 < D.16025) goto <D.14805>; else goto <D.14807>;
      <D.14807>:
      dfn = 0;
      i = 0;
      goto <D.14809>;
      <D.14808>:
      D.16005 = bblocks->pdata;
      D.16006 = (long unsigned int) i;
      D.16007 = D.16006 * 8;
      D.16008 = D.16005 + D.16007;
      bb = *D.16008;
      df_visit (bb, &dfn, il_code);
      i = i + 1;
      <D.14809>:
      i.57 = (unsigned int) i;
      D.16025 = bblocks->len;
      if (i.57 < D.16025) goto <D.14808>; else goto <D.14810>;
      <D.14810>:
    }
  finally
    {
      dfn = {CLOBBER};
    }
}


indenter (struct MonoDisHelper * dh, struct MonoMethod * method, guint32 ip_offset)
{
  char * D.16026;

  D.16026 = monoeg_strdup (" ");
  return D.16026;
}


mono_method_find_bblocks (struct MonoMethodHeader * header)
{
  unsigned int i.58;
  sizetype D.16029;
  unsigned char D.16040;
  int D.16043;
  int D.16044;
  unsigned int i.59;
  unsigned int i.60;
  unsigned char D.16048;
  int D.16049;
  unsigned char D.16050;
  int D.16051;
  signed char D.16054;
  unsigned int i.61;
  unsigned int i.62;
  const void * D.16062;
  const unsigned char * D.16065;
  void * D.16066;
  int D.16067;
  sizetype D.16068;
  sizetype D.16069;
  unsigned int i.63;
  unsigned int n.64;
  unsigned int D.16074;
  long unsigned int D.16075;
  void * * D.16076;
  long unsigned int D.16077;
  long unsigned int D.16078;
  void * * D.16079;
  const unsigned char * D.16082;
  long int D.16083;
  const unsigned char * D.16084;
  long int D.16085;
  long int D.16086;
  int D.16087;
  long int end.65;
  long int D.16089;
  int D.16090;
  struct GPtrArray * D.16091;
  const unsigned char * ip;
  const unsigned char * end;
  const unsigned char * start;
  const struct MonoOpcode * opcode;
  guint32 i;
  guint32 block_end;
  struct GPtrArray * result;
  struct GHashTable * table;
  struct MonoBasicBlock * entry_bb;
  struct MonoBasicBlock * end_bb;
  struct MonoBasicBlock * bb;
  struct MonoBasicBlock * target;

  try
    {
      block_end = 0;
      result = monoeg_g_ptr_array_new ();
      table = monoeg_g_hash_table_new (monoeg_g_direct_hash, monoeg_g_direct_equal);
      ip = mono_method_header_get_code (header, &i, 0B);
      i.58 = i;
      D.16029 = (sizetype) i.58;
      end = ip + D.16029;
      debug_start = ip;
      entry_bb = monoeg_malloc0 (32);
      end_bb = monoeg_malloc0 (32);
      monoeg_g_ptr_array_add (result, entry_bb);
      monoeg_g_ptr_array_add (result, end_bb);
      bb = monoeg_malloc0 (32);
      bb->cil_code = ip;
      monoeg_g_ptr_array_add (result, bb);
      link_bblock (entry_bb, bb);
      monoeg_g_hash_table_insert_replace (table, ip, bb, 0);
      block_end = 1;
      goto <D.14763>;
      <D.14762>:
      start = ip;
      target = monoeg_g_hash_table_lookup (table, ip);
      if (target != 0B) goto <D.16030>; else goto <D.16031>;
      <D.16030>:
      if (target != bb) goto <D.16032>; else goto <D.16033>;
      <D.16032>:
      if (block_end == 0) goto <D.16034>; else goto <D.16035>;
      <D.16034>:
      link_bblock (bb, target);
      <D.16035>:
      bb = target;
      block_end = 0;
      <D.16033>:
      <D.16031>:
      if (block_end != 0) goto <D.16036>; else goto <D.16037>;
      <D.16036>:
      bb = monoeg_g_hash_table_lookup (table, ip);
      if (bb == 0B) goto <D.16038>; else goto <D.16039>;
      <D.16038>:
      bb = monoeg_malloc0 (32);
      bb->cil_code = ip;
      monoeg_g_ptr_array_add (result, bb);
      monoeg_g_hash_table_insert_replace (table, ip, bb, 0);
      <D.16039>:
      block_end = 0;
      <D.16037>:
      D.16040 = *ip;
      if (D.16040 == 254) goto <D.16041>; else goto <D.16042>;
      <D.16041>:
      ip = ip + 1;
      D.16040 = *ip;
      D.16043 = (int) D.16040;
      D.16044 = D.16043 + 256;
      i.59 = (unsigned int) D.16044;
      i = i.59;
      goto <D.16046>;
      <D.16042>:
      D.16040 = *ip;
      i.60 = (unsigned int) D.16040;
      i = i.60;
      <D.16046>:
      i.58 = i;
      opcode = &mono_opcodes[i.58];
      D.16048 = opcode->flow_type;
      D.16049 = (int) D.16048;
      switch (D.16049) <default: <D.14736>, case 0: <D.14734>, case 1: <D.14731>, case 2: <D.14732>, case 3: <D.14729>, case 4: <D.14733>, case 5: <D.14728>, case 6: <D.14735>>
      <D.14728>:
      link_bblock (bb, end_bb);
      <D.14729>:
      block_end = 1;
      goto <D.14730>;
      <D.14731>:
      <D.14732>:
      <D.14733>:
      <D.14734>:
      <D.14735>:
      goto <D.14730>;
      <D.14736>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "monograph.c", 815);
      <D.14730>:
      D.16050 = opcode->argument;
      D.16051 = (int) D.16050;
      switch (D.16051) <default: <D.14761>, case 0: <D.14737>, case 1: <D.14739>, case 2: <D.14740>, case 3: <D.14741>, case 4: <D.14742>, case 5: <D.14743>, case 6: <D.14744>, case 7: <D.14747>, case 8: <D.14748>, case 9: <D.14751>, case 10: <D.14750>, case 11: <D.14752>, case 12: <D.14759>, case 13: <D.14745>, case 14: <D.14746>, case 15: <D.14749>, case 16: <D.14760>>
      <D.14737>:
      ip = ip + 1;
      goto <D.14738>;
      <D.14739>:
      <D.14740>:
      <D.14741>:
      <D.14742>:
      <D.14743>:
      <D.14744>:
      <D.14745>:
      <D.14746>:
      ip = ip + 5;
      goto <D.14738>;
      <D.14747>:
      ip = ip + 3;
      goto <D.14738>;
      <D.14748>:
      <D.14749>:
      ip = ip + 2;
      goto <D.14738>;
      <D.14750>:
      <D.14751>:
      ip = ip + 1;
      D.16050 = opcode->argument;
      if (D.16050 == 10) goto <D.16052>; else goto <D.16053>;
      <D.16052>:
      D.16040 = *ip;
      D.16054 = (signed char) D.16040;
      i.61 = (unsigned int) D.16054;
      i = i.61;
      ip = ip + 1;
      goto <D.16056>;
      <D.16053>:
      i.62 = MEM[(const guint32 *)ip];
      i = i.62;
      ip = ip + 4;
      <D.16056>:
      D.16048 = opcode->flow_type;
      if (D.16048 == 2) goto <D.16058>; else goto <D.16059>;
      <D.16058>:
      target = monoeg_g_hash_table_lookup (table, ip);
      if (target == 0B) goto <D.16060>; else goto <D.16061>;
      <D.16060>:
      target = monoeg_malloc0 (32);
      target->cil_code = ip;
      monoeg_g_ptr_array_add (result, target);
      monoeg_g_hash_table_insert_replace (table, ip, target, 0);
      <D.16061>:
      link_bblock (bb, target);
      <D.16059>:
      i.58 = i;
      D.16029 = (sizetype) i.58;
      D.16062 = ip + D.16029;
      target = monoeg_g_hash_table_lookup (table, D.16062);
      if (target == 0B) goto <D.16063>; else goto <D.16064>;
      <D.16063>:
      target = monoeg_malloc0 (32);
      i.58 = i;
      D.16029 = (sizetype) i.58;
      D.16065 = ip + D.16029;
      target->cil_code = D.16065;
      monoeg_g_ptr_array_add (result, target);
      i.58 = i;
      D.16029 = (sizetype) i.58;
      D.16066 = ip + D.16029;
      monoeg_g_hash_table_insert_replace (table, D.16066, target, 0);
      <D.16064>:
      link_bblock (bb, target);
      block_end = 1;
      goto <D.14738>;
      <D.14752>:
      {
        gint32 n;
        const char * itarget;
        const char * st;

        ip = ip + 1;
        i.62 = MEM[(const guint32 *)ip];
        n = (gint32) i.62;
        ip = ip + 4;
        D.16067 = n * 4;
        D.16068 = (sizetype) D.16067;
        st = ip + D.16068;
        i = 0;
        goto <D.14757>;
        <D.14756>:
        i.62 = MEM[(const guint32 *)ip];
        D.16069 = (sizetype) i.62;
        itarget = st + D.16069;
        ip = ip + 4;
        target = monoeg_g_hash_table_lookup (table, itarget);
        if (target == 0B) goto <D.16070>; else goto <D.16071>;
        <D.16070>:
        target = monoeg_malloc0 (32);
        target->cil_code = itarget;
        monoeg_g_ptr_array_add (result, target);
        monoeg_g_hash_table_insert_replace (table, itarget, target, 0);
        <D.16071>:
        link_bblock (bb, target);
        i.58 = i;
        i.63 = i.58 + 1;
        i = i.63;
        <D.14757>:
        n.64 = (unsigned int) n;
        i.58 = i;
        if (n.64 > i.58) goto <D.14756>; else goto <D.14758>;
        <D.14758>:
        goto <D.14738>;
      }
      <D.14759>:
      <D.14760>:
      ip = ip + 9;
      goto <D.14738>;
      <D.14761>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "monograph.c", 895);
      <D.14738>:
      <D.14763>:
      if (ip < end) goto <D.14762>; else goto <D.14764>;
      <D.14764>:
      monoeg_g_hash_table_destroy (table);
      D.16074 = result->len;
      D.16075 = (long unsigned int) D.16074;
      D.16076 = result->pdata;
      qsort (D.16076, D.16075, 8, compare_bblock);
      target = 0B;
      bb = target;
      i = 2;
      goto <D.14766>;
      <D.14765>:
      D.16076 = result->pdata;
      i.58 = i;
      D.16077 = (long unsigned int) i.58;
      D.16078 = D.16077 * 8;
      D.16079 = D.16076 + D.16078;
      bb = *D.16079;
      if (target != 0B) goto <D.16080>; else goto <D.16081>;
      <D.16080>:
      D.16082 = bb->cil_code;
      D.16083 = (long int) D.16082;
      D.16084 = target->cil_code;
      D.16085 = (long int) D.16084;
      D.16086 = D.16083 - D.16085;
      D.16087 = (int) D.16086;
      target->cil_length = D.16087;
      <D.16081>:
      target = bb;
      i.58 = i;
      i.63 = i.58 + 1;
      i = i.63;
      <D.14766>:
      D.16074 = result->len;
      i.58 = i;
      if (D.16074 > i.58) goto <D.14765>; else goto <D.14767>;
      <D.14767>:
      end.65 = (long int) end;
      D.16082 = bb->cil_code;
      D.16083 = (long int) D.16082;
      D.16089 = end.65 - D.16083;
      D.16090 = (int) D.16089;
      bb->cil_length = D.16090;
      D.16091 = result;
      return D.16091;
    }
  finally
    {
      i = {CLOBBER};
    }
}


compare_bblock (const void * a, const void * b)
{
  int D.16095;
  struct MonoBasicBlock * D.16096;
  const unsigned char * D.16097;
  long int D.16098;
  struct MonoBasicBlock * D.16099;
  const unsigned char * D.16100;
  long int D.16101;
  long int D.16102;
  struct MonoBasicBlock * const * ab;
  struct MonoBasicBlock * const * bb;

  ab = a;
  bb = b;
  D.16096 = *ab;
  D.16097 = D.16096->cil_code;
  D.16098 = (long int) D.16097;
  D.16099 = *bb;
  D.16100 = D.16099->cil_code;
  D.16101 = (long int) D.16100;
  D.16102 = D.16098 - D.16101;
  D.16095 = (int) D.16102;
  return D.16095;
}


link_bblock (struct MonoBasicBlock * from, struct MonoBasicBlock * to)
{
  struct GList * D.16104;
  struct GList * D.16105;
  struct GList * D.16106;
  struct GList * D.16107;

  D.16104 = from->out_bb;
  D.16105 = monoeg_g_list_prepend (D.16104, to);
  from->out_bb = D.16105;
  D.16106 = to->in_bb;
  D.16107 = monoeg_g_list_prepend (D.16106, from);
  to->in_bb = D.16107;
}


df_visit (struct MonoBasicBlock * bb, int * dfn, const unsigned char * code)
{
  int D.16108;
  int D.16111;
  int D.16112;
  int D.16113;
  const unsigned char * D.16116;
  const unsigned char * D.16119;
  long int D.16120;
  long int code.66;
  long int D.16122;
  unsigned int D.16123;
  struct FILE * output.67;
  long int D.16126;
  long int D.16127;
  unsigned int D.16128;
  struct GList * tmp;
  struct MonoBasicBlock * next;

  D.16108 = bb->dfn;
  if (D.16108 != 0) goto <D.16109>; else goto <D.16110>;
  <D.16109>:
  return;
  <D.16110>:
  D.16111 = *dfn;
  D.16112 = D.16111 + 1;
  *dfn = D.16112;
  D.16111 = *dfn;
  bb->dfn = D.16111;
  tmp = bb->out_bb;
  goto <D.14782>;
  <D.14781>:
  next = tmp->data;
  D.16113 = next->dfn;
  if (D.16113 == 0) goto <D.16114>; else goto <D.16115>;
  <D.16114>:
  D.16116 = bb->cil_code;
  if (D.16116 == 0B) goto <D.16117>; else goto <D.16118>;
  <D.16117>:
  D.16111 = *dfn;
  D.16112 = D.16111 + 1;
  D.16119 = next->cil_code;
  D.16120 = (long int) D.16119;
  code.66 = (long int) code;
  D.16122 = D.16120 - code.66;
  D.16123 = (unsigned int) D.16122;
  output.67 = output;
  fprintf (output.67, "\t\"DF entry\" -> \"IL_%04x (%d)\"\n", D.16123, D.16112);
  goto <D.16125>;
  <D.16118>:
  D.16111 = *dfn;
  D.16112 = D.16111 + 1;
  D.16119 = next->cil_code;
  D.16120 = (long int) D.16119;
  code.66 = (long int) code;
  D.16122 = D.16120 - code.66;
  D.16123 = (unsigned int) D.16122;
  D.16108 = bb->dfn;
  D.16116 = bb->cil_code;
  D.16126 = (long int) D.16116;
  code.66 = (long int) code;
  D.16127 = D.16126 - code.66;
  D.16128 = (unsigned int) D.16127;
  output.67 = output;
  fprintf (output.67, "\t\"IL_%04x (%d)\" -> \"IL_%04x (%d)\"\n", D.16128, D.16108, D.16123, D.16112);
  <D.16125>:
  df_visit (next, dfn, code);
  <D.16115>:
  tmp = tmp->next;
  <D.14782>:
  if (tmp != 0B) goto <D.14781>; else goto <D.14783>;
  <D.14783>:
}


stats (struct MonoImage * image, const char * name)
{
  int D.16130;
  int D.16131;
  unsigned int D.16132;
  int D.16133;
  unsigned int D.16134;
  int back_branch_waste.68;
  int branch_waste.69;
  int var_waste.70;
  int int_waste.71;
  int nop_waste.72;
  int num_exceptions.73;
  double D.16141;
  int has_exceptions.74;
  double D.16143;
  double D.16144;
  int max_exceptions.75;
  int num_locals.76;
  double D.16147;
  int has_locals.77;
  double D.16149;
  double D.16150;
  int max_locals.78;
  int num_args.79;
  double D.16153;
  int has_args.80;
  double D.16155;
  double D.16156;
  int max_args.81;
  int num_maxstack.82;
  double D.16159;
  double D.16160;
  double D.16161;
  int max_maxstack.83;
  int has_maxstack.84;
  int num_code.85;
  double D.16165;
  int has_code.86;
  double D.16167;
  double D.16168;
  int max_code.87;
  int num_branch.88;
  double D.16171;
  int has_branch.89;
  double D.16173;
  double D.16174;
  int max_branch.90;
  int num_condbranch.91;
  double D.16177;
  int has_condbranch.92;
  double D.16179;
  double D.16180;
  int max_condbranch.93;
  int num_switch.94;
  double D.16183;
  int has_switch.95;
  double D.16185;
  double D.16186;
  int max_switch.96;
  int num_calls.97;
  double D.16189;
  int has_calls.98;
  double D.16191;
  double D.16192;
  int max_calls.99;
  int num_throw.100;
  double D.16195;
  int has_throw.101;
  double D.16197;
  double D.16198;
  int max_throw.102;
  int total_cast.103;
  int cast_sealed.104;
  int cast_iface.105;
  int total_callvirt.106;
  int nonvirt_callvirt.107;
  int iface_callvirt.108;
  int num_ifaces.109;
  int pdepth_array_next.110;
  int num_pdepth.111;
  double D.16211;
  double D.16212;
  int * pdepth_array.112;
  long unsigned int D.16214;
  long unsigned int D.16215;
  int * D.16216;
  int D.16217;
  double D.16218;
  double D.16219;
  double D.16220;
  double D.16221;
  int num_pdepth_ovf.113;
  int max_pdepth.114;
  int i;
  int num_methods;
  int num_types;
  struct MonoMethod * method;
  struct MonoClass * klass;

  num_methods = mono_image_get_table_rows (image, 6);
  i = 0;
  goto <D.14606>;
  <D.14605>:
  D.16130 = i + 1;
  D.16131 = D.16130 | 100663296;
  D.16132 = (unsigned int) D.16131;
  method = mono_get_method (image, D.16132, 0B);
  method_stats (method);
  i = i + 1;
  <D.14606>:
  if (i < num_methods) goto <D.14605>; else goto <D.14607>;
  <D.14607>:
  num_types = mono_image_get_table_rows (image, 2);
  i = 0;
  goto <D.14609>;
  <D.14608>:
  D.16130 = i + 1;
  D.16133 = D.16130 | 33554432;
  D.16134 = (unsigned int) D.16133;
  klass = mono_class_get (image, D.16134);
  type_stats (klass);
  i = i + 1;
  <D.14609>:
  if (i < num_types) goto <D.14608>; else goto <D.14610>;
  <D.14610>:
  monoeg_g_print ("Methods and code stats:\n");
  back_branch_waste.68 = back_branch_waste;
  monoeg_g_print ("back branch waste: %d\n", back_branch_waste.68);
  branch_waste.69 = branch_waste;
  monoeg_g_print ("branch waste: %d\n", branch_waste.69);
  var_waste.70 = var_waste;
  monoeg_g_print ("var waste: %d\n", var_waste.70);
  int_waste.71 = int_waste;
  monoeg_g_print ("int waste: %d\n", int_waste.71);
  nop_waste.72 = nop_waste;
  monoeg_g_print ("nop waste: %d\n", nop_waste.72);
  num_exceptions.73 = num_exceptions;
  D.16141 = (double) num_exceptions.73;
  has_exceptions.74 = has_exceptions;
  D.16143 = (double) has_exceptions.74;
  D.16144 = D.16141 / D.16143;
  max_exceptions.75 = max_exceptions;
  num_exceptions.73 = num_exceptions;
  has_exceptions.74 = has_exceptions;
  monoeg_g_print ("has exceptions: %d/%d, total: %d, max: %d, mean: %f\n", has_exceptions.74, num_methods, num_exceptions.73, max_exceptions.75, D.16144);
  num_locals.76 = num_locals;
  D.16147 = (double) num_locals.76;
  has_locals.77 = has_locals;
  D.16149 = (double) has_locals.77;
  D.16150 = D.16147 / D.16149;
  max_locals.78 = max_locals;
  num_locals.76 = num_locals;
  has_locals.77 = has_locals;
  monoeg_g_print ("has locals: %d/%d, total: %d, max: %d, mean: %f\n", has_locals.77, num_methods, num_locals.76, max_locals.78, D.16150);
  num_args.79 = num_args;
  D.16153 = (double) num_args.79;
  has_args.80 = has_args;
  D.16155 = (double) has_args.80;
  D.16156 = D.16153 / D.16155;
  max_args.81 = max_args;
  num_args.79 = num_args;
  has_args.80 = has_args;
  monoeg_g_print ("has args: %d/%d, total: %d, max: %d, mean: %f\n", has_args.80, num_methods, num_args.79, max_args.81, D.16156);
  num_maxstack.82 = num_maxstack;
  D.16159 = (double) num_maxstack.82;
  D.16160 = (double) i;
  D.16161 = D.16159 / D.16160;
  max_maxstack.83 = max_maxstack;
  num_maxstack.82 = num_maxstack;
  has_maxstack.84 = has_maxstack;
  monoeg_g_print ("has maxstack: %d/%d, total: %d, max: %d, mean: %f\n", has_maxstack.84, num_methods, num_maxstack.82, max_maxstack.83, D.16161);
  num_code.85 = num_code;
  D.16165 = (double) num_code.85;
  has_code.86 = has_code;
  D.16167 = (double) has_code.86;
  D.16168 = D.16165 / D.16167;
  max_code.87 = max_code;
  num_code.85 = num_code;
  has_code.86 = has_code;
  monoeg_g_print ("has code: %d/%d, total: %d, max: %d, mean: %f\n", has_code.86, num_methods, num_code.85, max_code.87, D.16168);
  num_branch.88 = num_branch;
  D.16171 = (double) num_branch.88;
  has_branch.89 = has_branch;
  D.16173 = (double) has_branch.89;
  D.16174 = D.16171 / D.16173;
  max_branch.90 = max_branch;
  num_branch.88 = num_branch;
  has_branch.89 = has_branch;
  monoeg_g_print ("has branch: %d/%d, total: %d, max: %d, mean: %f\n", has_branch.89, num_methods, num_branch.88, max_branch.90, D.16174);
  num_condbranch.91 = num_condbranch;
  D.16177 = (double) num_condbranch.91;
  has_condbranch.92 = has_condbranch;
  D.16179 = (double) has_condbranch.92;
  D.16180 = D.16177 / D.16179;
  max_condbranch.93 = max_condbranch;
  num_condbranch.91 = num_condbranch;
  has_condbranch.92 = has_condbranch;
  monoeg_g_print ("has condbranch: %d/%d, total: %d, max: %d, mean: %f\n", has_condbranch.92, num_methods, num_condbranch.91, max_condbranch.93, D.16180);
  num_switch.94 = num_switch;
  D.16183 = (double) num_switch.94;
  has_switch.95 = has_switch;
  D.16185 = (double) has_switch.95;
  D.16186 = D.16183 / D.16185;
  max_switch.96 = max_switch;
  num_switch.94 = num_switch;
  has_switch.95 = has_switch;
  monoeg_g_print ("has switch: %d/%d, total: %d, max: %d, mean: %f\n", has_switch.95, num_methods, num_switch.94, max_switch.96, D.16186);
  num_calls.97 = num_calls;
  D.16189 = (double) num_calls.97;
  has_calls.98 = has_calls;
  D.16191 = (double) has_calls.98;
  D.16192 = D.16189 / D.16191;
  max_calls.99 = max_calls;
  num_calls.97 = num_calls;
  has_calls.98 = has_calls;
  monoeg_g_print ("has calls: %d/%d, total: %d, max: %d, mean: %f\n", has_calls.98, num_methods, num_calls.97, max_calls.99, D.16192);
  num_throw.100 = num_throw;
  D.16195 = (double) num_throw.100;
  has_throw.101 = has_throw;
  D.16197 = (double) has_throw.101;
  D.16198 = D.16195 / D.16197;
  max_throw.102 = max_throw;
  num_throw.100 = num_throw;
  has_throw.101 = has_throw;
  monoeg_g_print ("has throw: %d/%d, total: %d, max: %d, mean: %f\n", has_throw.101, num_methods, num_throw.100, max_throw.102, D.16198);
  total_cast.103 = total_cast;
  cast_sealed.104 = cast_sealed;
  monoeg_g_print ("sealed type cast: %d/%d\n", cast_sealed.104, total_cast.103);
  total_cast.103 = total_cast;
  cast_iface.105 = cast_iface;
  monoeg_g_print ("interface type cast: %d/%d\n", cast_iface.105, total_cast.103);
  total_callvirt.106 = total_callvirt;
  nonvirt_callvirt.107 = nonvirt_callvirt;
  monoeg_g_print ("non virtual callvirt: %d/%d\n", nonvirt_callvirt.107, total_callvirt.106);
  total_callvirt.106 = total_callvirt;
  iface_callvirt.108 = iface_callvirt;
  monoeg_g_print ("interface callvirt: %d/%d\n", iface_callvirt.108, total_callvirt.106);
  monoeg_g_print ("\nType stats:\n");
  num_ifaces.109 = num_ifaces;
  monoeg_g_print ("interface types: %d/%d\n", num_ifaces.109, num_types);
  {
    double mean;
    double stddev;

    mean = 0.0;
    stddev = 0.0;
    pdepth_array_next.110 = pdepth_array_next;
    if (pdepth_array_next.110 != 0) goto <D.16208>; else goto <D.16209>;
    <D.16208>:
    {
      int i;

      num_pdepth.111 = num_pdepth;
      D.16211 = (double) num_pdepth.111;
      pdepth_array_next.110 = pdepth_array_next;
      D.16212 = (double) pdepth_array_next.110;
      mean = D.16211 / D.16212;
      i = 0;
      goto <D.14615>;
      <D.14614>:
      pdepth_array.112 = pdepth_array;
      D.16214 = (long unsigned int) i;
      D.16215 = D.16214 * 4;
      D.16216 = pdepth_array.112 + D.16215;
      D.16217 = *D.16216;
      D.16218 = (double) D.16217;
      D.16219 = D.16218 - mean;
      pdepth_array.112 = pdepth_array;
      D.16214 = (long unsigned int) i;
      D.16215 = D.16214 * 4;
      D.16216 = pdepth_array.112 + D.16215;
      D.16217 = *D.16216;
      D.16218 = (double) D.16217;
      D.16219 = D.16218 - mean;
      D.16220 = D.16219 * D.16219;
      stddev = D.16220 + stddev;
      i = i + 1;
      <D.14615>:
      pdepth_array_next.110 = pdepth_array_next;
      if (i < pdepth_array_next.110) goto <D.14614>; else goto <D.14616>;
      <D.14616>:
      pdepth_array_next.110 = pdepth_array_next;
      D.16212 = (double) pdepth_array_next.110;
      D.16221 = stddev / D.16212;
      stddev = sqrt (D.16221);
    }
    <D.16209>:
    num_pdepth_ovf.113 = num_pdepth_ovf;
    max_pdepth.114 = max_pdepth;
    monoeg_g_print ("parent depth: max: %d, mean: %f, sttdev: %f, overflowing: %d\n", max_pdepth.114, mean, stddev, num_pdepth_ovf.113);
  }
}


method_stats (struct MonoMethod * method)
{
  short unsigned int D.16224;
  int D.16225;
  int D.16226;
  short unsigned int D.16229;
  int D.16230;
  int D.16231;
  int D.16234;
  unsigned int n.115;
  unsigned int n.116;
  int has_exceptions.117;
  int has_exceptions.118;
  int num_exceptions.119;
  unsigned int num_exceptions.120;
  unsigned int D.16243;
  int num_exceptions.121;
  int max_exceptions.122;
  unsigned int max_exceptions.123;
  int n.124;
  int has_locals.125;
  int has_locals.126;
  int num_locals.127;
  unsigned int num_locals.128;
  unsigned int D.16256;
  int num_locals.129;
  int max_locals.130;
  unsigned int max_locals.131;
  sizetype D.16262;
  int max_maxstack.132;
  unsigned int max_maxstack.133;
  unsigned int i.134;
  int i.135;
  int num_maxstack.136;
  unsigned int num_maxstack.137;
  unsigned int D.16271;
  int num_maxstack.138;
  int has_maxstack.139;
  int has_maxstack.140;
  <unnamed-unsigned:1> D.16277;
  int D.16278;
  short unsigned int D.16279;
  int D.16280;
  int D.16281;
  unsigned int n.141;
  int max_args.142;
  unsigned int max_args.143;
  int num_args.144;
  unsigned int num_args.145;
  unsigned int D.16289;
  int num_args.146;
  int has_args.147;
  int has_args.148;
  int has_code.149;
  int has_code.150;
  int max_code.151;
  long int D.16298;
  long int il_code_end.152;
  long int ip.153;
  long int D.16301;
  int max_code.154;
  unsigned int D.16305;
  int num_code.155;
  unsigned int num_code.156;
  unsigned int D.16308;
  int num_code.157;
  unsigned char D.16310;
  int D.16313;
  int D.16314;
  unsigned int i.158;
  unsigned int i.159;
  unsigned char D.16318;
  int D.16319;
  int nop_waste.160;
  int nop_waste.161;
  unsigned int n.162;
  int int_waste.163;
  int int_waste.164;
  const char * D.16329;
  int int_waste.165;
  const char * D.16334;
  unsigned int D.16335;
  struct MonoClass * D.16338;
  struct MonoImage * D.16339;
  unsigned int D.16342;
  unsigned int D.16343;
  int cast_sealed.166;
  int cast_sealed.167;
  unsigned int D.16350;
  int cast_iface.168;
  int cast_iface.169;
  int total_cast.170;
  int total_cast.171;
  int branch_waste.172;
  int branch_waste.173;
  int back_branch_waste.174;
  int back_branch_waste.175;
  const guint16 * D.16365;
  short unsigned int D.16366;
  unsigned int n.176;
  int var_waste.177;
  int var_waste.178;
  int var_waste.179;
  const unsigned char * D.16376;
  unsigned char D.16377;
  int var_waste.180;
  signed char D.16381;
  int int_waste.181;
  unsigned int D.16387;
  int D.16388;
  sizetype D.16389;
  int num_switch.182;
  int num_switch.183;
  int has_switch.184;
  int has_switch.185;
  int max_switch.186;
  const guint64 * D.16397;
  long unsigned int D.16398;
  unsigned long l.187;
  unsigned long D.16400;
  int int_waste.188;
  unsigned long D.16405;
  int int_waste.189;
  unsigned long D.16410;
  const guint32 * D.16415;
  unsigned int D.16416;
  short unsigned int D.16419;
  int D.16420;
  int D.16421;
  int nonvirt_callvirt.190;
  int nonvirt_callvirt.191;
  struct MonoClass * D.16428;
  unsigned int D.16429;
  unsigned int D.16430;
  int iface_callvirt.192;
  int iface_callvirt.193;
  int total_callvirt.194;
  int total_callvirt.195;
  unsigned char D.16437;
  int D.16438;
  int has_branch.196;
  int has_branch.197;
  int max_branch.198;
  int num_branch.199;
  int num_branch.200;
  int has_condbranch.201;
  int has_condbranch.202;
  int max_condbranch.203;
  int num_condbranch.204;
  int num_condbranch.205;
  int has_calls.206;
  int has_calls.207;
  int max_calls.208;
  int num_calls.209;
  int num_calls.210;
  int has_throw.211;
  int has_throw.212;
  int max_throw.213;
  int num_throw.214;
  int num_throw.215;
  const struct MonoOpcode * opcode;
  struct MonoMethodHeader * header;
  struct MonoMethodSignature * sig;
  const unsigned char * ip;
  const unsigned char * il_code_end;
  guint32 i;
  guint32 n;
  int local_branch;
  int local_condbranch;
  int local_throw;
  int local_calls;
  gint64 l;

  try
    {
      local_branch = 0;
      local_condbranch = 0;
      local_throw = 0;
      local_calls = 0;
      D.16224 = method->iflags;
      D.16225 = (int) D.16224;
      D.16226 = D.16225 & 4099;
      if (D.16226 != 0) goto <D.16227>; else goto <D.16228>;
      <D.16227>:
      return;
      <D.16228>:
      D.16229 = method->flags;
      D.16230 = (int) D.16229;
      D.16231 = D.16230 & 9216;
      if (D.16231 != 0) goto <D.16232>; else goto <D.16233>;
      <D.16232>:
      return;
      <D.16233>:
      header = mono_method_get_header (method);
      D.16234 = mono_method_header_get_num_clauses (header);
      n.115 = (unsigned int) D.16234;
      n = n.115;
      n.116 = n;
      if (n.116 != 0) goto <D.16237>; else goto <D.16238>;
      <D.16237>:
      has_exceptions.117 = has_exceptions;
      has_exceptions.118 = has_exceptions.117 + 1;
      has_exceptions = has_exceptions.118;
      <D.16238>:
      num_exceptions.119 = num_exceptions;
      num_exceptions.120 = (unsigned int) num_exceptions.119;
      n.116 = n;
      D.16243 = num_exceptions.120 + n.116;
      num_exceptions.121 = (int) D.16243;
      num_exceptions = num_exceptions.121;
      max_exceptions.122 = max_exceptions;
      max_exceptions.123 = (unsigned int) max_exceptions.122;
      n.116 = n;
      if (max_exceptions.123 < n.116) goto <D.16247>; else goto <D.16248>;
      <D.16247>:
      n.116 = n;
      n.124 = (int) n.116;
      max_exceptions = n.124;
      <D.16248>:
      mono_method_header_get_locals (header, &n, 0B);
      n.116 = n;
      if (n.116 != 0) goto <D.16250>; else goto <D.16251>;
      <D.16250>:
      has_locals.125 = has_locals;
      has_locals.126 = has_locals.125 + 1;
      has_locals = has_locals.126;
      <D.16251>:
      num_locals.127 = num_locals;
      num_locals.128 = (unsigned int) num_locals.127;
      n.116 = n;
      D.16256 = num_locals.128 + n.116;
      num_locals.129 = (int) D.16256;
      num_locals = num_locals.129;
      max_locals.130 = max_locals;
      max_locals.131 = (unsigned int) max_locals.130;
      n.116 = n;
      if (max_locals.131 < n.116) goto <D.16260>; else goto <D.16261>;
      <D.16260>:
      n.116 = n;
      n.124 = (int) n.116;
      max_locals = n.124;
      <D.16261>:
      ip = mono_method_header_get_code (header, &n, &i);
      n.116 = n;
      D.16262 = (sizetype) n.116;
      il_code_end = ip + D.16262;
      max_maxstack.132 = max_maxstack;
      max_maxstack.133 = (unsigned int) max_maxstack.132;
      i.134 = i;
      if (max_maxstack.133 < i.134) goto <D.16266>; else goto <D.16267>;
      <D.16266>:
      i.134 = i;
      i.135 = (int) i.134;
      max_maxstack = i.135;
      <D.16267>:
      num_maxstack.136 = num_maxstack;
      num_maxstack.137 = (unsigned int) num_maxstack.136;
      i.134 = i;
      D.16271 = num_maxstack.137 + i.134;
      num_maxstack.138 = (int) D.16271;
      num_maxstack = num_maxstack.138;
      i.134 = i;
      if (i.134 != 8) goto <D.16273>; else goto <D.16274>;
      <D.16273>:
      has_maxstack.139 = has_maxstack;
      has_maxstack.140 = has_maxstack.139 + 1;
      has_maxstack = has_maxstack.140;
      <D.16274>:
      sig = mono_method_signature (method);
      D.16277 = sig->hasthis;
      D.16278 = (int) D.16277;
      D.16279 = sig->param_count;
      D.16280 = (int) D.16279;
      D.16281 = D.16278 + D.16280;
      n.141 = (unsigned int) D.16281;
      n = n.141;
      max_args.142 = max_args;
      max_args.143 = (unsigned int) max_args.142;
      n.116 = n;
      if (max_args.143 < n.116) goto <D.16285>; else goto <D.16286>;
      <D.16285>:
      n.116 = n;
      n.124 = (int) n.116;
      max_args = n.124;
      <D.16286>:
      num_args.144 = num_args;
      num_args.145 = (unsigned int) num_args.144;
      n.116 = n;
      D.16289 = num_args.145 + n.116;
      num_args.146 = (int) D.16289;
      num_args = num_args.146;
      n.116 = n;
      if (n.116 != 0) goto <D.16291>; else goto <D.16292>;
      <D.16291>:
      has_args.147 = has_args;
      has_args.148 = has_args.147 + 1;
      has_args = has_args.148;
      <D.16292>:
      has_code.149 = has_code;
      has_code.150 = has_code.149 + 1;
      has_code = has_code.150;
      max_code.151 = max_code;
      D.16298 = (long int) max_code.151;
      il_code_end.152 = (long int) il_code_end;
      ip.153 = (long int) ip;
      D.16301 = il_code_end.152 - ip.153;
      if (D.16298 < D.16301) goto <D.16302>; else goto <D.16303>;
      <D.16302>:
      il_code_end.152 = (long int) il_code_end;
      ip.153 = (long int) ip;
      D.16301 = il_code_end.152 - ip.153;
      max_code.154 = (int) D.16301;
      max_code = max_code.154;
      <D.16303>:
      il_code_end.152 = (long int) il_code_end;
      ip.153 = (long int) ip;
      D.16301 = il_code_end.152 - ip.153;
      D.16305 = (unsigned int) D.16301;
      num_code.155 = num_code;
      num_code.156 = (unsigned int) num_code.155;
      D.16308 = D.16305 + num_code.156;
      num_code.157 = (int) D.16308;
      num_code = num_code.157;
      goto <D.14579>;
      <D.14578>:
      D.16310 = *ip;
      if (D.16310 == 254) goto <D.16311>; else goto <D.16312>;
      <D.16311>:
      ip = ip + 1;
      D.16310 = *ip;
      D.16313 = (int) D.16310;
      D.16314 = D.16313 + 256;
      i.158 = (unsigned int) D.16314;
      i = i.158;
      goto <D.16316>;
      <D.16312>:
      D.16310 = *ip;
      i.159 = (unsigned int) D.16310;
      i = i.159;
      <D.16316>:
      i.134 = i;
      opcode = &mono_opcodes[i.134];
      D.16318 = opcode->argument;
      D.16319 = (int) D.16318;
      switch (D.16319) <default: <D.14572>, case 0: <D.14540>, case 1: <D.14543>, case 2: <D.14546>, case 3: <D.14570>, case 4: <D.14547>, case 5: <D.14548>, case 6: <D.14549>, case 7: <D.14552>, case 8: <D.14558>, case 9: <D.14551>, case 10: <D.14565>, case 11: <D.14566>, case 12: <D.14568>, case 13: <D.14550>, case 14: <D.14542>, case 15: <D.14564>, case 16: <D.14569>>
      <D.14540>:
      i.134 = i;
      if (i.134 == 0) goto <D.16320>; else goto <D.16321>;
      <D.16320>:
      nop_waste.160 = nop_waste;
      nop_waste.161 = nop_waste.160 + 1;
      nop_waste = nop_waste.161;
      <D.16321>:
      ip = ip + 1;
      goto <D.14541>;
      <D.14542>:
      n.162 = MEM[(const guint32 *)ip + 1B];
      n = n.162;
      if (0 != 0) goto <D.16325>; else goto <D.16326>;
      <D.16325>:
      int_waste.163 = int_waste;
      int_waste.164 = int_waste.163 + 4;
      int_waste = int_waste.164;
      n.116 = n;
      i.134 = i;
      i.135 = (int) i.134;
      D.16329 = mono_opcode_name (i.135);
      monoeg_g_print ("%s %d\n", D.16329, n.116);
      goto <D.16330>;
      <D.16326>:
      if (0 != 0) goto <D.16331>; else goto <D.16332>;
      <D.16331>:
      int_waste.163 = int_waste;
      int_waste.165 = int_waste.163 + 3;
      int_waste = int_waste.165;
      n.116 = n;
      i.134 = i;
      i.135 = (int) i.134;
      D.16334 = mono_opcode_name (i.135);
      monoeg_g_print ("%s %d\n", D.16334, n.116);
      <D.16332>:
      <D.16330>:
      ip = ip + 5;
      goto <D.14541>;
      <D.14543>:
      i.134 = i;
      D.16335 = i.134 + 4294967180;
      if (D.16335 <= 1) goto <D.16336>; else goto <D.16337>;
      <D.16336>:
      {
        guint32 token;
        struct MonoClass * k;

        token = MEM[(const guint32 *)ip + 1B];
        D.16338 = method->klass;
        D.16339 = D.16338->image;
        k = mono_class_get (D.16339, token);
        if (k != 0B) goto <D.16340>; else goto <D.16341>;
        <D.16340>:
        D.16342 = k->flags;
        D.16343 = D.16342 & 256;
        if (D.16343 != 0) goto <D.16344>; else goto <D.16345>;
        <D.16344>:
        cast_sealed.166 = cast_sealed;
        cast_sealed.167 = cast_sealed.166 + 1;
        cast_sealed = cast_sealed.167;
        <D.16345>:
        <D.16341>:
        if (k != 0B) goto <D.16348>; else goto <D.16349>;
        <D.16348>:
        D.16342 = k->flags;
        D.16350 = D.16342 & 32;
        if (D.16350 != 0) goto <D.16351>; else goto <D.16352>;
        <D.16351>:
        cast_iface.168 = cast_iface;
        cast_iface.169 = cast_iface.168 + 1;
        cast_iface = cast_iface.169;
        <D.16352>:
        <D.16349>:
        total_cast.170 = total_cast;
        total_cast.171 = total_cast.170 + 1;
        total_cast = total_cast.171;
      }
      <D.16337>:
      ip = ip + 5;
      goto <D.14541>;
      <D.14546>:
      <D.14547>:
      <D.14548>:
      <D.14549>:
      <D.14550>:
      ip = ip + 5;
      goto <D.14541>;
      <D.14551>:
      n.162 = MEM[(const guint32 *)ip + 1B];
      n = n.162;
      if (0 != 0) goto <D.16357>; else goto <D.16358>;
      <D.16357>:
      branch_waste.172 = branch_waste;
      branch_waste.173 = branch_waste.172 + 3;
      branch_waste = branch_waste.173;
      if (0 != 0) goto <D.16361>; else goto <D.16362>;
      <D.16361>:
      back_branch_waste.174 = back_branch_waste;
      back_branch_waste.175 = back_branch_waste.174 + 3;
      back_branch_waste = back_branch_waste.175;
      <D.16362>:
      <D.16358>:
      ip = ip + 5;
      goto <D.14541>;
      <D.14552>:
      D.16365 = ip + 1;
      D.16366 = *D.16365;
      n.176 = (unsigned int) D.16366;
      n = n.176;
      n.116 = n;
      if (n.116 <= 255) goto <D.16368>; else goto <D.16369>;
      <D.16368>:
      n.116 = n;
      if (n.116 <= 3) goto <D.16370>; else goto <D.16371>;
      <D.16370>:
      i.134 = i;
      switch (i.134) <default: <D.14557>, case 265: <D.14553>, case 268: <D.14554>, case 270: <D.14555>>
      <D.14553>:
      <D.14554>:
      <D.14555>:
      var_waste.177 = var_waste;
      var_waste.178 = var_waste.177 + 3;
      var_waste = var_waste.178;
      goto <D.14556>;
      <D.14557>:
      var_waste.177 = var_waste;
      var_waste.179 = var_waste.177 + 2;
      var_waste = var_waste.179;
      goto <D.14556>;
      <D.14556>:
      goto <D.16375>;
      <D.16371>:
      var_waste.177 = var_waste;
      var_waste.179 = var_waste.177 + 2;
      var_waste = var_waste.179;
      <D.16375>:
      <D.16369>:
      ip = ip + 3;
      goto <D.14541>;
      <D.14558>:
      D.16376 = ip + 1;
      D.16377 = *D.16376;
      if (D.16377 <= 3) goto <D.16378>; else goto <D.16379>;
      <D.16378>:
      i.134 = i;
      switch (i.134) <default: <D.14563>, case 14: <D.14559>, case 17: <D.14560>, case 19: <D.14561>>
      <D.14559>:
      <D.14560>:
      <D.14561>:
      var_waste.177 = var_waste;
      var_waste.180 = var_waste.177 + 1;
      var_waste = var_waste.180;
      goto <D.14562>;
      <D.14563>:
      goto <D.14562>;
      <D.14562>:
      <D.16379>:
      ip = ip + 2;
      goto <D.14541>;
      <D.14564>:
      D.16376 = ip + 1;
      D.16377 = *D.16376;
      D.16381 = (signed char) D.16377;
      if (D.16381 <= 8) goto <D.16382>; else goto <D.16383>;
      <D.16382>:
      D.16376 = ip + 1;
      D.16377 = *D.16376;
      D.16381 = (signed char) D.16377;
      if (D.16381 >= -1) goto <D.16384>; else goto <D.16385>;
      <D.16384>:
      int_waste.163 = int_waste;
      int_waste.181 = int_waste.163 + 1;
      int_waste = int_waste.181;
      <D.16385>:
      <D.16383>:
      ip = ip + 2;
      goto <D.14541>;
      <D.14565>:
      ip = ip + 2;
      goto <D.14541>;
      <D.14566>:
      {
        gint32 n;

        ip = ip + 1;
        D.16387 = MEM[(const guint32 *)ip];
        n = (gint32) D.16387;
        ip = ip + 4;
        D.16388 = n * 4;
        D.16389 = (sizetype) D.16388;
        ip = ip + D.16389;
        num_switch.182 = num_switch;
        num_switch.183 = num_switch.182 + n;
        num_switch = num_switch.183;
        has_switch.184 = has_switch;
        has_switch.185 = has_switch.184 + 1;
        has_switch = has_switch.185;
        max_switch.186 = max_switch;
        if (max_switch.186 < n) goto <D.16395>; else goto <D.16396>;
        <D.16395>:
        max_switch = n;
        <D.16396>:
        goto <D.14541>;
      }
      <D.14568>:
      ip = ip + 9;
      goto <D.14541>;
      <D.14569>:
      D.16397 = ip + 1;
      D.16398 = *D.16397;
      l = (gint64) D.16398;
      l.187 = (unsigned long) l;
      D.16400 = l.187 + 1;
      if (D.16400 <= 9) goto <D.16401>; else goto <D.16402>;
      <D.16401>:
      int_waste.163 = int_waste;
      int_waste.188 = int_waste.163 + 7;
      int_waste = int_waste.188;
      goto <D.16404>;
      <D.16402>:
      l.187 = (unsigned long) l;
      D.16405 = l.187 + 128;
      if (D.16405 <= 255) goto <D.16406>; else goto <D.16407>;
      <D.16406>:
      int_waste.163 = int_waste;
      int_waste.189 = int_waste.163 + 6;
      int_waste = int_waste.189;
      goto <D.16409>;
      <D.16407>:
      l.187 = (unsigned long) l;
      D.16410 = l.187 + 2147483648;
      if (D.16410 <= 4294967295) goto <D.16411>; else goto <D.16412>;
      <D.16411>:
      int_waste.163 = int_waste;
      int_waste.165 = int_waste.163 + 3;
      int_waste = int_waste.165;
      <D.16412>:
      <D.16409>:
      <D.16404>:
      ip = ip + 9;
      goto <D.14541>;
      <D.14570>:
      i.134 = i;
      if (i.134 == 111) goto <D.16413>; else goto <D.16414>;
      <D.16413>:
      {
        struct MonoMethod * cm;

        D.16415 = ip + 1;
        D.16416 = *D.16415;
        D.16338 = method->klass;
        D.16339 = D.16338->image;
        cm = mono_get_method (D.16339, D.16416, 0B);
        if (cm != 0B) goto <D.16417>; else goto <D.16418>;
        <D.16417>:
        D.16419 = cm->flags;
        D.16420 = (int) D.16419;
        D.16421 = D.16420 & 64;
        if (D.16421 == 0) goto <D.16422>; else goto <D.16423>;
        <D.16422>:
        nonvirt_callvirt.190 = nonvirt_callvirt;
        nonvirt_callvirt.191 = nonvirt_callvirt.190 + 1;
        nonvirt_callvirt = nonvirt_callvirt.191;
        <D.16423>:
        <D.16418>:
        if (cm != 0B) goto <D.16426>; else goto <D.16427>;
        <D.16426>:
        D.16428 = cm->klass;
        D.16429 = D.16428->flags;
        D.16430 = D.16429 & 32;
        if (D.16430 != 0) goto <D.16431>; else goto <D.16432>;
        <D.16431>:
        iface_callvirt.192 = iface_callvirt;
        iface_callvirt.193 = iface_callvirt.192 + 1;
        iface_callvirt = iface_callvirt.193;
        <D.16432>:
        <D.16427>:
        total_callvirt.194 = total_callvirt;
        total_callvirt.195 = total_callvirt.194 + 1;
        total_callvirt = total_callvirt.195;
      }
      <D.16414>:
      ip = ip + 5;
      goto <D.14541>;
      <D.14572>:
      monoeg_assertion_message ("* Assertion: should not be reached at %s:%d\n", "monograph.c", 374);
      <D.14541>:
      D.16437 = opcode->flow_type;
      D.16438 = (int) D.16437;
      switch (D.16438) <default: <D.16439>, case 1: <D.14573>, case 2: <D.14575>, case 3: <D.14577>, case 4: <D.14576>>
      <D.14573>:
      local_branch = local_branch + 1;
      goto <D.14574>;
      <D.14575>:
      local_condbranch = local_condbranch + 1;
      goto <D.14574>;
      <D.14576>:
      local_calls = local_calls + 1;
      goto <D.14574>;
      <D.14577>:
      local_throw = local_throw + 1;
      goto <D.14574>;
      <D.16439>:
      <D.14574>:
      <D.14579>:
      if (ip < il_code_end) goto <D.14578>; else goto <D.14580>;
      <D.14580>:
      if (local_branch != 0) goto <D.16440>; else goto <D.16441>;
      <D.16440>:
      has_branch.196 = has_branch;
      has_branch.197 = has_branch.196 + 1;
      has_branch = has_branch.197;
      <D.16441>:
      max_branch.198 = max_branch;
      if (max_branch.198 < local_branch) goto <D.16445>; else goto <D.16446>;
      <D.16445>:
      max_branch = local_branch;
      <D.16446>:
      num_branch.199 = num_branch;
      num_branch.200 = num_branch.199 + local_branch;
      num_branch = num_branch.200;
      if (local_condbranch != 0) goto <D.16449>; else goto <D.16450>;
      <D.16449>:
      has_condbranch.201 = has_condbranch;
      has_condbranch.202 = has_condbranch.201 + 1;
      has_condbranch = has_condbranch.202;
      <D.16450>:
      max_condbranch.203 = max_condbranch;
      if (max_condbranch.203 < local_condbranch) goto <D.16454>; else goto <D.16455>;
      <D.16454>:
      max_condbranch = local_condbranch;
      <D.16455>:
      num_condbranch.204 = num_condbranch;
      num_condbranch.205 = num_condbranch.204 + local_condbranch;
      num_condbranch = num_condbranch.205;
      if (local_calls != 0) goto <D.16458>; else goto <D.16459>;
      <D.16458>:
      has_calls.206 = has_calls;
      has_calls.207 = has_calls.206 + 1;
      has_calls = has_calls.207;
      <D.16459>:
      max_calls.208 = max_calls;
      if (max_calls.208 < local_calls) goto <D.16463>; else goto <D.16464>;
      <D.16463>:
      max_calls = local_calls;
      <D.16464>:
      num_calls.209 = num_calls;
      num_calls.210 = num_calls.209 + local_calls;
      num_calls = num_calls.210;
      if (local_throw != 0) goto <D.16467>; else goto <D.16468>;
      <D.16467>:
      has_throw.211 = has_throw;
      has_throw.212 = has_throw.211 + 1;
      has_throw = has_throw.212;
      <D.16468>:
      max_throw.213 = max_throw;
      if (max_throw.213 < local_throw) goto <D.16472>; else goto <D.16473>;
      <D.16472>:
      max_throw = local_throw;
      <D.16473>:
      num_throw.214 = num_throw;
      num_throw.215 = num_throw.214 + local_throw;
      num_throw = num_throw.215;
      return;
    }
  finally
    {
      i = {CLOBBER};
      n = {CLOBBER};
    }
}


type_stats (struct MonoClass * klass)
{
  unsigned int D.16479;
  unsigned int D.16480;
  int num_ifaces.216;
  int num_ifaces.217;
  int pdepth_array_next.218;
  int pdepth_array_size.219;
  int pdepth_array_size.220;
  long unsigned int D.16492;
  long unsigned int D.16493;
  int * pdepth_array.221;
  void * pdepth_array.222;
  int pdepth_array_next.223;
  int pdepth_array_next.224;
  long unsigned int D.16498;
  long unsigned int D.16499;
  int * D.16500;
  int num_pdepth.225;
  int num_pdepth.226;
  int max_pdepth.227;
  int num_pdepth_ovf.228;
  int num_pdepth_ovf.229;
  struct MonoClass * parent;
  int depth;

  depth = 1;
  D.16479 = klass->flags;
  D.16480 = D.16479 & 32;
  if (D.16480 != 0) goto <D.16481>; else goto <D.16482>;
  <D.16481>:
  num_ifaces.216 = num_ifaces;
  num_ifaces.217 = num_ifaces.216 + 1;
  num_ifaces = num_ifaces.217;
  return;
  <D.16482>:
  parent = klass->parent;
  goto <D.14594>;
  <D.14593>:
  depth = depth + 1;
  parent = parent->parent;
  <D.14594>:
  if (parent != 0B) goto <D.14593>; else goto <D.14595>;
  <D.14595>:
  pdepth_array_next.218 = pdepth_array_next;
  pdepth_array_size.219 = pdepth_array_size;
  if (pdepth_array_next.218 >= pdepth_array_size.219) goto <D.16487>; else goto <D.16488>;
  <D.16487>:
  pdepth_array_size.219 = pdepth_array_size;
  pdepth_array_size.220 = pdepth_array_size.219 * 2;
  pdepth_array_size = pdepth_array_size.220;
  pdepth_array_size.219 = pdepth_array_size;
  if (pdepth_array_size.219 == 0) goto <D.16490>; else goto <D.16491>;
  <D.16490>:
  pdepth_array_size = 128;
  <D.16491>:
  pdepth_array_size.219 = pdepth_array_size;
  D.16492 = (long unsigned int) pdepth_array_size.219;
  D.16493 = D.16492 * 4;
  pdepth_array.221 = pdepth_array;
  pdepth_array.222 = monoeg_realloc (pdepth_array.221, D.16493);
  pdepth_array = pdepth_array.222;
  <D.16488>:
  pdepth_array.221 = pdepth_array;
  pdepth_array_next.218 = pdepth_array_next;
  pdepth_array_next.223 = pdepth_array_next.218;
  pdepth_array_next.224 = pdepth_array_next.223 + 1;
  pdepth_array_next = pdepth_array_next.224;
  D.16498 = (long unsigned int) pdepth_array_next.223;
  D.16499 = D.16498 * 4;
  D.16500 = pdepth_array.221 + D.16499;
  *D.16500 = depth;
  num_pdepth.225 = num_pdepth;
  num_pdepth.226 = num_pdepth.225 + depth;
  num_pdepth = num_pdepth.226;
  max_pdepth.227 = max_pdepth;
  if (max_pdepth.227 < depth) goto <D.16504>; else goto <D.16505>;
  <D.16504>:
  max_pdepth = depth;
  <D.16505>:
  if (depth > 6) goto <D.16506>; else goto <D.16507>;
  <D.16506>:
  num_pdepth_ovf.228 = num_pdepth_ovf;
  num_pdepth_ovf.229 = num_pdepth_ovf.228 + 1;
  num_pdepth_ovf = num_pdepth_ovf.229;
  <D.16507>:
}


size_stats (struct MonoImage * image, const char * name)
{
  int D.16511;
  int D.16512;
  unsigned int D.16513;
  int i;
  int num_types;
  struct MonoClass * klass;

  num_types = mono_image_get_table_rows (image, 2);
  i = 0;
  goto <D.14637>;
  <D.14636>:
  D.16511 = i + 1;
  D.16512 = D.16511 | 33554432;
  D.16513 = (unsigned int) D.16512;
  klass = mono_class_get (image, D.16513);
  type_size_stats (klass);
  i = i + 1;
  <D.14637>:
  if (i < num_types) goto <D.14636>; else goto <D.14638>;
  <D.14638>:
}


type_size_stats (struct MonoClass * klass)
{
  unsigned int code_size.230;
  unsigned int size.231;
  unsigned int D.16518;
  const char * D.16519;
  const char * D.16520;
  int code_size;
  struct MonoMethod * method;
  struct MonoMethodHeader * header;
  void * iter;

  try
    {
      code_size = 0;
      iter = 0B;
      goto <D.14626>;
      <D.14627>:
      {
        guint32 size;
        guint32 maxs;

        try
          {
            header = mono_method_get_header (method);
            if (header == 0B) goto <D.16514>; else goto <D.16515>;
            <D.16514>:
            // predicted unlikely by continue predictor.
            goto <D.14626>;
            <D.16515>:
            mono_method_header_get_code (header, &size, &maxs);
            code_size.230 = (unsigned int) code_size;
            size.231 = size;
            D.16518 = code_size.230 + size.231;
            code_size = (int) D.16518;
          }
        finally
          {
            size = {CLOBBER};
            maxs = {CLOBBER};
          }
      }
      <D.14626>:
      method = mono_class_get_methods (klass, &iter);
      if (method != 0B) goto <D.14627>; else goto <D.14628>;
      <D.14628>:
      D.16519 = klass->name;
      D.16520 = klass->name_space;
      monoeg_g_print ("%s.%s: code: %d\n", D.16520, D.16519, code_size);
    }
  finally
    {
      iter = {CLOBBER};
    }
}


