ves_icall_System_Globalization_CultureInfo_construct_datetime_format (struct MonoCultureInfo * this)
{
  int D.16363;
  _Bool D.16364;
  long int D.16365;
  long int D.16366;
  unsigned char D.16369;
  const stridx_t[7] * D.16370;
  struct MonoArray * D.16371;
  struct MonoArray * * D.16372;
  const stridx_t[13] * D.16373;
  struct MonoArray * D.16374;
  struct MonoArray * * D.16375;
  short unsigned int D.16376;
  sizetype D.16377;
  const char * D.16378;
  struct MonoString * D.16379;
  struct MonoString * * D.16380;
  signed char D.16381;
  unsigned int D.16382;
  short unsigned int D.16383;
  sizetype D.16384;
  const char * D.16385;
  struct MonoString * D.16386;
  struct MonoString * * D.16387;
  const stridx_t[7] * D.16388;
  struct MonoArray * D.16389;
  struct MonoArray * * D.16390;
  const stridx_t[7] * D.16391;
  struct MonoArray * D.16392;
  struct MonoArray * * D.16393;
  signed char D.16394;
  unsigned int D.16395;
  short unsigned int D.16396;
  sizetype D.16397;
  const char * D.16398;
  struct MonoString * D.16399;
  struct MonoString * * D.16400;
  short unsigned int D.16401;
  sizetype D.16402;
  const char * D.16403;
  struct MonoString * D.16404;
  struct MonoString * * D.16405;
  short unsigned int D.16406;
  sizetype D.16407;
  const char * D.16408;
  struct MonoString * D.16409;
  struct MonoString * * D.16410;
  const stridx_t[13] * D.16411;
  struct MonoArray * D.16412;
  struct MonoArray * * D.16413;
  short unsigned int D.16414;
  sizetype D.16415;
  const char * D.16416;
  struct MonoString * D.16417;
  struct MonoString * * D.16418;
  short unsigned int D.16419;
  sizetype D.16420;
  const char * D.16421;
  struct MonoString * D.16422;
  struct MonoString * * D.16423;
  short unsigned int D.16424;
  sizetype D.16425;
  const char * D.16426;
  struct MonoString * D.16427;
  struct MonoString * * D.16428;
  short unsigned int D.16429;
  sizetype D.16430;
  const char * D.16431;
  struct MonoString * D.16432;
  struct MonoString * * D.16433;
  short unsigned int D.16434;
  sizetype D.16435;
  const char * D.16436;
  struct MonoString * D.16437;
  struct MonoString * * D.16438;
  const stridx_t[14] * D.16439;
  struct MonoArray * D.16440;
  struct MonoArray * * D.16441;
  const stridx_t[8] * D.16442;
  struct MonoArray * D.16443;
  struct MonoArray * * D.16444;
  const stridx_t[12] * D.16445;
  struct MonoArray * D.16446;
  struct MonoArray * * D.16447;
  const stridx_t[9] * D.16448;
  struct MonoArray * D.16449;
  struct MonoArray * * D.16450;
  const stridx_t[13] * D.16451;
  struct MonoArray * D.16452;
  struct MonoArray * * D.16453;
  const stridx_t[13] * D.16454;
  struct MonoArray * D.16455;
  struct MonoArray * * D.16456;
  struct MonoDomain * domain;
  struct MonoDateTimeFormatInfo * datetime;
  const struct DateTimeFormatEntry * dfe;

  D.16363 = this->datetime_index;
  D.16364 = D.16363 < 0;
  D.16365 = (long int) D.16364;
  D.16366 = __builtin_expect (D.16365, 0);
  if (D.16366 != 0) goto <D.16367>; else goto <D.16368>;
  <D.16367>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 169, "this->datetime_index >= 0");
  <D.16368>:
  datetime = this->datetime_format;
  D.16363 = this->datetime_index;
  dfe = &datetime_format_entries[D.16363];
  domain = mono_domain_get ();
  D.16369 = this->is_read_only;
  datetime->readOnly = D.16369;
  D.16370 = &dfe->abbreviated_day_names;
  D.16371 = create_names_array_idx (D.16370, 7);
  D.16372 = &datetime->AbbreviatedDayNames;
  mono_gc_wbarrier_set_field (datetime, D.16372, D.16371);
  D.16373 = &dfe->abbreviated_month_names;
  D.16374 = create_names_array_idx (D.16373, 13);
  D.16375 = &datetime->AbbreviatedMonthNames;
  mono_gc_wbarrier_set_field (datetime, D.16375, D.16374);
  D.16376 = dfe->am_designator;
  D.16377 = (sizetype) D.16376;
  D.16378 = &locale_strings + D.16377;
  D.16379 = mono_string_new (domain, D.16378);
  D.16380 = &datetime->AMDesignator;
  mono_gc_wbarrier_set_field (datetime, D.16380, D.16379);
  D.16381 = dfe->calendar_week_rule;
  D.16382 = (unsigned int) D.16381;
  datetime->CalendarWeekRule = D.16382;
  D.16383 = dfe->date_separator;
  D.16384 = (sizetype) D.16383;
  D.16385 = &locale_strings + D.16384;
  D.16386 = mono_string_new (domain, D.16385);
  D.16387 = &datetime->DateSeparator;
  mono_gc_wbarrier_set_field (datetime, D.16387, D.16386);
  D.16388 = &dfe->day_names;
  D.16389 = create_names_array_idx (D.16388, 7);
  D.16390 = &datetime->DayNames;
  mono_gc_wbarrier_set_field (datetime, D.16390, D.16389);
  D.16391 = &dfe->shortest_day_names;
  D.16392 = create_names_array_idx (D.16391, 7);
  D.16393 = &datetime->ShortestDayNames;
  mono_gc_wbarrier_set_field (datetime, D.16393, D.16392);
  D.16394 = dfe->first_day_of_week;
  D.16395 = (unsigned int) D.16394;
  datetime->FirstDayOfWeek = D.16395;
  D.16396 = dfe->long_date_pattern;
  D.16397 = (sizetype) D.16396;
  D.16398 = &locale_strings + D.16397;
  D.16399 = mono_string_new (domain, D.16398);
  D.16400 = &datetime->LongDatePattern;
  mono_gc_wbarrier_set_field (datetime, D.16400, D.16399);
  D.16401 = dfe->long_time_pattern;
  D.16402 = (sizetype) D.16401;
  D.16403 = &locale_strings + D.16402;
  D.16404 = mono_string_new (domain, D.16403);
  D.16405 = &datetime->LongTimePattern;
  mono_gc_wbarrier_set_field (datetime, D.16405, D.16404);
  D.16406 = dfe->month_day_pattern;
  D.16407 = (sizetype) D.16406;
  D.16408 = &locale_strings + D.16407;
  D.16409 = mono_string_new (domain, D.16408);
  D.16410 = &datetime->MonthDayPattern;
  mono_gc_wbarrier_set_field (datetime, D.16410, D.16409);
  D.16411 = &dfe->month_names;
  D.16412 = create_names_array_idx (D.16411, 13);
  D.16413 = &datetime->MonthNames;
  mono_gc_wbarrier_set_field (datetime, D.16413, D.16412);
  D.16414 = dfe->pm_designator;
  D.16415 = (sizetype) D.16414;
  D.16416 = &locale_strings + D.16415;
  D.16417 = mono_string_new (domain, D.16416);
  D.16418 = &datetime->PMDesignator;
  mono_gc_wbarrier_set_field (datetime, D.16418, D.16417);
  D.16419 = dfe->short_date_pattern;
  D.16420 = (sizetype) D.16419;
  D.16421 = &locale_strings + D.16420;
  D.16422 = mono_string_new (domain, D.16421);
  D.16423 = &datetime->ShortDatePattern;
  mono_gc_wbarrier_set_field (datetime, D.16423, D.16422);
  D.16424 = dfe->short_time_pattern;
  D.16425 = (sizetype) D.16424;
  D.16426 = &locale_strings + D.16425;
  D.16427 = mono_string_new (domain, D.16426);
  D.16428 = &datetime->ShortTimePattern;
  mono_gc_wbarrier_set_field (datetime, D.16428, D.16427);
  D.16429 = dfe->time_separator;
  D.16430 = (sizetype) D.16429;
  D.16431 = &locale_strings + D.16430;
  D.16432 = mono_string_new (domain, D.16431);
  D.16433 = &datetime->TimeSeparator;
  mono_gc_wbarrier_set_field (datetime, D.16433, D.16432);
  D.16434 = dfe->year_month_pattern;
  D.16435 = (sizetype) D.16434;
  D.16436 = &locale_strings + D.16435;
  D.16437 = mono_string_new (domain, D.16436);
  D.16438 = &datetime->YearMonthPattern;
  mono_gc_wbarrier_set_field (datetime, D.16438, D.16437);
  D.16439 = &dfe->short_date_patterns;
  D.16440 = create_names_array_idx_dynamic (D.16439, 14);
  D.16441 = &datetime->ShortDatePatterns;
  mono_gc_wbarrier_set_field (datetime, D.16441, D.16440);
  D.16442 = &dfe->long_date_patterns;
  D.16443 = create_names_array_idx_dynamic (D.16442, 8);
  D.16444 = &datetime->LongDatePatterns;
  mono_gc_wbarrier_set_field (datetime, D.16444, D.16443);
  D.16445 = &dfe->short_time_patterns;
  D.16446 = create_names_array_idx_dynamic (D.16445, 12);
  D.16447 = &datetime->ShortTimePatterns;
  mono_gc_wbarrier_set_field (datetime, D.16447, D.16446);
  D.16448 = &dfe->long_time_patterns;
  D.16449 = create_names_array_idx_dynamic (D.16448, 9);
  D.16450 = &datetime->LongTimePatterns;
  mono_gc_wbarrier_set_field (datetime, D.16450, D.16449);
  D.16451 = &dfe->month_genitive_names;
  D.16452 = create_names_array_idx (D.16451, 13);
  D.16453 = &datetime->GenitiveMonthNames;
  mono_gc_wbarrier_set_field (datetime, D.16453, D.16452);
  D.16454 = &dfe->abbreviated_month_genitive_names;
  D.16455 = create_names_array_idx (D.16454, 13);
  D.16456 = &datetime->GenitiveAbbreviatedMonthNames;
  mono_gc_wbarrier_set_field (datetime, D.16456, D.16455);
}


