ves_icall_System_Globalization_CultureInfo_construct_datetime_format (struct MonoCultureInfo * this)
{
  int D.17257;
  _Bool D.17258;
  long int D.17259;
  long int D.17260;
  unsigned char D.17263;
  struct MonoArray * * D.17264;
  const stridx_t[7] * D.17265;
  struct MonoArray * D.17266;
  struct MonoArray * * D.17267;
  const stridx_t[13] * D.17268;
  struct MonoArray * D.17269;
  struct MonoString * * D.17270;
  short unsigned int D.17271;
  sizetype D.17272;
  const char * D.17273;
  struct MonoString * D.17274;
  signed char D.17275;
  unsigned int D.17276;
  struct MonoString * * D.17277;
  short unsigned int D.17278;
  sizetype D.17279;
  const char * D.17280;
  struct MonoString * D.17281;
  struct MonoArray * * D.17282;
  const stridx_t[7] * D.17283;
  struct MonoArray * D.17284;
  struct MonoArray * * D.17285;
  const stridx_t[7] * D.17286;
  struct MonoArray * D.17287;
  signed char D.17288;
  unsigned int D.17289;
  struct MonoString * * D.17290;
  short unsigned int D.17291;
  sizetype D.17292;
  const char * D.17293;
  struct MonoString * D.17294;
  struct MonoString * * D.17295;
  short unsigned int D.17296;
  sizetype D.17297;
  const char * D.17298;
  struct MonoString * D.17299;
  struct MonoString * * D.17300;
  short unsigned int D.17301;
  sizetype D.17302;
  const char * D.17303;
  struct MonoString * D.17304;
  struct MonoArray * * D.17305;
  const stridx_t[13] * D.17306;
  struct MonoArray * D.17307;
  struct MonoString * * D.17308;
  short unsigned int D.17309;
  sizetype D.17310;
  const char * D.17311;
  struct MonoString * D.17312;
  struct MonoString * * D.17313;
  short unsigned int D.17314;
  sizetype D.17315;
  const char * D.17316;
  struct MonoString * D.17317;
  struct MonoString * * D.17318;
  short unsigned int D.17319;
  sizetype D.17320;
  const char * D.17321;
  struct MonoString * D.17322;
  struct MonoString * * D.17323;
  short unsigned int D.17324;
  sizetype D.17325;
  const char * D.17326;
  struct MonoString * D.17327;
  struct MonoString * * D.17328;
  short unsigned int D.17329;
  sizetype D.17330;
  const char * D.17331;
  struct MonoString * D.17332;
  struct MonoArray * * D.17333;
  const stridx_t[14] * D.17334;
  struct MonoArray * D.17335;
  struct MonoArray * * D.17336;
  const stridx_t[8] * D.17337;
  struct MonoArray * D.17338;
  struct MonoArray * * D.17339;
  const stridx_t[12] * D.17340;
  struct MonoArray * D.17341;
  struct MonoArray * * D.17342;
  const stridx_t[9] * D.17343;
  struct MonoArray * D.17344;
  struct MonoArray * * D.17345;
  const stridx_t[13] * D.17346;
  struct MonoArray * D.17347;
  struct MonoArray * * D.17348;
  const stridx_t[13] * D.17349;
  struct MonoArray * D.17350;
  struct MonoDomain * domain;
  struct MonoDateTimeFormatInfo * datetime;
  const struct DateTimeFormatEntry * dfe;

  D.17257 = this->datetime_index;
  D.17258 = D.17257 < 0;
  D.17259 = (long int) D.17258;
  D.17260 = __builtin_expect (D.17259, 0);
  if (D.17260 != 0) goto <D.17261>; else goto <D.17262>;
  <D.17261>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 169, "this->datetime_index >= 0");
  <D.17262>:
  datetime = this->datetime_format;
  D.17257 = this->datetime_index;
  dfe = &datetime_format_entries[D.17257];
  domain = mono_domain_get ();
  D.17263 = this->is_read_only;
  datetime->readOnly = D.17263;
  D.17264 = &datetime->AbbreviatedDayNames;
  D.17265 = &dfe->abbreviated_day_names;
  D.17266 = create_names_array_idx (D.17265, 7);
  mono_gc_wbarrier_set_field (datetime, D.17264, D.17266);
  D.17267 = &datetime->AbbreviatedMonthNames;
  D.17268 = &dfe->abbreviated_month_names;
  D.17269 = create_names_array_idx (D.17268, 13);
  mono_gc_wbarrier_set_field (datetime, D.17267, D.17269);
  D.17270 = &datetime->AMDesignator;
  D.17271 = dfe->am_designator;
  D.17272 = (sizetype) D.17271;
  D.17273 = &locale_strings + D.17272;
  D.17274 = mono_string_new (domain, D.17273);
  mono_gc_wbarrier_set_field (datetime, D.17270, D.17274);
  D.17275 = dfe->calendar_week_rule;
  D.17276 = (unsigned int) D.17275;
  datetime->CalendarWeekRule = D.17276;
  D.17277 = &datetime->DateSeparator;
  D.17278 = dfe->date_separator;
  D.17279 = (sizetype) D.17278;
  D.17280 = &locale_strings + D.17279;
  D.17281 = mono_string_new (domain, D.17280);
  mono_gc_wbarrier_set_field (datetime, D.17277, D.17281);
  D.17282 = &datetime->DayNames;
  D.17283 = &dfe->day_names;
  D.17284 = create_names_array_idx (D.17283, 7);
  mono_gc_wbarrier_set_field (datetime, D.17282, D.17284);
  D.17285 = &datetime->ShortestDayNames;
  D.17286 = &dfe->shortest_day_names;
  D.17287 = create_names_array_idx (D.17286, 7);
  mono_gc_wbarrier_set_field (datetime, D.17285, D.17287);
  D.17288 = dfe->first_day_of_week;
  D.17289 = (unsigned int) D.17288;
  datetime->FirstDayOfWeek = D.17289;
  D.17290 = &datetime->LongDatePattern;
  D.17291 = dfe->long_date_pattern;
  D.17292 = (sizetype) D.17291;
  D.17293 = &locale_strings + D.17292;
  D.17294 = mono_string_new (domain, D.17293);
  mono_gc_wbarrier_set_field (datetime, D.17290, D.17294);
  D.17295 = &datetime->LongTimePattern;
  D.17296 = dfe->long_time_pattern;
  D.17297 = (sizetype) D.17296;
  D.17298 = &locale_strings + D.17297;
  D.17299 = mono_string_new (domain, D.17298);
  mono_gc_wbarrier_set_field (datetime, D.17295, D.17299);
  D.17300 = &datetime->MonthDayPattern;
  D.17301 = dfe->month_day_pattern;
  D.17302 = (sizetype) D.17301;
  D.17303 = &locale_strings + D.17302;
  D.17304 = mono_string_new (domain, D.17303);
  mono_gc_wbarrier_set_field (datetime, D.17300, D.17304);
  D.17305 = &datetime->MonthNames;
  D.17306 = &dfe->month_names;
  D.17307 = create_names_array_idx (D.17306, 13);
  mono_gc_wbarrier_set_field (datetime, D.17305, D.17307);
  D.17308 = &datetime->PMDesignator;
  D.17309 = dfe->pm_designator;
  D.17310 = (sizetype) D.17309;
  D.17311 = &locale_strings + D.17310;
  D.17312 = mono_string_new (domain, D.17311);
  mono_gc_wbarrier_set_field (datetime, D.17308, D.17312);
  D.17313 = &datetime->ShortDatePattern;
  D.17314 = dfe->short_date_pattern;
  D.17315 = (sizetype) D.17314;
  D.17316 = &locale_strings + D.17315;
  D.17317 = mono_string_new (domain, D.17316);
  mono_gc_wbarrier_set_field (datetime, D.17313, D.17317);
  D.17318 = &datetime->ShortTimePattern;
  D.17319 = dfe->short_time_pattern;
  D.17320 = (sizetype) D.17319;
  D.17321 = &locale_strings + D.17320;
  D.17322 = mono_string_new (domain, D.17321);
  mono_gc_wbarrier_set_field (datetime, D.17318, D.17322);
  D.17323 = &datetime->TimeSeparator;
  D.17324 = dfe->time_separator;
  D.17325 = (sizetype) D.17324;
  D.17326 = &locale_strings + D.17325;
  D.17327 = mono_string_new (domain, D.17326);
  mono_gc_wbarrier_set_field (datetime, D.17323, D.17327);
  D.17328 = &datetime->YearMonthPattern;
  D.17329 = dfe->year_month_pattern;
  D.17330 = (sizetype) D.17329;
  D.17331 = &locale_strings + D.17330;
  D.17332 = mono_string_new (domain, D.17331);
  mono_gc_wbarrier_set_field (datetime, D.17328, D.17332);
  D.17333 = &datetime->ShortDatePatterns;
  D.17334 = &dfe->short_date_patterns;
  D.17335 = create_names_array_idx_dynamic (D.17334, 14);
  mono_gc_wbarrier_set_field (datetime, D.17333, D.17335);
  D.17336 = &datetime->LongDatePatterns;
  D.17337 = &dfe->long_date_patterns;
  D.17338 = create_names_array_idx_dynamic (D.17337, 8);
  mono_gc_wbarrier_set_field (datetime, D.17336, D.17338);
  D.17339 = &datetime->ShortTimePatterns;
  D.17340 = &dfe->short_time_patterns;
  D.17341 = create_names_array_idx_dynamic (D.17340, 12);
  mono_gc_wbarrier_set_field (datetime, D.17339, D.17341);
  D.17342 = &datetime->LongTimePatterns;
  D.17343 = &dfe->long_time_patterns;
  D.17344 = create_names_array_idx_dynamic (D.17343, 9);
  mono_gc_wbarrier_set_field (datetime, D.17342, D.17344);
  D.17345 = &datetime->GenitiveMonthNames;
  D.17346 = &dfe->month_genitive_names;
  D.17347 = create_names_array_idx (D.17346, 13);
  mono_gc_wbarrier_set_field (datetime, D.17345, D.17347);
  D.17348 = &datetime->GenitiveAbbreviatedMonthNames;
  D.17349 = &dfe->abbreviated_month_genitive_names;
  D.17350 = create_names_array_idx (D.17349, 13);
  mono_gc_wbarrier_set_field (datetime, D.17348, D.17350);
}


