mono_config_cleanup ()
{
  struct GHashTable * config_handlers.0;
  char * mono_cfg_dir_allocated.1;

  config_handlers.0 = config_handlers;
  if (config_handlers.0 != 0B) goto <D.17212>; else goto <D.17213>;
  <D.17212>:
  config_handlers.0 = config_handlers;
  monoeg_g_hash_table_destroy (config_handlers.0);
  <D.17213>:
  mono_cfg_dir_allocated.1 = mono_cfg_dir_allocated;
  monoeg_g_free (mono_cfg_dir_allocated.1);
}


mono_config_parse_memory (const char * buffer)
{
  long unsigned int D.17215;
  struct ParseState state;

  try
    {
      state = {};
      state.user_data = "<buffer>";
      D.17215 = strlen (buffer);
      mono_config_parse_xml_with_context (&state, buffer, D.17215);
    }
  finally
    {
      state = {CLOBBER};
    }
}


mono_config_parse_xml_with_context (struct ParseState * state, const char * text, gsize len)
{
  int inited.2;
  long int len.3;
  int D.17220;
  struct GMarkupParseContext * context;

  inited.2 = inited;
  if (inited.2 == 0) goto <D.17217>; else goto <D.17218>;
  <D.17217>:
  mono_config_init ();
  <D.17218>:
  context = monoeg_g_markup_parse_context_new (&mono_parser, 0, state, 0B);
  len.3 = (long int) len;
  D.17220 = monoeg_g_markup_parse_context_parse (context, text, len.3, 0B);
  if (D.17220 != 0) goto <D.17221>; else goto <D.17222>;
  <D.17221>:
  monoeg_g_markup_parse_context_end_parse (context, 0B);
  <D.17222>:
  monoeg_g_markup_parse_context_free (context);
}


parse_error (struct GMarkupParseContext * context, struct GError * error, void * user_data)
{
  const gchar * iftmp.4;
  void * D.17227;
  const gchar * iftmp.5;
  gchar * D.17233;
  struct ParseState * state;
  const gchar * msg;
  const gchar * filename;

  state = user_data;
  if (state != 0B) goto <D.17226>; else goto <D.17224>;
  <D.17226>:
  D.17227 = state->user_data;
  if (D.17227 != 0B) goto <D.17228>; else goto <D.17224>;
  <D.17228>:
  iftmp.4 = state->user_data;
  goto <D.17225>;
  <D.17224>:
  iftmp.4 = "<unknown>";
  <D.17225>:
  filename = iftmp.4;
  if (error != 0B) goto <D.17232>; else goto <D.17230>;
  <D.17232>:
  D.17233 = error->message;
  if (D.17233 != 0B) goto <D.17234>; else goto <D.17230>;
  <D.17234>:
  iftmp.5 = error->message;
  goto <D.17231>;
  <D.17230>:
  iftmp.5 = "";
  <D.17231>:
  msg = iftmp.5;
  monoeg_g_log (0B, 16, "Error parsing %s: %s", filename, msg);
}


passthrough (struct GMarkupParseContext * context, const gchar * text, gsize text_len, void * user_data, struct GError * * error)
{

}


parse_text (struct GMarkupParseContext * context, const gchar * text, gsize text_len, void * user_data, struct GError * * error)
{
  struct MonoParseHandler * D.17235;
  void (*<T2929>) (void *, const char *, gsize) D.17238;
  void * D.17241;
  struct ParseState * state;

  state = user_data;
  D.17235 = state->current;
  if (D.17235 != 0B) goto <D.17236>; else goto <D.17237>;
  <D.17236>:
  D.17235 = state->current;
  D.17238 = D.17235->text;
  if (D.17238 != 0B) goto <D.17239>; else goto <D.17240>;
  <D.17239>:
  D.17235 = state->current;
  D.17238 = D.17235->text;
  D.17241 = state->user_data;
  D.17238 (D.17241, text, text_len);
  <D.17240>:
  <D.17237>:
}


end_element (struct GMarkupParseContext * context, const gchar * element_name, void * user_data, struct GError * * error)
{
  struct MonoParseHandler * D.17242;
  void (*<T292d>) (void *, const char *) D.17245;
  void * D.17248;
  int D.16722;
  const char * D.17249;
  void (*<Tc09>) (void *) D.17252;
  struct ParseState * state;

  state = user_data;
  D.17242 = state->current;
  if (D.17242 != 0B) goto <D.17243>; else goto <D.17244>;
  <D.17243>:
  D.17242 = state->current;
  D.17245 = D.17242->end;
  if (D.17245 != 0B) goto <D.17246>; else goto <D.17247>;
  <D.17246>:
  D.17242 = state->current;
  D.17245 = D.17242->end;
  D.17248 = state->user_data;
  D.17245 (D.17248, element_name);
  <D.17247>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.17242 = state->current;
    D.17249 = D.17242->element_name;
    D.16722 = __builtin_strcmp (D.17249, element_name);
  }
  if (D.16722 == 0) goto <D.17250>; else goto <D.17251>;
  <D.17250>:
  D.17242 = state->current;
  D.17252 = D.17242->finish;
  if (D.17252 != 0B) goto <D.17253>; else goto <D.17254>;
  <D.17253>:
  D.17242 = state->current;
  D.17252 = D.17242->finish;
  D.17248 = state->user_data;
  D.17252 (D.17248);
  <D.17254>:
  state->current = 0B;
  state->user_data = 0B;
  <D.17251>:
  <D.17244>:
}


start_element (struct GMarkupParseContext * context, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values, void * user_data, struct GError * * error)
{
  struct MonoParseHandler * D.17255;
  struct GHashTable * config_handlers.6;
  void * D.17259;
  void * (*<T2921>) (struct MonoImage *) D.17262;
  struct MonoImage * D.17265;
  void * D.17266;
  void (*<T2925>) (void *, const gchar *, const gchar * *, const gchar * *) D.17269;
  void * D.17272;
  struct ParseState * state;

  state = user_data;
  D.17255 = state->current;
  if (D.17255 == 0B) goto <D.17256>; else goto <D.17257>;
  <D.17256>:
  config_handlers.6 = config_handlers;
  D.17259 = monoeg_g_hash_table_lookup (config_handlers.6, element_name);
  state->current = D.17259;
  D.17255 = state->current;
  if (D.17255 != 0B) goto <D.17260>; else goto <D.17261>;
  <D.17260>:
  D.17255 = state->current;
  D.17262 = D.17255->init;
  if (D.17262 != 0B) goto <D.17263>; else goto <D.17264>;
  <D.17263>:
  D.17255 = state->current;
  D.17262 = D.17255->init;
  D.17265 = state->assembly;
  D.17266 = D.17262 (D.17265);
  state->user_data = D.17266;
  <D.17264>:
  <D.17261>:
  <D.17257>:
  D.17255 = state->current;
  if (D.17255 != 0B) goto <D.17267>; else goto <D.17268>;
  <D.17267>:
  D.17255 = state->current;
  D.17269 = D.17255->start;
  if (D.17269 != 0B) goto <D.17270>; else goto <D.17271>;
  <D.17270>:
  D.17255 = state->current;
  D.17269 = D.17255->start;
  D.17272 = state->user_data;
  D.17269 (D.17272, element_name, attribute_names, attribute_values);
  <D.17271>:
  <D.17268>:
}


mono_config_init ()
{
  struct GHashTable * config_handlers.7;
  struct GHashTable * config_handlers.8;
  const char * D.17275;
  const char * D.17276;

  inited = 1;
  config_handlers.7 = monoeg_g_hash_table_new (monoeg_g_str_hash, monoeg_g_str_equal);
  config_handlers = config_handlers.7;
  config_handlers.8 = config_handlers;
  D.17275 = "dllmap";
  monoeg_g_hash_table_insert_replace (config_handlers.8, D.17275, &dllmap_handler, 0);
  config_handlers.8 = config_handlers;
  D.17276 = "legacyUnhandledExceptionPolicy";
  monoeg_g_hash_table_insert_replace (config_handlers.8, D.17276, &legacyUEP_handler, 0);
}


legacyUEP_start (void * user_data, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values)
{
  int D.16929;
  int iftmp.9;
  int D.16928;
  const char[31] * D.17280;
  unsigned char D.17281;
  int D.17282;
  unsigned char D.17283;
  int D.17284;
  const unsigned char * D.17289;
  unsigned char D.17290;
  int D.17291;
  const unsigned char * D.17292;
  unsigned char D.17293;
  int D.17294;
  const unsigned char * D.17299;
  unsigned char D.17300;
  int D.17301;
  const unsigned char * D.17302;
  unsigned char D.17303;
  int D.17304;
  const unsigned char * D.17309;
  unsigned char D.17310;
  int D.17311;
  const unsigned char * D.17312;
  unsigned char D.17313;
  int D.17314;
  const gchar * D.17318;
  int D.16938;
  int iftmp.10;
  int D.16937;
  const char[8] * D.17324;
  unsigned char D.17325;
  int D.17326;
  unsigned char D.17327;
  int D.17328;
  const unsigned char * D.17333;
  unsigned char D.17334;
  int D.17335;
  const unsigned char * D.17336;
  unsigned char D.17337;
  int D.17338;
  const unsigned char * D.17343;
  unsigned char D.17344;
  int D.17345;
  const unsigned char * D.17346;
  unsigned char D.17347;
  int D.17348;
  const unsigned char * D.17353;
  unsigned char D.17354;
  int D.17355;
  const unsigned char * D.17356;
  unsigned char D.17357;
  int D.17358;
  int D.16947;
  int iftmp.11;
  int D.16946;
  const char[2] * D.17367;
  unsigned char D.17368;
  int D.17369;
  unsigned char D.17370;
  int D.17371;
  const unsigned char * D.17376;
  unsigned char D.17377;
  int D.17378;
  const unsigned char * D.17379;
  unsigned char D.17380;
  int D.17381;
  const unsigned char * D.17386;
  unsigned char D.17387;
  int D.17388;
  const unsigned char * D.17389;
  unsigned char D.17390;
  int D.17391;
  const unsigned char * D.17396;
  unsigned char D.17397;
  int D.17398;
  const unsigned char * D.17399;
  unsigned char D.17400;
  int D.17401;
  const gchar * D.17403;
  int D.17405;

  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.17280 = "legacyUnhandledExceptionPolicy";
      D.17281 = MEM[(const unsigned char *)D.17280];
      D.17282 = (int) D.17281;
      D.17283 = *__s2;
      D.17284 = (int) D.17283;
      __result = D.17282 - D.17284;
      {
        if (__s2_len != 0) goto <D.17285>; else goto <D.17286>;
        <D.17285>:
        if (__result == 0) goto <D.17287>; else goto <D.17288>;
        <D.17287>:
        D.17289 = &MEM[(void *)"legacyUnhandledExceptionPolicy" + 1B];
        D.17290 = *D.17289;
        D.17291 = (int) D.17290;
        D.17292 = __s2 + 1;
        D.17293 = *D.17292;
        D.17294 = (int) D.17293;
        __result = D.17291 - D.17294;
        if (__s2_len > 1) goto <D.17295>; else goto <D.17296>;
        <D.17295>:
        if (__result == 0) goto <D.17297>; else goto <D.17298>;
        <D.17297>:
        D.17299 = &MEM[(void *)"legacyUnhandledExceptionPolicy" + 2B];
        D.17300 = *D.17299;
        D.17301 = (int) D.17300;
        D.17302 = __s2 + 2;
        D.17303 = *D.17302;
        D.17304 = (int) D.17303;
        __result = D.17301 - D.17304;
        if (__s2_len > 2) goto <D.17305>; else goto <D.17306>;
        <D.17305>:
        if (__result == 0) goto <D.17307>; else goto <D.17308>;
        <D.17307>:
        D.17309 = &MEM[(void *)"legacyUnhandledExceptionPolicy" + 3B];
        D.17310 = *D.17309;
        D.17311 = (int) D.17310;
        D.17312 = __s2 + 3;
        D.17313 = *D.17312;
        D.17314 = (int) D.17313;
        __result = D.17311 - D.17314;
        <D.17308>:
        <D.17306>:
        <D.17298>:
        <D.17296>:
        <D.17288>:
        <D.17286>:
      }
      D.16928 = __result;
    }
    iftmp.9 = -D.16928;
    goto <D.17315>;
    <D.17279>:
    iftmp.9 = __builtin_strcmp (element_name, "legacyUnhandledExceptionPolicy");
    <D.17315>:
    D.16929 = iftmp.9;
  }
  if (D.16929 == 0) goto <D.17316>; else goto <D.17317>;
  <D.17316>:
  D.17318 = *attribute_names;
  if (D.17318 != 0B) goto <D.17319>; else goto <D.17320>;
  <D.17319>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = *attribute_names;
      D.17324 = "enabled";
      D.17325 = MEM[(const unsigned char *)D.17324];
      D.17326 = (int) D.17325;
      D.17327 = *__s2;
      D.17328 = (int) D.17327;
      __result = D.17326 - D.17328;
      {
        if (__s2_len != 0) goto <D.17329>; else goto <D.17330>;
        <D.17329>:
        if (__result == 0) goto <D.17331>; else goto <D.17332>;
        <D.17331>:
        D.17333 = &MEM[(void *)"enabled" + 1B];
        D.17334 = *D.17333;
        D.17335 = (int) D.17334;
        D.17336 = __s2 + 1;
        D.17337 = *D.17336;
        D.17338 = (int) D.17337;
        __result = D.17335 - D.17338;
        if (__s2_len > 1) goto <D.17339>; else goto <D.17340>;
        <D.17339>:
        if (__result == 0) goto <D.17341>; else goto <D.17342>;
        <D.17341>:
        D.17343 = &MEM[(void *)"enabled" + 2B];
        D.17344 = *D.17343;
        D.17345 = (int) D.17344;
        D.17346 = __s2 + 2;
        D.17347 = *D.17346;
        D.17348 = (int) D.17347;
        __result = D.17345 - D.17348;
        if (__s2_len > 2) goto <D.17349>; else goto <D.17350>;
        <D.17349>:
        if (__result == 0) goto <D.17351>; else goto <D.17352>;
        <D.17351>:
        D.17353 = &MEM[(void *)"enabled" + 3B];
        D.17354 = *D.17353;
        D.17355 = (int) D.17354;
        D.17356 = __s2 + 3;
        D.17357 = *D.17356;
        D.17358 = (int) D.17357;
        __result = D.17355 - D.17358;
        <D.17352>:
        <D.17350>:
        <D.17342>:
        <D.17340>:
        <D.17332>:
        <D.17330>:
      }
      D.16937 = __result;
    }
    iftmp.10 = -D.16937;
    goto <D.17359>;
    <D.17323>:
    D.17318 = *attribute_names;
    iftmp.10 = __builtin_strcmp (D.17318, "enabled");
    <D.17359>:
    D.16938 = iftmp.10;
  }
  if (D.16938 == 0) goto <D.17360>; else goto <D.17361>;
  <D.17360>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = *attribute_values;
      D.17367 = "1";
      D.17368 = MEM[(const unsigned char *)D.17367];
      D.17369 = (int) D.17368;
      D.17370 = *__s2;
      D.17371 = (int) D.17370;
      __result = D.17369 - D.17371;
      {
        if (__s2_len != 0) goto <D.17372>; else goto <D.17373>;
        <D.17372>:
        if (__result == 0) goto <D.17374>; else goto <D.17375>;
        <D.17374>:
        D.17376 = &MEM[(void *)"1" + 1B];
        D.17377 = *D.17376;
        D.17378 = (int) D.17377;
        D.17379 = __s2 + 1;
        D.17380 = *D.17379;
        D.17381 = (int) D.17380;
        __result = D.17378 - D.17381;
        if (__s2_len > 1) goto <D.17382>; else goto <D.17383>;
        <D.17382>:
        if (__result == 0) goto <D.17384>; else goto <D.17385>;
        <D.17384>:
        D.17386 = &MEM[(void *)"1" + 2B];
        D.17387 = *D.17386;
        D.17388 = (int) D.17387;
        D.17389 = __s2 + 2;
        D.17390 = *D.17389;
        D.17391 = (int) D.17390;
        __result = D.17388 - D.17391;
        if (__s2_len > 2) goto <D.17392>; else goto <D.17393>;
        <D.17392>:
        if (__result == 0) goto <D.17394>; else goto <D.17395>;
        <D.17394>:
        D.17396 = &MEM[(void *)"1" + 3B];
        D.17397 = *D.17396;
        D.17398 = (int) D.17397;
        D.17399 = __s2 + 3;
        D.17400 = *D.17399;
        D.17401 = (int) D.17400;
        __result = D.17398 - D.17401;
        <D.17395>:
        <D.17393>:
        <D.17385>:
        <D.17383>:
        <D.17375>:
        <D.17373>:
      }
      D.16946 = __result;
    }
    iftmp.11 = -D.16946;
    goto <D.17402>;
    <D.17366>:
    D.17403 = *attribute_values;
    iftmp.11 = __builtin_strcmp (D.17403, "1");
    <D.17402>:
    D.16947 = iftmp.11;
  }
  if (D.16947 == 0) goto <D.17362>; else goto <D.17404>;
  <D.17404>:
  D.17403 = *attribute_values;
  D.17405 = monoeg_ascii_strcasecmp (D.17403, "true");
  if (D.17405 == 0) goto <D.17362>; else goto <D.17363>;
  <D.17362>:
  mono_runtime_unhandled_exception_policy_set (0);
  <D.17363>:
  <D.17361>:
  <D.17320>:
  <D.17317>:
}