create_names_array_idx_dynamic (const guint16 * names, int ml)
{
  struct MonoArray * D.16459;
  unsigned int i.0;
  unsigned int D.16461;
  const guint16 * D.16462;
  short unsigned int D.16463;
  unsigned int len.1;
  struct MonoClass * D.16109;
  struct MonoClass * tmp_klass.2;
  struct MonoClass * D.16469;
  struct MonoClass * tmp_klass.3;
  _Bool D.16471;
  long int D.16472;
  long int D.16473;
  struct MonoDomain * D.16476;
  struct MonoVTable * D.16477;
  unsigned int i.4;
  sizetype D.16479;
  const char * D.16480;
  struct MonoString * D.16481;
  struct MonoArray * ret;
  struct MonoDomain * domain;
  int i;
  int len;

  len = 0;
  if (names == 0B) goto <D.16457>; else goto <D.16458>;
  <D.16457>:
  D.16459 = 0B;
  return D.16459;
  <D.16458>:
  domain = mono_domain_get ();
  i = 0;
  goto <D.16107>;
  <D.16106>:
  i.0 = (unsigned int) i;
  D.16461 = i.0 * 2;
  D.16462 = names + D.16461;
  D.16463 = *D.16462;
  if (D.16463 == 0) goto <D.16105>; else goto <D.16464>;
  <D.16464>:
  len = len + 1;
  i = i + 1;
  <D.16107>:
  if (i < ml) goto <D.16106>; else goto <D.16105>;
  <D.16105>:
  len.1 = (unsigned int) len;
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.2 = tmp_klass;
      if (tmp_klass.2 == 0B) goto <D.16467>; else goto <D.16468>;
      <D.16467>:
      D.16469 = mono_get_string_class ();
      tmp_klass.3 = mono_array_class_get (D.16469, 1);
      tmp_klass = tmp_klass.3;
      tmp_klass.2 = tmp_klass;
      D.16471 = tmp_klass.2 == 0B;
      D.16472 = (long int) D.16471;
      D.16473 = __builtin_expect (D.16472, 0);
      if (D.16473 != 0) goto <D.16474>; else goto <D.16475>;
      <D.16474>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 152, "tmp_klass");
      <D.16475>:
      <D.16468>:
    }
    D.16109 = tmp_klass;
  }
  D.16476 = mono_domain_get ();
  D.16477 = mono_class_vtable (D.16476, D.16109);
  ret = mono_array_new_specific (D.16477, len.1);
  i = 0;
  goto <D.16112>;
  <D.16111>:
  {
    void * * __p;

    i.4 = (unsigned int) i;
    __p = mono_array_addr_with_size (ret, 4, i.4);
    i.0 = (unsigned int) i;
    D.16461 = i.0 * 2;
    D.16462 = names + D.16461;
    D.16463 = *D.16462;
    D.16479 = (sizetype) D.16463;
    D.16480 = &locale_strings + D.16479;
    D.16481 = mono_string_new (domain, D.16480);
    mono_gc_wbarrier_set_arrayref (ret, __p, D.16481);
  }
  i = i + 1;
  <D.16112>:
  if (i < len) goto <D.16111>; else goto <D.16113>;
  <D.16113>:
  D.16459 = ret;
  return D.16459;
}


create_names_array_idx (const guint16 * names, int ml)
{
  struct MonoArray * D.16485;
  unsigned int ml.5;
  struct MonoClass * D.16092;
  struct MonoClass * tmp_klass.6;
  struct MonoClass * D.16490;
  struct MonoClass * tmp_klass.7;
  _Bool D.16492;
  long int D.16493;
  long int D.16494;
  struct MonoDomain * D.16497;
  struct MonoVTable * D.16498;
  unsigned int i.8;
  unsigned int i.9;
  unsigned int D.16501;
  const guint16 * D.16502;
  short unsigned int D.16503;
  sizetype D.16504;
  const char * D.16505;
  struct MonoString * D.16506;
  struct MonoArray * ret;
  struct MonoDomain * domain;
  int i;

  if (names == 0B) goto <D.16483>; else goto <D.16484>;
  <D.16483>:
  D.16485 = 0B;
  return D.16485;
  <D.16484>:
  domain = mono_domain_get ();
  ml.5 = (unsigned int) ml;
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.6 = tmp_klass;
      if (tmp_klass.6 == 0B) goto <D.16488>; else goto <D.16489>;
      <D.16488>:
      D.16490 = mono_get_string_class ();
      tmp_klass.7 = mono_array_class_get (D.16490, 1);
      tmp_klass = tmp_klass.7;
      tmp_klass.6 = tmp_klass;
      D.16492 = tmp_klass.6 == 0B;
      D.16493 = (long int) D.16492;
      D.16494 = __builtin_expect (D.16493, 0);
      if (D.16494 != 0) goto <D.16495>; else goto <D.16496>;
      <D.16495>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 126, "tmp_klass");
      <D.16496>:
      <D.16489>:
    }
    D.16092 = tmp_klass;
  }
  D.16497 = mono_domain_get ();
  D.16498 = mono_class_vtable (D.16497, D.16092);
  ret = mono_array_new_specific (D.16498, ml.5);
  i = 0;
  goto <D.16095>;
  <D.16094>:
  {
    void * * __p;

    i.8 = (unsigned int) i;
    __p = mono_array_addr_with_size (ret, 4, i.8);
    i.9 = (unsigned int) i;
    D.16501 = i.9 * 2;
    D.16502 = names + D.16501;
    D.16503 = *D.16502;
    D.16504 = (sizetype) D.16503;
    D.16505 = &locale_strings + D.16504;
    D.16506 = mono_string_new (domain, D.16505);
    mono_gc_wbarrier_set_arrayref (ret, __p, D.16506);
  }
  i = i + 1;
  <D.16095>:
  if (i < ml) goto <D.16094>; else goto <D.16096>;
  <D.16096>:
  D.16485 = ret;
  return D.16485;
}