create_names_array_idx_dynamic (const guint16 * names, int ml)
{
  struct MonoArray * D.17353;
  long unsigned int D.17354;
  long unsigned int D.17355;
  const guint16 * D.17356;
  short unsigned int D.17357;
  struct MonoDomain * D.17359;
  struct MonoClass * D.17003;
  struct MonoClass * tmp_klass.0;
  struct MonoClass * D.17363;
  struct MonoClass * tmp_klass.1;
  _Bool D.17365;
  long int D.17366;
  long int D.17367;
  struct MonoVTable * D.17370;
  long unsigned int D.17371;
  long unsigned int D.17372;
  sizetype D.17373;
  const char * D.17374;
  struct MonoString * D.17375;
  struct MonoArray * ret;
  struct MonoDomain * domain;
  int i;
  int len;

  len = 0;
  if (names == 0B) goto <D.17351>; else goto <D.17352>;
  <D.17351>:
  D.17353 = 0B;
  return D.17353;
  <D.17352>:
  domain = mono_domain_get ();
  i = 0;
  goto <D.17001>;
  <D.17000>:
  D.17354 = (long unsigned int) i;
  D.17355 = D.17354 * 2;
  D.17356 = names + D.17355;
  D.17357 = *D.17356;
  if (D.17357 == 0) goto <D.16999>; else goto <D.17358>;
  <D.17358>:
  len = len + 1;
  i = i + 1;
  <D.17001>:
  if (i < ml) goto <D.17000>; else goto <D.16999>;
  <D.16999>:
  D.17359 = mono_domain_get ();
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.0 = tmp_klass;
      if (tmp_klass.0 == 0B) goto <D.17361>; else goto <D.17362>;
      <D.17361>:
      D.17363 = mono_get_string_class ();
      tmp_klass.1 = mono_array_class_get (D.17363, 1);
      tmp_klass = tmp_klass.1;
      tmp_klass.0 = tmp_klass;
      D.17365 = tmp_klass.0 == 0B;
      D.17366 = (long int) D.17365;
      D.17367 = __builtin_expect (D.17366, 0);
      if (D.17367 != 0) goto <D.17368>; else goto <D.17369>;
      <D.17368>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 152, "tmp_klass");
      <D.17369>:
      <D.17362>:
    }
    D.17003 = tmp_klass;
  }
  D.17370 = mono_class_vtable (D.17359, D.17003);
  D.17371 = (long unsigned int) len;
  ret = mono_array_new_specific (D.17370, D.17371);
  i = 0;
  goto <D.17006>;
  <D.17005>:
  {
    void * * __p;

    D.17372 = (long unsigned int) i;
    __p = mono_array_addr_with_size (ret, 8, D.17372);
    D.17354 = (long unsigned int) i;
    D.17355 = D.17354 * 2;
    D.17356 = names + D.17355;
    D.17357 = *D.17356;
    D.17373 = (sizetype) D.17357;
    D.17374 = &locale_strings + D.17373;
    D.17375 = mono_string_new (domain, D.17374);
    mono_gc_wbarrier_set_arrayref (ret, __p, D.17375);
  }
  i = i + 1;
  <D.17006>:
  if (i < len) goto <D.17005>; else goto <D.17007>;
  <D.17007>:
  D.17353 = ret;
  return D.17353;
}


create_names_array_idx (const guint16 * names, int ml)
{
  struct MonoArray * D.17379;
  struct MonoDomain * D.17380;
  struct MonoClass * D.16986;
  struct MonoClass * tmp_klass.2;
  struct MonoClass * D.17384;
  struct MonoClass * tmp_klass.3;
  _Bool D.17386;
  long int D.17387;
  long int D.17388;
  struct MonoVTable * D.17391;
  long unsigned int D.17392;
  long unsigned int D.17393;
  long unsigned int D.17394;
  long unsigned int D.17395;
  const guint16 * D.17396;
  short unsigned int D.17397;
  sizetype D.17398;
  const char * D.17399;
  struct MonoString * D.17400;
  struct MonoArray * ret;
  struct MonoDomain * domain;
  int i;

  if (names == 0B) goto <D.17377>; else goto <D.17378>;
  <D.17377>:
  D.17379 = 0B;
  return D.17379;
  <D.17378>:
  domain = mono_domain_get ();
  D.17380 = mono_domain_get ();
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.2 = tmp_klass;
      if (tmp_klass.2 == 0B) goto <D.17382>; else goto <D.17383>;
      <D.17382>:
      D.17384 = mono_get_string_class ();
      tmp_klass.3 = mono_array_class_get (D.17384, 1);
      tmp_klass = tmp_klass.3;
      tmp_klass.2 = tmp_klass;
      D.17386 = tmp_klass.2 == 0B;
      D.17387 = (long int) D.17386;
      D.17388 = __builtin_expect (D.17387, 0);
      if (D.17388 != 0) goto <D.17389>; else goto <D.17390>;
      <D.17389>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 126, "tmp_klass");
      <D.17390>:
      <D.17383>:
    }
    D.16986 = tmp_klass;
  }
  D.17391 = mono_class_vtable (D.17380, D.16986);
  D.17392 = (long unsigned int) ml;
  ret = mono_array_new_specific (D.17391, D.17392);
  i = 0;
  goto <D.16989>;
  <D.16988>:
  {
    void * * __p;

    D.17393 = (long unsigned int) i;
    __p = mono_array_addr_with_size (ret, 8, D.17393);
    D.17394 = (long unsigned int) i;
    D.17395 = D.17394 * 2;
    D.17396 = names + D.17395;
    D.17397 = *D.17396;
    D.17398 = (sizetype) D.17397;
    D.17399 = &locale_strings + D.17398;
    D.17400 = mono_string_new (domain, D.17399);
    mono_gc_wbarrier_set_arrayref (ret, __p, D.17400);
  }
  i = i + 1;
  <D.16989>:
  if (i < ml) goto <D.16988>; else goto <D.16990>;
  <D.16990>:
  D.17379 = ret;
  return D.17379;
}