dllmap_finish (void * user_data)
{
  char * D.17406;
  char * D.17407;
  struct DllInfo * info;

  info = user_data;
  D.17406 = info->dll;
  monoeg_g_free (D.17406);
  D.17407 = info->target;
  monoeg_g_free (D.17407);
  monoeg_g_free (info);
}


dllmap_start (void * user_data, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values)
{
  int D.16791;
  int iftmp.12;
  int D.16790;
  const char[7] * D.17411;
  unsigned char D.17412;
  int D.17413;
  unsigned char D.17414;
  int D.17415;
  const unsigned char * D.17420;
  unsigned char D.17421;
  int D.17422;
  const unsigned char * D.17423;
  unsigned char D.17424;
  int D.17425;
  const unsigned char * D.17430;
  unsigned char D.17431;
  int D.17432;
  const unsigned char * D.17433;
  unsigned char D.17434;
  int D.17435;
  const unsigned char * D.17440;
  unsigned char D.17441;
  int D.17442;
  const unsigned char * D.17443;
  unsigned char D.17444;
  int D.17445;
  char * D.17449;
  char * D.17450;
  int D.16800;
  int iftmp.13;
  int D.16799;
  long unsigned int D.17454;
  long unsigned int D.17455;
  const gchar * * D.17456;
  const char[4] * D.17457;
  unsigned char D.17458;
  int D.17459;
  unsigned char D.17460;
  int D.17461;
  const unsigned char * D.17466;
  unsigned char D.17467;
  int D.17468;
  const unsigned char * D.17469;
  unsigned char D.17470;
  int D.17471;
  const unsigned char * D.17476;
  unsigned char D.17477;
  int D.17478;
  const unsigned char * D.17479;
  unsigned char D.17480;
  int D.17481;
  const unsigned char * D.17486;
  unsigned char D.17487;
  int D.17488;
  const unsigned char * D.17489;
  unsigned char D.17490;
  int D.17491;
  const gchar * D.17493;
  const gchar * * D.17496;
  const gchar * D.17497;
  gchar * D.17498;
  int D.16809;
  int iftmp.14;
  int D.16808;
  const char[7] * D.17503;
  unsigned char D.17504;
  int D.17505;
  unsigned char D.17506;
  int D.17507;
  const unsigned char * D.17512;
  unsigned char D.17513;
  int D.17514;
  const unsigned char * D.17515;
  unsigned char D.17516;
  int D.17517;
  const unsigned char * D.17522;
  unsigned char D.17523;
  int D.17524;
  const unsigned char * D.17525;
  unsigned char D.17526;
  int D.17527;
  const unsigned char * D.17532;
  unsigned char D.17533;
  int D.17534;
  const unsigned char * D.17535;
  unsigned char D.17536;
  int D.17537;
  gchar * D.17541;
  int D.16818;
  int iftmp.15;
  int D.16817;
  const char[3] * D.17548;
  unsigned char D.17549;
  int D.17550;
  unsigned char D.17551;
  int D.17552;
  const unsigned char * D.17557;
  unsigned char D.17558;
  int D.17559;
  const unsigned char * D.17560;
  unsigned char D.17561;
  int D.17562;
  const unsigned char * D.17567;
  unsigned char D.17568;
  int D.17569;
  const unsigned char * D.17570;
  unsigned char D.17571;
  int D.17572;
  const unsigned char * D.17577;
  unsigned char D.17578;
  int D.17579;
  const unsigned char * D.17580;
  unsigned char D.17581;
  int D.17582;
  int D.17585;
  int D.16827;
  int iftmp.16;
  int D.16826;
  const char[4] * D.17592;
  unsigned char D.17593;
  int D.17594;
  unsigned char D.17595;
  int D.17596;
  const unsigned char * D.17601;
  unsigned char D.17602;
  int D.17603;
  const unsigned char * D.17604;
  unsigned char D.17605;
  int D.17606;
  const unsigned char * D.17611;
  unsigned char D.17612;
  int D.17613;
  const unsigned char * D.17614;
  unsigned char D.17615;
  int D.17616;
  const unsigned char * D.17621;
  unsigned char D.17622;
  int D.17623;
  const unsigned char * D.17624;
  unsigned char D.17625;
  int D.17626;
  int D.17629;
  int D.16836;
  int iftmp.17;
  int D.16835;
  const char[9] * D.17634;
  unsigned char D.17635;
  int D.17636;
  unsigned char D.17637;
  int D.17638;
  const unsigned char * D.17643;
  unsigned char D.17644;
  int D.17645;
  const unsigned char * D.17646;
  unsigned char D.17647;
  int D.17648;
  const unsigned char * D.17653;
  unsigned char D.17654;
  int D.17655;
  const unsigned char * D.17656;
  unsigned char D.17657;
  int D.17658;
  const unsigned char * D.17663;
  unsigned char D.17664;
  int D.17665;
  const unsigned char * D.17666;
  unsigned char D.17667;
  int D.17668;
  int D.17672;
  int D.17675;
  struct MonoImage * D.17678;
  int D.16848;
  int iftmp.18;
  int D.16847;
  const char[9] * D.17683;
  unsigned char D.17684;
  int D.17685;
  unsigned char D.17686;
  int D.17687;
  const unsigned char * D.17692;
  unsigned char D.17693;
  int D.17694;
  const unsigned char * D.17695;
  unsigned char D.17696;
  int D.17697;
  const unsigned char * D.17702;
  unsigned char D.17703;
  int D.17704;
  const unsigned char * D.17705;
  unsigned char D.17706;
  int D.17707;
  const unsigned char * D.17712;
  unsigned char D.17713;
  int D.17714;
  const unsigned char * D.17715;
  unsigned char D.17716;
  int D.17717;
  int D.16861;
  int iftmp.19;
  int D.16860;
  unsigned char D.17724;
  int D.17725;
  const unsigned char * D.17730;
  unsigned char D.17731;
  int D.17732;
  const unsigned char * D.17737;
  unsigned char D.17738;
  int D.17739;
  const unsigned char * D.17744;
  unsigned char D.17745;
  int D.17746;
  int D.16870;
  int iftmp.20;
  int D.16869;
  unsigned char D.17754;
  int D.17755;
  const unsigned char * D.17760;
  unsigned char D.17761;
  int D.17762;
  const unsigned char * D.17767;
  unsigned char D.17768;
  int D.17769;
  const unsigned char * D.17774;
  unsigned char D.17775;
  int D.17776;
  int D.16879;
  int iftmp.21;
  int D.16878;
  const char[5] * D.17784;
  unsigned char D.17785;
  int D.17786;
  unsigned char D.17787;
  int D.17788;
  const unsigned char * D.17793;
  unsigned char D.17794;
  int D.17795;
  const unsigned char * D.17796;
  unsigned char D.17797;
  int D.17798;
  const unsigned char * D.17803;
  unsigned char D.17804;
  int D.17805;
  const unsigned char * D.17806;
  unsigned char D.17807;
  int D.17808;
  const unsigned char * D.17813;
  unsigned char D.17814;
  int D.17815;
  const unsigned char * D.17816;
  unsigned char D.17817;
  int D.17818;
  int D.16888;
  int iftmp.22;
  int D.16887;
  unsigned char D.17828;
  int D.17829;
  const unsigned char * D.17834;
  unsigned char D.17835;
  int D.17836;
  const unsigned char * D.17841;
  unsigned char D.17842;
  int D.17843;
  const unsigned char * D.17848;
  unsigned char D.17849;
  int D.17850;
  int D.17853;
  int D.16897;
  int iftmp.23;
  int D.16896;
  unsigned char D.17860;
  int D.17861;
  const unsigned char * D.17866;
  unsigned char D.17867;
  int D.17868;
  const unsigned char * D.17873;
  unsigned char D.17874;
  int D.17875;
  const unsigned char * D.17880;
  unsigned char D.17881;
  int D.17882;
  int D.17885;
  int D.16906;
  int iftmp.24;
  int D.16905;
  unsigned char D.17890;
  int D.17891;
  const unsigned char * D.17896;
  unsigned char D.17897;
  int D.17898;
  const unsigned char * D.17903;
  unsigned char D.17904;
  int D.17905;
  const unsigned char * D.17910;
  unsigned char D.17911;
  int D.17912;
  int D.17916;
  int D.17921;
  int i;
  struct DllInfo * info;

  info = user_data;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.17411 = "dllmap";
      D.17412 = MEM[(const unsigned char *)D.17411];
      D.17413 = (int) D.17412;
      D.17414 = *__s2;
      D.17415 = (int) D.17414;
      __result = D.17413 - D.17415;
      {
        if (__s2_len != 0) goto <D.17416>; else goto <D.17417>;
        <D.17416>:
        if (__result == 0) goto <D.17418>; else goto <D.17419>;
        <D.17418>:
        D.17420 = &MEM[(void *)"dllmap" + 1B];
        D.17421 = *D.17420;
        D.17422 = (int) D.17421;
        D.17423 = __s2 + 1;
        D.17424 = *D.17423;
        D.17425 = (int) D.17424;
        __result = D.17422 - D.17425;
        if (__s2_len > 1) goto <D.17426>; else goto <D.17427>;
        <D.17426>:
        if (__result == 0) goto <D.17428>; else goto <D.17429>;
        <D.17428>:
        D.17430 = &MEM[(void *)"dllmap" + 2B];
        D.17431 = *D.17430;
        D.17432 = (int) D.17431;
        D.17433 = __s2 + 2;
        D.17434 = *D.17433;
        D.17435 = (int) D.17434;
        __result = D.17432 - D.17435;
        if (__s2_len > 2) goto <D.17436>; else goto <D.17437>;
        <D.17436>:
        if (__result == 0) goto <D.17438>; else goto <D.17439>;
        <D.17438>:
        D.17440 = &MEM[(void *)"dllmap" + 3B];
        D.17441 = *D.17440;
        D.17442 = (int) D.17441;
        D.17443 = __s2 + 3;
        D.17444 = *D.17443;
        D.17445 = (int) D.17444;
        __result = D.17442 - D.17445;
        <D.17439>:
        <D.17437>:
        <D.17429>:
        <D.17427>:
        <D.17419>:
        <D.17417>:
      }
      D.16790 = __result;
    }
    iftmp.12 = -D.16790;
    goto <D.17446>;
    <D.17410>:
    iftmp.12 = __builtin_strcmp (element_name, "dllmap");
    <D.17446>:
    D.16791 = iftmp.12;
  }
  if (D.16791 == 0) goto <D.17447>; else goto <D.17448>;
  <D.17447>:
  D.17449 = info->dll;
  monoeg_g_free (D.17449);
  D.17450 = info->target;
  monoeg_g_free (D.17450);
  info->target = 0B;
  D.17450 = info->target;
  info->dll = D.17450;
  info->ignore = 0;
  i = 0;
  goto <D.16838>;
  <D.16837>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.17454 = (long unsigned int) i;
      D.17455 = D.17454 * 8;
      D.17456 = attribute_names + D.17455;
      __s2 = *D.17456;
      D.17457 = "dll";
      D.17458 = MEM[(const unsigned char *)D.17457];
      D.17459 = (int) D.17458;
      D.17460 = *__s2;
      D.17461 = (int) D.17460;
      __result = D.17459 - D.17461;
      {
        if (__s2_len != 0) goto <D.17462>; else goto <D.17463>;
        <D.17462>:
        if (__result == 0) goto <D.17464>; else goto <D.17465>;
        <D.17464>:
        D.17466 = &MEM[(void *)"dll" + 1B];
        D.17467 = *D.17466;
        D.17468 = (int) D.17467;
        D.17469 = __s2 + 1;
        D.17470 = *D.17469;
        D.17471 = (int) D.17470;
        __result = D.17468 - D.17471;
        if (__s2_len > 1) goto <D.17472>; else goto <D.17473>;
        <D.17472>:
        if (__result == 0) goto <D.17474>; else goto <D.17475>;
        <D.17474>:
        D.17476 = &MEM[(void *)"dll" + 2B];
        D.17477 = *D.17476;
        D.17478 = (int) D.17477;
        D.17479 = __s2 + 2;
        D.17480 = *D.17479;
        D.17481 = (int) D.17480;
        __result = D.17478 - D.17481;
        if (__s2_len > 2) goto <D.17482>; else goto <D.17483>;
        <D.17482>:
        if (__result == 0) goto <D.17484>; else goto <D.17485>;
        <D.17484>:
        D.17486 = &MEM[(void *)"dll" + 3B];
        D.17487 = *D.17486;
        D.17488 = (int) D.17487;
        D.17489 = __s2 + 3;
        D.17490 = *D.17489;
        D.17491 = (int) D.17490;
        __result = D.17488 - D.17491;
        <D.17485>:
        <D.17483>:
        <D.17475>:
        <D.17473>:
        <D.17465>:
        <D.17463>:
      }
      D.16799 = __result;
    }
    iftmp.13 = -D.16799;
    goto <D.17492>;
    <D.17453>:
    D.17454 = (long unsigned int) i;
    D.17455 = D.17454 * 8;
    D.17456 = attribute_names + D.17455;
    D.17493 = *D.17456;
    iftmp.13 = __builtin_strcmp (D.17493, "dll");
    <D.17492>:
    D.16800 = iftmp.13;
  }
  if (D.16800 == 0) goto <D.17494>; else goto <D.17495>;
  <D.17494>:
  D.17454 = (long unsigned int) i;
  D.17455 = D.17454 * 8;
  D.17496 = attribute_values + D.17455;
  D.17497 = *D.17496;
  D.17498 = monoeg_strdup (D.17497);
  info->dll = D.17498;
  goto <D.17499>;
  <D.17495>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.17454 = (long unsigned int) i;
      D.17455 = D.17454 * 8;
      D.17456 = attribute_names + D.17455;
      __s2 = *D.17456;
      D.17503 = "target";
      D.17504 = MEM[(const unsigned char *)D.17503];
      D.17505 = (int) D.17504;
      D.17506 = *__s2;
      D.17507 = (int) D.17506;
      __result = D.17505 - D.17507;
      {
        if (__s2_len != 0) goto <D.17508>; else goto <D.17509>;
        <D.17508>:
        if (__result == 0) goto <D.17510>; else goto <D.17511>;
        <D.17510>:
        D.17512 = &MEM[(void *)"target" + 1B];
        D.17513 = *D.17512;
        D.17514 = (int) D.17513;
        D.17515 = __s2 + 1;
        D.17516 = *D.17515;
        D.17517 = (int) D.17516;
        __result = D.17514 - D.17517;
        if (__s2_len > 1) goto <D.17518>; else goto <D.17519>;
        <D.17518>:
        if (__result == 0) goto <D.17520>; else goto <D.17521>;
        <D.17520>:
        D.17522 = &MEM[(void *)"target" + 2B];
        D.17523 = *D.17522;
        D.17524 = (int) D.17523;
        D.17525 = __s2 + 2;
        D.17526 = *D.17525;
        D.17527 = (int) D.17526;
        __result = D.17524 - D.17527;
        if (__s2_len > 2) goto <D.17528>; else goto <D.17529>;
        <D.17528>:
        if (__result == 0) goto <D.17530>; else goto <D.17531>;
        <D.17530>:
        D.17532 = &MEM[(void *)"target" + 3B];
        D.17533 = *D.17532;
        D.17534 = (int) D.17533;
        D.17535 = __s2 + 3;
        D.17536 = *D.17535;
        D.17537 = (int) D.17536;
        __result = D.17534 - D.17537;
        <D.17531>:
        <D.17529>:
        <D.17521>:
        <D.17519>:
        <D.17511>:
        <D.17509>:
      }
      D.16808 = __result;
    }
    iftmp.14 = -D.16808;
    goto <D.17538>;
    <D.17502>:
    D.17454 = (long unsigned int) i;
    D.17455 = D.17454 * 8;
    D.17456 = attribute_names + D.17455;
    D.17493 = *D.17456;
    iftmp.14 = __builtin_strcmp (D.17493, "target");
    <D.17538>:
    D.16809 = iftmp.14;
  }
  if (D.16809 == 0) goto <D.17539>; else goto <D.17540>;
  <D.17539>:
  D.17454 = (long unsigned int) i;
  D.17455 = D.17454 * 8;
  D.17496 = attribute_values + D.17455;
  D.17497 = *D.17496;
  D.17541 = monoeg_strdup (D.17497);
  info->target = D.17541;
  goto <D.17542>;
  <D.17540>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.17454 = (long unsigned int) i;
      D.17455 = D.17454 * 8;
      D.17456 = attribute_names + D.17455;
      __s2 = *D.17456;
      D.17548 = "os";
      D.17549 = MEM[(const unsigned char *)D.17548];
      D.17550 = (int) D.17549;
      D.17551 = *__s2;
      D.17552 = (int) D.17551;
      __result = D.17550 - D.17552;
      {
        if (__s2_len != 0) goto <D.17553>; else goto <D.17554>;
        <D.17553>:
        if (__result == 0) goto <D.17555>; else goto <D.17556>;
        <D.17555>:
        D.17557 = &MEM[(void *)"os" + 1B];
        D.17558 = *D.17557;
        D.17559 = (int) D.17558;
        D.17560 = __s2 + 1;
        D.17561 = *D.17560;
        D.17562 = (int) D.17561;
        __result = D.17559 - D.17562;
        if (__s2_len > 1) goto <D.17563>; else goto <D.17564>;
        <D.17563>:
        if (__result == 0) goto <D.17565>; else goto <D.17566>;
        <D.17565>:
        D.17567 = &MEM[(void *)"os" + 2B];
        D.17568 = *D.17567;
        D.17569 = (int) D.17568;
        D.17570 = __s2 + 2;
        D.17571 = *D.17570;
        D.17572 = (int) D.17571;
        __result = D.17569 - D.17572;
        if (__s2_len > 2) goto <D.17573>; else goto <D.17574>;
        <D.17573>:
        if (__result == 0) goto <D.17575>; else goto <D.17576>;
        <D.17575>:
        D.17577 = &MEM[(void *)"os" + 3B];
        D.17578 = *D.17577;
        D.17579 = (int) D.17578;
        D.17580 = __s2 + 3;
        D.17581 = *D.17580;
        D.17582 = (int) D.17581;
        __result = D.17579 - D.17582;
        <D.17576>:
        <D.17574>:
        <D.17566>:
        <D.17564>:
        <D.17556>:
        <D.17554>:
      }
      D.16817 = __result;
    }
    iftmp.15 = -D.16817;
    goto <D.17583>;
    <D.17547>:
    D.17454 = (long unsigned int) i;
    D.17455 = D.17454 * 8;
    D.17456 = attribute_names + D.17455;
    D.17493 = *D.17456;
    iftmp.15 = __builtin_strcmp (D.17493, "os");
    <D.17583>:
    D.16818 = iftmp.15;
  }
  if (D.16818 == 0) goto <D.17584>; else goto <D.17543>;
  <D.17584>:
  D.17454 = (long unsigned int) i;
  D.17455 = D.17454 * 8;
  D.17496 = attribute_values + D.17455;
  D.17497 = *D.17496;
  D.17585 = arch_matches ("linux", D.17497);
  if (D.17585 == 0) goto <D.17586>; else goto <D.17543>;
  <D.17586>:
  info->ignore = 1;
  goto <D.17544>;
  <D.17543>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.17454 = (long unsigned int) i;
      D.17455 = D.17454 * 8;
      D.17456 = attribute_names + D.17455;
      __s2 = *D.17456;
      D.17592 = "cpu";
      D.17593 = MEM[(const unsigned char *)D.17592];
      D.17594 = (int) D.17593;
      D.17595 = *__s2;
      D.17596 = (int) D.17595;
      __result = D.17594 - D.17596;
      {
        if (__s2_len != 0) goto <D.17597>; else goto <D.17598>;
        <D.17597>:
        if (__result == 0) goto <D.17599>; else goto <D.17600>;
        <D.17599>:
        D.17601 = &MEM[(void *)"cpu" + 1B];
        D.17602 = *D.17601;
        D.17603 = (int) D.17602;
        D.17604 = __s2 + 1;
        D.17605 = *D.17604;
        D.17606 = (int) D.17605;
        __result = D.17603 - D.17606;
        if (__s2_len > 1) goto <D.17607>; else goto <D.17608>;
        <D.17607>:
        if (__result == 0) goto <D.17609>; else goto <D.17610>;
        <D.17609>:
        D.17611 = &MEM[(void *)"cpu" + 2B];
        D.17612 = *D.17611;
        D.17613 = (int) D.17612;
        D.17614 = __s2 + 2;
        D.17615 = *D.17614;
        D.17616 = (int) D.17615;
        __result = D.17613 - D.17616;
        if (__s2_len > 2) goto <D.17617>; else goto <D.17618>;
        <D.17617>:
        if (__result == 0) goto <D.17619>; else goto <D.17620>;
        <D.17619>:
        D.17621 = &MEM[(void *)"cpu" + 3B];
        D.17622 = *D.17621;
        D.17623 = (int) D.17622;
        D.17624 = __s2 + 3;
        D.17625 = *D.17624;
        D.17626 = (int) D.17625;
        __result = D.17623 - D.17626;
        <D.17620>:
        <D.17618>:
        <D.17610>:
        <D.17608>:
        <D.17600>:
        <D.17598>:
      }
      D.16826 = __result;
    }
    iftmp.16 = -D.16826;
    goto <D.17627>;
    <D.17591>:
    D.17454 = (long unsigned int) i;
    D.17455 = D.17454 * 8;
    D.17456 = attribute_names + D.17455;
    D.17493 = *D.17456;
    iftmp.16 = __builtin_strcmp (D.17493, "cpu");
    <D.17627>:
    D.16827 = iftmp.16;
  }
  if (D.16827 == 0) goto <D.17628>; else goto <D.17587>;
  <D.17628>:
  D.17454 = (long unsigned int) i;
  D.17455 = D.17454 * 8;
  D.17496 = attribute_values + D.17455;
  D.17497 = *D.17496;
  D.17629 = arch_matches ("ppc64", D.17497);
  if (D.17629 == 0) goto <D.17630>; else goto <D.17587>;
  <D.17630>:
  info->ignore = 1;
  goto <D.17588>;
  <D.17587>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      D.17454 = (long unsigned int) i;
      D.17455 = D.17454 * 8;
      D.17456 = attribute_names + D.17455;
      __s2 = *D.17456;
      D.17634 = "wordsize";
      D.17635 = MEM[(const unsigned char *)D.17634];
      D.17636 = (int) D.17635;
      D.17637 = *__s2;
      D.17638 = (int) D.17637;
      __result = D.17636 - D.17638;
      {
        if (__s2_len != 0) goto <D.17639>; else goto <D.17640>;
        <D.17639>:
        if (__result == 0) goto <D.17641>; else goto <D.17642>;
        <D.17641>:
        D.17643 = &MEM[(void *)"wordsize" + 1B];
        D.17644 = *D.17643;
        D.17645 = (int) D.17644;
        D.17646 = __s2 + 1;
        D.17647 = *D.17646;
        D.17648 = (int) D.17647;
        __result = D.17645 - D.17648;
        if (__s2_len > 1) goto <D.17649>; else goto <D.17650>;
        <D.17649>:
        if (__result == 0) goto <D.17651>; else goto <D.17652>;
        <D.17651>:
        D.17653 = &MEM[(void *)"wordsize" + 2B];
        D.17654 = *D.17653;
        D.17655 = (int) D.17654;
        D.17656 = __s2 + 2;
        D.17657 = *D.17656;
        D.17658 = (int) D.17657;
        __result = D.17655 - D.17658;
        if (__s2_len > 2) goto <D.17659>; else goto <D.17660>;
        <D.17659>:
        if (__result == 0) goto <D.17661>; else goto <D.17662>;
        <D.17661>:
        D.17663 = &MEM[(void *)"wordsize" + 3B];
        D.17664 = *D.17663;
        D.17665 = (int) D.17664;
        D.17666 = __s2 + 3;
        D.17667 = *D.17666;
        D.17668 = (int) D.17667;
        __result = D.17665 - D.17668;
        <D.17662>:
        <D.17660>:
        <D.17652>:
        <D.17650>:
        <D.17642>:
        <D.17640>:
      }
      D.16835 = __result;
    }
    iftmp.17 = -D.16835;
    goto <D.17669>;
    <D.17633>:
    D.17454 = (long unsigned int) i;
    D.17455 = D.17454 * 8;
    D.17456 = attribute_names + D.17455;
    D.17493 = *D.17456;
    iftmp.17 = __builtin_strcmp (D.17493, "wordsize");
    <D.17669>:
    D.16836 = iftmp.17;
  }
  if (D.16836 == 0) goto <D.17670>; else goto <D.17671>;
  <D.17670>:
  D.17454 = (long unsigned int) i;
  D.17455 = D.17454 * 8;
  D.17496 = attribute_values + D.17455;
  D.17497 = *D.17496;
  D.17672 = arch_matches ("64", D.17497);
  if (D.17672 == 0) goto <D.17673>; else goto <D.17674>;
  <D.17673>:
  info->ignore = 1;
  <D.17674>:
  <D.17671>:
  <D.17588>:
  <D.17544>:
  <D.17542>:
  <D.17499>:
  i = i + 1;
  <D.16838>:
  D.17454 = (long unsigned int) i;
  D.17455 = D.17454 * 8;
  D.17456 = attribute_names + D.17455;
  D.17493 = *D.17456;
  if (D.17493 != 0B) goto <D.16837>; else goto <D.16839>;
  <D.16839>:
  D.17675 = info->ignore;
  if (D.17675 == 0) goto <D.17676>; else goto <D.17677>;
  <D.17676>:
  D.17678 = info->assembly;
  D.17449 = info->dll;
  D.17450 = info->target;
  mono_dllmap_insert (D.17678, D.17449, 0B, D.17450, 0B);
  <D.17677>:
  goto <D.17679>;
  <D.17448>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.17683 = "dllentry";
      D.17684 = MEM[(const unsigned char *)D.17683];
      D.17685 = (int) D.17684;
      D.17686 = *__s2;
      D.17687 = (int) D.17686;
      __result = D.17685 - D.17687;
      {
        if (__s2_len != 0) goto <D.17688>; else goto <D.17689>;
        <D.17688>:
        if (__result == 0) goto <D.17690>; else goto <D.17691>;
        <D.17690>:
        D.17692 = &MEM[(void *)"dllentry" + 1B];
        D.17693 = *D.17692;
        D.17694 = (int) D.17693;
        D.17695 = __s2 + 1;
        D.17696 = *D.17695;
        D.17697 = (int) D.17696;
        __result = D.17694 - D.17697;
        if (__s2_len > 1) goto <D.17698>; else goto <D.17699>;
        <D.17698>:
        if (__result == 0) goto <D.17700>; else goto <D.17701>;
        <D.17700>:
        D.17702 = &MEM[(void *)"dllentry" + 2B];
        D.17703 = *D.17702;
        D.17704 = (int) D.17703;
        D.17705 = __s2 + 2;
        D.17706 = *D.17705;
        D.17707 = (int) D.17706;
        __result = D.17704 - D.17707;
        if (__s2_len > 2) goto <D.17708>; else goto <D.17709>;
        <D.17708>:
        if (__result == 0) goto <D.17710>; else goto <D.17711>;
        <D.17710>:
        D.17712 = &MEM[(void *)"dllentry" + 3B];
        D.17713 = *D.17712;
        D.17714 = (int) D.17713;
        D.17715 = __s2 + 3;
        D.17716 = *D.17715;
        D.17717 = (int) D.17716;
        __result = D.17714 - D.17717;
        <D.17711>:
        <D.17709>:
        <D.17701>:
        <D.17699>:
        <D.17691>:
        <D.17689>:
      }
      D.16847 = __result;
    }
    iftmp.18 = -D.16847;
    goto <D.17718>;
    <D.17682>:
    iftmp.18 = __builtin_strcmp (element_name, "dllentry");
    <D.17718>:
    D.16848 = iftmp.18;
  }
  if (D.16848 == 0) goto <D.17719>; else goto <D.17720>;
  <D.17719>:
  {
    const char * name;
    const char * target;
    const char * dll;
    int ignore;

    name = 0B;
    target = 0B;
    dll = 0B;
    ignore = 0;
    i = 0;
    goto <D.16908>;
    <D.16907>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        D.17454 = (long unsigned int) i;
        D.17455 = D.17454 * 8;
        D.17456 = attribute_names + D.17455;
        __s2 = *D.17456;
        D.17457 = "dll";
        D.17458 = MEM[(const unsigned char *)D.17457];
        D.17459 = (int) D.17458;
        D.17724 = *__s2;
        D.17725 = (int) D.17724;
        __result = D.17459 - D.17725;
        {
          if (__s2_len != 0) goto <D.17726>; else goto <D.17727>;
          <D.17726>:
          if (__result == 0) goto <D.17728>; else goto <D.17729>;
          <D.17728>:
          D.17466 = &MEM[(void *)"dll" + 1B];
          D.17467 = *D.17466;
          D.17468 = (int) D.17467;
          D.17730 = __s2 + 1;
          D.17731 = *D.17730;
          D.17732 = (int) D.17731;
          __result = D.17468 - D.17732;
          if (__s2_len > 1) goto <D.17733>; else goto <D.17734>;
          <D.17733>:
          if (__result == 0) goto <D.17735>; else goto <D.17736>;
          <D.17735>:
          D.17476 = &MEM[(void *)"dll" + 2B];
          D.17477 = *D.17476;
          D.17478 = (int) D.17477;
          D.17737 = __s2 + 2;
          D.17738 = *D.17737;
          D.17739 = (int) D.17738;
          __result = D.17478 - D.17739;
          if (__s2_len > 2) goto <D.17740>; else goto <D.17741>;
          <D.17740>:
          if (__result == 0) goto <D.17742>; else goto <D.17743>;
          <D.17742>:
          D.17486 = &MEM[(void *)"dll" + 3B];
          D.17487 = *D.17486;
          D.17488 = (int) D.17487;
          D.17744 = __s2 + 3;
          D.17745 = *D.17744;
          D.17746 = (int) D.17745;
          __result = D.17488 - D.17746;
          <D.17743>:
          <D.17741>:
          <D.17736>:
          <D.17734>:
          <D.17729>:
          <D.17727>:
        }
        D.16860 = __result;
      }
      iftmp.19 = -D.16860;
      goto <D.17747>;
      <D.17723>:
      D.17454 = (long unsigned int) i;
      D.17455 = D.17454 * 8;
      D.17456 = attribute_names + D.17455;
      D.17493 = *D.17456;
      iftmp.19 = __builtin_strcmp (D.17493, "dll");
      <D.17747>:
      D.16861 = iftmp.19;
    }
    if (D.16861 == 0) goto <D.17748>; else goto <D.17749>;
    <D.17748>:
    D.17454 = (long unsigned int) i;
    D.17455 = D.17454 * 8;
    D.17496 = attribute_values + D.17455;
    dll = *D.17496;
    goto <D.17750>;
    <D.17749>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        D.17454 = (long unsigned int) i;
        D.17455 = D.17454 * 8;
        D.17456 = attribute_names + D.17455;
        __s2 = *D.17456;
        D.17503 = "target";
        D.17504 = MEM[(const unsigned char *)D.17503];
        D.17505 = (int) D.17504;
        D.17754 = *__s2;
        D.17755 = (int) D.17754;
        __result = D.17505 - D.17755;
        {
          if (__s2_len != 0) goto <D.17756>; else goto <D.17757>;
          <D.17756>:
          if (__result == 0) goto <D.17758>; else goto <D.17759>;
          <D.17758>:
          D.17512 = &MEM[(void *)"target" + 1B];
          D.17513 = *D.17512;
          D.17514 = (int) D.17513;
          D.17760 = __s2 + 1;
          D.17761 = *D.17760;
          D.17762 = (int) D.17761;
          __result = D.17514 - D.17762;
          if (__s2_len > 1) goto <D.17763>; else goto <D.17764>;
          <D.17763>:
          if (__result == 0) goto <D.17765>; else goto <D.17766>;
          <D.17765>:
          D.17522 = &MEM[(void *)"target" + 2B];
          D.17523 = *D.17522;
          D.17524 = (int) D.17523;
          D.17767 = __s2 + 2;
          D.17768 = *D.17767;
          D.17769 = (int) D.17768;
          __result = D.17524 - D.17769;
          if (__s2_len > 2) goto <D.17770>; else goto <D.17771>;
          <D.17770>:
          if (__result == 0) goto <D.17772>; else goto <D.17773>;
          <D.17772>:
          D.17532 = &MEM[(void *)"target" + 3B];
          D.17533 = *D.17532;
          D.17534 = (int) D.17533;
          D.17774 = __s2 + 3;
          D.17775 = *D.17774;
          D.17776 = (int) D.17775;
          __result = D.17534 - D.17776;
          <D.17773>:
          <D.17771>:
          <D.17766>:
          <D.17764>:
          <D.17759>:
          <D.17757>:
        }
        D.16869 = __result;
      }
      iftmp.20 = -D.16869;
      goto <D.17777>;
      <D.17753>:
      D.17454 = (long unsigned int) i;
      D.17455 = D.17454 * 8;
      D.17456 = attribute_names + D.17455;
      D.17493 = *D.17456;
      iftmp.20 = __builtin_strcmp (D.17493, "target");
      <D.17777>:
      D.16870 = iftmp.20;
    }
    if (D.16870 == 0) goto <D.17778>; else goto <D.17779>;
    <D.17778>:
    D.17454 = (long unsigned int) i;
    D.17455 = D.17454 * 8;
    D.17496 = attribute_values + D.17455;
    target = *D.17496;
    goto <D.17780>;
    <D.17779>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        D.17454 = (long unsigned int) i;
        D.17455 = D.17454 * 8;
        D.17456 = attribute_names + D.17455;
        __s2 = *D.17456;
        D.17784 = "name";
        D.17785 = MEM[(const unsigned char *)D.17784];
        D.17786 = (int) D.17785;
        D.17787 = *__s2;
        D.17788 = (int) D.17787;
        __result = D.17786 - D.17788;
        {
          if (__s2_len != 0) goto <D.17789>; else goto <D.17790>;
          <D.17789>:
          if (__result == 0) goto <D.17791>; else goto <D.17792>;
          <D.17791>:
          D.17793 = &MEM[(void *)"name" + 1B];
          D.17794 = *D.17793;
          D.17795 = (int) D.17794;
          D.17796 = __s2 + 1;
          D.17797 = *D.17796;
          D.17798 = (int) D.17797;
          __result = D.17795 - D.17798;
          if (__s2_len > 1) goto <D.17799>; else goto <D.17800>;
          <D.17799>:
          if (__result == 0) goto <D.17801>; else goto <D.17802>;
          <D.17801>:
          D.17803 = &MEM[(void *)"name" + 2B];
          D.17804 = *D.17803;
          D.17805 = (int) D.17804;
          D.17806 = __s2 + 2;
          D.17807 = *D.17806;
          D.17808 = (int) D.17807;
          __result = D.17805 - D.17808;
          if (__s2_len > 2) goto <D.17809>; else goto <D.17810>;
          <D.17809>:
          if (__result == 0) goto <D.17811>; else goto <D.17812>;
          <D.17811>:
          D.17813 = &MEM[(void *)"name" + 3B];
          D.17814 = *D.17813;
          D.17815 = (int) D.17814;
          D.17816 = __s2 + 3;
          D.17817 = *D.17816;
          D.17818 = (int) D.17817;
          __result = D.17815 - D.17818;
          <D.17812>:
          <D.17810>:
          <D.17802>:
          <D.17800>:
          <D.17792>:
          <D.17790>:
        }
        D.16878 = __result;
      }
      iftmp.21 = -D.16878;
      goto <D.17819>;
      <D.17783>:
      D.17454 = (long unsigned int) i;
      D.17455 = D.17454 * 8;
      D.17456 = attribute_names + D.17455;
      D.17493 = *D.17456;
      iftmp.21 = __builtin_strcmp (D.17493, "name");
      <D.17819>:
      D.16879 = iftmp.21;
    }
    if (D.16879 == 0) goto <D.17820>; else goto <D.17821>;
    <D.17820>:
    D.17454 = (long unsigned int) i;
    D.17455 = D.17454 * 8;
    D.17496 = attribute_values + D.17455;
    name = *D.17496;
    goto <D.17822>;
    <D.17821>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        D.17454 = (long unsigned int) i;
        D.17455 = D.17454 * 8;
        D.17456 = attribute_names + D.17455;
        __s2 = *D.17456;
        D.17548 = "os";
        D.17549 = MEM[(const unsigned char *)D.17548];
        D.17550 = (int) D.17549;
        D.17828 = *__s2;
        D.17829 = (int) D.17828;
        __result = D.17550 - D.17829;
        {
          if (__s2_len != 0) goto <D.17830>; else goto <D.17831>;
          <D.17830>:
          if (__result == 0) goto <D.17832>; else goto <D.17833>;
          <D.17832>:
          D.17557 = &MEM[(void *)"os" + 1B];
          D.17558 = *D.17557;
          D.17559 = (int) D.17558;
          D.17834 = __s2 + 1;
          D.17835 = *D.17834;
          D.17836 = (int) D.17835;
          __result = D.17559 - D.17836;
          if (__s2_len > 1) goto <D.17837>; else goto <D.17838>;
          <D.17837>:
          if (__result == 0) goto <D.17839>; else goto <D.17840>;
          <D.17839>:
          D.17567 = &MEM[(void *)"os" + 2B];
          D.17568 = *D.17567;
          D.17569 = (int) D.17568;
          D.17841 = __s2 + 2;
          D.17842 = *D.17841;
          D.17843 = (int) D.17842;
          __result = D.17569 - D.17843;
          if (__s2_len > 2) goto <D.17844>; else goto <D.17845>;
          <D.17844>:
          if (__result == 0) goto <D.17846>; else goto <D.17847>;
          <D.17846>:
          D.17577 = &MEM[(void *)"os" + 3B];
          D.17578 = *D.17577;
          D.17579 = (int) D.17578;
          D.17848 = __s2 + 3;
          D.17849 = *D.17848;
          D.17850 = (int) D.17849;
          __result = D.17579 - D.17850;
          <D.17847>:
          <D.17845>:
          <D.17840>:
          <D.17838>:
          <D.17833>:
          <D.17831>:
        }
        D.16887 = __result;
      }
      iftmp.22 = -D.16887;
      goto <D.17851>;
      <D.17827>:
      D.17454 = (long unsigned int) i;
      D.17455 = D.17454 * 8;
      D.17456 = attribute_names + D.17455;
      D.17493 = *D.17456;
      iftmp.22 = __builtin_strcmp (D.17493, "os");
      <D.17851>:
      D.16888 = iftmp.22;
    }
    if (D.16888 == 0) goto <D.17852>; else goto <D.17823>;
    <D.17852>:
    D.17454 = (long unsigned int) i;
    D.17455 = D.17454 * 8;
    D.17496 = attribute_values + D.17455;
    D.17497 = *D.17496;
    D.17853 = arch_matches ("linux", D.17497);
    if (D.17853 == 0) goto <D.17854>; else goto <D.17823>;
    <D.17854>:
    ignore = 1;
    goto <D.17824>;
    <D.17823>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        D.17454 = (long unsigned int) i;
        D.17455 = D.17454 * 8;
        D.17456 = attribute_names + D.17455;
        __s2 = *D.17456;
        D.17592 = "cpu";
        D.17593 = MEM[(const unsigned char *)D.17592];
        D.17594 = (int) D.17593;
        D.17860 = *__s2;
        D.17861 = (int) D.17860;
        __result = D.17594 - D.17861;
        {
          if (__s2_len != 0) goto <D.17862>; else goto <D.17863>;
          <D.17862>:
          if (__result == 0) goto <D.17864>; else goto <D.17865>;
          <D.17864>:
          D.17601 = &MEM[(void *)"cpu" + 1B];
          D.17602 = *D.17601;
          D.17603 = (int) D.17602;
          D.17866 = __s2 + 1;
          D.17867 = *D.17866;
          D.17868 = (int) D.17867;
          __result = D.17603 - D.17868;
          if (__s2_len > 1) goto <D.17869>; else goto <D.17870>;
          <D.17869>:
          if (__result == 0) goto <D.17871>; else goto <D.17872>;
          <D.17871>:
          D.17611 = &MEM[(void *)"cpu" + 2B];
          D.17612 = *D.17611;
          D.17613 = (int) D.17612;
          D.17873 = __s2 + 2;
          D.17874 = *D.17873;
          D.17875 = (int) D.17874;
          __result = D.17613 - D.17875;
          if (__s2_len > 2) goto <D.17876>; else goto <D.17877>;
          <D.17876>:
          if (__result == 0) goto <D.17878>; else goto <D.17879>;
          <D.17878>:
          D.17621 = &MEM[(void *)"cpu" + 3B];
          D.17622 = *D.17621;
          D.17623 = (int) D.17622;
          D.17880 = __s2 + 3;
          D.17881 = *D.17880;
          D.17882 = (int) D.17881;
          __result = D.17623 - D.17882;
          <D.17879>:
          <D.17877>:
          <D.17872>:
          <D.17870>:
          <D.17865>:
          <D.17863>:
        }
        D.16896 = __result;
      }
      iftmp.23 = -D.16896;
      goto <D.17883>;
      <D.17859>:
      D.17454 = (long unsigned int) i;
      D.17455 = D.17454 * 8;
      D.17456 = attribute_names + D.17455;
      D.17493 = *D.17456;
      iftmp.23 = __builtin_strcmp (D.17493, "cpu");
      <D.17883>:
      D.16897 = iftmp.23;
    }
    if (D.16897 == 0) goto <D.17884>; else goto <D.17855>;
    <D.17884>:
    D.17454 = (long unsigned int) i;
    D.17455 = D.17454 * 8;
    D.17496 = attribute_values + D.17455;
    D.17497 = *D.17496;
    D.17885 = arch_matches ("ppc64", D.17497);
    if (D.17885 == 0) goto <D.17886>; else goto <D.17855>;
    <D.17886>:
    ignore = 1;
    goto <D.17856>;
    <D.17855>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        D.17454 = (long unsigned int) i;
        D.17455 = D.17454 * 8;
        D.17456 = attribute_names + D.17455;
        __s2 = *D.17456;
        D.17634 = "wordsize";
        D.17635 = MEM[(const unsigned char *)D.17634];
        D.17636 = (int) D.17635;
        D.17890 = *__s2;
        D.17891 = (int) D.17890;
        __result = D.17636 - D.17891;
        {
          if (__s2_len != 0) goto <D.17892>; else goto <D.17893>;
          <D.17892>:
          if (__result == 0) goto <D.17894>; else goto <D.17895>;
          <D.17894>:
          D.17643 = &MEM[(void *)"wordsize" + 1B];
          D.17644 = *D.17643;
          D.17645 = (int) D.17644;
          D.17896 = __s2 + 1;
          D.17897 = *D.17896;
          D.17898 = (int) D.17897;
          __result = D.17645 - D.17898;
          if (__s2_len > 1) goto <D.17899>; else goto <D.17900>;
          <D.17899>:
          if (__result == 0) goto <D.17901>; else goto <D.17902>;
          <D.17901>:
          D.17653 = &MEM[(void *)"wordsize" + 2B];
          D.17654 = *D.17653;
          D.17655 = (int) D.17654;
          D.17903 = __s2 + 2;
          D.17904 = *D.17903;
          D.17905 = (int) D.17904;
          __result = D.17655 - D.17905;
          if (__s2_len > 2) goto <D.17906>; else goto <D.17907>;
          <D.17906>:
          if (__result == 0) goto <D.17908>; else goto <D.17909>;
          <D.17908>:
          D.17663 = &MEM[(void *)"wordsize" + 3B];
          D.17664 = *D.17663;
          D.17665 = (int) D.17664;
          D.17910 = __s2 + 3;
          D.17911 = *D.17910;
          D.17912 = (int) D.17911;
          __result = D.17665 - D.17912;
          <D.17909>:
          <D.17907>:
          <D.17902>:
          <D.17900>:
          <D.17895>:
          <D.17893>:
        }
        D.16905 = __result;
      }
      iftmp.24 = -D.16905;
      goto <D.17913>;
      <D.17889>:
      D.17454 = (long unsigned int) i;
      D.17455 = D.17454 * 8;
      D.17456 = attribute_names + D.17455;
      D.17493 = *D.17456;
      iftmp.24 = __builtin_strcmp (D.17493, "wordsize");
      <D.17913>:
      D.16906 = iftmp.24;
    }
    if (D.16906 == 0) goto <D.17914>; else goto <D.17915>;
    <D.17914>:
    D.17454 = (long unsigned int) i;
    D.17455 = D.17454 * 8;
    D.17496 = attribute_values + D.17455;
    D.17497 = *D.17496;
    D.17916 = arch_matches ("64", D.17497);
    if (D.17916 == 0) goto <D.17917>; else goto <D.17918>;
    <D.17917>:
    ignore = 1;
    <D.17918>:
    <D.17915>:
    <D.17856>:
    <D.17824>:
    <D.17822>:
    <D.17780>:
    <D.17750>:
    i = i + 1;
    <D.16908>:
    D.17454 = (long unsigned int) i;
    D.17455 = D.17454 * 8;
    D.17456 = attribute_names + D.17455;
    D.17493 = *D.17456;
    if (D.17493 != 0B) goto <D.16907>; else goto <D.16909>;
    <D.16909>:
    if (dll == 0B) goto <D.17919>; else goto <D.17920>;
    <D.17919>:
    dll = info->dll;
    <D.17920>:
    D.17675 = info->ignore;
    D.17921 = D.17675 | ignore;
    if (D.17921 == 0) goto <D.17922>; else goto <D.17923>;
    <D.17922>:
    D.17678 = info->assembly;
    D.17449 = info->dll;
    mono_dllmap_insert (D.17678, D.17449, name, dll, target);
    <D.17923>:
  }
  <D.17720>:
  <D.17679>:
}


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

  if (str != 0B) goto <D.17924>; else goto <D.17925>;
  <D.17924>:
  D.17926 = __strdup (str);
  return D.17926;
  <D.17925>:
  D.17926 = 0B;
  return D.17926;
}