ves_icall_System_Globalization_CultureInfo_construct_number_format (struct MonoCultureInfo * this)
{
  struct MonoNumberFormatInfo * D.16508;
  _Bool D.16509;
  long int D.16510;
  long int D.16511;
  int D.16514;
  unsigned char D.16517;
  signed char D.16518;
  int D.16519;
  short unsigned int D.16520;
  sizetype D.16521;
  const char * D.16522;
  struct MonoString * D.16523;
  struct MonoString * * D.16524;
  short unsigned int D.16525;
  sizetype D.16526;
  const char * D.16527;
  struct MonoString * D.16528;
  struct MonoString * * D.16529;
  const gint[2] * D.16530;
  struct MonoArray * D.16531;
  struct MonoArray * * D.16532;
  signed char D.16533;
  int D.16534;
  signed char D.16535;
  int D.16536;
  short unsigned int D.16537;
  sizetype D.16538;
  const char * D.16539;
  struct MonoString * D.16540;
  struct MonoString * * D.16541;
  short unsigned int D.16542;
  sizetype D.16543;
  const char * D.16544;
  struct MonoString * D.16545;
  struct MonoString * * D.16546;
  short unsigned int D.16547;
  sizetype D.16548;
  const char * D.16549;
  struct MonoString * D.16550;
  struct MonoString * * D.16551;
  short unsigned int D.16552;
  sizetype D.16553;
  const char * D.16554;
  struct MonoString * D.16555;
  struct MonoString * * D.16556;
  signed char D.16557;
  unsigned int D.16558;
  short unsigned int D.16559;
  sizetype D.16560;
  const char * D.16561;
  struct MonoString * D.16562;
  struct MonoString * * D.16563;
  short unsigned int D.16564;
  sizetype D.16565;
  const char * D.16566;
  struct MonoString * D.16567;
  struct MonoString * * D.16568;
  const gint[2] * D.16569;
  struct MonoArray * D.16570;
  struct MonoArray * * D.16571;
  signed char D.16572;
  int D.16573;
  signed char D.16574;
  int D.16575;
  short unsigned int D.16576;
  sizetype D.16577;
  const char * D.16578;
  struct MonoString * D.16579;
  struct MonoString * * D.16580;
  short unsigned int D.16581;
  sizetype D.16582;
  const char * D.16583;
  struct MonoString * D.16584;
  struct MonoString * * D.16585;
  const gint[2] * D.16586;
  struct MonoArray * D.16587;
  struct MonoArray * * D.16588;
  signed char D.16589;
  int D.16590;
  signed char D.16591;
  int D.16592;
  short unsigned int D.16593;
  sizetype D.16594;
  const char * D.16595;
  struct MonoString * D.16596;
  struct MonoString * * D.16597;
  short unsigned int D.16598;
  sizetype D.16599;
  const char * D.16600;
  struct MonoString * D.16601;
  struct MonoString * * D.16602;
  short unsigned int D.16603;
  sizetype D.16604;
  const char * D.16605;
  struct MonoString * D.16606;
  struct MonoString * * D.16607;
  short unsigned int D.16608;
  sizetype D.16609;
  const char * D.16610;
  struct MonoString * D.16611;
  struct MonoString * * D.16612;
  struct MonoDomain * domain;
  struct MonoNumberFormatInfo * number;
  const struct NumberFormatEntry * nfe;

  D.16508 = this->number_format;
  D.16509 = D.16508 == 0B;
  D.16510 = (long int) D.16509;
  D.16511 = __builtin_expect (D.16510, 0);
  if (D.16511 != 0) goto <D.16512>; else goto <D.16513>;
  <D.16512>:
  monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 217, "this->number_format != 0");
  <D.16513>:
  D.16514 = this->number_index;
  if (D.16514 < 0) goto <D.16515>; else goto <D.16516>;
  <D.16515>:
  return;
  <D.16516>:
  number = this->number_format;
  D.16514 = this->number_index;
  nfe = &number_format_entries[D.16514];
  domain = mono_domain_get ();
  D.16517 = this->is_read_only;
  number->readOnly = D.16517;
  D.16518 = nfe->currency_decimal_digits;
  D.16519 = (int) D.16518;
  number->currencyDecimalDigits = D.16519;
  D.16520 = nfe->currency_decimal_separator;
  D.16521 = (sizetype) D.16520;
  D.16522 = &locale_strings + D.16521;
  D.16523 = mono_string_new (domain, D.16522);
  D.16524 = &number->currencyDecimalSeparator;
  mono_gc_wbarrier_set_field (number, D.16524, D.16523);
  D.16525 = nfe->currency_group_separator;
  D.16526 = (sizetype) D.16525;
  D.16527 = &locale_strings + D.16526;
  D.16528 = mono_string_new (domain, D.16527);
  D.16529 = &number->currencyGroupSeparator;
  mono_gc_wbarrier_set_field (number, D.16529, D.16528);
  D.16530 = &nfe->currency_group_sizes;
  D.16531 = create_group_sizes_array (D.16530, 2);
  D.16532 = &number->currencyGroupSizes;
  mono_gc_wbarrier_set_field (number, D.16532, D.16531);
  D.16533 = nfe->currency_negative_pattern;
  D.16534 = (int) D.16533;
  number->currencyNegativePattern = D.16534;
  D.16535 = nfe->currency_positive_pattern;
  D.16536 = (int) D.16535;
  number->currencyPositivePattern = D.16536;
  D.16537 = nfe->currency_symbol;
  D.16538 = (sizetype) D.16537;
  D.16539 = &locale_strings + D.16538;
  D.16540 = mono_string_new (domain, D.16539);
  D.16541 = &number->currencySymbol;
  mono_gc_wbarrier_set_field (number, D.16541, D.16540);
  D.16542 = nfe->nan_symbol;
  D.16543 = (sizetype) D.16542;
  D.16544 = &locale_strings + D.16543;
  D.16545 = mono_string_new (domain, D.16544);
  D.16546 = &number->naNSymbol;
  mono_gc_wbarrier_set_field (number, D.16546, D.16545);
  D.16547 = nfe->negative_infinity_symbol;
  D.16548 = (sizetype) D.16547;
  D.16549 = &locale_strings + D.16548;
  D.16550 = mono_string_new (domain, D.16549);
  D.16551 = &number->negativeInfinitySymbol;
  mono_gc_wbarrier_set_field (number, D.16551, D.16550);
  D.16552 = nfe->negative_sign;
  D.16553 = (sizetype) D.16552;
  D.16554 = &locale_strings + D.16553;
  D.16555 = mono_string_new (domain, D.16554);
  D.16556 = &number->negativeSign;
  mono_gc_wbarrier_set_field (number, D.16556, D.16555);
  D.16557 = nfe->number_decimal_digits;
  D.16558 = (unsigned int) D.16557;
  number->numberDecimalDigits = D.16558;
  D.16559 = nfe->number_decimal_separator;
  D.16560 = (sizetype) D.16559;
  D.16561 = &locale_strings + D.16560;
  D.16562 = mono_string_new (domain, D.16561);
  D.16563 = &number->numberDecimalSeparator;
  mono_gc_wbarrier_set_field (number, D.16563, D.16562);
  D.16564 = nfe->number_group_separator;
  D.16565 = (sizetype) D.16564;
  D.16566 = &locale_strings + D.16565;
  D.16567 = mono_string_new (domain, D.16566);
  D.16568 = &number->numberGroupSeparator;
  mono_gc_wbarrier_set_field (number, D.16568, D.16567);
  D.16569 = &nfe->number_group_sizes;
  D.16570 = create_group_sizes_array (D.16569, 2);
  D.16571 = &number->numberGroupSizes;
  mono_gc_wbarrier_set_field (number, D.16571, D.16570);
  D.16572 = nfe->number_negative_pattern;
  D.16573 = (int) D.16572;
  number->numberNegativePattern = D.16573;
  D.16574 = nfe->percent_decimal_digits;
  D.16575 = (int) D.16574;
  number->percentDecimalDigits = D.16575;
  D.16576 = nfe->percent_decimal_separator;
  D.16577 = (sizetype) D.16576;
  D.16578 = &locale_strings + D.16577;
  D.16579 = mono_string_new (domain, D.16578);
  D.16580 = &number->percentDecimalSeparator;
  mono_gc_wbarrier_set_field (number, D.16580, D.16579);
  D.16581 = nfe->percent_group_separator;
  D.16582 = (sizetype) D.16581;
  D.16583 = &locale_strings + D.16582;
  D.16584 = mono_string_new (domain, D.16583);
  D.16585 = &number->percentGroupSeparator;
  mono_gc_wbarrier_set_field (number, D.16585, D.16584);
  D.16586 = &nfe->percent_group_sizes;
  D.16587 = create_group_sizes_array (D.16586, 2);
  D.16588 = &number->percentGroupSizes;
  mono_gc_wbarrier_set_field (number, D.16588, D.16587);
  D.16589 = nfe->percent_negative_pattern;
  D.16590 = (int) D.16589;
  number->percentNegativePattern = D.16590;
  D.16591 = nfe->percent_positive_pattern;
  D.16592 = (int) D.16591;
  number->percentPositivePattern = D.16592;
  D.16593 = nfe->percent_symbol;
  D.16594 = (sizetype) D.16593;
  D.16595 = &locale_strings + D.16594;
  D.16596 = mono_string_new (domain, D.16595);
  D.16597 = &number->percentSymbol;
  mono_gc_wbarrier_set_field (number, D.16597, D.16596);
  D.16598 = nfe->per_mille_symbol;
  D.16599 = (sizetype) D.16598;
  D.16600 = &locale_strings + D.16599;
  D.16601 = mono_string_new (domain, D.16600);
  D.16602 = &number->perMilleSymbol;
  mono_gc_wbarrier_set_field (number, D.16602, D.16601);
  D.16603 = nfe->positive_infinity_symbol;
  D.16604 = (sizetype) D.16603;
  D.16605 = &locale_strings + D.16604;
  D.16606 = mono_string_new (domain, D.16605);
  D.16607 = &number->positiveInfinitySymbol;
  mono_gc_wbarrier_set_field (number, D.16607, D.16606);
  D.16608 = nfe->positive_sign;
  D.16609 = (sizetype) D.16608;
  D.16610 = &locale_strings + D.16609;
  D.16611 = mono_string_new (domain, D.16610);
  D.16612 = &number->positiveSign;
  mono_gc_wbarrier_set_field (number, D.16612, D.16611);
}