ves_icall_System_Globalization_CultureInfo_construct_number_format (struct MonoCultureInfo * this)
{
  struct MonoNumberFormatInfo * D.17402;
  _Bool D.17403;
  long int D.17404;
  long int D.17405;
  int D.17408;
  unsigned char D.17411;
  signed char D.17412;
  int D.17413;
  struct MonoString * * D.17414;
  short unsigned int D.17415;
  sizetype D.17416;
  const char * D.17417;
  struct MonoString * D.17418;
  struct MonoString * * D.17419;
  short unsigned int D.17420;
  sizetype D.17421;
  const char * D.17422;
  struct MonoString * D.17423;
  struct MonoArray * * D.17424;
  const gint[2] * D.17425;
  struct MonoArray * D.17426;
  signed char D.17427;
  int D.17428;
  signed char D.17429;
  int D.17430;
  struct MonoString * * D.17431;
  short unsigned int D.17432;
  sizetype D.17433;
  const char * D.17434;
  struct MonoString * D.17435;
  struct MonoString * * D.17436;
  short unsigned int D.17437;
  sizetype D.17438;
  const char * D.17439;
  struct MonoString * D.17440;
  struct MonoString * * D.17441;
  short unsigned int D.17442;
  sizetype D.17443;
  const char * D.17444;
  struct MonoString * D.17445;
  struct MonoString * * D.17446;
  short unsigned int D.17447;
  sizetype D.17448;
  const char * D.17449;
  struct MonoString * D.17450;
  signed char D.17451;
  unsigned int D.17452;
  struct MonoString * * D.17453;
  short unsigned int D.17454;
  sizetype D.17455;
  const char * D.17456;
  struct MonoString * D.17457;
  struct MonoString * * D.17458;
  short unsigned int D.17459;
  sizetype D.17460;
  const char * D.17461;
  struct MonoString * D.17462;
  struct MonoArray * * D.17463;
  const gint[2] * D.17464;
  struct MonoArray * D.17465;
  signed char D.17466;
  int D.17467;
  signed char D.17468;
  int D.17469;
  struct MonoString * * D.17470;
  short unsigned int D.17471;
  sizetype D.17472;
  const char * D.17473;
  struct MonoString * D.17474;
  struct MonoString * * D.17475;
  short unsigned int D.17476;
  sizetype D.17477;
  const char * D.17478;
  struct MonoString * D.17479;
  struct MonoArray * * D.17480;
  const gint[2] * D.17481;
  struct MonoArray * D.17482;
  signed char D.17483;
  int D.17484;
  signed char D.17485;
  int D.17486;
  struct MonoString * * D.17487;
  short unsigned int D.17488;
  sizetype D.17489;
  const char * D.17490;
  struct MonoString * D.17491;
  struct MonoString * * D.17492;
  short unsigned int D.17493;
  sizetype D.17494;
  const char * D.17495;
  struct MonoString * D.17496;
  struct MonoString * * D.17497;
  short unsigned int D.17498;
  sizetype D.17499;
  const char * D.17500;
  struct MonoString * D.17501;
  struct MonoString * * D.17502;
  short unsigned int D.17503;
  sizetype D.17504;
  const char * D.17505;
  struct MonoString * D.17506;
  struct MonoDomain * domain;
  struct MonoNumberFormatInfo * number;
  const struct NumberFormatEntry * nfe;

  D.17402 = this->number_format;
  D.17403 = D.17402 == 0B;
  D.17404 = (long int) D.17403;
  D.17405 = __builtin_expect (D.17404, 0);
  if (D.17405 != 0) goto <D.17406>; else goto <D.17407>;
  <D.17406>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 217, "this->number_format != 0");
  <D.17407>:
  D.17408 = this->number_index;
  if (D.17408 < 0) goto <D.17409>; else goto <D.17410>;
  <D.17409>:
  return;
  <D.17410>:
  number = this->number_format;
  D.17408 = this->number_index;
  nfe = &number_format_entries[D.17408];
  domain = mono_domain_get ();
  D.17411 = this->is_read_only;
  number->readOnly = D.17411;
  D.17412 = nfe->currency_decimal_digits;
  D.17413 = (int) D.17412;
  number->currencyDecimalDigits = D.17413;
  D.17414 = &number->currencyDecimalSeparator;
  D.17415 = nfe->currency_decimal_separator;
  D.17416 = (sizetype) D.17415;
  D.17417 = &locale_strings + D.17416;
  D.17418 = mono_string_new (domain, D.17417);
  mono_gc_wbarrier_set_field (number, D.17414, D.17418);
  D.17419 = &number->currencyGroupSeparator;
  D.17420 = nfe->currency_group_separator;
  D.17421 = (sizetype) D.17420;
  D.17422 = &locale_strings + D.17421;
  D.17423 = mono_string_new (domain, D.17422);
  mono_gc_wbarrier_set_field (number, D.17419, D.17423);
  D.17424 = &number->currencyGroupSizes;
  D.17425 = &nfe->currency_group_sizes;
  D.17426 = create_group_sizes_array (D.17425, 2);
  mono_gc_wbarrier_set_field (number, D.17424, D.17426);
  D.17427 = nfe->currency_negative_pattern;
  D.17428 = (int) D.17427;
  number->currencyNegativePattern = D.17428;
  D.17429 = nfe->currency_positive_pattern;
  D.17430 = (int) D.17429;
  number->currencyPositivePattern = D.17430;
  D.17431 = &number->currencySymbol;
  D.17432 = nfe->currency_symbol;
  D.17433 = (sizetype) D.17432;
  D.17434 = &locale_strings + D.17433;
  D.17435 = mono_string_new (domain, D.17434);
  mono_gc_wbarrier_set_field (number, D.17431, D.17435);
  D.17436 = &number->naNSymbol;
  D.17437 = nfe->nan_symbol;
  D.17438 = (sizetype) D.17437;
  D.17439 = &locale_strings + D.17438;
  D.17440 = mono_string_new (domain, D.17439);
  mono_gc_wbarrier_set_field (number, D.17436, D.17440);
  D.17441 = &number->negativeInfinitySymbol;
  D.17442 = nfe->negative_infinity_symbol;
  D.17443 = (sizetype) D.17442;
  D.17444 = &locale_strings + D.17443;
  D.17445 = mono_string_new (domain, D.17444);
  mono_gc_wbarrier_set_field (number, D.17441, D.17445);
  D.17446 = &number->negativeSign;
  D.17447 = nfe->negative_sign;
  D.17448 = (sizetype) D.17447;
  D.17449 = &locale_strings + D.17448;
  D.17450 = mono_string_new (domain, D.17449);
  mono_gc_wbarrier_set_field (number, D.17446, D.17450);
  D.17451 = nfe->number_decimal_digits;
  D.17452 = (unsigned int) D.17451;
  number->numberDecimalDigits = D.17452;
  D.17453 = &number->numberDecimalSeparator;
  D.17454 = nfe->number_decimal_separator;
  D.17455 = (sizetype) D.17454;
  D.17456 = &locale_strings + D.17455;
  D.17457 = mono_string_new (domain, D.17456);
  mono_gc_wbarrier_set_field (number, D.17453, D.17457);
  D.17458 = &number->numberGroupSeparator;
  D.17459 = nfe->number_group_separator;
  D.17460 = (sizetype) D.17459;
  D.17461 = &locale_strings + D.17460;
  D.17462 = mono_string_new (domain, D.17461);
  mono_gc_wbarrier_set_field (number, D.17458, D.17462);
  D.17463 = &number->numberGroupSizes;
  D.17464 = &nfe->number_group_sizes;
  D.17465 = create_group_sizes_array (D.17464, 2);
  mono_gc_wbarrier_set_field (number, D.17463, D.17465);
  D.17466 = nfe->number_negative_pattern;
  D.17467 = (int) D.17466;
  number->numberNegativePattern = D.17467;
  D.17468 = nfe->percent_decimal_digits;
  D.17469 = (int) D.17468;
  number->percentDecimalDigits = D.17469;
  D.17470 = &number->percentDecimalSeparator;
  D.17471 = nfe->percent_decimal_separator;
  D.17472 = (sizetype) D.17471;
  D.17473 = &locale_strings + D.17472;
  D.17474 = mono_string_new (domain, D.17473);
  mono_gc_wbarrier_set_field (number, D.17470, D.17474);
  D.17475 = &number->percentGroupSeparator;
  D.17476 = nfe->percent_group_separator;
  D.17477 = (sizetype) D.17476;
  D.17478 = &locale_strings + D.17477;
  D.17479 = mono_string_new (domain, D.17478);
  mono_gc_wbarrier_set_field (number, D.17475, D.17479);
  D.17480 = &number->percentGroupSizes;
  D.17481 = &nfe->percent_group_sizes;
  D.17482 = create_group_sizes_array (D.17481, 2);
  mono_gc_wbarrier_set_field (number, D.17480, D.17482);
  D.17483 = nfe->percent_negative_pattern;
  D.17484 = (int) D.17483;
  number->percentNegativePattern = D.17484;
  D.17485 = nfe->percent_positive_pattern;
  D.17486 = (int) D.17485;
  number->percentPositivePattern = D.17486;
  D.17487 = &number->percentSymbol;
  D.17488 = nfe->percent_symbol;
  D.17489 = (sizetype) D.17488;
  D.17490 = &locale_strings + D.17489;
  D.17491 = mono_string_new (domain, D.17490);
  mono_gc_wbarrier_set_field (number, D.17487, D.17491);
  D.17492 = &number->perMilleSymbol;
  D.17493 = nfe->per_mille_symbol;
  D.17494 = (sizetype) D.17493;
  D.17495 = &locale_strings + D.17494;
  D.17496 = mono_string_new (domain, D.17495);
  mono_gc_wbarrier_set_field (number, D.17492, D.17496);
  D.17497 = &number->positiveInfinitySymbol;
  D.17498 = nfe->positive_infinity_symbol;
  D.17499 = (sizetype) D.17498;
  D.17500 = &locale_strings + D.17499;
  D.17501 = mono_string_new (domain, D.17500);
  mono_gc_wbarrier_set_field (number, D.17497, D.17501);
  D.17502 = &number->positiveSign;
  D.17503 = nfe->positive_sign;
  D.17504 = (sizetype) D.17503;
  D.17505 = &locale_strings + D.17504;
  D.17506 = mono_string_new (domain, D.17505);
  mono_gc_wbarrier_set_field (number, D.17502, D.17506);
}


