b2evolution PHP Cross Reference Blogging Systems

Source: /inc/_ext/idna/_idna_convert.class.php - 2707 lines - 115202 bytes - Summary - Text - Print

   1  <?php
   2  // {{{ license
   3  
   4  /* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
   5  //
   6  // +----------------------------------------------------------------------+
   7  // | This library is free software; you can redistribute it and/or modify |
   8  // | it under the terms of the GNU Lesser General Public License as       |
   9  // | published by the Free Software Foundation; either version 2.1 of the |
  10  // | License, or (at your option) any later version.                      |
  11  // |                                                                      |
  12  // | This library is distributed in the hope that it will be useful, but  |
  13  // | WITHOUT ANY WARRANTY; without even the implied warranty of           |
  14  // | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    |
  15  // | Lesser General Public License for more details.                      |
  16  // |                                                                      |
  17  // | You should have received a copy of the GNU Lesser General Public     |
  18  // | License along with this library; if not, write to the Free Software  |
  19  // | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 |
  20  // | USA.                                                                 |
  21  // +----------------------------------------------------------------------+
  22  //
  23  
  24  // }}}
  25  
  26  /**
  27   * Encode/decode Internationalized Domain Names.
  28   *
  29   * The class allows to convert internationalized domain names
  30   * (see RFC 3490 for details) as they can be used with various registries worldwide
  31   * to be translated between their original (localized) form and their encoded form
  32   * as it will be used in the DNS (Domain Name System).
  33   *
  34   * The class provides two public methods, encode() and decode(), which do exactly
  35   * what you would expect them to do. You are allowed to use complete domain names,
  36   * simple strings and complete email addresses as well. That means, that you might
  37   * use any of the following notations:
  38   *
  39   * - www.nörgler.com
  40   * - xn--nrgler-wxa
  41   * - xn--brse-5qa.xn--knrz-1ra.info
  42   *
  43   * Unicode input might be given as either UTF-8 string, UCS-4 string or UCS-4
  44   * array. Unicode output is available in the same formats.
  45   * You can select your preferred format via {@link set_paramter()}.
  46   *
  47   * ACE input and output is always expected to be ASCII.
  48   *
  49   * @author  Matthias Sommerfeld <mso@phlylabs.de>
  50   * @author  Leonid Kogan <lko@neuse.de>
  51   * @copyright 2004-2009 phlyLabs Berlin, http://phlylabs.de
  52   * @version 0.6.2
  53   * @changelog since 0.5.1 class updated to PHP5/6 style should be compatible to PHP 4.3+
  54   */
  55  if( !defined('EVO_MAIN_INIT') ) die( 'Please, do not access this page directly.' );
  56  
  57  class idna_convert
  58  {
  59      // NP See below
  60  
  61      // Internal settings, do not mess with them
  62      private $_punycode_prefix = 'xn--';
  63      private $_invalid_ucs = 0x80000000;
  64      private $_max_ucs = 0x10FFFF;
  65      private $_base = 36;
  66      private $_tmin = 1;
  67      private $_tmax = 26;
  68      private $_skew = 38;
  69      private $_damp = 700;
  70      private $_initial_bias = 72;
  71      private $_initial_n = 0x80;
  72      private $_sbase = 0xAC00;
  73      private $_lbase = 0x1100;
  74      private $_vbase = 0x1161;
  75      private $_tbase = 0x11A7;
  76      private $_lcount = 19;
  77      private $_vcount = 21;
  78      private $_tcount = 28;
  79      private $_ncount = 588;   // _vcount * _tcount
  80      private $_scount = 11172; // _lcount * _tcount * _vcount
  81      private $_error = false;
  82  
  83      // See {@link set_paramter()} for details of how to change the following
  84      // settings from within your script / application
  85      private $_api_encoding = 'utf8';  // Default input charset is UTF-8
  86      private $_allow_overlong = false; // Overlong UTF-8 encodings are forbidden
  87      private $_strict_mode = false;    // Behave strict or not
  88  
  89  
  90      /**
  91       * the constructor
  92       *
  93       * @param array $options
  94       * @return boolean
  95       * @since 0.5.2
  96       */
  97      public function __construct($options = false)
  98      {
  99          $this->slast = $this->_sbase + $this->_lcount * $this->_vcount * $this->_tcount;
 100          // If parameters are given, pass these to the respective method
 101          if (is_array($options)) return $this->set_parameter($options);
 102          return true;
 103      }
 104  
 105      /**
 106       * Sets a new option value. Available options and values:
 107       * [encoding - Use either UTF-8, UCS4 as array or UCS4 as string as input ('utf8' for UTF-8,
 108       *         'ucs4_string' and 'ucs4_array' respectively for UCS4); The output is always UTF-8]
 109       * [overlong - Unicode does not allow unnecessarily long encodings of chars,
 110       *             to allow this, set this parameter to true, else to false;
 111       *             default is false.]
 112       * [strict - true: strict mode, good for registration purposes - Causes errors
 113       *           on failures; false: loose mode, ideal for "wildlife" applications
 114       *           by silently ignoring errors and returning the original input instead
 115       *
 116       * @param    mixed     Parameter to set (string: single parameter; array of Parameter => Value pairs)
 117       * @param    string    Value to use (if parameter 1 is a string)
 118       * @return   boolean   true on success, false otherwise
 119       */
 120      public function set_parameter($option, $value = false)
 121      {
 122          if (!is_array($option)) {
 123              $option = array($option => $value);
 124          }
 125          foreach ($option as $k => $v) {
 126              switch ($k) {
 127              case 'encoding':
 128                  switch ($v) {
 129                  case 'utf8':
 130                  case 'ucs4_string':
 131                  case 'ucs4_array':
 132                      $this->_api_encoding = $v;
 133                      break;
 134                  default:
 135                      $this->_error('Set Parameter: Unknown parameter '.$v.' for option '.$k);
 136                      return false;
 137                  }
 138                  break;
 139              case 'overlong':
 140                  $this->_allow_overlong = ($v) ? true : false;
 141                  break;
 142              case 'strict':
 143                  $this->_strict_mode = ($v) ? true : false;
 144                  break;
 145              default:
 146                  $this->_error('Set Parameter: Unknown option '.$k);
 147                  return false;
 148              }
 149          }
 150          return true;
 151      }
 152  
 153      /**
 154       * Decode a given ACE domain name
 155       * @param    string   Domain name (ACE string)
 156       * [@param    string   Desired output encoding, see {@link set_parameter}]
 157       * @return   string   Decoded Domain name (UTF-8 or UCS-4)
 158       */
 159      public function decode($input, $one_time_encoding = false)
 160      {
 161          // Optionally set
 162          if ($one_time_encoding) {
 163              switch ($one_time_encoding) {
 164              case 'utf8':
 165              case 'ucs4_string':
 166              case 'ucs4_array':
 167                  break;
 168              default:
 169                  $this->_error('Unknown encoding '.$one_time_encoding);
 170                  return false;
 171              }
 172          }
 173          // Make sure to drop any newline characters around
 174          $input = trim($input);
 175  
 176          // Negotiate input and try to determine, whether it is a plain string,
 177          // an email address or something like a complete URL
 178          if (strpos($input, '@')) { // Maybe it is an email address
 179              // No no in strict mode
 180              if ($this->_strict_mode) {
 181                  $this->_error('Only simple domain name parts can be handled in strict mode');
 182                  return false;
 183              }
 184              list ($email_pref, $input) = explode('@', $input, 2);
 185              $arr = explode('.', $input);
 186              foreach ($arr as $k => $v) {
 187                  if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
 188                      $conv = $this->_decode($v);
 189                      if ($conv) $arr[$k] = $conv;
 190                  }
 191              }
 192              $input = join('.', $arr);
 193              $arr = explode('.', $email_pref);
 194              foreach ($arr as $k => $v) {
 195                  if (preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $v)) {
 196                      $conv = $this->_decode($v);
 197                      if ($conv) $arr[$k] = $conv;
 198                  }
 199              }
 200              $email_pref = join('.', $arr);
 201              $return = $email_pref . '@' . $input;
 202          } elseif (preg_match('![:\./]!', $input)) { // Or a complete domain name (with or without paths / parameters)
 203              // No no in strict mode
 204              if ($this->_strict_mode) {
 205                  $this->_error('Only simple domain name parts can be handled in strict mode');
 206                  return false;
 207              }
 208              $parsed = parse_url($input);
 209              if (isset($parsed['host'])) {
 210                  $arr = explode('.', $parsed['host']);
 211                  foreach ($arr as $k => $v) {
 212                      $conv = $this->_decode($v);
 213                      if ($conv) $arr[$k] = $conv;
 214                  }
 215                  $parsed['host'] = join('.', $arr);
 216                  $return =
 217                          (empty($parsed['scheme']) ? '' : $parsed['scheme'].(strtolower($parsed['scheme']) == 'mailto' ? ':' : '://'))
 218                          .(empty($parsed['user']) ? '' : $parsed['user'].(empty($parsed['pass']) ? '' : ':'.$parsed['pass']).'@')
 219                          .$parsed['host']
 220                          .(empty($parsed['port']) ? '' : ':'.$parsed['port'])
 221                          .(empty($parsed['path']) ? '' : $parsed['path'])
 222                          .(empty($parsed['query']) ? '' : '?'.$parsed['query'])
 223                          .(empty($parsed['fragment']) ? '' : '#'.$parsed['fragment']);
 224              } else { // parse_url seems to have failed, try without it
 225                  $arr = explode('.', $input);
 226                  foreach ($arr as $k => $v) {
 227                      $conv = $this->_decode($v);
 228                      $arr[$k] = ($conv) ? $conv : $v;
 229                  }
 230                  $return = join('.', $arr);
 231              }
 232          } else { // Otherwise we consider it being a pure domain name string
 233              $return = $this->_decode($input);
 234              if (!$return) $return = $input;
 235          }
 236          // The output is UTF-8 by default, other output formats need conversion here
 237          // If one time encoding is given, use this, else the objects property
 238          switch (($one_time_encoding) ? $one_time_encoding : $this->_api_encoding) {
 239          case 'utf8':
 240              return $return;
 241              break;
 242          case 'ucs4_string':
 243             return $this->_ucs4_to_ucs4_string($this->_utf8_to_ucs4($return));
 244             break;
 245          case 'ucs4_array':
 246              return $this->_utf8_to_ucs4($return);
 247              break;
 248          default:
 249              $this->_error('Unsupported output format');
 250              return false;
 251          }
 252      }
 253  
 254      /**
 255       * Encode a given UTF-8 domain name
 256       * @param    string   Domain name (UTF-8 or UCS-4)
 257       * [@param    string   Desired input encoding, see {@link set_parameter}]
 258       * @return   string   Encoded Domain name (ACE string)
 259       */
 260      public function encode($decoded, $one_time_encoding = false)
 261      {
 262          // Forcing conversion of input to UCS4 array
 263          // If one time encoding is given, use this, else the objects property
 264          switch ($one_time_encoding ? $one_time_encoding : $this->_api_encoding) {
 265          case 'utf8':
 266              $decoded = $this->_utf8_to_ucs4($decoded);
 267              break;
 268          case 'ucs4_string':
 269             $decoded = $this->_ucs4_string_to_ucs4($decoded);
 270          case 'ucs4_array':
 271             break;
 272          default:
 273              $this->_error('Unsupported input format: '.($one_time_encoding ? $one_time_encoding : $this->_api_encoding));
 274              return false;
 275          }
 276  
 277          // No input, no output, what else did you expect?
 278          if (empty($decoded)) return '';
 279  
 280          // Anchors for iteration
 281          $last_begin = 0;
 282          // Output string
 283          $output = '';
 284          foreach ($decoded as $k => $v) {
 285              // Make sure to use just the plain dot
 286              switch($v) {
 287              case 0x3002:
 288              case 0xFF0E:
 289              case 0xFF61:
 290                  $decoded[$k] = 0x2E;
 291                  // Right, no break here, the above are converted to dots anyway
 292              // Stumbling across an anchoring character
 293              case 0x2E:
 294              case 0x2F:
 295              case 0x3A:
 296              case 0x3F:
 297              case 0x40:
 298                  // Neither email addresses nor URLs allowed in strict mode
 299                  if ($this->_strict_mode) {
 300                     $this->_error('Neither email addresses nor URLs are allowed in strict mode.');
 301                     return false;
 302                  } else {
 303                      // Skip first char
 304                      if ($k) {
 305                          $encoded = '';
 306                          $encoded = $this->_encode(array_slice($decoded, $last_begin, (($k)-$last_begin)));
 307                          if ($encoded) {
 308                              $output .= $encoded;
 309                          } else {
 310                              $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($k)-$last_begin)));
 311                          }
 312                          $output .= chr($decoded[$k]);
 313                      }
 314                      $last_begin = $k + 1;
 315                  }
 316              }
 317          }
 318          // Catch the rest of the string
 319          if ($last_begin) {
 320              $inp_len = sizeof($decoded);
 321              $encoded = '';
 322              $encoded = $this->_encode(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
 323              if ($encoded) {
 324                  $output .= $encoded;
 325              } else {
 326                  $output .= $this->_ucs4_to_utf8(array_slice($decoded, $last_begin, (($inp_len)-$last_begin)));
 327              }
 328              return $output;
 329          } else {
 330              if ($output = $this->_encode($decoded)) {
 331                  return $output;
 332              } else {
 333                  return $this->_ucs4_to_utf8($decoded);
 334              }
 335          }
 336      }
 337  
 338      /**
 339       * Use this method to get the last error ocurred
 340       * @param    void
 341       * @return   string   The last error, that occured
 342       */
 343      public function get_last_error()
 344      {
 345          return $this->_error;
 346      }
 347  
 348      /**
 349       * The actual decoding algorithm
 350       * @param string
 351       * @return mixed
 352       */
 353      private function _decode($encoded)
 354      {
 355          $decoded = array();
 356          // find the Punycode prefix
 357          if (!preg_match('!^'.preg_quote($this->_punycode_prefix, '!').'!', $encoded)) {
 358              $this->_error('This is not a punycode string');
 359              return false;
 360          }
 361          $encode_test = preg_replace('!^'.preg_quote($this->_punycode_prefix, '!').'!', '', $encoded);
 362          // If nothing left after removing the prefix, it is hopeless
 363          if (!$encode_test) {
 364              $this->_error('The given encoded string was empty');
 365              return false;
 366          }
 367          // Find last occurence of the delimiter
 368          $delim_pos = strrpos($encoded, '-');
 369          if ($delim_pos > strlen($this->_punycode_prefix)) {
 370              for ($k = strlen($this->_punycode_prefix); $k < $delim_pos; ++$k) {
 371                  $decoded[] = ord($encoded{$k});
 372              }
 373          }
 374          $deco_len = count($decoded);
 375          $enco_len = strlen($encoded);
 376  
 377          // Wandering through the strings; init
 378          $is_first = true;
 379          $bias = $this->_initial_bias;
 380          $idx = 0;
 381          $char = $this->_initial_n;
 382  
 383          for ($enco_idx = ($delim_pos) ? ($delim_pos + 1) : 0; $enco_idx < $enco_len; ++$deco_len) {
 384              for ($old_idx = $idx, $w = 1, $k = $this->_base; 1 ; $k += $this->_base) {
 385                  $digit = $this->_decode_digit($encoded{$enco_idx++});
 386                  $idx += $digit * $w;
 387                  $t = ($k <= $bias) ? $this->_tmin :
 388                          (($k >= $bias + $this->_tmax) ? $this->_tmax : ($k - $bias));
 389                  if ($digit < $t) break;
 390                  $w = (int) ($w * ($this->_base - $t));
 391              }
 392              $bias = $this->_adapt($idx - $old_idx, $deco_len + 1, $is_first);
 393              $is_first = false;
 394              $char += (int) ($idx / ($deco_len + 1));
 395              $idx %= ($deco_len + 1);
 396              if ($deco_len > 0) {
 397                  // Make room for the decoded char
 398                  for ($i = $deco_len; $i > $idx; $i--) $decoded[$i] = $decoded[($i - 1)];
 399              }
 400              $decoded[$idx++] = $char;
 401          }
 402          return $this->_ucs4_to_utf8($decoded);
 403      }
 404  
 405      /**
 406       * The actual encoding algorithm
 407       * @param  string
 408       * @return mixed
 409       */
 410      private function _encode($decoded)
 411      {
 412          // We cannot encode a domain name containing the Punycode prefix
 413          $extract = strlen($this->_punycode_prefix);
 414          $check_pref = $this->_utf8_to_ucs4($this->_punycode_prefix);
 415          $check_deco = array_slice($decoded, 0, $extract);
 416  
 417          if ($check_pref == $check_deco) {
 418              $this->_error('This is already a punycode string');
 419              return false;
 420          }
 421          // We will not try to encode strings consisting of basic code points only
 422          $encodable = false;
 423          foreach ($decoded as $k => $v) {
 424              if ($v > 0x7a) {
 425                  $encodable = true;
 426                  break;
 427              }
 428          }
 429          if (!$encodable) {
 430              $this->_error('The given string does not contain encodable chars');
 431              return false;
 432          }
 433          // Do NAMEPREP
 434          $decoded = $this->_nameprep($decoded);
 435          if (!$decoded || !is_array($decoded)) return false; // NAMEPREP failed
 436          $deco_len  = count($decoded);
 437          if (!$deco_len) return false; // Empty array
 438          $codecount = 0; // How many chars have been consumed
 439          $encoded = '';
 440          // Copy all basic code points to output
 441          for ($i = 0; $i < $deco_len; ++$i) {
 442              $test = $decoded[$i];
 443              // Will match [-0-9a-zA-Z]
 444              if ((0x2F < $test && $test < 0x40) || (0x40 < $test && $test < 0x5B)
 445                      || (0x60 < $test && $test <= 0x7B) || (0x2D == $test)) {
 446                  $encoded .= chr($decoded[$i]);
 447                  $codecount++;
 448              }
 449          }
 450          if ($codecount == $deco_len) return $encoded; // All codepoints were basic ones
 451  
 452          // Start with the prefix; copy it to output
 453          $encoded = $this->_punycode_prefix.$encoded;
 454          // If we have basic code points in output, add an hyphen to the end
 455          if ($codecount) $encoded .= '-';
 456          // Now find and encode all non-basic code points
 457          $is_first = true;
 458          $cur_code = $this->_initial_n;
 459          $bias = $this->_initial_bias;
 460          $delta = 0;
 461          while ($codecount < $deco_len) {
 462              // Find the smallest code point >= the current code point and
 463              // remember the last ouccrence of it in the input
 464              for ($i = 0, $next_code = $this->_max_ucs; $i < $deco_len; $i++) {
 465                  if ($decoded[$i] >= $cur_code && $decoded[$i] <= $next_code) {
 466                      $next_code = $decoded[$i];
 467                  }
 468              }
 469              $delta += ($next_code - $cur_code) * ($codecount + 1);
 470              $cur_code = $next_code;
 471  
 472              // Scan input again and encode all characters whose code point is $cur_code
 473              for ($i = 0; $i < $deco_len; $i++) {
 474                  if ($decoded[$i] < $cur_code) {
 475                      $delta++;
 476                  } elseif ($decoded[$i] == $cur_code) {
 477                      for ($q = $delta, $k = $this->_base; 1; $k += $this->_base) {
 478                          $t = ($k <= $bias) ? $this->_tmin :
 479                                  (($k >= $bias + $this->_tmax) ? $this->_tmax : $k - $bias);
 480                          if ($q < $t) break;
 481                          $encoded .= $this->_encode_digit(intval($t + (($q - $t) % ($this->_base - $t)))); //v0.4.5 Changed from ceil() to intval()
 482                          $q = (int) (($q - $t) / ($this->_base - $t));
 483                      }
 484                      $encoded .= $this->_encode_digit($q);
 485                      $bias = $this->_adapt($delta, $codecount+1, $is_first);
 486                      $codecount++;
 487                      $delta = 0;
 488                      $is_first = false;
 489                  }
 490              }
 491              $delta++;
 492              $cur_code++;
 493          }
 494          return $encoded;
 495      }
 496  
 497      /**
 498       * Adapt the bias according to the current code point and position
 499       * @param int $delta
 500       * @param int $npoints
 501       * @param int $is_first
 502       * @return int
 503       */
 504      private function _adapt($delta, $npoints, $is_first)
 505      {
 506          $delta = intval($is_first ? ($delta / $this->_damp) : ($delta / 2));
 507          $delta += intval($delta / $npoints);
 508          for ($k = 0; $delta > (($this->_base - $this->_tmin) * $this->_tmax) / 2; $k += $this->_base) {
 509              $delta = intval($delta / ($this->_base - $this->_tmin));
 510          }
 511          return intval($k + ($this->_base - $this->_tmin + 1) * $delta / ($delta + $this->_skew));
 512      }
 513  
 514      /**
 515       * Encoding a certain digit
 516       * @param    int $d
 517       * @return string
 518       */
 519      private function _encode_digit($d)
 520      {
 521          return chr($d + 22 + 75 * ($d < 26));
 522      }
 523  
 524      /**
 525       * Decode a certain digit
 526       * @param    int $cp
 527       * @return int
 528       */
 529      private function _decode_digit($cp)
 530      {
 531          $cp = ord($cp);
 532          return ($cp - 48 < 10) ? $cp - 22 : (($cp - 65 < 26) ? $cp - 65 : (($cp - 97 < 26) ? $cp - 97 : $this->_base));
 533      }
 534  
 535      /**
 536       * Internal error handling method
 537       * @param  string $error
 538       */
 539      private function _error($error = '')
 540      {
 541          $this->_error = $error;
 542      }
 543  
 544      /**
 545       * Do Nameprep according to RFC3491 and RFC3454
 546       * @param    array    Unicode Characters
 547       * @return   string   Unicode Characters, Nameprep'd
 548       */
 549      private function _nameprep($input)
 550      {
 551          $output = array();
 552          $error = false;
 553          //
 554          // Mapping
 555          // Walking through the input array, performing the required steps on each of
 556          // the input chars and putting the result into the output array
 557          // While mapping required chars we apply the cannonical ordering
 558          foreach ($input as $v) {
 559              // Map to nothing == skip that code point
 560              if (in_array($v, $this->NP['map_nothing'])) continue;
 561              // Try to find prohibited input
 562              if (in_array($v, $this->NP['prohibit']) || in_array($v, $this->NP['general_prohibited'])) {
 563                  $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v));
 564                  return false;
 565              }
 566              foreach ($this->NP['prohibit_ranges'] as $range) {
 567                  if ($range[0] <= $v && $v <= $range[1]) {
 568                      $this->_error('NAMEPREP: Prohibited input U+'.sprintf('%08X', $v));
 569                      return false;
 570                  }
 571              }
 572              // Hangul syllable decomposition
 573              if (0xAC00 <= $v && $v <= 0xD7AF) {
 574                  foreach ($this->_hangul_decompose($v) as $out) $output[] = (int) $out;
 575              // There's a decomposition mapping for that code point
 576              } elseif (isset($this->NP['replacemaps'][$v])) {
 577                  foreach ($this->_apply_cannonical_ordering($this->NP['replacemaps'][$v]) as $out) {
 578                      $output[] = (int) $out;
 579                  }
 580              } else {
 581                  $output[] = (int) $v;
 582              }
 583          }
 584          // Before applying any Combining, try to rearrange any Hangul syllables
 585          $output = $this->_hangul_compose($output);
 586          //
 587          // Combine code points
 588          //
 589          $last_class = 0;
 590          $last_starter = 0;
 591          $out_len = count($output);
 592          for ($i = 0; $i < $out_len; ++$i) {
 593              $class = $this->_get_combining_class($output[$i]);
 594              if ((!$last_class || $last_class > $class) && $class) {
 595                  // Try to match
 596                  $seq_len = $i - $last_starter;
 597                  $out = $this->_combine(array_slice($output, $last_starter, $seq_len));
 598                  // On match: Replace the last starter with the composed character and remove
 599                  // the now redundant non-starter(s)
 600                  if ($out) {
 601                      $output[$last_starter] = $out;
 602                      if (count($out) != $seq_len) {
 603                          for ($j = $i+1; $j < $out_len; ++$j) $output[$j-1] = $output[$j];
 604                          unset($output[$out_len]);
 605                      }
 606                      // Rewind the for loop by one, since there can be more possible compositions
 607                      $i--;
 608                      $out_len--;
 609                      $last_class = ($i == $last_starter) ? 0 : $this->_get_combining_class($output[$i-1]);
 610                      continue;
 611                  }
 612              }
 613              // The current class is 0
 614              if (!$class) $last_starter = $i;
 615              $last_class = $class;
 616          }
 617          return $output;
 618      }
 619  
 620      /**
 621       * Decomposes a Hangul syllable
 622       * (see http://www.unicode.org/unicode/reports/tr15/#Hangul
 623       * @param    integer  32bit UCS4 code point
 624       * @return   array    Either Hangul Syllable decomposed or original 32bit value as one value array
 625       */
 626      private function _hangul_decompose($char)
 627      {
 628          $sindex = (int) $char - $this->_sbase;
 629          if ($sindex < 0 || $sindex >= $this->_scount) return array($char);
 630          $result = array();
 631          $result[] = (int) $this->_lbase + $sindex / $this->_ncount;
 632          $result[] = (int) $this->_vbase + ($sindex % $this->_ncount) / $this->_tcount;
 633          $T = intval($this->_tbase + $sindex % $this->_tcount);
 634          if ($T != $this->_tbase) $result[] = $T;
 635          return $result;
 636      }
 637      /**
 638       * Ccomposes a Hangul syllable
 639       * (see http://www.unicode.org/unicode/reports/tr15/#Hangul
 640       * @param    array    Decomposed UCS4 sequence
 641       * @return   array    UCS4 sequence with syllables composed
 642       */
 643      private function _hangul_compose($input)
 644      {
 645          $inp_len = count($input);
 646          if (!$inp_len) return array();
 647          $result = array();
 648          $last = (int) $input[0];
 649          $result[] = $last; // copy first char from input to output
 650  
 651          for ($i = 1; $i < $inp_len; ++$i) {
 652              $char = (int) $input[$i];
 653              $sindex = $last - $this->_sbase;
 654              $lindex = $last - $this->_lbase;
 655              $vindex = $char - $this->_vbase;
 656              $tindex = $char - $this->_tbase;
 657              // Find out, whether two current characters are LV and T
 658              if (0 <= $sindex && $sindex < $this->_scount && ($sindex % $this->_tcount == 0)
 659                      && 0 <= $tindex && $tindex <= $this->_tcount) {
 660                  // create syllable of form LVT
 661                  $last += $tindex;
 662                  $result[(count($result) - 1)] = $last; // reset last
 663                  continue; // discard char
 664              }
 665              // Find out, whether two current characters form L and V
 666              if (0 <= $lindex && $lindex < $this->_lcount && 0 <= $vindex && $vindex < $this->_vcount) {
 667                  // create syllable of form LV
 668                  $last = (int) $this->_sbase + ($lindex * $this->_vcount + $vindex) * $this->_tcount;
 669                  $result[(count($result) - 1)] = $last; // reset last
 670                  continue; // discard char
 671              }
 672              // if neither case was true, just add the character
 673              $last = $char;
 674              $result[] = $char;
 675          }
 676          return $result;
 677      }
 678  
 679      /**
 680       * Returns the combining class of a certain wide char
 681       * @param    integer    Wide char to check (32bit integer)
 682       * @return   integer    Combining class if found, else 0
 683       */
 684      private function _get_combining_class($char)
 685      {
 686          return isset($this->NP['norm_combcls'][$char]) ? $this->NP['norm_combcls'][$char] : 0;
 687      }
 688  
 689      /**
 690       * Apllies the cannonical ordering of a decomposed UCS4 sequence
 691       * @param    array      Decomposed UCS4 sequence
 692       * @return   array      Ordered USC4 sequence
 693       */
 694      private function _apply_cannonical_ordering($input)
 695      {
 696          $swap = true;
 697          $size = count($input);
 698          while ($swap) {
 699              $swap = false;
 700              $last = $this->_get_combining_class(intval($input[0]));
 701              for ($i = 0; $i < $size-1; ++$i) {
 702                  $next = $this->_get_combining_class(intval($input[$i+1]));
 703                  if ($next != 0 && $last > $next) {
 704                      // Move item leftward until it fits
 705                      for ($j = $i + 1; $j > 0; --$j) {
 706                          if ($this->_get_combining_class(intval($input[$j-1])) <= $next) break;
 707                          $t = intval($input[$j]);
 708                          $input[$j] = intval($input[$j-1]);
 709                          $input[$j-1] = $t;
 710                          $swap = true;
 711                      }
 712                      // Reentering the loop looking at the old character again
 713                      $next = $last;
 714                  }
 715                  $last = $next;
 716              }
 717          }
 718          return $input;
 719      }
 720  
 721      /**
 722       * Do composition of a sequence of starter and non-starter
 723       * @param    array      UCS4 Decomposed sequence
 724       * @return   array      Ordered USC4 sequence
 725       */
 726      private function _combine($input)
 727      {
 728          $inp_len = count($input);
 729          foreach ($this->NP['replacemaps'] as $np_src => $np_target) {
 730              if ($np_target[0] != $input[0]) continue;
 731              if (count($np_target) != $inp_len) continue;
 732              $hit = false;
 733              foreach ($input as $k2 => $v2) {
 734                  if ($v2 == $np_target[$k2]) {
 735                      $hit = true;
 736                  } else {
 737                      $hit = false;
 738                      break;
 739                  }
 740              }
 741              if ($hit) return $np_src;
 742          }
 743          return false;
 744      }
 745  
 746      /**
 747       * This converts an UTF-8 encoded string to its UCS-4 representation
 748       * By talking about UCS-4 "strings" we mean arrays of 32bit integers representing
 749       * each of the "chars". This is due to PHP not being able to handle strings with
 750       * bit depth different from 8. This apllies to the reverse method _ucs4_to_utf8(), too.
 751       * The following UTF-8 encodings are supported:
 752       * bytes bits  representation
 753       * 1        7  0xxxxxxx
 754       * 2       11  110xxxxx 10xxxxxx
 755       * 3       16  1110xxxx 10xxxxxx 10xxxxxx
 756       * 4       21  11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
 757       * 5       26  111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
 758       * 6       31  1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
 759       * Each x represents a bit that can be used to store character data.
 760       * The five and six byte sequences are part of Annex D of ISO/IEC 10646-1:2000
 761       * @param string $input
 762       * @return string
 763       */
 764      private function _utf8_to_ucs4($input)
 765      {
 766          $output = array();
 767          $out_len = 0;
 768          // Patch by Daniel Hahler; work around prolbem with mbstring.func_overload
 769          if (function_exists('mb_strlen')) {
 770              $inp_len = mb_strlen($input, '8bit');
 771          } else {
 772              $inp_len = strlen($input);
 773          }
 774          $mode = 'next';
 775          $test = 'none';
 776          for ($k = 0; $k < $inp_len; ++$k) {
 777              $v = ord($input{$k}); // Extract byte from input string
 778              if ($v < 128) { // We found an ASCII char - put into stirng as is
 779                  $output[$out_len] = $v;
 780                  ++$out_len;
 781                  if ('add' == $mode) {
 782                      $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
 783                      return false;
 784                  }
 785                  continue;
 786              }
 787              if ('next' == $mode) { // Try to find the next start byte; determine the width of the Unicode char
 788                  $start_byte = $v;
 789                  $mode = 'add';
 790                  $test = 'range';
 791                  if ($v >> 5 == 6) { // &110xxxxx 10xxxxx
 792                      $next_byte = 0; // Tells, how many times subsequent bitmasks must rotate 6bits to the left
 793                      $v = ($v - 192) << 6;
 794                  } elseif ($v >> 4 == 14) { // &1110xxxx 10xxxxxx 10xxxxxx
 795                      $next_byte = 1;
 796                      $v = ($v - 224) << 12;
 797                  } elseif ($v >> 3 == 30) { // &11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
 798                      $next_byte = 2;
 799                      $v = ($v - 240) << 18;
 800                  } elseif ($v >> 2 == 62) { // &111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
 801                      $next_byte = 3;
 802                      $v = ($v - 248) << 24;
 803                  } elseif ($v >> 1 == 126) { // &1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
 804                      $next_byte = 4;
 805                      $v = ($v - 252) << 30;
 806                  } else {
 807                      $this->_error('This might be UTF-8, but I don\'t understand it at byte '.$k);
 808                      return false;
 809                  }
 810                  if ('add' == $mode) {
 811                      $output[$out_len] = (int) $v;
 812                      ++$out_len;
 813                      continue;
 814                  }
 815              }
 816              if ('add' == $mode) {
 817                  if (!$this->_allow_overlong && $test == 'range') {
 818                      $test = 'none';
 819                      if (($v < 0xA0 && $start_byte == 0xE0) || ($v < 0x90 && $start_byte == 0xF0) || ($v > 0x8F && $start_byte == 0xF4)) {
 820                          $this->_error('Bogus UTF-8 character detected (out of legal range) at byte '.$k);
 821                          return false;
 822                      }
 823                  }
 824                  if ($v >> 6 == 2) { // Bit mask must be 10xxxxxx
 825                      $v = ($v - 128) << ($next_byte * 6);
 826                      $output[($out_len - 1)] += $v;
 827                      --$next_byte;
 828                  } else {
 829                      $this->_error('Conversion from UTF-8 to UCS-4 failed: malformed input at byte '.$k);
 830                      return false;
 831                  }
 832                  if ($next_byte < 0) {
 833                      $mode = 'next';
 834                  }
 835              }
 836          } // for
 837          return $output;
 838      }
 839  
 840      /**
 841       * Convert UCS-4 string into UTF-8 string
 842       * See _utf8_to_ucs4() for details
 843       * @param string  $input
 844       * @return string
 845       */
 846      private function _ucs4_to_utf8($input)
 847      {
 848          $output = '';
 849          foreach ($input as $k => $v) {
 850              if ($v < 128) { // 7bit are transferred literally
 851                  $output .= chr($v);
 852              } elseif ($v < (1 << 11)) { // 2 bytes
 853                  $output .= chr(192+($v >> 6)).chr(128+($v & 63));
 854              } elseif ($v < (1 << 16)) { // 3 bytes
 855                  $output .= chr(224+($v >> 12)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63));
 856              } elseif ($v < (1 << 21)) { // 4 bytes
 857                  $output .= chr(240+($v >> 18)).chr(128+(($v >> 12) & 63)).chr(128+(($v >> 6) & 63)).chr(128+($v & 63));
 858              } elseif (self::$safe_mode) {
 859                  $output .= self::$safe_char;
 860              } else {
 861                  $this->_error('Conversion from UCS-4 to UTF-8 failed: malformed input at byte '.$k);
 862                  return false;
 863              }
 864          }
 865          return $output;
 866      }
 867  
 868      /**
 869        * Convert UCS-4 array into UCS-4 string
 870        *
 871        * @param array $input
 872        * @return string
 873        */
 874      private function _ucs4_to_ucs4_string($input)
 875      {
 876          $output = '';
 877          // Take array values and split output to 4 bytes per value
 878          // The bit mask is 255, which reads &11111111
 879          foreach ($input as $v) {
 880              $output .= chr(($v >> 24) & 255).chr(($v >> 16) & 255).chr(($v >> 8) & 255).chr($v & 255);
 881          }
 882          return $output;
 883      }
 884  
 885      /**
 886        * Convert UCS-4 strin into UCS-4 garray
 887        *
 888        * @param  string $input
 889        * @return array
 890        */
 891      private function _ucs4_string_to_ucs4($input)
 892      {
 893          $output = array();
 894          $inp_len = strlen($input);
 895          // Input length must be dividable by 4
 896          if ($inp_len % 4) {
 897              $this->_error('Input UCS4 string is broken');
 898              return false;
 899          }
 900          // Empty input - return empty output
 901          if (!$inp_len) return $output;
 902          for ($i = 0, $out_len = -1; $i < $inp_len; ++$i) {
 903              // Increment output position every 4 input bytes
 904              if (!($i % 4)) {
 905                  $out_len++;
 906                  $output[$out_len] = 0;
 907              }
 908              $output[$out_len] += ord($input{$i}) << (8 * (3 - ($i % 4) ) );
 909          }
 910          return $output;
 911      }
 912  
 913      /**
 914       * Holds all relevant mapping tables, loaded from a seperate file on construct
 915       * See RFC3454 for details
 916       *
 917       * @private array
 918       * @since 0.5.2
 919       *
 920       */
 921      private $NP = array
 922              ('map_nothing' => array
 923                      (0xAD, 0x34F, 0x1806, 0x180B, 0x180C, 0x180D, 0x200B
 924                      ,0x200C, 0x200D, 0x2060, 0xFE00, 0xFE01, 0xFE02, 0xFE03
 925                      ,0xFE04, 0xFE05, 0xFE06, 0xFE07, 0xFE08, 0xFE09, 0xFE0A
 926                      ,0xFE0B, 0xFE0C, 0xFE0D, 0xFE0E, 0xFE0F, 0xFEFF
 927                      )
 928              ,'general_prohibited' => array
 929                      (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0xA, 0xB, 0xC, 0xD, 0xE
 930                      ,0xF, 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17
 931                      ,0x18, 0x19, 0x1A, 0x1B, 0x1C, 0x1D, 0x1E, 0x1F, 0x20
 932                      ,0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29
 933                      ,0x2A, 0x2B, 0x2C, 0x2F, 0x3B, 0x3C, 0x3D, 0x3E, 0x3F
 934                      ,0x40, 0x5B, 0x5C, 0x5D, 0x5E, 0x5F, 0x60, 0x7B, 0x7C
 935                      ,0x7D, 0x7E, 0x7F, 0x3002
 936                      )
 937              ,'prohibit' => array
 938                      (0xA0, 0x340, 0x341, 0x6DD, 0x70F, 0x1680, 0x180E, 0x2000
 939                      ,0x2001, 0x2002, 0x2003, 0x2004, 0x2005, 0x2006, 0x2007
 940                      ,0x2008, 0x2009, 0x200A, 0x200B, 0x200C, 0x200D, 0x200E
 941                      ,0x200F, 0x2028, 0x2029, 0x202A, 0x202B, 0x202C, 0x202D
 942                      ,0x202E, 0x202F, 0x205F, 0x206A, 0x206B, 0x206C, 0x206D
 943                      ,0x206E, 0x206F, 0x3000, 0xFEFF, 0xFFF9, 0xFFFA, 0xFFFB
 944                      ,0xFFFC, 0xFFFD, 0xFFFE, 0xFFFF, 0x1FFFE, 0x1FFFF, 0x2FFFE
 945                      ,0x2FFFF, 0x3FFFE, 0x3FFFF, 0x4FFFE, 0x4FFFF, 0x5FFFE
 946                      ,0x5FFFF, 0x6FFFE, 0x6FFFF, 0x7FFFE, 0x7FFFF, 0x8FFFE
 947                      ,0x8FFFF, 0x9FFFE, 0x9FFFF, 0xAFFFE, 0xAFFFF, 0xBFFFE
 948                      ,0xBFFFF, 0xCFFFE, 0xCFFFF, 0xDFFFE, 0xDFFFF, 0xE0001
 949                      ,0xEFFFE, 0xEFFFF, 0xFFFFE, 0xFFFFF, 0x10FFFE, 0x10FFFF
 950                      )
 951              ,'prohibit_ranges' => array
 952                      (array(0x80, 0x9F), array(0x2060, 0x206F)
 953                      ,array(0x1D173, 0x1D17A), array(0xE000, 0xF8FF)
 954                      ,array(0xF0000, 0xFFFFD), array(0x100000, 0x10FFFD)
 955                      ,array(0xFDD0, 0xFDEF), array(0xD800, 0xDFFF)
 956                      ,array(0x2FF0, 0x2FFB), array(0xE0020, 0xE007F)
 957                      )
 958              ,'replacemaps' => array
 959                      (0x41 => array(0x61)
 960                      ,0x42 => array(0x62)
 961                      ,0x43 => array(0x63)
 962                      ,0x44 => array(0x64)
 963                      ,0x45 => array(0x65)
 964                      ,0x46 => array(0x66)
 965                      ,0x47 => array(0x67)
 966                      ,0x48 => array(0x68)
 967                      ,0x49 => array(0x69)
 968                      ,0x4A => array(0x6A)
 969                      ,0x4B => array(0x6B)
 970                      ,0x4C => array(0x6C)
 971                      ,0x4D => array(0x6D)
 972                      ,0x4E => array(0x6E)
 973                      ,0x4F => array(0x6F)
 974                      ,0x50 => array(0x70)
 975                      ,0x51 => array(0x71)
 976                      ,0x52 => array(0x72)
 977                      ,0x53 => array(0x73)
 978                      ,0x54 => array(0x74)
 979                      ,0x55 => array(0x75)
 980                      ,0x56 => array(0x76)
 981                      ,0x57 => array(0x77)
 982                      ,0x58 => array(0x78)
 983                      ,0x59 => array(0x79)
 984                      ,0x5A => array(0x7A)
 985                      ,0xB5 => array(0x3BC)
 986                      ,0xC0 => array(0xE0)
 987                      ,0xC1 => array(0xE1)
 988                      ,0xC2 => array(0xE2)
 989                      ,0xC3 => array(0xE3)
 990                      ,0xC4 => array(0xE4)
 991                      ,0xC5 => array(0xE5)
 992                      ,0xC6 => array(0xE6)
 993                      ,0xC7 => array(0xE7)
 994                      ,0xC8 => array(0xE8)
 995                      ,0xC9 => array(0xE9)
 996                      ,0xCA => array(0xEA)
 997                      ,0xCB => array(0xEB)
 998                      ,0xCC => array(0xEC)
 999                      ,0xCD => array(0xED)
1000                      ,0xCE => array(0xEE)
1001                      ,0xCF => array(0xEF)
1002                      ,0xD0 => array(0xF0)
1003                      ,0xD1 => array(0xF1)
1004                      ,0xD2 => array(0xF2)
1005                      ,0xD3 => array(0xF3)
1006                      ,0xD4 => array(0xF4)
1007                      ,0xD5 => array(0xF5)
1008                      ,0xD6 => array(0xF6)
1009                      ,0xD8 => array(0xF8)
1010                      ,0xD9 => array(0xF9)
1011                      ,0xDA => array(0xFA)
1012                      ,0xDB => array(0xFB)
1013                      ,0xDC => array(0xFC)
1014                      ,0xDD => array(0xFD)
1015                      ,0xDE => array(0xFE)
1016                      ,0xDF => array(0x73, 0x73)
1017                      ,0x100 => array(0x101)
1018                      ,0x102 => array(0x103)
1019                      ,0x104 => array(0x105)
1020                      ,0x106 => array(0x107)
1021                      ,0x108 => array(0x109)
1022                      ,0x10A => array(0x10B)
1023                      ,0x10C => array(0x10D)
1024                      ,0x10E => array(0x10F)
1025                      ,0x110 => array(0x111)
1026                      ,0x112 => array(0x113)
1027                      ,0x114 => array(0x115)
1028                      ,0x116 => array(0x117)
1029                      ,0x118 => array(0x119)
1030                      ,0x11A => array(0x11B)
1031                      ,0x11C => array(0x11D)
1032                      ,0x11E => array(0x11F)
1033                      ,0x120 => array(0x121)
1034                      ,0x122 => array(0x123)
1035                      ,0x124 => array(0x125)
1036                      ,0x126 => array(0x127)
1037                      ,0x128 => array(0x129)
1038                      ,0x12A => array(0x12B)
1039                      ,0x12C => array(0x12D)
1040                      ,0x12E => array(0x12F)
1041                      ,0x130 => array(0x69, 0x307)
1042                      ,0x132 => array(0x133)
1043                      ,0x134 => array(0x135)
1044                      ,0x136 => array(0x137)
1045                      ,0x139 => array(0x13A)
1046                      ,0x13B => array(0x13C)
1047                      ,0x13D => array(0x13E)
1048                      ,0x13F => array(0x140)
1049                      ,0x141 => array(0x142)
1050                      ,0x143 => array(0x144)
1051                      ,0x145 => array(0x146)
1052                      ,0x147 => array(0x148)
1053                      ,0x149 => array(0x2BC, 0x6E)
1054                      ,0x14A => array(0x14B)
1055                      ,0x14C => array(0x14D)
1056                      ,0x14E => array(0x14F)
1057                      ,0x150 => array(0x151)
1058                      ,0x152 => array(0x153)
1059                      ,0x154 => array(0x155)
1060                      ,0x156 => array(0x157)
1061                      ,0x158 => array(0x159)
1062                      ,0x15A => array(0x15B)
1063                      ,0x15C => array(0x15D)
1064                      ,0x15E => array(0x15F)
1065                      ,0x160 => array(0x161)
1066                      ,0x162 => array(0x163)
1067                      ,0x164 => array(0x165)
1068                      ,0x166 => array(0x167)
1069                      ,0x168 => array(0x169)
1070                      ,0x16A => array(0x16B)
1071                      ,0x16C => array(0x16D)
1072                      ,0x16E => array(0x16F)
1073                      ,0x170 => array(0x171)
1074                      ,0x172 => array(0x173)
1075                      ,0x174 => array(0x175)
1076                      ,0x176 => array(0x177)
1077                      ,0x178 => array(0xFF)
1078                      ,0x179 => array(0x17A)
1079                      ,0x17B => array(0x17C)
1080                      ,0x17D => array(0x17E)
1081                      ,0x17F => array(0x73)
1082                      ,0x181 => array(0x253)
1083                      ,0x182 => array(0x183)
1084                      ,0x184 => array(0x185)
1085                      ,0x186 => array(0x254)
1086                      ,0x187 => array(0x188)
1087                      ,0x189 => array(0x256)
1088                      ,0x18A => array(0x257)
1089                      ,0x18B => array(0x18C)
1090                      ,0x18E => array(0x1DD)
1091                      ,0x18F => array(0x259)
1092                      ,0x190 => array(0x25B)
1093                      ,0x191 => array(0x192)
1094                      ,0x193 => array(0x260)
1095                      ,0x194 => array(0x263)
1096                      ,0x196 => array(0x269)
1097                      ,0x197 => array(0x268)
1098                      ,0x198 => array(0x199)
1099                      ,0x19C => array(0x26F)
1100                      ,0x19D => array(0x272)
1101                      ,0x19F => array(0x275)
1102                      ,0x1A0 => array(0x1A1)
1103                      ,0x1A2 => array(0x1A3)
1104                      ,0x1A4 => array(0x1A5)
1105                      ,0x1A6 => array(0x280)
1106                      ,0x1A7 => array(0x1A8)
1107                      ,0x1A9 => array(0x283)
1108                      ,0x1AC => array(0x1AD)
1109                      ,0x1AE => array(0x288)
1110                      ,0x1AF => array(0x1B0)
1111                      ,0x1B1 => array(0x28A)
1112                      ,0x1B2 => array(0x28B)
1113                      ,0x1B3 => array(0x1B4)
1114                      ,0x1B5 => array(0x1B6)
1115                      ,0x1B7 => array(0x292)
1116                      ,0x1B8 => array(0x1B9)
1117                      ,0x1BC => array(0x1BD)
1118                      ,0x1C4 => array(0x1C6)
1119                      ,0x1C5 => array(0x1C6)
1120                      ,0x1C7 => array(0x1C9)
1121                      ,0x1C8 => array(0x1C9)
1122                      ,0x1CA => array(0x1CC)
1123                      ,0x1CB => array(0x1CC)
1124                      ,0x1CD => array(0x1CE)
1125                      ,0x1CF => array(0x1D0)
1126                      ,0x1D1   => array(0x1D2)
1127                      ,0x1D3   => array(0x1D4)
1128                      ,0x1D5   => array(0x1D6)
1129                      ,0x1D7   => array(0x1D8)
1130                      ,0x1D9   => array(0x1DA)
1131                      ,0x1DB   => array(0x1DC)
1132                      ,0x1DE   => array(0x1DF)
1133                      ,0x1E0   => array(0x1E1)
1134                      ,0x1E2   => array(0x1E3)
1135                      ,0x1E4   => array(0x1E5)
1136                      ,0x1E6   => array(0x1E7)
1137                      ,0x1E8   => array(0x1E9)
1138                      ,0x1EA   => array(0x1EB)
1139                      ,0x1EC   => array(0x1ED)
1140                      ,0x1EE   => array(0x1EF)
1141                      ,0x1F0   => array(0x6A, 0x30C)
1142                      ,0x1F1   => array(0x1F3)
1143                      ,0x1F2   => array(0x1F3)
1144                      ,0x1F4   => array(0x1F5)
1145                      ,0x1F6   => array(0x195)
1146                      ,0x1F7   => array(0x1BF)
1147                      ,0x1F8   => array(0x1F9)
1148                      ,0x1FA   => array(0x1FB)
1149                      ,0x1FC   => array(0x1FD)
1150                      ,0x1FE   => array(0x1FF)
1151                      ,0x200   => array(0x201)
1152                      ,0x202   => array(0x203)
1153                      ,0x204   => array(0x205)
1154                      ,0x206   => array(0x207)
1155                      ,0x208   => array(0x209)
1156                      ,0x20A   => array(0x20B)
1157                      ,0x20C   => array(0x20D)
1158                      ,0x20E   => array(0x20F)
1159                      ,0x210   => array(0x211)
1160                      ,0x212   => array(0x213)
1161                      ,0x214   => array(0x215)
1162                      ,0x216   => array(0x217)
1163                      ,0x218   => array(0x219)
1164                      ,0x21A   => array(0x21B)
1165                      ,0x21C   => array(0x21D)
1166                      ,0x21E   => array(0x21F)
1167                      ,0x220   => array(0x19E)
1168                      ,0x222   => array(0x223)
1169                      ,0x224   => array(0x225)
1170                      ,0x226   => array(0x227)
1171                      ,0x228   => array(0x229)
1172                      ,0x22A   => array(0x22B)
1173                      ,0x22C   => array(0x22D)
1174                      ,0x22E   => array(0x22F)
1175                      ,0x230   => array(0x231)
1176                      ,0x232   => array(0x233)
1177                      ,0x345   => array(0x3B9)
1178                      ,0x37A   => array(0x20, 0x3B9)
1179                      ,0x386   => array(0x3AC)
1180                      ,0x388   => array(0x3AD)
1181                      ,0x389   => array(0x3AE)
1182                      ,0x38A   => array(0x3AF)
1183                      ,0x38C   => array(0x3CC)
1184                      ,0x38E   => array(0x3CD)
1185                      ,0x38F   => array(0x3CE)
1186                      ,0x390   => array(0x3B9, 0x308, 0x301)
1187                      ,0x391   => array(0x3B1)
1188                      ,0x392   => array(0x3B2)
1189                      ,0x393   => array(0x3B3)
1190                      ,0x394   => array(0x3B4)
1191                      ,0x395   => array(0x3B5)
1192                      ,0x396   => array(0x3B6)
1193                      ,0x397   => array(0x3B7)
1194                      ,0x398   => array(0x3B8)
1195                      ,0x399   => array(0x3B9)
1196                      ,0x39A   => array(0x3BA)
1197                      ,0x39B   => array(0x3BB)
1198                      ,0x39C   => array(0x3BC)
1199                      ,0x39D   => array(0x3BD)
1200                      ,0x39E   => array(0x3BE)
1201                      ,0x39F   => array(0x3BF)
1202                      ,0x3A0   => array(0x3C0)
1203                      ,0x3A1   => array(0x3C1)
1204                      ,0x3A3   => array(0x3C3)
1205                      ,0x3A4   => array(0x3C4)
1206                      ,0x3A5   => array(0x3C5)
1207                      ,0x3A6   => array(0x3C6)
1208                      ,0x3A7   => array(0x3C7)
1209                      ,0x3A8   => array(0x3C8)
1210                      ,0x3A9   => array(0x3C9)
1211                      ,0x3AA   => array(0x3CA)
1212                      ,0x3AB   => array(0x3CB)
1213                      ,0x3B0   => array(0x3C5, 0x308, 0x301)
1214                      ,0x3C2   => array(0x3C3)
1215                      ,0x3D0   => array(0x3B2)
1216                      ,0x3D1   => array(0x3B8)
1217                      ,0x3D2   => array(0x3C5)
1218                      ,0x3D3   => array(0x3CD)
1219                      ,0x3D4   => array(0x3CB)
1220                      ,0x3D5   => array(0x3C6)
1221                      ,0x3D6   => array(0x3C0)
1222                      ,0x3D8   => array(0x3D9)
1223                      ,0x3DA   => array(0x3DB)
1224                      ,0x3DC   => array(0x3DD)
1225                      ,0x3DE   => array(0x3DF)
1226                      ,0x3E0   => array(0x3E1)
1227                      ,0x3E2   => array(0x3E3)
1228                      ,0x3E4   => array(0x3E5)
1229                      ,0x3E6   => array(0x3E7)
1230                      ,0x3E8   => array(0x3E9)
1231                      ,0x3EA   => array(0x3EB)
1232                      ,0x3EC   => array(0x3ED)
1233                      ,0x3EE   => array(0x3EF)
1234                      ,0x3F0   => array(0x3BA)
1235                      ,0x3F1   => array(0x3C1)
1236                      ,0x3F2   => array(0x3C3)
1237                      ,0x3F4   => array(0x3B8)
1238                      ,0x3F5   => array(0x3B5)
1239                      ,0x400   => array(0x450)
1240                      ,0x401   => array(0x451)
1241                      ,0x402   => array(0x452)
1242                      ,0x403   => array(0x453)
1243                      ,0x404   => array(0x454)
1244                      ,0x405   => array(0x455)
1245                      ,0x406   => array(0x456)
1246                      ,0x407   => array(0x457)
1247                      ,0x408   => array(0x458)
1248                      ,0x409   => array(0x459)
1249                      ,0x40A   => array(0x45A)
1250                      ,0x40B   => array(0x45B)
1251                      ,0x40C   => array(0x45C)
1252                      ,0x40D   => array(0x45D)
1253                      ,0x40E   => array(0x45E)
1254                      ,0x40F   => array(0x45F)
1255                      ,0x410   => array(0x430)
1256                      ,0x411   => array(0x431)
1257                      ,0x412   => array(0x432)
1258                      ,0x413   => array(0x433)
1259                      ,0x414   => array(0x434)
1260                      ,0x415   => array(0x435)
1261                      ,0x416   => array(0x436)
1262                      ,0x417   => array(0x437)
1263                      ,0x418   => array(0x438)
1264                      ,0x419   => array(0x439)
1265                      ,0x41A   => array(0x43A)
1266                      ,0x41B   => array(0x43B)
1267                      ,0x41C   => array(0x43C)
1268                      ,0x41D   => array(0x43D)
1269                      ,0x41E   => array(0x43E)
1270                      ,0x41F   => array(0x43F)
1271                      ,0x420   => array(0x440)
1272                      ,0x421   => array(0x441)
1273                      ,0x422   => array(0x442)
1274                      ,0x423   => array(0x443)
1275                      ,0x424   => array(0x444)
1276                      ,0x425   => array(0x445)
1277                      ,0x426   => array(0x446)
1278                      ,0x427   => array(0x447)
1279                      ,0x428   => array(0x448)
1280                      ,0x429   => array(0x449)
1281                      ,0x42A   => array(0x44A)
1282                      ,0x42B   => array(0x44B)
1283                      ,0x42C   => array(0x44C)
1284                      ,0x42D   => array(0x44D)
1285                      ,0x42E   => array(0x44E)
1286                      ,0x42F   => array(0x44F)
1287                      ,0x460   => array(0x461)
1288                      ,0x462   => array(0x463)
1289                      ,0x464   => array(0x465)
1290                      ,0x466   => array(0x467)
1291                      ,0x468   => array(0x469)
1292                      ,0x46A   => array(0x46B)
1293                      ,0x46C   => array(0x46D)
1294                      ,0x46E   => array(0x46F)
1295                      ,0x470   => array(0x471)
1296                      ,0x472   => array(0x473)
1297                      ,0x474   => array(0x475)
1298                      ,0x476   => array(0x477)
1299                      ,0x478   => array(0x479)
1300                      ,0x47A   => array(0x47B)
1301                      ,0x47C   => array(0x47D)
1302                      ,0x47E   => array(0x47F)
1303                      ,0x480   => array(0x481)
1304                      ,0x48A   => array(0x48B)
1305                      ,0x48C   => array(0x48D)
1306                      ,0x48E   => array(0x48F)
1307                      ,0x490   => array(0x491)
1308                      ,0x492   => array(0x493)
1309                      ,0x494   => array(0x495)
1310                      ,0x496   => array(0x497)
1311                      ,0x498   => array(0x499)
1312                      ,0x49A   => array(0x49B)
1313                      ,0x49C   => array(0x49D)
1314                      ,0x49E   => array(0x49F)
1315                      ,0x4A0   => array(0x4A1)
1316                      ,0x4A2   => array(0x4A3)
1317                      ,0x4A4   => array(0x4A5)
1318                      ,0x4A6   => array(0x4A7)
1319                      ,0x4A8   => array(0x4A9)
1320                      ,0x4AA   => array(0x4AB)
1321                      ,0x4AC   => array(0x4AD)
1322                      ,0x4AE   => array(0x4AF)
1323                      ,0x4B0   => array(0x4B1)
1324                      ,0x4B2   => array(0x4B3)
1325                      ,0x4B4   => array(0x4B5)
1326                      ,0x4B6   => array(0x4B7)
1327                      ,0x4B8   => array(0x4B9)
1328                      ,0x4BA   => array(0x4BB)
1329                      ,0x4BC   => array(0x4BD)
1330                      ,0x4BE   => array(0x4BF)
1331                      ,0x4C1   => array(0x4C2)
1332                      ,0x4C3   => array(0x4C4)
1333                      ,0x4C5   => array(0x4C6)
1334                      ,0x4C7   => array(0x4C8)
1335                      ,0x4C9   => array(0x4CA)
1336                      ,0x4CB   => array(0x4CC)
1337                      ,0x4CD   => array(0x4CE)
1338                      ,0x4D0   => array(0x4D1)
1339                      ,0x4D2   => array(0x4D3)
1340                      ,0x4D4   => array(0x4D5)
1341                      ,0x4D6   => array(0x4D7)
1342                      ,0x4D8   => array(0x4D9)
1343                      ,0x4DA   => array(0x4DB)
1344                      ,0x4DC   => array(0x4DD)
1345                      ,0x4DE   => array(0x4DF)
1346                      ,0x4E0   => array(0x4E1)
1347                      ,0x4E2   => array(0x4E3)
1348                      ,0x4E4   => array(0x4E5)
1349                      ,0x4E6   => array(0x4E7)
1350                      ,0x4E8   => array(0x4E9)
1351                      ,0x4EA   => array(0x4EB)
1352                      ,0x4EC   => array(0x4ED)
1353                      ,0x4EE   => array(0x4EF)
1354                      ,0x4F0   => array(0x4F1)
1355                      ,0x4F2   => array(0x4F3)
1356                      ,0x4F4   => array(0x4F5)
1357                      ,0x4F8   => array(0x4F9)
1358                      ,0x500   => array(0x501)
1359                      ,0x502   => array(0x503)
1360                      ,0x504   => array(0x505)
1361                      ,0x506   => array(0x507)
1362                      ,0x508   => array(0x509)
1363                      ,0x50A   => array(0x50B)
1364                      ,0x50C   => array(0x50D)
1365                      ,0x50E   => array(0x50F)
1366                      ,0x531   => array(0x561)
1367                      ,0x532   => array(0x562)
1368                      ,0x533   => array(0x563)
1369                      ,0x534   => array(0x564)
1370                      ,0x535   => array(0x565)
1371                      ,0x536   => array(0x566)
1372                      ,0x537   => array(0x567)
1373                      ,0x538   => array(0x568)
1374                      ,0x539   => array(0x569)
1375                      ,0x53A   => array(0x56A)
1376                      ,0x53B   => array(0x56B)
1377                      ,0x53C   => array(0x56C)
1378                      ,0x53D   => array(0x56D)
1379                      ,0x53E   => array(0x56E)
1380                      ,0x53F   => array(0x56F)
1381                      ,0x540   => array(0x570)
1382                      ,0x541   => array(0x571)
1383                      ,0x542   => array(0x572)
1384                      ,0x543   => array(0x573)
1385                      ,0x544   => array(0x574)
1386                      ,0x545   => array(0x575)
1387                      ,0x546   => array(0x576)
1388                      ,0x547   => array(0x577)
1389                      ,0x548   => array(0x578)
1390                      ,0x549   => array(0x579)
1391                      ,0x54A   => array(0x57A)
1392                      ,0x54B   => array(0x57B)
1393                      ,0x54C   => array(0x57C)
1394                      ,0x54D   => array(0x57D)
1395                      ,0x54E   => array(0x57E)
1396                      ,0x54F   => array(0x57F)
1397                      ,0x550   => array(0x580)
1398                      ,0x551   => array(0x581)
1399                      ,0x552   => array(0x582)
1400                      ,0x553   => array(0x583)
1401                      ,0x554   => array(0x584)
1402                      ,0x555   => array(0x585)
1403                      ,0x556   => array(0x586)
1404                      ,0x587   => array(0x565, 0x582)
1405                      ,0x1E00  => array(0x1E01)
1406                      ,0x1E02  => array(0x1E03)
1407                      ,0x1E04  => array(0x1E05)
1408                      ,0x1E06  => array(0x1E07)
1409                      ,0x1E08  => array(0x1E09)
1410                      ,0x1E0A  => array(0x1E0B)
1411                      ,0x1E0C  => array(0x1E0D)
1412                      ,0x1E0E  => array(0x1E0F)
1413                      ,0x1E10  => array(0x1E11)
1414                      ,0x1E12  => array(0x1E13)
1415                      ,0x1E14  => array(0x1E15)
1416                      ,0x1E16  => array(0x1E17)
1417                      ,0x1E18  => array(0x1E19)
1418                      ,0x1E1A  => array(0x1E1B)
1419                      ,0x1E1C  => array(0x1E1D)
1420                      ,0x1E1E  => array(0x1E1F)
1421                      ,0x1E20  => array(0x1E21)
1422                      ,0x1E22  => array(0x1E23)
1423                      ,0x1E24  => array(0x1E25)
1424                      ,0x1E26  => array(0x1E27)
1425                      ,0x1E28  => array(0x1E29)
1426                      ,0x1E2A  => array(0x1E2B)
1427                      ,0x1E2C  => array(0x1E2D)
1428                      ,0x1E2E  => array(0x1E2F)
1429                      ,0x1E30  => array(0x1E31)
1430                      ,0x1E32  => array(0x1E33)
1431                      ,0x1E34  => array(0x1E35)
1432                      ,0x1E36  => array(0x1E37)
1433                      ,0x1E38  => array(0x1E39)
1434                      ,0x1E3A  => array(0x1E3B)
1435                      ,0x1E3C  => array(0x1E3D)
1436                      ,0x1E3E  => array(0x1E3F)
1437                      ,0x1E40  => array(0x1E41)
1438                      ,0x1E42  => array(0x1E43)
1439                      ,0x1E44  => array(0x1E45)
1440                      ,0x1E46  => array(0x1E47)
1441                      ,0x1E48  => array(0x1E49)
1442                      ,0x1E4A  => array(0x1E4B)
1443                      ,0x1E4C  => array(0x1E4D)
1444                      ,0x1E4E  => array(0x1E4F)
1445                      ,0x1E50  => array(0x1E51)
1446                      ,0x1E52  => array(0x1E53)
1447                      ,0x1E54  => array(0x1E55)
1448                      ,0x1E56  => array(0x1E57)
1449                      ,0x1E58  => array(0x1E59)
1450                      ,0x1E5A  => array(0x1E5B)
1451                      ,0x1E5C  => array(0x1E5D)
1452                      ,0x1E5E  => array(0x1E5F)
1453                      ,0x1E60  => array(0x1E61)
1454                      ,0x1E62  => array(0x1E63)
1455                      ,0x1E64  => array(0x1E65)
1456                      ,0x1E66  => array(0x1E67)
1457                      ,0x1E68  => array(0x1E69)
1458                      ,0x1E6A  => array(0x1E6B)
1459                      ,0x1E6C  => array(0x1E6D)
1460                      ,0x1E6E  => array(0x1E6F)
1461                      ,0x1E70  => array(0x1E71)
1462                      ,0x1E72  => array(0x1E73)
1463                      ,0x1E74  => array(0x1E75)
1464                      ,0x1E76  => array(0x1E77)
1465                      ,0x1E78  => array(0x1E79)
1466                      ,0x1E7A  => array(0x1E7B)
1467                      ,0x1E7C  => array(0x1E7D)
1468                      ,0x1E7E  => array(0x1E7F)
1469                      ,0x1E80  => array(0x1E81)
1470                      ,0x1E82  => array(0x1E83)
1471                      ,0x1E84  => array(0x1E85)
1472                      ,0x1E86  => array(0x1E87)
1473                      ,0x1E88  => array(0x1E89)
1474                      ,0x1E8A  => array(0x1E8B)
1475                      ,0x1E8C  => array(0x1E8D)
1476                      ,0x1E8E  => array(0x1E8F)
1477                      ,0x1E90  => array(0x1E91)
1478                      ,0x1E92  => array(0x1E93)
1479                      ,0x1E94  => array(0x1E95)
1480                      ,0x1E96  => array(0x68, 0x331)
1481                      ,0x1E97  => array(0x74, 0x308)
1482                      ,0x1E98  => array(0x77, 0x30A)
1483                      ,0x1E99  => array(0x79, 0x30A)
1484                      ,0x1E9A  => array(0x61, 0x2BE)
1485                      ,0x1E9B  => array(0x1E61)
1486                      ,0x1EA0  => array(0x1EA1)
1487                      ,0x1EA2  => array(0x1EA3)
1488                      ,0x1EA4  => array(0x1EA5)
1489                      ,0x1EA6  => array(0x1EA7)
1490                      ,0x1EA8  => array(0x1EA9)
1491                      ,0x1EAA  => array(0x1EAB)
1492                      ,0x1EAC  => array(0x1EAD)
1493                      ,0x1EAE  => array(0x1EAF)
1494                      ,0x1EB0  => array(0x1EB1)
1495                      ,0x1EB2  => array(0x1EB3)
1496                      ,0x1EB4  => array(0x1EB5)
1497                      ,0x1EB6  => array(0x1EB7)
1498                      ,0x1EB8  => array(0x1EB9)
1499                      ,0x1EBA  => array(0x1EBB)
1500                      ,0x1EBC  => array(0x1EBD)
1501                      ,0x1EBE  => array(0x1EBF)
1502                      ,0x1EC0  => array(0x1EC1)
1503                      ,0x1EC2  => array(0x1EC3)
1504                      ,0x1EC4  => array(0x1EC5)
1505                      ,0x1EC6  => array(0x1EC7)
1506                      ,0x1EC8  => array(0x1EC9)
1507                      ,0x1ECA  => array(0x1ECB)
1508                      ,0x1ECC  => array(0x1ECD)
1509                      ,0x1ECE  => array(0x1ECF)
1510                      ,0x1ED0  => array(0x1ED1)
1511                      ,0x1ED2  => array(0x1ED3)
1512                      ,0x1ED4  => array(0x1ED5)
1513                      ,0x1ED6  => array(0x1ED7)
1514                      ,0x1ED8  => array(0x1ED9)
1515                      ,0x1EDA  => array(0x1EDB)
1516                      ,0x1EDC  => array(0x1EDD)
1517                      ,0x1EDE  => array(0x1EDF)
1518                      ,0x1EE0  => array(0x1EE1)
1519                      ,0x1EE2  => array(0x1EE3)
1520                      ,0x1EE4  => array(0x1EE5)
1521                      ,0x1EE6  => array(0x1EE7)
1522                      ,0x1EE8  => array(0x1EE9)
1523                      ,0x1EEA  => array(0x1EEB)
1524                      ,0x1EEC  => array(0x1EED)
1525                      ,0x1EEE  => array(0x1EEF)
1526                      ,0x1EF0  => array(0x1EF1)
1527                      ,0x1EF2  => array(0x1EF3)
1528                      ,0x1EF4  => array(0x1EF5)
1529                      ,0x1EF6  => array(0x1EF7)
1530                      ,0x1EF8  => array(0x1EF9)
1531                      ,0x1F08  => array(0x1F00)
1532                      ,0x1F09  => array(0x1F01)
1533                      ,0x1F0A  => array(0x1F02)
1534                      ,0x1F0B  => array(0x1F03)
1535                      ,0x1F0C  => array(0x1F04)
1536                      ,0x1F0D  => array(0x1F05)
1537                      ,0x1F0E  => array(0x1F06)
1538                      ,0x1F0F  => array(0x1F07)
1539                      ,0x1F18  => array(0x1F10)
1540                      ,0x1F19  => array(0x1F11)
1541                      ,0x1F1A  => array(0x1F12)
1542                      ,0x1F1B  => array(0x1F13)
1543                      ,0x1F1C  => array(0x1F14)
1544                      ,0x1F1D  => array(0x1F15)
1545                      ,0x1F28  => array(0x1F20)
1546                      ,0x1F29  => array(0x1F21)
1547                      ,0x1F2A  => array(0x1F22)
1548                      ,0x1F2B  => array(0x1F23)
1549                      ,0x1F2C  => array(0x1F24)
1550                      ,0x1F2D  => array(0x1F25)
1551                      ,0x1F2E  => array(0x1F26)
1552                      ,0x1F2F  => array(0x1F27)
1553                      ,0x1F38  => array(0x1F30)
1554                      ,0x1F39  => array(0x1F31)
1555                      ,0x1F3A  => array(0x1F32)
1556                      ,0x1F3B  => array(0x1F33)
1557                      ,0x1F3C  => array(0x1F34)
1558                      ,0x1F3D  => array(0x1F35)
1559                      ,0x1F3E  => array(0x1F36)
1560                      ,0x1F3F  => array(0x1F37)
1561                      ,0x1F48  => array(0x1F40)
1562                      ,0x1F49  => array(0x1F41)
1563                      ,0x1F4A  => array(0x1F42)
1564                      ,0x1F4B  => array(0x1F43)
1565                      ,0x1F4C  => array(0x1F44)
1566                      ,0x1F4D  => array(0x1F45)
1567                      ,0x1F50  => array(0x3C5, 0x313)
1568                      ,0x1F52  => array(0x3C5, 0x313, 0x300)
1569                      ,0x1F54  => array(0x3C5, 0x313, 0x301)
1570                      ,0x1F56  => array(0x3C5, 0x313, 0x342)
1571                      ,0x1F59  => array(0x1F51)
1572                      ,0x1F5B  => array(0x1F53)
1573                      ,0x1F5D  => array(0x1F55)
1574                      ,0x1F5F  => array(0x1F57)
1575                      ,0x1F68  => array(0x1F60)
1576                      ,0x1F69  => array(0x1F61)
1577                      ,0x1F6A  => array(0x1F62)
1578                      ,0x1F6B  => array(0x1F63)
1579                      ,0x1F6C  => array(0x1F64)
1580                      ,0x1F6D  => array(0x1F65)
1581                      ,0x1F6E  => array(0x1F66)
1582                      ,0x1F6F  => array(0x1F67)
1583                      ,0x1F80  => array(0x1F00, 0x3B9)
1584                      ,0x1F81  => array(0x1F01, 0x3B9)
1585                      ,0x1F82  => array(0x1F02, 0x3B9)
1586                      ,0x1F83  => array(0x1F03, 0x3B9)
1587                      ,0x1F84  => array(0x1F04, 0x3B9)
1588                      ,0x1F85  => array(0x1F05, 0x3B9)
1589                      ,0x1F86  => array(0x1F06, 0x3B9)
1590                      ,0x1F87  => array(0x1F07, 0x3B9)
1591                      ,0x1F88  => array(0x1F00, 0x3B9)
1592                      ,0x1F89  => array(0x1F01, 0x3B9)
1593                      ,0x1F8A  => array(0x1F02, 0x3B9)
1594                      ,0x1F8B  => array(0x1F03, 0x3B9)
1595                      ,0x1F8C  => array(0x1F04, 0x3B9)
1596                      ,0x1F8D  => array(0x1F05, 0x3B9)
1597                      ,0x1F8E  => array(0x1F06, 0x3B9)
1598                      ,0x1F8F  => array(0x1F07, 0x3B9)
1599                      ,0x1F90  => array(0x1F20, 0x3B9)
1600                      ,0x1F91  => array(0x1F21, 0x3B9)
1601                      ,0x1F92  => array(0x1F22, 0x3B9)
1602                      ,0x1F93  => array(0x1F23, 0x3B9)
1603                      ,0x1F94  => array(0x1F24, 0x3B9)
1604                      ,0x1F95  => array(0x1F25, 0x3B9)
1605                      ,0x1F96  => array(0x1F26, 0x3B9)
1606                      ,0x1F97  => array(0x1F27, 0x3B9)
1607                      ,0x1F98  => array(0x1F20, 0x3B9)
1608                      ,0x1F99  => array(0x1F21, 0x3B9)
1609                      ,0x1F9A  => array(0x1F22, 0x3B9)
1610                      ,0x1F9B  => array(0x1F23, 0x3B9)
1611                      ,0x1F9C  => array(0x1F24, 0x3B9)
1612                      ,0x1F9D  => array(0x1F25, 0x3B9)
1613                      ,0x1F9E  => array(0x1F26, 0x3B9)
1614                      ,0x1F9F  => array(0x1F27, 0x3B9)
1615                      ,0x1FA0  => array(0x1F60, 0x3B9)
1616                      ,0x1FA1  => array(0x1F61, 0x3B9)
1617                      ,0x1FA2  => array(0x1F62, 0x3B9)
1618                      ,0x1FA3  => array(0x1F63, 0x3B9)
1619                      ,0x1FA4  => array(0x1F64, 0x3B9)
1620                      ,0x1FA5  => array(0x1F65, 0x3B9)
1621                      ,0x1FA6  => array(0x1F66, 0x3B9)
1622                      ,0x1FA7  => array(0x1F67, 0x3B9)
1623                      ,0x1FA8  => array(0x1F60, 0x3B9)
1624                      ,0x1FA9  => array(0x1F61, 0x3B9)
1625                      ,0x1FAA  => array(0x1F62, 0x3B9)
1626                      ,0x1FAB  => array(0x1F63, 0x3B9)
1627                      ,0x1FAC  => array(0x1F64, 0x3B9)
1628                      ,0x1FAD  => array(0x1F65, 0x3B9)
1629                      ,0x1FAE  => array(0x1F66, 0x3B9)
1630                      ,0x1FAF  => array(0x1F67, 0x3B9)
1631                      ,0x1FB2  => array(0x1F70, 0x3B9)
1632                      ,0x1FB3  => array(0x3B1, 0x3B9)
1633                      ,0x1FB4  => array(0x3AC, 0x3B9)
1634                      ,0x1FB6  => array(0x3B1, 0x342)
1635                      ,0x1FB7  => array(0x3B1, 0x342, 0x3B9)
1636                      ,0x1FB8  => array(0x1FB0)
1637                      ,0x1FB9  => array(0x1FB1)
1638                      ,0x1FBA  => array(0x1F70)
1639                      ,0x1FBB  => array(0x1F71)
1640                      ,0x1FBC  => array(0x3B1, 0x3B9)
1641                      ,0x1FBE  => array(0x3B9)
1642                      ,0x1FC2  => array(0x1F74, 0x3B9)
1643                      ,0x1FC3  => array(0x3B7, 0x3B9)
1644                      ,0x1FC4  => array(0x3AE, 0x3B9)
1645                      ,0x1FC6  => array(0x3B7, 0x342)
1646                      ,0x1FC7  => array(0x3B7, 0x342, 0x3B9)
1647                      ,0x1FC8  => array(0x1F72)
1648                      ,0x1FC9  => array(0x1F73)
1649                      ,0x1FCA  => array(0x1F74)
1650                      ,0x1FCB  => array(0x1F75)
1651                      ,0x1FCC  => array(0x3B7, 0x3B9)
1652                      ,0x1FD2  => array(0x3B9, 0x308, 0x300)
1653                      ,0x1FD3  => array(0x3B9, 0x308, 0x301)
1654                      ,0x1FD6  => array(0x3B9, 0x342)
1655                      ,0x1FD7  => array(0x3B9, 0x308, 0x342)
1656                      ,0x1FD8  => array(0x1FD0)
1657                      ,0x1FD9  => array(0x1FD1)
1658                      ,0x1FDA  => array(0x1F76)
1659                      ,0x1FDB  => array(0x1F77)
1660                      ,0x1FE2  => array(0x3C5, 0x308, 0x300)
1661                      ,0x1FE3  => array(0x3C5, 0x308, 0x301)
1662                      ,0x1FE4  => array(0x3C1, 0x313)
1663                      ,0x1FE6  => array(0x3C5, 0x342)
1664                      ,0x1FE7  => array(0x3C5, 0x308, 0x342)
1665                      ,0x1FE8  => array(0x1FE0)
1666                      ,0x1FE9  => array(0x1FE1)
1667                      ,0x1FEA  => array(0x1F7A)
1668                      ,0x1FEB  => array(0x1F7B)
1669                      ,0x1FEC  => array(0x1FE5)
1670                      ,0x1FF2  => array(0x1F7C, 0x3B9)
1671                      ,0x1FF3  => array(0x3C9, 0x3B9)
1672                      ,0x1FF4  => array(0x3CE, 0x3B9)
1673                      ,0x1FF6  => array(0x3C9, 0x342)
1674                      ,0x1FF7  => array(0x3C9, 0x342, 0x3B9)
1675                      ,0x1FF8  => array(0x1F78)
1676                      ,0x1FF9  => array(0x1F79)
1677                      ,0x1FFA  => array(0x1F7C)
1678                      ,0x1FFB  => array(0x1F7D)
1679                      ,0x1FFC  => array(0x3C9, 0x3B9)
1680                      ,0x20A8  => array(0x72, 0x73)
1681                      ,0x2102  => array(0x63)
1682                      ,0x2103  => array(0xB0, 0x63)
1683                      ,0x2107  => array(0x25B)
1684                      ,0x2109  => array(0xB0, 0x66)
1685                      ,0x210B  => array(0x68)
1686                      ,0x210C  => array(0x68)
1687                      ,0x210D  => array(0x68)
1688                      ,0x2110  => array(0x69)
1689                      ,0x2111  => array(0x69)
1690                      ,0x2112  => array(0x6C)
1691                      ,0x2115  => array(0x6E)
1692                      ,0x2116  => array(0x6E, 0x6F)
1693                      ,0x2119  => array(0x70)
1694                      ,0x211A  => array(0x71)
1695                      ,0x211B  => array(0x72)
1696                      ,0x211C  => array(0x72)
1697                      ,0x211D  => array(0x72)
1698                      ,0x2120  => array(0x73, 0x6D)
1699                      ,0x2121  => array(0x74, 0x65, 0x6C)
1700                      ,0x2122  => array(0x74, 0x6D)
1701                      ,0x2124  => array(0x7A)
1702                      ,0x2126  => array(0x3C9)
1703                      ,0x2128  => array(0x7A)
1704                      ,0x212A  => array(0x6B)
1705                      ,0x212B  => array(0xE5)
1706                      ,0x212C  => array(0x62)
1707                      ,0x212D  => array(0x63)
1708                      ,0x2130  => array(0x65)
1709                      ,0x2131  => array(0x66)
1710                      ,0x2133  => array(0x6D)
1711                      ,0x213E  => array(0x3B3)
1712                      ,0x213F  => array(0x3C0)
1713                      ,0x2145  => array(0x64)
1714                      ,0x2160  => array(0x2170)
1715                      ,0x2161  => array(0x2171)
1716                      ,0x2162  => array(0x2172)
1717                      ,0x2163  => array(0x2173)
1718                      ,0x2164  => array(0x2174)
1719                      ,0x2165  => array(0x2175)
1720                      ,0x2166  => array(0x2176)
1721                      ,0x2167  => array(0x2177)
1722                      ,0x2168  => array(0x2178)
1723                      ,0x2169  => array(0x2179)
1724                      ,0x216A  => array(0x217A)
1725                      ,0x216B  => array(0x217B)
1726                      ,0x216C  => array(0x217C)
1727                      ,0x216D  => array(0x217D)
1728                      ,0x216E  => array(0x217E)
1729                      ,0x216F  => array(0x217F)
1730                      ,0x24B6  => array(0x24D0)
1731                      ,0x24B7  => array(0x24D1)
1732                      ,0x24B8  => array(0x24D2)
1733                      ,0x24B9  => array(0x24D3)
1734                      ,0x24BA  => array(0x24D4)
1735                      ,0x24BB  => array(0x24D5)
1736                      ,0x24BC  => array(0x24D6)
1737                      ,0x24BD  => array(0x24D7)
1738                      ,0x24BE  => array(0x24D8)
1739                      ,0x24BF  => array(0x24D9)
1740                      ,0x24C0  => array(0x24DA)
1741                      ,0x24C1  => array(0x24DB)
1742                      ,0x24C2  => array(0x24DC)
1743                      ,0x24C3  => array(0x24DD)
1744                      ,0x24C4  => array(0x24DE)
1745                      ,0x24C5  => array(0x24DF)
1746                      ,0x24C6  => array(0x24E0)
1747                      ,0x24C7  => array(0x24E1)
1748                      ,0x24C8  => array(0x24E2)
1749                      ,0x24C9  => array(0x24E3)
1750                      ,0x24CA  => array(0x24E4)
1751                      ,0x24CB  => array(0x24E5)
1752                      ,0x24CC  => array(0x24E6)
1753                      ,0x24CD  => array(0x24E7)
1754                      ,0x24CE  => array(0x24E8)
1755                      ,0x24CF  => array(0x24E9)
1756                      ,0x3371  => array(0x68, 0x70, 0x61)
1757                      ,0x3373  => array(0x61, 0x75)
1758                      ,0x3375  => array(0x6F, 0x76)
1759                      ,0x3380  => array(0x70, 0x61)
1760                      ,0x3381  => array(0x6E, 0x61)
1761                      ,0x3382  => array(0x3BC, 0x61)
1762                      ,0x3383  => array(0x6D, 0x61)
1763                      ,0x3384  => array(0x6B, 0x61)
1764                      ,0x3385  => array(0x6B, 0x62)
1765                      ,0x3386  => array(0x6D, 0x62)
1766                      ,0x3387  => array(0x67, 0x62)
1767                      ,0x338A  => array(0x70, 0x66)
1768                      ,0x338B  => array(0x6E, 0x66)
1769                      ,0x338C  => array(0x3BC, 0x66)
1770                      ,0x3390  => array(0x68, 0x7A)
1771                      ,0x3391  => array(0x6B, 0x68, 0x7A)
1772                      ,0x3392  => array(0x6D, 0x68, 0x7A)
1773                      ,0x3393  => array(0x67, 0x68, 0x7A)
1774                      ,0x3394  => array(0x74, 0x68, 0x7A)
1775                      ,0x33A9  => array(0x70, 0x61)
1776                      ,0x33AA  => array(0x6B, 0x70, 0x61)
1777                      ,0x33AB  => array(0x6D, 0x70, 0x61)
1778                      ,0x33AC  => array(0x67, 0x70, 0x61)
1779                      ,0x33B4  => array(0x70, 0x76)
1780                      ,0x33B5  => array(0x6E, 0x76)
1781                      ,0x33B6  => array(0x3BC, 0x76)
1782                      ,0x33B7  => array(0x6D, 0x76)
1783                      ,0x33B8  => array(0x6B, 0x76)
1784                      ,0x33B9  => array(0x6D, 0x76)
1785                      ,0x33BA  => array(0x70, 0x77)
1786                      ,0x33BB  => array(0x6E, 0x77)
1787                      ,0x33BC  => array(0x3BC, 0x77)
1788                      ,0x33BD  => array(0x6D, 0x77)
1789                      ,0x33BE  => array(0x6B, 0x77)
1790                      ,0x33BF  => array(0x6D, 0x77)
1791                      ,0x33C0  => array(0x6B, 0x3C9)
1792                      ,0x33C1  => array(0x6D, 0x3C9) /*
1793                      ,0x33C2  => array(0x61, 0x2E, 0x6D, 0x2E) */
1794                      ,0x33C3  => array(0x62, 0x71)
1795                      ,0x33C6  => array(0x63, 0x2215, 0x6B, 0x67)
1796                      ,0x33C7  => array(0x63, 0x6F, 0x2E)
1797                      ,0x33C8  => array(0x64, 0x62)
1798                      ,0x33C9  => array(0x67, 0x79)
1799                      ,0x33CB  => array(0x68, 0x70)
1800                      ,0x33CD  => array(0x6B, 0x6B)
1801                      ,0x33CE  => array(0x6B, 0x6D)
1802                      ,0x33D7  => array(0x70, 0x68)
1803                      ,0x33D9  => array(0x70, 0x70, 0x6D)
1804                      ,0x33DA  => array(0x70, 0x72)
1805                      ,0x33DC  => array(0x73, 0x76)
1806                      ,0x33DD  => array(0x77, 0x62)
1807                      ,0xFB00  => array(0x66, 0x66)
1808                      ,0xFB01  => array(0x66, 0x69)
1809                      ,0xFB02  => array(0x66, 0x6C)
1810                      ,0xFB03  => array(0x66, 0x66, 0x69)
1811                      ,0xFB04  => array(0x66, 0x66, 0x6C)
1812                      ,0xFB05  => array(0x73, 0x74)
1813                      ,0xFB06  => array(0x73, 0x74)
1814                      ,0xFB13  => array(0x574, 0x576)
1815                      ,0xFB14  => array(0x574, 0x565)
1816                      ,0xFB15  => array(0x574, 0x56B)
1817                      ,0xFB16  => array(0x57E, 0x576)
1818                      ,0xFB17  => array(0x574, 0x56D)
1819                      ,0xFF21  => array(0xFF41)
1820                      ,0xFF22  => array(0xFF42)
1821                      ,0xFF23  => array(0xFF43)
1822                      ,0xFF24  => array(0xFF44)
1823                      ,0xFF25  => array(0xFF45)
1824                      ,0xFF26  => array(0xFF46)
1825                      ,0xFF27  => array(0xFF47)
1826                      ,0xFF28  => array(0xFF48)
1827                      ,0xFF29  => array(0xFF49)
1828                      ,0xFF2A  => array(0xFF4A)
1829                      ,0xFF2B  => array(0xFF4B)
1830                      ,0xFF2C  => array(0xFF4C)
1831                      ,0xFF2D  => array(0xFF4D)
1832                      ,0xFF2E  => array(0xFF4E)
1833                      ,0xFF2F  => array(0xFF4F)
1834                      ,0xFF30  => array(0xFF50)
1835                      ,0xFF31  => array(0xFF51)
1836                      ,0xFF32  => array(0xFF52)
1837                      ,0xFF33  => array(0xFF53)
1838                      ,0xFF34  => array(0xFF54)
1839                      ,0xFF35  => array(0xFF55)
1840                      ,0xFF36  => array(0xFF56)
1841                      ,0xFF37  => array(0xFF57)
1842                      ,0xFF38  => array(0xFF58)
1843                      ,0xFF39  => array(0xFF59)
1844                      ,0xFF3A  => array(0xFF5A)
1845                      ,0x10400 => array(0x10428)
1846                      ,0x10401 => array(0x10429)
1847                      ,0x10402 => array(0x1042A)
1848                      ,0x10403 => array(0x1042B)
1849                      ,0x10404 => array(0x1042C)
1850                      ,0x10405 => array(0x1042D)
1851                      ,0x10406 => array(0x1042E)
1852                      ,0x10407 => array(0x1042F)
1853                      ,0x10408 => array(0x10430)
1854                      ,0x10409 => array(0x10431)
1855                      ,0x1040A => array(0x10432)
1856                      ,0x1040B => array(0x10433)
1857                      ,0x1040C => array(0x10434)
1858                      ,0x1040D => array(0x10435)
1859                      ,0x1040E => array(0x10436)
1860                      ,0x1040F => array(0x10437)
1861                      ,0x10410 => array(0x10438)
1862                      ,0x10411 => array(0x10439)
1863                      ,0x10412 => array(0x1043A)
1864                      ,0x10413 => array(0x1043B)
1865                      ,0x10414 => array(0x1043C)
1866                      ,0x10415 => array(0x1043D)
1867                      ,0x10416 => array(0x1043E)
1868                      ,0x10417 => array(0x1043F)
1869                      ,0x10418 => array(0x10440)
1870                      ,0x10419 => array(0x10441)
1871                      ,0x1041A => array(0x10442)
1872                      ,0x1041B => array(0x10443)
1873                      ,0x1041C => array(0x10444)
1874                      ,0x1041D => array(0x10445)
1875                      ,0x1041E => array(0x10446)
1876                      ,0x1041F => array(0x10447)
1877                      ,0x10420 => array(0x10448)
1878                      ,0x10421 => array(0x10449)
1879                      ,0x10422 => array(0x1044A)
1880                      ,0x10423 => array(0x1044B)
1881                      ,0x10424 => array(0x1044C)
1882                      ,0x10425 => array(0x1044D)
1883                      ,0x1D400 => array(0x61)
1884                      ,0x1D401 => array(0x62)
1885                      ,0x1D402 => array(0x63)
1886                      ,0x1D403 => array(0x64)
1887                      ,0x1D404 => array(0x65)
1888                      ,0x1D405 => array(0x66)
1889                      ,0x1D406 => array(0x67)
1890                      ,0x1D407 => array(0x68)
1891                      ,0x1D408 => array(0x69)
1892                      ,0x1D409 => array(0x6A)
1893                      ,0x1D40A => array(0x6B)
1894                      ,0x1D40B => array(0x6C)
1895                      ,0x1D40C => array(0x6D)
1896                      ,0x1D40D => array(0x6E)
1897                      ,0x1D40E => array(0x6F)
1898                      ,0x1D40F => array(0x70)
1899                      ,0x1D410 => array(0x71)
1900                      ,0x1D411 => array(0x72)
1901                      ,0x1D412 => array(0x73)
1902                      ,0x1D413 => array(0x74)
1903                      ,0x1D414 => array(0x75)
1904                      ,0x1D415 => array(0x76)
1905                      ,0x1D416 => array(0x77)
1906                      ,0x1D417 => array(0x78)
1907                      ,0x1D418 => array(0x79)
1908                      ,0x1D419 => array(0x7A)
1909                      ,0x1D434 => array(0x61)
1910                      ,0x1D435 => array(0x62)
1911                      ,0x1D436 => array(0x63)
1912                      ,0x1D437 => array(0x64)
1913                      ,0x1D438 => array(0x65)
1914                      ,0x1D439 => array(0x66)
1915                      ,0x1D43A => array(0x67)
1916                      ,0x1D43B => array(0x68)
1917                      ,0x1D43C => array(0x69)
1918                      ,0x1D43D => array(0x6A)
1919                      ,0x1D43E => array(0x6B)
1920                      ,0x1D43F => array(0x6C)
1921                      ,0x1D440 => array(0x6D)
1922                      ,0x1D441 => array(0x6E)
1923                      ,0x1D442 => array(0x6F)
1924                      ,0x1D443 => array(0x70)
1925                      ,0x1D444 => array(0x71)
1926                      ,0x1D445 => array(0x72)
1927                      ,0x1D446 => array(0x73)
1928                      ,0x1D447 => array(0x74)
1929                      ,0x1D448 => array(0x75)
1930                      ,0x1D449 => array(0x76)
1931                      ,0x1D44A => array(0x77)
1932                      ,0x1D44B => array(0x78)
1933                      ,0x1D44C => array(0x79)
1934                      ,0x1D44D => array(0x7A)
1935                      ,0x1D468 => array(0x61)
1936                      ,0x1D469 => array(0x62)
1937                      ,0x1D46A => array(0x63)
1938                      ,0x1D46B => array(0x64)
1939                      ,0x1D46C => array(0x65)
1940                      ,0x1D46D => array(0x66)
1941                      ,0x1D46E => array(0x67)
1942                      ,0x1D46F => array(0x68)
1943                      ,0x1D470 => array(0x69)
1944                      ,0x1D471 => array(0x6A)
1945                      ,0x1D472 => array(0x6B)
1946                      ,0x1D473 => array(0x6C)
1947                      ,0x1D474 => array(0x6D)
1948                      ,0x1D475 => array(0x6E)
1949                      ,0x1D476 => array(0x6F)
1950                      ,0x1D477 => array(0x70)
1951                      ,0x1D478 => array(0x71)
1952                      ,0x1D479 => array(0x72)
1953                      ,0x1D47A => array(0x73)
1954                      ,0x1D47B => array(0x74)
1955                      ,0x1D47C => array(0x75)
1956                      ,0x1D47D => array(0x76)
1957                      ,0x1D47E => array(0x77)
1958                      ,0x1D47F => array(0x78)
1959                      ,0x1D480 => array(0x79)
1960                      ,0x1D481 => array(0x7A)
1961                      ,0x1D49C => array(0x61)
1962                      ,0x1D49E => array(0x63)
1963                      ,0x1D49F => array(0x64)
1964                      ,0x1D4A2 => array(0x67)
1965                      ,0x1D4A5 => array(0x6A)
1966                      ,0x1D4A6 => array(0x6B)
1967                      ,0x1D4A9 => array(0x6E)
1968                      ,0x1D4AA => array(0x6F)
1969                      ,0x1D4AB => array(0x70)
1970                      ,0x1D4AC => array(0x71)
1971                      ,0x1D4AE => array(0x73)
1972                      ,0x1D4AF => array(0x74)
1973                      ,0x1D4B0 => array(0x75)
1974                      ,0x1D4B1 => array(0x76)
1975                      ,0x1D4B2 => array(0x77)
1976                      ,0x1D4B3 => array(0x78)
1977                      ,0x1D4B4 => array(0x79)
1978                      ,0x1D4B5 => array(0x7A)
1979                      ,0x1D4D0 => array(0x61)
1980                      ,0x1D4D1 => array(0x62)
1981                      ,0x1D4D2 => array(0x63)
1982                      ,0x1D4D3 => array(0x64)
1983                      ,0x1D4D4 => array(0x65)
1984                      ,0x1D4D5 => array(0x66)
1985                      ,0x1D4D6 => array(0x67)
1986                      ,0x1D4D7 => array(0x68)
1987                      ,0x1D4D8 => array(0x69)
1988                      ,0x1D4D9 => array(0x6A)
1989                      ,0x1D4DA => array(0x6B)
1990                      ,0x1D4DB => array(0x6C)
1991                      ,0x1D4DC => array(0x6D)
1992                      ,0x1D4DD => array(0x6E)
1993                      ,0x1D4DE => array(0x6F)
1994                      ,0x1D4DF => array(0x70)
1995                      ,0x1D4E0 => array(0x71)
1996                      ,0x1D4E1 => array(0x72)
1997                      ,0x1D4E2 => array(0x73)
1998                      ,0x1D4E3 => array(0x74)
1999                      ,0x1D4E4 => array(0x75)
2000                      ,0x1D4E5 => array(0x76)
2001                      ,0x1D4E6 => array(0x77)
2002                      ,0x1D4E7 => array(0x78)
2003                      ,0x1D4E8 => array(0x79)
2004                      ,0x1D4E9 => array(0x7A)
2005                      ,0x1D504 => array(0x61)
2006                      ,0x1D505 => array(0x62)
2007                      ,0x1D507 => array(0x64)
2008                      ,0x1D508 => array(0x65)
2009                      ,0x1D509 => array(0x66)
2010                      ,0x1D50A => array(0x67)
2011                      ,0x1D50D => array(0x6A)
2012                      ,0x1D50E => array(0x6B)
2013                      ,0x1D50F => array(0x6C)
2014                      ,0x1D510 => array(0x6D)
2015                      ,0x1D511 => array(0x6E)
2016                      ,0x1D512 => array(0x6F)
2017                      ,0x1D513 => array(0x70)
2018                      ,0x1D514 => array(0x71)
2019                      ,0x1D516 => array(0x73)
2020                      ,0x1D517 => array(0x74)
2021                      ,0x1D518 => array(0x75)
2022                      ,0x1D519 => array(0x76)
2023                      ,0x1D51A => array(0x77)
2024                      ,0x1D51B => array(0x78)
2025                      ,0x1D51C => array(0x79)
2026                      ,0x1D538 => array(0x61)
2027                      ,0x1D539 => array(0x62)
2028                      ,0x1D53B => array(0x64)
2029                      ,0x1D53C => array(0x65)
2030                      ,0x1D53D => array(0x66)
2031                      ,0x1D53E => array(0x67)
2032                      ,0x1D540 => array(0x69)
2033                      ,0x1D541 => array(0x6A)
2034                      ,0x1D542 => array(0x6B)
2035                      ,0x1D543 => array(0x6C)
2036                      ,0x1D544 => array(0x6D)
2037                      ,0x1D546 => array(0x6F)
2038                      ,0x1D54A => array(0x73)
2039                      ,0x1D54B => array(0x74)
2040                      ,0x1D54C => array(0x75)
2041                      ,0x1D54D => array(0x76)
2042                      ,0x1D54E => array(0x77)
2043                      ,0x1D54F => array(0x78)
2044                      ,0x1D550 => array(0x79)
2045                      ,0x1D56C => array(0x61)
2046                      ,0x1D56D => array(0x62)
2047                      ,0x1D56E => array(0x63)
2048                      ,0x1D56F => array(0x64)
2049                      ,0x1D570 => array(0x65)
2050                      ,0x1D571 => array(0x66)
2051                      ,0x1D572 => array(0x67)
2052                      ,0x1D573 => array(0x68)
2053                      ,0x1D574 => array(0x69)
2054                      ,0x1D575 => array(0x6A)
2055                      ,0x1D576 => array(0x6B)
2056                      ,0x1D577 => array(0x6C)
2057                      ,0x1D578 => array(0x6D)
2058                      ,0x1D579 => array(0x6E)
2059                      ,0x1D57A => array(0x6F)
2060                      ,0x1D57B => array(0x70)
2061                      ,0x1D57C => array(0x71)
2062                      ,0x1D57D => array(0x72)
2063                      ,0x1D57E => array(0x73)
2064                      ,0x1D57F => array(0x74)
2065                      ,0x1D580 => array(0x75)
2066                      ,0x1D581 => array(0x76)
2067                      ,0x1D582 => array(0x77)
2068                      ,0x1D583 => array(0x78)
2069                      ,0x1D584 => array(0x79)
2070                      ,0x1D585 => array(0x7A)
2071                      ,0x1D5A0 => array(0x61)
2072                      ,0x1D5A1 => array(0x62)
2073                      ,0x1D5A2 => array(0x63)
2074                      ,0x1D5A3 => array(0x64)
2075                      ,0x1D5A4 => array(0x65)
2076                      ,0x1D5A5 => array(0x66)
2077                      ,0x1D5A6 => array(0x67)
2078                      ,0x1D5A7 => array(0x68)
2079                      ,0x1D5A8 => array(0x69)
2080                      ,0x1D5A9 => array(0x6A)
2081                      ,0x1D5AA => array(0x6B)
2082                      ,0x1D5AB => array(0x6C)
2083                      ,0x1D5AC => array(0x6D)
2084                      ,0x1D5AD => array(0x6E)
2085                      ,0x1D5AE => array(0x6F)
2086                      ,0x1D5AF => array(0x70)
2087                      ,0x1D5B0 => array(0x71)
2088                      ,0x1D5B1 => array(0x72)
2089                      ,0x1D5B2 => array(0x73)
2090                      ,0x1D5B3 => array(0x74)
2091                      ,0x1D5B4 => array(0x75)
2092                      ,0x1D5B5 => array(0x76)
2093                      ,0x1D5B6 => array(0x77)
2094                      ,0x1D5B7 => array(0x78)
2095                      ,0x1D5B8 => array(0x79)
2096                      ,0x1D5B9 => array(0x7A)
2097                      ,0x1D5D4 => array(0x61)
2098                      ,0x1D5D5 => array(0x62)
2099                      ,0x1D5D6 => array(0x63)
2100                      ,0x1D5D7 => array(0x64)
2101                      ,0x1D5D8 => array(0x65)
2102                      ,0x1D5D9 => array(0x66)
2103                      ,0x1D5DA => array(0x67)
2104                      ,0x1D5DB => array(0x68)
2105                      ,0x1D5DC => array(0x69)
2106                      ,0x1D5DD => array(0x6A)
2107                      ,0x1D5DE => array(0x6B)
2108                      ,0x1D5DF => array(0x6C)
2109                      ,0x1D5E0 => array(0x6D)
2110                      ,0x1D5E1 => array(0x6E)
2111                      ,0x1D5E2 => array(0x6F)
2112                      ,0x1D5E3 => array(0x70)
2113                      ,0x1D5E4 => array(0x71)
2114                      ,0x1D5E5 => array(0x72)
2115                      ,0x1D5E6 => array(0x73)
2116                      ,0x1D5E7 => array(0x74)
2117                      ,0x1D5E8 => array(0x75)
2118                      ,0x1D5E9 => array(0x76)
2119                      ,0x1D5EA => array(0x77)
2120                      ,0x1D5EB => array(0x78)
2121                      ,0x1D5EC => array(0x79)
2122                      ,0x1D5ED => array(0x7A)
2123                      ,0x1D608 => array(0x61)
2124                      ,0x1D609 => array(0x62)
2125                      ,0x1D60A => array(0x63)
2126                      ,0x1D60B => array(0x64)
2127                      ,0x1D60C => array(0x65)
2128                      ,0x1D60D => array(0x66)
2129                      ,0x1D60E => array(0x67)
2130                      ,0x1D60F => array(0x68)
2131                      ,0x1D610 => array(0x69)
2132                      ,0x1D611 => array(0x6A)
2133                      ,0x1D612 => array(0x6B)
2134                      ,0x1D613 => array(0x6C)
2135                      ,0x1D614 => array(0x6D)
2136                      ,0x1D615 => array(0x6E)
2137                      ,0x1D616 => array(0x6F)
2138                      ,0x1D617 => array(0x70)
2139                      ,0x1D618 => array(0x71)
2140                      ,0x1D619 => array(0x72)
2141                      ,0x1D61A => array(0x73)
2142                      ,0x1D61B => array(0x74)
2143                      ,0x1D61C => array(0x75)
2144                      ,0x1D61D => array(0x76)
2145                      ,0x1D61E => array(0x77)
2146                      ,0x1D61F => array(0x78)
2147                      ,0x1D620 => array(0x79)
2148                      ,0x1D621 => array(0x7A)
2149                      ,0x1D63C => array(0x61)
2150                      ,0x1D63D => array(0x62)
2151                      ,0x1D63E => array(0x63)
2152                      ,0x1D63F => array(0x64)
2153                      ,0x1D640 => array(0x65)
2154                      ,0x1D641 => array(0x66)
2155                      ,0x1D642 => array(0x67)
2156                      ,0x1D643 => array(0x68)
2157                      ,0x1D644 => array(0x69)
2158                      ,0x1D645 => array(0x6A)
2159                      ,0x1D646 => array(0x6B)
2160                      ,0x1D647 => array(0x6C)
2161                      ,0x1D648 => array(0x6D)
2162                      ,0x1D649 => array(0x6E)
2163                      ,0x1D64A => array(0x6F)
2164                      ,0x1D64B => array(0x70)
2165                      ,0x1D64C => array(0x71)
2166                      ,0x1D64D => array(0x72)
2167                      ,0x1D64E => array(0x73)
2168                      ,0x1D64F => array(0x74)
2169                      ,0x1D650 => array(0x75)
2170                      ,0x1D651 => array(0x76)
2171                      ,0x1D652 => array(0x77)
2172                      ,0x1D653 => array(0x78)
2173                      ,0x1D654 => array(0x79)
2174                      ,0x1D655 => array(0x7A)
2175                      ,0x1D670 => array(0x61)
2176                      ,0x1D671 => array(0x62)
2177                      ,0x1D672 => array(0x63)
2178                      ,0x1D673 => array(0x64)
2179                      ,0x1D674 => array(0x65)
2180                      ,0x1D675 => array(0x66)
2181                      ,0x1D676 => array(0x67)
2182                      ,0x1D677 => array(0x68)
2183                      ,0x1D678 => array(0x69)
2184                      ,0x1D679 => array(0x6A)
2185                      ,0x1D67A => array(0x6B)
2186                      ,0x1D67B => array(0x6C)
2187                      ,0x1D67C => array(0x6D)
2188                      ,0x1D67D => array(0x6E)
2189                      ,0x1D67E => array(0x6F)
2190                      ,0x1D67F => array(0x70)
2191                      ,0x1D680 => array(0x71)
2192                      ,0x1D681 => array(0x72)
2193                      ,0x1D682 => array(0x73)
2194                      ,0x1D683 => array(0x74)
2195                      ,0x1D684 => array(0x75)
2196                      ,0x1D685 => array(0x76)
2197                      ,0x1D686 => array(0x77)
2198                      ,0x1D687 => array(0x78)
2199                      ,0x1D688 => array(0x79)
2200                      ,0x1D689 => array(0x7A)
2201                      ,0x1D6A8 => array(0x3B1)
2202                      ,0x1D6A9 => array(0x3B2)
2203                      ,0x1D6AA => array(0x3B3)
2204                      ,0x1D6AB => array(0x3B4)
2205                      ,0x1D6AC => array(0x3B5)
2206                      ,0x1D6AD => array(0x3B6)
2207                      ,0x1D6AE => array(0x3B7)
2208                      ,0x1D6AF => array(0x3B8)
2209                      ,0x1D6B0 => array(0x3B9)
2210                      ,0x1D6B1 => array(0x3BA)
2211                      ,0x1D6B2 => array(0x3BB)
2212                      ,0x1D6B3 => array(0x3BC)
2213                      ,0x1D6B4 => array(0x3BD)
2214                      ,0x1D6B5 => array(0x3BE)
2215                      ,0x1D6B6 => array(0x3BF)
2216                      ,0x1D6B7 => array(0x3C0)
2217                      ,0x1D6B8 => array(0x3C1)
2218                      ,0x1D6B9 => array(0x3B8)
2219                      ,0x1D6BA => array(0x3C3)
2220                      ,0x1D6BB => array(0x3C4)
2221                      ,0x1D6BC => array(0x3C5)
2222                      ,0x1D6BD => array(0x3C6)
2223                      ,0x1D6BE => array(0x3C7)
2224                      ,0x1D6BF => array(0x3C8)
2225                      ,0x1D6C0 => array(0x3C9)
2226                      ,0x1D6D3 => array(0x3C3)
2227                      ,0x1D6E2 => array(0x3B1)
2228                      ,0x1D6E3 => array(0x3B2)
2229                      ,0x1D6E4 => array(0x3B3)
2230                      ,0x1D6E5 => array(0x3B4)
2231                      ,0x1D6E6 => array(0x3B5)
2232                      ,0x1D6E7 => array(0x3B6)
2233                      ,0x1D6E8 => array(0x3B7)
2234                      ,0x1D6E9 => array(0x3B8)
2235                      ,0x1D6EA => array(0x3B9)
2236                      ,0x1D6EB => array(0x3BA)
2237                      ,0x1D6EC => array(0x3BB)
2238                      ,0x1D6ED => array(0x3BC)
2239                      ,0x1D6EE => array(0x3BD)
2240                      ,0x1D6EF => array(0x3BE)
2241                      ,0x1D6F0 => array(0x3BF)
2242                      ,0x1D6F1 => array(0x3C0)
2243                      ,0x1D6F2 => array(0x3C1)
2244                      ,0x1D6F3 => array(0x3B8)
2245                      ,0x1D6F4 => array(0x3C3)
2246                      ,0x1D6F5 => array(0x3C4)
2247                      ,0x1D6F6 => array(0x3C5)
2248                      ,0x1D6F7 => array(0x3C6)
2249                      ,0x1D6F8 => array(0x3C7)
2250                      ,0x1D6F9 => array(0x3C8)
2251                      ,0x1D6FA => array(0x3C9)
2252                      ,0x1D70D => array(0x3C3)
2253                      ,0x1D71C => array(0x3B1)
2254                      ,0x1D71D => array(0x3B2)
2255                      ,0x1D71E => array(0x3B3)
2256                      ,0x1D71F => array(0x3B4)
2257                      ,0x1D720 => array(0x3B5)
2258                      ,0x1D721 => array(0x3B6)
2259                      ,0x1D722 => array(0x3B7)
2260                      ,0x1D723 => array(0x3B8)
2261                      ,0x1D724 => array(0x3B9)
2262                      ,0x1D725 => array(0x3BA)
2263                      ,0x1D726 => array(0x3BB)
2264                      ,0x1D727 => array(0x3BC)
2265                      ,0x1D728 => array(0x3BD)
2266                      ,0x1D729 => array(0x3BE)
2267                      ,0x1D72A => array(0x3BF)
2268                      ,0x1D72B => array(0x3C0)
2269                      ,0x1D72C => array(0x3C1)
2270                      ,0x1D72D => array(0x3B8)
2271                      ,0x1D72E => array(0x3C3)
2272                      ,0x1D72F => array(0x3C4)
2273                      ,0x1D730 => array(0x3C5)
2274                      ,0x1D731 => array(0x3C6)
2275                      ,0x1D732 => array(0x3C7)
2276                      ,0x1D733 => array(0x3C8)
2277                      ,0x1D734 => array(0x3C9)
2278                      ,0x1D747 => array(0x3C3)
2279                      ,0x1D756 => array(0x3B1)
2280                      ,0x1D757 => array(0x3B2)
2281                      ,0x1D758 => array(0x3B3)
2282                      ,0x1D759 => array(0x3B4)
2283                      ,0x1D75A => array(0x3B5)
2284                      ,0x1D75B => array(0x3B6)
2285                      ,0x1D75C => array(0x3B7)
2286                      ,0x1D75D => array(0x3B8)
2287                      ,0x1D75E => array(0x3B9)
2288                      ,0x1D75F => array(0x3BA)
2289                      ,0x1D760 => array(0x3BB)
2290                      ,0x1D761 => array(0x3BC)
2291                      ,0x1D762 => array(0x3BD)
2292                      ,0x1D763 => array(0x3BE)
2293                      ,0x1D764 => array(0x3BF)
2294                      ,0x1D765 => array(0x3C0)
2295                      ,0x1D766 => array(0x3C1)
2296                      ,0x1D767 => array(0x3B8)
2297                      ,0x1D768 => array(0x3C3)
2298                      ,0x1D769 => array(0x3C4)
2299                      ,0x1D76A => array(0x3C5)
2300                      ,0x1D76B => array(0x3C6)
2301                      ,0x1D76C => array(0x3C7)
2302                      ,0x1D76D => array(0x3C8)
2303                      ,0x1D76E => array(0x3C9)
2304                      ,0x1D781 => array(0x3C3)
2305                      ,0x1D790 => array(0x3B1)
2306                      ,0x1D791 => array(0x3B2)
2307                      ,0x1D792 => array(0x3B3)
2308                      ,0x1D793 => array(0x3B4)
2309                      ,0x1D794 => array(0x3B5)
2310                      ,0x1D795 => array(0x3B6)
2311                      ,0x1D796 => array(0x3B7)
2312                      ,0x1D797 => array(0x3B8)
2313                      ,0x1D798 => array(0x3B9)
2314                      ,0x1D799 => array(0x3BA)
2315                      ,0x1D79A => array(0x3BB)
2316                      ,0x1D79B => array(0x3BC)
2317                      ,0x1D79C => array(0x3BD)
2318                      ,0x1D79D => array(0x3BE)
2319                      ,0x1D79E => array(0x3BF)
2320                      ,0x1D79F => array(0x3C0)
2321                      ,0x1D7A0 => array(0x3C1)
2322                      ,0x1D7A1 => array(0x3B8)
2323                      ,0x1D7A2 => array(0x3C3)
2324                      ,0x1D7A3 => array(0x3C4)
2325                      ,0x1D7A4 => array(0x3C5)
2326                      ,0x1D7A5 => array(0x3C6)
2327                      ,0x1D7A6 => array(0x3C7)
2328                      ,0x1D7A7 => array(0x3C8)
2329                      ,0x1D7A8 => array(0x3C9)
2330                      ,0x1D7BB => array(0x3C3)
2331                      ,0x3F9   => array(0x3C3)
2332                      ,0x1D2C  => array(0x61)
2333                      ,0x1D2D  => array(0xE6)
2334                      ,0x1D2E  => array(0x62)
2335                      ,0x1D30  => array(0x64)
2336                      ,0x1D31  => array(0x65)
2337                      ,0x1D32  => array(0x1DD)
2338                      ,0x1D33  => array(0x67)
2339                      ,0x1D34  => array(0x68)
2340                      ,0x1D35  => array(0x69)
2341                      ,0x1D36  => array(0x6A)
2342                      ,0x1D37  => array(0x6B)
2343                      ,0x1D38  => array(0x6C)
2344                      ,0x1D39  => array(0x6D)
2345                      ,0x1D3A  => array(0x6E)
2346                      ,0x1D3C  => array(0x6F)
2347                      ,0x1D3D  => array(0x223)
2348                      ,0x1D3E  => array(0x70)
2349                      ,0x1D3F  => array(0x72)
2350                      ,0x1D40  => array(0x74)
2351                      ,0x1D41  => array(0x75)
2352                      ,0x1D42  => array(0x77)
2353                      ,0x213B  => array(0x66, 0x61, 0x78)
2354                      ,0x3250  => array(0x70, 0x74, 0x65)
2355                      ,0x32CC  => array(0x68, 0x67)
2356                      ,0x32CE  => array(0x65, 0x76)
2357                      ,0x32CF  => array(0x6C, 0x74, 0x64)
2358                      ,0x337A  => array(0x69, 0x75)
2359                      ,0x33DE  => array(0x76, 0x2215, 0x6D)
2360                      ,0x33DF  => array(0x61, 0x2215, 0x6D)
2361                      )
2362              ,'norm_combcls' => array
2363                      (0x334   => 1
2364                      ,0x335   => 1
2365                      ,0x336   => 1
2366                      ,0x337   => 1
2367                      ,0x338   => 1
2368                      ,0x93C   => 7
2369                      ,0x9BC   => 7
2370                      ,0xA3C   => 7
2371                      ,0xABC   => 7
2372                      ,0xB3C   => 7
2373                      ,0xCBC   => 7
2374                      ,0x1037  => 7
2375                      ,0x3099  => 8
2376                      ,0x309A  => 8
2377                      ,0x94D   => 9
2378                      ,0x9CD   => 9
2379                      ,0xA4D   => 9
2380                      ,0xACD   => 9
2381                      ,0xB4D   => 9
2382                      ,0xBCD   => 9
2383                      ,0xC4D   => 9
2384                      ,0xCCD   => 9
2385                      ,0xD4D   => 9
2386                      ,0xDCA   => 9
2387                      ,0xE3A   => 9
2388                      ,0xF84   => 9
2389                      ,0x1039  => 9
2390                      ,0x1714  => 9
2391                      ,0x1734  => 9
2392                      ,0x17D2  => 9
2393                      ,0x5B0   => 10
2394                      ,0x5B1   => 11
2395                      ,0x5B2   => 12
2396                      ,0x5B3   => 13
2397                      ,0x5B4   => 14
2398                      ,0x5B5   => 15
2399                      ,0x5B6   => 16
2400                      ,0x5B7   => 17
2401                      ,0x5B8   => 18
2402                      ,0x5B9   => 19
2403                      ,0x5BB   => 20
2404                      ,0x5Bc   => 21
2405                      ,0x5BD   => 22
2406                      ,0x5BF   => 23
2407                      ,0x5C1   => 24
2408                      ,0x5C2   => 25
2409                      ,0xFB1E  => 26
2410                      ,0x64B   => 27
2411                      ,0x64C   => 28
2412                      ,0x64D   => 29
2413                      ,0x64E   => 30
2414                      ,0x64F   => 31
2415                      ,0x650   => 32
2416                      ,0x651   => 33
2417                      ,0x652   => 34
2418                      ,0x670   => 35
2419                      ,0x711   => 36
2420                      ,0xC55   => 84
2421                      ,0xC56   => 91
2422                      ,0xE38   => 103
2423                      ,0xE39   => 103
2424                      ,0xE48   => 107
2425                      ,0xE49   => 107
2426                      ,0xE4A   => 107
2427                      ,0xE4B   => 107
2428                      ,0xEB8   => 118
2429                      ,0xEB9   => 118
2430                      ,0xEC8   => 122
2431                      ,0xEC9   => 122
2432                      ,0xECA   => 122
2433                      ,0xECB   => 122
2434                      ,0xF71   => 129
2435                      ,0xF72   => 130
2436                      ,0xF7A   => 130
2437                      ,0xF7B   => 130
2438                      ,0xF7C   => 130
2439                      ,0xF7D   => 130
2440                      ,0xF80   => 130
2441                      ,0xF74   => 132
2442                      ,0x321   => 202
2443                      ,0x322   => 202
2444                      ,0x327   => 202
2445                      ,0x328   => 202
2446                      ,0x31B   => 216
2447                      ,0xF39   => 216
2448                      ,0x1D165 => 216
2449                      ,0x1D166 => 216
2450                      ,0x1D16E => 216
2451                      ,0x1D16F => 216
2452                      ,0x1D170 => 216
2453                      ,0x1D171 => 216
2454                      ,0x1D172 => 216
2455                      ,0x302A  => 218
2456                      ,0x316   => 220
2457                      ,0x317   => 220
2458                      ,0x318   => 220
2459                      ,0x319   => 220
2460                      ,0x31C   => 220
2461                      ,0x31D   => 220
2462                      ,0x31E   => 220
2463                      ,0x31F   => 220
2464                      ,0x320   => 220
2465                      ,0x323   => 220
2466                      ,0x324   => 220
2467                      ,0x325   => 220
2468                      ,0x326   => 220
2469                      ,0x329   => 220
2470                      ,0x32A   => 220
2471                      ,0x32B   => 220
2472                      ,0x32C   => 220
2473                      ,0x32D   => 220
2474                      ,0x32E   => 220
2475                      ,0x32F   => 220
2476                      ,0x330   => 220
2477                      ,0x331   => 220
2478                      ,0x332   => 220
2479                      ,0x333   => 220
2480                      ,0x339   => 220
2481                      ,0x33A   => 220
2482                      ,0x33B   => 220
2483                      ,0x33C   => 220
2484                      ,0x347   => 220
2485                      ,0x348   => 220
2486                      ,0x349   => 220
2487                      ,0x34D   => 220
2488                      ,0x34E   => 220
2489                      ,0x353   => 220
2490                      ,0x354   => 220
2491                      ,0x355   => 220
2492                      ,0x356   => 220
2493                      ,0x591   => 220
2494                      ,0x596   => 220
2495                      ,0x59B   => 220
2496                      ,0x5A3   => 220
2497                      ,0x5A4   => 220
2498                      ,0x5A5   => 220
2499                      ,0x5A6   => 220
2500                      ,0x5A7   => 220
2501                      ,0x5AA   => 220
2502                      ,0x655   => 220
2503                      ,0x656   => 220
2504                      ,0x6E3   => 220
2505                      ,0x6EA   => 220
2506                      ,0x6ED   => 220
2507                      ,0x731   => 220
2508                      ,0x734   => 220
2509                      ,0x737   => 220
2510                      ,0x738   => 220
2511                      ,0x739   => 220
2512                      ,0x73B   => 220
2513                      ,0x73C   => 220
2514                      ,0x73E   => 220
2515                      ,0x742   => 220
2516                      ,0x744   => 220
2517                      ,0x746   => 220
2518                      ,0x748   => 220
2519                      ,0x952   => 220
2520                      ,0xF18   => 220
2521                      ,0xF19   => 220
2522                      ,0xF35   => 220
2523                      ,0xF37   => 220
2524                      ,0xFC6   => 220
2525                      ,0x193B  => 220
2526                      ,0x20E8  => 220
2527                      ,0x1D17B => 220
2528                      ,0x1D17C => 220
2529                      ,0x1D17D => 220
2530                      ,0x1D17E => 220
2531                      ,0x1D17F => 220
2532                      ,0x1D180 => 220
2533                      ,0x1D181 => 220
2534                      ,0x1D182 => 220
2535                      ,0x1D18A => 220
2536                      ,0x1D18B => 220
2537                      ,0x59A   => 222
2538                      ,0x5AD   => 222
2539                      ,0x1929  => 222
2540                      ,0x302D  => 222
2541                      ,0x302E  => 224
2542                      ,0x302F  => 224
2543                      ,0x1D16D => 226
2544                      ,0x5AE   => 228
2545                      ,0x18A9  => 228
2546                      ,0x302B  => 228
2547                      ,0x300   => 230
2548                      ,0x301   => 230
2549                      ,0x302   => 230
2550                      ,0x303   => 230
2551                      ,0x304   => 230
2552                      ,0x305   => 230
2553                      ,0x306   => 230
2554                      ,0x307   => 230
2555                      ,0x308   => 230
2556                      ,0x309   => 230
2557                      ,0x30A   => 230
2558                      ,0x30B   => 230
2559                      ,0x30C   => 230
2560                      ,0x30D   => 230
2561                      ,0x30E   => 230
2562                      ,0x30F   => 230
2563                      ,0x310   => 230
2564                      ,0x311   => 230
2565                      ,0x312   => 230
2566                      ,0x313   => 230
2567                      ,0x314   => 230
2568                      ,0x33D   => 230
2569                      ,0x33E   => 230
2570                      ,0x33F   => 230
2571                      ,0x340   => 230
2572                      ,0x341   => 230
2573                      ,0x342   => 230
2574                      ,0x343   => 230
2575                      ,0x344   => 230
2576                      ,0x346   => 230
2577                      ,0x34A   => 230
2578                      ,0x34B   => 230
2579                      ,0x34C   => 230
2580                      ,0x350   => 230
2581                      ,0x351   => 230
2582                      ,0x352   => 230
2583                      ,0x357   => 230
2584                      ,0x363   => 230
2585                      ,0x364   => 230
2586                      ,0x365   => 230
2587                      ,0x366   => 230
2588                      ,0x367   => 230
2589                      ,0x368   => 230
2590                      ,0x369   => 230
2591                      ,0x36A   => 230
2592                      ,0x36B   => 230
2593                      ,0x36C   => 230
2594                      ,0x36D   => 230
2595                      ,0x36E   => 230
2596                      ,0x36F   => 230
2597                      ,0x483   => 230
2598                      ,0x484   => 230
2599                      ,0x485   => 230
2600                      ,0x486   => 230
2601                      ,0x592   => 230
2602                      ,0x593   => 230
2603                      ,0x594   => 230
2604                      ,0x595   => 230
2605                      ,0x597   => 230
2606                      ,0x598   => 230
2607                      ,0x599   => 230
2608                      ,0x59C   => 230
2609                      ,0x59D   => 230
2610                      ,0x59E   => 230
2611                      ,0x59F   => 230
2612                      ,0x5A0   => 230
2613                      ,0x5A1   => 230
2614                      ,0x5A8   => 230
2615                      ,0x5A9   => 230
2616                      ,0x5AB   => 230
2617                      ,0x5AC   => 230
2618                      ,0x5AF   => 230
2619                      ,0x5C4   => 230
2620                      ,0x610   => 230
2621                      ,0x611   => 230
2622                      ,0x612   => 230
2623                      ,0x613   => 230
2624                      ,0x614   => 230
2625                      ,0x615   => 230
2626                      ,0x653   => 230
2627                      ,0x654   => 230
2628                      ,0x657   => 230
2629                      ,0x658   => 230
2630                      ,0x6D6   => 230
2631                      ,0x6D7   => 230
2632                      ,0x6D8   => 230
2633                      ,0x6D9   => 230
2634                      ,0x6DA   => 230
2635                      ,0x6DB   => 230
2636                      ,0x6DC   => 230
2637                      ,0x6DF   => 230
2638                      ,0x6E0   => 230
2639                      ,0x6E1   => 230
2640                      ,0x6E2   => 230
2641                      ,0x6E4   => 230
2642                      ,0x6E7   => 230
2643                      ,0x6E8   => 230
2644                      ,0x6EB   => 230
2645                      ,0x6EC   => 230
2646                      ,0x730   => 230
2647                      ,0x732   => 230
2648                      ,0x733   => 230
2649                      ,0x735   => 230
2650                      ,0x736   => 230
2651                      ,0x73A   => 230
2652                      ,0x73D   => 230
2653                      ,0x73F   => 230
2654                      ,0x740   => 230
2655                      ,0x741   => 230
2656                      ,0x743   => 230
2657                      ,0x745   => 230
2658                      ,0x747   => 230
2659                      ,0x749   => 230
2660                      ,0x74A   => 230
2661                      ,0x951   => 230
2662                      ,0x953   => 230
2663                      ,0x954   => 230
2664                      ,0xF82   => 230
2665                      ,0xF83   => 230
2666                      ,0xF86   => 230
2667                      ,0xF87   => 230
2668                      ,0x170D  => 230
2669                      ,0x193A  => 230
2670                      ,0x20D0  => 230
2671                      ,0x20D1  => 230
2672                      ,0x20D4  => 230
2673                      ,0x20D5  => 230
2674                      ,0x20D6  => 230
2675                      ,0x20D7  => 230
2676                      ,0x20DB  => 230
2677                      ,0x20DC  => 230
2678                      ,0x20E1  => 230
2679                      ,0x20E7  => 230
2680                      ,0x20E9  => 230
2681                      ,0xFE20  => 230
2682                      ,0xFE21  => 230
2683                      ,0xFE22  => 230
2684                      ,0xFE23  => 230
2685                      ,0x1D185 => 230
2686                      ,0x1D186 => 230
2687                      ,0x1D187 => 230
2688                      ,0x1D189 => 230
2689                      ,0x1D188 => 230
2690                      ,0x1D1AA => 230
2691                      ,0x1D1AB => 230
2692                      ,0x1D1AC => 230
2693                      ,0x1D1AD => 230
2694                      ,0x315   => 232
2695                      ,0x31A   => 232
2696                      ,0x302C  => 232
2697                      ,0x35F   => 233
2698                      ,0x362   => 233
2699                      ,0x35D   => 234
2700                      ,0x35E   => 234
2701                      ,0x360   => 234
2702                      ,0x361   => 234
2703                      ,0x345   => 240
2704                      )
2705              );
2706  }
2707  ?>

title

Description

title

Description

title

Description

title

title

Body