create_group_sizes_array (const gint * gs, gint ml)
{
  unsigned int i.10;
  unsigned int D.16615;
  const gint * D.16616;
  int D.16617;
  unsigned int len.11;
  struct MonoClass * D.16079;
  struct MonoClass * tmp_klass.12;
  struct MonoClass * D.16623;
  struct MonoClass * tmp_klass.13;
  _Bool D.16625;
  long int D.16626;
  long int D.16627;
  struct MonoDomain * D.16630;
  struct MonoVTable * D.16631;
  unsigned int i.14;
  struct MonoArray * D.16633;
  struct MonoArray * ret;
  int i;
  int len;

  len = 0;
  i = 0;
  goto <D.16077>;
  <D.16076>:
  i.10 = (unsigned int) i;
  D.16615 = i.10 * 4;
  D.16616 = gs + D.16615;
  D.16617 = *D.16616;
  if (D.16617 == -1) goto <D.16075>; else goto <D.16618>;
  <D.16618>:
  len = len + 1;
  i = i + 1;
  <D.16077>:
  if (i < ml) goto <D.16076>; else goto <D.16075>;
  <D.16075>:
  len.11 = (unsigned int) len;
  {
    static struct MonoClass * tmp_klass;

    {
      tmp_klass.12 = tmp_klass;
      if (tmp_klass.12 == 0B) goto <D.16621>; else goto <D.16622>;
      <D.16621>:
      D.16623 = mono_get_int32_class ();
      tmp_klass.13 = mono_array_class_get (D.16623, 1);
      tmp_klass = tmp_klass.13;
      tmp_klass.12 = tmp_klass;
      D.16625 = tmp_klass.12 == 0B;
      D.16626 = (long int) D.16625;
      D.16627 = __builtin_expect (D.16626, 0);
      if (D.16627 != 0) goto <D.16628>; else goto <D.16629>;
      <D.16628>:
      monoeg_assertion_message ("* Assertion at %s:%d, condition `%s\' not met\n", "locales.c", 106, "tmp_klass");
      <D.16629>:
      <D.16622>:
    }
    D.16079 = tmp_klass;
  }
  D.16630 = mono_domain_get ();
  D.16631 = mono_class_vtable (D.16630, D.16079);
  ret = mono_array_new_specific (D.16631, len.11);
  i = 0;
  goto <D.16082>;
  <D.16081>:
  {
    gint32 * __p;

    i.14 = (unsigned int) i;
    __p = mono_array_addr_with_size (ret, 4, i.14);
    i.10 = (unsigned int) i;
    D.16615 = i.10 * 4;
    D.16616 = gs + D.16615;
    D.16617 = *D.16616;
    *__p = D.16617;
  }
  i = i + 1;
  <D.16082>:
  if (i < len) goto <D.16081>; else goto <D.16083>;
  <D.16083>:
  D.16633 = ret;
  return D.16633;
}


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

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


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

  locale = get_posix_locale ();
  if (locale == 0B) goto <D.16639>; else goto <D.16640>;
  <D.16639>:
  D.16641 = 0B;
  return D.16641;
  <D.16640>:
  p = __builtin_strchr (locale, 46);
  if (p != 0B) goto <D.16642>; else goto <D.16643>;
  <D.16642>:
  *p = 0;
  <D.16643>:
  p = __builtin_strchr (locale, 64);
  if (p != 0B) goto <D.16644>; else goto <D.16645>;
  <D.16644>:
  *p = 0;
  <D.16645>:
  p = __builtin_strchr (locale, 95);
  if (p != 0B) goto <D.16646>; else goto <D.16647>;
  <D.16646>:
  *p = 45;
  <D.16647>:
  ret = monoeg_g_ascii_strdown (locale, -1);
  monoeg_g_free (locale);
  D.16641 = ret;
  return D.16641;
}


get_posix_locale ()
{
  char * D.16655;
  int D.16157;
  int iftmp.15;
  int D.16156;
  const char[2] * D.16659;
  unsigned char D.16660;
  int D.16661;
  unsigned char D.16662;
  int D.16663;
  _Bool D.16664;
  _Bool D.16665;
  _Bool D.16666;
  const unsigned char * D.16669;
  unsigned char D.16670;
  int D.16671;
  const unsigned char * D.16672;
  unsigned char D.16673;
  int D.16674;
  _Bool D.16675;
  _Bool D.16676;
  const unsigned char * D.16679;
  unsigned char D.16680;
  int D.16681;
  const unsigned char * D.16682;
  unsigned char D.16683;
  int D.16684;
  _Bool D.16685;
  _Bool D.16686;
  const unsigned char * D.16689;
  unsigned char D.16690;
  int D.16691;
  const unsigned char * D.16692;
  unsigned char D.16693;
  int D.16694;
  const char * locale;

  locale = monoeg_g_getenv ("LC_ALL");
  if (locale == 0B) goto <D.16649>; else goto <D.16650>;
  <D.16649>:
  locale = monoeg_g_getenv ("LANG");
  if (locale == 0B) goto <D.16651>; else goto <D.16652>;
  <D.16651>:
  locale = setlocale (6, 0B);
  <D.16652>:
  <D.16650>:
  if (locale == 0B) goto <D.16653>; else goto <D.16654>;
  <D.16653>:
  D.16655 = 0B;
  return D.16655;
  <D.16654>:
  {
    size_t __s1_len;
    size_t __s2_len;

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

      __s2 = locale;
      D.16659 = "C";
      D.16660 = MEM[(const unsigned char *)D.16659];
      D.16661 = (int) D.16660;
      D.16662 = *__s2;
      D.16663 = (int) D.16662;
      __result = D.16661 - D.16663;
      {
        D.16664 = __s2_len != 0;
        D.16665 = __result == 0;
        D.16666 = D.16664 & D.16665;
        if (D.16666 != 0) goto <D.16667>; else goto <D.16668>;
        <D.16667>:
        D.16669 = &MEM[(void *)"C" + 1B];
        D.16670 = *D.16669;
        D.16671 = (int) D.16670;
        D.16672 = __s2 + 1;
        D.16673 = *D.16672;
        D.16674 = (int) D.16673;
        __result = D.16671 - D.16674;
        D.16675 = __s2_len > 1;
        D.16665 = __result == 0;
        D.16676 = D.16675 & D.16665;
        if (D.16676 != 0) goto <D.16677>; else goto <D.16678>;
        <D.16677>:
        D.16679 = &MEM[(void *)"C" + 2B];
        D.16680 = *D.16679;
        D.16681 = (int) D.16680;
        D.16682 = __s2 + 2;
        D.16683 = *D.16682;
        D.16684 = (int) D.16683;
        __result = D.16681 - D.16684;
        D.16685 = __s2_len > 2;
        D.16665 = __result == 0;
        D.16686 = D.16685 & D.16665;
        if (D.16686 != 0) goto <D.16687>; else goto <D.16688>;
        <D.16687>:
        D.16689 = &MEM[(void *)"C" + 3B];
        D.16690 = *D.16689;
        D.16691 = (int) D.16690;
        D.16692 = __s2 + 3;
        D.16693 = *D.16692;
        D.16694 = (int) D.16693;
        __result = D.16691 - D.16694;
        <D.16688>:
        <D.16678>:
        <D.16668>:
      }
      D.16156 = __result;
    }
    iftmp.15 = -D.16156;
    goto <D.16695>;
    <D.16658>:
    iftmp.15 = __builtin_strcmp (locale, "C");
    <D.16695>:
    D.16157 = iftmp.15;
  }
  if (D.16157 == 0) goto <D.16696>; else goto <D.16697>;
  <D.16696>:
  D.16655 = 0B;
  return D.16655;
  <D.16697>:
  D.16655 = monoeg_strdup (locale);
  return D.16655;
}


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

  if (str != 0B) goto <D.16699>; else goto <D.16700>;
  <D.16699>:
  D.16701 = __strdup (str);
  return D.16701;
  <D.16700>:
  D.16701 = 0B;
  return D.16701;
}


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

  ci = culture_info_entry_from_lcid (lcid);
  if (ci == 0B) goto <D.16703>; else goto <D.16704>;
  <D.16703>:
  D.16705 = 0;
  return D.16705;
  <D.16704>:
  D.16705 = construct_culture (this, ci);
  return D.16705;
}


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

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