arch_matches (const char * arch, const char * value)
{
  char D.17928;
  int D.17931;
  const char * D.17932;
  int D.17933;
  _Bool D.17934;
  int D.16761;
  char * D.17935;
  char * * splitted;
  char * * p;
  int found;

  found = 0;
  D.17928 = *value;
  if (D.17928 == 33) goto <D.17929>; else goto <D.17930>;
  <D.17929>:
  D.17932 = value + 1;
  D.17933 = arch_matches (arch, D.17932);
  D.17934 = D.17933 == 0;
  D.17931 = (int) D.17934;
  return D.17931;
  <D.17930>:
  splitted = monoeg_g_strsplit (value, ",", 0);
  p = splitted;
  goto <D.16764>;
  <D.16763>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.17935 = *p;
    D.16761 = __builtin_strcmp (arch, D.17935);
  }
  if (D.16761 == 0) goto <D.17936>; else goto <D.17937>;
  <D.17936>:
  found = 1;
  goto <D.16762>;
  <D.17937>:
  p = p + 8;
  <D.16764>:
  D.17935 = *p;
  if (D.17935 != 0B) goto <D.16763>; else goto <D.16762>;
  <D.16762>:
  monoeg_g_strfreev (splitted);
  D.17931 = found;
  return D.17931;
}