create_group_sizes_array (const gint * gs, gint ml)
{
  long unsigned int D.17508;
  long unsigned int D.17509;
  const gint * D.17510;
  int D.17511;
  struct MonoDomain * D.17513;
  struct MonoClass * D.16973;
  struct MonoClass * tmp_klass.4;
  struct MonoClass * D.17517;
  struct MonoClass * tmp_klass.5;
  _Bool D.17519;
  long int D.17520;
  long int D.17521;
  struct MonoVTable * D.17524;
  long unsigned int D.17525;
  long unsigned int D.17526;
  struct MonoArray * D.17527;
  struct MonoArray * ret;
  int i;
  int len;

  len = 0;
  i = 0;
  goto <D.16971>;
  <D.16970>:
  D.17508 = (long unsigned int) i;
  D.17509 = D.17508 * 4;
  D.17510 = gs + D.17509;
  D.17511 = *D.17510;
  if (D.17511 == -1) goto <D.16969>; else goto <D.17512>;
  <D.17512>:
  len = len + 1;
  i = i + 1;
  <D.16971>:
  if (i < ml) goto <D.16970>; else goto <D.16969>;
  <D.16969>:
  D.17513 = mono_domain_get ();
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.4 = tmp_klass;
      if (tmp_klass.4 == 0B) goto <D.17515>; else goto <D.17516>;
      <D.17515>:
      D.17517 = mono_get_int32_class ();
      tmp_klass.5 = mono_array_class_get (D.17517, 1);
      tmp_klass = tmp_klass.5;
      tmp_klass.4 = tmp_klass;
      D.17519 = tmp_klass.4 == 0B;
      D.17520 = (long int) D.17519;
      D.17521 = __builtin_expect (D.17520, 0);
      if (D.17521 != 0) goto <D.17522>; else goto <D.17523>;
      <D.17522>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 106, "tmp_klass");
      <D.17523>:
      <D.17516>:
    }
    D.16973 = tmp_klass;
  }
  D.17524 = mono_class_vtable (D.17513, D.16973);
  D.17525 = (long unsigned int) len;
  ret = mono_array_new_specific (D.17524, D.17525);
  i = 0;
  goto <D.16976>;
  <D.16975>:
  {
    gint32 * __p;

    D.17526 = (long unsigned int) i;
    __p = mono_array_addr_with_size (ret, 4, D.17526);
    D.17508 = (long unsigned int) i;
    D.17509 = D.17508 * 4;
    D.17510 = gs + D.17509;
    D.17511 = *D.17510;
    *__p = D.17511;
  }
  i = i + 1;
  <D.16976>:
  if (i < len) goto <D.16975>; else goto <D.16977>;
  <D.16977>:
  D.17527 = ret;
  return D.17527;
}


ves_icall_System_Globalization_CultureInfo_get_current_locale_name ()
{
  struct MonoString * D.17531;
  gchar * locale;
  struct MonoString * ret;
  struct MonoDomain * domain;

  locale = get_current_locale_name ();
  if (locale == 0B) goto <D.17529>; else goto <D.17530>;
  <D.17529>:
  D.17531 = 0B;
  return D.17531;
  <D.17530>:
  domain = mono_domain_get ();
  ret = mono_string_new (domain, locale);
  monoeg_g_free (locale);
  D.17531 = ret;
  return D.17531;
}


get_current_locale_name ()
{
  gchar * D.17535;
  char * locale;
  char * p;
  char * ret;

  locale = get_posix_locale ();
  if (locale == 0B) goto <D.17533>; else goto <D.17534>;
  <D.17533>:
  D.17535 = 0B;
  return D.17535;
  <D.17534>:
  p = __builtin_strchr (locale, 46);
  if (p != 0B) goto <D.17536>; else goto <D.17537>;
  <D.17536>:
  *p = 0;
  <D.17537>:
  p = __builtin_strchr (locale, 64);
  if (p != 0B) goto <D.17538>; else goto <D.17539>;
  <D.17538>:
  *p = 0;
  <D.17539>:
  p = __builtin_strchr (locale, 95);
  if (p != 0B) goto <D.17540>; else goto <D.17541>;
  <D.17540>:
  *p = 45;
  <D.17541>:
  ret = monoeg_g_ascii_strdown (locale, -1);
  monoeg_g_free (locale);
  D.17535 = ret;
  return D.17535;
}


get_posix_locale ()
{
  char * D.17549;
  int D.17051;
  int iftmp.6;
  int D.17050;
  const char[2] * D.17553;
  unsigned char D.17554;
  int D.17555;
  unsigned char D.17556;
  int D.17557;
  const unsigned char * D.17562;
  unsigned char D.17563;
  int D.17564;
  const unsigned char * D.17565;
  unsigned char D.17566;
  int D.17567;
  const unsigned char * D.17572;
  unsigned char D.17573;
  int D.17574;
  const unsigned char * D.17575;
  unsigned char D.17576;
  int D.17577;
  const unsigned char * D.17582;
  unsigned char D.17583;
  int D.17584;
  const unsigned char * D.17585;
  unsigned char D.17586;
  int D.17587;
  const char * locale;

  locale = monoeg_g_getenv ("LC_ALL");
  if (locale == 0B) goto <D.17543>; else goto <D.17544>;
  <D.17543>:
  locale = monoeg_g_getenv ("LANG");
  if (locale == 0B) goto <D.17545>; else goto <D.17546>;
  <D.17545>:
  locale = setlocale (6, 0B);
  <D.17546>:
  <D.17544>:
  if (locale == 0B) goto <D.17547>; else goto <D.17548>;
  <D.17547>:
  D.17549 = 0B;
  return D.17549;
  <D.17548>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = locale;
      D.17553 = "C";
      D.17554 = MEM[(const unsigned char *)D.17553];
      D.17555 = (int) D.17554;
      D.17556 = *__s2;
      D.17557 = (int) D.17556;
      __result = D.17555 - D.17557;
      {
        if (__s2_len != 0) goto <D.17558>; else goto <D.17559>;
        <D.17558>:
        if (__result == 0) goto <D.17560>; else goto <D.17561>;
        <D.17560>:
        D.17562 = &MEM[(void *)"C" + 1B];
        D.17563 = *D.17562;
        D.17564 = (int) D.17563;
        D.17565 = __s2 + 1;
        D.17566 = *D.17565;
        D.17567 = (int) D.17566;
        __result = D.17564 - D.17567;
        if (__s2_len > 1) goto <D.17568>; else goto <D.17569>;
        <D.17568>:
        if (__result == 0) goto <D.17570>; else goto <D.17571>;
        <D.17570>:
        D.17572 = &MEM[(void *)"C" + 2B];
        D.17573 = *D.17572;
        D.17574 = (int) D.17573;
        D.17575 = __s2 + 2;
        D.17576 = *D.17575;
        D.17577 = (int) D.17576;
        __result = D.17574 - D.17577;
        if (__s2_len > 2) goto <D.17578>; else goto <D.17579>;
        <D.17578>:
        if (__result == 0) goto <D.17580>; else goto <D.17581>;
        <D.17580>:
        D.17582 = &MEM[(void *)"C" + 3B];
        D.17583 = *D.17582;
        D.17584 = (int) D.17583;
        D.17585 = __s2 + 3;
        D.17586 = *D.17585;
        D.17587 = (int) D.17586;
        __result = D.17584 - D.17587;
        <D.17581>:
        <D.17579>:
        <D.17571>:
        <D.17569>:
        <D.17561>:
        <D.17559>:
      }
      D.17050 = __result;
    }
    iftmp.6 = -D.17050;
    goto <D.17588>;
    <D.17552>:
    iftmp.6 = __builtin_strcmp (locale, "C");
    <D.17588>:
    D.17051 = iftmp.6;
  }
  if (D.17051 == 0) goto <D.17589>; else goto <D.17590>;
  <D.17589>:
  D.17549 = 0B;
  return D.17549;
  <D.17590>:
  D.17549 = monoeg_strdup (locale);
  return D.17549;
}


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

  if (str != 0B) goto <D.17592>; else goto <D.17593>;
  <D.17592>:
  D.17594 = __strdup (str);
  return D.17594;
  <D.17593>:
  D.17594 = 0B;
  return D.17594;
}


ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_lcid (struct MonoCultureInfo * this, gint lcid)
{
  MonoBoolean D.17598;
  const struct CultureInfoEntry * ci;

  ci = culture_info_entry_from_lcid (lcid);
  if (ci == 0B) goto <D.17596>; else goto <D.17597>;
  <D.17596>:
  D.17598 = 0;
  return D.17598;
  <D.17597>:
  D.17598 = construct_culture (this, ci);
  return D.17598;
}


culture_info_entry_from_lcid (int lcid)
{
  const struct CultureInfoEntry * D.17600;
  const struct CultureInfoEntry * ci;

  ci = mono_binary_search (&lcid, &culture_entries, 283, 56, culture_lcid_locator);
  D.17600 = ci;
  return D.17600;
}


culture_lcid_locator (const void * a, const void * b)
{
  int D.17602;
  int D.17603;
  short int D.17604;
  int D.17605;
  const int * lcid;
  const struct CultureInfoEntry * bb;

  lcid = a;
  bb = b;
  D.17603 = *lcid;
  D.17604 = bb->lcid;
  D.17605 = (int) D.17604;
  D.17602 = D.17603 - D.17605;
  return D.17602;
}