culture_lcid_locator (const void * a, const void * b)
{
  int D.16709;
  int D.16710;
  short int D.16711;
  int D.16712;
  const int * lcid;
  const struct CultureInfoEntry * bb;

  lcid = a;
  bb = b;
  D.16710 = *lcid;
  D.16711 = bb->lcid;
  D.16712 = (int) D.16711;
  D.16709 = D.16710 - D.16712;
  return D.16709;
}


construct_culture (struct MonoCultureInfo * this, const struct CultureInfoEntry * ci)
{
  short int D.16714;
  int D.16715;
  short unsigned int D.16716;
  sizetype D.16717;
  const char * D.16718;
  struct MonoString * D.16719;
  struct MonoString * * D.16720;
  short unsigned int D.16721;
  sizetype D.16722;
  const char * D.16723;
  struct MonoString * D.16724;
  struct MonoString * * D.16725;
  short unsigned int D.16726;
  sizetype D.16727;
  const char * D.16728;
  struct MonoString * D.16729;
  struct MonoString * * D.16730;
  short unsigned int D.16731;
  sizetype D.16732;
  const char * D.16733;
  struct MonoString * D.16734;
  struct MonoString * * D.16735;
  short unsigned int D.16736;
  sizetype D.16737;
  const char * D.16738;
  struct MonoString * D.16739;
  struct MonoString * * D.16740;
  short unsigned int D.16741;
  sizetype D.16742;
  const char * D.16743;
  struct MonoString * D.16744;
  struct MonoString * * D.16745;
  short unsigned int D.16746;
  sizetype D.16749;
  const char * D.16750;
  struct MonoString * D.16751;
  struct MonoString * * D.16752;
  const stridx_t[4] * D.16753;
  struct MonoArray * D.16754;
  struct MonoArray * * D.16755;
  short int D.16756;
  int D.16757;
  short int D.16758;
  int D.16759;
  short int D.16760;
  int D.16761;
  short int D.16762;
  int D.16763;
  const struct TextInfoEntry * D.16764;
  MonoBoolean D.16765;
  struct MonoDomain * domain;

  domain = mono_domain_get ();
  D.16714 = ci->lcid;
  D.16715 = (int) D.16714;
  this->lcid = D.16715;
  D.16716 = ci->name;
  D.16717 = (sizetype) D.16716;
  D.16718 = &locale_strings + D.16717;
  D.16719 = mono_string_new (domain, D.16718);
  D.16720 = &this->name;
  mono_gc_wbarrier_set_field (this, D.16720, D.16719);
  D.16721 = ci->englishname;
  D.16722 = (sizetype) D.16721;
  D.16723 = &locale_strings + D.16722;
  D.16724 = mono_string_new (domain, D.16723);
  D.16725 = &this->englishname;
  mono_gc_wbarrier_set_field (this, D.16725, D.16724);
  D.16726 = ci->nativename;
  D.16727 = (sizetype) D.16726;
  D.16728 = &locale_strings + D.16727;
  D.16729 = mono_string_new (domain, D.16728);
  D.16730 = &this->nativename;
  mono_gc_wbarrier_set_field (this, D.16730, D.16729);
  D.16731 = ci->win3lang;
  D.16732 = (sizetype) D.16731;
  D.16733 = &locale_strings + D.16732;
  D.16734 = mono_string_new (domain, D.16733);
  D.16735 = &this->win3lang;
  mono_gc_wbarrier_set_field (this, D.16735, D.16734);
  D.16736 = ci->iso3lang;
  D.16737 = (sizetype) D.16736;
  D.16738 = &locale_strings + D.16737;
  D.16739 = mono_string_new (domain, D.16738);
  D.16740 = &this->iso3lang;
  mono_gc_wbarrier_set_field (this, D.16740, D.16739);
  D.16741 = ci->iso2lang;
  D.16742 = (sizetype) D.16741;
  D.16743 = &locale_strings + D.16742;
  D.16744 = mono_string_new (domain, D.16743);
  D.16745 = &this->iso2lang;
  mono_gc_wbarrier_set_field (this, D.16745, D.16744);
  D.16746 = ci->territory;
  if (D.16746 != 0) goto <D.16747>; else goto <D.16748>;
  <D.16747>:
  D.16746 = ci->territory;
  D.16749 = (sizetype) D.16746;
  D.16750 = &locale_strings + D.16749;
  D.16751 = mono_string_new (domain, D.16750);
  D.16752 = &this->territory;
  mono_gc_wbarrier_set_field (this, D.16752, D.16751);
  <D.16748>:
  D.16753 = &ci->native_calendar_names;
  D.16754 = create_names_array_idx (D.16753, 4);
  D.16755 = &this->native_calendar_names;
  mono_gc_wbarrier_set_field (this, D.16755, D.16754);
  D.16756 = ci->parent_lcid;
  D.16757 = (int) D.16756;
  this->parent_lcid = D.16757;
  D.16758 = ci->datetime_format_index;
  D.16759 = (int) D.16758;
  this->datetime_index = D.16759;
  D.16760 = ci->number_format_index;
  D.16761 = (int) D.16760;
  this->number_index = D.16761;
  D.16762 = ci->calendar_type;
  D.16763 = (int) D.16762;
  this->calendar_type = D.16763;
  D.16764 = &ci->text_info;
  this->text_info_data = D.16764;
  D.16765 = 1;
  return D.16765;
}


ves_icall_System_Globalization_CultureInfo_construct_internal_locale_from_name (struct MonoCultureInfo * this, struct MonoString * name)
{
  MonoBoolean D.16769;
  short int D.16770;
  int D.16771;
  const struct CultureInfoEntry * D.16772;
  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.16767>; else goto <D.16768>;
  <D.16767>:
  monoeg_g_free (n);
  D.16769 = 0;
  return D.16769;
  <D.16768>:
  monoeg_g_free (n);
  D.16770 = ne->culture_entry_index;
  D.16771 = (int) D.16770;
  D.16772 = &culture_entries[D.16771];
  D.16769 = construct_culture (this, D.16772);
  return D.16769;
}


culture_name_locator (const void * a, const void * b)
{
  int ret.16;
  short unsigned int D.16774;
  sizetype D.16775;
  const char * D.16776;
  int D.16777;
  const char * aa;
  const struct CultureInfoNameEntry * bb;
  int ret;

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

    D.16774 = bb->name;
    D.16775 = (sizetype) D.16774;
    D.16776 = &locale_strings + D.16775;
    ret.16 = __builtin_strcmp (aa, D.16776);
  }
  ret = ret.16;
  D.16777 = ret;
  return D.16777;
}


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

  ri = region_info_entry_from_lcid (lcid);
  if (ri == 0B) goto <D.16779>; else goto <D.16780>;
  <D.16779>:
  D.16781 = 0;
  return D.16781;
  <D.16780>:
  D.16781 = construct_region (this, ri);
  return D.16781;
}


region_info_entry_from_lcid (int lcid)
{
  const struct RegionInfoEntry * D.16785;
  short int D.16786;
  int D.16787;
  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.16783>; else goto <D.16784>;
  <D.16783>:
  D.16785 = 0B;
  return D.16785;
  <D.16784>:
  D.16786 = ne->region_entry_index;
  D.16787 = (int) D.16786;
  entry = &region_entries[D.16787];
  D.16785 = entry;
  return D.16785;
}