dllmap_init (struct MonoImage * assembly)
{
  void * D.17939;
  struct DllInfo * info;

  info = monoeg_malloc0 (32);
  info->assembly = assembly;
  D.17939 = info;
  return D.17939;
}


mono_register_config_for_assembly (const char * assembly_name, const char * config_xml)
{
  struct BundledConfig * bundled_configs.25;
  struct BundledConfig * bconfig;

  bconfig = monoeg_malloc0 (24);
  bconfig->aname = assembly_name;
  bconfig->config_xml = config_xml;
  bundled_configs.25 = bundled_configs;
  bconfig->next = bundled_configs.25;
  bundled_configs = bconfig;
}


mono_config_string_for_assembly_file (const char * filename)
{
  const char * D.17942;
  int D.17007;
  const char * D.17947;
  struct BundledConfig * bconfig;

  bconfig = bundled_configs;
  goto <D.17009>;
  <D.17008>:
  D.17942 = bconfig->aname;
  if (D.17942 != 0B) goto <D.17943>; else goto <D.17944>;
  <D.17943>:
  {
    size_t __s1_len;
    size_t __s2_len;

    D.17942 = bconfig->aname;
    D.17007 = __builtin_strcmp (D.17942, filename);
  }
  if (D.17007 == 0) goto <D.17945>; else goto <D.17946>;
  <D.17945>:
  D.17947 = bconfig->config_xml;
  return D.17947;
  <D.17946>:
  <D.17944>:
  bconfig = bconfig->next;
  <D.17009>:
  if (bconfig != 0B) goto <D.17008>; else goto <D.17010>;
  <D.17010>:
  D.17947 = 0B;
  return D.17947;
}