construct_culture (struct MonoCultureInfo * this, const struct CultureInfoEntry * ci)
{
  short int D.17607;
  int D.17608;
  struct MonoString * * D.17609;
  short unsigned int D.17610;
  sizetype D.17611;
  const char * D.17612;
  struct MonoString * D.17613;
  struct MonoString * * D.17614;
  short unsigned int D.17615;
  sizetype D.17616;
  const char * D.17617;
  struct MonoString * D.17618;
  struct MonoString * * D.17619;
  short unsigned int D.17620;
  sizetype D.17621;
  const char * D.17622;
  struct MonoString * D.17623;
  struct MonoString * * D.17624;
  short unsigned int D.17625;
  sizetype D.17626;
  const char * D.17627;
  struct MonoString * D.17628;
  struct MonoString * * D.17629;
  short unsigned int D.17630;
  sizetype D.17631;
  const char * D.17632;
  struct MonoString * D.17633;
  struct MonoString * * D.17634;
  short unsigned int D.17635;
  sizetype D.17636;
  const char * D.17637;
  struct MonoString * D.17638;
  short unsigned int D.17639;
  struct MonoString * * D.17642;
  sizetype D.17643;
  const char * D.17644;
  struct MonoString * D.17645;
  struct MonoArray * * D.17646;
  const stridx_t[4] * D.17647;
  struct MonoArray * D.17648;
  short int D.17649;
  int D.17650;
  short int D.17651;
  int D.17652;
  short int D.17653;
  int D.17654;
  short int D.17655;
  int D.17656;
  const struct TextInfoEntry * D.17657;
  MonoBoolean D.17658;
  struct MonoDomain * domain;

  domain = mono_domain_get ();
  D.17607 = ci->lcid;
  D.17608 = (int) D.17607;
  this->lcid = D.17608;
  D.17609 = &this->name;
  D.17610 = ci->name;
  D.17611 = (sizetype) D.17610;
  D.17612 = &locale_strings + D.17611;
  D.17613 = mono_string_new (domain, D.17612);
  mono_gc_wbarrier_set_field (this, D.17609, D.17613);
  D.17614 = &this->englishname;
  D.17615 = ci->englishname;
  D.17616 = (sizetype) D.17615;
  D.17617 = &locale_strings + D.17616;
  D.17618 = mono_string_new (domain, D.17617);
  mono_gc_wbarrier_set_field (this, D.17614, D.17618);
  D.17619 = &this->nativename;
  D.17620 = ci->nativename;
  D.17621 = (sizetype) D.17620;
  D.17622 = &locale_strings + D.17621;
  D.17623 = mono_string_new (domain, D.17622);
  mono_gc_wbarrier_set_field (this, D.17619, D.17623);
  D.17624 = &this->win3lang;
  D.17625 = ci->win3lang;
  D.17626 = (sizetype) D.17625;
  D.17627 = &locale_strings + D.17626;
  D.17628 = mono_string_new (domain, D.17627);
  mono_gc_wbarrier_set_field (this, D.17624, D.17628);
  D.17629 = &this->iso3lang;
  D.17630 = ci->iso3lang;
  D.17631 = (sizetype) D.17630;
  D.17632 = &locale_strings + D.17631;
  D.17633 = mono_string_new (domain, D.17632);
  mono_gc_wbarrier_set_field (this, D.17629, D.17633);
  D.17634 = &this->iso2lang;
  D.17635 = ci->iso2lang;
  D.17636 = (sizetype) D.17635;
  D.17637 = &locale_strings + D.17636;
  D.17638 = mono_string_new (domain, D.17637);
  mono_gc_wbarrier_set_field (this, D.17634, D.17638);
  D.17639 = ci->territory;
  if (D.17639 != 0) goto <D.17640>; else goto <D.17641>;
  <D.17640>:
  D.17642 = &this->territory;
  D.17639 = ci->territory;
  D.17643 = (sizetype) D.17639;
  D.17644 = &locale_strings + D.17643;
  D.17645 = mono_string_new (domain, D.17644);
  mono_gc_wbarrier_set_field (this, D.17642, D.17645);
  <D.17641>:
  D.17646 = &this->native_calendar_names;
  D.17647 = &ci->native_calendar_names;
  D.17648 = create_names_array_idx (D.17647, 4);
  mono_gc_wbarrier_set_field (this, D.17646, D.17648);
  D.17649 = ci->parent_lcid;
  D.17650 = (int) D.17649;
  this->parent_lcid = D.17650;
  D.17651 = ci->datetime_format_index;
  D.17652 = (int) D.17651;
  this->datetime_index = D.17652;
  D.17653 = ci->number_format_index;
  D.17654 = (int) D.17653;
  this->number_index = D.17654;
  D.17655 = ci->calendar_type;
  D.17656 = (int) D.17655;
  this->calendar_type = D.17656;
  D.17657 = &ci->text_info;
  this->text_info_data = D.17657;
  D.17658 = 1;
  return D.17658;
}


ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_name (struct MonoCultureInfo * this, struct MonoString * name)
{
  MonoBoolean D.17662;
  short int D.17663;
  int D.17664;
  const struct CultureInfoEntry * D.17665;
  const struct CultureInfoNameEntry * ne;
  char * n;

  n = mono_string_to_utf8 (name);
  ne = mono_binary_search (n, &culture_name_entries, 283, 4, culture_name_locator);
  if (ne == 0B) goto <D.17660>; else goto <D.17661>;
  <D.17660>:
  monoeg_g_free (n);
  D.17662 = 0;
  return D.17662;
  <D.17661>:
  monoeg_g_free (n);
  D.17663 = ne->culture_entry_index;
  D.17664 = (int) D.17663;
  D.17665 = &culture_entries[D.17664];
  D.17662 = construct_culture (this, D.17665);
  return D.17662;
}


culture_name_locator (const void * a, const void * b)
{
  int ret.7;
  short unsigned int D.17667;
  sizetype D.17668;
  const char * D.17669;
  int D.17670;
  const char * aa;
  const struct CultureInfoNameEntry * bb;
  int ret;

  aa = a;
  bb = b;
  {
    size_t __s1_len;
    size_t __s2_len;

    D.17667 = bb->name;
    D.17668 = (sizetype) D.17667;
    D.17669 = &locale_strings + D.17668;
    ret.7 = __builtin_strcmp (aa, D.17669);
  }
  ret = ret.7;
  D.17670 = ret;
  return D.17670;
}


ves_icall_System_Globalization_RegionInfo_construct_internal_region_from_lcid (struct MonoRegionInfo * this, gint lcid)
{
  MonoBoolean D.17674;
  const struct RegionInfoEntry * ri;

  ri = region_info_entry_from_lcid (lcid);
  if (ri == 0B) goto <D.17672>; else goto <D.17673>;
  <D.17672>:
  D.17674 = 0;
  return D.17674;
  <D.17673>:
  D.17674 = construct_region (this, ri);
  return D.17674;
}


region_info_entry_from_lcid (int lcid)
{
  const struct RegionInfoEntry * D.17678;
  short int D.17679;
  int D.17680;
  const struct RegionInfoEntry * entry;
  const struct CultureInfoEntry * ne;

  ne = mono_binary_search (&lcid, &culture_entries, 283, 56, culture_lcid_locator);
  if (ne == 0B) goto <D.17676>; else goto <D.17677>;
  <D.17676>:
  D.17678 = 0B;
  return D.17678;
  <D.17677>:
  D.17679 = ne->region_entry_index;
  D.17680 = (int) D.17679;
  entry = &region_entries[D.17680];
  D.17678 = entry;
  return D.17678;
}


construct_region (struct MonoRegionInfo * this, const struct RegionInfoEntry * ri)
{
  short int D.17682;
  int D.17683;
  struct MonoString * * D.17684;
  short unsigned int D.17685;
  sizetype D.17686;
  const char * D.17687;
  struct MonoString * D.17688;
  struct MonoString * * D.17689;
  short unsigned int D.17690;
  sizetype D.17691;
  const char * D.17692;
  struct MonoString * D.17693;
  struct MonoString * * D.17694;
  short unsigned int D.17695;
  sizetype D.17696;
  const char * D.17697;
  struct MonoString * D.17698;
  struct MonoString * * D.17699;
  short unsigned int D.17700;
  sizetype D.17701;
  const char * D.17702;
  struct MonoString * D.17703;
  struct MonoString * * D.17704;
  short unsigned int D.17705;
  sizetype D.17706;
  const char * D.17707;
  struct MonoString * D.17708;
  struct MonoString * * D.17709;
  short unsigned int D.17710;
  sizetype D.17711;
  const char * D.17712;
  struct MonoString * D.17713;
  struct MonoString * * D.17714;
  short unsigned int D.17715;
  sizetype D.17716;
  const char * D.17717;
  struct MonoString * D.17718;
  struct MonoString * * D.17719;
  short unsigned int D.17720;
  sizetype D.17721;
  const char * D.17722;
  struct MonoString * D.17723;
  struct MonoString * * D.17724;
  short unsigned int D.17725;
  sizetype D.17726;
  const char * D.17727;
  struct MonoString * D.17728;
  MonoBoolean D.17729;
  struct MonoDomain * domain;

  domain = mono_domain_get ();
  D.17682 = ri->geo_id;
  D.17683 = (int) D.17682;
  this->geo_id = D.17683;
  D.17684 = &this->iso2name;
  D.17685 = ri->iso2name;
  D.17686 = (sizetype) D.17685;
  D.17687 = &locale_strings + D.17686;
  D.17688 = mono_string_new (domain, D.17687);
  mono_gc_wbarrier_set_field (this, D.17684, D.17688);
  D.17689 = &this->iso3name;
  D.17690 = ri->iso3name;
  D.17691 = (sizetype) D.17690;
  D.17692 = &locale_strings + D.17691;
  D.17693 = mono_string_new (domain, D.17692);
  mono_gc_wbarrier_set_field (this, D.17689, D.17693);
  D.17694 = &this->win3name;
  D.17695 = ri->win3name;
  D.17696 = (sizetype) D.17695;
  D.17697 = &locale_strings + D.17696;
  D.17698 = mono_string_new (domain, D.17697);
  mono_gc_wbarrier_set_field (this, D.17694, D.17698);
  D.17699 = &this->english_name;
  D.17700 = ri->english_name;
  D.17701 = (sizetype) D.17700;
  D.17702 = &locale_strings + D.17701;
  D.17703 = mono_string_new (domain, D.17702);
  mono_gc_wbarrier_set_field (this, D.17699, D.17703);
  D.17704 = &this->native_name;
  D.17705 = ri->native_name;
  D.17706 = (sizetype) D.17705;
  D.17707 = &locale_strings + D.17706;
  D.17708 = mono_string_new (domain, D.17707);
  mono_gc_wbarrier_set_field (this, D.17704, D.17708);
  D.17709 = &this->currency_symbol;
  D.17710 = ri->currency_symbol;
  D.17711 = (sizetype) D.17710;
  D.17712 = &locale_strings + D.17711;
  D.17713 = mono_string_new (domain, D.17712);
  mono_gc_wbarrier_set_field (this, D.17709, D.17713);
  D.17714 = &this->iso_currency_symbol;
  D.17715 = ri->iso_currency_symbol;
  D.17716 = (sizetype) D.17715;
  D.17717 = &locale_strings + D.17716;
  D.17718 = mono_string_new (domain, D.17717);
  mono_gc_wbarrier_set_field (this, D.17714, D.17718);
  D.17719 = &this->currency_english_name;
  D.17720 = ri->currency_english_name;
  D.17721 = (sizetype) D.17720;
  D.17722 = &locale_strings + D.17721;
  D.17723 = mono_string_new (domain, D.17722);
  mono_gc_wbarrier_set_field (this, D.17719, D.17723);
  D.17724 = &this->currency_native_name;
  D.17725 = ri->currency_native_name;
  D.17726 = (sizetype) D.17725;
  D.17727 = &locale_strings + D.17726;
  D.17728 = mono_string_new (domain, D.17727);
  mono_gc_wbarrier_set_field (this, D.17724, D.17728);
  D.17729 = 1;
  return D.17729;
}