construct_region (struct MonoRegionInfo * this, const struct RegionInfoEntry * ri)
{
  short int D.16789;
  int D.16790;
  short unsigned int D.16791;
  sizetype D.16792;
  const char * D.16793;
  struct MonoString * D.16794;
  struct MonoString * * D.16795;
  short unsigned int D.16796;
  sizetype D.16797;
  const char * D.16798;
  struct MonoString * D.16799;
  struct MonoString * * D.16800;
  short unsigned int D.16801;
  sizetype D.16802;
  const char * D.16803;
  struct MonoString * D.16804;
  struct MonoString * * D.16805;
  short unsigned int D.16806;
  sizetype D.16807;
  const char * D.16808;
  struct MonoString * D.16809;
  struct MonoString * * D.16810;
  short unsigned int D.16811;
  sizetype D.16812;
  const char * D.16813;
  struct MonoString * D.16814;
  struct MonoString * * D.16815;
  short unsigned int D.16816;
  sizetype D.16817;
  const char * D.16818;
  struct MonoString * D.16819;
  struct MonoString * * D.16820;
  short unsigned int D.16821;
  sizetype D.16822;
  const char * D.16823;
  struct MonoString * D.16824;
  struct MonoString * * D.16825;
  short unsigned int D.16826;
  sizetype D.16827;
  const char * D.16828;
  struct MonoString * D.16829;
  struct MonoString * * D.16830;
  short unsigned int D.16831;
  sizetype D.16832;
  const char * D.16833;
  struct MonoString * D.16834;
  struct MonoString * * D.16835;
  MonoBoolean D.16836;
  struct MonoDomain * domain;

  domain = mono_domain_get ();
  D.16789 = ri->geo_id;
  D.16790 = (int) D.16789;
  this->geo_id = D.16790;
  D.16791 = ri->iso2name;
  D.16792 = (sizetype) D.16791;
  D.16793 = &locale_strings + D.16792;
  D.16794 = mono_string_new (domain, D.16793);
  D.16795 = &this->iso2name;
  mono_gc_wbarrier_set_field (this, D.16795, D.16794);
  D.16796 = ri->iso3name;
  D.16797 = (sizetype) D.16796;
  D.16798 = &locale_strings + D.16797;
  D.16799 = mono_string_new (domain, D.16798);
  D.16800 = &this->iso3name;
  mono_gc_wbarrier_set_field (this, D.16800, D.16799);
  D.16801 = ri->win3name;
  D.16802 = (sizetype) D.16801;
  D.16803 = &locale_strings + D.16802;
  D.16804 = mono_string_new (domain, D.16803);
  D.16805 = &this->win3name;
  mono_gc_wbarrier_set_field (this, D.16805, D.16804);
  D.16806 = ri->english_name;
  D.16807 = (sizetype) D.16806;
  D.16808 = &locale_strings + D.16807;
  D.16809 = mono_string_new (domain, D.16808);
  D.16810 = &this->english_name;
  mono_gc_wbarrier_set_field (this, D.16810, D.16809);
  D.16811 = ri->native_name;
  D.16812 = (sizetype) D.16811;
  D.16813 = &locale_strings + D.16812;
  D.16814 = mono_string_new (domain, D.16813);
  D.16815 = &this->native_name;
  mono_gc_wbarrier_set_field (this, D.16815, D.16814);
  D.16816 = ri->currency_symbol;
  D.16817 = (sizetype) D.16816;
  D.16818 = &locale_strings + D.16817;
  D.16819 = mono_string_new (domain, D.16818);
  D.16820 = &this->currency_symbol;
  mono_gc_wbarrier_set_field (this, D.16820, D.16819);
  D.16821 = ri->iso_currency_symbol;
  D.16822 = (sizetype) D.16821;
  D.16823 = &locale_strings + D.16822;
  D.16824 = mono_string_new (domain, D.16823);
  D.16825 = &this->iso_currency_symbol;
  mono_gc_wbarrier_set_field (this, D.16825, D.16824);
  D.16826 = ri->currency_english_name;
  D.16827 = (sizetype) D.16826;
  D.16828 = &locale_strings + D.16827;
  D.16829 = mono_string_new (domain, D.16828);
  D.16830 = &this->currency_english_name;
  mono_gc_wbarrier_set_field (this, D.16830, D.16829);
  D.16831 = ri->currency_native_name;
  D.16832 = (sizetype) D.16831;
  D.16833 = &locale_strings + D.16832;
  D.16834 = mono_string_new (domain, D.16833);
  D.16835 = &this->currency_native_name;
  mono_gc_wbarrier_set_field (this, D.16835, D.16834);
  D.16836 = 1;
  return D.16836;
}


ves_icall_System_Globalization_RegionInfo_construct_internal_region_from_name (struct MonoRegionInfo * this, struct MonoString * name)
{
  MonoBoolean D.16840;
  short int D.16841;
  int D.16842;
  const struct RegionInfoEntry * D.16843;
  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.16838>; else goto <D.16839>;
  <D.16838>:
  monoeg_g_free (n);
  D.16840 = 0;
  return D.16840;
  <D.16839>:
  monoeg_g_free (n);
  D.16841 = ne->region_entry_index;
  D.16842 = (int) D.16841;
  D.16843 = &region_entries[D.16842];
  D.16840 = construct_region (this, D.16843);
  return D.16840;
}


region_name_locator (const void * a, const void * b)
{
  int ret.17;
  short unsigned int D.16845;
  sizetype D.16846;
  const char * D.16847;
  int D.16848;
  const char * aa;
  const struct RegionInfoNameEntry * bb;
  int ret;

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

    D.16845 = bb->name;
    D.16846 = (sizetype) D.16845;
    D.16847 = &locale_strings + D.16846;
    ret.17 = __builtin_strcmp (aa, D.16847);
  }
  ret = ret.17;
  D.16848 = ret;
  return D.16848;
}


ves_icall_System_Globalization_CultureInfo_internal_get_cultures (MonoBoolean neutral, MonoBoolean specific, MonoBoolean installed)
{
  short unsigned int D.16850;
  _Bool D.16851;
  _Bool D.16854;
  _Bool D.16855;
  _Bool D.16856;
  _Bool D.16858;
  _Bool D.16859;
  _Bool D.16860;
  struct MonoImage * D.16861;
  unsigned int len.18;
  struct MonoArray * D.16867;
  int len.19;
  unsigned int len.20;
  int len.21;
  unsigned int len.22;
  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.16206>;
  <D.16205>:
  ci = &culture_entries[i];
  D.16850 = ci->territory;
  D.16851 = D.16850 == 0;
  is_neutral = (gboolean) D.16851;
  D.16854 = neutral != 0;
  D.16855 = is_neutral != 0;
  D.16856 = D.16854 & D.16855;
  if (D.16856 != 0) goto <D.16852>; else goto <D.16857>;
  <D.16857>:
  D.16858 = specific != 0;
  D.16859 = is_neutral == 0;
  D.16860 = D.16858 & D.16859;
  if (D.16860 != 0) goto <D.16852>; else goto <D.16853>;
  <D.16852>:
  len = len + 1;
  <D.16853>:
  i = i + 1;
  <D.16206>:
  if (i <= 282) goto <D.16205>; else goto <D.16207>;
  <D.16207>:
  D.16861 = mono_get_corlib ();
  class = mono_class_from_name (D.16861, "System.Globalization", "CultureInfo");
  if (neutral != 0) goto <D.16862>; else goto <D.16863>;
  <D.16862>:
  len = len + 1;
  <D.16863>:
  len.18 = (unsigned int) len;
  ret = mono_array_new (domain, class, len.18);
  if (len == 0) goto <D.16865>; else goto <D.16866>;
  <D.16865>:
  D.16867 = ret;
  return D.16867;
  <D.16866>:
  len = 0;
  if (neutral != 0) goto <D.16868>; else goto <D.16869>;
  <D.16868>:
  {
    void * * __p;

    len.19 = len;
    len = len.19 + 1;
    len.20 = (unsigned int) len.19;
    __p = mono_array_addr_with_size (ret, 4, len.20);
    mono_gc_wbarrier_set_arrayref (ret, __p, 0B);
  }
  <D.16869>:
  i = 0;
  goto <D.16211>;
  <D.16210>:
  ci = &culture_entries[i];
  D.16850 = ci->territory;
  D.16851 = D.16850 == 0;
  is_neutral = (gboolean) D.16851;
  D.16854 = neutral != 0;
  D.16855 = is_neutral != 0;
  D.16856 = D.16854 & D.16855;
  if (D.16856 != 0) goto <D.16872>; else goto <D.16874>;
  <D.16874>:
  D.16858 = specific != 0;
  D.16859 = is_neutral == 0;
  D.16860 = D.16858 & D.16859;
  if (D.16860 != 0) goto <D.16872>; else goto <D.16873>;
  <D.16872>:
  culture = mono_object_new (domain, class);
  mono_runtime_object_init (culture);
  construct_culture (culture, ci);
  culture->use_user_override = 1;
  {
    void * * __p;

    len.21 = len;
    len = len.21 + 1;
    len.22 = (unsigned int) len.21;
    __p = mono_array_addr_with_size (ret, 4, len.22);
    mono_gc_wbarrier_set_arrayref (ret, __p, culture);
  }
  <D.16873>:
  i = i + 1;
  <D.16211>:
  if (i <= 282) goto <D.16210>; else goto <D.16212>;
  <D.16212>:
  D.16867 = ret;
  return D.16867;
}


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.16878;

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