mono_config_for_assembly (struct MonoImage * assembly)
{
  const char * D.17949;
  long unsigned int D.17952;
  const char * D.17953;
  const char * D.17954;
  const char * D.17955;
  int D.17956;
  struct ParseState state;
  int got_it;
  int i;
  char * aname;
  char * cfg;
  char * cfg_name;
  const char * bundled_config;
  const char * home;

  try
    {
      state = {};
      got_it = 0;
      state.assembly = assembly;
      D.17949 = assembly->module_name;
      bundled_config = mono_config_string_for_assembly_file (D.17949);
      if (bundled_config != 0B) goto <D.17950>; else goto <D.17951>;
      <D.17950>:
      state.user_data = "<bundled>";
      D.17952 = strlen (bundled_config);
      mono_config_parse_xml_with_context (&state, bundled_config, D.17952);
      <D.17951>:
      D.17953 = mono_image_get_filename (assembly);
      cfg_name = monoeg_g_strdup_printf ("%s.config", D.17953);
      mono_config_parse_file_with_context (&state, cfg_name);
      monoeg_g_free (cfg_name);
      D.17954 = mono_image_get_name (assembly);
      cfg_name = monoeg_g_strdup_printf ("%s.config", D.17954);
      home = monoeg_g_get_home_dir ();
      i = 0;
      goto <D.17024>;
      <D.17023>:
      D.17955 = mono_get_config_dir ();
      cfg = monoeg_g_build_path ("/", D.17955, "mono", "assemblies", aname, cfg_name, 0B);
      D.17956 = mono_config_parse_file_with_context (&state, cfg);
      got_it = D.17956 + got_it;
      monoeg_g_free (cfg);
      monoeg_g_free (aname);
      if (got_it != 0) goto <D.17022>; else goto <D.17957>;
      <D.17957>:
      i = i + 1;
      <D.17024>:
      aname = get_assembly_filename (assembly, i);
      if (aname != 0B) goto <D.17023>; else goto <D.17022>;
      <D.17022>:
      monoeg_g_free (cfg_name);
    }
  finally
    {
      state = {CLOBBER};
    }
}


mono_config_parse_file_with_context (struct ParseState * state, const char * filename)
{
  int D.17958;
  int D.17961;
  long unsigned int len.26;
  gchar * text.27;
  char D.17966;
  gchar * D.17969;
  char D.17970;
  gchar * D.17973;
  char D.17974;
  void * D.17977;
  sizetype D.17980;
  const char * D.17981;
  long unsigned int D.17982;
  long unsigned int D.17983;
  gchar * text;
  gsize len;
  gint offset;

  try
    {
      mono_trace (64, 16, "Config attempting to parse: \'%s\'.", filename);
      D.17958 = monoeg_g_file_get_contents (filename, &text, &len, 0B);
      if (D.17958 == 0) goto <D.17959>; else goto <D.17960>;
      <D.17959>:
      D.17961 = 0;
      return D.17961;
      <D.17960>:
      offset = 0;
      len.26 = len;
      if (len.26 > 3) goto <D.17963>; else goto <D.17964>;
      <D.17963>:
      text.27 = text;
      D.17966 = *text.27;
      if (D.17966 == 239) goto <D.17967>; else goto <D.17968>;
      <D.17967>:
      text.27 = text;
      D.17969 = text.27 + 1;
      D.17970 = *D.17969;
      if (D.17970 == 187) goto <D.17971>; else goto <D.17972>;
      <D.17971>:
      text.27 = text;
      D.17973 = text.27 + 2;
      D.17974 = *D.17973;
      if (D.17974 == 191) goto <D.17975>; else goto <D.17976>;
      <D.17975>:
      offset = 3;
      <D.17976>:
      <D.17972>:
      <D.17968>:
      <D.17964>:
      D.17977 = state->user_data;
      if (D.17977 == 0B) goto <D.17978>; else goto <D.17979>;
      <D.17978>:
      state->user_data = filename;
      <D.17979>:
      text.27 = text;
      D.17980 = (sizetype) offset;
      D.17981 = text.27 + D.17980;
      len.26 = len;
      D.17982 = (long unsigned int) offset;
      D.17983 = len.26 - D.17982;
      mono_config_parse_xml_with_context (state, D.17981, D.17983);
      text.27 = text;
      monoeg_g_free (text.27);
      D.17961 = 1;
      return D.17961;
    }
  finally
    {
      text = {CLOBBER};
      len = {CLOBBER};
    }
}


get_assembly_filename (struct MonoImage * image, int state)
{
  char * D.17986;
  const char * D.17987;

  switch (state) <default: <D.16982>, case 0: <D.16981>>
  <D.16981>:
  D.17987 = mono_image_get_name (image);
  D.17986 = monoeg_strdup (D.17987);
  return D.17986;
  <D.16982>:
  D.17986 = 0B;
  return D.17986;
}


mono_config_parse (const char * filename)
{
  const char * D.17993;
  const char * home;
  char * mono_cfg;
  char * user_cfg;

  if (filename != 0B) goto <D.17989>; else goto <D.17990>;
  <D.17989>:
  mono_config_parse_file (filename);
  return;
  <D.17990>:
  home = monoeg_g_getenv ("MONO_CONFIG");
  if (home != 0B) goto <D.17991>; else goto <D.17992>;
  <D.17991>:
  mono_config_parse_file (home);
  return;
  <D.17992>:
  D.17993 = mono_get_config_dir ();
  mono_cfg = monoeg_g_build_path ("/", D.17993, "mono", "config", 0B);
  mono_config_parse_file (mono_cfg);
  monoeg_g_free (mono_cfg);
  home = monoeg_g_get_home_dir ();
  user_cfg = monoeg_g_strconcat (home, "/", ".mono/config", 0B);
  mono_config_parse_file (user_cfg);
  monoeg_g_free (user_cfg);
}


mono_config_parse_file (const char * filename)
{
  struct ParseState state;

  try
    {
      state = {};
      state.user_data = filename;
      mono_config_parse_file_with_context (&state, filename);
    }
  finally
    {
      state = {CLOBBER};
    }
}


mono_set_config_dir (const char * dir)
{
  const gchar * mono_cfg_dir.28;
  const char * mono_cfg_dir.29;
  gchar * mono_cfg_dir_allocated.30;
  char * mono_cfg_dir_allocated.31;

  mono_cfg_dir.28 = monoeg_g_getenv ("MONO_CFG_DIR");
  mono_cfg_dir = mono_cfg_dir.28;
  mono_cfg_dir.29 = mono_cfg_dir;
  if (mono_cfg_dir.29 == 0B) goto <D.17997>; else goto <D.17998>;
  <D.17997>:
  mono_cfg_dir_allocated.30 = monoeg_strdup (dir);
  mono_cfg_dir_allocated = mono_cfg_dir_allocated.30;
  mono_cfg_dir_allocated.31 = mono_cfg_dir_allocated;
  mono_cfg_dir = mono_cfg_dir_allocated.31;
  <D.17998>:
}


mono_get_config_dir ()
{
  const char * mono_cfg_dir.32;
  const char * D.18004;

  mono_cfg_dir.32 = mono_cfg_dir;
  if (mono_cfg_dir.32 == 0B) goto <D.18002>; else goto <D.18003>;
  <D.18002>:
  mono_set_dirs (0B, 0B);
  <D.18003>:
  D.18004 = mono_cfg_dir;
  return D.18004;
}


mono_register_machine_config (const char * config_xml)
{
  bundled_machine_config = config_xml;
}


mono_get_machine_config ()
{
  const char * D.18006;

  D.18006 = bundled_machine_config;
  return D.18006;
}


mono_config_parse_publisher_policy (const gchar * filename, struct MonoAssemblyBindingInfo * info)
{
  struct ParserUserData user_data;
  struct ParseState state;

  try
    {
      user_data.info = info;
      user_data.info_parsed = 0B;
      user_data.user_data = 0B;
      state.current = &publisher_policy_parser;
      state.user_data = &user_data;
      state.assembly = 0B;
      state.inited = 1;
      mono_config_parse_file_with_context (&state, filename);
    }
  finally
    {
      user_data = {CLOBBER};
      state = {CLOBBER};
    }
}