ves_icall_System_Globalization_RegionInfo_construct_internal_region_from_name (struct MonoRegionInfo * this, struct MonoString * name)
{
  MonoBoolean D.17733;
  short int D.17734;
  int D.17735;
  const struct RegionInfoEntry * D.17736;
  const struct RegionInfoNameEntry * ne;
  char * n;

  n = mono_string_to_utf8 (name);
  ne = mono_binary_search (n, &region_name_entries, 120, 4, region_name_locator);
  if (ne == 0B) goto <D.17731>; else goto <D.17732>;
  <D.17731>:
  monoeg_g_free (n);
  D.17733 = 0;
  return D.17733;
  <D.17732>:
  monoeg_g_free (n);
  D.17734 = ne->region_entry_index;
  D.17735 = (int) D.17734;
  D.17736 = &region_entries[D.17735];
  D.17733 = construct_region (this, D.17736);
  return D.17733;
}


region_name_locator (const void * a, const void * b)
{
  int ret.8;
  short unsigned int D.17738;
  sizetype D.17739;
  const char * D.17740;
  int D.17741;
  const char * aa;
  const struct RegionInfoNameEntry * bb;
  int ret;

  aa = a;
  bb = b;
  {
    size_t __s1_len;
    size_t __s2_len;

    D.17738 = bb->name;
    D.17739 = (sizetype) D.17738;
    D.17740 = &locale_strings + D.17739;
    ret.8 = __builtin_strcmp (aa, D.17740);
  }
  ret = ret.8;
  D.17741 = ret;
  return D.17741;
}


ves_icall_System_Globalization_CultureInfo_internal_get_cultures (MonoBoolean neutral, MonoBoolean specific, MonoBoolean installed)
{
  short unsigned int D.17743;
  _Bool D.17744;
  struct MonoImage * D.17750;
  long unsigned int D.17753;
  struct MonoArray * D.17756;
  int len.9;
  long unsigned int D.17760;
  int len.10;
  long unsigned int D.17767;
  struct MonoArray * ret;
  struct MonoClass * class;
  struct MonoCultureInfo * culture;
  struct MonoDomain * domain;
  const struct CultureInfoEntry * ci;
  gint i;
  gint len;
  gboolean is_neutral;

  domain = mono_domain_get ();
  len = 0;
  i = 0;
  goto <D.17100>;
  <D.17099>:
  ci = &culture_entries[i];
  D.17743 = ci->territory;
  D.17744 = D.17743 == 0;
  is_neutral = (gboolean) D.17744;
  if (neutral != 0) goto <D.17748>; else goto <D.17745>;
  <D.17748>:
  if (is_neutral != 0) goto <D.17746>; else goto <D.17745>;
  <D.17745>:
  if (specific != 0) goto <D.17749>; else goto <D.17747>;
  <D.17749>:
  if (is_neutral == 0) goto <D.17746>; else goto <D.17747>;
  <D.17746>:
  len = len + 1;
  <D.17747>:
  i = i + 1;
  <D.17100>:
  if (i <= 282) goto <D.17099>; else goto <D.17101>;
  <D.17101>:
  D.17750 = mono_get_corlib ();
  class = mono_class_from_name (D.17750, "System.Globalization", "CultureInfo");
  if (neutral != 0) goto <D.17751>; else goto <D.17752>;
  <D.17751>:
  len = len + 1;
  <D.17752>:
  D.17753 = (long unsigned int) len;
  ret = mono_array_new (domain, class, D.17753);
  if (len == 0) goto <D.17754>; else goto <D.17755>;
  <D.17754>:
  D.17756 = ret;
  return D.17756;
  <D.17755>:
  len = 0;
  if (neutral != 0) goto <D.17757>; else goto <D.17758>;
  <D.17757>:
  {
    void * * __p;

    len.9 = len;
    len = len.9 + 1;
    D.17760 = (long unsigned int) len.9;
    __p = mono_array_addr_with_size (ret, 8, D.17760);
    mono_gc_wbarrier_set_arrayref (ret, __p, 0B);
  }
  <D.17758>:
  i = 0;
  goto <D.17105>;
  <D.17104>:
  ci = &culture_entries[i];
  D.17743 = ci->territory;
  D.17744 = D.17743 == 0;
  is_neutral = (gboolean) D.17744;
  if (neutral != 0) goto <D.17764>; else goto <D.17761>;
  <D.17764>:
  if (is_neutral != 0) goto <D.17762>; else goto <D.17761>;
  <D.17761>:
  if (specific != 0) goto <D.17765>; else goto <D.17763>;
  <D.17765>:
  if (is_neutral == 0) goto <D.17762>; else goto <D.17763>;
  <D.17762>:
  culture = mono_object_new (domain, class);
  mono_runtime_object_init (culture);
  construct_culture (culture, ci);
  culture->use_user_override = 1;
  {
    void * * __p;

    len.10 = len;
    len = len.10 + 1;
    D.17767 = (long unsigned int) len.10;
    __p = mono_array_addr_with_size (ret, 8, D.17767);
    mono_gc_wbarrier_set_arrayref (ret, __p, culture);
  }
  <D.17763>:
  i = i + 1;
  <D.17105>:
  if (i <= 282) goto <D.17104>; else goto <D.17106>;
  <D.17106>:
  D.17756 = ret;
  return D.17756;
}


ves_icall_System_Globalization_CompareInfo_construct_compareinfo (struct MonoCompareInfo * comp, struct MonoString * locale)
{

}


ves_icall_System_Globalization_CompareInfo_internal_compare (struct MonoCompareInfo * this, struct MonoString * str1, gint32 off1, gint32 len1, struct MonoString * str2, gint32 off2, gint32 len2, gint32 options)
{
  int D.17769;

  D.17769 = string_invariant_compare (str1, off1, len1, str2, off2, len2, options);
  return D.17769;
}