string_invariant_compare (struct MonoString * str1, gint32 off1, gint32 len1, struct MonoString * str2, gint32 off2, gint32 len2, gint32 options)
{
  mono_unichar2 * D.16883;
  unsigned int off1.23;
  unsigned int D.16885;
  mono_unichar2 * D.16886;
  unsigned int off2.24;
  unsigned int D.16888;
  _Bool D.16889;
  _Bool D.16890;
  _Bool D.16891;
  unsigned int pos.25;
  unsigned int D.16894;
  gunichar2 * D.16895;
  short unsigned int D.16896;
  int D.16897;
  gunichar2 * D.16898;
  short unsigned int D.16899;
  int D.16900;
  gint32 D.16903;
  sizetype pos.26;
  sizetype D.16907;
  sizetype D.16908;
  gunichar2 * D.16909;
  short unsigned int D.16910;
  int D.16911;
  gunichar2 * D.16912;
  short unsigned int D.16913;
  int D.16914;
  gint32 length;
  gint32 charcmp;
  gunichar2 * ustr1;
  gunichar2 * ustr2;
  gint32 pos;

  if (len1 >= len2) goto <D.16880>; else goto <D.16881>;
  <D.16880>:
  length = len1;
  goto <D.16882>;
  <D.16881>:
  length = len2;
  <D.16882>:
  D.16883 = mono_string_chars (str1);
  off1.23 = (unsigned int) off1;
  D.16885 = off1.23 * 2;
  ustr1 = D.16883 + D.16885;
  D.16886 = mono_string_chars (str2);
  off2.24 = (unsigned int) off2;
  D.16888 = off2.24 * 2;
  ustr2 = D.16886 + D.16888;
  pos = 0;
  pos = 0;
  goto <D.16294>;
  <D.16293>:
  D.16889 = pos >= len1;
  D.16890 = pos >= len2;
  D.16891 = D.16889 | D.16890;
  if (D.16891 != 0) goto <D.16292>; else goto <D.16892>;
  <D.16892>:
  pos.25 = (unsigned int) pos;
  D.16894 = pos.25 * 2;
  D.16895 = ustr2 + D.16894;
  D.16896 = *D.16895;
  D.16897 = (int) D.16896;
  pos.25 = (unsigned int) pos;
  D.16894 = pos.25 * 2;
  D.16898 = ustr1 + D.16894;
  D.16899 = *D.16898;
  D.16900 = (int) D.16899;
  charcmp = string_invariant_compare_char (D.16900, D.16897, options);
  if (charcmp != 0) goto <D.16901>; else goto <D.16902>;
  <D.16901>:
  D.16903 = charcmp;
  return D.16903;
  <D.16902>:
  pos = pos + 1;
  <D.16294>:
  if (pos != length) goto <D.16293>; else goto <D.16292>;
  <D.16292>:
  if (pos == length) goto <D.16904>; else goto <D.16905>;
  <D.16904>:
  pos.26 = (sizetype) pos;
  D.16907 = pos.26 + 2147483647;
  D.16908 = D.16907 * 2;
  D.16909 = ustr2 + D.16908;
  D.16910 = *D.16909;
  D.16911 = (int) D.16910;
  pos.26 = (sizetype) pos;
  D.16907 = pos.26 + 2147483647;
  D.16908 = D.16907 * 2;
  D.16912 = ustr1 + D.16908;
  D.16913 = *D.16912;
  D.16914 = (int) D.16913;
  D.16903 = string_invariant_compare_char (D.16914, D.16911, options);
  return D.16903;
  <D.16905>:
  if (pos >= len1) goto <D.16915>; else goto <D.16916>;
  <D.16915>:
  if (pos >= len2) goto <D.16917>; else goto <D.16918>;
  <D.16917>:
  D.16903 = 0;
  return D.16903;
  <D.16918>:
  D.16903 = -1;
  return D.16903;
  <D.16916>:
  if (pos >= len2) goto <D.16919>; else goto <D.16920>;
  <D.16919>:
  D.16903 = 1;
  return D.16903;
  <D.16920>:
  pos.25 = (unsigned int) pos;
  D.16894 = pos.25 * 2;
  D.16895 = ustr2 + D.16894;
  D.16896 = *D.16895;
  D.16897 = (int) D.16896;
  pos.25 = (unsigned int) pos;
  D.16894 = pos.25 * 2;
  D.16898 = ustr1 + D.16894;
  D.16899 = *D.16898;
  D.16900 = (int) D.16899;
  D.16903 = string_invariant_compare_char (D.16900, D.16897, options);
  return D.16903;
}


string_invariant_compare_char (gunichar2 c1, gunichar2 c2, gint32 options)
{
  int D.16922;
  gint32 D.16925;
  int D.16926;
  int D.16927;
  int D.16928;
  unsigned int D.16931;
  unsigned int D.16932;
  gunichar iftmp.27;
  gunichar iftmp.28;
  unsigned int D.16941;
  gint32 iftmp.29;
  _Bool D.16946;
  gint32 result;

  D.16922 = options & 1073741824;
  if (D.16922 != 0) goto <D.16923>; else goto <D.16924>;
  <D.16923>:
  D.16926 = (int) c1;
  D.16927 = (int) c2;
  D.16925 = D.16926 - D.16927;
  return D.16925;
  <D.16924>:
  D.16928 = options & 1;
  if (D.16928 != 0) goto <D.16929>; else goto <D.16930>;
  <D.16929>:
  {
    GUnicodeType c1type;
    GUnicodeType c2type;

    D.16931 = (unsigned int) c1;
    c1type = monoeg_g_unichar_type (D.16931);
    D.16932 = (unsigned int) c2;
    c2type = monoeg_g_unichar_type (D.16932);
    if (c1type != 5) goto <D.16934>; else goto <D.16935>;
    <D.16934>:
    D.16931 = (unsigned int) c1;
    iftmp.27 = monoeg_g_unichar_tolower (D.16931);
    goto <D.16936>;
    <D.16935>:
    iftmp.27 = (gunichar) c1;
    <D.16936>:
    if (c2type != 5) goto <D.16938>; else goto <D.16939>;
    <D.16938>:
    D.16932 = (unsigned int) c2;
    iftmp.28 = monoeg_g_unichar_tolower (D.16932);
    goto <D.16940>;
    <D.16939>:
    iftmp.28 = (gunichar) c2;
    <D.16940>:
    D.16941 = iftmp.27 - iftmp.28;
    result = (gint32) D.16941;
  }
  goto <D.16942>;
  <D.16930>:
  D.16926 = (int) c1;
  D.16927 = (int) c2;
  result = D.16926 - D.16927;
  <D.16942>:
  if (result >= 0) goto <D.16944>; else goto <D.16945>;
  <D.16944>:
  D.16946 = result > 0;
  iftmp.29 = (gint32) D.16946;
  goto <D.16947>;
  <D.16945>:
  iftmp.29 = -1;
  <D.16947>:
  D.16925 = iftmp.29;
  return D.16925;
}


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)
{
  unsigned int keylen.30;
  struct MonoClass * D.16950;
  struct MonoDomain * D.16951;
  unsigned int i.31;
  mono_unichar2 * D.16953;
  unsigned int i.32;
  unsigned int D.16955;
  mono_unichar2 * D.16956;
  short unsigned int D.16957;
  unsigned char D.16958;
  struct MonoArray * * D.16959;
  struct MonoArray * arr;
  gint32 keylen;
  gint32 i;

  keylen = mono_string_length (source);
  keylen.30 = (unsigned int) keylen;
  D.16950 = mono_get_byte_class ();
  D.16951 = mono_domain_get ();
  arr = mono_array_new (D.16951, D.16950, keylen.30);
  i = 0;
  goto <D.16241>;
  <D.16240>:
  {
    guint8 * __p;

    i.31 = (unsigned int) i;
    __p = mono_array_addr_with_size (arr, 1, i.31);
    D.16953 = mono_string_chars (source);
    i.32 = (unsigned int) i;
    D.16955 = i.32 * 2;
    D.16956 = D.16953 + D.16955;
    D.16957 = *D.16956;
    D.16958 = (unsigned char) D.16957;
    *__p = D.16958;
  }
  i = i + 1;
  <D.16241>:
  if (i < keylen) goto <D.16240>; else goto <D.16242>;
  <D.16242>:
  D.16959 = &key->key;
  mono_gc_wbarrier_set_field (key, D.16959, 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.16960;
  int D.16961;

  D.16961 = (int) first;
  D.16960 = string_invariant_indexof (source, sindex, count, value, D.16961);
  return D.16960;
}


string_invariant_indexof (struct MonoString * source, gint32 sindex, gint32 count, struct MonoString * value, MonoBoolean first)
{
  gint32 D.16967;
  int D.16968;
  unsigned int D.16969;
  unsigned int D.16970;
  gunichar2 * D.16971;
  short unsigned int D.16972;
  unsigned int i.33;
  unsigned int D.16974;
  gunichar2 * D.16975;
  short unsigned int D.16976;
  int D.16977;
  int D.16978;
  unsigned int lencmpstr.34;
  unsigned int D.16980;
  unsigned int pos.35;
  unsigned int D.16982;
  const void * D.16983;
  int D.16984;
  int D.16987;
  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.16963>; else goto <D.16964>;
  <D.16963>:
  count = count - lencmpstr;
  pos = sindex;
  goto <D.16334>;
  <D.16333>:
  i = 0;
  goto <D.16331>;
  <D.16330>:
  i = i + 1;
  if (i == lencmpstr) goto <D.16965>; else goto <D.16966>;
  <D.16965>:
  D.16967 = pos;
  return D.16967;
  <D.16966>:
  <D.16331>:
  D.16968 = pos + i;
  D.16969 = (unsigned int) D.16968;
  D.16970 = D.16969 * 2;
  D.16971 = src + D.16970;
  D.16972 = *D.16971;
  i.33 = (unsigned int) i;
  D.16974 = i.33 * 2;
  D.16975 = cmpstr + D.16974;
  D.16976 = *D.16975;
  if (D.16972 == D.16976) goto <D.16330>; else goto <D.16332>;
  <D.16332>:
  pos = pos + 1;
  <D.16334>:
  D.16977 = sindex + count;
  if (D.16977 >= pos) goto <D.16333>; else goto <D.16335>;
  <D.16335>:
  D.16967 = -1;
  return D.16967;
  <D.16964>:
  D.16978 = sindex - lencmpstr;
  pos = D.16978 + 1;
  goto <D.16337>;
  <D.16336>:
  lencmpstr.34 = (unsigned int) lencmpstr;
  D.16980 = lencmpstr.34 * 2;
  pos.35 = (unsigned int) pos;
  D.16982 = pos.35 * 2;
  D.16983 = src + D.16982;
  D.16984 = memcmp (D.16983, cmpstr, D.16980);
  if (D.16984 == 0) goto <D.16985>; else goto <D.16986>;
  <D.16985>:
  D.16967 = pos;
  return D.16967;
  <D.16986>:
  pos = pos + -1;
  <D.16337>:
  D.16987 = sindex - count;
  if (D.16987 < pos) goto <D.16336>; else goto <D.16338>;
  <D.16338>:
  D.16967 = -1;
  return D.16967;
}


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.16989;
  int D.16990;
  int D.16991;

  D.16990 = (int) first;
  D.16991 = (int) value;
  D.16989 = string_invariant_indexof_char (source, sindex, count, D.16991, D.16990);
  return D.16989;
}