publisher_policy_start (void * user_data, const gchar * element_name, const gchar * * attribute_names, const gchar * * attribute_values)
{
  int D.17074;
  int iftmp.33;
  int D.17073;
  const char[18] * D.18011;
  unsigned char D.18012;
  int D.18013;
  unsigned char D.18014;
  int D.18015;
  const unsigned char * D.18020;
  unsigned char D.18021;
  int D.18022;
  const unsigned char * D.18023;
  unsigned char D.18024;
  int D.18025;
  const unsigned char * D.18030;
  unsigned char D.18031;
  int D.18032;
  const unsigned char * D.18033;
  unsigned char D.18034;
  int D.18035;
  const unsigned char * D.18040;
  unsigned char D.18041;
  int D.18042;
  const unsigned char * D.18043;
  unsigned char D.18044;
  int D.18045;
  struct AssemblyVersionSet * D.18049;
  struct AssemblyVersionSet * D.18050;
  struct AssemblyVersionSet * D.18051;
  int D.17083;
  int iftmp.34;
  int D.17082;
  const char[17] * D.18055;
  unsigned char D.18056;
  int D.18057;
  unsigned char D.18058;
  int D.18059;
  const unsigned char * D.18064;
  unsigned char D.18065;
  int D.18066;
  const unsigned char * D.18067;
  unsigned char D.18068;
  int D.18069;
  const unsigned char * D.18074;
  unsigned char D.18075;
  int D.18076;
  const unsigned char * D.18077;
  unsigned char D.18078;
  int D.18079;
  const unsigned char * D.18084;
  unsigned char D.18085;
  int D.18086;
  const unsigned char * D.18087;
  unsigned char D.18088;
  int D.18089;
  long unsigned int D.18093;
  long unsigned int D.18094;
  const gchar * * D.18095;
  int D.17093;
  int iftmp.35;
  int D.17092;
  const char[5] * D.18099;
  unsigned char D.18100;
  int D.18101;
  unsigned char D.18102;
  int D.18103;
  const unsigned char * D.18108;
  unsigned char D.18109;
  int D.18110;
  const unsigned char * D.18111;
  unsigned char D.18112;
  int D.18113;
  const unsigned char * D.18118;
  unsigned char D.18119;
  int D.18120;
  const unsigned char * D.18121;
  unsigned char D.18122;
  int D.18123;
  const unsigned char * D.18128;
  unsigned char D.18129;
  int D.18130;
  const unsigned char * D.18131;
  unsigned char D.18132;
  int D.18133;
  const gchar * * D.18137;
  const gchar * D.18138;
  gchar * D.18139;
  int D.17102;
  int iftmp.36;
  int D.17101;
  const char[15] * D.18144;
  unsigned char D.18145;
  int D.18146;
  unsigned char D.18147;
  int D.18148;
  const unsigned char * D.18153;
  unsigned char D.18154;
  int D.18155;
  const unsigned char * D.18156;
  unsigned char D.18157;
  int D.18158;
  const unsigned char * D.18163;
  unsigned char D.18164;
  int D.18165;
  const unsigned char * D.18166;
  unsigned char D.18167;
  int D.18168;
  const unsigned char * D.18173;
  unsigned char D.18174;
  int D.18175;
  const unsigned char * D.18176;
  unsigned char D.18177;
  int D.18178;
  long unsigned int D.18182;
  guchar[17] * D.18185;
  int D.17111;
  int iftmp.37;
  int D.17110;
  const char[8] * D.18190;
  unsigned char D.18191;
  int D.18192;
  unsigned char D.18193;
  int D.18194;
  const unsigned char * D.18199;
  unsigned char D.18200;
  int D.18201;
  const unsigned char * D.18202;
  unsigned char D.18203;
  int D.18204;
  const unsigned char * D.18209;
  unsigned char D.18210;
  int D.18211;
  const unsigned char * D.18212;
  unsigned char D.18213;
  int D.18214;
  const unsigned char * D.18219;
  unsigned char D.18220;
  int D.18221;
  const unsigned char * D.18222;
  unsigned char D.18223;
  int D.18224;
  int D.17120;
  int iftmp.38;
  int D.17119;
  const char[8] * D.18231;
  unsigned char D.18232;
  int D.18233;
  unsigned char D.18234;
  int D.18235;
  const unsigned char * D.18240;
  unsigned char D.18241;
  int D.18242;
  const unsigned char * D.18243;
  unsigned char D.18244;
  int D.18245;
  const unsigned char * D.18250;
  unsigned char D.18251;
  int D.18252;
  const unsigned char * D.18253;
  unsigned char D.18254;
  int D.18255;
  const unsigned char * D.18260;
  unsigned char D.18261;
  int D.18262;
  const unsigned char * D.18263;
  unsigned char D.18264;
  int D.18265;
  gchar * D.18269;
  gchar * D.18271;
  const gchar * D.18272;
  int D.17132;
  int iftmp.39;
  int D.17131;
  const char[16] * D.18277;
  unsigned char D.18278;
  int D.18279;
  unsigned char D.18280;
  int D.18281;
  const unsigned char * D.18286;
  unsigned char D.18287;
  int D.18288;
  const unsigned char * D.18289;
  unsigned char D.18290;
  int D.18291;
  const unsigned char * D.18296;
  unsigned char D.18297;
  int D.18298;
  const unsigned char * D.18299;
  unsigned char D.18300;
  int D.18301;
  const unsigned char * D.18306;
  unsigned char D.18307;
  int D.18308;
  const unsigned char * D.18309;
  unsigned char D.18310;
  int D.18311;
  int D.17142;
  int iftmp.40;
  int D.17141;
  const char[11] * D.18318;
  unsigned char D.18319;
  int D.18320;
  unsigned char D.18321;
  int D.18322;
  const unsigned char * D.18327;
  unsigned char D.18328;
  int D.18329;
  const unsigned char * D.18330;
  unsigned char D.18331;
  int D.18332;
  const unsigned char * D.18337;
  unsigned char D.18338;
  int D.18339;
  const unsigned char * D.18340;
  unsigned char D.18341;
  int D.18342;
  const unsigned char * D.18347;
  unsigned char D.18348;
  int D.18349;
  const unsigned char * D.18350;
  unsigned char D.18351;
  int D.18352;
  int D.17158;
  int iftmp.41;
  int D.17157;
  const char[1] * D.18359;
  unsigned char D.18360;
  int D.18361;
  unsigned char D.18362;
  int D.18363;
  const unsigned char * D.18368;
  unsigned char D.18369;
  int D.18370;
  const unsigned char * D.18371;
  unsigned char D.18372;
  int D.18373;
  const unsigned char * D.18378;
  unsigned char D.18379;
  int D.18380;
  const unsigned char * D.18381;
  unsigned char D.18382;
  int D.18383;
  const unsigned char * D.18388;
  unsigned char D.18389;
  int D.18390;
  const unsigned char * D.18391;
  unsigned char D.18392;
  int D.18393;
  unsigned char D.18395;
  gchar * D.18398;
  int iftmp.42;
  gchar * D.18400;
  gchar * * numbers.43;
  gchar * D.18404;
  int iftmp.44;
  gchar * * numbers.45;
  gchar * D.18410;
  int iftmp.46;
  gchar * * numbers.47;
  gchar * D.18416;
  int iftmp.48;
  short unsigned int D.18427;
  short unsigned int D.18428;
  short unsigned int D.18429;
  short unsigned int D.18430;
  gchar * * D.18431;
  gchar * D.18432;
  int iftmp.49;
  gchar * * numbers.50;
  gchar * D.18439;
  int iftmp.51;
  gchar * * numbers.52;
  gchar * D.18445;
  int iftmp.53;
  gchar * * numbers.54;
  gchar * D.18451;
  int iftmp.55;
  int D.17168;
  int iftmp.56;
  int D.17167;
  const char[11] * D.18466;
  unsigned char D.18467;
  int D.18468;
  unsigned char D.18469;
  int D.18470;
  const unsigned char * D.18475;
  unsigned char D.18476;
  int D.18477;
  const unsigned char * D.18478;
  unsigned char D.18479;
  int D.18480;
  const unsigned char * D.18485;
  unsigned char D.18486;
  int D.18487;
  const unsigned char * D.18488;
  unsigned char D.18489;
  int D.18490;
  const unsigned char * D.18495;
  unsigned char D.18496;
  int D.18497;
  const unsigned char * D.18498;
  unsigned char D.18499;
  int D.18500;
  int D.17179;
  int iftmp.57;
  int D.17178;
  unsigned char D.18507;
  int D.18508;
  const unsigned char * D.18513;
  unsigned char D.18514;
  int D.18515;
  const unsigned char * D.18520;
  unsigned char D.18521;
  int D.18522;
  const unsigned char * D.18527;
  unsigned char D.18528;
  int D.18529;
  guint16 iftmp.58;
  gchar * D.18534;
  gchar * * numbers.59;
  gchar * D.18538;
  int D.18539;
  guint16 iftmp.60;
  gchar * * numbers.61;
  gchar * D.18545;
  int D.18546;
  guint16 iftmp.62;
  gchar * * numbers.63;
  gchar * D.18552;
  int D.18553;
  guint16 iftmp.64;
  int D.18558;
  struct ParserUserData * pud;
  struct MonoAssemblyBindingInfo * info;
  int n;

  pud = user_data;
  info = pud->info;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.18011 = "dependentAssembly";
      D.18012 = MEM[(const unsigned char *)D.18011];
      D.18013 = (int) D.18012;
      D.18014 = *__s2;
      D.18015 = (int) D.18014;
      __result = D.18013 - D.18015;
      {
        if (__s2_len != 0) goto <D.18016>; else goto <D.18017>;
        <D.18016>:
        if (__result == 0) goto <D.18018>; else goto <D.18019>;
        <D.18018>:
        D.18020 = &MEM[(void *)"dependentAssembly" + 1B];
        D.18021 = *D.18020;
        D.18022 = (int) D.18021;
        D.18023 = __s2 + 1;
        D.18024 = *D.18023;
        D.18025 = (int) D.18024;
        __result = D.18022 - D.18025;
        if (__s2_len > 1) goto <D.18026>; else goto <D.18027>;
        <D.18026>:
        if (__result == 0) goto <D.18028>; else goto <D.18029>;
        <D.18028>:
        D.18030 = &MEM[(void *)"dependentAssembly" + 2B];
        D.18031 = *D.18030;
        D.18032 = (int) D.18031;
        D.18033 = __s2 + 2;
        D.18034 = *D.18033;
        D.18035 = (int) D.18034;
        __result = D.18032 - D.18035;
        if (__s2_len > 2) goto <D.18036>; else goto <D.18037>;
        <D.18036>:
        if (__result == 0) goto <D.18038>; else goto <D.18039>;
        <D.18038>:
        D.18040 = &MEM[(void *)"dependentAssembly" + 3B];
        D.18041 = *D.18040;
        D.18042 = (int) D.18041;
        D.18043 = __s2 + 3;
        D.18044 = *D.18043;
        D.18045 = (int) D.18044;
        __result = D.18042 - D.18045;
        <D.18039>:
        <D.18037>:
        <D.18029>:
        <D.18027>:
        <D.18019>:
        <D.18017>:
      }
      D.17073 = __result;
    }
    iftmp.33 = -D.17073;
    goto <D.18046>;
    <D.18010>:
    iftmp.33 = __builtin_strcmp (element_name, "dependentAssembly");
    <D.18046>:
    D.17074 = iftmp.33;
  }
  if (D.17074 == 0) goto <D.18047>; else goto <D.18048>;
  <D.18047>:
  info->name = 0B;
  info->culture = 0B;
  info->has_old_version_bottom = 0;
  info->has_old_version_top = 0;
  info->has_new_version = 0;
  info->is_valid = 0;
  D.18049 = &info->old_version_bottom;
  memset (D.18049, 0, 8);
  D.18050 = &info->old_version_top;
  memset (D.18050, 0, 8);
  D.18051 = &info->new_version;
  memset (D.18051, 0, 8);
  <D.18048>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.18055 = "assemblyIdentity";
      D.18056 = MEM[(const unsigned char *)D.18055];
      D.18057 = (int) D.18056;
      D.18058 = *__s2;
      D.18059 = (int) D.18058;
      __result = D.18057 - D.18059;
      {
        if (__s2_len != 0) goto <D.18060>; else goto <D.18061>;
        <D.18060>:
        if (__result == 0) goto <D.18062>; else goto <D.18063>;
        <D.18062>:
        D.18064 = &MEM[(void *)"assemblyIdentity" + 1B];
        D.18065 = *D.18064;
        D.18066 = (int) D.18065;
        D.18067 = __s2 + 1;
        D.18068 = *D.18067;
        D.18069 = (int) D.18068;
        __result = D.18066 - D.18069;
        if (__s2_len > 1) goto <D.18070>; else goto <D.18071>;
        <D.18070>:
        if (__result == 0) goto <D.18072>; else goto <D.18073>;
        <D.18072>:
        D.18074 = &MEM[(void *)"assemblyIdentity" + 2B];
        D.18075 = *D.18074;
        D.18076 = (int) D.18075;
        D.18077 = __s2 + 2;
        D.18078 = *D.18077;
        D.18079 = (int) D.18078;
        __result = D.18076 - D.18079;
        if (__s2_len > 2) goto <D.18080>; else goto <D.18081>;
        <D.18080>:
        if (__result == 0) goto <D.18082>; else goto <D.18083>;
        <D.18082>:
        D.18084 = &MEM[(void *)"assemblyIdentity" + 3B];
        D.18085 = *D.18084;
        D.18086 = (int) D.18085;
        D.18087 = __s2 + 3;
        D.18088 = *D.18087;
        D.18089 = (int) D.18088;
        __result = D.18086 - D.18089;
        <D.18083>:
        <D.18081>:
        <D.18073>:
        <D.18071>:
        <D.18063>:
        <D.18061>:
      }
      D.17082 = __result;
    }
    iftmp.34 = -D.17082;
    goto <D.18090>;
    <D.18054>:
    iftmp.34 = __builtin_strcmp (element_name, "assemblyIdentity");
    <D.18090>:
    D.17083 = iftmp.34;
  }
  if (D.17083 == 0) goto <D.18091>; else goto <D.18092>;
  <D.18091>:
  n = 0;
  goto <D.17122>;
  <D.17121>:
  {
    const gchar * attribute_name;

    D.18093 = (long unsigned int) n;
    D.18094 = D.18093 * 8;
    D.18095 = attribute_names + D.18094;
    attribute_name = *D.18095;
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.18099 = "name";
        D.18100 = MEM[(const unsigned char *)D.18099];
        D.18101 = (int) D.18100;
        D.18102 = *__s2;
        D.18103 = (int) D.18102;
        __result = D.18101 - D.18103;
        {
          if (__s2_len != 0) goto <D.18104>; else goto <D.18105>;
          <D.18104>:
          if (__result == 0) goto <D.18106>; else goto <D.18107>;
          <D.18106>:
          D.18108 = &MEM[(void *)"name" + 1B];
          D.18109 = *D.18108;
          D.18110 = (int) D.18109;
          D.18111 = __s2 + 1;
          D.18112 = *D.18111;
          D.18113 = (int) D.18112;
          __result = D.18110 - D.18113;
          if (__s2_len > 1) goto <D.18114>; else goto <D.18115>;
          <D.18114>:
          if (__result == 0) goto <D.18116>; else goto <D.18117>;
          <D.18116>:
          D.18118 = &MEM[(void *)"name" + 2B];
          D.18119 = *D.18118;
          D.18120 = (int) D.18119;
          D.18121 = __s2 + 2;
          D.18122 = *D.18121;
          D.18123 = (int) D.18122;
          __result = D.18120 - D.18123;
          if (__s2_len > 2) goto <D.18124>; else goto <D.18125>;
          <D.18124>:
          if (__result == 0) goto <D.18126>; else goto <D.18127>;
          <D.18126>:
          D.18128 = &MEM[(void *)"name" + 3B];
          D.18129 = *D.18128;
          D.18130 = (int) D.18129;
          D.18131 = __s2 + 3;
          D.18132 = *D.18131;
          D.18133 = (int) D.18132;
          __result = D.18130 - D.18133;
          <D.18127>:
          <D.18125>:
          <D.18117>:
          <D.18115>:
          <D.18107>:
          <D.18105>:
        }
        D.17092 = __result;
      }
      iftmp.35 = -D.17092;
      goto <D.18134>;
      <D.18098>:
      iftmp.35 = __builtin_strcmp (attribute_name, "name");
      <D.18134>:
      D.17093 = iftmp.35;
    }
    if (D.17093 == 0) goto <D.18135>; else goto <D.18136>;
    <D.18135>:
    D.18093 = (long unsigned int) n;
    D.18094 = D.18093 * 8;
    D.18137 = attribute_values + D.18094;
    D.18138 = *D.18137;
    D.18139 = monoeg_strdup (D.18138);
    info->name = D.18139;
    goto <D.18140>;
    <D.18136>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.18144 = "publicKeyToken";
        D.18145 = MEM[(const unsigned char *)D.18144];
        D.18146 = (int) D.18145;
        D.18147 = *__s2;
        D.18148 = (int) D.18147;
        __result = D.18146 - D.18148;
        {
          if (__s2_len != 0) goto <D.18149>; else goto <D.18150>;
          <D.18149>:
          if (__result == 0) goto <D.18151>; else goto <D.18152>;
          <D.18151>:
          D.18153 = &MEM[(void *)"publicKeyToken" + 1B];
          D.18154 = *D.18153;
          D.18155 = (int) D.18154;
          D.18156 = __s2 + 1;
          D.18157 = *D.18156;
          D.18158 = (int) D.18157;
          __result = D.18155 - D.18158;
          if (__s2_len > 1) goto <D.18159>; else goto <D.18160>;
          <D.18159>:
          if (__result == 0) goto <D.18161>; else goto <D.18162>;
          <D.18161>:
          D.18163 = &MEM[(void *)"publicKeyToken" + 2B];
          D.18164 = *D.18163;
          D.18165 = (int) D.18164;
          D.18166 = __s2 + 2;
          D.18167 = *D.18166;
          D.18168 = (int) D.18167;
          __result = D.18165 - D.18168;
          if (__s2_len > 2) goto <D.18169>; else goto <D.18170>;
          <D.18169>:
          if (__result == 0) goto <D.18171>; else goto <D.18172>;
          <D.18171>:
          D.18173 = &MEM[(void *)"publicKeyToken" + 3B];
          D.18174 = *D.18173;
          D.18175 = (int) D.18174;
          D.18176 = __s2 + 3;
          D.18177 = *D.18176;
          D.18178 = (int) D.18177;
          __result = D.18175 - D.18178;
          <D.18172>:
          <D.18170>:
          <D.18162>:
          <D.18160>:
          <D.18152>:
          <D.18150>:
        }
        D.17101 = __result;
      }
      iftmp.36 = -D.17101;
      goto <D.18179>;
      <D.18143>:
      iftmp.36 = __builtin_strcmp (attribute_name, "publicKeyToken");
      <D.18179>:
      D.17102 = iftmp.36;
    }
    if (D.17102 == 0) goto <D.18180>; else goto <D.18181>;
    <D.18180>:
    D.18093 = (long unsigned int) n;
    D.18094 = D.18093 * 8;
    D.18137 = attribute_values + D.18094;
    D.18138 = *D.18137;
    D.18182 = strlen (D.18138);
    if (D.18182 == 16) goto <D.18183>; else goto <D.18184>;
    <D.18183>:
    D.18185 = &info->public_key_token;
    D.18093 = (long unsigned int) n;
    D.18094 = D.18093 * 8;
    D.18137 = attribute_values + D.18094;
    D.18138 = *D.18137;
    monoeg_g_strlcpy (D.18185, D.18138, 17);
    <D.18184>:
    goto <D.18186>;
    <D.18181>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.18190 = "culture";
        D.18191 = MEM[(const unsigned char *)D.18190];
        D.18192 = (int) D.18191;
        D.18193 = *__s2;
        D.18194 = (int) D.18193;
        __result = D.18192 - D.18194;
        {
          if (__s2_len != 0) goto <D.18195>; else goto <D.18196>;
          <D.18195>:
          if (__result == 0) goto <D.18197>; else goto <D.18198>;
          <D.18197>:
          D.18199 = &MEM[(void *)"culture" + 1B];
          D.18200 = *D.18199;
          D.18201 = (int) D.18200;
          D.18202 = __s2 + 1;
          D.18203 = *D.18202;
          D.18204 = (int) D.18203;
          __result = D.18201 - D.18204;
          if (__s2_len > 1) goto <D.18205>; else goto <D.18206>;
          <D.18205>:
          if (__result == 0) goto <D.18207>; else goto <D.18208>;
          <D.18207>:
          D.18209 = &MEM[(void *)"culture" + 2B];
          D.18210 = *D.18209;
          D.18211 = (int) D.18210;
          D.18212 = __s2 + 2;
          D.18213 = *D.18212;
          D.18214 = (int) D.18213;
          __result = D.18211 - D.18214;
          if (__s2_len > 2) goto <D.18215>; else goto <D.18216>;
          <D.18215>:
          if (__result == 0) goto <D.18217>; else goto <D.18218>;
          <D.18217>:
          D.18219 = &MEM[(void *)"culture" + 3B];
          D.18220 = *D.18219;
          D.18221 = (int) D.18220;
          D.18222 = __s2 + 3;
          D.18223 = *D.18222;
          D.18224 = (int) D.18223;
          __result = D.18221 - D.18224;
          <D.18218>:
          <D.18216>:
          <D.18208>:
          <D.18206>:
          <D.18198>:
          <D.18196>:
        }
        D.17110 = __result;
      }
      iftmp.37 = -D.17110;
      goto <D.18225>;
      <D.18189>:
      iftmp.37 = __builtin_strcmp (attribute_name, "culture");
      <D.18225>:
      D.17111 = iftmp.37;
    }
    if (D.17111 == 0) goto <D.18226>; else goto <D.18227>;
    <D.18226>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        D.18093 = (long unsigned int) n;
        D.18094 = D.18093 * 8;
        D.18137 = attribute_values + D.18094;
        __s2 = *D.18137;
        D.18231 = "neutral";
        D.18232 = MEM[(const unsigned char *)D.18231];
        D.18233 = (int) D.18232;
        D.18234 = *__s2;
        D.18235 = (int) D.18234;
        __result = D.18233 - D.18235;
        {
          if (__s2_len != 0) goto <D.18236>; else goto <D.18237>;
          <D.18236>:
          if (__result == 0) goto <D.18238>; else goto <D.18239>;
          <D.18238>:
          D.18240 = &MEM[(void *)"neutral" + 1B];
          D.18241 = *D.18240;
          D.18242 = (int) D.18241;
          D.18243 = __s2 + 1;
          D.18244 = *D.18243;
          D.18245 = (int) D.18244;
          __result = D.18242 - D.18245;
          if (__s2_len > 1) goto <D.18246>; else goto <D.18247>;
          <D.18246>:
          if (__result == 0) goto <D.18248>; else goto <D.18249>;
          <D.18248>:
          D.18250 = &MEM[(void *)"neutral" + 2B];
          D.18251 = *D.18250;
          D.18252 = (int) D.18251;
          D.18253 = __s2 + 2;
          D.18254 = *D.18253;
          D.18255 = (int) D.18254;
          __result = D.18252 - D.18255;
          if (__s2_len > 2) goto <D.18256>; else goto <D.18257>;
          <D.18256>:
          if (__result == 0) goto <D.18258>; else goto <D.18259>;
          <D.18258>:
          D.18260 = &MEM[(void *)"neutral" + 3B];
          D.18261 = *D.18260;
          D.18262 = (int) D.18261;
          D.18263 = __s2 + 3;
          D.18264 = *D.18263;
          D.18265 = (int) D.18264;
          __result = D.18262 - D.18265;
          <D.18259>:
          <D.18257>:
          <D.18249>:
          <D.18247>:
          <D.18239>:
          <D.18237>:
        }
        D.17119 = __result;
      }
      iftmp.38 = -D.17119;
      goto <D.18266>;
      <D.18230>:
      D.18093 = (long unsigned int) n;
      D.18094 = D.18093 * 8;
      D.18137 = attribute_values + D.18094;
      D.18138 = *D.18137;
      iftmp.38 = __builtin_strcmp (D.18138, "neutral");
      <D.18266>:
      D.17120 = iftmp.38;
    }
    if (D.17120 == 0) goto <D.18267>; else goto <D.18268>;
    <D.18267>:
    D.18269 = monoeg_strdup ("");
    info->culture = D.18269;
    goto <D.18270>;
    <D.18268>:
    D.18093 = (long unsigned int) n;
    D.18094 = D.18093 * 8;
    D.18137 = attribute_values + D.18094;
    D.18138 = *D.18137;
    D.18271 = monoeg_strdup (D.18138);
    info->culture = D.18271;
    <D.18270>:
    <D.18227>:
    <D.18186>:
    <D.18140>:
  }
  n = n + 1;
  <D.17122>:
  D.18093 = (long unsigned int) n;
  D.18094 = D.18093 * 8;
  D.18095 = attribute_names + D.18094;
  D.18272 = *D.18095;
  if (D.18272 != 0B) goto <D.17121>; else goto <D.17123>;
  <D.17123>:
  goto <D.18273>;
  <D.18092>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.18277 = "bindingRedirect";
      D.18278 = MEM[(const unsigned char *)D.18277];
      D.18279 = (int) D.18278;
      D.18280 = *__s2;
      D.18281 = (int) D.18280;
      __result = D.18279 - D.18281;
      {
        if (__s2_len != 0) goto <D.18282>; else goto <D.18283>;
        <D.18282>:
        if (__result == 0) goto <D.18284>; else goto <D.18285>;
        <D.18284>:
        D.18286 = &MEM[(void *)"bindingRedirect" + 1B];
        D.18287 = *D.18286;
        D.18288 = (int) D.18287;
        D.18289 = __s2 + 1;
        D.18290 = *D.18289;
        D.18291 = (int) D.18290;
        __result = D.18288 - D.18291;
        if (__s2_len > 1) goto <D.18292>; else goto <D.18293>;
        <D.18292>:
        if (__result == 0) goto <D.18294>; else goto <D.18295>;
        <D.18294>:
        D.18296 = &MEM[(void *)"bindingRedirect" + 2B];
        D.18297 = *D.18296;
        D.18298 = (int) D.18297;
        D.18299 = __s2 + 2;
        D.18300 = *D.18299;
        D.18301 = (int) D.18300;
        __result = D.18298 - D.18301;
        if (__s2_len > 2) goto <D.18302>; else goto <D.18303>;
        <D.18302>:
        if (__result == 0) goto <D.18304>; else goto <D.18305>;
        <D.18304>:
        D.18306 = &MEM[(void *)"bindingRedirect" + 3B];
        D.18307 = *D.18306;
        D.18308 = (int) D.18307;
        D.18309 = __s2 + 3;
        D.18310 = *D.18309;
        D.18311 = (int) D.18310;
        __result = D.18308 - D.18311;
        <D.18305>:
        <D.18303>:
        <D.18295>:
        <D.18293>:
        <D.18285>:
        <D.18283>:
      }
      D.17131 = __result;
    }
    iftmp.39 = -D.17131;
    goto <D.18312>;
    <D.18276>:
    iftmp.39 = __builtin_strcmp (element_name, "bindingRedirect");
    <D.18312>:
    D.17132 = iftmp.39;
  }
  if (D.17132 == 0) goto <D.18313>; else goto <D.18314>;
  <D.18313>:
  n = 0;
  goto <D.17181>;
  <D.17180>:
  {
    const gchar * attribute_name;

    D.18093 = (long unsigned int) n;
    D.18094 = D.18093 * 8;
    D.18095 = attribute_names + D.18094;
    attribute_name = *D.18095;
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.18318 = "oldVersion";
        D.18319 = MEM[(const unsigned char *)D.18318];
        D.18320 = (int) D.18319;
        D.18321 = *__s2;
        D.18322 = (int) D.18321;
        __result = D.18320 - D.18322;
        {
          if (__s2_len != 0) goto <D.18323>; else goto <D.18324>;
          <D.18323>:
          if (__result == 0) goto <D.18325>; else goto <D.18326>;
          <D.18325>:
          D.18327 = &MEM[(void *)"oldVersion" + 1B];
          D.18328 = *D.18327;
          D.18329 = (int) D.18328;
          D.18330 = __s2 + 1;
          D.18331 = *D.18330;
          D.18332 = (int) D.18331;
          __result = D.18329 - D.18332;
          if (__s2_len > 1) goto <D.18333>; else goto <D.18334>;
          <D.18333>:
          if (__result == 0) goto <D.18335>; else goto <D.18336>;
          <D.18335>:
          D.18337 = &MEM[(void *)"oldVersion" + 2B];
          D.18338 = *D.18337;
          D.18339 = (int) D.18338;
          D.18340 = __s2 + 2;
          D.18341 = *D.18340;
          D.18342 = (int) D.18341;
          __result = D.18339 - D.18342;
          if (__s2_len > 2) goto <D.18343>; else goto <D.18344>;
          <D.18343>:
          if (__result == 0) goto <D.18345>; else goto <D.18346>;
          <D.18345>:
          D.18347 = &MEM[(void *)"oldVersion" + 3B];
          D.18348 = *D.18347;
          D.18349 = (int) D.18348;
          D.18350 = __s2 + 3;
          D.18351 = *D.18350;
          D.18352 = (int) D.18351;
          __result = D.18349 - D.18352;
          <D.18346>:
          <D.18344>:
          <D.18336>:
          <D.18334>:
          <D.18326>:
          <D.18324>:
        }
        D.17141 = __result;
      }
      iftmp.40 = -D.17141;
      goto <D.18353>;
      <D.18317>:
      iftmp.40 = __builtin_strcmp (attribute_name, "oldVersion");
      <D.18353>:
      D.17142 = iftmp.40;
    }
    if (D.17142 == 0) goto <D.18354>; else goto <D.18355>;
    <D.18354>:
    {
      gchar * * numbers;
      gchar * * version;
      gchar * * versions;
      gint major;
      gint minor;
      gint build;
      gint revision;

      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.18093 = (long unsigned int) n;
          D.18094 = D.18093 * 8;
          D.18137 = attribute_values + D.18094;
          __s2 = *D.18137;
          D.18359 = "";
          D.18360 = MEM[(const unsigned char *)D.18359];
          D.18361 = (int) D.18360;
          D.18362 = *__s2;
          D.18363 = (int) D.18362;
          __result = D.18361 - D.18363;
          {
            if (__s2_len != 0) goto <D.18364>; else goto <D.18365>;
            <D.18364>:
            if (__result == 0) goto <D.18366>; else goto <D.18367>;
            <D.18366>:
            D.18368 = &MEM[(void *)"" + 1B];
            D.18369 = *D.18368;
            D.18370 = (int) D.18369;
            D.18371 = __s2 + 1;
            D.18372 = *D.18371;
            D.18373 = (int) D.18372;
            __result = D.18370 - D.18373;
            if (__s2_len > 1) goto <D.18374>; else goto <D.18375>;
            <D.18374>:
            if (__result == 0) goto <D.18376>; else goto <D.18377>;
            <D.18376>:
            D.18378 = &MEM[(void *)"" + 2B];
            D.18379 = *D.18378;
            D.18380 = (int) D.18379;
            D.18381 = __s2 + 2;
            D.18382 = *D.18381;
            D.18383 = (int) D.18382;
            __result = D.18380 - D.18383;
            if (__s2_len > 2) goto <D.18384>; else goto <D.18385>;
            <D.18384>:
            if (__result == 0) goto <D.18386>; else goto <D.18387>;
            <D.18386>:
            D.18388 = &MEM[(void *)"" + 3B];
            D.18389 = *D.18388;
            D.18390 = (int) D.18389;
            D.18391 = __s2 + 3;
            D.18392 = *D.18391;
            D.18393 = (int) D.18392;
            __result = D.18390 - D.18393;
            <D.18387>:
            <D.18385>:
            <D.18377>:
            <D.18375>:
            <D.18367>:
            <D.18365>:
          }
          D.17157 = __result;
        }
        iftmp.41 = -D.17157;
        goto <D.18394>;
        <D.18358>:
        D.18093 = (long unsigned int) n;
        D.18094 = D.18093 * 8;
        D.18137 = attribute_values + D.18094;
        D.18138 = *D.18137;
        D.18395 = MEM[(const unsigned char * {ref-all})D.18138];
        iftmp.41 = (int) D.18395;
        <D.18394>:
        D.17158 = iftmp.41;
      }
      if (D.17158 == 0) goto <D.18396>; else goto <D.18397>;
      <D.18396>:
      return;
      <D.18397>:
      D.18093 = (long unsigned int) n;
      D.18094 = D.18093 * 8;
      D.18137 = attribute_values + D.18094;
      D.18138 = *D.18137;
      versions = monoeg_g_strsplit (D.18138, "-", 2);
      D.18398 = *versions;
      version = monoeg_g_strsplit (D.18398, ".", 4);
      numbers = version;
      D.18400 = *numbers;
      if (D.18400 != 0B) goto <D.18401>; else goto <D.18402>;
      <D.18401>:
      numbers.43 = numbers;
      numbers = numbers.43 + 8;
      D.18404 = *numbers.43;
      iftmp.42 = atoi (D.18404);
      goto <D.18405>;
      <D.18402>:
      iftmp.42 = -1;
      <D.18405>:
      major = iftmp.42;
      D.18400 = *numbers;
      if (D.18400 != 0B) goto <D.18407>; else goto <D.18408>;
      <D.18407>:
      numbers.45 = numbers;
      numbers = numbers.45 + 8;
      D.18410 = *numbers.45;
      iftmp.44 = atoi (D.18410);
      goto <D.18411>;
      <D.18408>:
      iftmp.44 = -1;
      <D.18411>:
      minor = iftmp.44;
      D.18400 = *numbers;
      if (D.18400 != 0B) goto <D.18413>; else goto <D.18414>;
      <D.18413>:
      numbers.47 = numbers;
      numbers = numbers.47 + 8;
      D.18416 = *numbers.47;
      iftmp.46 = atoi (D.18416);
      goto <D.18417>;
      <D.18414>:
      iftmp.46 = -1;
      <D.18417>:
      build = iftmp.46;
      D.18400 = *numbers;
      if (D.18400 != 0B) goto <D.18419>; else goto <D.18420>;
      <D.18419>:
      D.18400 = *numbers;
      iftmp.48 = atoi (D.18400);
      goto <D.18421>;
      <D.18420>:
      iftmp.48 = -1;
      <D.18421>:
      revision = iftmp.48;
      monoeg_g_strfreev (version);
      if (major < 0) goto <D.18422>; else goto <D.18424>;
      <D.18424>:
      if (minor < 0) goto <D.18422>; else goto <D.18425>;
      <D.18425>:
      if (build < 0) goto <D.18422>; else goto <D.18426>;
      <D.18426>:
      if (revision < 0) goto <D.18422>; else goto <D.18423>;
      <D.18422>:
      monoeg_g_strfreev (versions);
      return;
      <D.18423>:
      D.18427 = (short unsigned int) major;
      info->old_version_bottom.major = D.18427;
      D.18428 = (short unsigned int) minor;
      info->old_version_bottom.minor = D.18428;
      D.18429 = (short unsigned int) build;
      info->old_version_bottom.build = D.18429;
      D.18430 = (short unsigned int) revision;
      info->old_version_bottom.revision = D.18430;
      info->has_old_version_bottom = 1;
      D.18431 = versions + 8;
      D.18432 = *D.18431;
      if (D.18432 == 0B) goto <D.18433>; else goto <D.18434>;
      <D.18433>:
      monoeg_g_strfreev (versions);
      // predicted unlikely by continue predictor.
      goto <D.17159>;
      <D.18434>:
      D.18431 = versions + 8;
      D.18432 = *D.18431;
      version = monoeg_g_strsplit (D.18432, ".", 4);
      numbers = version;
      D.18400 = *numbers;
      if (D.18400 != 0B) goto <D.18436>; else goto <D.18437>;
      <D.18436>:
      numbers.50 = numbers;
      numbers = numbers.50 + 8;
      D.18439 = *numbers.50;
      iftmp.49 = atoi (D.18439);
      goto <D.18440>;
      <D.18437>:
      iftmp.49 = -1;
      <D.18440>:
      major = iftmp.49;
      D.18400 = *numbers;
      if (D.18400 != 0B) goto <D.18442>; else goto <D.18443>;
      <D.18442>:
      numbers.52 = numbers;
      numbers = numbers.52 + 8;
      D.18445 = *numbers.52;
      iftmp.51 = atoi (D.18445);
      goto <D.18446>;
      <D.18443>:
      iftmp.51 = -1;
      <D.18446>:
      minor = iftmp.51;
      D.18400 = *numbers;
      if (D.18400 != 0B) goto <D.18448>; else goto <D.18449>;
      <D.18448>:
      numbers.54 = numbers;
      numbers = numbers.54 + 8;
      D.18451 = *numbers.54;
      iftmp.53 = atoi (D.18451);
      goto <D.18452>;
      <D.18449>:
      iftmp.53 = -1;
      <D.18452>:
      build = iftmp.53;
      D.18400 = *numbers;
      if (D.18400 != 0B) goto <D.18454>; else goto <D.18455>;
      <D.18454>:
      D.18400 = *numbers;
      iftmp.55 = atoi (D.18400);
      goto <D.18456>;
      <D.18455>:
      iftmp.55 = 1;
      <D.18456>:
      revision = iftmp.55;
      monoeg_g_strfreev (version);
      if (major < 0) goto <D.18457>; else goto <D.18459>;
      <D.18459>:
      if (minor < 0) goto <D.18457>; else goto <D.18460>;
      <D.18460>:
      if (build < 0) goto <D.18457>; else goto <D.18461>;
      <D.18461>:
      if (revision < 0) goto <D.18457>; else goto <D.18458>;
      <D.18457>:
      monoeg_g_strfreev (versions);
      return;
      <D.18458>:
      D.18427 = (short unsigned int) major;
      info->old_version_top.major = D.18427;
      D.18428 = (short unsigned int) minor;
      info->old_version_top.minor = D.18428;
      D.18429 = (short unsigned int) build;
      info->old_version_top.build = D.18429;
      D.18430 = (short unsigned int) revision;
      info->old_version_top.revision = D.18430;
      info->has_old_version_top = 1;
      monoeg_g_strfreev (versions);
    }
    goto <D.18462>;
    <D.18355>:
    {
      size_t __s1_len;
      size_t __s2_len;

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

        __s2 = attribute_name;
        D.18466 = "newVersion";
        D.18467 = MEM[(const unsigned char *)D.18466];
        D.18468 = (int) D.18467;
        D.18469 = *__s2;
        D.18470 = (int) D.18469;
        __result = D.18468 - D.18470;
        {
          if (__s2_len != 0) goto <D.18471>; else goto <D.18472>;
          <D.18471>:
          if (__result == 0) goto <D.18473>; else goto <D.18474>;
          <D.18473>:
          D.18475 = &MEM[(void *)"newVersion" + 1B];
          D.18476 = *D.18475;
          D.18477 = (int) D.18476;
          D.18478 = __s2 + 1;
          D.18479 = *D.18478;
          D.18480 = (int) D.18479;
          __result = D.18477 - D.18480;
          if (__s2_len > 1) goto <D.18481>; else goto <D.18482>;
          <D.18481>:
          if (__result == 0) goto <D.18483>; else goto <D.18484>;
          <D.18483>:
          D.18485 = &MEM[(void *)"newVersion" + 2B];
          D.18486 = *D.18485;
          D.18487 = (int) D.18486;
          D.18488 = __s2 + 2;
          D.18489 = *D.18488;
          D.18490 = (int) D.18489;
          __result = D.18487 - D.18490;
          if (__s2_len > 2) goto <D.18491>; else goto <D.18492>;
          <D.18491>:
          if (__result == 0) goto <D.18493>; else goto <D.18494>;
          <D.18493>:
          D.18495 = &MEM[(void *)"newVersion" + 3B];
          D.18496 = *D.18495;
          D.18497 = (int) D.18496;
          D.18498 = __s2 + 3;
          D.18499 = *D.18498;
          D.18500 = (int) D.18499;
          __result = D.18497 - D.18500;
          <D.18494>:
          <D.18492>:
          <D.18484>:
          <D.18482>:
          <D.18474>:
          <D.18472>:
        }
        D.17167 = __result;
      }
      iftmp.56 = -D.17167;
      goto <D.18501>;
      <D.18465>:
      iftmp.56 = __builtin_strcmp (attribute_name, "newVersion");
      <D.18501>:
      D.17168 = iftmp.56;
    }
    if (D.17168 == 0) goto <D.18502>; else goto <D.18503>;
    <D.18502>:
    {
      gchar * * numbers;
      gchar * * version;

      {
        size_t __s1_len;
        size_t __s2_len;

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

          D.18093 = (long unsigned int) n;
          D.18094 = D.18093 * 8;
          D.18137 = attribute_values + D.18094;
          __s2 = *D.18137;
          D.18359 = "";
          D.18360 = MEM[(const unsigned char *)D.18359];
          D.18361 = (int) D.18360;
          D.18507 = *__s2;
          D.18508 = (int) D.18507;
          __result = D.18361 - D.18508;
          {
            if (__s2_len != 0) goto <D.18509>; else goto <D.18510>;
            <D.18509>:
            if (__result == 0) goto <D.18511>; else goto <D.18512>;
            <D.18511>:
            D.18368 = &MEM[(void *)"" + 1B];
            D.18369 = *D.18368;
            D.18370 = (int) D.18369;
            D.18513 = __s2 + 1;
            D.18514 = *D.18513;
            D.18515 = (int) D.18514;
            __result = D.18370 - D.18515;
            if (__s2_len > 1) goto <D.18516>; else goto <D.18517>;
            <D.18516>:
            if (__result == 0) goto <D.18518>; else goto <D.18519>;
            <D.18518>:
            D.18378 = &MEM[(void *)"" + 2B];
            D.18379 = *D.18378;
            D.18380 = (int) D.18379;
            D.18520 = __s2 + 2;
            D.18521 = *D.18520;
            D.18522 = (int) D.18521;
            __result = D.18380 - D.18522;
            if (__s2_len > 2) goto <D.18523>; else goto <D.18524>;
            <D.18523>:
            if (__result == 0) goto <D.18525>; else goto <D.18526>;
            <D.18525>:
            D.18388 = &MEM[(void *)"" + 3B];
            D.18389 = *D.18388;
            D.18390 = (int) D.18389;
            D.18527 = __s2 + 3;
            D.18528 = *D.18527;
            D.18529 = (int) D.18528;
            __result = D.18390 - D.18529;
            <D.18526>:
            <D.18524>:
            <D.18519>:
            <D.18517>:
            <D.18512>:
            <D.18510>:
          }
          D.17178 = __result;
        }
        iftmp.57 = -D.17178;
        goto <D.18530>;
        <D.18506>:
        D.18093 = (long unsigned int) n;
        D.18094 = D.18093 * 8;
        D.18137 = attribute_values + D.18094;
        D.18138 = *D.18137;
        D.18395 = MEM[(const unsigned char * {ref-all})D.18138];
        iftmp.57 = (int) D.18395;
        <D.18530>:
        D.17179 = iftmp.57;
      }
      if (D.17179 == 0) goto <D.18531>; else goto <D.18532>;
      <D.18531>:
      return;
      <D.18532>:
      D.18093 = (long unsigned int) n;
      D.18094 = D.18093 * 8;
      D.18137 = attribute_values + D.18094;
      D.18138 = *D.18137;
      version = monoeg_g_strsplit (D.18138, ".", 4);
      numbers = version;
      D.18534 = *numbers;
      if (D.18534 != 0B) goto <D.18535>; else goto <D.18536>;
      <D.18535>:
      numbers.59 = numbers;
      numbers = numbers.59 + 8;
      D.18538 = *numbers.59;
      D.18539 = atoi (D.18538);
      iftmp.58 = (guint16) D.18539;
      goto <D.18540>;
      <D.18536>:
      iftmp.58 = 65535;
      <D.18540>:
      info->new_version.major = iftmp.58;
      D.18534 = *numbers;
      if (D.18534 != 0B) goto <D.18542>; else goto <D.18543>;
      <D.18542>:
      numbers.61 = numbers;
      numbers = numbers.61 + 8;
      D.18545 = *numbers.61;
      D.18546 = atoi (D.18545);
      iftmp.60 = (guint16) D.18546;
      goto <D.18547>;
      <D.18543>:
      iftmp.60 = 65535;
      <D.18547>:
      info->new_version.minor = iftmp.60;
      D.18534 = *numbers;
      if (D.18534 != 0B) goto <D.18549>; else goto <D.18550>;
      <D.18549>:
      numbers.63 = numbers;
      numbers = numbers.63 + 8;
      D.18552 = *numbers.63;
      D.18553 = atoi (D.18552);
      iftmp.62 = (guint16) D.18553;
      goto <D.18554>;
      <D.18550>:
      iftmp.62 = 65535;
      <D.18554>:
      info->new_version.build = iftmp.62;
      D.18534 = *numbers;
      if (D.18534 != 0B) goto <D.18556>; else goto <D.18557>;
      <D.18556>:
      D.18534 = *numbers;
      D.18558 = atoi (D.18534);
      iftmp.64 = (guint16) D.18558;
      goto <D.18559>;
      <D.18557>:
      iftmp.64 = 65535;
      <D.18559>:
      info->new_version.revision = iftmp.64;
      info->has_new_version = 1;
      monoeg_g_strfreev (version);
    }
    <D.18503>:
    <D.18462>:
  }
  <D.17159>:
  n = n + 1;
  <D.17181>:
  D.18093 = (long unsigned int) n;
  D.18094 = D.18093 * 8;
  D.18095 = attribute_names + D.18094;
  D.18272 = *D.18095;
  if (D.18272 != 0B) goto <D.17180>; else goto <D.17182>;
  <D.17182>:
  <D.18314>:
  <D.18273>:
}