string_invariant_compare (struct MonoString * str1, gint32 off1, gint32 len1, struct MonoString * str2, gint32 off2, gint32 len2, gint32 options)
{
  mono_unichar2 * D.17774;
  long unsigned int D.17775;
  long unsigned int D.17776;
  mono_unichar2 * D.17777;
  long unsigned int D.17778;
  long unsigned int D.17779;
  long unsigned int D.17782;
  long unsigned int D.17783;
  gunichar2 * D.17784;
  short unsigned int D.17785;
  gunichar2 * D.17786;
  short unsigned int D.17787;
  gint32 D.17790;
  sizetype D.17793;
  gunichar2 * D.17794;
  short unsigned int D.17795;
  gunichar2 * D.17796;
  short unsigned int D.17797;
  gint32 length;
  gint32 charcmp;
  gunichar2 * ustr1;
  gunichar2 * ustr2;
  gint32 pos;

  if (len1 >= len2) goto <D.17771>; else goto <D.17772>;
  <D.17771>:
  length = len1;
  goto <D.17773>;
  <D.17772>:
  length = len2;
  <D.17773>:
  D.17774 = mono_string_chars (str1);
  D.17775 = (long unsigned int) off1;
  D.17776 = D.17775 * 2;
  ustr1 = D.17774 + D.17776;
  D.17777 = mono_string_chars (str2);
  D.17778 = (long unsigned int) off2;
  D.17779 = D.17778 * 2;
  ustr2 = D.17777 + D.17779;
  pos = 0;
  pos = 0;
  goto <D.17188>;
  <D.17187>:
  if (pos >= len1) goto <D.17186>; else goto <D.17780>;
  <D.17780>:
  if (pos >= len2) goto <D.17186>; else goto <D.17781>;
  <D.17781>:
  D.17782 = (long unsigned int) pos;
  D.17783 = D.17782 * 2;
  D.17784 = ustr1 + D.17783;
  D.17785 = *D.17784;
  D.17782 = (long unsigned int) pos;
  D.17783 = D.17782 * 2;
  D.17786 = ustr2 + D.17783;
  D.17787 = *D.17786;
  charcmp = string_invariant_compare_char (D.17785, D.17787, options);
  if (charcmp != 0) goto <D.17788>; else goto <D.17789>;
  <D.17788>:
  D.17790 = charcmp;
  return D.17790;
  <D.17789>:
  pos = pos + 1;
  <D.17188>:
  if (pos != length) goto <D.17187>; else goto <D.17186>;
  <D.17186>:
  if (pos == length) goto <D.17791>; else goto <D.17792>;
  <D.17791>:
  D.17782 = (long unsigned int) pos;
  D.17783 = D.17782 * 2;
  D.17793 = D.17783 + 18446744073709551614;
  D.17794 = ustr1 + D.17793;
  D.17795 = *D.17794;
  D.17782 = (long unsigned int) pos;
  D.17783 = D.17782 * 2;
  D.17793 = D.17783 + 18446744073709551614;
  D.17796 = ustr2 + D.17793;
  D.17797 = *D.17796;
  D.17790 = string_invariant_compare_char (D.17795, D.17797, options);
  return D.17790;
  <D.17792>:
  if (pos >= len1) goto <D.17798>; else goto <D.17799>;
  <D.17798>:
  if (pos >= len2) goto <D.17800>; else goto <D.17801>;
  <D.17800>:
  D.17790 = 0;
  return D.17790;
  <D.17801>:
  D.17790 = -1;
  return D.17790;
  <D.17799>:
  if (pos >= len2) goto <D.17802>; else goto <D.17803>;
  <D.17802>:
  D.17790 = 1;
  return D.17790;
  <D.17803>:
  D.17782 = (long unsigned int) pos;
  D.17783 = D.17782 * 2;
  D.17784 = ustr1 + D.17783;
  D.17785 = *D.17784;
  D.17782 = (long unsigned int) pos;
  D.17783 = D.17782 * 2;
  D.17786 = ustr2 + D.17783;
  D.17787 = *D.17786;
  D.17790 = string_invariant_compare_char (D.17785, D.17787, options);
  return D.17790;
}


string_invariant_compare_char (gunichar2 c1, gunichar2 c2, gint32 options)
{
  int D.17805;
  gint32 D.17808;
  int D.17809;
  int D.17810;
  int D.17811;
  unsigned int D.17814;
  unsigned int D.17815;
  gunichar iftmp.11;
  gunichar iftmp.12;
  unsigned int D.17824;
  gint32 iftmp.13;
  _Bool D.17829;
  gint32 result;

  D.17805 = options & 1073741824;
  if (D.17805 != 0) goto <D.17806>; else goto <D.17807>;
  <D.17806>:
  D.17809 = (int) c1;
  D.17810 = (int) c2;
  D.17808 = D.17809 - D.17810;
  return D.17808;
  <D.17807>:
  D.17811 = options & 1;
  if (D.17811 != 0) goto <D.17812>; else goto <D.17813>;
  <D.17812>:
  {
    GUnicodeType c1type;
    GUnicodeType c2type;

    D.17814 = (unsigned int) c1;
    c1type = monoeg_g_unichar_type (D.17814);
    D.17815 = (unsigned int) c2;
    c2type = monoeg_g_unichar_type (D.17815);
    if (c1type != 5) goto <D.17817>; else goto <D.17818>;
    <D.17817>:
    D.17814 = (unsigned int) c1;
    iftmp.11 = monoeg_g_unichar_tolower (D.17814);
    goto <D.17819>;
    <D.17818>:
    iftmp.11 = (gunichar) c1;
    <D.17819>:
    if (c2type != 5) goto <D.17821>; else goto <D.17822>;
    <D.17821>:
    D.17815 = (unsigned int) c2;
    iftmp.12 = monoeg_g_unichar_tolower (D.17815);
    goto <D.17823>;
    <D.17822>:
    iftmp.12 = (gunichar) c2;
    <D.17823>:
    D.17824 = iftmp.11 - iftmp.12;
    result = (gint32) D.17824;
  }
  goto <D.17825>;
  <D.17813>:
  D.17809 = (int) c1;
  D.17810 = (int) c2;
  result = D.17809 - D.17810;
  <D.17825>:
  if (result >= 0) goto <D.17827>; else goto <D.17828>;
  <D.17827>:
  D.17829 = result > 0;
  iftmp.13 = (gint32) D.17829;
  goto <D.17830>;
  <D.17828>:
  iftmp.13 = -1;
  <D.17830>:
  D.17808 = iftmp.13;
  return D.17808;
}


ves_icall_System_Globalization_CompareInfo_free_internal_collator (struct MonoCompareInfo * this)
{

}


ves_icall_System_Globalization_CompareInfo_assign_sortkey (struct MonoCompareInfo * this, struct MonoSortKey * key, struct MonoString * source, gint32 options)
{
  struct MonoDomain * D.17832;
  struct MonoClass * D.17833;
  long unsigned int D.17834;
  long unsigned int D.17835;
  mono_unichar2 * D.17836;
  long unsigned int D.17837;
  long unsigned int D.17838;
  mono_unichar2 * D.17839;
  short unsigned int D.17840;
  unsigned char D.17841;
  struct MonoArray * * D.17842;
  struct MonoArray * arr;
  gint32 keylen;
  gint32 i;

  keylen = mono_string_length (source);
  D.17832 = mono_domain_get ();
  D.17833 = mono_get_byte_class ();
  D.17834 = (long unsigned int) keylen;
  arr = mono_array_new (D.17832, D.17833, D.17834);
  i = 0;
  goto <D.17135>;
  <D.17134>:
  {
    guint8 * __p;

    D.17835 = (long unsigned int) i;
    __p = mono_array_addr_with_size (arr, 1, D.17835);
    D.17836 = mono_string_chars (source);
    D.17837 = (long unsigned int) i;
    D.17838 = D.17837 * 2;
    D.17839 = D.17836 + D.17838;
    D.17840 = *D.17839;
    D.17841 = (unsigned char) D.17840;
    *__p = D.17841;
  }
  i = i + 1;
  <D.17135>:
  if (i < keylen) goto <D.17134>; else goto <D.17136>;
  <D.17136>:
  D.17842 = &key->key;
  mono_gc_wbarrier_set_field (key, D.17842, arr);
}


ves_icall_System_Globalization_CompareInfo_internal_index (struct MonoCompareInfo * this, struct MonoString * source, gint32 sindex, gint32 count, struct MonoString * value, gint32 options, MonoBoolean first)
{
  int D.17843;

  D.17843 = string_invariant_indexof (source, sindex, count, value, first);
  return D.17843;
}


string_invariant_indexof (struct MonoString * source, gint32 sindex, gint32 count, struct MonoString * value, MonoBoolean first)
{
  gint32 D.17849;
  int D.17850;
  long unsigned int D.17851;
  long unsigned int D.17852;
  gunichar2 * D.17853;
  short unsigned int D.17854;
  long unsigned int D.17855;
  long unsigned int D.17856;
  gunichar2 * D.17857;
  short unsigned int D.17858;
  int D.17859;
  int D.17860;
  long unsigned int D.17861;
  long unsigned int D.17862;
  const void * D.17863;
  long unsigned int D.17864;
  long unsigned int D.17865;
  int D.17866;
  int D.17869;
  gint32 lencmpstr;
  gunichar2 * src;
  gunichar2 * cmpstr;
  gint32 pos;
  gint32 i;

  lencmpstr = mono_string_length (value);
  src = mono_string_chars (source);
  cmpstr = mono_string_chars (value);
  if (first != 0) goto <D.17845>; else goto <D.17846>;
  <D.17845>:
  count = count - lencmpstr;
  pos = sindex;
  goto <D.17228>;
  <D.17227>:
  i = 0;
  goto <D.17225>;
  <D.17224>:
  i = i + 1;
  if (i == lencmpstr) goto <D.17847>; else goto <D.17848>;
  <D.17847>:
  D.17849 = pos;
  return D.17849;
  <D.17848>:
  <D.17225>:
  D.17850 = pos + i;
  D.17851 = (long unsigned int) D.17850;
  D.17852 = D.17851 * 2;
  D.17853 = src + D.17852;
  D.17854 = *D.17853;
  D.17855 = (long unsigned int) i;
  D.17856 = D.17855 * 2;
  D.17857 = cmpstr + D.17856;
  D.17858 = *D.17857;
  if (D.17854 == D.17858) goto <D.17224>; else goto <D.17226>;
  <D.17226>:
  pos = pos + 1;
  <D.17228>:
  D.17859 = sindex + count;
  if (D.17859 >= pos) goto <D.17227>; else goto <D.17229>;
  <D.17229>:
  D.17849 = -1;
  return D.17849;
  <D.17846>:
  D.17860 = sindex - lencmpstr;
  pos = D.17860 + 1;
  goto <D.17231>;
  <D.17230>:
  D.17861 = (long unsigned int) pos;
  D.17862 = D.17861 * 2;
  D.17863 = src + D.17862;
  D.17864 = (long unsigned int) lencmpstr;
  D.17865 = D.17864 * 2;
  D.17866 = memcmp (D.17863, cmpstr, D.17865);
  if (D.17866 == 0) goto <D.17867>; else goto <D.17868>;
  <D.17867>:
  D.17849 = pos;
  return D.17849;
  <D.17868>:
  pos = pos + -1;
  <D.17231>:
  D.17869 = sindex - count;
  if (D.17869 < pos) goto <D.17230>; else goto <D.17232>;
  <D.17232>:
  D.17849 = -1;
  return D.17849;
}