string_invariant_indexof_char (struct MonoString * source, gint32 sindex, gint32 count, gunichar2 value, MonoBoolean first)
{
  unsigned int pos.36;
  unsigned int D.16996;
  gunichar2 * D.16997;
  short unsigned int D.16998;
  gint32 D.17001;
  int D.17002;
  int D.17005;
  gint32 pos;
  gunichar2 * src;

  src = mono_string_chars (source);
  if (first != 0) goto <D.16993>; else goto <D.16994>;
  <D.16993>:
  pos = sindex;
  goto <D.16349>;
  <D.16348>:
  pos.36 = (unsigned int) pos;
  D.16996 = pos.36 * 2;
  D.16997 = src + D.16996;
  D.16998 = *D.16997;
  if (D.16998 == value) goto <D.16999>; else goto <D.17000>;
  <D.16999>:
  D.17001 = pos;
  return D.17001;
  <D.17000>:
  pos = pos + 1;
  <D.16349>:
  D.17002 = count + sindex;
  if (D.17002 != pos) goto <D.16348>; else goto <D.16350>;
  <D.16350>:
  D.17001 = -1;
  return D.17001;
  <D.16994>:
  pos = sindex;
  goto <D.16352>;
  <D.16351>:
  pos.36 = (unsigned int) pos;
  D.16996 = pos.36 * 2;
  D.16997 = src + D.16996;
  D.16998 = *D.16997;
  if (D.16998 == value) goto <D.17003>; else goto <D.17004>;
  <D.17003>:
  D.17001 = pos;
  return D.17001;
  <D.17004>:
  pos = pos + -1;
  <D.16352>:
  D.17005 = sindex - count;
  if (D.17005 < pos) goto <D.16351>; else goto <D.16353>;
  <D.16353>:
  D.17001 = -1;
  return D.17001;
}


ves_icall_System_Threading_Thread_current_lcid ()
{
  int D.17007;

  D.17007 = 127;
  return D.17007;
}


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

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


string_invariant_replace (struct MonoString * me, struct MonoString * oldValue, struct MonoString * newValue)
{
  unsigned int oldstrlen.37;
  unsigned int D.17017;
  unsigned int i.38;
  unsigned int D.17019;
  const void * D.17020;
  int D.17021;
  int D.17025;
  struct MonoString * D.17028;
  int D.17029;
  int D.17030;
  int D.17032;
  struct MonoDomain * D.17037;
  unsigned int newstrlen.39;
  unsigned int D.17041;
  unsigned int destpos.40;
  unsigned int D.17043;
  gunichar2 * D.17044;
  gunichar2 * D.17047;
  short unsigned int D.17048;
  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.17011>; else goto <D.17012>;
  <D.17011>:
  newstr = mono_string_chars (newValue);
  newstrlen = mono_string_length (newValue);
  goto <D.17013>;
  <D.17012>:
  newstrlen = 0;
  <D.17013>:
  src = mono_string_chars (me);
  srclen = mono_string_length (me);
  if (oldstrlen != newstrlen) goto <D.17014>; else goto <D.17015>;
  <D.17014>:
  i = 0;
  goto <D.16313>;
  <D.16312>:
  oldstrlen.37 = (unsigned int) oldstrlen;
  D.17017 = oldstrlen.37 * 2;
  i.38 = (unsigned int) i;
  D.17019 = i.38 * 2;
  D.17020 = src + D.17019;
  D.17021 = memcmp (D.17020, oldstr, D.17017);
  if (D.17021 == 0) goto <D.17022>; else goto <D.17023>;
  <D.17022>:
  occurr = occurr + 1;
  i = i + oldstrlen;
  goto <D.17024>;
  <D.17023>:
  i = i + 1;
  <D.17024>:
  <D.16313>:
  D.17025 = srclen - oldstrlen;
  if (D.17025 >= i) goto <D.16312>; else goto <D.16314>;
  <D.16314>:
  if (occurr == 0) goto <D.17026>; else goto <D.17027>;
  <D.17026>:
  D.17028 = me;
  return D.17028;
  <D.17027>:
  D.17029 = newstrlen - oldstrlen;
  D.17030 = D.17029 * occurr;
  newsize = D.17030 + srclen;
  goto <D.17031>;
  <D.17015>:
  newsize = srclen;
  <D.17031>:
  ret = 0B;
  i = 0;
  goto <D.16315>;
  <D.16316>:
  oldstrlen.37 = (unsigned int) oldstrlen;
  D.17017 = oldstrlen.37 * 2;
  i.38 = (unsigned int) i;
  D.17019 = i.38 * 2;
  D.17020 = src + D.17019;
  D.17032 = memcmp (D.17020, oldstr, D.17017);
  if (D.17032 == 0) goto <D.17033>; else goto <D.17034>;
  <D.17033>:
  if (ret == 0B) goto <D.17035>; else goto <D.17036>;
  <D.17035>:
  D.17037 = mono_domain_get ();
  ret = mono_string_new_size (D.17037, newsize);
  dest = mono_string_chars (ret);
  i.38 = (unsigned int) i;
  D.17019 = i.38 * 2;
  memcpy (dest, src, D.17019);
  <D.17036>:
  if (newstrlen > 0) goto <D.17038>; else goto <D.17039>;
  <D.17038>:
  newstrlen.39 = (unsigned int) newstrlen;
  D.17041 = newstrlen.39 * 2;
  destpos.40 = (unsigned int) destpos;
  D.17043 = destpos.40 * 2;
  D.17044 = dest + D.17043;
  memcpy (D.17044, newstr, D.17041);
  destpos = destpos + newstrlen;
  <D.17039>:
  i = i + oldstrlen;
  // predicted unlikely by continue predictor.
  goto <D.16315>;
  <D.17034>:
  if (ret != 0B) goto <D.17045>; else goto <D.17046>;
  <D.17045>:
  destpos.40 = (unsigned int) destpos;
  D.17043 = destpos.40 * 2;
  D.17044 = dest + D.17043;
  i.38 = (unsigned int) i;
  D.17019 = i.38 * 2;
  D.17047 = src + D.17019;
  D.17048 = *D.17047;
  *D.17044 = D.17048;
  <D.17046>:
  destpos = destpos + 1;
  i = i + 1;
  <D.16315>:
  if (i < srclen) goto <D.16316>; else goto <D.16317>;
  <D.16317>:
  if (ret == 0B) goto <D.17049>; else goto <D.17050>;
  <D.17049>:
  D.17028 = me;
  return D.17028;
  <D.17050>:
  D.17028 = ret;
  return D.17028;
}


memcpy (void * restrict __dest, const void * restrict __src, size_t __len)
{
  void * D.17052;
  unsigned int D.17053;

  D.17053 = __builtin_object_size (__dest, 0);
  D.17052 = __builtin___memcpy_chk (__dest, __src, __len, D.17053);
  return D.17052;
}


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;
}