memset (void * __dest, int __ch, size_t __len)
{
  int D.18563;
  int D.18568;
  void * D.18570;
  long unsigned int D.18571;

  D.18563 = __builtin_constant_p (__len);
  if (D.18563 != 0) goto <D.18564>; else goto <D.18565>;
  <D.18564>:
  if (__len == 0) goto <D.18566>; else goto <D.18567>;
  <D.18566>:
  D.18568 = __builtin_constant_p (__ch);
  if (D.18568 == 0) goto <D.18561>; else goto <D.18569>;
  <D.18569>:
  if (__ch != 0) goto <D.18561>; else goto <D.18562>;
  <D.18561>:
  __warn_memset_zero_len ();
  D.18570 = __dest;
  return D.18570;
  <D.18562>:
  <D.18567>:
  <D.18565>:
  D.18571 = __builtin_object_size (__dest, 0);
  D.18570 = __builtin___memset_chk (__dest, __ch, __len, D.18571);
  return D.18570;
}


atoi (const char * __nptr)
{
  int D.18573;
  long int D.18574;

  D.18574 = strtol (__nptr, 0B, 10);
  D.18573 = (int) D.18574;
  return D.18573;
}


mono_config_parse_assembly_bindings (const char * filename, int amajor, int aminor, void * user_data, void (*<T1c68>) (struct MonoAssemblyBindingInfo *, void *) infocb)
{
  struct MonoAssemblyBindingInfo info;
  struct ParserUserData pud;
  struct ParseState state;

  try
    {
      info.major = amajor;
      info.minor = aminor;
      pud.info = &info;
      pud.info_parsed = infocb;
      pud.user_data = user_data;
      state.current = &config_assemblybinding_parser;
      state.user_data = &pud;
      state.assembly = 0B;
      state.inited = 1;
      mono_config_parse_file_with_context (&state, filename);
    }
  finally
    {
      info = {CLOBBER};
      pud = {CLOBBER};
      state = {CLOBBER};
    }
}