ves_icall_System_Globalization_CompareInfo_internal_index_char (struct MonoCompareInfo * this, struct MonoString * source, gint32 sindex, gint32 count, gunichar2 value, gint32 options, MonoBoolean first)
{
  int D.17871;

  D.17871 = string_invariant_indexof_char (source, sindex, count, value, first);
  return D.17871;
}


string_invariant_indexof_char (struct MonoString * source, gint32 sindex, gint32 count, gunichar2 value, MonoBoolean first)
{
  long unsigned int D.17875;
  long unsigned int D.17876;
  gunichar2 * D.17877;
  short unsigned int D.17878;
  gint32 D.17881;
  int D.17882;
  int D.17885;
  gint32 pos;
  gunichar2 * src;

  src = mono_string_chars (source);
  if (first != 0) goto <D.17873>; else goto <D.17874>;
  <D.17873>:
  pos = sindex;
  goto <D.17243>;
  <D.17242>:
  D.17875 = (long unsigned int) pos;
  D.17876 = D.17875 * 2;
  D.17877 = src + D.17876;
  D.17878 = *D.17877;
  if (D.17878 == value) goto <D.17879>; else goto <D.17880>;
  <D.17879>:
  D.17881 = pos;
  return D.17881;
  <D.17880>:
  pos = pos + 1;
  <D.17243>:
  D.17882 = count + sindex;
  if (D.17882 != pos) goto <D.17242>; else goto <D.17244>;
  <D.17244>:
  D.17881 = -1;
  return D.17881;
  <D.17874>:
  pos = sindex;
  goto <D.17246>;
  <D.17245>:
  D.17875 = (long unsigned int) pos;
  D.17876 = D.17875 * 2;
  D.17877 = src + D.17876;
  D.17878 = *D.17877;
  if (D.17878 == value) goto <D.17883>; else goto <D.17884>;
  <D.17883>:
  D.17881 = pos;
  return D.17881;
  <D.17884>:
  pos = pos + -1;
  <D.17246>:
  D.17885 = sindex - count;
  if (D.17885 < pos) goto <D.17245>; else goto <D.17247>;
  <D.17247>:
  D.17881 = -1;
  return D.17881;
}


ves_icall_System_Threading_Thread_current_lcid ()
{
  int D.17887;

  D.17887 = 127;
  return D.17887;
}


ves_icall_System_String_InternalReplace_Str_Comp (struct MonoString * this, struct MonoString * old, struct MonoString * new, struct MonoCompareInfo * comp)
{
  struct MonoString * D.17889;

  D.17889 = string_invariant_replace (this, old, new);
  return D.17889;
}


string_invariant_replace (struct MonoString * me, struct MonoString * oldValue, struct MonoString * newValue)
{
  long unsigned int D.17896;
  long unsigned int D.17897;
  const void * D.17898;
  long unsigned int D.17899;
  long unsigned int D.17900;
  int D.17901;
  int D.17905;
  struct MonoString * D.17908;
  int D.17909;
  int D.17910;
  int D.17912;
  struct MonoDomain * D.17917;
  long unsigned int D.17920;
  long unsigned int D.17921;
  gunichar2 * D.17922;
  long unsigned int D.17923;
  long unsigned int D.17924;
  gunichar2 * D.17927;
  short unsigned int D.17928;
  struct MonoString * ret;
  gunichar2 * src;
  gunichar2 * dest;
  gunichar2 * oldstr;
  gunichar2 * newstr;
  gint32 i;
  gint32 destpos;
  gint32 occurr;
  gint32 newsize;
  gint32 oldstrlen;
  gint32 newstrlen;
  gint32 srclen;

  dest = 0B;
  newstr = 0B;
  occurr = 0;
  destpos = 0;
  oldstr = mono_string_chars (oldValue);
  oldstrlen = mono_string_length (oldValue);
  if (newValue != 0B) goto <D.17891>; else goto <D.17892>;
  <D.17891>:
  newstr = mono_string_chars (newValue);
  newstrlen = mono_string_length (newValue);
  goto <D.17893>;
  <D.17892>:
  newstrlen = 0;
  <D.17893>:
  src = mono_string_chars (me);
  srclen = mono_string_length (me);
  if (oldstrlen != newstrlen) goto <D.17894>; else goto <D.17895>;
  <D.17894>:
  i = 0;
  goto <D.17207>;
  <D.17206>:
  D.17896 = (long unsigned int) i;
  D.17897 = D.17896 * 2;
  D.17898 = src + D.17897;
  D.17899 = (long unsigned int) oldstrlen;
  D.17900 = D.17899 * 2;
  D.17901 = memcmp (D.17898, oldstr, D.17900);
  if (D.17901 == 0) goto <D.17902>; else goto <D.17903>;
  <D.17902>:
  occurr = occurr + 1;
  i = i + oldstrlen;
  goto <D.17904>;
  <D.17903>:
  i = i + 1;
  <D.17904>:
  <D.17207>:
  D.17905 = srclen - oldstrlen;
  if (D.17905 >= i) goto <D.17206>; else goto <D.17208>;
  <D.17208>:
  if (occurr == 0) goto <D.17906>; else goto <D.17907>;
  <D.17906>:
  D.17908 = me;
  return D.17908;
  <D.17907>:
  D.17909 = newstrlen - oldstrlen;
  D.17910 = D.17909 * occurr;
  newsize = D.17910 + srclen;
  goto <D.17911>;
  <D.17895>:
  newsize = srclen;
  <D.17911>:
  ret = 0B;
  i = 0;
  goto <D.17209>;
  <D.17210>:
  D.17896 = (long unsigned int) i;
  D.17897 = D.17896 * 2;
  D.17898 = src + D.17897;
  D.17899 = (long unsigned int) oldstrlen;
  D.17900 = D.17899 * 2;
  D.17912 = memcmp (D.17898, oldstr, D.17900);
  if (D.17912 == 0) goto <D.17913>; else goto <D.17914>;
  <D.17913>:
  if (ret == 0B) goto <D.17915>; else goto <D.17916>;
  <D.17915>:
  D.17917 = mono_domain_get ();
  ret = mono_string_new_size (D.17917, newsize);
  dest = mono_string_chars (ret);
  D.17896 = (long unsigned int) i;
  D.17897 = D.17896 * 2;
  memcpy (dest, src, D.17897);
  <D.17916>:
  if (newstrlen > 0) goto <D.17918>; else goto <D.17919>;
  <D.17918>:
  D.17920 = (long unsigned int) destpos;
  D.17921 = D.17920 * 2;
  D.17922 = dest + D.17921;
  D.17923 = (long unsigned int) newstrlen;
  D.17924 = D.17923 * 2;
  memcpy (D.17922, newstr, D.17924);
  destpos = destpos + newstrlen;
  <D.17919>:
  i = i + oldstrlen;
  // predicted unlikely by continue predictor.
  goto <D.17209>;
  <D.17914>:
  if (ret != 0B) goto <D.17925>; else goto <D.17926>;
  <D.17925>:
  D.17920 = (long unsigned int) destpos;
  D.17921 = D.17920 * 2;
  D.17922 = dest + D.17921;
  D.17896 = (long unsigned int) i;
  D.17897 = D.17896 * 2;
  D.17927 = src + D.17897;
  D.17928 = *D.17927;
  *D.17922 = D.17928;
  <D.17926>:
  destpos = destpos + 1;
  i = i + 1;
  <D.17209>:
  if (i < srclen) goto <D.17210>; else goto <D.17211>;
  <D.17211>:
  if (ret == 0B) goto <D.17929>; else goto <D.17930>;
  <D.17929>:
  D.17908 = me;
  return D.17908;
  <D.17930>:
  D.17908 = ret;
  return D.17908;
}


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

  D.17933 = __builtin_object_size (__dest, 0);
  D.17932 = __builtin___memcpy_chk (__dest, __src, __len, D.17933);
  return D.17932;
}


load_normalization_resource (guint8 * * argProps, guint8 * * argMappedChars, guint8 * * argCharMapIndex, guint8 * * argHelperIndex, guint8 * * argMapIdxToComposite, guint8 * * argCombiningClass)
{
  *argProps = &props;
  *argMappedChars = &mappedChars;
  *argCharMapIndex = &charMapIndex;
  *argHelperIndex = &helperIndex;
  *argMapIdxToComposite = &mapIdxToComposite;
  *argCombiningClass = &combiningClass;
}