assembly_binding_end (void * user_data, const char * element_name)
{
  int D.17056;
  int iftmp.65;
  int D.17055;
  const char[18] * D.18579;
  unsigned char D.18580;
  int D.18581;
  unsigned char D.18582;
  int D.18583;
  const unsigned char * D.18588;
  unsigned char D.18589;
  int D.18590;
  const unsigned char * D.18591;
  unsigned char D.18592;
  int D.18593;
  const unsigned char * D.18598;
  unsigned char D.18599;
  int D.18600;
  const unsigned char * D.18601;
  unsigned char D.18602;
  int D.18603;
  const unsigned char * D.18608;
  unsigned char D.18609;
  int D.18610;
  const unsigned char * D.18611;
  unsigned char D.18612;
  int D.18613;
  void (*<T1c68>) (struct MonoAssemblyBindingInfo *, void *) D.18617;
  struct MonoAssemblyBindingInfo * D.18620;
  void * D.18623;
  char * D.18624;
  char * D.18625;
  struct ParserUserData * pud;

  pud = user_data;
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = element_name;
      D.18579 = "dependentAssembly";
      D.18580 = MEM[(const unsigned char *)D.18579];
      D.18581 = (int) D.18580;
      D.18582 = *__s2;
      D.18583 = (int) D.18582;
      __result = D.18581 - D.18583;
      {
        if (__s2_len != 0) goto <D.18584>; else goto <D.18585>;
        <D.18584>:
        if (__result == 0) goto <D.18586>; else goto <D.18587>;
        <D.18586>:
        D.18588 = &MEM[(void *)"dependentAssembly" + 1B];
        D.18589 = *D.18588;
        D.18590 = (int) D.18589;
        D.18591 = __s2 + 1;
        D.18592 = *D.18591;
        D.18593 = (int) D.18592;
        __result = D.18590 - D.18593;
        if (__s2_len > 1) goto <D.18594>; else goto <D.18595>;
        <D.18594>:
        if (__result == 0) goto <D.18596>; else goto <D.18597>;
        <D.18596>:
        D.18598 = &MEM[(void *)"dependentAssembly" + 2B];
        D.18599 = *D.18598;
        D.18600 = (int) D.18599;
        D.18601 = __s2 + 2;
        D.18602 = *D.18601;
        D.18603 = (int) D.18602;
        __result = D.18600 - D.18603;
        if (__s2_len > 2) goto <D.18604>; else goto <D.18605>;
        <D.18604>:
        if (__result == 0) goto <D.18606>; else goto <D.18607>;
        <D.18606>:
        D.18608 = &MEM[(void *)"dependentAssembly" + 3B];
        D.18609 = *D.18608;
        D.18610 = (int) D.18609;
        D.18611 = __s2 + 3;
        D.18612 = *D.18611;
        D.18613 = (int) D.18612;
        __result = D.18610 - D.18613;
        <D.18607>:
        <D.18605>:
        <D.18597>:
        <D.18595>:
        <D.18587>:
        <D.18585>:
      }
      D.17055 = __result;
    }
    iftmp.65 = -D.17055;
    goto <D.18614>;
    <D.18578>:
    iftmp.65 = __builtin_strcmp (element_name, "dependentAssembly");
    <D.18614>:
    D.17056 = iftmp.65;
  }
  if (D.17056 == 0) goto <D.18615>; else goto <D.18616>;
  <D.18615>:
  D.18617 = pud->info_parsed;
  if (D.18617 != 0B) goto <D.18618>; else goto <D.18619>;
  <D.18618>:
  D.18620 = pud->info;
  if (D.18620 != 0B) goto <D.18621>; else goto <D.18622>;
  <D.18621>:
  D.18617 = pud->info_parsed;
  D.18620 = pud->info;
  D.18623 = pud->user_data;
  D.18617 (D.18620, D.18623);
  D.18620 = pud->info;
  D.18624 = D.18620->name;
  monoeg_g_free (D.18624);
  D.18620 = pud->info;
  D.18625 = D.18620->culture;
  monoeg_g_free (D.18625);
  <D.18622>:
  <D.18619>:
  <D.18616>:
}


mono_config_set_server_mode (mono_bool server_mode)
{
  mono_server_mode = server_mode;
}


mono_config_is_server_mode ()
{
  mono_bool D.18626;

  D.18626 = mono_server_mode;
  return D.18626;
}


